diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9f34c7f5e..ff372f061 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -106,43 +106,6 @@ jobs: name: docker-database-production_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD PRODUCTION COMMUNITY SERVER ############################## - ############################################################################## - build_production_community_server: - name: Docker Build Production - Community Server - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # COMMUNITY SERVER ####################################################### - ########################################################################## - - name: Community Server | Build `production` image - run: | - docker build -t "gradido/community_server:latest" -t "gradido/community_server:production" -t "gradido/community_server:${VERSION}" -t "gradido/community_server:${BUILD_VERSION}" -f ./community_server/Dockerfile ./ - docker save "gradido/community_server" > /tmp/community_server.tar - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: docker-community-server-production - path: /tmp/community_server.tar - ############################################################################## # JOB: DOCKER BUILD PRODUCTION MARIADB ####################################### ############################################################################## @@ -223,7 +186,7 @@ jobs: upload_to_dockerhub: name: Upload to Dockerhub runs-on: ubuntu-latest - needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_community_server, build_production_mariadb, build_production_nginx] + needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_mariadb, build_production_nginx] env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} @@ -257,13 +220,6 @@ jobs: path: /tmp - name: Load Docker Image run: docker load < /tmp/database_up.tar - - name: Download Docker Image (Community Server) - uses: actions/download-artifact@v2 - with: - name: docker-community-server-production - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/community_server.tar - name: Download Docker Image (MariaDB) uses: actions/download-artifact@v2 with: @@ -289,8 +245,6 @@ jobs: run: docker push --all-tags gradido/backend - name: Push database run: docker push --all-tags gradido/database - - name: Push community_server - run: docker push --all-tags gradido/community_server - name: Push MariaDB run: docker push --all-tags gradido/mariadb - name: Push Nginx diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 383735507..c57da1964 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -107,32 +107,6 @@ jobs: name: docker-database-test_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD TEST COMMUNITY SERVER #################################### - ############################################################################## - build_test_community_server: - name: Docker Build Test - Community Server - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # BUILD COMMUNITY SERVER DOCKER IMAGE #################################### - ########################################################################## - - name: community server | Build `test` image - run: | - docker build -t "gradido/community_server:test" -f ./community_server/Dockerfile ./ - docker save "gradido/community_server:test" > /tmp/community_server.tar - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: docker-community-server-test - path: /tmp/community_server.tar - ############################################################################## # JOB: DOCKER BUILD TEST MARIADB ############################################# ############################################################################## @@ -509,73 +483,6 @@ jobs: min_coverage: 38 token: ${{ github.token }} - ############################################################################## - # JOB: UNIT TEST COMMUNITY-SERVER ########################################### - ############################################################################## - unit_test_community_server: - name: Unit tests - Community Server - runs-on: ubuntu-latest - needs: [build_test_community_server] - services: - mariadb: - image: gradido/mariadb:test - env: - MARIADB_ALLOW_EMPTY_PASSWORD: 1 - MARIADB_USER: root - options: --health-cmd="mysqladmin ping" - --health-interval=5s - --health-timeout=5s - --health-retries=3 - steps: - - name: get mariadb container id - run: echo "::set-output name=id::$(docker container ls | grep mariadb | awk '{ print $1 }')" - id: mariadb_container - - name: get automatic created network - run: echo "::set-output name=id::$(docker network ls | grep github_network | awk '{ print $1 }')" - id: network - - name: Start database migration - run: docker run --network ${{ steps.network.outputs.id }} --name=database --env NODE_ENV=production --env DB_HOST=mariadb --env DB_DATABASE=gradido_community_test -d gradido/database:production_up - - name: get database migration container id - run: echo "::set-output name=id::$(docker container ls | grep database | awk '{ print $1 }')" - id: database_container - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # DOWNLOAD DOCKER IMAGE ################################################## - ########################################################################## - - name: Download Docker Image (Community-Server) - uses: actions/download-artifact@v2 - with: - name: docker-community-server-test - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/community_server.tar - - name: check mariadb - run: docker logs ${{ steps.mariadb_container.outputs.id }} - - name: check migration - run: docker logs ${{ steps.database_container.outputs.id }} - ########################################################################## - # UNIT TESTS BACKEND COMMUNITY-SERVER ####################################### - ########################################################################## - - name: community server | Unit tests - run: | - docker run --network ${{ steps.network.outputs.id }} -v ~/coverage:/var/www/cakephp/webroot/coverage gradido/community_server:test - cp -r ~/coverage ./coverage - ######################################################################### - # COVERAGE CHECK BACKEND COMMUNITY-SERVER #################################### - ########################################################################## - - name: backend community | Coverage check - uses: einhornimmond/coverage-check-action@master - with: - report_name: Coverage Backend Community - type: phpunit - result_path: ./coverage/coverage.info - min_coverage: 10 - token: ${{ github.token }} - ########################################################################## # DATABASE MIGRATION TEST UP + RESET ##################################### ########################################################################## diff --git a/.gitmodules b/.gitmodules index 2bad2a541..8b1378917 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1 @@ -[submodule "community_server/src/protobuf"] - path = community_server/src/protobuf - url = https://github.com/gradido/gradido_protocol.git + diff --git a/README.md b/README.md index 16e71bca9..e97055a78 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,6 @@ docker-compose -f docker-compose.yml up - [frontend](./frontend) Wallet frontend - [backend](./backend) GraphQL & Business logic backend - [mariadb](./mariadb) Database backend -- [community_server](./community_server/) Business logic backend (will be removed) We are currently restructuring the service to reduce dependencies and unify business logic into one place. Furthermore the databases defined for each service will be unified into one. diff --git a/community_server/.gitignore b/community_server/.gitignore deleted file mode 100644 index 633978598..000000000 --- a/community_server/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -config/app.php -logs/ -src/GPBMetadata/ -tmp/ -vendor/ -websrc/node_modules/ -websrc/package-lock.json -mithril_client/ -websrc/src/less-files.css - diff --git a/community_server/.gitmodules b/community_server/.gitmodules deleted file mode 100644 index 8499eaac6..000000000 --- a/community_server/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "src/protobuf"] - path = src/protobuf - url = git@github.com:gradido/gradido_protocol.git diff --git a/community_server/Dockerfile b/community_server/Dockerfile deleted file mode 100644 index c553137c6..000000000 --- a/community_server/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -FROM phpdockerio/php74-fpm as community_server - -# install php fpm -RUN apt-get update \ - && apt-get -y --no-install-recommends install curl unzip php7.4-curl php7.4-fpm php7.4-mbstring php7.4-intl php7.4-xml php7.4-pdo php7.4-mysql php7.4-xdebug \ - && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* - -WORKDIR /var/www/cakephp -RUN mkdir logs && mkdir tmp && chmod 777 logs && chmod 777 tmp -COPY ./community_server/ . -COPY ./configs/community_server/app.php ./config/ - -RUN composer update -RUN composer dump-autoload - -######### special for code coverage and testing -FROM community_server as test - - -RUN apt-get update \ - && apt-get -y --no-install-recommends install php7.4-xdebug \ - && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* - - -ENV XDEBUG_MODE=coverage -#RUN composer require --dev rregeer/phpunit-coverage-check - -#CMD ./vendor/bin/phpunit --coverage-clover=./webroot/coverage/clover.xml -CMD ./vendor/bin/phpunit --coverage-text=./webroot/coverage/coverage.info - diff --git a/community_server/README.md b/community_server/README.md deleted file mode 100644 index 61f89d306..000000000 --- a/community_server/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# CakePHP Application Skeleton - -[![Build Status](https://img.shields.io/travis/cakephp/app/master.svg?style=flat-square)](https://travis-ci.org/cakephp/app) -[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/app.svg?style=flat-square)](https://packagist.org/packages/cakephp/app) - -A skeleton for creating applications with [CakePHP](https://cakephp.org) 3.x. - -The framework source code can be found here: [cakephp/cakephp](https://github.com/cakephp/cakephp). - -## Installation - -1. Download [Composer](https://getcomposer.org/doc/00-intro.md) or update `composer self-update`. -2. Run `php composer.phar create-project --prefer-dist cakephp/app [app_name]`. - -If Composer is installed globally, run - -```bash -composer create-project --prefer-dist cakephp/app -``` - -In case you want to use a custom app dir name (e.g. `/myapp/`): - -```bash -composer create-project --prefer-dist cakephp/app myapp -``` - -You can now either use your machine's webserver to view the default home page, or start -up the built-in webserver with: - -```bash -bin/cake server -p 8765 -``` - -Then visit `http://localhost:8765` to see the welcome page. - -## Update - -Since this skeleton is a starting point for your application and various files -would have been modified as per your needs, there isn't a way to provide -automated upgrades, so you have to do any updates manually. - -## Configuration - -Read and edit `config/app.php` and setup the `'Datasources'` and any other -configuration relevant for your application. - -## Layout - -The app skeleton uses a subset of [Foundation](http://foundation.zurb.com/) (v5) CSS -framework by default. You can, however, replace it with any other library or -custom styles. diff --git a/community_server/bin/cake b/community_server/bin/cake deleted file mode 100755 index 4b696c883..000000000 --- a/community_server/bin/cake +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env sh -################################################################################ -# -# Cake is a shell script for invoking CakePHP shell commands -# -# CakePHP(tm) : Rapid Development Framework (https://cakephp.org) -# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# -# @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# @link https://cakephp.org CakePHP(tm) Project -# @since 1.2.0 -# @license https://opensource.org/licenses/mit-license.php MIT License -# -################################################################################ - -# Canonicalize by following every symlink of the given name recursively -canonicalize() { - NAME="$1" - if [ -f "$NAME" ] - then - DIR=$(dirname -- "$NAME") - NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME") - fi - while [ -h "$NAME" ]; do - DIR=$(dirname -- "$NAME") - SYM=$(readlink "$NAME") - NAME=$(cd "$DIR" > /dev/null && cd "$(dirname -- "$SYM")" > /dev/null && pwd)/$(basename -- "$SYM") - done - echo "$NAME" -} - -# Find a CLI version of PHP -findCliPhp() { - for TESTEXEC in php php-cli /usr/local/bin/php - do - SAPI=$(echo "" | $TESTEXEC 2>/dev/null) - if [ "$SAPI" = "cli" ] - then - echo $TESTEXEC - return - fi - done - echo "Failed to find a CLI version of PHP; falling back to system standard php executable" >&2 - echo "php"; -} - -# If current path is a symlink, resolve to real path -realname="$0" -if [ -L "$realname" ] -then - realname=$(readlink -f "$0") -fi - -CONSOLE=$(dirname -- "$(canonicalize "$realname")") -APP=$(dirname "$CONSOLE") - -# If your CLI PHP is somewhere that this doesn't find, you can define a PHP environment -# variable with the correct path in it. -if [ -z "$PHP" ] -then - PHP=$(findCliPhp) -fi - -if [ "$(basename "$realname")" != 'cake' ] -then - exec "$PHP" "$CONSOLE"/cake.php "$(basename "$realname")" "$@" -else - exec "$PHP" "$CONSOLE"/cake.php "$@" -fi - -exit diff --git a/community_server/bin/cake.bat b/community_server/bin/cake.bat deleted file mode 100644 index ad1378229..000000000 --- a/community_server/bin/cake.bat +++ /dev/null @@ -1,27 +0,0 @@ -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Cake is a Windows batch script for invoking CakePHP shell commands -:: -:: CakePHP(tm) : Rapid Development Framework (https://cakephp.org) -:: Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -:: -:: Licensed under The MIT License -:: Redistributions of files must retain the above copyright notice. -:: -:: @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -:: @link https://cakephp.org CakePHP(tm) Project -:: @since 2.0.0 -:: @license https://opensource.org/licenses/mit-license.php MIT License -:: -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -@echo off - -SET app=%0 -SET lib=%~dp0 - -php "%lib%cake.php" %* - -echo. - -exit /B %ERRORLEVEL% diff --git a/community_server/bin/cake.php b/community_server/bin/cake.php deleted file mode 100644 index 320ee3643..000000000 --- a/community_server/bin/cake.php +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/php -q -run($argv)); diff --git a/community_server/composer.json b/community_server/composer.json deleted file mode 100644 index dbd031048..000000000 --- a/community_server/composer.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "cakephp/app", - "description": "CakePHP skeleton app", - "homepage": "https://cakephp.org", - "type": "project", - "license": "MIT", - "require": { - "php": ">=5.6", - "cakephp/cakephp": "3.9.*", - "cakephp/plugin-installer": "^1.0", - "datto/json-rpc": "^6.0", - "google/protobuf": "v3.10.*", - "mobiledetect/mobiledetectlib": "2.*", - "paragonie/sodium_compat": "^1.11", - "tuupola/base58": "^2.0" - }, - "require-dev": { - "cakephp/bake": "^1.9.0", - "cakephp/cakephp-codesniffer": "^3.0", - "cakephp/debug_kit": "^3.17.0", - "josegonzalez/dotenv": "3.*", - "phpunit/phpunit": "^5.7|^6.0", - "psy/psysh": "@stable" - }, - "suggest": { - "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.", - "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility." - }, - "autoload": { - "psr-4": { - "App\\": "src/", - "" : "src/", - "GPBMetadata\\Gradido\\": "src/Model/Messages/GPBMetadata/Gradido/", - "Proto\\Gradido\\" : "src/Model/Messages/Proto/Gradido/" - } - }, - "autoload-dev": { - "psr-4": { - "App\\Test\\": "tests/", - "Cake\\Test\\": "vendor/cakephp/cakephp/tests/" - } - }, - "scripts": { - "post-install-cmd": "App\\Console\\Installer::postInstall", - "post-create-project-cmd": "App\\Console\\Installer::postInstall", - "check": [ - "@test", - "@cs-check" - ], - "cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/", - "cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/", - "test": "phpunit --colors=always" - }, - "prefer-stable": true, - "config": { - "sort-packages": true - } -} diff --git a/community_server/composer.lock b/community_server/composer.lock deleted file mode 100644 index 41674bb88..000000000 --- a/community_server/composer.lock +++ /dev/null @@ -1,5577 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "8a3d1923190a6c9d6066359057844457", - "packages": [ - { - "name": "aura/intl", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/auraphp/Aura.Intl.git", - "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/auraphp/Aura.Intl/zipball/7fce228980b19bf4dee2d7bbd6202a69b0dde926", - "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926", - "shasum": "" - }, - "require": { - "php": "^5.6|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Aura\\Intl\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aura.Intl Contributors", - "homepage": "https://github.com/auraphp/Aura.Intl/contributors" - } - ], - "description": "The Aura Intl package provides internationalization tools, specifically message translation.", - "homepage": "https://github.com/auraphp/Aura.Intl", - "keywords": [ - "g11n", - "globalization", - "i18n", - "internationalization", - "intl", - "l10n", - "localization" - ], - "support": { - "issues": "https://github.com/auraphp/Aura.Intl/issues", - "source": "https://github.com/auraphp/Aura.Intl/tree/3.x" - }, - "time": "2017-01-20T05:00:11+00:00" - }, - { - "name": "cakephp/cakephp", - "version": "3.9.8", - "source": { - "type": "git", - "url": "https://github.com/cakephp/cakephp.git", - "reference": "b0e43e810132a8b1f66cf89b038b54c090811c32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/cakephp/zipball/b0e43e810132a8b1f66cf89b038b54c090811c32", - "reference": "b0e43e810132a8b1f66cf89b038b54c090811c32", - "shasum": "" - }, - "require": { - "aura/intl": "^3.0.0", - "cakephp/chronos": "^1.0.1", - "ext-intl": "*", - "ext-mbstring": "*", - "laminas/laminas-diactoros": "^1.4.0", - "paragonie/random_compat": "^1.4|^2.0|9.99.99", - "php": ">=5.6.0,<8.0.0", - "psr/log": "^1.0.0", - "psr/simple-cache": "^1.0.0" - }, - "conflict": { - "phpunit/phpunit": "<5.7" - }, - "replace": { - "cakephp/cache": "self.version", - "cakephp/collection": "self.version", - "cakephp/core": "self.version", - "cakephp/database": "self.version", - "cakephp/datasource": "self.version", - "cakephp/event": "self.version", - "cakephp/filesystem": "self.version", - "cakephp/form": "self.version", - "cakephp/i18n": "self.version", - "cakephp/log": "self.version", - "cakephp/orm": "self.version", - "cakephp/utility": "self.version", - "cakephp/validation": "self.version" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.0", - "cakephp/chronos": "^1.2.1", - "paragonie/csp-builder": "^1.4|^2.3", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "suggest": { - "ext-curl": "To enable more efficient network calls in Http\\Client.", - "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.", - "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()", - "paragonie/csp-builder": "CSP builder, to use the CSP Middleware" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cake\\": "src/" - }, - "files": [ - "src/Core/functions.php", - "src/Collection/functions.php", - "src/I18n/functions.php", - "src/Utility/bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/cakephp/graphs/contributors" - } - ], - "description": "The CakePHP framework", - "homepage": "https://cakephp.org", - "keywords": [ - "conventions over configuration", - "dry", - "form", - "framework", - "mvc", - "orm", - "psr-7", - "rapid-development", - "validation" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp/issues", - "source": "https://github.com/cakephp/cakephp" - }, - "time": "2021-03-10T02:10:31+00:00" - }, - { - "name": "cakephp/chronos", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/chronos.git", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/ba2bab98849e7bf29b02dd634ada49ab36472959", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "athletic/athletic": "~0.1", - "cakephp/cakephp-codesniffer": "^3.0", - "phpbench/phpbench": "@dev", - "phpunit/phpunit": "<6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cake\\Chronos\\": "src/" - }, - "files": [ - "src/carbon_compat.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - }, - { - "name": "The CakePHP Team", - "homepage": "http://cakephp.org" - } - ], - "description": "A simple API extension for DateTime.", - "homepage": "http://cakephp.org", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/chronos/issues", - "source": "https://github.com/cakephp/chronos" - }, - "time": "2019-11-30T02:33:19+00:00" - }, - { - "name": "cakephp/migrations", - "version": "2.4.2", - "source": { - "type": "git", - "url": "https://github.com/cakephp/migrations.git", - "reference": "7fa4f1f8a4cd90df59cd8e3a46958c822abe457e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/migrations/zipball/7fa4f1f8a4cd90df59cd8e3a46958c822abe457e", - "reference": "7fa4f1f8a4cd90df59cd8e3a46958c822abe457e", - "shasum": "" - }, - "require": { - "cakephp/cache": "^3.6.0", - "cakephp/orm": "^3.6.0", - "php": ">=5.6.0", - "robmorgan/phinx": "^0.10.3|^0.11.1" - }, - "require-dev": { - "cakephp/bake": "^1.7.0", - "cakephp/cakephp": "^3.6.0", - "cakephp/cakephp-codesniffer": "^3.0", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "suggest": { - "cakephp/bake": "If you want to generate migrations." - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "Migrations\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/migrations/graphs/contributors" - } - ], - "description": "Database Migration plugin for CakePHP based on Phinx", - "homepage": "https://github.com/cakephp/migrations", - "keywords": [ - "cakephp", - "migrations" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/migrations/issues", - "source": "https://github.com/cakephp/migrations" - }, - "time": "2020-02-05T15:00:43+00:00" - }, - { - "name": "cakephp/plugin-installer", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/cakephp/plugin-installer.git", - "reference": "e27027aa2d3d8ab64452c6817629558685a064cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/e27027aa2d3d8ab64452c6817629558685a064cb", - "reference": "e27027aa2d3d8ab64452c6817629558685a064cb", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.3", - "composer/composer": "^2.0", - "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5 || ^9.3" - }, - "type": "composer-plugin", - "extra": { - "class": "Cake\\Composer\\Plugin" - }, - "autoload": { - "psr-4": { - "Cake\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://cakephp.org" - } - ], - "description": "A composer installer for CakePHP 3.0+ plugins.", - "support": { - "issues": "https://github.com/cakephp/plugin-installer/issues", - "source": "https://github.com/cakephp/plugin-installer/tree/1.3.1" - }, - "time": "2020-10-29T04:00:42+00:00" - }, - { - "name": "datto/json-rpc", - "version": "6.1.0", - "source": { - "type": "git", - "url": "https://github.com/datto/php-json-rpc.git", - "reference": "ad4d735f48d80c6b53f7405e5007d97c996533f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/datto/php-json-rpc/zipball/ad4d735f48d80c6b53f7405e5007d97c996533f6", - "reference": "ad4d735f48d80c6b53f7405e5007d97c996533f6", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Datto\\JsonRpc\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Spencer Mortensen", - "email": "smortensen@datto.com", - "homepage": "http://spencermortensen.com", - "role": "Developer" - } - ], - "description": "Fully unit-tested JSON-RPC 2.0 for PHP", - "homepage": "http://datto.com", - "keywords": [ - "json", - "json-rpc", - "jsonrpc", - "php", - "php-json-rpc", - "rpc" - ], - "support": { - "issues": "https://github.com/datto/php-json-rpc/issues", - "source": "https://github.com/datto/php-json-rpc/tree/6.1.0" - }, - "time": "2020-02-28T23:54:06+00:00" - }, - { - "name": "google/protobuf", - "version": "v3.10.0", - "source": { - "type": "git", - "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "5dffdd2c84112e6c91fd84f92e3df96649426881" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/5dffdd2c84112e6c91fd84f92e3df96649426881", - "reference": "5dffdd2c84112e6c91fd84f92e3df96649426881", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": ">=4.8.0" - }, - "suggest": { - "ext-bcmath": "Need to support JSON deserialization" - }, - "type": "library", - "autoload": { - "psr-4": { - "Google\\Protobuf\\": "src/Google/Protobuf", - "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "proto library for PHP", - "homepage": "https://developers.google.com/protocol-buffers/", - "keywords": [ - "proto" - ], - "support": { - "issues": "https://github.com/protocolbuffers/protobuf-php/issues", - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.10.0" - }, - "time": "2019-10-03T20:08:37+00:00" - }, - { - "name": "laminas/laminas-diactoros", - "version": "1.8.7p2", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6991c1af7c8d2c8efee81b22ba97024781824aaa", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "replace": { - "zendframework/zend-diactoros": "~1.8.7.0" - }, - "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "laminas/laminas-coding-standard": "~1.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-release-1.8": "1.8.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php", - "src/functions/create_uploaded_file.legacy.php", - "src/functions/marshal_headers_from_sapi.legacy.php", - "src/functions/marshal_method_from_sapi.legacy.php", - "src/functions/marshal_protocol_version_from_sapi.legacy.php", - "src/functions/marshal_uri_from_sapi.legacy.php", - "src/functions/normalize_server.legacy.php", - "src/functions/normalize_uploaded_files.legacy.php", - "src/functions/parse_cookie_header.legacy.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-diactoros/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-diactoros/issues", - "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", - "source": "https://github.com/laminas/laminas-diactoros" - }, - "time": "2020-03-23T15:28:28+00:00" - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "support": { - "forum": "https://discourse.laminas.dev/", - "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", - "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", - "source": "https://github.com/laminas/laminas-zendframework-bridge" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2020-09-14T14:23:00+00:00" - }, - { - "name": "mobiledetect/mobiledetectlib", - "version": "2.8.37", - "source": { - "type": "git", - "url": "https://github.com/serbanghita/Mobile-Detect.git", - "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/9841e3c46f5bd0739b53aed8ac677fa712943df7", - "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7", - "shasum": "" - }, - "require": { - "php": ">=5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.35||~5.7" - }, - "type": "library", - "autoload": { - "classmap": [ - "Mobile_Detect.php" - ], - "psr-0": { - "Detection": "namespaced/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Serban Ghita", - "email": "serbanghita@gmail.com", - "homepage": "http://mobiledetect.net", - "role": "Developer" - } - ], - "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.", - "homepage": "https://github.com/serbanghita/Mobile-Detect", - "keywords": [ - "detect mobile devices", - "mobile", - "mobile detect", - "mobile detector", - "php mobile detect" - ], - "support": { - "issues": "https://github.com/serbanghita/Mobile-Detect/issues", - "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.37" - }, - "funding": [ - { - "url": "https://github.com/serbanghita", - "type": "github" - } - ], - "time": "2021-02-19T21:22:57+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2018-07-02T15:55:56+00:00" - }, - { - "name": "paragonie/sodium_compat", - "version": "v1.14.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3", - "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3", - "shasum": "" - }, - "require": { - "paragonie/random_compat": ">=1", - "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" - }, - "require-dev": { - "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" - }, - "suggest": { - "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", - "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." - }, - "type": "library", - "autoload": { - "files": [ - "autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com" - }, - { - "name": "Frank Denis", - "email": "jedisct1@pureftpd.org" - } - ], - "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", - "keywords": [ - "Authentication", - "BLAKE2b", - "ChaCha20", - "ChaCha20-Poly1305", - "Chapoly", - "Curve25519", - "Ed25519", - "EdDSA", - "Edwards-curve Digital Signature Algorithm", - "Elliptic Curve Diffie-Hellman", - "Poly1305", - "Pure-PHP cryptography", - "RFC 7748", - "RFC 8032", - "Salpoly", - "Salsa20", - "X25519", - "XChaCha20-Poly1305", - "XSalsa20-Poly1305", - "Xchacha20", - "Xsalsa20", - "aead", - "cryptography", - "ecdh", - "elliptic curve", - "elliptic curve cryptography", - "encryption", - "libsodium", - "php", - "public-key cryptography", - "secret-key cryptography", - "side-channel resistant" - ], - "support": { - "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.14.0" - }, - "time": "2020-12-03T16:26:19+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.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 interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.3" - }, - "time": "2020-03-23T09:12:05+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" - }, - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "robmorgan/phinx", - "version": "0.11.7", - "source": { - "type": "git", - "url": "https://github.com/cakephp/phinx.git", - "reference": "3cdde73e0c33c410e076108b3e1603fabb5b330d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/phinx/zipball/3cdde73e0c33c410e076108b3e1603fabb5b330d", - "reference": "3cdde73e0c33c410e076108b3e1603fabb5b330d", - "shasum": "" - }, - "require": { - "cakephp/collection": "^3.7", - "cakephp/database": "^3.7", - "php": ">=5.6", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.0", - "ext-json": "*", - "phpunit/phpunit": ">=5.7,<8.0", - "sebastian/comparator": ">=1.2.3" - }, - "suggest": { - "ext-json": "Install if using JSON configuration format", - "symfony/yaml": "Install if using YAML configuration format" - }, - "bin": [ - "bin/phinx" - ], - "type": "library", - "autoload": { - "psr-4": { - "Phinx\\": "src/Phinx/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Rob Morgan", - "email": "robbym@gmail.com", - "homepage": "https://robmorgan.id.au", - "role": "Lead Developer" - }, - { - "name": "Woody Gilk", - "email": "woody.gilk@gmail.com", - "homepage": "https://shadowhand.me", - "role": "Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Developer" - }, - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/phinx/graphs/contributors", - "role": "Developer" - } - ], - "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", - "homepage": "https://phinx.org", - "keywords": [ - "database", - "database migrations", - "db", - "migrations", - "phinx" - ], - "support": { - "issues": "https://github.com/cakephp/phinx/issues", - "source": "https://github.com/cakephp/phinx/tree/0.11.7" - }, - "time": "2020-05-09T13:59:05+00:00" - }, - { - "name": "symfony/config", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "212d54675bf203ff8aef7d8cee8eecfb72f4a263" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/212d54675bf203ff8aef7d8cee8eecfb72f4a263", - "reference": "212d54675bf203ff8aef7d8cee8eecfb72f4a263", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/filesystem": "^4.4|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/finder": "<4.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v5.2.4" - }, - "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-02-23T23:58:19+00:00" - }, - { - "name": "symfony/console", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/35f039df40a3b335ebf310f244cb242b3a83ac8d", - "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "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" - }, - "conflict": { - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.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" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.2.6" - }, - "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-03-28T09:42:18+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.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": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" - }, - "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": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "8c86a82f51658188119e62cff0a050a12d09836f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c86a82f51658188119e62cff0a050a12d09836f", - "reference": "8c86a82f51658188119e62cff0a050a12d09836f", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.6" - }, - "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-03-28T14:30:26+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" - }, - "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-01-07T16:49:33+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "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 for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" - }, - "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-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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 for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" - }, - "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-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "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 for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" - }, - "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-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" - }, - "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-01-07T16:49:33+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" - }, - "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-01-07T16:49:33+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "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 writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" - }, - "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": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/string", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", - "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.2.6" - }, - "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-03-17T17:12:15+00:00" - }, - { - "name": "symfony/yaml", - "version": "v5.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "298a08ddda623485208506fcee08817807a251dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/298a08ddda623485208506fcee08817807a251dd", - "reference": "298a08ddda623485208506fcee08817807a251dd", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.5" - }, - "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-03-06T07:59:01+00:00" - }, - { - "name": "tuupola/base58", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/tuupola/base58.git", - "reference": "4cd1a3972679946e87c0746f59ff8f0760240b4c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tuupola/base58/zipball/4cd1a3972679946e87c0746f59ff8f0760240b4c", - "reference": "4cd1a3972679946e87c0746f59ff8f0760240b4c", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "overtrue/phplint": "^1.0.0", - "phpbench/phpbench": "^0.13.0", - "phpstan/phpstan": "^0.12.37", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "squizlabs/php_codesniffer": "^3.0" - }, - "suggest": { - "ext-gmp": "GMP extension provides the fastest encoding and decoding." - }, - "type": "library", - "autoload": { - "psr-4": { - "Tuupola\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mika Tuupola", - "email": "tuupola@appelsiini.net", - "homepage": "https://appelsiini.net/", - "role": "Developer" - } - ], - "description": "Base58 encoder and decoder for arbitrary data", - "homepage": "https://github.com/tuupola/base58", - "keywords": [ - "base58" - ], - "support": { - "issues": "https://github.com/tuupola/base58/issues", - "source": "https://github.com/tuupola/base58/tree/2.1.0" - }, - "funding": [ - { - "url": "https://github.com/tuupola", - "type": "github" - } - ], - "time": "2020-09-09T11:38:20+00:00" - } - ], - "packages-dev": [ - { - "name": "ajgl/breakpoint-twig-extension", - "version": "0.3.5", - "source": { - "type": "git", - "url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git", - "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/9875feea0ac4bc3c9f308c62bae4727669d6052a", - "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "twig/twig": "^1.34|^2.0|^3.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.18", - "symfony/framework-bundle": "^2.7|^3.4|^4.4|^5.2", - "symfony/phpunit-bridge": "^4.4|^5.2", - "symfony/twig-bundle": "^2.7|^3.4|^4.4|^5.2" - }, - "suggest": { - "ext-xdebug": "The Xdebug extension is required for the breakpoint to work", - "symfony/framework-bundle": "The framework bundle to integrate the extension into Symfony", - "symfony/twig-bundle": "The twig bundle to integrate the extension into Symfony" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Ajgl\\Twig\\Extension\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Antonio J. García Lagar", - "email": "aj@garcialagar.es", - "homepage": "http://aj.garcialagar.es", - "role": "developer" - } - ], - "description": "Twig extension to set breakpoints", - "homepage": "https://github.com/ajgarlag/AjglBreakpointTwigExtension", - "keywords": [ - "Xdebug", - "breakpoint", - "twig" - ], - "support": { - "issues": "https://github.com/ajgarlag/AjglBreakpointTwigExtension/issues", - "source": "https://github.com/ajgarlag/AjglBreakpointTwigExtension/tree/0.3.5" - }, - "time": "2021-02-08T10:48:05+00:00" - }, - { - "name": "aptoma/twig-markdown", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/aptoma/twig-markdown.git", - "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aptoma/twig-markdown/zipball/64a9c5c7418c08faf91c4410b34bdb65fb25c23d", - "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d", - "shasum": "" - }, - "require": { - "twig/twig": "~1.12" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "erusev/parsedown": "^1.6", - "knplabs/github-api": "~1.2", - "league/commonmark": "~0.5", - "michelf/php-markdown": "~1", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "~0.6" - }, - "suggest": { - "knplabs/github-api": "Needed for using GitHub's Markdown engine provided through their API.", - "michelf/php-markdown": "Original Markdown engine with MarkdownExtra." - }, - "type": "library", - "autoload": { - "psr-0": { - "Aptoma": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joris Berthelot", - "email": "joris@berthelot.tel" - }, - { - "name": "Gunnar Lium", - "email": "gunnar@aptoma.com" - } - ], - "description": "Twig extension to work with Markdown content", - "keywords": [ - "markdown", - "twig" - ], - "support": { - "issues": "https://github.com/aptoma/twig-markdown/issues", - "source": "https://github.com/aptoma/twig-markdown/tree/master" - }, - "time": "2015-10-23T20:27:08+00:00" - }, - { - "name": "asm89/twig-cache-extension", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/asm89/twig-cache-extension.git", - "reference": "13787226956ec766f4770722082288097aebaaf3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asm89/twig-cache-extension/zipball/13787226956ec766f4770722082288097aebaaf3", - "reference": "13787226956ec766f4770722082288097aebaaf3", - "shasum": "" - }, - "require": { - "php": ">=5.3.2", - "twig/twig": "^1.0|^2.0" - }, - "require-dev": { - "doctrine/cache": "~1.0", - "phpunit/phpunit": "^5.0 || ^4.8.10" - }, - "suggest": { - "psr/cache-implementation": "To make use of PSR-6 cache implementation via PsrCacheAdapter." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander", - "email": "iam.asm89@gmail.com" - } - ], - "description": "Cache fragments of templates directly within Twig.", - "homepage": "https://github.com/asm89/twig-cache-extension", - "keywords": [ - "cache", - "extension", - "twig" - ], - "support": { - "issues": "https://github.com/asm89/twig-cache-extension/issues", - "source": "https://github.com/asm89/twig-cache-extension/tree/1.4.0" - }, - "abandoned": "twig/cache-extension", - "time": "2020-01-01T20:47:37+00:00" - }, - { - "name": "cakephp/bake", - "version": "1.12.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/bake.git", - "reference": "33e8ee8419ba36c13fa4074c208c93352b5530cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/bake/zipball/33e8ee8419ba36c13fa4074c208c93352b5530cf", - "reference": "33e8ee8419ba36c13fa4074c208c93352b5530cf", - "shasum": "" - }, - "require": { - "cakephp/cakephp": "^3.8.0", - "cakephp/plugin-installer": "^1.0", - "php": ">=5.6.0", - "wyrihaximus/twig-view": "^4.3.7" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^3.0", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "Bake\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/bake/graphs/contributors" - } - ], - "description": "Bake plugin for CakePHP 3", - "homepage": "https://github.com/cakephp/bake", - "keywords": [ - "bake", - "cakephp" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/bake/issues", - "source": "https://github.com/cakephp/bake" - }, - "time": "2019-12-07T20:34:43+00:00" - }, - { - "name": "cakephp/cakephp-codesniffer", - "version": "3.3.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/cakephp-codesniffer.git", - "reference": "7998a191e787fd5b68cb635d7050cb0d7b55e1a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/7998a191e787fd5b68cb635d7050cb0d7b55e1a1", - "reference": "7998a191e787fd5b68cb635d7050cb0d7b55e1a1", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "squizlabs/php_codesniffer": "^3.0.0" - }, - "require-dev": { - "phpunit/phpunit": "<6.0" - }, - "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "CakePHP\\": "CakePHP/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/cakephp-codesniffer/graphs/contributors" - } - ], - "description": "CakePHP CodeSniffer Standards", - "homepage": "https://cakephp.org", - "keywords": [ - "codesniffer", - "framework" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp-codesniffer/issues", - "source": "https://github.com/cakephp/cakephp-codesniffer" - }, - "time": "2019-12-07T03:02:34+00:00" - }, - { - "name": "cakephp/debug_kit", - "version": "3.22.4", - "source": { - "type": "git", - "url": "https://github.com/cakephp/debug_kit.git", - "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/5bec3c49a2b8d9bd12655f2ec35e52ec90befe17", - "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17", - "shasum": "" - }, - "require": { - "cakephp/cakephp": "^3.7.0", - "cakephp/chronos": "^1.0.0", - "cakephp/plugin-installer": "^1.0.0", - "composer/composer": "^1.3.0", - "jdorn/sql-formatter": "^1.2.0", - "php": ">=5.6.0" - }, - "require-dev": { - "cakephp/authorization": "^1.3.2", - "cakephp/cakephp-codesniffer": "^3.0", - "phpunit/phpunit": "^5.7.14|^6.0" - }, - "suggest": { - "ext-pdo_sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use." - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "DebugKit\\": "src/", - "DebugKit\\Test\\Fixture\\": "tests/Fixture/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Story", - "homepage": "https://mark-story.com", - "role": "Author" - }, - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors" - } - ], - "description": "CakePHP Debug Kit", - "homepage": "https://github.com/cakephp/debug_kit", - "keywords": [ - "cakephp", - "debug", - "kit" - ], - "support": { - "forum": "http://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/debug_kit/issues", - "source": "https://github.com/cakephp/debug_kit" - }, - "time": "2020-04-22T17:27:39+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.2.9", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5", - "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.2.9" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-01-12T12:10:35+00:00" - }, - { - "name": "composer/composer", - "version": "1.10.21", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "04021432f4a9cbd9351dd166b8c193f42c36a39c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/04021432f4a9cbd9351dd166b8c193f42c36a39c", - "reference": "04021432f4a9cbd9351dd166b8c193f42c36a39c", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^5.2.10", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" - }, - "conflict": { - "symfony/console": "2.8.38" - }, - "require-dev": { - "phpspec/prophecy": "^1.10", - "symfony/phpunit-bridge": "^4.2" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/1.10.21" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-04-01T07:16:35+00:00" - }, - { - "name": "composer/semver", - "version": "1.7.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/647490bbcaf7fc4891c58f47b825eb99d19c377a", - "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/1.7.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2020-12-03T15:47:16+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.5.5", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "de30328a7af8680efdc03e396aad24befd513200" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200", - "reference": "de30328a7af8680efdc03e396aad24befd513200", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2020-12-03T16:04:16+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.4.6", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.6" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-03-25T17:01:18+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "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" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" - }, - { - "name": "jasny/twig-extensions", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/jasny/twig-extensions.git", - "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/30bdf3a3903c021544f36332c9d5d4d563527da4", - "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4", - "shasum": "" - }, - "require": { - "php": ">=7.0.0 | >=5.6.0", - "twig/twig": "^2.0 | ^1.12" - }, - "require-dev": { - "ext-intl": "*", - "ext-pcre": "*", - "jasny/php-code-quality": "^2.1", - "phpunit/phpunit": "^5.0" - }, - "suggest": { - "ext-intl": "Required for the use of the LocalDate Twig extension", - "ext-pcre": "Required for the use of the PCRE Twig extension" - }, - "type": "library", - "autoload": { - "psr-4": { - "Jasny\\Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Arnold Daniels", - "email": "arnold@jasny.net", - "homepage": "http://www.jasny.net" - } - ], - "description": "A set of useful Twig filters", - "homepage": "http://github.com/jasny/twig-extensions#README", - "keywords": [ - "PCRE", - "array", - "date", - "datetime", - "preg", - "regex", - "templating", - "text", - "time" - ], - "support": { - "issues": "https://github.com/jasny/twig-extensions/issues", - "source": "https://github.com/jasny/twig-extensions" - }, - "time": "2017-09-13T07:38:01+00:00" - }, - { - "name": "jdorn/sql-formatter", - "version": "v1.2.17", - "source": { - "type": "git", - "url": "https://github.com/jdorn/sql-formatter.git", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "lib" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" - } - ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/jdorn/sql-formatter/", - "keywords": [ - "highlight", - "sql" - ], - "support": { - "issues": "https://github.com/jdorn/sql-formatter/issues", - "source": "https://github.com/jdorn/sql-formatter/tree/master" - }, - "time": "2014-01-12T16:20:24+00:00" - }, - { - "name": "josegonzalez/dotenv", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/josegonzalez/php-dotenv.git", - "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/josegonzalez/php-dotenv/zipball/f19174d9d7213a6c20e8e5e268aa7dd042d821ca", - "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca", - "shasum": "" - }, - "require": { - "m1/env": "2.*", - "php": ">=5.5.0" - }, - "require-dev": { - "php-mock/php-mock-phpunit": "^1.1", - "satooshi/php-coveralls": "1.*", - "squizlabs/php_codesniffer": "2.*" - }, - "type": "library", - "autoload": { - "psr-0": { - "josegonzalez\\Dotenv": [ - "src", - "tests" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jose Diaz-Gonzalez", - "email": "dotenv@josegonzalez.com", - "homepage": "http://josediazgonzalez.com", - "role": "Maintainer" - } - ], - "description": "dotenv file parsing for PHP", - "homepage": "https://github.com/josegonzalez/php-dotenv", - "keywords": [ - "configuration", - "dotenv", - "php" - ], - "support": { - "issues": "https://github.com/josegonzalez/php-dotenv/issues", - "source": "https://github.com/josegonzalez/php-dotenv/tree/master" - }, - "time": "2017-09-19T15:49:58+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.10", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" - }, - "time": "2020-05-27T16:41:55+00:00" - }, - { - "name": "m1/env", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/m1/Env.git", - "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/m1/Env/zipball/5c296e3e13450a207e12b343f3af1d7ab569f6f3", - "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "scrutinizer/ocular": "~1.1", - "squizlabs/php_codesniffer": "^2.3" - }, - "suggest": { - "josegonzalez/dotenv": "For loading of .env", - "m1/vars": "For loading of configs" - }, - "type": "library", - "autoload": { - "psr-4": { - "M1\\Env\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Miles Croxford", - "email": "hello@milescroxford.com", - "homepage": "http://milescroxford.com", - "role": "Developer" - } - ], - "description": "Env is a lightweight library bringing .env file parser compatibility to PHP. In short - it enables you to read .env files with PHP.", - "homepage": "https://github.com/m1/Env", - "keywords": [ - ".env", - "config", - "dotenv", - "env", - "loader", - "m1", - "parser", - "support" - ], - "support": { - "issues": "https://github.com/m1/Env/issues", - "source": "https://github.com/m1/Env/tree/2.2.0" - }, - "time": "2020-02-19T09:02:13+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.10.4", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" - }, - "time": "2020-12-20T10:01:03+00:00" - }, - { - "name": "phar-io/manifest", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "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" - }, - "time": "2017-03-05T18:14:27+00:00" - }, - { - "name": "phar-io/version", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "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/master" - }, - "time": "2017-03-05T17:38:23+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "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" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "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" - }, - "time": "2020-09-17T18:55:26+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.10.3", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" - }, - "time": "2020-03-05T15:02:03+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "5.3.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-xdebug": "^2.5.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/5.3" - }, - "time": "2018-04-06T15:36:58+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "irc": "irc://irc.freenode.net/phpunit", - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5" - }, - "time": "2017-11-27T13:52:08+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" - }, - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/master" - }, - "time": "2017-02-26T11:10:40+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" - }, - "abandoned": true, - "time": "2017-11-27T05:48:46+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "6.5.14", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.9", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/6.5.14" - }, - "time": "2019-02-01T05:22:47+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5.11" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", - "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/5.0.10" - }, - "abandoned": true, - "time": "2018-08-09T05:50:03+00:00" - }, - { - "name": "psy/psysh", - "version": "v0.10.7", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "a395af46999a12006213c0c8346c9445eb31640c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a395af46999a12006213c0c8346c9445eb31640c", - "reference": "a395af46999a12006213c0c8346c9445eb31640c", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1.*", - "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" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.*" - }, - "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." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.10.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.7" - }, - "time": "2021-03-14T02:14:56+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:15:22+00:00" - }, - { - "name": "sebastian/comparator", - "version": "2.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/master" - }, - "time": "2018-02-01T13:46:46+00:00" - }, - { - "name": "sebastian/diff", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/master" - }, - "time": "2017-08-03T08:09:46+00:00" - }, - { - "name": "sebastian/environment", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/master" - }, - "time": "2017-07-01T08:51:00+00:00" - }, - { - "name": "sebastian/exporter", - "version": "3.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:47:53+00:00" - }, - { - "name": "sebastian/global-state", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" - }, - "time": "2017-04-27T15:39:26+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:40:27+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:37:18+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:34:24+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "shasum": "" - }, - "require": { - "php": ">=5.6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/master" - }, - "time": "2015-07-28T20:34:47+00:00" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" - }, - "time": "2016-10-03T07:35:21+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.8.3", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2020-11-11T09:19:24+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796", - "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phar" - ], - "support": { - "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/master" - }, - "time": "2020-07-07T18:42:57+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.6.0", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ffced0d2c8fa8e6cdc4d695a743271fab6c38625", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-04-09T00:54:41+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "0d639a0943822626290d169965804f79400e6a04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04", - "reference": "0d639a0943822626290d169965804f79400e6a04", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.4" - }, - "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-02-15T18:55:04+00:00" - }, - { - "name": "symfony/process", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.2.4" - }, - "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-01-27T10:15:41+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v5.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "89412a68ea2e675b4e44f260a5666729f77f668e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89412a68ea2e675b4e44f260a5666729f77f668e", - "reference": "89412a68ea2e675b4e44f260a5666729f77f668e", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "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": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.2.6" - }, - "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-03-28T09:42:18+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "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" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "twig/twig", - "version": "v1.44.2", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/138c493c5b8ee7cff3821f80b8896d371366b5fe", - "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.44-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - }, - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v1.44.2" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2021-01-05T10:10:05+00:00" - }, - { - "name": "umpirsky/twig-php-function", - "version": "v0.1", - "source": { - "type": "git", - "url": "https://github.com/umpirsky/twig-php-function.git", - "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/umpirsky/twig-php-function/zipball/53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc", - "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "twig/twig": "~1.12" - }, - "require-dev": { - "phpspec/phpspec": "~2.0", - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "Umpirsky\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Saša Stamenković", - "email": "umpirsky@gmail.com" - } - ], - "description": "Call (almost) any PHP function from your Twig templates.", - "support": { - "issues": "https://github.com/umpirsky/twig-php-function/issues", - "source": "https://github.com/umpirsky/twig-php-function/tree/master" - }, - "time": "2016-03-12T16:36:32+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" - }, - { - "name": "wyrihaximus/twig-view", - "version": "4.4.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/legacy-twig-view.git", - "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/legacy-twig-view/zipball/463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb", - "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb", - "shasum": "" - }, - "require": { - "ajgl/breakpoint-twig-extension": "^0.3.0", - "aptoma/twig-markdown": "^2.0", - "asm89/twig-cache-extension": "^1.0", - "cakephp/cakephp": "^3.7", - "jasny/twig-extensions": "^1.0", - "php": "^5.6 || ^7.0", - "twig/twig": "^1.27", - "umpirsky/twig-php-function": "0.1" - }, - "require-dev": { - "cakephp/bake": "^1.5", - "cakephp/debug_kit": "^3.0", - "phake/phake": "^2.3.2", - "phpunit/phpunit": "^5.7.14", - "squizlabs/php_codesniffer": "^3.4.0", - "wyrihaximus/phpunit-class-reflection-helpers": "dev-master" - }, - "type": "cakephp-plugin", - "autoload": { - "psr-4": { - "WyriHaximus\\TwigView\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Cees-Jan Kiewiet", - "email": "ceesjank@gmail.com", - "homepage": "http://wyrihaximus.net/" - } - ], - "description": "Twig powered View for CakePHP3", - "keywords": [ - "cakephp", - "cakephp3", - "twig", - "view" - ], - "support": { - "issues": "https://github.com/cakephp/legacy-twig-view/issues", - "source": "https://github.com/cakephp/legacy-twig-view/tree/4.4.0" - }, - "time": "2021-04-06T15:42:50+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "psy/psysh": 0 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": ">=5.6" - }, - "platform-dev": [], - "plugin-api-version": "2.0.0" -} diff --git a/community_server/config/app.default.php b/community_server/config/app.default.php deleted file mode 100644 index 04c8cede2..000000000 --- a/community_server/config/app.default.php +++ /dev/null @@ -1,407 +0,0 @@ - filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN), - - /** - * Configure basic information about the application. - * - * - namespace - The namespace to find app classes under. - * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time. - * - encoding - The encoding used for HTML + database connections. - * - base - The base directory the app resides in. If false this - * will be auto detected. - * - dir - Name of app directory. - * - webroot - The webroot directory. - * - wwwRoot - The file path to webroot. - * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to - * use CakePHP pretty URLs, remove these .htaccess - * files: - * /.htaccess - * /webroot/.htaccess - * And uncomment the baseUrl key below. - * - fullBaseUrl - A base URL to use for absolute links. When set to false (default) - * CakePHP generates required value based on `HTTP_HOST` environment variable. - * However, you can define it manually to optimize performance or if you - * are concerned about people manipulating the `Host` header. - * - imageBaseUrl - Web path to the public images directory under webroot. - * - cssBaseUrl - Web path to the public css directory under webroot. - * - jsBaseUrl - Web path to the public js directory under webroot. - * - paths - Configure paths for non class based resources. Supports the - * `plugins`, `templates`, `locales` subkeys, which allow the definition of - * paths for plugins, view templates and locale files respectively. - */ - 'App' => [ - 'namespace' => 'App', - 'encoding' => env('APP_ENCODING', 'UTF-8'), - 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), - 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'), - 'base' => false, - 'dir' => 'src', - 'webroot' => 'webroot', - 'wwwRoot' => WWW_ROOT, - //'baseUrl' => env('SCRIPT_NAME'), - 'fullBaseUrl' => false, - 'imageBaseUrl' => 'img/', - 'cssBaseUrl' => 'css/', - 'jsBaseUrl' => 'js/', - 'paths' => [ - 'plugins' => [ROOT . DS . 'plugins' . DS], - 'templates' => [APP . 'Template' . DS], - 'locales' => [APP . 'Locale' . DS], - ], - ], - - /** - * Security and encryption configuration - * - * - salt - A random string used in security hashing methods. - * The salt value is also used as the encryption key. - * You should treat it as extremely sensitive data. - */ - 'Security' => [ - 'salt' => env('SECURITY_SALT', '__SALT__'), - ], - - /** - * Apply timestamps with the last modified time to static assets (js, css, images). - * Will append a querystring parameter containing the time the file was modified. - * This is useful for busting browser caches. - * - * Set to true to apply timestamps when debug is true. Set to 'force' to always - * enable timestamping regardless of debug value. - */ - 'Asset' => [ - //'timestamp' => true, - // 'cacheTime' => '+1 year' - ], - - /** - * Configure the cache adapters. - */ - 'Cache' => [ - 'default' => [ - 'className' => FileEngine::class, - 'path' => CACHE, - 'url' => env('CACHE_DEFAULT_URL', null), - ], - - /** - * Configure the cache used for general framework caching. - * Translation cache files are stored with this configuration. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - * If you set 'className' => 'Null' core cache will be disabled. - */ - '_cake_core_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_core_', - 'path' => CACHE . 'persistent/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKECORE_URL', null), - ], - - /** - * Configure the cache for model and datasource caches. This cache - * configuration is used to store schema descriptions, and table listings - * in connections. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - */ - '_cake_model_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_model_', - 'path' => CACHE . 'models/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEMODEL_URL', null), - ], - - /** - * Configure the cache for routes. The cached routes collection is built the - * first time the routes are processed via `config/routes.php`. - * Duration will be set to '+2 seconds' in bootstrap.php when debug = true - */ - '_cake_routes_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_routes_', - 'path' => CACHE, - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEROUTES_URL', null), - ], - ], - - /** - * Configure the Error and Exception handlers used by your application. - * - * By default errors are displayed using Debugger, when debug is true and logged - * by Cake\Log\Log when debug is false. - * - * In CLI environments exceptions will be printed to stderr with a backtrace. - * In web environments an HTML page will be displayed for the exception. - * With debug true, framework errors like Missing Controller will be displayed. - * When debug is false, framework errors will be coerced into generic HTTP errors. - * - * Options: - * - * - `errorLevel` - int - The level of errors you are interested in capturing. - * - `trace` - boolean - Whether or not backtraces should be included in - * logged errors/exceptions. - * - `log` - boolean - Whether or not you want exceptions logged. - * - `exceptionRenderer` - string - The class responsible for rendering - * uncaught exceptions. If you choose a custom class you should place - * the file for that class in src/Error. This class needs to implement a - * render method. - * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that - * extend one of the listed exceptions will also be skipped for logging. - * E.g.: - * `'skipLog' => ['Cake\Http\Exception\NotFoundException', 'Cake\Http\Exception\UnauthorizedException']` - * - `extraFatalErrorMemory` - int - The number of megabytes to increase - * the memory limit by when a fatal error is encountered. This allows - * breathing room to complete logging or error handling. - */ - 'Error' => [ - 'errorLevel' => E_ALL, - 'exceptionRenderer' => ExceptionRenderer::class, - 'skipLog' => [], - 'log' => true, - 'trace' => true, - ], - - /** - * Email configuration. - * - * By defining transports separately from delivery profiles you can easily - * re-use transport configuration across multiple profiles. - * - * You can specify multiple configurations for production, development and - * testing. - * - * Each transport needs a `className`. Valid options are as follows: - * - * Mail - Send using PHP mail function - * Smtp - Send using SMTP - * Debug - Do not send the email, just return the result - * - * You can add custom transports (or override existing transports) by adding the - * appropriate file to src/Mailer/Transport. Transports should be named - * 'YourTransport.php', where 'Your' is the name of the transport. - */ - 'EmailTransport' => [ - 'default' => [ - 'className' => MailTransport::class, - /* - * The following keys are used in SMTP transports: - */ - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'username' => null, - 'password' => null, - 'client' => null, - 'tls' => null, - 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), - ], - ], - - /** - * Email delivery profiles - * - * Delivery profiles allow you to predefine various properties about email - * messages from your application and give the settings a name. This saves - * duplication across your application and makes maintenance and development - * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email` - * for more information. - */ - 'Email' => [ - 'default' => [ - 'transport' => 'default', - 'from' => 'you@localhost', - //'charset' => 'utf-8', - //'headerCharset' => 'utf-8', - ], - ], - - /** - * Connection information used by the ORM to connect - * to your application's datastores. - * - * ### Notes - * - Drivers include Mysql Postgres Sqlite Sqlserver - * See vendor\cakephp\cakephp\src\Database\Driver for complete list - * - Do not use periods in database name - it may lead to error. - * See https://github.com/cakephp/cakephp/issues/6471 for details. - * - 'encoding' is recommended to be set to full UTF-8 4-Byte support. - * E.g set it to 'utf8mb4' in MariaDB and MySQL and 'utf8' for any - * other RDBMS. - */ - 'Datasources' => [ - 'default' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'localhost', - /* - * CakePHP will use the default DB port based on the driver selected - * MySQL on MAMP uses port 8889, MAMP users will want to uncomment - * the following line and set the port accordingly - */ - //'port' => 'non_standard_port_number', - 'username' => 'my_app', - 'password' => 'secret', - 'database' => 'my_app', - /* - * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6). - */ - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'flags' => [], - 'cacheMetadata' => true, - 'log' => false, - - /** - * Set identifier quoting to true if you are using reserved words or - * special characters in your table or column names. Enabling this - * setting will result in queries built using the Query Builder having - * identifiers quoted when creating SQL. It should be noted that this - * decreases performance because each query needs to be traversed and - * manipulated before being executed. - */ - 'quoteIdentifiers' => false, - - /** - * During development, if using MySQL < 5.6, uncommenting the - * following line could boost the speed at which schema metadata is - * fetched from the database. It can also be set directly with the - * mysql configuration directive 'innodb_stats_on_metadata = 0' - * which is the recommended value in production environments - */ - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - - 'url' => env('DATABASE_URL', null), - ], - - /** - * The test connection is used during the test suite. - */ - 'test' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'localhost', - //'port' => 'non_standard_port_number', - 'username' => 'my_app', - 'password' => 'secret', - 'database' => 'test_myapp', - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - 'quoteIdentifiers' => false, - 'log' => false, - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - 'url' => env('DATABASE_TEST_URL', null), - ], - ], - - /** - * Configures logging options - */ - 'Log' => [ - 'debug' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'debug', - 'url' => env('LOG_DEBUG_URL', null), - 'scopes' => false, - 'levels' => ['notice', 'info', 'debug'], - ], - 'error' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'error', - 'url' => env('LOG_ERROR_URL', null), - 'scopes' => false, - 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], - ], - // To enable this dedicated query log, you need set your datasource's log flag to true - 'queries' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'queries', - 'url' => env('LOG_QUERIES_URL', null), - 'scopes' => ['queriesLog'], - ], - ], - - /** - * Session configuration. - * - * Contains an array of settings to use for session configuration. The - * `defaults` key is used to define a default preset to use for sessions, any - * settings declared here will override the settings of the default config. - * - * ## Options - * - * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. Avoid using `.` in cookie names, - * as PHP will drop sessions from cookies with `.` in the name. - * - `cookiePath` - The url path for which session cookie is set. Maps to the - * `session.cookie_path` php.ini config. Defaults to base path of app. - * - `timeout` - The time in minutes the session should be valid for. - * Pass 0 to disable checking timeout. - * Please note that php.ini's session.gc_maxlifetime must be equal to or greater - * than the largest Session['timeout'] in all served websites for it to have the - * desired effect. - * - `defaults` - The default configuration set to use as a basis for your session. - * There are four built-in options: php, cake, cache, database. - * - `handler` - Can be used to enable a custom session handler. Expects an - * array with at least the `engine` key, being the name of the Session engine - * class to use for managing the session. CakePHP bundles the `CacheSession` - * and `DatabaseSession` engines. - * - `ini` - An associative array of additional ini values to set. - * - * The built-in `defaults` options are: - * - * - 'php' - Uses settings defined in your php.ini. - * - 'cake' - Saves session files in CakePHP's /tmp directory. - * - 'database' - Uses CakePHP's database sessions. - * - 'cache' - Use the Cache class to save sessions. - * - * To define a custom session handler, save it at src/Network/Session/.php. - * Make sure the class implements PHP's `SessionHandlerInterface` and set - * Session.handler to - * - * To use database sessions, load the SQL file located at config/schema/sessions.sql - */ - 'Session' => [ - 'defaults' => 'php', - ], - // Gradido specific configuration - // Login Server ip and port - 'LoginServer' => [ - 'host' => 'http://127.0.0.1', - 'port' => 1201 - ], - 'API' => [ - 'allowedCaller' => [''] // insert domains or ips from login-server and gdt if they not at localhost - ], - 'ServerAdminEmail' => 'info@gradido.net', // email 'from' field for transfer notification emails - 'noReplyEmail' => 'no-replay@gradido.net', // email sender for creation notification emails to user - - 'GroupNode' => false -]; diff --git a/community_server/config/bootstrap.php b/community_server/config/bootstrap.php deleted file mode 100644 index 77264ee0a..000000000 --- a/community_server/config/bootstrap.php +++ /dev/null @@ -1,212 +0,0 @@ -parse() -// ->putenv() -// ->toEnv() -// ->toServer(); -// } - -/* - * Read configuration file and inject configuration into various - * CakePHP classes. - * - * By default there is only one configuration file. It is often a good - * idea to create multiple configuration files, and separate the configuration - * that changes from configuration that does not. This makes deployment simpler. - */ -try { - Configure::config('default', new PhpConfig()); - Configure::load('app', 'default', false); -} catch (\Exception $e) { - exit($e->getMessage() . "\n"); -} - -/* - * Load an environment local configuration file. - * You can use a file like app_local.php to provide local overrides to your - * shared configuration. - */ -//Configure::load('app_local', 'default'); - -/* - * When debug = true the metadata cache should only last - * for a short time. - */ -if (Configure::read('debug')) { - Configure::write('Cache._cake_model_.duration', '+2 minutes'); - Configure::write('Cache._cake_core_.duration', '+2 minutes'); - // disable router cache during development - Configure::write('Cache._cake_routes_.duration', '+2 seconds'); -} - -/* - * Set the default server timezone. Using UTC makes time calculations / conversions easier. - * Check http://php.net/manual/en/timezones.php for list of valid timezone strings. - */ -date_default_timezone_set(Configure::read('App.defaultTimezone')); - -/* - * Configure the mbstring extension to use the correct encoding. - */ -mb_internal_encoding(Configure::read('App.encoding')); - -/* - * Set the default locale. This controls how dates, number and currency is - * formatted and sets the default language to use for translations. - */ -ini_set('intl.default_locale', Configure::read('App.defaultLocale')); - -/* - * Register application error and exception handlers. - */ - -$isCli = PHP_SAPI === 'cli'; - -if ($isCli) { - (new ConsoleErrorHandler(Configure::read('Error')))->register(); -} else { - (new ErrorHandler(Configure::read('Error')))->register(); -} - -/* - * Include the CLI bootstrap overrides. - */ -if ($isCli) { - require __DIR__ . '/bootstrap_cli.php'; -} - -/* - * Set the full base URL. - * This URL is used as the base of all absolute links. - * - * If you define fullBaseUrl in your config file you can remove this. - */ -if (!Configure::read('App.fullBaseUrl')) { - $s = null; - if (env('HTTPS')) { - $s = 's'; - } - - $httpHost = env('HTTP_HOST'); - if (isset($httpHost)) { - Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost); - } - unset($httpHost, $s); -} - -Cache::setConfig(Configure::consume('Cache')); -ConnectionManager::setConfig(Configure::consume('Datasources')); -TransportFactory::setConfig(Configure::consume('EmailTransport')); -Email::setConfig(Configure::consume('Email')); -Log::setConfig(Configure::consume('Log')); -Security::setSalt(Configure::consume('Security.salt')); - -/* - * The default crypto extension in 3.0 is OpenSSL. - * If you are migrating from 2.x uncomment this code to - * use a more compatible Mcrypt based implementation - */ -//Security::engine(new \Cake\Utility\Crypto\Mcrypt()); - -/* - * Setup detectors for mobile and tablet. - */ -ServerRequest::addDetector('mobile', function ($request) { - $detector = new \Detection\MobileDetect(); - - return $detector->isMobile(); -}); -ServerRequest::addDetector('tablet', function ($request) { - $detector = new \Detection\MobileDetect(); - - return $detector->isTablet(); -}); - -/* - * Enable immutable time objects in the ORM. - * - * You can enable default locale format parsing by adding calls - * to `useLocaleParser()`. This enables the automatic conversion of - * locale specific date formats. For details see - * @link https://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data - */ -Type::build('time') - ->useImmutable(); -Type::build('date') - ->useImmutable(); -Type::build('datetime') - ->useImmutable(); -Type::build('timestamp') - ->useImmutable(); - -header('Access-Control-Allow-Origin: *'); -header('Access-Control-Allow-Methods: POST, GET, PUT, PATCH, DELETE, OPTIONS'); -header('Access-Control-Allow-Headers: *'); -if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'OPTIONS') { - exit(0); -} - -/* - * Custom Inflector rules, can be set to correctly pluralize or singularize - * table, model, controller names or whatever other string is passed to the - * inflection functions. - */ -//Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']); -//Inflector::rules('irregular', ['red' => 'redlings']); -//Inflector::rules('uninflected', ['dontinflectme']); -//Inflector::rules('transliteration', ['/å/' => 'aa']); diff --git a/community_server/config/bootstrap_cli.php b/community_server/config/bootstrap_cli.php deleted file mode 100644 index d3679d754..000000000 --- a/community_server/config/bootstrap_cli.php +++ /dev/null @@ -1,28 +0,0 @@ - '{{content}}', - // Container element used by control() when a field has an error. - 'inputContainerError' => '
{{content}}{{error}}
', - // Label element when inputs are not nested inside the label. - 'label' => '{{text}}', - // Generic input element. - 'input' => '', - // Textarea input element, - 'textarea' => '', - // Error message wrapper elements. - 'error' => '
' - . '{{content}}' - . '
', - // Container for error items. - 'errorList' => '{{content}}', - // Error item wrapper. - 'errorItem' => '
{{text}}
' -]; -/* - -
-
- -
-
- -
-
- - -
- - -
- - */ diff --git a/community_server/config/nginx/fastcgi.conf b/community_server/config/nginx/fastcgi.conf deleted file mode 100644 index 238f7869f..000000000 --- a/community_server/config/nginx/fastcgi.conf +++ /dev/null @@ -1,25 +0,0 @@ -fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; -fastcgi_param QUERY_STRING $query_string; -fastcgi_param REQUEST_METHOD $request_method; -fastcgi_param CONTENT_TYPE $content_type; -fastcgi_param CONTENT_LENGTH $content_length; - -fastcgi_param SCRIPT_NAME $fastcgi_script_name; -fastcgi_param REQUEST_URI $request_uri; -fastcgi_param DOCUMENT_URI $document_uri; -fastcgi_param DOCUMENT_ROOT $document_root; -fastcgi_param SERVER_PROTOCOL $server_protocol; -fastcgi_param REQUEST_SCHEME $scheme; -fastcgi_param HTTPS $https if_not_empty; - -fastcgi_param GATEWAY_INTERFACE CGI/1.1; -fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; - -fastcgi_param REMOTE_ADDR $remote_addr; -fastcgi_param REMOTE_PORT $remote_port; -fastcgi_param SERVER_ADDR $server_addr; -fastcgi_param SERVER_PORT $server_port; -fastcgi_param SERVER_NAME $server_name; - -# PHP only, required if PHP was built with --enable-force-cgi-redirect -fastcgi_param REDIRECT_STATUS 200; \ No newline at end of file diff --git a/community_server/config/nginx/mime.types b/community_server/config/nginx/mime.types deleted file mode 100644 index cd3d700ea..000000000 --- a/community_server/config/nginx/mime.types +++ /dev/null @@ -1,88 +0,0 @@ -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/png png; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - image/svg+xml svg svgz; - image/webp webp; - - application/font-woff woff; - application/java-archive jar war ear; - application/json json; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.apple.mpegurl m3u8; - application/vnd.ms-excel xls; - application/vnd.ms-fontobject eot; - application/vnd.ms-powerpoint ppt; - application/vnd.wap.wmlc wmlc; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xspf+xml xspf; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; - application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp2t ts; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/community_server/config/nginx/nginx.conf b/community_server/config/nginx/nginx.conf deleted file mode 100644 index 197c96167..000000000 --- a/community_server/config/nginx/nginx.conf +++ /dev/null @@ -1,86 +0,0 @@ - -server { - - listen 80 ; - listen [::]:80; - server_name 0.0.0.0; - - #include /etc/nginx/common/protect.conf; - #include /etc/nginx/common/protect_add_header.conf; - #include /etc/nginx/common/ssl.conf; - - - root /usr/share/nginx/html/webroot; - index index.php; - - location ~* \.(png|jpg|ico|webp)\$ { - expires 30d; - } - - location ~* \.(js|css) { - # expires 1d; - expires 1d; - } - - location ~ \.php\$ { - # regex to split $uri to $fastcgi_script_name and $fastcgi_path - fastcgi_split_path_info ^(.+\.php)(/.+)$; - - # Check that the PHP script exists before passing it - try_files $fastcgi_script_name =404; - - # Bypass the fact that try_files resets $fastcgi_path_info - # see: http://trac.nginx.org/nginx/ticket/321 - set $path_info $fastcgi_path_info; - fastcgi_param PATH_INFO $path_info; - - fastcgi_index index.php; - include fastcgi.conf; - - #fastcgi_pass unix:/run/php/php7.3-fpm.sock; - fastcgi_pass 127.0.0.1:9000; - - } - - location ~ /\.ht { - deny all; - } - - location /account { - proxy_http_version 1.1; - proxy_set_header Upgrade \$http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_cache_bypass \$http_upgrade; - proxy_set_header X-Real-IP \$remote_addr; - proxy_set_header X-Forwarded-For \$remote_addr; - proxy_set_header Host \$host; - rewrite /account/(.*) /\$1 break; - - #proxy_next_upstream error timeout invalid_header http_502 non_idempotent; - proxy_pass http://login-server:1200; - proxy_redirect off; - - - } - - location /login_api { - proxy_http_version 1.1; - proxy_set_header Upgrade \$http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_cache_bypass \$http_upgrade; - proxy_set_header X-Real-IP \$remote_addr; - proxy_set_header X-Forwarded-For \$remote_addr; - proxy_set_header Host \$host; - rewrite /login_api/(.*) /\$1 break; - - proxy_pass http://login-server:1201; - proxy_redirect off; - } - - location / { - try_files \$uri \$uri/ /index.php?\$args; - } - -# access_log /var/log/nginx/access.log main; - -} \ No newline at end of file diff --git a/community_server/config/paths.php b/community_server/config/paths.php deleted file mode 100644 index 1c8121588..000000000 --- a/community_server/config/paths.php +++ /dev/null @@ -1,89 +0,0 @@ - '{{content}}', - 'input' => '
' - . '' - . '
', - 'error' => '
' - . '{{content}}' - . '
', - - // Container for error items. - //'errorList' => '
    {{content}}
', - 'errorList' => '{{content}}', - - // Error item wrapper. - //'errorItem' => '
  • {{text}}
  • ', - 'errorItem' => '
    {{text}}
    ' -]; diff --git a/community_server/config/routes.php b/community_server/config/routes.php deleted file mode 100644 index 20fc1ff62..000000000 --- a/community_server/config/routes.php +++ /dev/null @@ -1,160 +0,0 @@ - true - ]); - - // Token check will be skipped when callback returns `true`. - $csrf->whitelistCallback(function ($request) { - // Skip token check for API URLs. - //die($request->getParam('controller')); - $whitelist = ['JsonRequestHandler', 'ElopageWebhook', 'AppRequests']; - $ajaxWhitelist = ['TransactionSendCoins', 'TransactionCreations']; - - $callerIp = $request->clientIp(); - - foreach($whitelist as $entry) { - if($request->getParam('controller') === $entry) { - if($entry == 'ElopageWebhook' || $entry == 'AppRequests') { - return true; - } - $allowedIpLocalhost = ['127.0.0.1', 'localhost', '', '::1']; - if(in_array($callerIp, $allowedIpLocalhost)) { - return true; - } - $allowedCaller = Configure::read('API.allowedCaller'); - $ipPerHost = []; - if($allowedCaller && count($allowedCaller) > 0) { - - foreach($allowedCaller as $allowed) { - $ip = gethostbyname($allowed); - $ipPerHost[$allowed] = $ip; - if($ip === $callerIp) return true; - } - //die("caller ip: $callerIp
    "); - } - //var_dump(['caller_ip' => $callerIp, 'ips' => $ipPerHost]); - die(json_encode(['state' => 'error', 'details' => ['caller_ip' => $callerIp, 'ips' => $ipPerHost]])); - } - } - // disable csfr for all ajax requests in ajax whitelisted controller - foreach($ajaxWhitelist as $entry) { - if($request->getParam('controller') === $entry) { - $action = $request->getParam('action'); - if(preg_match('/^ajax/', $action)) { - return true; - } - } - } - }); - - // Register scoped middleware for in scopes. - $routes->registerMiddleware('csrf', $csrf); - - /** - * Apply a middleware to the current route scope. - * Requires middleware to be registered via `Application::routes()` with `registerMiddleware()` - */ - $routes->applyMiddleware('csrf'); - - /** - * Here, we are connecting '/' (base path) to a controller called 'Pages', - * its action called 'display', and we pass a param to select the view file - * to use (in this case, src/Template/Pages/home.ctp)... - */ - //$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); - $routes->connect('/', ['controller' => 'Dashboard', 'action' => 'index']); - $routes->connect('/api/:action/*', ['controller' => 'AppRequests'], ['routeClass' => 'DashedRoute']); - //$routes->connect('/client', ['controller' => 'Pages', 'action' => 'display', 'js']); - $routes->connect('/server', ['controller' => 'Dashboard', 'action' => 'serverIndex']); - $routes->connect('/client', ['controller' => 'Pages', 'action' => 'display', 'vue']); - $routes->connect('/vue-dev', ['controller' => 'Pages', 'action' => 'display', 'vue-dev']); - //$routes->connect('/', 'https://gradido2.dario-rekowski.de/account', array('status' => 303)); - - /** - * ...and connect the rest of 'Pages' controller's URLs. - */ - $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); - - /** - * Connect catchall routes for all controllers. - * - * Using the argument `DashedRoute`, the `fallbacks` method is a shortcut for - * - * ``` - * $routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'DashedRoute']); - * $routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']); - * ``` - * - * Any route class can be used with this method, such as: - * - DashedRoute - * - InflectedRoute - * - Route - * - Or your own route class - * - * You can remove these routes once you've connected the - * routes you want in your application. - */ - $routes->fallbacks(DashedRoute::class); -}); - -/** - * If you need a different set of middleware or none at all, - * open new scope and define routes there. - * - * ``` - * Router::scope('/api', function (RouteBuilder $routes) { - * // No $routes->applyMiddleware() here. - * // Connect API actions here. - * }); - * ``` - */ diff --git a/community_server/config/schema/i18n.sql b/community_server/config/schema/i18n.sql deleted file mode 100644 index e59d1e651..000000000 --- a/community_server/config/schema/i18n.sql +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# MIT License (https://opensource.org/licenses/mit-license.php) - -CREATE TABLE i18n ( - id int NOT NULL auto_increment, - locale varchar(6) NOT NULL, - model varchar(255) NOT NULL, - foreign_key int(10) NOT NULL, - field varchar(255) NOT NULL, - content text, - PRIMARY KEY (id), - UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), - INDEX I18N_FIELD(model, foreign_key, field) -); diff --git a/community_server/config/schema/sessions.sql b/community_server/config/schema/sessions.sql deleted file mode 100644 index 1aa0a0f54..000000000 --- a/community_server/config/schema/sessions.sql +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# MIT License (https://opensource.org/licenses/mit-license.php) - -CREATE TABLE `sessions` ( - `id` char(40) CHARACTER SET ascii COLLATE ascii_bin NOT NULL, - `created` datetime DEFAULT CURRENT_TIMESTAMP, -- optional, requires MySQL 5.6.5+ - `modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- optional, requires MySQL 5.6.5+ - `data` blob DEFAULT NULL, -- for PostgreSQL use bytea instead of blob - `expires` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/community_server/copy_to_www.sh b/community_server/copy_to_www.sh deleted file mode 100755 index f6519919f..000000000 --- a/community_server/copy_to_www.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -[! -z "${FOLDER_NAME}"] && FOLDER_NAME=community_server - -COLOR_GREEN="\033[0;32m" -COLOR_YELLOW="\e[33m" -COLOR_NONE="\033[0m" - -SCRIPT=`realpath -s $0` -SCRIPTPATH=`dirname $SCRIPT` -#echo -e "script: $SCRIPT, Path: $SCRIPTPATH " - -cd /var/www/html -if [ ! -d "$FOLDER_NAME" ] ; then - mkdir $FOLDER_NAME -else - chmod -R 0755 $FOLDER_NAME -fi -cd $FOLDER_NAME -cp -r $SCRIPTPATH/src . -cp -r $SCRIPTPATH/config . -cp -r $SCRIPTPATH/composer.json . -cp -r $SCRIPTPATH/webroot . -composer install -if [ ! -d "tmp" ] ; then - mkdir tmp - chown -R www-data:www-data ./tmp -fi -if [ ! -d "logs" ] ; then - mkdir logs - chown -R www-data:www-data ./logs -fi - -cd .. -chown -R www-data:www-data $FOLDER_NAME -chmod -R 0755 $FOLDER_NAME/src -chmod -R 0755 $FOLDER_NAME/config -chmod -R 0755 $FOLDER_NAME/webroot diff --git a/community_server/docu/community-server.api.md b/community_server/docu/community-server.api.md deleted file mode 100644 index 6032ce0a2..000000000 --- a/community_server/docu/community-server.api.md +++ /dev/null @@ -1,132 +0,0 @@ - -# community server api - -In this examples I assume that you use gradido with docker-compose build on your local maschine - -## Konto Overview -return current account balance - -GET http://localhost/state-balances/ajaxGetBalance/-127182 - -If session is valid, return: -```json -{"state":"success","balance":174500} -``` -- balance: Gradido Cent, 4 Nachkommastellen (2 Reserve), 174500 = 17,45 GDD - -## List Transactions -List all transactions from logged in user, currently without paging -Ajax: -GET http://localhost/state-balances/ajaxListTransactions/-127182/ -or -GET http://localhost/state-balances/ajaxListTransactions/-127182/DESC -to get transaction in descending order - -Antwort: -Wenn alles okay: -```json -{"state":"success", "transactions": - [ - { - "name": "Max Mustermann", - "email": "Maxim Mustermann", - "type": "send", - "transaction_id": 2, - "date": "2021-02-19T13:25:36+00:00", - "balance": 1920000, - "memo": "a piece of cake :)", - "pubkey": "038a6f93270dc57b91d76bf110ad3863fcb7d1b08e7692e793fcdb4467e5b6a7" - } - ], - "transactionExecutingCount": 0, - "count": 1, - "gdtSum": 0, - "timeUsed": 0.04562687873840332 -} -``` - -- name: name of other involved party or empty if unknown (if other party don't belong to group) - - if type is send, name is name of receiver - - if type is receive, name is name of sender - - if type is creation currently I use a static string ("Gradido Akademie) -- email: optional, only if type is send or receive and other user is known -- pubkey: optional, only if type is send or receive and other user isn't known -- type: type of transaction - - creation: user has get gradidos created - - send: user has send another user gradidos - - receiver: user has received gradidos from another user -- transaction_id: id of transaction in db, in stage2 also the hedera sequence number of transaction -- date: date of ordering transaction (booking date) -- balance: Gradido Cent, 4 Nachkommastellen (2 Reserve), 1920000 = 192,00 GDD -- memo: Details about transaction -- pubkey: optional, if other party isn't known, hexadecimal representation of 32 Byte public key of user [0-9a-f] - -- transactionExecutingCount: how many transaction for this user currently pending and waiting for signing -- count: sum of finished transactions user is involved -- gdtSum: sum of gdt of user in cent with 2 places (Nachkommastellen) -- timeUsed: time used for getting data from db in seconds, only for analyse backend performance - -## Creation Transaction -Make a creation transaction -With new Option set in Login-Server: -```ini -unsecure.allow_auto_sign_transactions = 1 -``` -transactions can be auto-signed directly with handing in transaction. -Normally a forwarding to login-server check transactions side is neccessary to minimize security risks. - -POST http://localhost/transaction-creations/ajaxCreate -```json -{ - "session_id" : -127182, - "email": "max.musterman@gmail.de", - "amount": 10000000, - "target_date":"2021-02-19T13:25:36+00:00", - "memo":"AGE", - "auto_sign": true -} -``` -return if everything is ok: -```json -{"state":"success", "timeUsed": 0.0122} -``` -- timeUsed: time used for getting data from db in seconds, only for analyse backend performance - -## Send Coins Transaction -Make a simple GDD Transaction, send Coins from one user to other. -With new Option set in Login-Server: -```ini -unsecure.allow_auto_sign_transactions = 1 -``` -transactions can be auto-signed directly with handing in transaction. -Normally a forwarding to login-server check transactions side is neccessary to minimize security risks. - -POST http://localhost/transaction-send-coins/ajaxCreate -```json -{ - "session_id" : -127182, - "amount": 2000000, - "email": "max.musterman@gmail.de", - "memo":"Thank you :)", - "auto_sign": true -} -``` -- amout: amount to transfer, 2000000 = 200,00 GDD -- email: receiver email address, must be differ from user email -- memo: Details about transaction -- auto_sign: set to true to directly sign transaction if unsecure.allow_auto_sign_transactions = 1 is set - -return if everything is ok: -```json -{"state":"success", "timeUsed": 0.0122} -``` -- timeUsed: time used for getting data from db in seconds, only for analyse backend performance - -Than the transaction was created on community server, send to login-server, signed (if unsecure.allow_auto_sign_transactions = 1 and auto_sign = true) -and send back to community server and put into db. -After you get this answear you see the new transaction if you list transactions or call for the balance. - -Without auto-sign the transaction is pending on login-server and waits for the user to review it at -http://localhost/account/checkTransactions - - diff --git a/community_server/index.php b/community_server/index.php deleted file mode 100644 index 459176916..000000000 --- a/community_server/index.php +++ /dev/null @@ -1,16 +0,0 @@ -=2.1.2 <3.0.0', -175 silly cache add type: 'range' } -176 silly addNamed clone@>=2.1.2 <3.0.0 -177 verbose addNamed ">=2.1.2 <3.0.0" is a valid semver range for clone -178 silly addNameRange { name: 'clone', range: '>=2.1.2 <3.0.0', hasData: false } -179 silly mapToRegistry name clone -180 silly mapToRegistry using default registry -181 silly mapToRegistry registry https://registry.npmjs.org/ -182 silly mapToRegistry uri https://registry.npmjs.org/clone -183 verbose addNameRange registry:https://registry.npmjs.org/clone not in flight; fetching -184 verbose get https://registry.npmjs.org/clone not expired, no request -185 silly addNameRange number 2 { name: 'clone', range: '>=2.1.2 <3.0.0', hasData: true } -186 silly addNameRange versions [ 'clone', -186 silly addNameRange [ '0.0.0', -186 silly addNameRange '0.0.1', -186 silly addNameRange '0.0.2', -186 silly addNameRange '0.0.3', -186 silly addNameRange '0.0.4', -186 silly addNameRange '0.0.5', -186 silly addNameRange '0.0.6', -186 silly addNameRange '0.0.7', -186 silly addNameRange '0.1.0', -186 silly addNameRange '0.1.1', -186 silly addNameRange '0.1.2', -186 silly addNameRange '0.1.3', -186 silly addNameRange '0.1.4', -186 silly addNameRange '0.1.5', -186 silly addNameRange '0.1.6', -186 silly addNameRange '0.1.7', -186 silly addNameRange '0.1.8', -186 silly addNameRange '0.1.9', -186 silly addNameRange '0.1.10', -186 silly addNameRange '0.1.11', -186 silly addNameRange '0.1.12', -186 silly addNameRange '0.1.13', -186 silly addNameRange '0.1.14', -186 silly addNameRange '0.1.15', -186 silly addNameRange '0.1.16', -186 silly addNameRange '0.1.17', -186 silly addNameRange '0.1.18', -186 silly addNameRange '0.2.0', -186 silly addNameRange '0.1.19', -186 silly addNameRange '1.0.0', -186 silly addNameRange '1.0.1', -186 silly addNameRange '1.0.2', -186 silly addNameRange '2.0.0', -186 silly addNameRange '2.1.0', -186 silly addNameRange '2.1.1', -186 silly addNameRange '1.0.3', -186 silly addNameRange '2.1.2', -186 silly addNameRange '1.0.4' ] ] -187 silly addNamed clone@2.1.2 -188 verbose addNamed "2.1.2" is a plain semver version for clone -189 silly mapToRegistry name clone -190 silly mapToRegistry using default registry -191 silly mapToRegistry registry https://registry.npmjs.org/ -192 silly mapToRegistry uri https://registry.npmjs.org/clone -193 verbose addRemoteTarball https://registry.npmjs.org/clone/-/clone-2.1.2.tgz not in flight; adding -194 verbose addRemoteTarball [ 'https://registry.npmjs.org/clone/-/clone-2.1.2.tgz', -194 verbose addRemoteTarball '1b7f4b9f591f1e8f83670401600345a02887435f' ] -195 info retry fetch attempt 1 at 13:48:57 -196 info attempt registry request try #1 at 13:48:57 -197 http fetch GET https://registry.npmjs.org/clone/-/clone-2.1.2.tgz -198 http fetch 200 https://registry.npmjs.org/clone/-/clone-2.1.2.tgz -199 silly fetchAndShaCheck shasum 1b7f4b9f591f1e8f83670401600345a02887435f -200 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/clone/-/clone-2.1.2.tgz not in flight; adding -201 verbose addTmpTarball already have metadata; skipping unpack for clone@2.1.2 -202 http 200 https://registry.npmjs.org/mime -203 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -203 verbose headers 'content-type': 'application/json', -203 verbose headers 'transfer-encoding': 'chunked', -203 verbose headers connection: 'keep-alive', -203 verbose headers 'set-cookie': -203 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -203 verbose headers 'cf-ray': '59764fa1caba6347-FRA', -203 verbose headers age: '5658', -203 verbose headers 'cache-control': 'public, max-age=300', -203 verbose headers etag: 'W/"06d541b2c21df82e268be063f8846ba5"', -203 verbose headers 'last-modified': 'Fri, 01 May 2020 23:10:52 GMT', -203 verbose headers vary: 'accept-encoding, accept', -203 verbose headers 'cf-cache-status': 'HIT', -203 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -203 verbose headers server: 'cloudflare', -203 verbose headers 'content-encoding': 'gzip', -203 verbose headers 'cf-request-id': '02ddd0192000006347e8890200000001' } -204 silly get cb [ 200, -204 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -204 silly get 'content-type': 'application/json', -204 silly get 'transfer-encoding': 'chunked', -204 silly get connection: 'keep-alive', -204 silly get 'set-cookie': -204 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -204 silly get 'cf-ray': '59764fa1caba6347-FRA', -204 silly get age: '5658', -204 silly get 'cache-control': 'public, max-age=300', -204 silly get etag: 'W/"06d541b2c21df82e268be063f8846ba5"', -204 silly get 'last-modified': 'Fri, 01 May 2020 23:10:52 GMT', -204 silly get vary: 'accept-encoding, accept', -204 silly get 'cf-cache-status': 'HIT', -204 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -204 silly get server: 'cloudflare', -204 silly get 'content-encoding': 'gzip', -204 silly get 'cf-request-id': '02ddd0192000006347e8890200000001' } ] -205 verbose get saving mime to /home/christine/.npm/registry.npmjs.org/mime/.cache.json -206 http 304 https://registry.npmjs.org/errno -207 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -207 verbose headers connection: 'keep-alive', -207 verbose headers 'set-cookie': -207 verbose headers [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -207 verbose headers 'cf-ray': '59764fa1ddccd6e9-FRA', -207 verbose headers age: '5629', -207 verbose headers 'cache-control': 'public, max-age=300', -207 verbose headers etag: '"93d3c79a655f99137298121fc95d36c6"', -207 verbose headers 'last-modified': 'Sat, 26 May 2018 23:40:24 GMT', -207 verbose headers vary: 'Accept-Encoding', -207 verbose headers 'cf-cache-status': 'HIT', -207 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -207 verbose headers server: 'cloudflare', -207 verbose headers 'cf-request-id': '02ddd019240000d6e975b00200000001' } -208 silly get cb [ 304, -208 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -208 silly get connection: 'keep-alive', -208 silly get 'set-cookie': -208 silly get [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -208 silly get 'cf-ray': '59764fa1ddccd6e9-FRA', -208 silly get age: '5629', -208 silly get 'cache-control': 'public, max-age=300', -208 silly get etag: '"93d3c79a655f99137298121fc95d36c6"', -208 silly get 'last-modified': 'Sat, 26 May 2018 23:40:24 GMT', -208 silly get vary: 'Accept-Encoding', -208 silly get 'cf-cache-status': 'HIT', -208 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -208 silly get server: 'cloudflare', -208 silly get 'cf-request-id': '02ddd019240000d6e975b00200000001' } ] -209 verbose etag https://registry.npmjs.org/errno from cache -210 verbose get saving errno to /home/christine/.npm/registry.npmjs.org/errno/.cache.json -211 http 200 https://registry.npmjs.org/promise -212 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -212 verbose headers 'content-type': 'application/json', -212 verbose headers 'transfer-encoding': 'chunked', -212 verbose headers connection: 'keep-alive', -212 verbose headers 'set-cookie': -212 verbose headers [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -212 verbose headers 'cf-ray': '59764fa1c9c76413-FRA', -212 verbose headers age: '5628', -212 verbose headers 'cache-control': 'public, max-age=300', -212 verbose headers etag: 'W/"0560bb757d840a7a46bf8d008bc75194"', -212 verbose headers 'last-modified': 'Mon, 02 Mar 2020 10:57:46 GMT', -212 verbose headers vary: 'accept-encoding, accept', -212 verbose headers 'cf-cache-status': 'HIT', -212 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -212 verbose headers server: 'cloudflare', -212 verbose headers 'content-encoding': 'gzip', -212 verbose headers 'cf-request-id': '02ddd01920000064135f8cb200000001' } -213 silly get cb [ 200, -213 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -213 silly get 'content-type': 'application/json', -213 silly get 'transfer-encoding': 'chunked', -213 silly get connection: 'keep-alive', -213 silly get 'set-cookie': -213 silly get [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -213 silly get 'cf-ray': '59764fa1c9c76413-FRA', -213 silly get age: '5628', -213 silly get 'cache-control': 'public, max-age=300', -213 silly get etag: 'W/"0560bb757d840a7a46bf8d008bc75194"', -213 silly get 'last-modified': 'Mon, 02 Mar 2020 10:57:46 GMT', -213 silly get vary: 'accept-encoding, accept', -213 silly get 'cf-cache-status': 'HIT', -213 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -213 silly get server: 'cloudflare', -213 silly get 'content-encoding': 'gzip', -213 silly get 'cf-request-id': '02ddd01920000064135f8cb200000001' } ] -214 verbose get saving promise to /home/christine/.npm/registry.npmjs.org/promise/.cache.json -215 http 200 https://registry.npmjs.org/graceful-fs -216 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -216 verbose headers 'content-type': 'application/json', -216 verbose headers 'transfer-encoding': 'chunked', -216 verbose headers connection: 'keep-alive', -216 verbose headers 'set-cookie': -216 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -216 verbose headers 'cf-ray': '59764fa1da22325c-FRA', -216 verbose headers age: '5345', -216 verbose headers 'cache-control': 'public, max-age=300', -216 verbose headers etag: 'W/"84e1c483529d18a582ac0265096141af"', -216 verbose headers 'last-modified': 'Tue, 28 Apr 2020 15:14:15 GMT', -216 verbose headers vary: 'accept-encoding, accept', -216 verbose headers 'cf-cache-status': 'HIT', -216 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -216 verbose headers server: 'cloudflare', -216 verbose headers 'content-encoding': 'gzip', -216 verbose headers 'cf-request-id': '02ddd019250000325c4cbef200000001' } -217 silly get cb [ 200, -217 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -217 silly get 'content-type': 'application/json', -217 silly get 'transfer-encoding': 'chunked', -217 silly get connection: 'keep-alive', -217 silly get 'set-cookie': -217 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -217 silly get 'cf-ray': '59764fa1da22325c-FRA', -217 silly get age: '5345', -217 silly get 'cache-control': 'public, max-age=300', -217 silly get etag: 'W/"84e1c483529d18a582ac0265096141af"', -217 silly get 'last-modified': 'Tue, 28 Apr 2020 15:14:15 GMT', -217 silly get vary: 'accept-encoding, accept', -217 silly get 'cf-cache-status': 'HIT', -217 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -217 silly get server: 'cloudflare', -217 silly get 'content-encoding': 'gzip', -217 silly get 'cf-request-id': '02ddd019250000325c4cbef200000001' } ] -218 verbose get saving graceful-fs to /home/christine/.npm/registry.npmjs.org/graceful-fs/.cache.json -219 silly resolveWithNewModule errno@0.1.7 checking installable status -220 silly cache add args [ 'errno@^0.1.1', null ] -221 verbose cache add spec errno@^0.1.1 -222 silly cache add parsed spec Result { -222 silly cache add raw: 'errno@^0.1.1', -222 silly cache add scope: null, -222 silly cache add name: 'errno', -222 silly cache add rawSpec: '^0.1.1', -222 silly cache add spec: '>=0.1.1 <0.2.0', -222 silly cache add type: 'range' } -223 silly addNamed errno@>=0.1.1 <0.2.0 -224 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for errno -225 silly addNameRange { name: 'errno', range: '>=0.1.1 <0.2.0', hasData: false } -226 silly mapToRegistry name errno -227 silly mapToRegistry using default registry -228 silly mapToRegistry registry https://registry.npmjs.org/ -229 silly mapToRegistry uri https://registry.npmjs.org/errno -230 verbose addNameRange registry:https://registry.npmjs.org/errno not in flight; fetching -231 silly resolveWithNewModule mime@1.6.0 checking installable status -232 silly cache add args [ 'mime@^1.4.1', null ] -233 verbose cache add spec mime@^1.4.1 -234 silly cache add parsed spec Result { -234 silly cache add raw: 'mime@^1.4.1', -234 silly cache add scope: null, -234 silly cache add name: 'mime', -234 silly cache add rawSpec: '^1.4.1', -234 silly cache add spec: '>=1.4.1 <2.0.0', -234 silly cache add type: 'range' } -235 silly addNamed mime@>=1.4.1 <2.0.0 -236 verbose addNamed ">=1.4.1 <2.0.0" is a valid semver range for mime -237 silly addNameRange { name: 'mime', range: '>=1.4.1 <2.0.0', hasData: false } -238 silly mapToRegistry name mime -239 silly mapToRegistry using default registry -240 silly mapToRegistry registry https://registry.npmjs.org/ -241 silly mapToRegistry uri https://registry.npmjs.org/mime -242 verbose addNameRange registry:https://registry.npmjs.org/mime not in flight; fetching -243 http 200 https://registry.npmjs.org/tslib -244 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -244 verbose headers 'content-type': 'application/json', -244 verbose headers 'transfer-encoding': 'chunked', -244 verbose headers connection: 'keep-alive', -244 verbose headers 'set-cookie': -244 verbose headers [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -244 verbose headers 'cf-ray': '59764fa1d9e7d715-FRA', -244 verbose headers age: '5299', -244 verbose headers 'cache-control': 'public, max-age=300', -244 verbose headers etag: 'W/"2b86a514bc0f750da0d0f62d3dbfde51"', -244 verbose headers 'last-modified': 'Wed, 13 May 2020 23:18:43 GMT', -244 verbose headers vary: 'accept-encoding, accept', -244 verbose headers 'cf-cache-status': 'HIT', -244 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -244 verbose headers server: 'cloudflare', -244 verbose headers 'content-encoding': 'gzip', -244 verbose headers 'cf-request-id': '02ddd019240000d715c11d3200000001' } -245 silly get cb [ 200, -245 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -245 silly get 'content-type': 'application/json', -245 silly get 'transfer-encoding': 'chunked', -245 silly get connection: 'keep-alive', -245 silly get 'set-cookie': -245 silly get [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -245 silly get 'cf-ray': '59764fa1d9e7d715-FRA', -245 silly get age: '5299', -245 silly get 'cache-control': 'public, max-age=300', -245 silly get etag: 'W/"2b86a514bc0f750da0d0f62d3dbfde51"', -245 silly get 'last-modified': 'Wed, 13 May 2020 23:18:43 GMT', -245 silly get vary: 'accept-encoding, accept', -245 silly get 'cf-cache-status': 'HIT', -245 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -245 silly get server: 'cloudflare', -245 silly get 'content-encoding': 'gzip', -245 silly get 'cf-request-id': '02ddd019240000d715c11d3200000001' } ] -246 verbose get saving tslib to /home/christine/.npm/registry.npmjs.org/tslib/.cache.json -247 verbose get https://registry.npmjs.org/errno not expired, no request -248 silly addNameRange number 2 { name: 'errno', range: '>=0.1.1 <0.2.0', hasData: true } -249 silly addNameRange versions [ 'errno', -249 silly addNameRange [ '0.0.1', -249 silly addNameRange '0.0.2', -249 silly addNameRange '0.0.3', -249 silly addNameRange '0.0.4', -249 silly addNameRange '0.0.5', -249 silly addNameRange '0.1.0', -249 silly addNameRange '0.1.1', -249 silly addNameRange '0.1.2', -249 silly addNameRange '0.1.3', -249 silly addNameRange '0.1.4', -249 silly addNameRange '0.1.5', -249 silly addNameRange '0.1.6', -249 silly addNameRange '0.1.7' ] ] -250 silly addNamed errno@0.1.7 -251 verbose addNamed "0.1.7" is a plain semver version for errno -252 verbose get https://registry.npmjs.org/mime not expired, no request -253 silly addNameRange number 2 { name: 'mime', range: '>=1.4.1 <2.0.0', hasData: true } -254 silly addNameRange versions [ 'mime', -254 silly addNameRange [ '1.0.0', -254 silly addNameRange '1.1.0', -254 silly addNameRange '1.2.1', -254 silly addNameRange '1.2.2', -254 silly addNameRange '1.2.3', -254 silly addNameRange '1.2.4', -254 silly addNameRange '1.2.5', -254 silly addNameRange '1.2.6', -254 silly addNameRange '1.2.7', -254 silly addNameRange '1.2.8', -254 silly addNameRange '1.2.9', -254 silly addNameRange '1.2.10', -254 silly addNameRange '1.2.11', -254 silly addNameRange '1.3.0', -254 silly addNameRange '1.3.2', -254 silly addNameRange '1.3.3', -254 silly addNameRange '1.3.4', -254 silly addNameRange '1.3.5', -254 silly addNameRange '1.3.6', -254 silly addNameRange '1.4.0', -254 silly addNameRange '2.0.0', -254 silly addNameRange '2.0.1', -254 silly addNameRange '2.0.2', -254 silly addNameRange '1.4.1', -254 silly addNameRange '2.0.3', -254 silly addNameRange '1.5.0', -254 silly addNameRange '1.6.0', -254 silly addNameRange '2.0.5', -254 silly addNameRange '2.1.0', -254 silly addNameRange '2.2.0', -254 silly addNameRange '2.2.1', -254 silly addNameRange '2.2.2', -254 silly addNameRange '2.3.0', -254 silly addNameRange '2.3.1', -254 silly addNameRange '2.4.0', -254 silly addNameRange '2.4.1', -254 silly addNameRange '2.4.2', -254 silly addNameRange '2.4.3', -254 silly addNameRange '2.4.4', -254 silly addNameRange '2.4.5' ] ] -255 silly addNamed mime@1.6.0 -256 verbose addNamed "1.6.0" is a plain semver version for mime -257 silly cache afterAdd clone@2.1.2 -258 verbose afterAdd /home/christine/.npm/clone/2.1.2/package/package.json not in flight; writing -259 silly mapToRegistry name mime -260 silly mapToRegistry using default registry -261 silly mapToRegistry registry https://registry.npmjs.org/ -262 silly mapToRegistry uri https://registry.npmjs.org/mime -263 verbose addRemoteTarball https://registry.npmjs.org/mime/-/mime-1.6.0.tgz not in flight; adding -264 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime/-/mime-1.6.0.tgz', -264 verbose addRemoteTarball '32cd9e5c64553bd58d19a568af452acff04981b1' ] -265 http 200 https://registry.npmjs.org/mkdirp -266 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -266 verbose headers 'content-type': 'application/json', -266 verbose headers 'transfer-encoding': 'chunked', -266 verbose headers connection: 'keep-alive', -266 verbose headers 'set-cookie': -266 verbose headers [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -266 verbose headers 'cf-ray': '59764fa1fe51175a-FRA', -266 verbose headers age: '5346', -266 verbose headers 'cache-control': 'public, max-age=300', -266 verbose headers etag: 'W/"0730d9c43c136c318d8e19c69cbd72aa"', -266 verbose headers 'last-modified': 'Wed, 22 Apr 2020 06:03:24 GMT', -266 verbose headers vary: 'accept-encoding, accept', -266 verbose headers 'cf-cache-status': 'HIT', -266 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -266 verbose headers server: 'cloudflare', -266 verbose headers 'content-encoding': 'gzip', -266 verbose headers 'cf-request-id': '02ddd019380000175a1e1e7200000001' } -267 silly get cb [ 200, -267 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -267 silly get 'content-type': 'application/json', -267 silly get 'transfer-encoding': 'chunked', -267 silly get connection: 'keep-alive', -267 silly get 'set-cookie': -267 silly get [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -267 silly get 'cf-ray': '59764fa1fe51175a-FRA', -267 silly get age: '5346', -267 silly get 'cache-control': 'public, max-age=300', -267 silly get etag: 'W/"0730d9c43c136c318d8e19c69cbd72aa"', -267 silly get 'last-modified': 'Wed, 22 Apr 2020 06:03:24 GMT', -267 silly get vary: 'accept-encoding, accept', -267 silly get 'cf-cache-status': 'HIT', -267 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -267 silly get server: 'cloudflare', -267 silly get 'content-encoding': 'gzip', -267 silly get 'cf-request-id': '02ddd019380000175a1e1e7200000001' } ] -268 verbose get saving mkdirp to /home/christine/.npm/registry.npmjs.org/mkdirp/.cache.json -269 silly resolveWithNewModule graceful-fs@4.2.4 checking installable status -270 silly cache add args [ 'graceful-fs@^4.1.2', null ] -271 verbose cache add spec graceful-fs@^4.1.2 -272 silly cache add parsed spec Result { -272 silly cache add raw: 'graceful-fs@^4.1.2', -272 silly cache add scope: null, -272 silly cache add name: 'graceful-fs', -272 silly cache add rawSpec: '^4.1.2', -272 silly cache add spec: '>=4.1.2 <5.0.0', -272 silly cache add type: 'range' } -273 silly addNamed graceful-fs@>=4.1.2 <5.0.0 -274 verbose addNamed ">=4.1.2 <5.0.0" is a valid semver range for graceful-fs -275 silly addNameRange { name: 'graceful-fs', range: '>=4.1.2 <5.0.0', hasData: false } -276 silly mapToRegistry name graceful-fs -277 silly mapToRegistry using default registry -278 silly mapToRegistry registry https://registry.npmjs.org/ -279 silly mapToRegistry uri https://registry.npmjs.org/graceful-fs -280 verbose addNameRange registry:https://registry.npmjs.org/graceful-fs not in flight; fetching -281 http 200 https://registry.npmjs.org/image-size -282 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -282 verbose headers 'content-type': 'application/json', -282 verbose headers 'transfer-encoding': 'chunked', -282 verbose headers connection: 'keep-alive', -282 verbose headers 'set-cookie': -282 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -282 verbose headers 'cf-ray': '59764fa1cf14648b-FRA', -282 verbose headers age: '4621', -282 verbose headers 'cache-control': 'public, max-age=300', -282 verbose headers etag: 'W/"c223fda42dcf547145c5fcea3c32c5da"', -282 verbose headers 'last-modified': 'Mon, 30 Sep 2019 10:49:43 GMT', -282 verbose headers vary: 'accept-encoding, accept', -282 verbose headers 'cf-cache-status': 'HIT', -282 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -282 verbose headers server: 'cloudflare', -282 verbose headers 'content-encoding': 'gzip', -282 verbose headers 'cf-request-id': '02ddd0191b0000648bda3f1200000001' } -283 silly get cb [ 200, -283 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -283 silly get 'content-type': 'application/json', -283 silly get 'transfer-encoding': 'chunked', -283 silly get connection: 'keep-alive', -283 silly get 'set-cookie': -283 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -283 silly get 'cf-ray': '59764fa1cf14648b-FRA', -283 silly get age: '4621', -283 silly get 'cache-control': 'public, max-age=300', -283 silly get etag: 'W/"c223fda42dcf547145c5fcea3c32c5da"', -283 silly get 'last-modified': 'Mon, 30 Sep 2019 10:49:43 GMT', -283 silly get vary: 'accept-encoding, accept', -283 silly get 'cf-cache-status': 'HIT', -283 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -283 silly get server: 'cloudflare', -283 silly get 'content-encoding': 'gzip', -283 silly get 'cf-request-id': '02ddd0191b0000648bda3f1200000001' } ] -284 verbose get saving image-size to /home/christine/.npm/registry.npmjs.org/image-size/.cache.json -285 silly resolveWithNewModule promise@7.3.1 checking installable status -286 silly cache add args [ 'promise@^7.1.1', null ] -287 verbose cache add spec promise@^7.1.1 -288 silly cache add parsed spec Result { -288 silly cache add raw: 'promise@^7.1.1', -288 silly cache add scope: null, -288 silly cache add name: 'promise', -288 silly cache add rawSpec: '^7.1.1', -288 silly cache add spec: '>=7.1.1 <8.0.0', -288 silly cache add type: 'range' } -289 silly addNamed promise@>=7.1.1 <8.0.0 -290 verbose addNamed ">=7.1.1 <8.0.0" is a valid semver range for promise -291 silly addNameRange { name: 'promise', range: '>=7.1.1 <8.0.0', hasData: false } -292 silly mapToRegistry name promise -293 silly mapToRegistry using default registry -294 silly mapToRegistry registry https://registry.npmjs.org/ -295 silly mapToRegistry uri https://registry.npmjs.org/promise -296 verbose addNameRange registry:https://registry.npmjs.org/promise not in flight; fetching -297 info retry fetch attempt 1 at 13:48:57 -298 info attempt registry request try #1 at 13:48:57 -299 http fetch GET https://registry.npmjs.org/mime/-/mime-1.6.0.tgz -300 silly resolveWithNewModule tslib@1.13.0 checking installable status -301 silly cache add args [ 'tslib@^1.10.0', null ] -302 verbose cache add spec tslib@^1.10.0 -303 silly cache add parsed spec Result { -303 silly cache add raw: 'tslib@^1.10.0', -303 silly cache add scope: null, -303 silly cache add name: 'tslib', -303 silly cache add rawSpec: '^1.10.0', -303 silly cache add spec: '>=1.10.0 <2.0.0', -303 silly cache add type: 'range' } -304 silly addNamed tslib@>=1.10.0 <2.0.0 -305 verbose addNamed ">=1.10.0 <2.0.0" is a valid semver range for tslib -306 silly addNameRange { name: 'tslib', range: '>=1.10.0 <2.0.0', hasData: false } -307 silly mapToRegistry name tslib -308 silly mapToRegistry using default registry -309 silly mapToRegistry registry https://registry.npmjs.org/ -310 silly mapToRegistry uri https://registry.npmjs.org/tslib -311 verbose addNameRange registry:https://registry.npmjs.org/tslib not in flight; fetching -312 verbose afterAdd /home/christine/.npm/clone/2.1.2/package/package.json written -313 verbose get https://registry.npmjs.org/graceful-fs not expired, no request -314 silly addNameRange number 2 { name: 'graceful-fs', range: '>=4.1.2 <5.0.0', hasData: true } -315 silly addNameRange versions [ 'graceful-fs', -315 silly addNameRange [ '1.0.0', -315 silly addNameRange '1.0.1', -315 silly addNameRange '1.0.2', -315 silly addNameRange '1.1.0', -315 silly addNameRange '1.1.1', -315 silly addNameRange '1.1.2', -315 silly addNameRange '1.1.3', -315 silly addNameRange '1.1.4', -315 silly addNameRange '1.1.5', -315 silly addNameRange '1.1.6', -315 silly addNameRange '1.1.7', -315 silly addNameRange '1.1.8', -315 silly addNameRange '1.1.9', -315 silly addNameRange '1.1.10', -315 silly addNameRange '1.1.11', -315 silly addNameRange '1.1.12', -315 silly addNameRange '1.1.13', -315 silly addNameRange '1.1.14', -315 silly addNameRange '1.2.0', -315 silly addNameRange '1.2.1', -315 silly addNameRange '1.2.2', -315 silly addNameRange '1.2.3', -315 silly addNameRange '2.0.0', -315 silly addNameRange '2.0.1', -315 silly addNameRange '2.0.2', -315 silly addNameRange '2.0.3', -315 silly addNameRange '3.0.0', -315 silly addNameRange '3.0.1', -315 silly addNameRange '3.0.2', -315 silly addNameRange '3.0.3', -315 silly addNameRange '3.0.4', -315 silly addNameRange '3.0.5', -315 silly addNameRange '3.0.6', -315 silly addNameRange '3.0.7', -315 silly addNameRange '3.0.8', -315 silly addNameRange '4.1.0', -315 silly addNameRange '4.1.1', -315 silly addNameRange '4.1.2', -315 silly addNameRange '4.1.3', -315 silly addNameRange '4.1.4', -315 silly addNameRange '4.1.5', -315 silly addNameRange '3.0.9', -315 silly addNameRange '4.1.6', -315 silly addNameRange '3.0.10', -315 silly addNameRange '3.0.11', -315 silly addNameRange '4.1.7', -315 silly addNameRange '4.1.8', -315 silly addNameRange '4.1.9', -315 silly addNameRange '4.1.10', -315 silly addNameRange '4.1.11', -315 silly addNameRange '4.1.12', -315 silly addNameRange '4.1.13', -315 silly addNameRange '4.1.14', -315 silly addNameRange '4.1.15', -315 silly addNameRange '4.2.0', -315 silly addNameRange '4.2.1', -315 silly addNameRange '3.0.12', -315 silly addNameRange '4.2.2', -315 silly addNameRange '4.2.3', -315 silly addNameRange '4.2.4' ] ] -316 silly addNamed graceful-fs@4.2.4 -317 verbose addNamed "4.2.4" is a plain semver version for graceful-fs -318 silly cache afterAdd errno@0.1.7 -319 verbose afterAdd /home/christine/.npm/errno/0.1.7/package/package.json not in flight; writing -320 silly mapToRegistry name graceful-fs -321 silly mapToRegistry using default registry -322 silly mapToRegistry registry https://registry.npmjs.org/ -323 silly mapToRegistry uri https://registry.npmjs.org/graceful-fs -324 verbose addRemoteTarball https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz not in flight; adding -325 verbose addRemoteTarball [ 'https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz', -325 verbose addRemoteTarball '2256bde14d3632958c465ebc96dc467ca07a29fb' ] -326 verbose get https://registry.npmjs.org/promise not expired, no request -327 silly addNameRange number 2 { name: 'promise', range: '>=7.1.1 <8.0.0', hasData: true } -328 silly addNameRange versions [ 'promise', -328 silly addNameRange [ '1.2.1', -328 silly addNameRange '1.2.2', -328 silly addNameRange '1.3.0', -328 silly addNameRange '2.0.0', -328 silly addNameRange '3.0.0', -328 silly addNameRange '3.0.1', -328 silly addNameRange '3.1.0', -328 silly addNameRange '3.2.0', -328 silly addNameRange '4.0.0', -328 silly addNameRange '5.0.0', -328 silly addNameRange '6.0.0', -328 silly addNameRange '6.0.1', -328 silly addNameRange '6.1.0', -328 silly addNameRange '7.0.0', -328 silly addNameRange '7.0.1', -328 silly addNameRange '7.0.2', -328 silly addNameRange '7.0.3', -328 silly addNameRange '7.0.4', -328 silly addNameRange '7.1.0', -328 silly addNameRange '7.1.1', -328 silly addNameRange '7.2.0', -328 silly addNameRange '7.3.0', -328 silly addNameRange '7.3.1', -328 silly addNameRange '8.0.0', -328 silly addNameRange '8.0.1', -328 silly addNameRange '8.0.2', -328 silly addNameRange '8.0.3', -328 silly addNameRange '8.1.0' ] ] -329 silly addNamed promise@7.3.1 -330 verbose addNamed "7.3.1" is a plain semver version for promise -331 verbose get https://registry.npmjs.org/tslib not expired, no request -332 silly addNameRange number 2 { name: 'tslib', range: '>=1.10.0 <2.0.0', hasData: true } -333 silly addNameRange versions [ 'tslib', -333 silly addNameRange [ '0.0.1-security', -333 silly addNameRange '1.0.0', -333 silly addNameRange '1.1.0', -333 silly addNameRange '1.2.0', -333 silly addNameRange '1.3.0', -333 silly addNameRange '1.4.0', -333 silly addNameRange '1.5.0', -333 silly addNameRange '1.6.0', -333 silly addNameRange '1.6.1', -333 silly addNameRange '1.7.0', -333 silly addNameRange '1.7.1', -333 silly addNameRange '1.8.0', -333 silly addNameRange '1.8.1', -333 silly addNameRange '1.9.0', -333 silly addNameRange '1.9.1', -333 silly addNameRange '1.9.2', -333 silly addNameRange '1.9.3', -333 silly addNameRange '1.10.0', -333 silly addNameRange '1.11.0', -333 silly addNameRange '1.11.1', -333 silly addNameRange '1.11.2', -333 silly addNameRange '1.12.0', -333 silly addNameRange '1.13.0', -333 silly addNameRange '2.0.0' ] ] -334 silly addNamed tslib@1.13.0 -335 verbose addNamed "1.13.0" is a plain semver version for tslib -336 silly mapToRegistry name promise -337 silly mapToRegistry using default registry -338 silly mapToRegistry registry https://registry.npmjs.org/ -339 silly mapToRegistry uri https://registry.npmjs.org/promise -340 verbose addRemoteTarball https://registry.npmjs.org/promise/-/promise-7.3.1.tgz not in flight; adding -341 verbose addRemoteTarball [ 'https://registry.npmjs.org/promise/-/promise-7.3.1.tgz', -341 verbose addRemoteTarball '064b72602b18f90f29192b8b1bc418ffd1ebd3bf' ] -342 silly resolveWithNewModule mkdirp@0.5.5 checking installable status -343 silly cache add args [ 'mkdirp@^0.5.0', null ] -344 verbose cache add spec mkdirp@^0.5.0 -345 silly cache add parsed spec Result { -345 silly cache add raw: 'mkdirp@^0.5.0', -345 silly cache add scope: null, -345 silly cache add name: 'mkdirp', -345 silly cache add rawSpec: '^0.5.0', -345 silly cache add spec: '>=0.5.0 <0.6.0', -345 silly cache add type: 'range' } -346 silly addNamed mkdirp@>=0.5.0 <0.6.0 -347 verbose addNamed ">=0.5.0 <0.6.0" is a valid semver range for mkdirp -348 silly addNameRange { name: 'mkdirp', range: '>=0.5.0 <0.6.0', hasData: false } -349 silly mapToRegistry name mkdirp -350 silly mapToRegistry using default registry -351 silly mapToRegistry registry https://registry.npmjs.org/ -352 silly mapToRegistry uri https://registry.npmjs.org/mkdirp -353 verbose addNameRange registry:https://registry.npmjs.org/mkdirp not in flight; fetching -354 silly mapToRegistry name tslib -355 silly mapToRegistry using default registry -356 silly mapToRegistry registry https://registry.npmjs.org/ -357 silly mapToRegistry uri https://registry.npmjs.org/tslib -358 verbose addRemoteTarball https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz not in flight; adding -359 verbose addRemoteTarball [ 'https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz', -359 verbose addRemoteTarball 'c881e13cc7015894ed914862d276436fa9a47043' ] -360 info retry fetch attempt 1 at 13:48:57 -361 info attempt registry request try #1 at 13:48:57 -362 http fetch GET https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz -363 info retry fetch attempt 1 at 13:48:57 -364 info attempt registry request try #1 at 13:48:57 -365 http fetch GET https://registry.npmjs.org/promise/-/promise-7.3.1.tgz -366 http 200 https://registry.npmjs.org/source-map -367 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -367 verbose headers 'content-type': 'application/json', -367 verbose headers 'transfer-encoding': 'chunked', -367 verbose headers connection: 'keep-alive', -367 verbose headers 'set-cookie': -367 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -367 verbose headers 'cf-ray': '59764fa1f8a405fd-FRA', -367 verbose headers age: '5629', -367 verbose headers 'cache-control': 'public, max-age=300', -367 verbose headers etag: 'W/"ed6422e25077febab77501a786cb4bdd"', -367 verbose headers 'last-modified': 'Thu, 07 May 2020 17:23:05 GMT', -367 verbose headers vary: 'accept-encoding, accept', -367 verbose headers 'cf-cache-status': 'HIT', -367 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -367 verbose headers server: 'cloudflare', -367 verbose headers 'content-encoding': 'gzip', -367 verbose headers 'cf-request-id': '02ddd0193d000005fd8da0d200000001' } -368 silly get cb [ 200, -368 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -368 silly get 'content-type': 'application/json', -368 silly get 'transfer-encoding': 'chunked', -368 silly get connection: 'keep-alive', -368 silly get 'set-cookie': -368 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -368 silly get 'cf-ray': '59764fa1f8a405fd-FRA', -368 silly get age: '5629', -368 silly get 'cache-control': 'public, max-age=300', -368 silly get etag: 'W/"ed6422e25077febab77501a786cb4bdd"', -368 silly get 'last-modified': 'Thu, 07 May 2020 17:23:05 GMT', -368 silly get vary: 'accept-encoding, accept', -368 silly get 'cf-cache-status': 'HIT', -368 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -368 silly get server: 'cloudflare', -368 silly get 'content-encoding': 'gzip', -368 silly get 'cf-request-id': '02ddd0193d000005fd8da0d200000001' } ] -369 verbose get saving source-map to /home/christine/.npm/registry.npmjs.org/source-map/.cache.json -370 silly resolveWithNewModule image-size@0.5.5 checking installable status -371 silly cache add args [ 'image-size@~0.5.0', null ] -372 verbose cache add spec image-size@~0.5.0 -373 silly cache add parsed spec Result { -373 silly cache add raw: 'image-size@~0.5.0', -373 silly cache add scope: null, -373 silly cache add name: 'image-size', -373 silly cache add rawSpec: '~0.5.0', -373 silly cache add spec: '>=0.5.0 <0.6.0', -373 silly cache add type: 'range' } -374 silly addNamed image-size@>=0.5.0 <0.6.0 -375 verbose addNamed ">=0.5.0 <0.6.0" is a valid semver range for image-size -376 silly addNameRange { name: 'image-size', range: '>=0.5.0 <0.6.0', hasData: false } -377 silly mapToRegistry name image-size -378 silly mapToRegistry using default registry -379 silly mapToRegistry registry https://registry.npmjs.org/ -380 silly mapToRegistry uri https://registry.npmjs.org/image-size -381 verbose addNameRange registry:https://registry.npmjs.org/image-size not in flight; fetching -382 info retry fetch attempt 1 at 13:48:57 -383 info attempt registry request try #1 at 13:48:57 -384 http fetch GET https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz -385 verbose afterAdd /home/christine/.npm/errno/0.1.7/package/package.json written -386 verbose get https://registry.npmjs.org/mkdirp not expired, no request -387 silly addNameRange number 2 { name: 'mkdirp', range: '>=0.5.0 <0.6.0', hasData: true } -388 silly addNameRange versions [ 'mkdirp', -388 silly addNameRange [ '0.0.1', -388 silly addNameRange '0.0.2', -388 silly addNameRange '0.0.3', -388 silly addNameRange '0.0.4', -388 silly addNameRange '0.0.5', -388 silly addNameRange '0.0.6', -388 silly addNameRange '0.0.7', -388 silly addNameRange '0.1.0', -388 silly addNameRange '0.2.0', -388 silly addNameRange '0.2.1', -388 silly addNameRange '0.2.2', -388 silly addNameRange '0.3.0', -388 silly addNameRange '0.3.1', -388 silly addNameRange '0.3.2', -388 silly addNameRange '0.3.3', -388 silly addNameRange '0.3.4', -388 silly addNameRange '0.3.5', -388 silly addNameRange '0.4.0', -388 silly addNameRange '0.4.1', -388 silly addNameRange '0.4.2', -388 silly addNameRange '0.5.0', -388 silly addNameRange '0.5.1', -388 silly addNameRange '1.0.0', -388 silly addNameRange '1.0.1', -388 silly addNameRange '1.0.2', -388 silly addNameRange '1.0.3', -388 silly addNameRange '0.5.2', -388 silly addNameRange '0.5.3', -388 silly addNameRange '0.5.4', -388 silly addNameRange '1.0.4', -388 silly addNameRange '0.5.5' ] ] -389 silly addNamed mkdirp@0.5.5 -390 verbose addNamed "0.5.5" is a plain semver version for mkdirp -391 silly mapToRegistry name mkdirp -392 silly mapToRegistry using default registry -393 silly mapToRegistry registry https://registry.npmjs.org/ -394 silly mapToRegistry uri https://registry.npmjs.org/mkdirp -395 verbose addRemoteTarball https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz not in flight; adding -396 verbose addRemoteTarball [ 'https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz', -396 verbose addRemoteTarball 'd91cefd62d1436ca0f41620e251288d420099def' ] -397 verbose get https://registry.npmjs.org/image-size not expired, no request -398 silly addNameRange number 2 { name: 'image-size', range: '>=0.5.0 <0.6.0', hasData: true } -399 silly addNameRange versions [ 'image-size', -399 silly addNameRange [ '0.0.2', -399 silly addNameRange '0.0.3', -399 silly addNameRange '0.0.5', -399 silly addNameRange '0.1.0', -399 silly addNameRange '0.1.1', -399 silly addNameRange '0.1.2', -399 silly addNameRange '0.1.3', -399 silly addNameRange '0.1.4', -399 silly addNameRange '0.1.5', -399 silly addNameRange '0.1.6', -399 silly addNameRange '0.1.7', -399 silly addNameRange '0.1.10', -399 silly addNameRange '0.1.15', -399 silly addNameRange '0.0.16', -399 silly addNameRange '0.1.16', -399 silly addNameRange '0.1.17', -399 silly addNameRange '0.1.20', -399 silly addNameRange '0.2.1', -399 silly addNameRange '0.2.2', -399 silly addNameRange '0.2.3', -399 silly addNameRange '0.2.4', -399 silly addNameRange '0.2.5', -399 silly addNameRange '0.3.0', -399 silly addNameRange '0.3.1', -399 silly addNameRange '0.3.2', -399 silly addNameRange '0.3.3', -399 silly addNameRange '0.3.5', -399 silly addNameRange '0.4.0', -399 silly addNameRange '0.5.0', -399 silly addNameRange '0.5.1', -399 silly addNameRange '0.5.2', -399 silly addNameRange '0.5.3', -399 silly addNameRange '0.5.4', -399 silly addNameRange '0.5.5', -399 silly addNameRange '0.6.0', -399 silly addNameRange '0.6.1', -399 silly addNameRange '0.6.2', -399 silly addNameRange '0.6.3', -399 silly addNameRange '0.7.0', -399 silly addNameRange '0.7.1', -399 silly addNameRange '0.7.2', -399 silly addNameRange '0.7.3', -399 silly addNameRange '0.7.4', -399 silly addNameRange '0.7.5', -399 silly addNameRange '0.8.0', -399 silly addNameRange '0.8.1', -399 silly addNameRange '0.8.2', -399 silly addNameRange '0.8.3' ] ] -400 silly addNamed image-size@0.5.5 -401 verbose addNamed "0.5.5" is a plain semver version for image-size -402 silly mapToRegistry name image-size -403 silly mapToRegistry using default registry -404 silly mapToRegistry registry https://registry.npmjs.org/ -405 silly mapToRegistry uri https://registry.npmjs.org/image-size -406 verbose addRemoteTarball https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz not in flight; adding -407 verbose addRemoteTarball [ 'https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz', -407 verbose addRemoteTarball '09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c' ] -408 http fetch 200 https://registry.npmjs.org/mime/-/mime-1.6.0.tgz -409 info retry fetch attempt 1 at 13:48:57 -410 info attempt registry request try #1 at 13:48:57 -411 http fetch GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz -412 http 200 https://registry.npmjs.org/request -413 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -413 verbose headers 'content-type': 'application/json', -413 verbose headers 'transfer-encoding': 'chunked', -413 verbose headers connection: 'keep-alive', -413 verbose headers 'set-cookie': -413 verbose headers [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -413 verbose headers 'cf-ray': '59764fa1dc0ec272-FRA', -413 verbose headers age: '5668', -413 verbose headers 'cache-control': 'public, max-age=300', -413 verbose headers etag: 'W/"f6a50554348a0710692c70f1bd6574ab"', -413 verbose headers 'last-modified': 'Mon, 11 May 2020 15:19:07 GMT', -413 verbose headers vary: 'accept-encoding, accept', -413 verbose headers 'cf-cache-status': 'HIT', -413 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -413 verbose headers server: 'cloudflare', -413 verbose headers 'content-encoding': 'gzip', -413 verbose headers 'cf-request-id': '02ddd0192b0000c27238899200000001' } -414 silly get cb [ 200, -414 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -414 silly get 'content-type': 'application/json', -414 silly get 'transfer-encoding': 'chunked', -414 silly get connection: 'keep-alive', -414 silly get 'set-cookie': -414 silly get [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -414 silly get 'cf-ray': '59764fa1dc0ec272-FRA', -414 silly get age: '5668', -414 silly get 'cache-control': 'public, max-age=300', -414 silly get etag: 'W/"f6a50554348a0710692c70f1bd6574ab"', -414 silly get 'last-modified': 'Mon, 11 May 2020 15:19:07 GMT', -414 silly get vary: 'accept-encoding, accept', -414 silly get 'cf-cache-status': 'HIT', -414 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -414 silly get server: 'cloudflare', -414 silly get 'content-encoding': 'gzip', -414 silly get 'cf-request-id': '02ddd0192b0000c27238899200000001' } ] -415 verbose get saving request to /home/christine/.npm/registry.npmjs.org/request/.cache.json -416 silly resolveWithNewModule source-map@0.6.1 checking installable status -417 silly cache add args [ 'source-map@~0.6.0', null ] -418 verbose cache add spec source-map@~0.6.0 -419 silly cache add parsed spec Result { -419 silly cache add raw: 'source-map@~0.6.0', -419 silly cache add scope: null, -419 silly cache add name: 'source-map', -419 silly cache add rawSpec: '~0.6.0', -419 silly cache add spec: '>=0.6.0 <0.7.0', -419 silly cache add type: 'range' } -420 silly addNamed source-map@>=0.6.0 <0.7.0 -421 verbose addNamed ">=0.6.0 <0.7.0" is a valid semver range for source-map -422 silly addNameRange { name: 'source-map', range: '>=0.6.0 <0.7.0', hasData: false } -423 silly mapToRegistry name source-map -424 silly mapToRegistry using default registry -425 silly mapToRegistry registry https://registry.npmjs.org/ -426 silly mapToRegistry uri https://registry.npmjs.org/source-map -427 verbose addNameRange registry:https://registry.npmjs.org/source-map not in flight; fetching -428 info retry fetch attempt 1 at 13:48:57 -429 info attempt registry request try #1 at 13:48:57 -430 http fetch GET https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz -431 silly fetchAndShaCheck shasum 32cd9e5c64553bd58d19a568af452acff04981b1 -432 http fetch 200 https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz -433 http fetch 200 https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz -434 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime/-/mime-1.6.0.tgz not in flight; adding -435 verbose addTmpTarball already have metadata; skipping unpack for mime@1.6.0 -436 verbose get https://registry.npmjs.org/source-map not expired, no request -437 silly addNameRange number 2 { name: 'source-map', range: '>=0.6.0 <0.7.0', hasData: true } -438 silly addNameRange versions [ 'source-map', -438 silly addNameRange [ '0.0.0', -438 silly addNameRange '0.1.0', -438 silly addNameRange '0.1.1', -438 silly addNameRange '0.1.2', -438 silly addNameRange '0.1.3', -438 silly addNameRange '0.1.4', -438 silly addNameRange '0.1.5', -438 silly addNameRange '0.1.6', -438 silly addNameRange '0.1.7', -438 silly addNameRange '0.1.8', -438 silly addNameRange '0.1.9', -438 silly addNameRange '0.1.10', -438 silly addNameRange '0.1.11', -438 silly addNameRange '0.1.12', -438 silly addNameRange '0.1.13', -438 silly addNameRange '0.1.14', -438 silly addNameRange '0.1.15', -438 silly addNameRange '0.1.16', -438 silly addNameRange '0.1.17', -438 silly addNameRange '0.1.18', -438 silly addNameRange '0.1.19', -438 silly addNameRange '0.1.20', -438 silly addNameRange '0.1.21', -438 silly addNameRange '0.1.22', -438 silly addNameRange '0.1.23', -438 silly addNameRange '0.1.24', -438 silly addNameRange '0.1.25', -438 silly addNameRange '0.1.26', -438 silly addNameRange '0.1.27', -438 silly addNameRange '0.1.28', -438 silly addNameRange '0.1.29', -438 silly addNameRange '0.1.30', -438 silly addNameRange '0.1.31', -438 silly addNameRange '0.1.32', -438 silly addNameRange '0.1.33', -438 silly addNameRange '0.1.34', -438 silly addNameRange '0.1.35', -438 silly addNameRange '0.1.36', -438 silly addNameRange '0.1.37', -438 silly addNameRange '0.1.38', -438 silly addNameRange '0.1.39', -438 silly addNameRange '0.1.40', -438 silly addNameRange '0.1.41', -438 silly addNameRange '0.1.42', -438 silly addNameRange '0.1.43', -438 silly addNameRange '0.2.0', -438 silly addNameRange '0.3.0', -438 silly addNameRange '0.4.0', -438 silly addNameRange '0.4.1', -438 silly addNameRange '0.4.2', -438 silly addNameRange '0.4.3', -438 silly addNameRange '0.4.4', -438 silly addNameRange '0.5.0', -438 silly addNameRange '0.5.1', -438 silly addNameRange '0.5.2', -438 silly addNameRange '0.5.3', -438 silly addNameRange '0.5.4', -438 silly addNameRange '0.5.5', -438 silly addNameRange '0.5.6', -438 silly addNameRange '0.5.7', -438 silly addNameRange '0.6.0', -438 silly addNameRange '0.6.1', -438 silly addNameRange '0.7.0', -438 silly addNameRange '0.7.1', -438 silly addNameRange '0.7.2', -438 silly addNameRange '0.7.3', -438 silly addNameRange '0.8.0-beta.0' ] ] -439 silly addNamed source-map@0.6.1 -440 verbose addNamed "0.6.1" is a plain semver version for source-map -441 silly fetchAndShaCheck shasum 2256bde14d3632958c465ebc96dc467ca07a29fb -442 silly fetchAndShaCheck shasum c881e13cc7015894ed914862d276436fa9a47043 -443 silly resolveWithNewModule request@2.88.2 checking installable status -444 silly cache add args [ 'request@^2.83.0', null ] -445 verbose cache add spec request@^2.83.0 -446 silly cache add parsed spec Result { -446 silly cache add raw: 'request@^2.83.0', -446 silly cache add scope: null, -446 silly cache add name: 'request', -446 silly cache add rawSpec: '^2.83.0', -446 silly cache add spec: '>=2.83.0 <3.0.0', -446 silly cache add type: 'range' } -447 silly addNamed request@>=2.83.0 <3.0.0 -448 verbose addNamed ">=2.83.0 <3.0.0" is a valid semver range for request -449 silly addNameRange { name: 'request', range: '>=2.83.0 <3.0.0', hasData: false } -450 silly mapToRegistry name request -451 silly mapToRegistry using default registry -452 silly mapToRegistry registry https://registry.npmjs.org/ -453 silly mapToRegistry uri https://registry.npmjs.org/request -454 verbose addNameRange registry:https://registry.npmjs.org/request not in flight; fetching -455 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz not in flight; adding -456 verbose addTmpTarball already have metadata; skipping unpack for graceful-fs@4.2.4 -457 http fetch 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz -458 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/tslib/-/tslib-1.13.0.tgz not in flight; adding -459 verbose addTmpTarball already have metadata; skipping unpack for tslib@1.13.0 -460 verbose get https://registry.npmjs.org/request not expired, no request -461 silly addNameRange number 2 { name: 'request', range: '>=2.83.0 <3.0.0', hasData: true } -462 silly addNameRange versions [ 'request', -462 silly addNameRange [ '0.10.0', -462 silly addNameRange '0.8.3', -462 silly addNameRange '0.9.0', -462 silly addNameRange '0.9.1', -462 silly addNameRange '0.9.5', -462 silly addNameRange '1.0.0', -462 silly addNameRange '1.1.0', -462 silly addNameRange '1.1.1', -462 silly addNameRange '1.2.0', -462 silly addNameRange '1.9.0', -462 silly addNameRange '1.9.1', -462 silly addNameRange '1.9.2', -462 silly addNameRange '1.9.3', -462 silly addNameRange '1.9.5', -462 silly addNameRange '1.9.7', -462 silly addNameRange '1.9.8', -462 silly addNameRange '1.9.9', -462 silly addNameRange '2.0.0', -462 silly addNameRange '2.0.1', -462 silly addNameRange '2.0.2', -462 silly addNameRange '2.0.3', -462 silly addNameRange '2.0.4', -462 silly addNameRange '2.0.5', -462 silly addNameRange '2.1.0', -462 silly addNameRange '2.1.1', -462 silly addNameRange '2.2.0', -462 silly addNameRange '2.2.5', -462 silly addNameRange '2.2.6', -462 silly addNameRange '2.2.9', -462 silly addNameRange '2.9.0', -462 silly addNameRange '2.9.1', -462 silly addNameRange '2.9.2', -462 silly addNameRange '2.9.3', -462 silly addNameRange '2.9.100', -462 silly addNameRange '2.9.150', -462 silly addNameRange '2.9.151', -462 silly addNameRange '2.9.152', -462 silly addNameRange '2.9.153', -462 silly addNameRange '2.9.200', -462 silly addNameRange '2.9.201', -462 silly addNameRange '2.9.202', -462 silly addNameRange '2.9.203', -462 silly addNameRange '2.10.0', -462 silly addNameRange '2.11.0', -462 silly addNameRange '2.11.1', -462 silly addNameRange '2.11.2', -462 silly addNameRange '2.11.3', -462 silly addNameRange '2.11.4', -462 silly addNameRange '2.12.0', -462 silly addNameRange '2.14.0', -462 silly addNameRange '2.16.0', -462 silly addNameRange '2.16.2', -462 silly addNameRange '2.16.4', -462 silly addNameRange '2.16.6', -462 silly addNameRange '2.18.0', -462 silly addNameRange '2.19.0', -462 silly addNameRange '2.20.0', -462 silly addNameRange '2.21.0', -462 silly addNameRange '2.22.0', -462 silly addNameRange '2.23.0', -462 silly addNameRange '2.24.0', -462 silly addNameRange '2.25.0', -462 silly addNameRange '2.26.0', -462 silly addNameRange '2.27.0', -462 silly addNameRange '2.28.0', -462 silly addNameRange '2.29.0', -462 silly addNameRange '2.30.0', -462 silly addNameRange '2.31.0', -462 silly addNameRange '2.32.0', -462 silly addNameRange '2.33.0', -462 silly addNameRange '2.34.0', -462 silly addNameRange '2.35.0', -462 silly addNameRange '2.36.0', -462 silly addNameRange '2.37.0', -462 silly addNameRange '2.38.0', -462 silly addNameRange '2.39.0', -462 silly addNameRange '2.40.0', -462 silly addNameRange '2.41.0', -462 silly addNameRange '2.42.0', -462 silly addNameRange '2.43.0', -462 silly addNameRange '2.44.0', -462 silly addNameRange '2.45.0', -462 silly addNameRange '2.46.0', -462 silly addNameRange '2.47.0', -462 silly addNameRange '2.48.0', -462 silly addNameRange '2.49.0', -462 silly addNameRange '2.50.0', -462 silly addNameRange '2.51.0', -462 silly addNameRange '2.52.0', -462 silly addNameRange '2.53.0', -462 silly addNameRange '2.54.0', -462 silly addNameRange '2.55.0', -462 silly addNameRange '2.56.0', -462 silly addNameRange '2.57.0', -462 silly addNameRange '2.58.0', -462 silly addNameRange '2.59.0', -462 silly addNameRange '2.60.0', -462 silly addNameRange '2.61.0', -462 silly addNameRange '2.62.0', -462 silly addNameRange '2.63.0', -462 silly addNameRange ... 26 more items ] ] -463 silly addNamed request@2.88.2 -464 verbose addNamed "2.88.2" is a plain semver version for request -465 warn deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 -466 silly fetchAndShaCheck shasum d91cefd62d1436ca0f41620e251288d420099def -467 silly cache afterAdd source-map@0.6.1 -468 verbose afterAdd /home/christine/.npm/source-map/0.6.1/package/package.json not in flight; writing -469 silly mapToRegistry name request -470 silly mapToRegistry using default registry -471 silly mapToRegistry registry https://registry.npmjs.org/ -472 silly mapToRegistry uri https://registry.npmjs.org/request -473 verbose addRemoteTarball https://registry.npmjs.org/request/-/request-2.88.2.tgz not in flight; adding -474 verbose addRemoteTarball [ 'https://registry.npmjs.org/request/-/request-2.88.2.tgz', -474 verbose addRemoteTarball 'd73c918731cb5a87da047e207234146f664d12b3' ] -475 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz not in flight; adding -476 verbose addTmpTarball already have metadata; skipping unpack for mkdirp@0.5.5 -477 info retry fetch attempt 1 at 13:48:57 -478 info attempt registry request try #1 at 13:48:57 -479 http fetch GET https://registry.npmjs.org/request/-/request-2.88.2.tgz -480 verbose afterAdd /home/christine/.npm/source-map/0.6.1/package/package.json written -481 silly cache afterAdd graceful-fs@4.2.4 -482 verbose afterAdd /home/christine/.npm/graceful-fs/4.2.4/package/package.json not in flight; writing -483 silly cache afterAdd tslib@1.13.0 -484 verbose afterAdd /home/christine/.npm/tslib/1.13.0/package/package.json not in flight; writing -485 silly cache afterAdd mime@1.6.0 -486 verbose afterAdd /home/christine/.npm/mime/1.6.0/package/package.json not in flight; writing -487 verbose afterAdd /home/christine/.npm/graceful-fs/4.2.4/package/package.json written -488 verbose afterAdd /home/christine/.npm/tslib/1.13.0/package/package.json written -489 verbose afterAdd /home/christine/.npm/mime/1.6.0/package/package.json written -490 silly cache afterAdd mkdirp@0.5.5 -491 verbose afterAdd /home/christine/.npm/mkdirp/0.5.5/package/package.json not in flight; writing -492 verbose afterAdd /home/christine/.npm/mkdirp/0.5.5/package/package.json written -493 http fetch 200 https://registry.npmjs.org/promise/-/promise-7.3.1.tgz -494 silly fetchAndShaCheck shasum 064b72602b18f90f29192b8b1bc418ffd1ebd3bf -495 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/promise/-/promise-7.3.1.tgz not in flight; adding -496 verbose addTmpTarball already have metadata; skipping unpack for promise@7.3.1 -497 silly cache afterAdd promise@7.3.1 -498 verbose afterAdd /home/christine/.npm/promise/7.3.1/package/package.json not in flight; writing -499 verbose afterAdd /home/christine/.npm/promise/7.3.1/package/package.json written -500 http fetch 200 https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz -501 silly fetchAndShaCheck shasum 09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c -502 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/image-size/-/image-size-0.5.5.tgz not in flight; adding -503 verbose addTmpTarball already have metadata; skipping unpack for image-size@0.5.5 -504 http fetch 200 https://registry.npmjs.org/request/-/request-2.88.2.tgz -505 silly cache afterAdd image-size@0.5.5 -506 verbose afterAdd /home/christine/.npm/image-size/0.5.5/package/package.json not in flight; writing -507 verbose afterAdd /home/christine/.npm/image-size/0.5.5/package/package.json written -508 silly fetchAndShaCheck shasum d73c918731cb5a87da047e207234146f664d12b3 -509 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/request/-/request-2.88.2.tgz not in flight; adding -510 verbose addTmpTarball already have metadata; skipping unpack for request@2.88.2 -511 silly cache afterAdd request@2.88.2 -512 verbose afterAdd /home/christine/.npm/request/2.88.2/package/package.json not in flight; writing -513 verbose afterAdd /home/christine/.npm/request/2.88.2/package/package.json written -514 silly fetchNamedPackageData prr -515 silly mapToRegistry name prr -516 silly mapToRegistry using default registry -517 silly mapToRegistry registry https://registry.npmjs.org/ -518 silly mapToRegistry uri https://registry.npmjs.org/prr -519 verbose request uri https://registry.npmjs.org/prr -520 verbose request no auth needed -521 info attempt registry request try #1 at 13:48:57 -522 verbose etag W/"07ebb6c11e7a8b0a67aabb93f8b3aa09" -523 verbose lastModified Sun, 27 May 2018 13:04:47 GMT -524 http request GET https://registry.npmjs.org/prr -525 http 304 https://registry.npmjs.org/prr -526 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -526 verbose headers connection: 'keep-alive', -526 verbose headers 'set-cookie': -526 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -526 verbose headers 'cf-ray': '59764fa31fae648b-FRA', -526 verbose headers age: '5629', -526 verbose headers 'cache-control': 'public, max-age=300', -526 verbose headers etag: '"07ebb6c11e7a8b0a67aabb93f8b3aa09"', -526 verbose headers 'last-modified': 'Sun, 27 May 2018 13:04:47 GMT', -526 verbose headers vary: 'Accept-Encoding', -526 verbose headers 'cf-cache-status': 'HIT', -526 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -526 verbose headers server: 'cloudflare', -526 verbose headers 'cf-request-id': '02ddd019ef0000648bda3f9200000001' } -527 silly get cb [ 304, -527 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -527 silly get connection: 'keep-alive', -527 silly get 'set-cookie': -527 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -527 silly get 'cf-ray': '59764fa31fae648b-FRA', -527 silly get age: '5629', -527 silly get 'cache-control': 'public, max-age=300', -527 silly get etag: '"07ebb6c11e7a8b0a67aabb93f8b3aa09"', -527 silly get 'last-modified': 'Sun, 27 May 2018 13:04:47 GMT', -527 silly get vary: 'Accept-Encoding', -527 silly get 'cf-cache-status': 'HIT', -527 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -527 silly get server: 'cloudflare', -527 silly get 'cf-request-id': '02ddd019ef0000648bda3f9200000001' } ] -528 verbose etag https://registry.npmjs.org/prr from cache -529 verbose get saving prr to /home/christine/.npm/registry.npmjs.org/prr/.cache.json -530 silly resolveWithNewModule prr@1.0.1 checking installable status -531 silly cache add args [ 'prr@~1.0.1', null ] -532 verbose cache add spec prr@~1.0.1 -533 silly cache add parsed spec Result { -533 silly cache add raw: 'prr@~1.0.1', -533 silly cache add scope: null, -533 silly cache add name: 'prr', -533 silly cache add rawSpec: '~1.0.1', -533 silly cache add spec: '>=1.0.1 <1.1.0', -533 silly cache add type: 'range' } -534 silly addNamed prr@>=1.0.1 <1.1.0 -535 verbose addNamed ">=1.0.1 <1.1.0" is a valid semver range for prr -536 silly addNameRange { name: 'prr', range: '>=1.0.1 <1.1.0', hasData: false } -537 silly mapToRegistry name prr -538 silly mapToRegistry using default registry -539 silly mapToRegistry registry https://registry.npmjs.org/ -540 silly mapToRegistry uri https://registry.npmjs.org/prr -541 verbose addNameRange registry:https://registry.npmjs.org/prr not in flight; fetching -542 verbose get https://registry.npmjs.org/prr not expired, no request -543 silly addNameRange number 2 { name: 'prr', range: '>=1.0.1 <1.1.0', hasData: true } -544 silly addNameRange versions [ 'prr', [ '0.0.0', '1.0.0', '1.0.1' ] ] -545 silly addNamed prr@1.0.1 -546 verbose addNamed "1.0.1" is a plain semver version for prr -547 silly cache afterAdd prr@1.0.1 -548 verbose afterAdd /home/christine/.npm/prr/1.0.1/package/package.json not in flight; writing -549 verbose afterAdd /home/christine/.npm/prr/1.0.1/package/package.json written -550 silly fetchNamedPackageData minimist -551 silly mapToRegistry name minimist -552 silly mapToRegistry using default registry -553 silly mapToRegistry registry https://registry.npmjs.org/ -554 silly mapToRegistry uri https://registry.npmjs.org/minimist -555 verbose request uri https://registry.npmjs.org/minimist -556 verbose request no auth needed -557 info attempt registry request try #1 at 13:48:57 -558 verbose etag W/"81c2eaf8bba19c1bd6131ba9e932902f" -559 verbose lastModified Sun, 11 Aug 2019 09:03:19 GMT -560 http request GET https://registry.npmjs.org/minimist -561 http 200 https://registry.npmjs.org/minimist -562 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -562 verbose headers 'content-type': 'application/json', -562 verbose headers 'transfer-encoding': 'chunked', -562 verbose headers connection: 'keep-alive', -562 verbose headers 'set-cookie': -562 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -562 verbose headers 'cf-ray': '59764fa35d5205fd-FRA', -562 verbose headers age: '5653', -562 verbose headers 'cache-control': 'public, max-age=300', -562 verbose headers etag: 'W/"ab6c93df45eeb8867cab5ea4f62b4b74"', -562 verbose headers 'last-modified': 'Thu, 12 Mar 2020 22:16:24 GMT', -562 verbose headers vary: 'accept-encoding, accept', -562 verbose headers 'cf-cache-status': 'HIT', -562 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -562 verbose headers server: 'cloudflare', -562 verbose headers 'content-encoding': 'gzip', -562 verbose headers 'cf-request-id': '02ddd01a16000005fd8da2d200000001' } -563 silly get cb [ 200, -563 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -563 silly get 'content-type': 'application/json', -563 silly get 'transfer-encoding': 'chunked', -563 silly get connection: 'keep-alive', -563 silly get 'set-cookie': -563 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -563 silly get 'cf-ray': '59764fa35d5205fd-FRA', -563 silly get age: '5653', -563 silly get 'cache-control': 'public, max-age=300', -563 silly get etag: 'W/"ab6c93df45eeb8867cab5ea4f62b4b74"', -563 silly get 'last-modified': 'Thu, 12 Mar 2020 22:16:24 GMT', -563 silly get vary: 'accept-encoding, accept', -563 silly get 'cf-cache-status': 'HIT', -563 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -563 silly get server: 'cloudflare', -563 silly get 'content-encoding': 'gzip', -563 silly get 'cf-request-id': '02ddd01a16000005fd8da2d200000001' } ] -564 verbose get saving minimist to /home/christine/.npm/registry.npmjs.org/minimist/.cache.json -565 silly resolveWithNewModule minimist@1.2.5 checking installable status -566 silly cache add args [ 'minimist@^1.2.5', null ] -567 verbose cache add spec minimist@^1.2.5 -568 silly cache add parsed spec Result { -568 silly cache add raw: 'minimist@^1.2.5', -568 silly cache add scope: null, -568 silly cache add name: 'minimist', -568 silly cache add rawSpec: '^1.2.5', -568 silly cache add spec: '>=1.2.5 <2.0.0', -568 silly cache add type: 'range' } -569 silly addNamed minimist@>=1.2.5 <2.0.0 -570 verbose addNamed ">=1.2.5 <2.0.0" is a valid semver range for minimist -571 silly addNameRange { name: 'minimist', range: '>=1.2.5 <2.0.0', hasData: false } -572 silly mapToRegistry name minimist -573 silly mapToRegistry using default registry -574 silly mapToRegistry registry https://registry.npmjs.org/ -575 silly mapToRegistry uri https://registry.npmjs.org/minimist -576 verbose addNameRange registry:https://registry.npmjs.org/minimist not in flight; fetching -577 verbose get https://registry.npmjs.org/minimist not expired, no request -578 silly addNameRange number 2 { name: 'minimist', range: '>=1.2.5 <2.0.0', hasData: true } -579 silly addNameRange versions [ 'minimist', -579 silly addNameRange [ '0.0.0', -579 silly addNameRange '0.0.1', -579 silly addNameRange '0.0.2', -579 silly addNameRange '0.0.3', -579 silly addNameRange '0.0.4', -579 silly addNameRange '0.0.5', -579 silly addNameRange '0.0.6', -579 silly addNameRange '0.0.7', -579 silly addNameRange '0.0.8', -579 silly addNameRange '0.0.9', -579 silly addNameRange '0.0.10', -579 silly addNameRange '0.1.0', -579 silly addNameRange '0.2.0', -579 silly addNameRange '1.0.0', -579 silly addNameRange '1.1.0', -579 silly addNameRange '1.1.1', -579 silly addNameRange '1.1.2', -579 silly addNameRange '1.1.3', -579 silly addNameRange '1.2.0', -579 silly addNameRange '1.2.1', -579 silly addNameRange '1.2.2', -579 silly addNameRange '1.2.3', -579 silly addNameRange '1.2.4', -579 silly addNameRange '0.2.1', -579 silly addNameRange '1.2.5' ] ] -580 silly addNamed minimist@1.2.5 -581 verbose addNamed "1.2.5" is a plain semver version for minimist -582 silly mapToRegistry name minimist -583 silly mapToRegistry using default registry -584 silly mapToRegistry registry https://registry.npmjs.org/ -585 silly mapToRegistry uri https://registry.npmjs.org/minimist -586 verbose addRemoteTarball https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz not in flight; adding -587 verbose addRemoteTarball [ 'https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz', -587 verbose addRemoteTarball '67d66014b66a6a8aaa0c083c5fd58df4e4e97602' ] -588 info retry fetch attempt 1 at 13:48:57 -589 info attempt registry request try #1 at 13:48:57 -590 http fetch GET https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz -591 http fetch 200 https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz -592 silly fetchAndShaCheck shasum 67d66014b66a6a8aaa0c083c5fd58df4e4e97602 -593 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/minimist/-/minimist-1.2.5.tgz not in flight; adding -594 verbose addTmpTarball already have metadata; skipping unpack for minimist@1.2.5 -595 silly cache afterAdd minimist@1.2.5 -596 verbose afterAdd /home/christine/.npm/minimist/1.2.5/package/package.json not in flight; writing -597 verbose afterAdd /home/christine/.npm/minimist/1.2.5/package/package.json written -598 silly fetchNamedPackageData asap -599 silly mapToRegistry name asap -600 silly mapToRegistry using default registry -601 silly mapToRegistry registry https://registry.npmjs.org/ -602 silly mapToRegistry uri https://registry.npmjs.org/asap -603 verbose request uri https://registry.npmjs.org/asap -604 verbose request no auth needed -605 info attempt registry request try #1 at 13:48:57 -606 http request GET https://registry.npmjs.org/asap -607 http 200 https://registry.npmjs.org/asap -608 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -608 verbose headers 'content-type': 'application/json; charset=UTF-8', -608 verbose headers 'transfer-encoding': 'chunked', -608 verbose headers connection: 'keep-alive', -608 verbose headers 'set-cookie': -608 verbose headers [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -608 verbose headers 'cf-ray': '59764fa3da5bdfc7-FRA', -608 verbose headers age: '5027', -608 verbose headers 'cache-control': 'public, max-age=300', -608 verbose headers etag: 'W/"b9309e9e7d929bcdb698cfa401f3696f"', -608 verbose headers 'last-modified': 'Sat, 26 May 2018 17:25:23 GMT', -608 verbose headers vary: 'accept-encoding, accept', -608 verbose headers 'cf-cache-status': 'HIT', -608 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -608 verbose headers server: 'cloudflare', -608 verbose headers 'content-encoding': 'gzip', -608 verbose headers 'cf-request-id': '02ddd01a6b0000dfc72a89b200000001' } -609 silly get cb [ 200, -609 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -609 silly get 'content-type': 'application/json; charset=UTF-8', -609 silly get 'transfer-encoding': 'chunked', -609 silly get connection: 'keep-alive', -609 silly get 'set-cookie': -609 silly get [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -609 silly get 'cf-ray': '59764fa3da5bdfc7-FRA', -609 silly get age: '5027', -609 silly get 'cache-control': 'public, max-age=300', -609 silly get etag: 'W/"b9309e9e7d929bcdb698cfa401f3696f"', -609 silly get 'last-modified': 'Sat, 26 May 2018 17:25:23 GMT', -609 silly get vary: 'accept-encoding, accept', -609 silly get 'cf-cache-status': 'HIT', -609 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -609 silly get server: 'cloudflare', -609 silly get 'content-encoding': 'gzip', -609 silly get 'cf-request-id': '02ddd01a6b0000dfc72a89b200000001' } ] -610 verbose get saving asap to /home/christine/.npm/registry.npmjs.org/asap/.cache.json -611 silly resolveWithNewModule asap@2.0.6 checking installable status -612 silly cache add args [ 'asap@~2.0.3', null ] -613 verbose cache add spec asap@~2.0.3 -614 silly cache add parsed spec Result { -614 silly cache add raw: 'asap@~2.0.3', -614 silly cache add scope: null, -614 silly cache add name: 'asap', -614 silly cache add rawSpec: '~2.0.3', -614 silly cache add spec: '>=2.0.3 <2.1.0', -614 silly cache add type: 'range' } -615 silly addNamed asap@>=2.0.3 <2.1.0 -616 verbose addNamed ">=2.0.3 <2.1.0" is a valid semver range for asap -617 silly addNameRange { name: 'asap', range: '>=2.0.3 <2.1.0', hasData: false } -618 silly mapToRegistry name asap -619 silly mapToRegistry using default registry -620 silly mapToRegistry registry https://registry.npmjs.org/ -621 silly mapToRegistry uri https://registry.npmjs.org/asap -622 verbose addNameRange registry:https://registry.npmjs.org/asap not in flight; fetching -623 verbose get https://registry.npmjs.org/asap not expired, no request -624 silly addNameRange number 2 { name: 'asap', range: '>=2.0.3 <2.1.0', hasData: true } -625 silly addNameRange versions [ 'asap', -625 silly addNameRange [ '0.0.0', -625 silly addNameRange '1.0.0', -625 silly addNameRange '2.0.0', -625 silly addNameRange '2.0.1', -625 silly addNameRange '2.0.2', -625 silly addNameRange '2.0.3', -625 silly addNameRange '2.0.4', -625 silly addNameRange '2.0.5', -625 silly addNameRange '2.0.6' ] ] -626 silly addNamed asap@2.0.6 -627 verbose addNamed "2.0.6" is a plain semver version for asap -628 silly mapToRegistry name asap -629 silly mapToRegistry using default registry -630 silly mapToRegistry registry https://registry.npmjs.org/ -631 silly mapToRegistry uri https://registry.npmjs.org/asap -632 verbose addRemoteTarball https://registry.npmjs.org/asap/-/asap-2.0.6.tgz not in flight; adding -633 verbose addRemoteTarball [ 'https://registry.npmjs.org/asap/-/asap-2.0.6.tgz', -633 verbose addRemoteTarball 'e50347611d7e690943208bbdafebcbc2fb866d46' ] -634 info retry fetch attempt 1 at 13:48:57 -635 info attempt registry request try #1 at 13:48:57 -636 http fetch GET https://registry.npmjs.org/asap/-/asap-2.0.6.tgz -637 http fetch 200 https://registry.npmjs.org/asap/-/asap-2.0.6.tgz -638 silly fetchAndShaCheck shasum e50347611d7e690943208bbdafebcbc2fb866d46 -639 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/asap/-/asap-2.0.6.tgz not in flight; adding -640 verbose addTmpTarball already have metadata; skipping unpack for asap@2.0.6 -641 silly cache afterAdd asap@2.0.6 -642 verbose afterAdd /home/christine/.npm/asap/2.0.6/package/package.json not in flight; writing -643 verbose afterAdd /home/christine/.npm/asap/2.0.6/package/package.json written -644 silly fetchNamedPackageData aws-sign2 -645 silly mapToRegistry name aws-sign2 -646 silly mapToRegistry using default registry -647 silly mapToRegistry registry https://registry.npmjs.org/ -648 silly mapToRegistry uri https://registry.npmjs.org/aws-sign2 -649 silly fetchNamedPackageData aws4 -650 silly mapToRegistry name aws4 -651 silly mapToRegistry using default registry -652 silly mapToRegistry registry https://registry.npmjs.org/ -653 silly mapToRegistry uri https://registry.npmjs.org/aws4 -654 silly fetchNamedPackageData caseless -655 silly mapToRegistry name caseless -656 silly mapToRegistry using default registry -657 silly mapToRegistry registry https://registry.npmjs.org/ -658 silly mapToRegistry uri https://registry.npmjs.org/caseless -659 silly fetchNamedPackageData combined-stream -660 silly mapToRegistry name combined-stream -661 silly mapToRegistry using default registry -662 silly mapToRegistry registry https://registry.npmjs.org/ -663 silly mapToRegistry uri https://registry.npmjs.org/combined-stream -664 silly fetchNamedPackageData extend -665 silly mapToRegistry name extend -666 silly mapToRegistry using default registry -667 silly mapToRegistry registry https://registry.npmjs.org/ -668 silly mapToRegistry uri https://registry.npmjs.org/extend -669 silly fetchNamedPackageData forever-agent -670 silly mapToRegistry name forever-agent -671 silly mapToRegistry using default registry -672 silly mapToRegistry registry https://registry.npmjs.org/ -673 silly mapToRegistry uri https://registry.npmjs.org/forever-agent -674 silly fetchNamedPackageData form-data -675 silly mapToRegistry name form-data -676 silly mapToRegistry using default registry -677 silly mapToRegistry registry https://registry.npmjs.org/ -678 silly mapToRegistry uri https://registry.npmjs.org/form-data -679 silly fetchNamedPackageData har-validator -680 silly mapToRegistry name har-validator -681 silly mapToRegistry using default registry -682 silly mapToRegistry registry https://registry.npmjs.org/ -683 silly mapToRegistry uri https://registry.npmjs.org/har-validator -684 silly fetchNamedPackageData http-signature -685 silly mapToRegistry name http-signature -686 silly mapToRegistry using default registry -687 silly mapToRegistry registry https://registry.npmjs.org/ -688 silly mapToRegistry uri https://registry.npmjs.org/http-signature -689 silly fetchNamedPackageData is-typedarray -690 silly mapToRegistry name is-typedarray -691 silly mapToRegistry using default registry -692 silly mapToRegistry registry https://registry.npmjs.org/ -693 silly mapToRegistry uri https://registry.npmjs.org/is-typedarray -694 silly fetchNamedPackageData isstream -695 silly mapToRegistry name isstream -696 silly mapToRegistry using default registry -697 silly mapToRegistry registry https://registry.npmjs.org/ -698 silly mapToRegistry uri https://registry.npmjs.org/isstream -699 silly fetchNamedPackageData json-stringify-safe -700 silly mapToRegistry name json-stringify-safe -701 silly mapToRegistry using default registry -702 silly mapToRegistry registry https://registry.npmjs.org/ -703 silly mapToRegistry uri https://registry.npmjs.org/json-stringify-safe -704 silly fetchNamedPackageData mime-types -705 silly mapToRegistry name mime-types -706 silly mapToRegistry using default registry -707 silly mapToRegistry registry https://registry.npmjs.org/ -708 silly mapToRegistry uri https://registry.npmjs.org/mime-types -709 silly fetchNamedPackageData oauth-sign -710 silly mapToRegistry name oauth-sign -711 silly mapToRegistry using default registry -712 silly mapToRegistry registry https://registry.npmjs.org/ -713 silly mapToRegistry uri https://registry.npmjs.org/oauth-sign -714 silly fetchNamedPackageData performance-now -715 silly mapToRegistry name performance-now -716 silly mapToRegistry using default registry -717 silly mapToRegistry registry https://registry.npmjs.org/ -718 silly mapToRegistry uri https://registry.npmjs.org/performance-now -719 silly fetchNamedPackageData qs -720 silly mapToRegistry name qs -721 silly mapToRegistry using default registry -722 silly mapToRegistry registry https://registry.npmjs.org/ -723 silly mapToRegistry uri https://registry.npmjs.org/qs -724 silly fetchNamedPackageData safe-buffer -725 silly mapToRegistry name safe-buffer -726 silly mapToRegistry using default registry -727 silly mapToRegistry registry https://registry.npmjs.org/ -728 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer -729 silly fetchNamedPackageData tough-cookie -730 silly mapToRegistry name tough-cookie -731 silly mapToRegistry using default registry -732 silly mapToRegistry registry https://registry.npmjs.org/ -733 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie -734 silly fetchNamedPackageData tunnel-agent -735 silly mapToRegistry name tunnel-agent -736 silly mapToRegistry using default registry -737 silly mapToRegistry registry https://registry.npmjs.org/ -738 silly mapToRegistry uri https://registry.npmjs.org/tunnel-agent -739 silly fetchNamedPackageData uuid -740 silly mapToRegistry name uuid -741 silly mapToRegistry using default registry -742 silly mapToRegistry registry https://registry.npmjs.org/ -743 silly mapToRegistry uri https://registry.npmjs.org/uuid -744 verbose request uri https://registry.npmjs.org/aws-sign2 -745 verbose request no auth needed -746 info attempt registry request try #1 at 13:48:57 -747 verbose etag W/"7bf763d2cccd0806178c5c3e43895950" -748 verbose lastModified Sat, 26 May 2018 17:48:52 GMT -749 http request GET https://registry.npmjs.org/aws-sign2 -750 verbose request uri https://registry.npmjs.org/aws4 -751 verbose request no auth needed -752 info attempt registry request try #1 at 13:48:57 -753 verbose etag W/"95c9834de9b7164b9a063970ba631035" -754 verbose lastModified Mon, 13 Jan 2020 23:25:51 GMT -755 http request GET https://registry.npmjs.org/aws4 -756 verbose request uri https://registry.npmjs.org/caseless -757 verbose request no auth needed -758 info attempt registry request try #1 at 13:48:57 -759 verbose etag W/"37dc2c2e48fd048da76bb52a97386418" -760 verbose lastModified Sat, 26 May 2018 19:27:25 GMT -761 http request GET https://registry.npmjs.org/caseless -762 verbose request uri https://registry.npmjs.org/combined-stream -763 verbose request no auth needed -764 info attempt registry request try #1 at 13:48:57 -765 verbose etag W/"01d038e7b9fcfd5e5654a7d7003bfe74" -766 verbose lastModified Sun, 12 May 2019 17:49:50 GMT -767 http request GET https://registry.npmjs.org/combined-stream -768 verbose request uri https://registry.npmjs.org/extend -769 verbose request no auth needed -770 info attempt registry request try #1 at 13:48:57 -771 verbose etag W/"924fa39abddd399eb964b1aa611da651" -772 verbose lastModified Thu, 19 Jul 2018 22:12:47 GMT -773 http request GET https://registry.npmjs.org/extend -774 verbose request uri https://registry.npmjs.org/forever-agent -775 verbose request no auth needed -776 info attempt registry request try #1 at 13:48:57 -777 verbose etag W/"9e6ef96089dd23304c2ea7d2fb731c9c" -778 verbose lastModified Sun, 27 May 2018 01:06:13 GMT -779 http request GET https://registry.npmjs.org/forever-agent -780 verbose request uri https://registry.npmjs.org/form-data -781 verbose request no auth needed -782 info attempt registry request try #1 at 13:48:57 -783 verbose etag W/"5e211bf0fabf58f7b2a855c8b4ce28a4" -784 verbose lastModified Wed, 06 Nov 2019 07:57:03 GMT -785 http request GET https://registry.npmjs.org/form-data -786 verbose request uri https://registry.npmjs.org/har-validator -787 verbose request no auth needed -788 info attempt registry request try #1 at 13:48:57 -789 verbose etag W/"a261ac4614f4e022065b83613ee209ab" -790 verbose lastModified Fri, 04 Jan 2019 02:36:17 GMT -791 http request GET https://registry.npmjs.org/har-validator -792 verbose request uri https://registry.npmjs.org/http-signature -793 verbose request no auth needed -794 info attempt registry request try #1 at 13:48:57 -795 verbose etag W/"a22cccd7d585d00e5e26fe5111bee01d" -796 verbose lastModified Fri, 13 Dec 2019 16:32:29 GMT -797 http request GET https://registry.npmjs.org/http-signature -798 verbose request uri https://registry.npmjs.org/is-typedarray -799 verbose request no auth needed -800 info attempt registry request try #1 at 13:48:57 -801 verbose etag W/"e7b88219ebe721b877b678c51795c9c5" -802 verbose lastModified Sun, 27 May 2018 04:59:55 GMT -803 http request GET https://registry.npmjs.org/is-typedarray -804 verbose request uri https://registry.npmjs.org/isstream -805 verbose request no auth needed -806 info attempt registry request try #1 at 13:48:57 -807 verbose etag W/"9dc7f37e087df077683bf238c847ad45" -808 verbose lastModified Sun, 27 May 2018 05:02:31 GMT -809 http request GET https://registry.npmjs.org/isstream -810 verbose request uri https://registry.npmjs.org/json-stringify-safe -811 verbose request no auth needed -812 info attempt registry request try #1 at 13:48:57 -813 verbose etag W/"7f39a9aafcaefe8efbf43a9f2e56c4eb" -814 verbose lastModified Sun, 27 May 2018 05:41:03 GMT -815 http request GET https://registry.npmjs.org/json-stringify-safe -816 verbose request uri https://registry.npmjs.org/oauth-sign -817 verbose request no auth needed -818 info attempt registry request try #1 at 13:48:57 -819 verbose etag W/"3032c1efe9ec61d748d027a1da2bab61" -820 verbose lastModified Thu, 02 Aug 2018 18:04:02 GMT -821 http request GET https://registry.npmjs.org/oauth-sign -822 verbose request uri https://registry.npmjs.org/mime-types -823 verbose request no auth needed -824 info attempt registry request try #1 at 13:48:57 -825 verbose etag W/"ace0d1d2bbdfabcc2f0fdf5db2297cb9" -826 verbose lastModified Mon, 06 Jan 2020 03:47:58 GMT -827 http request GET https://registry.npmjs.org/mime-types -828 verbose request uri https://registry.npmjs.org/performance-now -829 verbose request no auth needed -830 info attempt registry request try #1 at 13:48:57 -831 verbose etag W/"5f12ad497b3e39323dcdde75c34f5767" -832 verbose lastModified Sun, 27 May 2018 12:05:53 GMT -833 http request GET https://registry.npmjs.org/performance-now -834 verbose request uri https://registry.npmjs.org/qs -835 verbose request no auth needed -836 info attempt registry request try #1 at 13:48:57 -837 verbose etag W/"ccaef4541845c31c4cc05bcf8dd00ce6" -838 verbose lastModified Fri, 08 Nov 2019 06:46:39 GMT -839 http request GET https://registry.npmjs.org/qs -840 verbose request uri https://registry.npmjs.org/tough-cookie -841 verbose request no auth needed -842 info attempt registry request try #1 at 13:48:57 -843 verbose etag W/"f1d93d88b646bb4c354f8c481852a1b7" -844 verbose lastModified Tue, 05 Feb 2019 03:09:49 GMT -845 http request GET https://registry.npmjs.org/tough-cookie -846 verbose request uri https://registry.npmjs.org/tunnel-agent -847 verbose request no auth needed -848 info attempt registry request try #1 at 13:48:57 -849 verbose etag W/"03911fc1f433b33bccf8a4a2a5de2375" -850 verbose lastModified Sun, 27 May 2018 20:02:57 GMT -851 http request GET https://registry.npmjs.org/tunnel-agent -852 verbose request uri https://registry.npmjs.org/safe-buffer -853 verbose request no auth needed -854 info attempt registry request try #1 at 13:48:57 -855 verbose etag W/"00b820fed08175238fc3473b2b3e0278" -856 verbose lastModified Fri, 05 Jul 2019 18:04:37 GMT -857 http request GET https://registry.npmjs.org/safe-buffer -858 verbose request uri https://registry.npmjs.org/uuid -859 verbose request no auth needed -860 info attempt registry request try #1 at 13:48:57 -861 verbose etag W/"e1230e67a078f82b785335adbba5abd3" -862 verbose lastModified Thu, 16 Jan 2020 21:05:42 GMT -863 http request GET https://registry.npmjs.org/uuid -864 http 304 https://registry.npmjs.org/aws-sign2 -865 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -865 verbose headers connection: 'keep-alive', -865 verbose headers 'set-cookie': -865 verbose headers [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -865 verbose headers 'cf-ray': '59764fa49cf4d6e9-FRA', -865 verbose headers age: '5657', -865 verbose headers 'cache-control': 'public, max-age=300', -865 verbose headers etag: '"7bf763d2cccd0806178c5c3e43895950"', -865 verbose headers 'last-modified': 'Sat, 26 May 2018 17:48:52 GMT', -865 verbose headers vary: 'Accept-Encoding', -865 verbose headers 'cf-cache-status': 'HIT', -865 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -865 verbose headers server: 'cloudflare', -865 verbose headers 'cf-request-id': '02ddd01ae00000d6e975b28200000001' } -866 silly get cb [ 304, -866 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -866 silly get connection: 'keep-alive', -866 silly get 'set-cookie': -866 silly get [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -866 silly get 'cf-ray': '59764fa49cf4d6e9-FRA', -866 silly get age: '5657', -866 silly get 'cache-control': 'public, max-age=300', -866 silly get etag: '"7bf763d2cccd0806178c5c3e43895950"', -866 silly get 'last-modified': 'Sat, 26 May 2018 17:48:52 GMT', -866 silly get vary: 'Accept-Encoding', -866 silly get 'cf-cache-status': 'HIT', -866 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -866 silly get server: 'cloudflare', -866 silly get 'cf-request-id': '02ddd01ae00000d6e975b28200000001' } ] -867 verbose etag https://registry.npmjs.org/aws-sign2 from cache -868 verbose get saving aws-sign2 to /home/christine/.npm/registry.npmjs.org/aws-sign2/.cache.json -869 silly resolveWithNewModule aws-sign2@0.7.0 checking installable status -870 silly cache add args [ 'aws-sign2@~0.7.0', null ] -871 verbose cache add spec aws-sign2@~0.7.0 -872 silly cache add parsed spec Result { -872 silly cache add raw: 'aws-sign2@~0.7.0', -872 silly cache add scope: null, -872 silly cache add name: 'aws-sign2', -872 silly cache add rawSpec: '~0.7.0', -872 silly cache add spec: '>=0.7.0 <0.8.0', -872 silly cache add type: 'range' } -873 silly addNamed aws-sign2@>=0.7.0 <0.8.0 -874 verbose addNamed ">=0.7.0 <0.8.0" is a valid semver range for aws-sign2 -875 silly addNameRange { name: 'aws-sign2', range: '>=0.7.0 <0.8.0', hasData: false } -876 silly mapToRegistry name aws-sign2 -877 silly mapToRegistry using default registry -878 silly mapToRegistry registry https://registry.npmjs.org/ -879 silly mapToRegistry uri https://registry.npmjs.org/aws-sign2 -880 verbose addNameRange registry:https://registry.npmjs.org/aws-sign2 not in flight; fetching -881 verbose get https://registry.npmjs.org/aws-sign2 not expired, no request -882 silly addNameRange number 2 { name: 'aws-sign2', range: '>=0.7.0 <0.8.0', hasData: true } -883 silly addNameRange versions [ 'aws-sign2', [ '0.4.0', '0.5.0', '0.6.0', '0.7.0' ] ] -884 silly addNamed aws-sign2@0.7.0 -885 verbose addNamed "0.7.0" is a plain semver version for aws-sign2 -886 silly cache afterAdd aws-sign2@0.7.0 -887 verbose afterAdd /home/christine/.npm/aws-sign2/0.7.0/package/package.json not in flight; writing -888 verbose afterAdd /home/christine/.npm/aws-sign2/0.7.0/package/package.json written -889 http 304 https://registry.npmjs.org/form-data -890 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -890 verbose headers connection: 'keep-alive', -890 verbose headers 'set-cookie': -890 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -890 verbose headers 'cf-ray': '59764fa4ba1305fd-FRA', -890 verbose headers age: '5355', -890 verbose headers 'cache-control': 'public, max-age=300', -890 verbose headers etag: '"5e211bf0fabf58f7b2a855c8b4ce28a4"', -890 verbose headers 'last-modified': 'Wed, 06 Nov 2019 07:57:03 GMT', -890 verbose headers vary: 'Accept-Encoding', -890 verbose headers 'cf-cache-status': 'HIT', -890 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -890 verbose headers server: 'cloudflare', -890 verbose headers 'cf-request-id': '02ddd01af4000005fd8da55200000001' } -891 silly get cb [ 304, -891 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -891 silly get connection: 'keep-alive', -891 silly get 'set-cookie': -891 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -891 silly get 'cf-ray': '59764fa4ba1305fd-FRA', -891 silly get age: '5355', -891 silly get 'cache-control': 'public, max-age=300', -891 silly get etag: '"5e211bf0fabf58f7b2a855c8b4ce28a4"', -891 silly get 'last-modified': 'Wed, 06 Nov 2019 07:57:03 GMT', -891 silly get vary: 'Accept-Encoding', -891 silly get 'cf-cache-status': 'HIT', -891 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -891 silly get server: 'cloudflare', -891 silly get 'cf-request-id': '02ddd01af4000005fd8da55200000001' } ] -892 verbose etag https://registry.npmjs.org/form-data from cache -893 verbose get saving form-data to /home/christine/.npm/registry.npmjs.org/form-data/.cache.json -894 http 304 https://registry.npmjs.org/har-validator -895 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -895 verbose headers connection: 'keep-alive', -895 verbose headers 'set-cookie': -895 verbose headers [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -895 verbose headers 'cf-ray': '59764fa4b9a6c272-FRA', -895 verbose headers age: '5655', -895 verbose headers 'cache-control': 'public, max-age=300', -895 verbose headers etag: '"a261ac4614f4e022065b83613ee209ab"', -895 verbose headers 'last-modified': 'Fri, 04 Jan 2019 02:36:17 GMT', -895 verbose headers vary: 'Accept-Encoding', -895 verbose headers 'cf-cache-status': 'HIT', -895 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -895 verbose headers server: 'cloudflare', -895 verbose headers 'cf-request-id': '02ddd01af40000c272388b2200000001' } -896 silly get cb [ 304, -896 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -896 silly get connection: 'keep-alive', -896 silly get 'set-cookie': -896 silly get [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -896 silly get 'cf-ray': '59764fa4b9a6c272-FRA', -896 silly get age: '5655', -896 silly get 'cache-control': 'public, max-age=300', -896 silly get etag: '"a261ac4614f4e022065b83613ee209ab"', -896 silly get 'last-modified': 'Fri, 04 Jan 2019 02:36:17 GMT', -896 silly get vary: 'Accept-Encoding', -896 silly get 'cf-cache-status': 'HIT', -896 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -896 silly get server: 'cloudflare', -896 silly get 'cf-request-id': '02ddd01af40000c272388b2200000001' } ] -897 verbose etag https://registry.npmjs.org/har-validator from cache -898 verbose get saving har-validator to /home/christine/.npm/registry.npmjs.org/har-validator/.cache.json -899 http 304 https://registry.npmjs.org/caseless -900 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -900 verbose headers connection: 'keep-alive', -900 verbose headers 'set-cookie': -900 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -900 verbose headers 'cf-ray': '59764fa4b9de325c-FRA', -900 verbose headers age: '5655', -900 verbose headers 'cache-control': 'public, max-age=300', -900 verbose headers etag: '"37dc2c2e48fd048da76bb52a97386418"', -900 verbose headers 'last-modified': 'Sat, 26 May 2018 19:27:25 GMT', -900 verbose headers vary: 'Accept-Encoding', -900 verbose headers 'cf-cache-status': 'HIT', -900 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -900 verbose headers server: 'cloudflare', -900 verbose headers 'cf-request-id': '02ddd01af40000325c4c810200000001' } -901 silly get cb [ 304, -901 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -901 silly get connection: 'keep-alive', -901 silly get 'set-cookie': -901 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -901 silly get 'cf-ray': '59764fa4b9de325c-FRA', -901 silly get age: '5655', -901 silly get 'cache-control': 'public, max-age=300', -901 silly get etag: '"37dc2c2e48fd048da76bb52a97386418"', -901 silly get 'last-modified': 'Sat, 26 May 2018 19:27:25 GMT', -901 silly get vary: 'Accept-Encoding', -901 silly get 'cf-cache-status': 'HIT', -901 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -901 silly get server: 'cloudflare', -901 silly get 'cf-request-id': '02ddd01af40000325c4c810200000001' } ] -902 verbose etag https://registry.npmjs.org/caseless from cache -903 verbose get saving caseless to /home/christine/.npm/registry.npmjs.org/caseless/.cache.json -904 http 304 https://registry.npmjs.org/is-typedarray -905 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -905 verbose headers connection: 'keep-alive', -905 verbose headers 'set-cookie': -905 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -905 verbose headers 'cf-ray': '59764fa4bc4a6347-FRA', -905 verbose headers age: '5655', -905 verbose headers 'cache-control': 'public, max-age=300', -905 verbose headers etag: '"e7b88219ebe721b877b678c51795c9c5"', -905 verbose headers 'last-modified': 'Sun, 27 May 2018 04:59:55 GMT', -905 verbose headers vary: 'Accept-Encoding', -905 verbose headers 'cf-cache-status': 'HIT', -905 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -905 verbose headers server: 'cloudflare', -905 verbose headers 'cf-request-id': '02ddd01af400006347e88ad200000001' } -906 silly get cb [ 304, -906 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -906 silly get connection: 'keep-alive', -906 silly get 'set-cookie': -906 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -906 silly get 'cf-ray': '59764fa4bc4a6347-FRA', -906 silly get age: '5655', -906 silly get 'cache-control': 'public, max-age=300', -906 silly get etag: '"e7b88219ebe721b877b678c51795c9c5"', -906 silly get 'last-modified': 'Sun, 27 May 2018 04:59:55 GMT', -906 silly get vary: 'Accept-Encoding', -906 silly get 'cf-cache-status': 'HIT', -906 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -906 silly get server: 'cloudflare', -906 silly get 'cf-request-id': '02ddd01af400006347e88ad200000001' } ] -907 verbose etag https://registry.npmjs.org/is-typedarray from cache -908 verbose get saving is-typedarray to /home/christine/.npm/registry.npmjs.org/is-typedarray/.cache.json -909 http 304 https://registry.npmjs.org/forever-agent -910 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -910 verbose headers connection: 'keep-alive', -910 verbose headers 'set-cookie': -910 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -910 verbose headers 'cf-ray': '59764fa4b87c648b-FRA', -910 verbose headers age: '5655', -910 verbose headers 'cache-control': 'public, max-age=300', -910 verbose headers etag: '"9e6ef96089dd23304c2ea7d2fb731c9c"', -910 verbose headers 'last-modified': 'Sun, 27 May 2018 01:06:13 GMT', -910 verbose headers vary: 'Accept-Encoding', -910 verbose headers 'cf-cache-status': 'HIT', -910 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -910 verbose headers server: 'cloudflare', -910 verbose headers 'cf-request-id': '02ddd01af40000648bda003200000001' } -911 silly get cb [ 304, -911 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -911 silly get connection: 'keep-alive', -911 silly get 'set-cookie': -911 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -911 silly get 'cf-ray': '59764fa4b87c648b-FRA', -911 silly get age: '5655', -911 silly get 'cache-control': 'public, max-age=300', -911 silly get etag: '"9e6ef96089dd23304c2ea7d2fb731c9c"', -911 silly get 'last-modified': 'Sun, 27 May 2018 01:06:13 GMT', -911 silly get vary: 'Accept-Encoding', -911 silly get 'cf-cache-status': 'HIT', -911 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -911 silly get server: 'cloudflare', -911 silly get 'cf-request-id': '02ddd01af40000648bda003200000001' } ] -912 verbose etag https://registry.npmjs.org/forever-agent from cache -913 verbose get saving forever-agent to /home/christine/.npm/registry.npmjs.org/forever-agent/.cache.json -914 silly resolveWithNewModule form-data@2.3.3 checking installable status -915 silly cache add args [ 'form-data@~2.3.2', null ] -916 verbose cache add spec form-data@~2.3.2 -917 silly cache add parsed spec Result { -917 silly cache add raw: 'form-data@~2.3.2', -917 silly cache add scope: null, -917 silly cache add name: 'form-data', -917 silly cache add rawSpec: '~2.3.2', -917 silly cache add spec: '>=2.3.2 <2.4.0', -917 silly cache add type: 'range' } -918 silly addNamed form-data@>=2.3.2 <2.4.0 -919 verbose addNamed ">=2.3.2 <2.4.0" is a valid semver range for form-data -920 silly addNameRange { name: 'form-data', range: '>=2.3.2 <2.4.0', hasData: false } -921 silly mapToRegistry name form-data -922 silly mapToRegistry using default registry -923 silly mapToRegistry registry https://registry.npmjs.org/ -924 silly mapToRegistry uri https://registry.npmjs.org/form-data -925 verbose addNameRange registry:https://registry.npmjs.org/form-data not in flight; fetching -926 silly resolveWithNewModule har-validator@5.1.3 checking installable status -927 silly cache add args [ 'har-validator@~5.1.3', null ] -928 verbose cache add spec har-validator@~5.1.3 -929 silly cache add parsed spec Result { -929 silly cache add raw: 'har-validator@~5.1.3', -929 silly cache add scope: null, -929 silly cache add name: 'har-validator', -929 silly cache add rawSpec: '~5.1.3', -929 silly cache add spec: '>=5.1.3 <5.2.0', -929 silly cache add type: 'range' } -930 silly addNamed har-validator@>=5.1.3 <5.2.0 -931 verbose addNamed ">=5.1.3 <5.2.0" is a valid semver range for har-validator -932 silly addNameRange { name: 'har-validator', -932 silly addNameRange range: '>=5.1.3 <5.2.0', -932 silly addNameRange hasData: false } -933 silly mapToRegistry name har-validator -934 silly mapToRegistry using default registry -935 silly mapToRegistry registry https://registry.npmjs.org/ -936 silly mapToRegistry uri https://registry.npmjs.org/har-validator -937 verbose addNameRange registry:https://registry.npmjs.org/har-validator not in flight; fetching -938 http 304 https://registry.npmjs.org/extend -939 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -939 verbose headers connection: 'keep-alive', -939 verbose headers 'set-cookie': -939 verbose headers [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -939 verbose headers 'cf-ray': '59764fa4bc61175a-FRA', -939 verbose headers age: '5656', -939 verbose headers 'cache-control': 'public, max-age=300', -939 verbose headers etag: '"924fa39abddd399eb964b1aa611da651"', -939 verbose headers 'last-modified': 'Thu, 19 Jul 2018 22:12:47 GMT', -939 verbose headers vary: 'Accept-Encoding', -939 verbose headers 'cf-cache-status': 'HIT', -939 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -939 verbose headers server: 'cloudflare', -939 verbose headers 'cf-request-id': '02ddd01af40000175a1e1fb200000001' } -940 silly get cb [ 304, -940 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -940 silly get connection: 'keep-alive', -940 silly get 'set-cookie': -940 silly get [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -940 silly get 'cf-ray': '59764fa4bc61175a-FRA', -940 silly get age: '5656', -940 silly get 'cache-control': 'public, max-age=300', -940 silly get etag: '"924fa39abddd399eb964b1aa611da651"', -940 silly get 'last-modified': 'Thu, 19 Jul 2018 22:12:47 GMT', -940 silly get vary: 'Accept-Encoding', -940 silly get 'cf-cache-status': 'HIT', -940 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -940 silly get server: 'cloudflare', -940 silly get 'cf-request-id': '02ddd01af40000175a1e1fb200000001' } ] -941 verbose etag https://registry.npmjs.org/extend from cache -942 verbose get saving extend to /home/christine/.npm/registry.npmjs.org/extend/.cache.json -943 http 304 https://registry.npmjs.org/combined-stream -944 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -944 verbose headers connection: 'keep-alive', -944 verbose headers 'set-cookie': -944 verbose headers [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -944 verbose headers 'cf-ray': '59764fa4b963d715-FRA', -944 verbose headers age: '5355', -944 verbose headers 'cache-control': 'public, max-age=300', -944 verbose headers etag: '"01d038e7b9fcfd5e5654a7d7003bfe74"', -944 verbose headers 'last-modified': 'Sun, 12 May 2019 17:49:50 GMT', -944 verbose headers vary: 'Accept-Encoding', -944 verbose headers 'cf-cache-status': 'HIT', -944 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -944 verbose headers server: 'cloudflare', -944 verbose headers 'cf-request-id': '02ddd01af40000d715c11f3200000001' } -945 silly get cb [ 304, -945 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -945 silly get connection: 'keep-alive', -945 silly get 'set-cookie': -945 silly get [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -945 silly get 'cf-ray': '59764fa4b963d715-FRA', -945 silly get age: '5355', -945 silly get 'cache-control': 'public, max-age=300', -945 silly get etag: '"01d038e7b9fcfd5e5654a7d7003bfe74"', -945 silly get 'last-modified': 'Sun, 12 May 2019 17:49:50 GMT', -945 silly get vary: 'Accept-Encoding', -945 silly get 'cf-cache-status': 'HIT', -945 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -945 silly get server: 'cloudflare', -945 silly get 'cf-request-id': '02ddd01af40000d715c11f3200000001' } ] -946 verbose etag https://registry.npmjs.org/combined-stream from cache -947 verbose get saving combined-stream to /home/christine/.npm/registry.npmjs.org/combined-stream/.cache.json -948 silly resolveWithNewModule is-typedarray@1.0.0 checking installable status -949 silly cache add args [ 'is-typedarray@~1.0.0', null ] -950 verbose cache add spec is-typedarray@~1.0.0 -951 silly cache add parsed spec Result { -951 silly cache add raw: 'is-typedarray@~1.0.0', -951 silly cache add scope: null, -951 silly cache add name: 'is-typedarray', -951 silly cache add rawSpec: '~1.0.0', -951 silly cache add spec: '>=1.0.0 <1.1.0', -951 silly cache add type: 'range' } -952 silly addNamed is-typedarray@>=1.0.0 <1.1.0 -953 verbose addNamed ">=1.0.0 <1.1.0" is a valid semver range for is-typedarray -954 silly addNameRange { name: 'is-typedarray', -954 silly addNameRange range: '>=1.0.0 <1.1.0', -954 silly addNameRange hasData: false } -955 silly mapToRegistry name is-typedarray -956 silly mapToRegistry using default registry -957 silly mapToRegistry registry https://registry.npmjs.org/ -958 silly mapToRegistry uri https://registry.npmjs.org/is-typedarray -959 verbose addNameRange registry:https://registry.npmjs.org/is-typedarray not in flight; fetching -960 silly resolveWithNewModule caseless@0.12.0 checking installable status -961 silly cache add args [ 'caseless@~0.12.0', null ] -962 verbose cache add spec caseless@~0.12.0 -963 silly cache add parsed spec Result { -963 silly cache add raw: 'caseless@~0.12.0', -963 silly cache add scope: null, -963 silly cache add name: 'caseless', -963 silly cache add rawSpec: '~0.12.0', -963 silly cache add spec: '>=0.12.0 <0.13.0', -963 silly cache add type: 'range' } -964 silly addNamed caseless@>=0.12.0 <0.13.0 -965 verbose addNamed ">=0.12.0 <0.13.0" is a valid semver range for caseless -966 silly addNameRange { name: 'caseless', range: '>=0.12.0 <0.13.0', hasData: false } -967 silly mapToRegistry name caseless -968 silly mapToRegistry using default registry -969 silly mapToRegistry registry https://registry.npmjs.org/ -970 silly mapToRegistry uri https://registry.npmjs.org/caseless -971 verbose addNameRange registry:https://registry.npmjs.org/caseless not in flight; fetching -972 http 304 https://registry.npmjs.org/aws4 -973 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -973 verbose headers connection: 'keep-alive', -973 verbose headers 'set-cookie': -973 verbose headers [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -973 verbose headers 'cf-ray': '59764fa4bb7d6413-FRA', -973 verbose headers age: '5655', -973 verbose headers 'cache-control': 'public, max-age=300', -973 verbose headers etag: '"95c9834de9b7164b9a063970ba631035"', -973 verbose headers 'last-modified': 'Mon, 13 Jan 2020 23:25:51 GMT', -973 verbose headers vary: 'Accept-Encoding', -973 verbose headers 'cf-cache-status': 'HIT', -973 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -973 verbose headers server: 'cloudflare', -973 verbose headers 'cf-request-id': '02ddd01af4000064135f8e3200000001' } -974 silly get cb [ 304, -974 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -974 silly get connection: 'keep-alive', -974 silly get 'set-cookie': -974 silly get [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -974 silly get 'cf-ray': '59764fa4bb7d6413-FRA', -974 silly get age: '5655', -974 silly get 'cache-control': 'public, max-age=300', -974 silly get etag: '"95c9834de9b7164b9a063970ba631035"', -974 silly get 'last-modified': 'Mon, 13 Jan 2020 23:25:51 GMT', -974 silly get vary: 'Accept-Encoding', -974 silly get 'cf-cache-status': 'HIT', -974 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -974 silly get server: 'cloudflare', -974 silly get 'cf-request-id': '02ddd01af4000064135f8e3200000001' } ] -975 verbose etag https://registry.npmjs.org/aws4 from cache -976 verbose get saving aws4 to /home/christine/.npm/registry.npmjs.org/aws4/.cache.json -977 silly resolveWithNewModule forever-agent@0.6.1 checking installable status -978 silly cache add args [ 'forever-agent@~0.6.1', null ] -979 verbose cache add spec forever-agent@~0.6.1 -980 silly cache add parsed spec Result { -980 silly cache add raw: 'forever-agent@~0.6.1', -980 silly cache add scope: null, -980 silly cache add name: 'forever-agent', -980 silly cache add rawSpec: '~0.6.1', -980 silly cache add spec: '>=0.6.1 <0.7.0', -980 silly cache add type: 'range' } -981 silly addNamed forever-agent@>=0.6.1 <0.7.0 -982 verbose addNamed ">=0.6.1 <0.7.0" is a valid semver range for forever-agent -983 silly addNameRange { name: 'forever-agent', -983 silly addNameRange range: '>=0.6.1 <0.7.0', -983 silly addNameRange hasData: false } -984 silly mapToRegistry name forever-agent -985 silly mapToRegistry using default registry -986 silly mapToRegistry registry https://registry.npmjs.org/ -987 silly mapToRegistry uri https://registry.npmjs.org/forever-agent -988 verbose addNameRange registry:https://registry.npmjs.org/forever-agent not in flight; fetching -989 verbose get https://registry.npmjs.org/form-data not expired, no request -990 silly addNameRange number 2 { name: 'form-data', range: '>=2.3.2 <2.4.0', hasData: true } -991 silly addNameRange versions [ 'form-data', -991 silly addNameRange [ '0.0.0', -991 silly addNameRange '0.0.2', -991 silly addNameRange '0.0.3', -991 silly addNameRange '0.0.4', -991 silly addNameRange '0.0.5', -991 silly addNameRange '0.0.6', -991 silly addNameRange '0.0.7', -991 silly addNameRange '0.0.8', -991 silly addNameRange '0.0.9', -991 silly addNameRange '0.0.10', -991 silly addNameRange '0.1.0', -991 silly addNameRange '0.1.1', -991 silly addNameRange '0.1.2', -991 silly addNameRange '0.1.3', -991 silly addNameRange '0.1.4', -991 silly addNameRange '0.2.0', -991 silly addNameRange '1.0.0-rc1', -991 silly addNameRange '1.0.0-rc2', -991 silly addNameRange '1.0.0-rc3', -991 silly addNameRange '1.0.0-rc4', -991 silly addNameRange '1.0.0', -991 silly addNameRange '1.0.1', -991 silly addNameRange '2.0.0', -991 silly addNameRange '2.1.0', -991 silly addNameRange '2.1.1', -991 silly addNameRange '2.1.2', -991 silly addNameRange '2.1.4', -991 silly addNameRange '2.2.0', -991 silly addNameRange '2.3.1', -991 silly addNameRange '2.3.2-rc1', -991 silly addNameRange '2.3.2', -991 silly addNameRange '2.3.3', -991 silly addNameRange '2.4.0', -991 silly addNameRange '2.5.0', -991 silly addNameRange '2.5.1', -991 silly addNameRange '3.0.0' ] ] -992 silly addNamed form-data@2.3.3 -993 verbose addNamed "2.3.3" is a plain semver version for form-data -994 http 200 https://registry.npmjs.org/http-signature -995 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -995 verbose headers 'content-type': 'application/json', -995 verbose headers 'transfer-encoding': 'chunked', -995 verbose headers connection: 'keep-alive', -995 verbose headers 'set-cookie': -995 verbose headers [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -995 verbose headers 'cf-ray': '59764fa4bcfedfc7-FRA', -995 verbose headers age: '5657', -995 verbose headers 'cache-control': 'public, max-age=300', -995 verbose headers etag: 'W/"3b46cb4c3a2db9af415ea171ef07cebe"', -995 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:40 GMT', -995 verbose headers vary: 'accept-encoding, accept', -995 verbose headers 'cf-cache-status': 'HIT', -995 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -995 verbose headers server: 'cloudflare', -995 verbose headers 'content-encoding': 'gzip', -995 verbose headers 'cf-request-id': '02ddd01af40000dfc72a8a0200000001' } -996 silly get cb [ 200, -996 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -996 silly get 'content-type': 'application/json', -996 silly get 'transfer-encoding': 'chunked', -996 silly get connection: 'keep-alive', -996 silly get 'set-cookie': -996 silly get [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -996 silly get 'cf-ray': '59764fa4bcfedfc7-FRA', -996 silly get age: '5657', -996 silly get 'cache-control': 'public, max-age=300', -996 silly get etag: 'W/"3b46cb4c3a2db9af415ea171ef07cebe"', -996 silly get 'last-modified': 'Wed, 06 May 2020 14:47:40 GMT', -996 silly get vary: 'accept-encoding, accept', -996 silly get 'cf-cache-status': 'HIT', -996 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -996 silly get server: 'cloudflare', -996 silly get 'content-encoding': 'gzip', -996 silly get 'cf-request-id': '02ddd01af40000dfc72a8a0200000001' } ] -997 verbose get saving http-signature to /home/christine/.npm/registry.npmjs.org/http-signature/.cache.json -998 verbose get https://registry.npmjs.org/har-validator not expired, no request -999 silly addNameRange number 2 { name: 'har-validator', range: '>=5.1.3 <5.2.0', hasData: true } -1000 silly addNameRange versions [ 'har-validator', -1000 silly addNameRange [ '1.0.0', -1000 silly addNameRange '1.0.1', -1000 silly addNameRange '1.0.2', -1000 silly addNameRange '1.1.0', -1000 silly addNameRange '1.1.1', -1000 silly addNameRange '1.1.2', -1000 silly addNameRange '1.1.3', -1000 silly addNameRange '1.2.0', -1000 silly addNameRange '1.3.0', -1000 silly addNameRange '1.3.1', -1000 silly addNameRange '1.4.0', -1000 silly addNameRange '1.5.0', -1000 silly addNameRange '1.5.1', -1000 silly addNameRange '1.6.0', -1000 silly addNameRange '1.6.1', -1000 silly addNameRange '1.7.0', -1000 silly addNameRange '1.7.1', -1000 silly addNameRange '1.8.0', -1000 silly addNameRange '2.0.0', -1000 silly addNameRange '2.0.1', -1000 silly addNameRange '2.0.2', -1000 silly addNameRange '2.0.3', -1000 silly addNameRange '2.0.4', -1000 silly addNameRange '2.0.5', -1000 silly addNameRange '2.0.6', -1000 silly addNameRange '2.1.0', -1000 silly addNameRange '2.1.1', -1000 silly addNameRange '2.1.2', -1000 silly addNameRange '2.1.3', -1000 silly addNameRange '3.0.0', -1000 silly addNameRange '3.1.0', -1000 silly addNameRange '3.2.0', -1000 silly addNameRange '3.3.0', -1000 silly addNameRange '3.3.1', -1000 silly addNameRange '3.4.0', -1000 silly addNameRange '4.0.0', -1000 silly addNameRange '4.0.1', -1000 silly addNameRange '4.0.2', -1000 silly addNameRange '4.0.3', -1000 silly addNameRange '4.0.4', -1000 silly addNameRange '4.1.0', -1000 silly addNameRange '4.1.1', -1000 silly addNameRange '4.1.2', -1000 silly addNameRange '4.2.0', -1000 silly addNameRange '4.2.1', -1000 silly addNameRange '5.0.0', -1000 silly addNameRange '5.0.1', -1000 silly addNameRange '5.0.2', -1000 silly addNameRange '5.0.3', -1000 silly addNameRange '5.1.0', -1000 silly addNameRange '5.1.3' ] ] -1001 silly addNamed har-validator@5.1.3 -1002 verbose addNamed "5.1.3" is a plain semver version for har-validator -1003 verbose get https://registry.npmjs.org/is-typedarray not expired, no request -1004 silly addNameRange number 2 { name: 'is-typedarray', range: '>=1.0.0 <1.1.0', hasData: true } -1005 silly addNameRange versions [ 'is-typedarray', [ '0.0.0', '1.0.0' ] ] -1006 silly addNamed is-typedarray@1.0.0 -1007 verbose addNamed "1.0.0" is a plain semver version for is-typedarray -1008 verbose get https://registry.npmjs.org/caseless not expired, no request -1009 silly addNameRange number 2 { name: 'caseless', range: '>=0.12.0 <0.13.0', hasData: true } -1010 silly addNameRange versions [ 'caseless', -1010 silly addNameRange [ '0.1.0', -1010 silly addNameRange '0.2.0', -1010 silly addNameRange '0.3.0', -1010 silly addNameRange '0.4.0', -1010 silly addNameRange '0.5.0', -1010 silly addNameRange '0.6.0', -1010 silly addNameRange '0.7.0', -1010 silly addNameRange '0.8.0', -1010 silly addNameRange '0.9.0', -1010 silly addNameRange '0.10.0', -1010 silly addNameRange '0.11.0', -1010 silly addNameRange '0.12.0' ] ] -1011 silly addNamed caseless@0.12.0 -1012 verbose addNamed "0.12.0" is a plain semver version for caseless -1013 verbose get https://registry.npmjs.org/forever-agent not expired, no request -1014 silly addNameRange number 2 { name: 'forever-agent', range: '>=0.6.1 <0.7.0', hasData: true } -1015 silly addNameRange versions [ 'forever-agent', -1015 silly addNameRange [ '0.2.0', '0.3.0', '0.4.0', '0.5.0', '0.5.2', '0.6.0', '0.6.1' ] ] -1016 silly addNamed forever-agent@0.6.1 -1017 verbose addNamed "0.6.1" is a plain semver version for forever-agent -1018 silly resolveWithNewModule combined-stream@1.0.8 checking installable status -1019 silly cache add args [ 'combined-stream@~1.0.6', null ] -1020 verbose cache add spec combined-stream@~1.0.6 -1021 silly cache add parsed spec Result { -1021 silly cache add raw: 'combined-stream@~1.0.6', -1021 silly cache add scope: null, -1021 silly cache add name: 'combined-stream', -1021 silly cache add rawSpec: '~1.0.6', -1021 silly cache add spec: '>=1.0.6 <1.1.0', -1021 silly cache add type: 'range' } -1022 silly addNamed combined-stream@>=1.0.6 <1.1.0 -1023 verbose addNamed ">=1.0.6 <1.1.0" is a valid semver range for combined-stream -1024 silly addNameRange { name: 'combined-stream', -1024 silly addNameRange range: '>=1.0.6 <1.1.0', -1024 silly addNameRange hasData: false } -1025 silly mapToRegistry name combined-stream -1026 silly mapToRegistry using default registry -1027 silly mapToRegistry registry https://registry.npmjs.org/ -1028 silly mapToRegistry uri https://registry.npmjs.org/combined-stream -1029 verbose addNameRange registry:https://registry.npmjs.org/combined-stream not in flight; fetching -1030 silly resolveWithNewModule extend@3.0.2 checking installable status -1031 silly cache add args [ 'extend@~3.0.2', null ] -1032 verbose cache add spec extend@~3.0.2 -1033 silly cache add parsed spec Result { -1033 silly cache add raw: 'extend@~3.0.2', -1033 silly cache add scope: null, -1033 silly cache add name: 'extend', -1033 silly cache add rawSpec: '~3.0.2', -1033 silly cache add spec: '>=3.0.2 <3.1.0', -1033 silly cache add type: 'range' } -1034 silly addNamed extend@>=3.0.2 <3.1.0 -1035 verbose addNamed ">=3.0.2 <3.1.0" is a valid semver range for extend -1036 silly addNameRange { name: 'extend', range: '>=3.0.2 <3.1.0', hasData: false } -1037 silly mapToRegistry name extend -1038 silly mapToRegistry using default registry -1039 silly mapToRegistry registry https://registry.npmjs.org/ -1040 silly mapToRegistry uri https://registry.npmjs.org/extend -1041 verbose addNameRange registry:https://registry.npmjs.org/extend not in flight; fetching -1042 silly cache afterAdd form-data@2.3.3 -1043 verbose afterAdd /home/christine/.npm/form-data/2.3.3/package/package.json not in flight; writing -1044 silly resolveWithNewModule aws4@1.9.1 checking installable status -1045 silly cache add args [ 'aws4@^1.8.0', null ] -1046 verbose cache add spec aws4@^1.8.0 -1047 silly cache add parsed spec Result { -1047 silly cache add raw: 'aws4@^1.8.0', -1047 silly cache add scope: null, -1047 silly cache add name: 'aws4', -1047 silly cache add rawSpec: '^1.8.0', -1047 silly cache add spec: '>=1.8.0 <2.0.0', -1047 silly cache add type: 'range' } -1048 silly addNamed aws4@>=1.8.0 <2.0.0 -1049 verbose addNamed ">=1.8.0 <2.0.0" is a valid semver range for aws4 -1050 silly addNameRange { name: 'aws4', range: '>=1.8.0 <2.0.0', hasData: false } -1051 silly mapToRegistry name aws4 -1052 silly mapToRegistry using default registry -1053 silly mapToRegistry registry https://registry.npmjs.org/ -1054 silly mapToRegistry uri https://registry.npmjs.org/aws4 -1055 verbose addNameRange registry:https://registry.npmjs.org/aws4 not in flight; fetching -1056 silly resolveWithNewModule http-signature@1.2.0 checking installable status -1057 silly cache add args [ 'http-signature@~1.2.0', null ] -1058 verbose cache add spec http-signature@~1.2.0 -1059 silly cache add parsed spec Result { -1059 silly cache add raw: 'http-signature@~1.2.0', -1059 silly cache add scope: null, -1059 silly cache add name: 'http-signature', -1059 silly cache add rawSpec: '~1.2.0', -1059 silly cache add spec: '>=1.2.0 <1.3.0', -1059 silly cache add type: 'range' } -1060 silly addNamed http-signature@>=1.2.0 <1.3.0 -1061 verbose addNamed ">=1.2.0 <1.3.0" is a valid semver range for http-signature -1062 silly addNameRange { name: 'http-signature', -1062 silly addNameRange range: '>=1.2.0 <1.3.0', -1062 silly addNameRange hasData: false } -1063 silly mapToRegistry name http-signature -1064 silly mapToRegistry using default registry -1065 silly mapToRegistry registry https://registry.npmjs.org/ -1066 silly mapToRegistry uri https://registry.npmjs.org/http-signature -1067 verbose addNameRange registry:https://registry.npmjs.org/http-signature not in flight; fetching -1068 silly cache afterAdd har-validator@5.1.3 -1069 verbose afterAdd /home/christine/.npm/har-validator/5.1.3/package/package.json not in flight; writing -1070 verbose get https://registry.npmjs.org/extend not expired, no request -1071 silly addNameRange number 2 { name: 'extend', range: '>=3.0.2 <3.1.0', hasData: true } -1072 silly addNameRange versions [ 'extend', -1072 silly addNameRange [ '1.0.0', -1072 silly addNameRange '1.1.0', -1072 silly addNameRange '1.1.1', -1072 silly addNameRange '1.1.3', -1072 silly addNameRange '1.2.0', -1072 silly addNameRange '1.2.1', -1072 silly addNameRange '1.3.0', -1072 silly addNameRange '2.0.0', -1072 silly addNameRange '2.0.1', -1072 silly addNameRange '3.0.0', -1072 silly addNameRange '3.0.1', -1072 silly addNameRange '3.0.2', -1072 silly addNameRange '2.0.2' ] ] -1073 silly addNamed extend@3.0.2 -1074 verbose addNamed "3.0.2" is a plain semver version for extend -1075 verbose get https://registry.npmjs.org/combined-stream not expired, no request -1076 silly addNameRange number 2 { name: 'combined-stream', -1076 silly addNameRange range: '>=1.0.6 <1.1.0', -1076 silly addNameRange hasData: true } -1077 silly addNameRange versions [ 'combined-stream', -1077 silly addNameRange [ '0.0.0', -1077 silly addNameRange '0.0.1', -1077 silly addNameRange '0.0.2', -1077 silly addNameRange '0.0.3', -1077 silly addNameRange '0.0.4', -1077 silly addNameRange '0.0.5', -1077 silly addNameRange '0.0.7', -1077 silly addNameRange '1.0.0', -1077 silly addNameRange '1.0.1', -1077 silly addNameRange '1.0.2', -1077 silly addNameRange '1.0.3', -1077 silly addNameRange '1.0.4', -1077 silly addNameRange '1.0.5', -1077 silly addNameRange '1.0.6-rc1', -1077 silly addNameRange '1.0.6', -1077 silly addNameRange '1.0.7', -1077 silly addNameRange '1.0.8' ] ] -1078 silly addNamed combined-stream@1.0.8 -1079 verbose addNamed "1.0.8" is a plain semver version for combined-stream -1080 silly cache afterAdd is-typedarray@1.0.0 -1081 verbose afterAdd /home/christine/.npm/is-typedarray/1.0.0/package/package.json not in flight; writing -1082 silly cache afterAdd caseless@0.12.0 -1083 verbose afterAdd /home/christine/.npm/caseless/0.12.0/package/package.json not in flight; writing -1084 silly cache afterAdd forever-agent@0.6.1 -1085 verbose afterAdd /home/christine/.npm/forever-agent/0.6.1/package/package.json not in flight; writing -1086 verbose get https://registry.npmjs.org/aws4 not expired, no request -1087 silly addNameRange number 2 { name: 'aws4', range: '>=1.8.0 <2.0.0', hasData: true } -1088 silly addNameRange versions [ 'aws4', -1088 silly addNameRange [ '0.0.1', -1088 silly addNameRange '0.1.0', -1088 silly addNameRange '0.1.1', -1088 silly addNameRange '0.1.2', -1088 silly addNameRange '0.1.3', -1088 silly addNameRange '0.1.4', -1088 silly addNameRange '0.1.5', -1088 silly addNameRange '0.1.6', -1088 silly addNameRange '0.1.7', -1088 silly addNameRange '0.1.8', -1088 silly addNameRange '0.1.9', -1088 silly addNameRange '0.1.10', -1088 silly addNameRange '0.1.12', -1088 silly addNameRange '0.2.0', -1088 silly addNameRange '0.2.1', -1088 silly addNameRange '0.2.2', -1088 silly addNameRange '0.2.3', -1088 silly addNameRange '0.3.0', -1088 silly addNameRange '0.4.0', -1088 silly addNameRange '0.4.1', -1088 silly addNameRange '0.4.2', -1088 silly addNameRange '0.5.0', -1088 silly addNameRange '0.5.1', -1088 silly addNameRange '1.0.0', -1088 silly addNameRange '1.0.1', -1088 silly addNameRange '1.0.2', -1088 silly addNameRange '1.0.3', -1088 silly addNameRange '1.0.4', -1088 silly addNameRange '1.1.0', -1088 silly addNameRange '1.2.0', -1088 silly addNameRange '1.2.1', -1088 silly addNameRange '1.3.1', -1088 silly addNameRange '1.3.2', -1088 silly addNameRange '1.4.0', -1088 silly addNameRange '1.4.1', -1088 silly addNameRange '1.5.0', -1088 silly addNameRange '1.6.0', -1088 silly addNameRange '1.7.0', -1088 silly addNameRange '1.8.0', -1088 silly addNameRange '1.9.0', -1088 silly addNameRange '1.9.1' ] ] -1089 silly addNamed aws4@1.9.1 -1090 verbose addNamed "1.9.1" is a plain semver version for aws4 -1091 verbose afterAdd /home/christine/.npm/form-data/2.3.3/package/package.json written -1092 verbose get https://registry.npmjs.org/http-signature not expired, no request -1093 silly addNameRange number 2 { name: 'http-signature', -1093 silly addNameRange range: '>=1.2.0 <1.3.0', -1093 silly addNameRange hasData: true } -1094 silly addNameRange versions [ 'http-signature', -1094 silly addNameRange [ '0.9.0', -1094 silly addNameRange '0.9.2', -1094 silly addNameRange '0.9.3', -1094 silly addNameRange '0.9.4', -1094 silly addNameRange '0.9.5', -1094 silly addNameRange '0.9.6', -1094 silly addNameRange '0.9.7', -1094 silly addNameRange '0.9.8', -1094 silly addNameRange '0.9.9', -1094 silly addNameRange '0.9.10', -1094 silly addNameRange '0.9.11', -1094 silly addNameRange '0.10.0', -1094 silly addNameRange '0.10.1', -1094 silly addNameRange '0.11.0', -1094 silly addNameRange '1.0.0', -1094 silly addNameRange '1.0.1', -1094 silly addNameRange '1.0.2', -1094 silly addNameRange '1.1.0', -1094 silly addNameRange '1.1.1', -1094 silly addNameRange '1.2.0', -1094 silly addNameRange '1.3.0', -1094 silly addNameRange '1.3.1', -1094 silly addNameRange '1.3.2', -1094 silly addNameRange '1.3.3', -1094 silly addNameRange '1.3.4' ] ] -1095 silly addNamed http-signature@1.2.0 -1096 verbose addNamed "1.2.0" is a plain semver version for http-signature -1097 verbose afterAdd /home/christine/.npm/har-validator/5.1.3/package/package.json written -1098 http 304 https://registry.npmjs.org/isstream -1099 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1099 verbose headers connection: 'keep-alive', -1099 verbose headers 'set-cookie': -1099 verbose headers [ '__cfduid=daf4947ff118e7cd8a36c058a538ff6131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1099 verbose headers 'cf-ray': '59764fa4fe4d05bb-FRA', -1099 verbose headers age: '5355', -1099 verbose headers 'cache-control': 'public, max-age=300', -1099 verbose headers etag: '"9dc7f37e087df077683bf238c847ad45"', -1099 verbose headers 'last-modified': 'Sun, 27 May 2018 05:02:31 GMT', -1099 verbose headers vary: 'Accept-Encoding', -1099 verbose headers 'cf-cache-status': 'HIT', -1099 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1099 verbose headers server: 'cloudflare', -1099 verbose headers 'cf-request-id': '02ddd01b1f000005bb0ca62200000001' } -1100 silly get cb [ 304, -1100 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1100 silly get connection: 'keep-alive', -1100 silly get 'set-cookie': -1100 silly get [ '__cfduid=daf4947ff118e7cd8a36c058a538ff6131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1100 silly get 'cf-ray': '59764fa4fe4d05bb-FRA', -1100 silly get age: '5355', -1100 silly get 'cache-control': 'public, max-age=300', -1100 silly get etag: '"9dc7f37e087df077683bf238c847ad45"', -1100 silly get 'last-modified': 'Sun, 27 May 2018 05:02:31 GMT', -1100 silly get vary: 'Accept-Encoding', -1100 silly get 'cf-cache-status': 'HIT', -1100 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1100 silly get server: 'cloudflare', -1100 silly get 'cf-request-id': '02ddd01b1f000005bb0ca62200000001' } ] -1101 verbose etag https://registry.npmjs.org/isstream from cache -1102 verbose get saving isstream to /home/christine/.npm/registry.npmjs.org/isstream/.cache.json -1103 verbose afterAdd /home/christine/.npm/is-typedarray/1.0.0/package/package.json written -1104 silly cache afterAdd combined-stream@1.0.8 -1105 verbose afterAdd /home/christine/.npm/combined-stream/1.0.8/package/package.json not in flight; writing -1106 verbose afterAdd /home/christine/.npm/caseless/0.12.0/package/package.json written -1107 verbose afterAdd /home/christine/.npm/forever-agent/0.6.1/package/package.json written -1108 silly cache afterAdd extend@3.0.2 -1109 verbose afterAdd /home/christine/.npm/extend/3.0.2/package/package.json not in flight; writing -1110 silly cache afterAdd aws4@1.9.1 -1111 verbose afterAdd /home/christine/.npm/aws4/1.9.1/package/package.json not in flight; writing -1112 http 304 https://registry.npmjs.org/json-stringify-safe -1113 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1113 verbose headers connection: 'keep-alive', -1113 verbose headers 'set-cookie': -1113 verbose headers [ '__cfduid=dd03692ace9824ebd46c46f408f2989131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1113 verbose headers 'cf-ray': '59764fa4fe54d6e1-FRA', -1113 verbose headers age: '5657', -1113 verbose headers 'cache-control': 'public, max-age=300', -1113 verbose headers etag: '"7f39a9aafcaefe8efbf43a9f2e56c4eb"', -1113 verbose headers 'last-modified': 'Sun, 27 May 2018 05:41:03 GMT', -1113 verbose headers vary: 'Accept-Encoding', -1113 verbose headers 'cf-cache-status': 'HIT', -1113 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1113 verbose headers server: 'cloudflare', -1113 verbose headers 'cf-request-id': '02ddd01b1e0000d6e132367200000001' } -1114 silly get cb [ 304, -1114 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1114 silly get connection: 'keep-alive', -1114 silly get 'set-cookie': -1114 silly get [ '__cfduid=dd03692ace9824ebd46c46f408f2989131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1114 silly get 'cf-ray': '59764fa4fe54d6e1-FRA', -1114 silly get age: '5657', -1114 silly get 'cache-control': 'public, max-age=300', -1114 silly get etag: '"7f39a9aafcaefe8efbf43a9f2e56c4eb"', -1114 silly get 'last-modified': 'Sun, 27 May 2018 05:41:03 GMT', -1114 silly get vary: 'Accept-Encoding', -1114 silly get 'cf-cache-status': 'HIT', -1114 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1114 silly get server: 'cloudflare', -1114 silly get 'cf-request-id': '02ddd01b1e0000d6e132367200000001' } ] -1115 verbose etag https://registry.npmjs.org/json-stringify-safe from cache -1116 verbose get saving json-stringify-safe to /home/christine/.npm/registry.npmjs.org/json-stringify-safe/.cache.json -1117 silly cache afterAdd http-signature@1.2.0 -1118 verbose afterAdd /home/christine/.npm/http-signature/1.2.0/package/package.json not in flight; writing -1119 verbose afterAdd /home/christine/.npm/combined-stream/1.0.8/package/package.json written -1120 verbose afterAdd /home/christine/.npm/extend/3.0.2/package/package.json written -1121 verbose afterAdd /home/christine/.npm/aws4/1.9.1/package/package.json written -1122 silly resolveWithNewModule isstream@0.1.2 checking installable status -1123 silly cache add args [ 'isstream@~0.1.2', null ] -1124 verbose cache add spec isstream@~0.1.2 -1125 silly cache add parsed spec Result { -1125 silly cache add raw: 'isstream@~0.1.2', -1125 silly cache add scope: null, -1125 silly cache add name: 'isstream', -1125 silly cache add rawSpec: '~0.1.2', -1125 silly cache add spec: '>=0.1.2 <0.2.0', -1125 silly cache add type: 'range' } -1126 silly addNamed isstream@>=0.1.2 <0.2.0 -1127 verbose addNamed ">=0.1.2 <0.2.0" is a valid semver range for isstream -1128 silly addNameRange { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: false } -1129 silly mapToRegistry name isstream -1130 silly mapToRegistry using default registry -1131 silly mapToRegistry registry https://registry.npmjs.org/ -1132 silly mapToRegistry uri https://registry.npmjs.org/isstream -1133 verbose addNameRange registry:https://registry.npmjs.org/isstream not in flight; fetching -1134 http 304 https://registry.npmjs.org/tunnel-agent -1135 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1135 verbose headers connection: 'keep-alive', -1135 verbose headers 'set-cookie': -1135 verbose headers [ '__cfduid=dd8a9957676dab4f7a1bd7377a7d9ca671590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1135 verbose headers 'cf-ray': '59764fa51970c2f9-FRA', -1135 verbose headers age: '5655', -1135 verbose headers 'cache-control': 'public, max-age=300', -1135 verbose headers etag: '"03911fc1f433b33bccf8a4a2a5de2375"', -1135 verbose headers 'last-modified': 'Sun, 27 May 2018 20:02:57 GMT', -1135 verbose headers vary: 'Accept-Encoding', -1135 verbose headers 'cf-cache-status': 'HIT', -1135 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1135 verbose headers server: 'cloudflare', -1135 verbose headers 'cf-request-id': '02ddd01b2a0000c2f926071200000001' } -1136 silly get cb [ 304, -1136 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1136 silly get connection: 'keep-alive', -1136 silly get 'set-cookie': -1136 silly get [ '__cfduid=dd8a9957676dab4f7a1bd7377a7d9ca671590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1136 silly get 'cf-ray': '59764fa51970c2f9-FRA', -1136 silly get age: '5655', -1136 silly get 'cache-control': 'public, max-age=300', -1136 silly get etag: '"03911fc1f433b33bccf8a4a2a5de2375"', -1136 silly get 'last-modified': 'Sun, 27 May 2018 20:02:57 GMT', -1136 silly get vary: 'Accept-Encoding', -1136 silly get 'cf-cache-status': 'HIT', -1136 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1136 silly get server: 'cloudflare', -1136 silly get 'cf-request-id': '02ddd01b2a0000c2f926071200000001' } ] -1137 verbose etag https://registry.npmjs.org/tunnel-agent from cache -1138 verbose get saving tunnel-agent to /home/christine/.npm/registry.npmjs.org/tunnel-agent/.cache.json -1139 verbose afterAdd /home/christine/.npm/http-signature/1.2.0/package/package.json written -1140 http 304 https://registry.npmjs.org/performance-now -1141 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1141 verbose headers connection: 'keep-alive', -1141 verbose headers 'set-cookie': -1141 verbose headers [ '__cfduid=d42ce80dcff65dca26b6883967f7411d41590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1141 verbose headers 'cf-ray': '59764fa51f721772-FRA', -1141 verbose headers age: '5657', -1141 verbose headers 'cache-control': 'public, max-age=300', -1141 verbose headers etag: '"5f12ad497b3e39323dcdde75c34f5767"', -1141 verbose headers 'last-modified': 'Sun, 27 May 2018 12:05:53 GMT', -1141 verbose headers vary: 'Accept-Encoding', -1141 verbose headers 'cf-cache-status': 'HIT', -1141 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1141 verbose headers server: 'cloudflare', -1141 verbose headers 'cf-request-id': '02ddd01b2a0000177264160200000001' } -1142 silly get cb [ 304, -1142 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1142 silly get connection: 'keep-alive', -1142 silly get 'set-cookie': -1142 silly get [ '__cfduid=d42ce80dcff65dca26b6883967f7411d41590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1142 silly get 'cf-ray': '59764fa51f721772-FRA', -1142 silly get age: '5657', -1142 silly get 'cache-control': 'public, max-age=300', -1142 silly get etag: '"5f12ad497b3e39323dcdde75c34f5767"', -1142 silly get 'last-modified': 'Sun, 27 May 2018 12:05:53 GMT', -1142 silly get vary: 'Accept-Encoding', -1142 silly get 'cf-cache-status': 'HIT', -1142 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1142 silly get server: 'cloudflare', -1142 silly get 'cf-request-id': '02ddd01b2a0000177264160200000001' } ] -1143 verbose etag https://registry.npmjs.org/performance-now from cache -1144 verbose get saving performance-now to /home/christine/.npm/registry.npmjs.org/performance-now/.cache.json -1145 silly resolveWithNewModule json-stringify-safe@5.0.1 checking installable status -1146 silly cache add args [ 'json-stringify-safe@~5.0.1', null ] -1147 verbose cache add spec json-stringify-safe@~5.0.1 -1148 silly cache add parsed spec Result { -1148 silly cache add raw: 'json-stringify-safe@~5.0.1', -1148 silly cache add scope: null, -1148 silly cache add name: 'json-stringify-safe', -1148 silly cache add rawSpec: '~5.0.1', -1148 silly cache add spec: '>=5.0.1 <5.1.0', -1148 silly cache add type: 'range' } -1149 silly addNamed json-stringify-safe@>=5.0.1 <5.1.0 -1150 verbose addNamed ">=5.0.1 <5.1.0" is a valid semver range for json-stringify-safe -1151 silly addNameRange { name: 'json-stringify-safe', -1151 silly addNameRange range: '>=5.0.1 <5.1.0', -1151 silly addNameRange hasData: false } -1152 silly mapToRegistry name json-stringify-safe -1153 silly mapToRegistry using default registry -1154 silly mapToRegistry registry https://registry.npmjs.org/ -1155 silly mapToRegistry uri https://registry.npmjs.org/json-stringify-safe -1156 verbose addNameRange registry:https://registry.npmjs.org/json-stringify-safe not in flight; fetching -1157 verbose get https://registry.npmjs.org/isstream not expired, no request -1158 silly addNameRange number 2 { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: true } -1159 silly addNameRange versions [ 'isstream', [ '0.0.0', '0.1.0', '0.1.1', '0.1.2' ] ] -1160 silly addNamed isstream@0.1.2 -1161 verbose addNamed "0.1.2" is a plain semver version for isstream -1162 http 200 https://registry.npmjs.org/safe-buffer -1163 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1163 verbose headers 'content-type': 'application/json', -1163 verbose headers 'transfer-encoding': 'chunked', -1163 verbose headers connection: 'keep-alive', -1163 verbose headers 'set-cookie': -1163 verbose headers [ '__cfduid=d242459e8d4d49451c98a98743f04b3251590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1163 verbose headers 'cf-ray': '59764fa51a7b0eab-FRA', -1163 verbose headers age: '5658', -1163 verbose headers 'cache-control': 'public, max-age=300', -1163 verbose headers etag: 'W/"7d10eeac57e4baa4c8bd0dd7caa1703c"', -1163 verbose headers 'last-modified': 'Sun, 10 May 2020 16:37:34 GMT', -1163 verbose headers vary: 'accept-encoding, accept', -1163 verbose headers 'cf-cache-status': 'HIT', -1163 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1163 verbose headers server: 'cloudflare', -1163 verbose headers 'content-encoding': 'gzip', -1163 verbose headers 'cf-request-id': '02ddd01b2a00000eabe9143200000001' } -1164 silly get cb [ 200, -1164 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1164 silly get 'content-type': 'application/json', -1164 silly get 'transfer-encoding': 'chunked', -1164 silly get connection: 'keep-alive', -1164 silly get 'set-cookie': -1164 silly get [ '__cfduid=d242459e8d4d49451c98a98743f04b3251590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1164 silly get 'cf-ray': '59764fa51a7b0eab-FRA', -1164 silly get age: '5658', -1164 silly get 'cache-control': 'public, max-age=300', -1164 silly get etag: 'W/"7d10eeac57e4baa4c8bd0dd7caa1703c"', -1164 silly get 'last-modified': 'Sun, 10 May 2020 16:37:34 GMT', -1164 silly get vary: 'accept-encoding, accept', -1164 silly get 'cf-cache-status': 'HIT', -1164 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1164 silly get server: 'cloudflare', -1164 silly get 'content-encoding': 'gzip', -1164 silly get 'cf-request-id': '02ddd01b2a00000eabe9143200000001' } ] -1165 verbose get saving safe-buffer to /home/christine/.npm/registry.npmjs.org/safe-buffer/.cache.json -1166 http 304 https://registry.npmjs.org/oauth-sign -1167 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1167 verbose headers connection: 'keep-alive', -1167 verbose headers 'set-cookie': -1167 verbose headers [ '__cfduid=d287f9144cf6663f63602865423a0b4ea1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1167 verbose headers 'cf-ray': '59764fa51ff7dfbb-FRA', -1167 verbose headers age: '5355', -1167 verbose headers 'cache-control': 'public, max-age=300', -1167 verbose headers etag: '"3032c1efe9ec61d748d027a1da2bab61"', -1167 verbose headers 'last-modified': 'Thu, 02 Aug 2018 18:04:02 GMT', -1167 verbose headers vary: 'Accept-Encoding', -1167 verbose headers 'cf-cache-status': 'HIT', -1167 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1167 verbose headers server: 'cloudflare', -1167 verbose headers 'cf-request-id': '02ddd01b2a0000dfbb5fa74200000001' } -1168 silly get cb [ 304, -1168 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1168 silly get connection: 'keep-alive', -1168 silly get 'set-cookie': -1168 silly get [ '__cfduid=d287f9144cf6663f63602865423a0b4ea1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1168 silly get 'cf-ray': '59764fa51ff7dfbb-FRA', -1168 silly get age: '5355', -1168 silly get 'cache-control': 'public, max-age=300', -1168 silly get etag: '"3032c1efe9ec61d748d027a1da2bab61"', -1168 silly get 'last-modified': 'Thu, 02 Aug 2018 18:04:02 GMT', -1168 silly get vary: 'Accept-Encoding', -1168 silly get 'cf-cache-status': 'HIT', -1168 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1168 silly get server: 'cloudflare', -1168 silly get 'cf-request-id': '02ddd01b2a0000dfbb5fa74200000001' } ] -1169 verbose etag https://registry.npmjs.org/oauth-sign from cache -1170 verbose get saving oauth-sign to /home/christine/.npm/registry.npmjs.org/oauth-sign/.cache.json -1171 verbose get https://registry.npmjs.org/json-stringify-safe not expired, no request -1172 silly addNameRange number 2 { name: 'json-stringify-safe', -1172 silly addNameRange range: '>=5.0.1 <5.1.0', -1172 silly addNameRange hasData: true } -1173 silly addNameRange versions [ 'json-stringify-safe', -1173 silly addNameRange [ '2.0.0', '3.0.0', '4.0.0', '5.0.0', '5.0.1' ] ] -1174 silly addNamed json-stringify-safe@5.0.1 -1175 verbose addNamed "5.0.1" is a plain semver version for json-stringify-safe -1176 silly resolveWithNewModule tunnel-agent@0.6.0 checking installable status -1177 silly cache add args [ 'tunnel-agent@^0.6.0', null ] -1178 verbose cache add spec tunnel-agent@^0.6.0 -1179 silly cache add parsed spec Result { -1179 silly cache add raw: 'tunnel-agent@^0.6.0', -1179 silly cache add scope: null, -1179 silly cache add name: 'tunnel-agent', -1179 silly cache add rawSpec: '^0.6.0', -1179 silly cache add spec: '>=0.6.0 <0.7.0', -1179 silly cache add type: 'range' } -1180 silly addNamed tunnel-agent@>=0.6.0 <0.7.0 -1181 verbose addNamed ">=0.6.0 <0.7.0" is a valid semver range for tunnel-agent -1182 silly addNameRange { name: 'tunnel-agent', range: '>=0.6.0 <0.7.0', hasData: false } -1183 silly mapToRegistry name tunnel-agent -1184 silly mapToRegistry using default registry -1185 silly mapToRegistry registry https://registry.npmjs.org/ -1186 silly mapToRegistry uri https://registry.npmjs.org/tunnel-agent -1187 verbose addNameRange registry:https://registry.npmjs.org/tunnel-agent not in flight; fetching -1188 silly resolveWithNewModule performance-now@2.1.0 checking installable status -1189 silly cache add args [ 'performance-now@^2.1.0', null ] -1190 verbose cache add spec performance-now@^2.1.0 -1191 silly cache add parsed spec Result { -1191 silly cache add raw: 'performance-now@^2.1.0', -1191 silly cache add scope: null, -1191 silly cache add name: 'performance-now', -1191 silly cache add rawSpec: '^2.1.0', -1191 silly cache add spec: '>=2.1.0 <3.0.0', -1191 silly cache add type: 'range' } -1192 silly addNamed performance-now@>=2.1.0 <3.0.0 -1193 verbose addNamed ">=2.1.0 <3.0.0" is a valid semver range for performance-now -1194 silly addNameRange { name: 'performance-now', -1194 silly addNameRange range: '>=2.1.0 <3.0.0', -1194 silly addNameRange hasData: false } -1195 silly mapToRegistry name performance-now -1196 silly mapToRegistry using default registry -1197 silly mapToRegistry registry https://registry.npmjs.org/ -1198 silly mapToRegistry uri https://registry.npmjs.org/performance-now -1199 verbose addNameRange registry:https://registry.npmjs.org/performance-now not in flight; fetching -1200 silly cache afterAdd isstream@0.1.2 -1201 verbose afterAdd /home/christine/.npm/isstream/0.1.2/package/package.json not in flight; writing -1202 http 200 https://registry.npmjs.org/tough-cookie -1203 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1203 verbose headers 'content-type': 'application/json', -1203 verbose headers 'transfer-encoding': 'chunked', -1203 verbose headers connection: 'keep-alive', -1203 verbose headers 'set-cookie': -1203 verbose headers [ '__cfduid=d898cd72de597ecab2d8a354f76a0072c1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1203 verbose headers 'cf-ray': '59764fa518cb05e9-FRA', -1203 verbose headers age: '5655', -1203 verbose headers 'cache-control': 'public, max-age=300', -1203 verbose headers etag: 'W/"818fa172eb6f27e219e81140db530363"', -1203 verbose headers 'last-modified': 'Thu, 19 Mar 2020 19:20:30 GMT', -1203 verbose headers vary: 'accept-encoding, accept', -1203 verbose headers 'cf-cache-status': 'HIT', -1203 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1203 verbose headers server: 'cloudflare', -1203 verbose headers 'content-encoding': 'gzip', -1203 verbose headers 'cf-request-id': '02ddd01b2a000005e903b1d200000001' } -1204 silly get cb [ 200, -1204 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1204 silly get 'content-type': 'application/json', -1204 silly get 'transfer-encoding': 'chunked', -1204 silly get connection: 'keep-alive', -1204 silly get 'set-cookie': -1204 silly get [ '__cfduid=d898cd72de597ecab2d8a354f76a0072c1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1204 silly get 'cf-ray': '59764fa518cb05e9-FRA', -1204 silly get age: '5655', -1204 silly get 'cache-control': 'public, max-age=300', -1204 silly get etag: 'W/"818fa172eb6f27e219e81140db530363"', -1204 silly get 'last-modified': 'Thu, 19 Mar 2020 19:20:30 GMT', -1204 silly get vary: 'accept-encoding, accept', -1204 silly get 'cf-cache-status': 'HIT', -1204 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1204 silly get server: 'cloudflare', -1204 silly get 'content-encoding': 'gzip', -1204 silly get 'cf-request-id': '02ddd01b2a000005e903b1d200000001' } ] -1205 verbose get saving tough-cookie to /home/christine/.npm/registry.npmjs.org/tough-cookie/.cache.json -1206 silly cache afterAdd json-stringify-safe@5.0.1 -1207 verbose afterAdd /home/christine/.npm/json-stringify-safe/5.0.1/package/package.json not in flight; writing -1208 silly resolveWithNewModule safe-buffer@5.2.1 checking installable status -1209 silly cache add args [ 'safe-buffer@^5.1.2', null ] -1210 verbose cache add spec safe-buffer@^5.1.2 -1211 silly cache add parsed spec Result { -1211 silly cache add raw: 'safe-buffer@^5.1.2', -1211 silly cache add scope: null, -1211 silly cache add name: 'safe-buffer', -1211 silly cache add rawSpec: '^5.1.2', -1211 silly cache add spec: '>=5.1.2 <6.0.0', -1211 silly cache add type: 'range' } -1212 silly addNamed safe-buffer@>=5.1.2 <6.0.0 -1213 verbose addNamed ">=5.1.2 <6.0.0" is a valid semver range for safe-buffer -1214 silly addNameRange { name: 'safe-buffer', range: '>=5.1.2 <6.0.0', hasData: false } -1215 silly mapToRegistry name safe-buffer -1216 silly mapToRegistry using default registry -1217 silly mapToRegistry registry https://registry.npmjs.org/ -1218 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer -1219 verbose addNameRange registry:https://registry.npmjs.org/safe-buffer not in flight; fetching -1220 http 200 https://registry.npmjs.org/mime-types -1221 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1221 verbose headers 'content-type': 'application/json', -1221 verbose headers 'transfer-encoding': 'chunked', -1221 verbose headers connection: 'keep-alive', -1221 verbose headers 'set-cookie': -1221 verbose headers [ '__cfduid=d8091989cd66bf129670ccfa4d20cf63d1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1221 verbose headers 'cf-ray': '59764fa51e27c2ae-FRA', -1221 verbose headers age: '5656', -1221 verbose headers 'cache-control': 'public, max-age=300', -1221 verbose headers etag: 'W/"b0572cbc8ddbbb6b61205820d06deb3a"', -1221 verbose headers 'last-modified': 'Fri, 24 Apr 2020 03:36:16 GMT', -1221 verbose headers vary: 'accept-encoding, accept', -1221 verbose headers 'cf-cache-status': 'HIT', -1221 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1221 verbose headers server: 'cloudflare', -1221 verbose headers 'content-encoding': 'gzip', -1221 verbose headers 'cf-request-id': '02ddd01b2a0000c2aea0161200000001' } -1222 silly get cb [ 200, -1222 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1222 silly get 'content-type': 'application/json', -1222 silly get 'transfer-encoding': 'chunked', -1222 silly get connection: 'keep-alive', -1222 silly get 'set-cookie': -1222 silly get [ '__cfduid=d8091989cd66bf129670ccfa4d20cf63d1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1222 silly get 'cf-ray': '59764fa51e27c2ae-FRA', -1222 silly get age: '5656', -1222 silly get 'cache-control': 'public, max-age=300', -1222 silly get etag: 'W/"b0572cbc8ddbbb6b61205820d06deb3a"', -1222 silly get 'last-modified': 'Fri, 24 Apr 2020 03:36:16 GMT', -1222 silly get vary: 'accept-encoding, accept', -1222 silly get 'cf-cache-status': 'HIT', -1222 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1222 silly get server: 'cloudflare', -1222 silly get 'content-encoding': 'gzip', -1222 silly get 'cf-request-id': '02ddd01b2a0000c2aea0161200000001' } ] -1223 verbose get saving mime-types to /home/christine/.npm/registry.npmjs.org/mime-types/.cache.json -1224 verbose get https://registry.npmjs.org/tunnel-agent not expired, no request -1225 silly addNameRange number 2 { name: 'tunnel-agent', range: '>=0.6.0 <0.7.0', hasData: true } -1226 silly addNameRange versions [ 'tunnel-agent', -1226 silly addNameRange [ '0.2.0', -1226 silly addNameRange '0.3.0', -1226 silly addNameRange '0.4.0', -1226 silly addNameRange '0.4.1', -1226 silly addNameRange '0.4.2', -1226 silly addNameRange '0.4.3', -1226 silly addNameRange '0.5.0', -1226 silly addNameRange '0.6.0' ] ] -1227 silly addNamed tunnel-agent@0.6.0 -1228 verbose addNamed "0.6.0" is a plain semver version for tunnel-agent -1229 silly resolveWithNewModule oauth-sign@0.9.0 checking installable status -1230 silly cache add args [ 'oauth-sign@~0.9.0', null ] -1231 verbose cache add spec oauth-sign@~0.9.0 -1232 silly cache add parsed spec Result { -1232 silly cache add raw: 'oauth-sign@~0.9.0', -1232 silly cache add scope: null, -1232 silly cache add name: 'oauth-sign', -1232 silly cache add rawSpec: '~0.9.0', -1232 silly cache add spec: '>=0.9.0 <0.10.0', -1232 silly cache add type: 'range' } -1233 silly addNamed oauth-sign@>=0.9.0 <0.10.0 -1234 verbose addNamed ">=0.9.0 <0.10.0" is a valid semver range for oauth-sign -1235 silly addNameRange { name: 'oauth-sign', range: '>=0.9.0 <0.10.0', hasData: false } -1236 silly mapToRegistry name oauth-sign -1237 silly mapToRegistry using default registry -1238 silly mapToRegistry registry https://registry.npmjs.org/ -1239 silly mapToRegistry uri https://registry.npmjs.org/oauth-sign -1240 verbose addNameRange registry:https://registry.npmjs.org/oauth-sign not in flight; fetching -1241 verbose get https://registry.npmjs.org/performance-now not expired, no request -1242 silly addNameRange number 2 { name: 'performance-now', -1242 silly addNameRange range: '>=2.1.0 <3.0.0', -1242 silly addNameRange hasData: true } -1243 silly addNameRange versions [ 'performance-now', -1243 silly addNameRange [ '0.1.0', -1243 silly addNameRange '0.1.1', -1243 silly addNameRange '0.1.2', -1243 silly addNameRange '0.1.3', -1243 silly addNameRange '0.1.4', -1243 silly addNameRange '0.2.0', -1243 silly addNameRange '1.0.0', -1243 silly addNameRange '1.0.1', -1243 silly addNameRange '1.0.2', -1243 silly addNameRange '2.0.0', -1243 silly addNameRange '2.1.0' ] ] -1244 silly addNamed performance-now@2.1.0 -1245 verbose addNamed "2.1.0" is a plain semver version for performance-now -1246 verbose afterAdd /home/christine/.npm/isstream/0.1.2/package/package.json written -1247 http 200 https://registry.npmjs.org/uuid -1248 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1248 verbose headers 'content-type': 'application/json', -1248 verbose headers 'transfer-encoding': 'chunked', -1248 verbose headers connection: 'keep-alive', -1248 verbose headers 'set-cookie': -1248 verbose headers [ '__cfduid=d42e977fd11818895c4979b1006ea23be1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1248 verbose headers 'cf-ray': '59764fa5195d1f2d-FRA', -1248 verbose headers age: '5355', -1248 verbose headers 'cache-control': 'public, max-age=300', -1248 verbose headers etag: 'W/"3fc4e0f16b6e5d55bc0144a7f38b6e49"', -1248 verbose headers 'last-modified': 'Wed, 20 May 2020 18:52:41 GMT', -1248 verbose headers vary: 'accept-encoding, accept', -1248 verbose headers 'cf-cache-status': 'HIT', -1248 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1248 verbose headers server: 'cloudflare', -1248 verbose headers 'content-encoding': 'gzip', -1248 verbose headers 'cf-request-id': '02ddd01b2a00001f2df51ed200000001' } -1249 silly get cb [ 200, -1249 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1249 silly get 'content-type': 'application/json', -1249 silly get 'transfer-encoding': 'chunked', -1249 silly get connection: 'keep-alive', -1249 silly get 'set-cookie': -1249 silly get [ '__cfduid=d42e977fd11818895c4979b1006ea23be1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1249 silly get 'cf-ray': '59764fa5195d1f2d-FRA', -1249 silly get age: '5355', -1249 silly get 'cache-control': 'public, max-age=300', -1249 silly get etag: 'W/"3fc4e0f16b6e5d55bc0144a7f38b6e49"', -1249 silly get 'last-modified': 'Wed, 20 May 2020 18:52:41 GMT', -1249 silly get vary: 'accept-encoding, accept', -1249 silly get 'cf-cache-status': 'HIT', -1249 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1249 silly get server: 'cloudflare', -1249 silly get 'content-encoding': 'gzip', -1249 silly get 'cf-request-id': '02ddd01b2a00001f2df51ed200000001' } ] -1250 verbose get saving uuid to /home/christine/.npm/registry.npmjs.org/uuid/.cache.json -1251 verbose get https://registry.npmjs.org/safe-buffer not expired, no request -1252 silly addNameRange number 2 { name: 'safe-buffer', range: '>=5.1.2 <6.0.0', hasData: true } -1253 silly addNameRange versions [ 'safe-buffer', -1253 silly addNameRange [ '1.0.0', -1253 silly addNameRange '2.0.0', -1253 silly addNameRange '3.0.0', -1253 silly addNameRange '4.0.0', -1253 silly addNameRange '5.0.0', -1253 silly addNameRange '5.0.1', -1253 silly addNameRange '5.1.0', -1253 silly addNameRange '5.1.1', -1253 silly addNameRange '5.1.2', -1253 silly addNameRange '5.2.0', -1253 silly addNameRange '5.2.1' ] ] -1254 silly addNamed safe-buffer@5.2.1 -1255 verbose addNamed "5.2.1" is a plain semver version for safe-buffer -1256 verbose afterAdd /home/christine/.npm/json-stringify-safe/5.0.1/package/package.json written -1257 verbose get https://registry.npmjs.org/oauth-sign not expired, no request -1258 silly addNameRange number 2 { name: 'oauth-sign', range: '>=0.9.0 <0.10.0', hasData: true } -1259 silly addNameRange versions [ 'oauth-sign', -1259 silly addNameRange [ '0.2.0', -1259 silly addNameRange '0.3.0', -1259 silly addNameRange '0.4.0', -1259 silly addNameRange '0.5.0', -1259 silly addNameRange '0.6.0', -1259 silly addNameRange '0.7.0', -1259 silly addNameRange '0.8.0', -1259 silly addNameRange '0.8.1', -1259 silly addNameRange '0.8.2', -1259 silly addNameRange '0.9.0' ] ] -1260 silly addNamed oauth-sign@0.9.0 -1261 verbose addNamed "0.9.0" is a plain semver version for oauth-sign -1262 silly mapToRegistry name safe-buffer -1263 silly mapToRegistry using default registry -1264 silly mapToRegistry registry https://registry.npmjs.org/ -1265 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer -1266 verbose addRemoteTarball https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz not in flight; adding -1267 verbose addRemoteTarball [ 'https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz', -1267 verbose addRemoteTarball '1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6' ] -1268 silly resolveWithNewModule tough-cookie@2.5.0 checking installable status -1269 silly cache add args [ 'tough-cookie@~2.5.0', null ] -1270 verbose cache add spec tough-cookie@~2.5.0 -1271 silly cache add parsed spec Result { -1271 silly cache add raw: 'tough-cookie@~2.5.0', -1271 silly cache add scope: null, -1271 silly cache add name: 'tough-cookie', -1271 silly cache add rawSpec: '~2.5.0', -1271 silly cache add spec: '>=2.5.0 <2.6.0', -1271 silly cache add type: 'range' } -1272 silly addNamed tough-cookie@>=2.5.0 <2.6.0 -1273 verbose addNamed ">=2.5.0 <2.6.0" is a valid semver range for tough-cookie -1274 silly addNameRange { name: 'tough-cookie', range: '>=2.5.0 <2.6.0', hasData: false } -1275 silly mapToRegistry name tough-cookie -1276 silly mapToRegistry using default registry -1277 silly mapToRegistry registry https://registry.npmjs.org/ -1278 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie -1279 verbose addNameRange registry:https://registry.npmjs.org/tough-cookie not in flight; fetching -1280 silly cache afterAdd tunnel-agent@0.6.0 -1281 verbose afterAdd /home/christine/.npm/tunnel-agent/0.6.0/package/package.json not in flight; writing -1282 silly cache afterAdd performance-now@2.1.0 -1283 verbose afterAdd /home/christine/.npm/performance-now/2.1.0/package/package.json not in flight; writing -1284 silly resolveWithNewModule mime-types@2.1.27 checking installable status -1285 silly cache add args [ 'mime-types@~2.1.19', null ] -1286 verbose cache add spec mime-types@~2.1.19 -1287 silly cache add parsed spec Result { -1287 silly cache add raw: 'mime-types@~2.1.19', -1287 silly cache add scope: null, -1287 silly cache add name: 'mime-types', -1287 silly cache add rawSpec: '~2.1.19', -1287 silly cache add spec: '>=2.1.19 <2.2.0', -1287 silly cache add type: 'range' } -1288 silly addNamed mime-types@>=2.1.19 <2.2.0 -1289 verbose addNamed ">=2.1.19 <2.2.0" is a valid semver range for mime-types -1290 silly addNameRange { name: 'mime-types', range: '>=2.1.19 <2.2.0', hasData: false } -1291 silly mapToRegistry name mime-types -1292 silly mapToRegistry using default registry -1293 silly mapToRegistry registry https://registry.npmjs.org/ -1294 silly mapToRegistry uri https://registry.npmjs.org/mime-types -1295 verbose addNameRange registry:https://registry.npmjs.org/mime-types not in flight; fetching -1296 http 200 https://registry.npmjs.org/qs -1297 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1297 verbose headers 'content-type': 'application/json', -1297 verbose headers 'transfer-encoding': 'chunked', -1297 verbose headers connection: 'keep-alive', -1297 verbose headers 'set-cookie': -1297 verbose headers [ '__cfduid=dd8aaa3b832fe3de3ea175ff8604d63411590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1297 verbose headers 'cf-ray': '59764fa5183d176a-FRA', -1297 verbose headers age: '5657', -1297 verbose headers 'cache-control': 'public, max-age=300', -1297 verbose headers etag: 'W/"679aa380b84cf75f89f99363ed5f9c98"', -1297 verbose headers 'last-modified': 'Sun, 03 May 2020 21:52:54 GMT', -1297 verbose headers vary: 'accept-encoding, accept', -1297 verbose headers 'cf-cache-status': 'HIT', -1297 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1297 verbose headers server: 'cloudflare', -1297 verbose headers 'content-encoding': 'gzip', -1297 verbose headers 'cf-request-id': '02ddd01b2a0000176a65b45200000001' } -1298 silly get cb [ 200, -1298 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1298 silly get 'content-type': 'application/json', -1298 silly get 'transfer-encoding': 'chunked', -1298 silly get connection: 'keep-alive', -1298 silly get 'set-cookie': -1298 silly get [ '__cfduid=dd8aaa3b832fe3de3ea175ff8604d63411590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1298 silly get 'cf-ray': '59764fa5183d176a-FRA', -1298 silly get age: '5657', -1298 silly get 'cache-control': 'public, max-age=300', -1298 silly get etag: 'W/"679aa380b84cf75f89f99363ed5f9c98"', -1298 silly get 'last-modified': 'Sun, 03 May 2020 21:52:54 GMT', -1298 silly get vary: 'accept-encoding, accept', -1298 silly get 'cf-cache-status': 'HIT', -1298 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1298 silly get server: 'cloudflare', -1298 silly get 'content-encoding': 'gzip', -1298 silly get 'cf-request-id': '02ddd01b2a0000176a65b45200000001' } ] -1299 verbose get saving qs to /home/christine/.npm/registry.npmjs.org/qs/.cache.json -1300 info retry fetch attempt 1 at 13:48:57 -1301 info attempt registry request try #1 at 13:48:57 -1302 http fetch GET https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz -1303 verbose get https://registry.npmjs.org/tough-cookie not expired, no request -1304 silly addNameRange number 2 { name: 'tough-cookie', range: '>=2.5.0 <2.6.0', hasData: true } -1305 silly addNameRange versions [ 'tough-cookie', -1305 silly addNameRange [ '0.9.0', -1305 silly addNameRange '0.9.1', -1305 silly addNameRange '0.9.3', -1305 silly addNameRange '0.9.4', -1305 silly addNameRange '0.9.5', -1305 silly addNameRange '0.9.6', -1305 silly addNameRange '0.9.7', -1305 silly addNameRange '0.9.8', -1305 silly addNameRange '0.9.9', -1305 silly addNameRange '0.9.11', -1305 silly addNameRange '0.9.12', -1305 silly addNameRange '0.9.13', -1305 silly addNameRange '0.9.14', -1305 silly addNameRange '0.9.15', -1305 silly addNameRange '0.10.0', -1305 silly addNameRange '0.11.0', -1305 silly addNameRange '0.12.0', -1305 silly addNameRange '0.12.1', -1305 silly addNameRange '0.13.0', -1305 silly addNameRange '1.0.0', -1305 silly addNameRange '1.1.0', -1305 silly addNameRange '1.2.0', -1305 silly addNameRange '2.0.0', -1305 silly addNameRange '2.1.0', -1305 silly addNameRange '2.2.0', -1305 silly addNameRange '2.2.1', -1305 silly addNameRange '2.2.2', -1305 silly addNameRange '2.3.0', -1305 silly addNameRange '2.3.1', -1305 silly addNameRange '2.3.2', -1305 silly addNameRange '2.3.3', -1305 silly addNameRange '2.3.4', -1305 silly addNameRange '2.4.2', -1305 silly addNameRange '2.4.3', -1305 silly addNameRange '2.5.0', -1305 silly addNameRange '3.0.0', -1305 silly addNameRange '3.0.1', -1305 silly addNameRange '4.0.0' ] ] -1306 silly addNamed tough-cookie@2.5.0 -1307 verbose addNamed "2.5.0" is a plain semver version for tough-cookie -1308 silly cache afterAdd oauth-sign@0.9.0 -1309 verbose afterAdd /home/christine/.npm/oauth-sign/0.9.0/package/package.json not in flight; writing -1310 silly resolveWithNewModule uuid@3.4.0 checking installable status -1311 silly cache add args [ 'uuid@^3.3.2', null ] -1312 verbose cache add spec uuid@^3.3.2 -1313 silly cache add parsed spec Result { -1313 silly cache add raw: 'uuid@^3.3.2', -1313 silly cache add scope: null, -1313 silly cache add name: 'uuid', -1313 silly cache add rawSpec: '^3.3.2', -1313 silly cache add spec: '>=3.3.2 <4.0.0', -1313 silly cache add type: 'range' } -1314 silly addNamed uuid@>=3.3.2 <4.0.0 -1315 verbose addNamed ">=3.3.2 <4.0.0" is a valid semver range for uuid -1316 silly addNameRange { name: 'uuid', range: '>=3.3.2 <4.0.0', hasData: false } -1317 silly mapToRegistry name uuid -1318 silly mapToRegistry using default registry -1319 silly mapToRegistry registry https://registry.npmjs.org/ -1320 silly mapToRegistry uri https://registry.npmjs.org/uuid -1321 verbose addNameRange registry:https://registry.npmjs.org/uuid not in flight; fetching -1322 verbose afterAdd /home/christine/.npm/tunnel-agent/0.6.0/package/package.json written -1323 silly mapToRegistry name tough-cookie -1324 silly mapToRegistry using default registry -1325 silly mapToRegistry registry https://registry.npmjs.org/ -1326 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie -1327 verbose addRemoteTarball https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz not in flight; adding -1328 verbose addRemoteTarball [ 'https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz', -1328 verbose addRemoteTarball 'cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2' ] -1329 verbose afterAdd /home/christine/.npm/performance-now/2.1.0/package/package.json written -1330 verbose get https://registry.npmjs.org/mime-types not expired, no request -1331 silly addNameRange number 2 { name: 'mime-types', range: '>=2.1.19 <2.2.0', hasData: true } -1332 silly addNameRange versions [ 'mime-types', -1332 silly addNameRange [ '0.1.0', -1332 silly addNameRange '1.0.0', -1332 silly addNameRange '1.0.1', -1332 silly addNameRange '1.0.2', -1332 silly addNameRange '2.0.0', -1332 silly addNameRange '2.0.1', -1332 silly addNameRange '2.0.2', -1332 silly addNameRange '2.0.3', -1332 silly addNameRange '2.0.4', -1332 silly addNameRange '2.0.5', -1332 silly addNameRange '2.0.6', -1332 silly addNameRange '2.0.7', -1332 silly addNameRange '2.0.8', -1332 silly addNameRange '2.0.9', -1332 silly addNameRange '2.0.10', -1332 silly addNameRange '2.0.11', -1332 silly addNameRange '2.0.12', -1332 silly addNameRange '2.0.13', -1332 silly addNameRange '2.0.14', -1332 silly addNameRange '2.1.0', -1332 silly addNameRange '2.1.1', -1332 silly addNameRange '2.1.2', -1332 silly addNameRange '2.1.3', -1332 silly addNameRange '2.1.4', -1332 silly addNameRange '2.1.5', -1332 silly addNameRange '2.1.6', -1332 silly addNameRange '2.1.7', -1332 silly addNameRange '2.1.8', -1332 silly addNameRange '2.1.9', -1332 silly addNameRange '2.1.10', -1332 silly addNameRange '2.1.11', -1332 silly addNameRange '2.1.12', -1332 silly addNameRange '2.1.13', -1332 silly addNameRange '2.1.14', -1332 silly addNameRange '2.1.15', -1332 silly addNameRange '2.1.16', -1332 silly addNameRange '2.1.17', -1332 silly addNameRange '2.1.18', -1332 silly addNameRange '2.1.19', -1332 silly addNameRange '2.1.20', -1332 silly addNameRange '2.1.21', -1332 silly addNameRange '2.1.22', -1332 silly addNameRange '2.1.23', -1332 silly addNameRange '2.1.24', -1332 silly addNameRange '2.1.25', -1332 silly addNameRange '2.1.26', -1332 silly addNameRange '2.1.27' ] ] -1333 silly addNamed mime-types@2.1.27 -1334 verbose addNamed "2.1.27" is a plain semver version for mime-types -1335 silly mapToRegistry name mime-types -1336 silly mapToRegistry using default registry -1337 silly mapToRegistry registry https://registry.npmjs.org/ -1338 silly mapToRegistry uri https://registry.npmjs.org/mime-types -1339 verbose addRemoteTarball https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz not in flight; adding -1340 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz', -1340 verbose addRemoteTarball '47949f98e279ea53119f5722e0f34e529bec009f' ] -1341 info retry fetch attempt 1 at 13:48:57 -1342 info attempt registry request try #1 at 13:48:57 -1343 http fetch GET https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz -1344 verbose get https://registry.npmjs.org/uuid not expired, no request -1345 silly addNameRange number 2 { name: 'uuid', range: '>=3.3.2 <4.0.0', hasData: true } -1346 silly addNameRange versions [ 'uuid', -1346 silly addNameRange [ '0.0.1', -1346 silly addNameRange '0.0.2', -1346 silly addNameRange '1.4.0', -1346 silly addNameRange '1.4.1', -1346 silly addNameRange '1.4.2', -1346 silly addNameRange '2.0.0', -1346 silly addNameRange '2.0.1', -1346 silly addNameRange '2.0.2', -1346 silly addNameRange '2.0.3', -1346 silly addNameRange '3.0.0', -1346 silly addNameRange '3.0.1', -1346 silly addNameRange '3.1.0', -1346 silly addNameRange '3.2.0', -1346 silly addNameRange '3.2.1', -1346 silly addNameRange '3.3.0', -1346 silly addNameRange '3.3.2', -1346 silly addNameRange '3.3.3', -1346 silly addNameRange '3.4.0', -1346 silly addNameRange '7.0.0-beta.0', -1346 silly addNameRange '7.0.0', -1346 silly addNameRange '7.0.1', -1346 silly addNameRange '7.0.2-beta.0', -1346 silly addNameRange '7.0.2', -1346 silly addNameRange '7.0.3', -1346 silly addNameRange '8.0.0-beta.0', -1346 silly addNameRange '8.0.0', -1346 silly addNameRange '8.1.0' ] ] -1347 silly addNamed uuid@3.4.0 -1348 verbose addNamed "3.4.0" is a plain semver version for uuid -1349 silly resolveWithNewModule qs@6.5.2 checking installable status -1350 silly cache add args [ 'qs@~6.5.2', null ] -1351 verbose cache add spec qs@~6.5.2 -1352 silly cache add parsed spec Result { -1352 silly cache add raw: 'qs@~6.5.2', -1352 silly cache add scope: null, -1352 silly cache add name: 'qs', -1352 silly cache add rawSpec: '~6.5.2', -1352 silly cache add spec: '>=6.5.2 <6.6.0', -1352 silly cache add type: 'range' } -1353 silly addNamed qs@>=6.5.2 <6.6.0 -1354 verbose addNamed ">=6.5.2 <6.6.0" is a valid semver range for qs -1355 silly addNameRange { name: 'qs', range: '>=6.5.2 <6.6.0', hasData: false } -1356 silly mapToRegistry name qs -1357 silly mapToRegistry using default registry -1358 silly mapToRegistry registry https://registry.npmjs.org/ -1359 silly mapToRegistry uri https://registry.npmjs.org/qs -1360 verbose addNameRange registry:https://registry.npmjs.org/qs not in flight; fetching -1361 verbose afterAdd /home/christine/.npm/oauth-sign/0.9.0/package/package.json written -1362 http fetch 200 https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz -1363 info retry fetch attempt 1 at 13:48:57 -1364 info attempt registry request try #1 at 13:48:57 -1365 http fetch GET https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz -1366 verbose get https://registry.npmjs.org/qs not expired, no request -1367 silly addNameRange number 2 { name: 'qs', range: '>=6.5.2 <6.6.0', hasData: true } -1368 silly addNameRange versions [ 'qs', -1368 silly addNameRange [ '0.0.1', -1368 silly addNameRange '0.0.2', -1368 silly addNameRange '0.0.3', -1368 silly addNameRange '0.0.4', -1368 silly addNameRange '0.0.5', -1368 silly addNameRange '0.0.6', -1368 silly addNameRange '0.0.7', -1368 silly addNameRange '0.1.0', -1368 silly addNameRange '0.2.0', -1368 silly addNameRange '0.3.0', -1368 silly addNameRange '0.3.1', -1368 silly addNameRange '0.3.2', -1368 silly addNameRange '0.4.0', -1368 silly addNameRange '0.4.1', -1368 silly addNameRange '0.4.2', -1368 silly addNameRange '0.5.0', -1368 silly addNameRange '0.5.1', -1368 silly addNameRange '0.5.2', -1368 silly addNameRange '0.5.3', -1368 silly addNameRange '0.5.4', -1368 silly addNameRange '0.5.5', -1368 silly addNameRange '0.5.6', -1368 silly addNameRange '0.6.0', -1368 silly addNameRange '0.6.1', -1368 silly addNameRange '0.6.2', -1368 silly addNameRange '0.6.3', -1368 silly addNameRange '0.6.4', -1368 silly addNameRange '0.6.5', -1368 silly addNameRange '0.6.6', -1368 silly addNameRange '1.0.0', -1368 silly addNameRange '1.0.1', -1368 silly addNameRange '1.0.2', -1368 silly addNameRange '1.1.0', -1368 silly addNameRange '1.2.0', -1368 silly addNameRange '1.2.1', -1368 silly addNameRange '1.2.2', -1368 silly addNameRange '2.0.0', -1368 silly addNameRange '2.1.0', -1368 silly addNameRange '2.2.0', -1368 silly addNameRange '2.2.1', -1368 silly addNameRange '2.2.2', -1368 silly addNameRange '2.2.3', -1368 silly addNameRange '2.2.4', -1368 silly addNameRange '2.2.5', -1368 silly addNameRange '2.3.0', -1368 silly addNameRange '2.3.1', -1368 silly addNameRange '2.3.2', -1368 silly addNameRange '2.3.3', -1368 silly addNameRange '2.4.0', -1368 silly addNameRange '2.4.1', -1368 silly addNameRange '2.4.2', -1368 silly addNameRange '3.0.0', -1368 silly addNameRange '3.1.0', -1368 silly addNameRange '4.0.0', -1368 silly addNameRange '5.0.0', -1368 silly addNameRange '5.1.0', -1368 silly addNameRange '5.2.0', -1368 silly addNameRange '6.0.0', -1368 silly addNameRange '6.0.1', -1368 silly addNameRange '6.0.2', -1368 silly addNameRange '6.1.0', -1368 silly addNameRange '6.2.0', -1368 silly addNameRange '5.2.1', -1368 silly addNameRange '6.2.1', -1368 silly addNameRange '6.3.0', -1368 silly addNameRange '6.3.1', -1368 silly addNameRange '6.1.1', -1368 silly addNameRange '6.0.3', -1368 silly addNameRange '6.2.2', -1368 silly addNameRange '6.4.0', -1368 silly addNameRange '6.3.2', -1368 silly addNameRange '6.2.3', -1368 silly addNameRange '6.1.2', -1368 silly addNameRange '6.0.4', -1368 silly addNameRange '6.5.0', -1368 silly addNameRange '6.5.1', -1368 silly addNameRange '6.5.2', -1368 silly addNameRange '6.6.0', -1368 silly addNameRange '6.7.0', -1368 silly addNameRange '6.8.0', -1368 silly addNameRange '6.9.0', -1368 silly addNameRange '6.9.1', -1368 silly addNameRange '6.9.2', -1368 silly addNameRange '6.8.1', -1368 silly addNameRange '6.7.1', -1368 silly addNameRange '6.7.2', -1368 silly addNameRange '6.8.2', -1368 silly addNameRange '6.9.3', -1368 silly addNameRange '6.9.4' ] ] -1369 silly addNamed qs@6.5.2 -1370 verbose addNamed "6.5.2" is a plain semver version for qs -1371 silly fetchAndShaCheck shasum 1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6 -1372 http fetch 200 https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz -1373 silly cache afterAdd uuid@3.4.0 -1374 verbose afterAdd /home/christine/.npm/uuid/3.4.0/package/package.json not in flight; writing -1375 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz not in flight; adding -1376 verbose addTmpTarball already have metadata; skipping unpack for safe-buffer@5.2.1 -1377 silly cache afterAdd qs@6.5.2 -1378 verbose afterAdd /home/christine/.npm/qs/6.5.2/package/package.json not in flight; writing -1379 verbose afterAdd /home/christine/.npm/uuid/3.4.0/package/package.json written -1380 silly fetchAndShaCheck shasum cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2 -1381 verbose afterAdd /home/christine/.npm/qs/6.5.2/package/package.json written -1382 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz not in flight; adding -1383 verbose addTmpTarball already have metadata; skipping unpack for tough-cookie@2.5.0 -1384 silly cache afterAdd safe-buffer@5.2.1 -1385 verbose afterAdd /home/christine/.npm/safe-buffer/5.2.1/package/package.json not in flight; writing -1386 verbose afterAdd /home/christine/.npm/safe-buffer/5.2.1/package/package.json written -1387 silly cache afterAdd tough-cookie@2.5.0 -1388 verbose afterAdd /home/christine/.npm/tough-cookie/2.5.0/package/package.json not in flight; writing -1389 verbose afterAdd /home/christine/.npm/tough-cookie/2.5.0/package/package.json written -1390 http fetch 200 https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz -1391 silly fetchAndShaCheck shasum 47949f98e279ea53119f5722e0f34e529bec009f -1392 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz not in flight; adding -1393 verbose addTmpTarball already have metadata; skipping unpack for mime-types@2.1.27 -1394 silly cache afterAdd mime-types@2.1.27 -1395 verbose afterAdd /home/christine/.npm/mime-types/2.1.27/package/package.json not in flight; writing -1396 verbose afterAdd /home/christine/.npm/mime-types/2.1.27/package/package.json written -1397 silly fetchNamedPackageData delayed-stream -1398 silly mapToRegistry name delayed-stream -1399 silly mapToRegistry using default registry -1400 silly mapToRegistry registry https://registry.npmjs.org/ -1401 silly mapToRegistry uri https://registry.npmjs.org/delayed-stream -1402 verbose request uri https://registry.npmjs.org/delayed-stream -1403 verbose request no auth needed -1404 info attempt registry request try #1 at 13:48:57 -1405 verbose etag W/"d93fb1e0b12584f566e6f17a70c49721" -1406 verbose lastModified Sat, 26 May 2018 21:57:10 GMT -1407 http request GET https://registry.npmjs.org/delayed-stream -1408 http 304 https://registry.npmjs.org/delayed-stream -1409 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1409 verbose headers connection: 'keep-alive', -1409 verbose headers 'set-cookie': -1409 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1409 verbose headers 'cf-ray': '59764fa5ecd6325c-FRA', -1409 verbose headers age: '5355', -1409 verbose headers 'cache-control': 'public, max-age=300', -1409 verbose headers etag: '"d93fb1e0b12584f566e6f17a70c49721"', -1409 verbose headers 'last-modified': 'Sat, 26 May 2018 21:57:10 GMT', -1409 verbose headers vary: 'Accept-Encoding', -1409 verbose headers 'cf-cache-status': 'HIT', -1409 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1409 verbose headers server: 'cloudflare', -1409 verbose headers 'cf-request-id': '02ddd01baf0000325c4c82b200000001' } -1410 silly get cb [ 304, -1410 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1410 silly get connection: 'keep-alive', -1410 silly get 'set-cookie': -1410 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1410 silly get 'cf-ray': '59764fa5ecd6325c-FRA', -1410 silly get age: '5355', -1410 silly get 'cache-control': 'public, max-age=300', -1410 silly get etag: '"d93fb1e0b12584f566e6f17a70c49721"', -1410 silly get 'last-modified': 'Sat, 26 May 2018 21:57:10 GMT', -1410 silly get vary: 'Accept-Encoding', -1410 silly get 'cf-cache-status': 'HIT', -1410 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1410 silly get server: 'cloudflare', -1410 silly get 'cf-request-id': '02ddd01baf0000325c4c82b200000001' } ] -1411 verbose etag https://registry.npmjs.org/delayed-stream from cache -1412 verbose get saving delayed-stream to /home/christine/.npm/registry.npmjs.org/delayed-stream/.cache.json -1413 silly resolveWithNewModule delayed-stream@1.0.0 checking installable status -1414 silly cache add args [ 'delayed-stream@~1.0.0', null ] -1415 verbose cache add spec delayed-stream@~1.0.0 -1416 silly cache add parsed spec Result { -1416 silly cache add raw: 'delayed-stream@~1.0.0', -1416 silly cache add scope: null, -1416 silly cache add name: 'delayed-stream', -1416 silly cache add rawSpec: '~1.0.0', -1416 silly cache add spec: '>=1.0.0 <1.1.0', -1416 silly cache add type: 'range' } -1417 silly addNamed delayed-stream@>=1.0.0 <1.1.0 -1418 verbose addNamed ">=1.0.0 <1.1.0" is a valid semver range for delayed-stream -1419 silly addNameRange { name: 'delayed-stream', -1419 silly addNameRange range: '>=1.0.0 <1.1.0', -1419 silly addNameRange hasData: false } -1420 silly mapToRegistry name delayed-stream -1421 silly mapToRegistry using default registry -1422 silly mapToRegistry registry https://registry.npmjs.org/ -1423 silly mapToRegistry uri https://registry.npmjs.org/delayed-stream -1424 verbose addNameRange registry:https://registry.npmjs.org/delayed-stream not in flight; fetching -1425 verbose get https://registry.npmjs.org/delayed-stream not expired, no request -1426 silly addNameRange number 2 { name: 'delayed-stream', -1426 silly addNameRange range: '>=1.0.0 <1.1.0', -1426 silly addNameRange hasData: true } -1427 silly addNameRange versions [ 'delayed-stream', -1427 silly addNameRange [ '0.0.0', -1427 silly addNameRange '0.0.1', -1427 silly addNameRange '0.0.2', -1427 silly addNameRange '0.0.3', -1427 silly addNameRange '0.0.4', -1427 silly addNameRange '0.0.5', -1427 silly addNameRange '0.0.6', -1427 silly addNameRange '0.0.7', -1427 silly addNameRange '1.0.0' ] ] -1428 silly addNamed delayed-stream@1.0.0 -1429 verbose addNamed "1.0.0" is a plain semver version for delayed-stream -1430 silly cache afterAdd delayed-stream@1.0.0 -1431 verbose afterAdd /home/christine/.npm/delayed-stream/1.0.0/package/package.json not in flight; writing -1432 verbose afterAdd /home/christine/.npm/delayed-stream/1.0.0/package/package.json written -1433 silly fetchNamedPackageData asynckit -1434 silly mapToRegistry name asynckit -1435 silly mapToRegistry using default registry -1436 silly mapToRegistry registry https://registry.npmjs.org/ -1437 silly mapToRegistry uri https://registry.npmjs.org/asynckit -1438 verbose request uri https://registry.npmjs.org/asynckit -1439 verbose request no auth needed -1440 info attempt registry request try #1 at 13:48:57 -1441 verbose etag W/"34349b180d8fff99867769eadfb4b93e" -1442 verbose lastModified Sat, 26 May 2018 17:31:47 GMT -1443 http request GET https://registry.npmjs.org/asynckit -1444 http 304 https://registry.npmjs.org/asynckit -1445 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT', -1445 verbose headers connection: 'keep-alive', -1445 verbose headers 'set-cookie': -1445 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1445 verbose headers 'cf-ray': '59764fa64d096347-FRA', -1445 verbose headers age: '5354', -1445 verbose headers 'cache-control': 'public, max-age=300', -1445 verbose headers etag: '"34349b180d8fff99867769eadfb4b93e"', -1445 verbose headers 'last-modified': 'Sat, 26 May 2018 17:31:47 GMT', -1445 verbose headers vary: 'Accept-Encoding', -1445 verbose headers 'cf-cache-status': 'HIT', -1445 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1445 verbose headers server: 'cloudflare', -1445 verbose headers 'cf-request-id': '02ddd01be900006347e88c6200000001' } -1446 silly get cb [ 304, -1446 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT', -1446 silly get connection: 'keep-alive', -1446 silly get 'set-cookie': -1446 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1446 silly get 'cf-ray': '59764fa64d096347-FRA', -1446 silly get age: '5354', -1446 silly get 'cache-control': 'public, max-age=300', -1446 silly get etag: '"34349b180d8fff99867769eadfb4b93e"', -1446 silly get 'last-modified': 'Sat, 26 May 2018 17:31:47 GMT', -1446 silly get vary: 'Accept-Encoding', -1446 silly get 'cf-cache-status': 'HIT', -1446 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1446 silly get server: 'cloudflare', -1446 silly get 'cf-request-id': '02ddd01be900006347e88c6200000001' } ] -1447 verbose etag https://registry.npmjs.org/asynckit from cache -1448 verbose get saving asynckit to /home/christine/.npm/registry.npmjs.org/asynckit/.cache.json -1449 silly resolveWithNewModule asynckit@0.4.0 checking installable status -1450 silly cache add args [ 'asynckit@^0.4.0', null ] -1451 verbose cache add spec asynckit@^0.4.0 -1452 silly cache add parsed spec Result { -1452 silly cache add raw: 'asynckit@^0.4.0', -1452 silly cache add scope: null, -1452 silly cache add name: 'asynckit', -1452 silly cache add rawSpec: '^0.4.0', -1452 silly cache add spec: '>=0.4.0 <0.5.0', -1452 silly cache add type: 'range' } -1453 silly addNamed asynckit@>=0.4.0 <0.5.0 -1454 verbose addNamed ">=0.4.0 <0.5.0" is a valid semver range for asynckit -1455 silly addNameRange { name: 'asynckit', range: '>=0.4.0 <0.5.0', hasData: false } -1456 silly mapToRegistry name asynckit -1457 silly mapToRegistry using default registry -1458 silly mapToRegistry registry https://registry.npmjs.org/ -1459 silly mapToRegistry uri https://registry.npmjs.org/asynckit -1460 verbose addNameRange registry:https://registry.npmjs.org/asynckit not in flight; fetching -1461 verbose get https://registry.npmjs.org/asynckit not expired, no request -1462 silly addNameRange number 2 { name: 'asynckit', range: '>=0.4.0 <0.5.0', hasData: true } -1463 silly addNameRange versions [ 'asynckit', [ '0.1.0', '0.2.0', '0.3.0', '0.4.0' ] ] -1464 silly addNamed asynckit@0.4.0 -1465 verbose addNamed "0.4.0" is a plain semver version for asynckit -1466 silly cache afterAdd asynckit@0.4.0 -1467 verbose afterAdd /home/christine/.npm/asynckit/0.4.0/package/package.json not in flight; writing -1468 verbose afterAdd /home/christine/.npm/asynckit/0.4.0/package/package.json written -1469 silly fetchNamedPackageData mime-db -1470 silly mapToRegistry name mime-db -1471 silly mapToRegistry using default registry -1472 silly mapToRegistry registry https://registry.npmjs.org/ -1473 silly mapToRegistry uri https://registry.npmjs.org/mime-db -1474 verbose request uri https://registry.npmjs.org/mime-db -1475 verbose request no auth needed -1476 info attempt registry request try #1 at 13:48:57 -1477 verbose etag W/"2b27fd56fd1f376697dd3c190a16cbca" -1478 verbose lastModified Mon, 06 Jan 2020 03:24:41 GMT -1479 http request GET https://registry.npmjs.org/mime-db -1480 http 200 https://registry.npmjs.org/mime-db -1481 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1481 verbose headers 'content-type': 'application/json', -1481 verbose headers 'transfer-encoding': 'chunked', -1481 verbose headers connection: 'keep-alive', -1481 verbose headers 'set-cookie': -1481 verbose headers [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1481 verbose headers 'cf-ray': '59764fa68978648b-FRA', -1481 verbose headers age: '5355', -1481 verbose headers 'cache-control': 'public, max-age=300', -1481 verbose headers etag: 'W/"b954c5c9a96f2fe6e200fdac9b6d1184"', -1481 verbose headers 'last-modified': 'Thu, 23 Apr 2020 00:55:28 GMT', -1481 verbose headers vary: 'accept-encoding, accept', -1481 verbose headers 'cf-cache-status': 'HIT', -1481 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1481 verbose headers server: 'cloudflare', -1481 verbose headers 'content-encoding': 'gzip', -1481 verbose headers 'cf-request-id': '02ddd01c160000648bda012200000001' } -1482 silly get cb [ 200, -1482 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1482 silly get 'content-type': 'application/json', -1482 silly get 'transfer-encoding': 'chunked', -1482 silly get connection: 'keep-alive', -1482 silly get 'set-cookie': -1482 silly get [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1482 silly get 'cf-ray': '59764fa68978648b-FRA', -1482 silly get age: '5355', -1482 silly get 'cache-control': 'public, max-age=300', -1482 silly get etag: 'W/"b954c5c9a96f2fe6e200fdac9b6d1184"', -1482 silly get 'last-modified': 'Thu, 23 Apr 2020 00:55:28 GMT', -1482 silly get vary: 'accept-encoding, accept', -1482 silly get 'cf-cache-status': 'HIT', -1482 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1482 silly get server: 'cloudflare', -1482 silly get 'content-encoding': 'gzip', -1482 silly get 'cf-request-id': '02ddd01c160000648bda012200000001' } ] -1483 verbose get saving mime-db to /home/christine/.npm/registry.npmjs.org/mime-db/.cache.json -1484 silly resolveWithNewModule mime-db@1.44.0 checking installable status -1485 silly cache add args [ 'mime-db@1.44.0', null ] -1486 verbose cache add spec mime-db@1.44.0 -1487 silly cache add parsed spec Result { -1487 silly cache add raw: 'mime-db@1.44.0', -1487 silly cache add scope: null, -1487 silly cache add name: 'mime-db', -1487 silly cache add rawSpec: '1.44.0', -1487 silly cache add spec: '1.44.0', -1487 silly cache add type: 'version' } -1488 silly addNamed mime-db@1.44.0 -1489 verbose addNamed "1.44.0" is a plain semver version for mime-db -1490 silly mapToRegistry name mime-db -1491 silly mapToRegistry using default registry -1492 silly mapToRegistry registry https://registry.npmjs.org/ -1493 silly mapToRegistry uri https://registry.npmjs.org/mime-db -1494 verbose addNameVersion registry:https://registry.npmjs.org/mime-db not in flight; fetching -1495 verbose get https://registry.npmjs.org/mime-db not expired, no request -1496 silly mapToRegistry name mime-db -1497 silly mapToRegistry using default registry -1498 silly mapToRegistry registry https://registry.npmjs.org/ -1499 silly mapToRegistry uri https://registry.npmjs.org/mime-db -1500 verbose addRemoteTarball https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz not in flight; adding -1501 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz', -1501 verbose addRemoteTarball 'fa11c5eb0aca1334b4233cb4d52f10c5a6272f92' ] -1502 info retry fetch attempt 1 at 13:48:58 -1503 info attempt registry request try #1 at 13:48:58 -1504 http fetch GET https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz -1505 http fetch 200 https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz -1506 silly fetchAndShaCheck shasum fa11c5eb0aca1334b4233cb4d52f10c5a6272f92 -1507 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz not in flight; adding -1508 verbose addTmpTarball already have metadata; skipping unpack for mime-db@1.44.0 -1509 silly cache afterAdd mime-db@1.44.0 -1510 verbose afterAdd /home/christine/.npm/mime-db/1.44.0/package/package.json not in flight; writing -1511 verbose afterAdd /home/christine/.npm/mime-db/1.44.0/package/package.json written -1512 silly fetchNamedPackageData ajv -1513 silly mapToRegistry name ajv -1514 silly mapToRegistry using default registry -1515 silly mapToRegistry registry https://registry.npmjs.org/ -1516 silly mapToRegistry uri https://registry.npmjs.org/ajv -1517 silly fetchNamedPackageData har-schema -1518 silly mapToRegistry name har-schema -1519 silly mapToRegistry using default registry -1520 silly mapToRegistry registry https://registry.npmjs.org/ -1521 silly mapToRegistry uri https://registry.npmjs.org/har-schema -1522 verbose request uri https://registry.npmjs.org/har-schema -1523 verbose request no auth needed -1524 info attempt registry request try #1 at 13:48:58 -1525 verbose etag W/"63c48c25d01ab9ec3e3fb5fe89f0600c" -1526 verbose lastModified Tue, 08 Jan 2019 06:13:01 GMT -1527 http request GET https://registry.npmjs.org/har-schema -1528 verbose request uri https://registry.npmjs.org/ajv -1529 verbose request no auth needed -1530 info attempt registry request try #1 at 13:48:58 -1531 verbose etag W/"da116ce9064cf3ae300f7c5410f85976" -1532 verbose lastModified Sat, 22 Feb 2020 13:51:53 GMT -1533 http request GET https://registry.npmjs.org/ajv -1534 http 304 https://registry.npmjs.org/har-schema -1535 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1535 verbose headers connection: 'keep-alive', -1535 verbose headers 'set-cookie': -1535 verbose headers [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1535 verbose headers 'cf-ray': '59764fa77b11175a-FRA', -1535 verbose headers age: '5352', -1535 verbose headers 'cache-control': 'public, max-age=300', -1535 verbose headers etag: '"63c48c25d01ab9ec3e3fb5fe89f0600c"', -1535 verbose headers 'last-modified': 'Tue, 08 Jan 2019 06:13:01 GMT', -1535 verbose headers vary: 'Accept-Encoding', -1535 verbose headers 'cf-cache-status': 'HIT', -1535 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1535 verbose headers server: 'cloudflare', -1535 verbose headers 'cf-request-id': '02ddd01caf0000175a1e21a200000001' } -1536 silly get cb [ 304, -1536 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1536 silly get connection: 'keep-alive', -1536 silly get 'set-cookie': -1536 silly get [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1536 silly get 'cf-ray': '59764fa77b11175a-FRA', -1536 silly get age: '5352', -1536 silly get 'cache-control': 'public, max-age=300', -1536 silly get etag: '"63c48c25d01ab9ec3e3fb5fe89f0600c"', -1536 silly get 'last-modified': 'Tue, 08 Jan 2019 06:13:01 GMT', -1536 silly get vary: 'Accept-Encoding', -1536 silly get 'cf-cache-status': 'HIT', -1536 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1536 silly get server: 'cloudflare', -1536 silly get 'cf-request-id': '02ddd01caf0000175a1e21a200000001' } ] -1537 verbose etag https://registry.npmjs.org/har-schema from cache -1538 verbose get saving har-schema to /home/christine/.npm/registry.npmjs.org/har-schema/.cache.json -1539 silly resolveWithNewModule har-schema@2.0.0 checking installable status -1540 silly cache add args [ 'har-schema@^2.0.0', null ] -1541 verbose cache add spec har-schema@^2.0.0 -1542 silly cache add parsed spec Result { -1542 silly cache add raw: 'har-schema@^2.0.0', -1542 silly cache add scope: null, -1542 silly cache add name: 'har-schema', -1542 silly cache add rawSpec: '^2.0.0', -1542 silly cache add spec: '>=2.0.0 <3.0.0', -1542 silly cache add type: 'range' } -1543 silly addNamed har-schema@>=2.0.0 <3.0.0 -1544 verbose addNamed ">=2.0.0 <3.0.0" is a valid semver range for har-schema -1545 silly addNameRange { name: 'har-schema', range: '>=2.0.0 <3.0.0', hasData: false } -1546 silly mapToRegistry name har-schema -1547 silly mapToRegistry using default registry -1548 silly mapToRegistry registry https://registry.npmjs.org/ -1549 silly mapToRegistry uri https://registry.npmjs.org/har-schema -1550 verbose addNameRange registry:https://registry.npmjs.org/har-schema not in flight; fetching -1551 verbose get https://registry.npmjs.org/har-schema not expired, no request -1552 silly addNameRange number 2 { name: 'har-schema', range: '>=2.0.0 <3.0.0', hasData: true } -1553 silly addNameRange versions [ 'har-schema', -1553 silly addNameRange [ '0.0.1', -1553 silly addNameRange '0.1.0', -1553 silly addNameRange '0.2.0', -1553 silly addNameRange '1.0.0', -1553 silly addNameRange '1.0.1', -1553 silly addNameRange '1.0.2', -1553 silly addNameRange '1.0.3', -1553 silly addNameRange '1.0.4', -1553 silly addNameRange '1.0.5', -1553 silly addNameRange '2.0.0' ] ] -1554 silly addNamed har-schema@2.0.0 -1555 verbose addNamed "2.0.0" is a plain semver version for har-schema -1556 silly cache afterAdd har-schema@2.0.0 -1557 verbose afterAdd /home/christine/.npm/har-schema/2.0.0/package/package.json not in flight; writing -1558 verbose afterAdd /home/christine/.npm/har-schema/2.0.0/package/package.json written -1559 http 200 https://registry.npmjs.org/ajv -1560 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1560 verbose headers 'content-type': 'application/json', -1560 verbose headers 'transfer-encoding': 'chunked', -1560 verbose headers connection: 'keep-alive', -1560 verbose headers 'set-cookie': -1560 verbose headers [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1560 verbose headers 'cf-ray': '59764fa798ddd715-FRA', -1560 verbose headers age: '5352', -1560 verbose headers 'cache-control': 'public, max-age=300', -1560 verbose headers etag: 'W/"ba29f88f088d4acc36748d3083785459"', -1560 verbose headers 'last-modified': 'Sun, 19 Apr 2020 23:18:27 GMT', -1560 verbose headers vary: 'accept-encoding, accept', -1560 verbose headers 'cf-cache-status': 'HIT', -1560 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1560 verbose headers server: 'cloudflare', -1560 verbose headers 'content-encoding': 'gzip', -1560 verbose headers 'cf-request-id': '02ddd01cc30000d715c1209200000001' } -1561 silly get cb [ 200, -1561 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1561 silly get 'content-type': 'application/json', -1561 silly get 'transfer-encoding': 'chunked', -1561 silly get connection: 'keep-alive', -1561 silly get 'set-cookie': -1561 silly get [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1561 silly get 'cf-ray': '59764fa798ddd715-FRA', -1561 silly get age: '5352', -1561 silly get 'cache-control': 'public, max-age=300', -1561 silly get etag: 'W/"ba29f88f088d4acc36748d3083785459"', -1561 silly get 'last-modified': 'Sun, 19 Apr 2020 23:18:27 GMT', -1561 silly get vary: 'accept-encoding, accept', -1561 silly get 'cf-cache-status': 'HIT', -1561 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1561 silly get server: 'cloudflare', -1561 silly get 'content-encoding': 'gzip', -1561 silly get 'cf-request-id': '02ddd01cc30000d715c1209200000001' } ] -1562 verbose get saving ajv to /home/christine/.npm/registry.npmjs.org/ajv/.cache.json -1563 silly resolveWithNewModule ajv@6.12.2 checking installable status -1564 silly cache add args [ 'ajv@^6.5.5', null ] -1565 verbose cache add spec ajv@^6.5.5 -1566 silly cache add parsed spec Result { -1566 silly cache add raw: 'ajv@^6.5.5', -1566 silly cache add scope: null, -1566 silly cache add name: 'ajv', -1566 silly cache add rawSpec: '^6.5.5', -1566 silly cache add spec: '>=6.5.5 <7.0.0', -1566 silly cache add type: 'range' } -1567 silly addNamed ajv@>=6.5.5 <7.0.0 -1568 verbose addNamed ">=6.5.5 <7.0.0" is a valid semver range for ajv -1569 silly addNameRange { name: 'ajv', range: '>=6.5.5 <7.0.0', hasData: false } -1570 silly mapToRegistry name ajv -1571 silly mapToRegistry using default registry -1572 silly mapToRegistry registry https://registry.npmjs.org/ -1573 silly mapToRegistry uri https://registry.npmjs.org/ajv -1574 verbose addNameRange registry:https://registry.npmjs.org/ajv not in flight; fetching -1575 verbose get https://registry.npmjs.org/ajv not expired, no request -1576 silly addNameRange number 2 { name: 'ajv', range: '>=6.5.5 <7.0.0', hasData: true } -1577 silly addNameRange versions [ 'ajv', -1577 silly addNameRange [ '0.0.4', -1577 silly addNameRange '0.0.5', -1577 silly addNameRange '0.0.6', -1577 silly addNameRange '0.0.7', -1577 silly addNameRange '0.0.8', -1577 silly addNameRange '0.0.9', -1577 silly addNameRange '0.0.10', -1577 silly addNameRange '0.0.11', -1577 silly addNameRange '0.0.12', -1577 silly addNameRange '0.1.0', -1577 silly addNameRange '0.1.1', -1577 silly addNameRange '0.1.2', -1577 silly addNameRange '0.1.3', -1577 silly addNameRange '0.1.4', -1577 silly addNameRange '0.1.5', -1577 silly addNameRange '0.1.6', -1577 silly addNameRange '0.1.7', -1577 silly addNameRange '0.1.8', -1577 silly addNameRange '0.1.9', -1577 silly addNameRange '0.1.10', -1577 silly addNameRange '0.1.11', -1577 silly addNameRange '0.1.12', -1577 silly addNameRange '0.1.13', -1577 silly addNameRange '0.1.14', -1577 silly addNameRange '0.1.15', -1577 silly addNameRange '0.1.16', -1577 silly addNameRange '0.2.0', -1577 silly addNameRange '0.2.1', -1577 silly addNameRange '0.2.2', -1577 silly addNameRange '0.2.3', -1577 silly addNameRange '0.2.4', -1577 silly addNameRange '0.2.5', -1577 silly addNameRange '0.2.6', -1577 silly addNameRange '0.2.7', -1577 silly addNameRange '0.2.8', -1577 silly addNameRange '0.2.9', -1577 silly addNameRange '0.3.0', -1577 silly addNameRange '0.3.1', -1577 silly addNameRange '0.3.2', -1577 silly addNameRange '0.3.3', -1577 silly addNameRange '0.3.4', -1577 silly addNameRange '0.3.5', -1577 silly addNameRange '0.3.6', -1577 silly addNameRange '0.3.7', -1577 silly addNameRange '0.3.8', -1577 silly addNameRange '0.3.11', -1577 silly addNameRange '0.3.12', -1577 silly addNameRange '0.4.0', -1577 silly addNameRange '0.4.1', -1577 silly addNameRange '0.4.2', -1577 silly addNameRange '0.4.3', -1577 silly addNameRange '0.4.4', -1577 silly addNameRange '0.4.5', -1577 silly addNameRange '0.4.6', -1577 silly addNameRange '0.4.7', -1577 silly addNameRange '0.4.8', -1577 silly addNameRange '0.4.9', -1577 silly addNameRange '0.4.10', -1577 silly addNameRange '0.4.12', -1577 silly addNameRange '0.4.14', -1577 silly addNameRange '0.4.15', -1577 silly addNameRange '0.5.0', -1577 silly addNameRange '0.5.2', -1577 silly addNameRange '0.5.3', -1577 silly addNameRange '0.5.4', -1577 silly addNameRange '0.5.5', -1577 silly addNameRange '0.5.6', -1577 silly addNameRange '0.5.7', -1577 silly addNameRange '0.5.8', -1577 silly addNameRange '0.5.9', -1577 silly addNameRange '0.5.10', -1577 silly addNameRange '0.5.11', -1577 silly addNameRange '0.5.12', -1577 silly addNameRange '0.6.0', -1577 silly addNameRange '0.6.1', -1577 silly addNameRange '0.6.2', -1577 silly addNameRange '0.6.3', -1577 silly addNameRange '0.6.4', -1577 silly addNameRange '0.6.5', -1577 silly addNameRange '0.6.6', -1577 silly addNameRange '0.6.7', -1577 silly addNameRange '0.6.8', -1577 silly addNameRange '0.6.9', -1577 silly addNameRange '0.6.10', -1577 silly addNameRange '0.6.11', -1577 silly addNameRange '0.6.12', -1577 silly addNameRange '0.6.13', -1577 silly addNameRange '0.6.14', -1577 silly addNameRange '0.6.15', -1577 silly addNameRange '0.7.0', -1577 silly addNameRange '0.7.1', -1577 silly addNameRange '0.7.2', -1577 silly addNameRange '1.0.0', -1577 silly addNameRange '1.0.1', -1577 silly addNameRange '1.1.1', -1577 silly addNameRange '1.2.0', -1577 silly addNameRange '1.2.1', -1577 silly addNameRange '1.3.0', -1577 silly addNameRange '1.3.1', -1577 silly addNameRange '1.3.2', -1577 silly addNameRange ... 185 more items ] ] -1578 silly addNamed ajv@6.12.2 -1579 verbose addNamed "6.12.2" is a plain semver version for ajv -1580 silly mapToRegistry name ajv -1581 silly mapToRegistry using default registry -1582 silly mapToRegistry registry https://registry.npmjs.org/ -1583 silly mapToRegistry uri https://registry.npmjs.org/ajv -1584 verbose addRemoteTarball https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz not in flight; adding -1585 verbose addRemoteTarball [ 'https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz', -1585 verbose addRemoteTarball 'c629c5eced17baf314437918d2da88c99d5958cd' ] -1586 info retry fetch attempt 1 at 13:48:58 -1587 info attempt registry request try #1 at 13:48:58 -1588 http fetch GET https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz -1589 http fetch 200 https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz -1590 silly fetchAndShaCheck shasum c629c5eced17baf314437918d2da88c99d5958cd -1591 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/ajv/-/ajv-6.12.2.tgz not in flight; adding -1592 verbose addTmpTarball already have metadata; skipping unpack for ajv@6.12.2 -1593 silly cache afterAdd ajv@6.12.2 -1594 verbose afterAdd /home/christine/.npm/ajv/6.12.2/package/package.json not in flight; writing -1595 verbose afterAdd /home/christine/.npm/ajv/6.12.2/package/package.json written -1596 silly fetchNamedPackageData fast-deep-equal -1597 silly mapToRegistry name fast-deep-equal -1598 silly mapToRegistry using default registry -1599 silly mapToRegistry registry https://registry.npmjs.org/ -1600 silly mapToRegistry uri https://registry.npmjs.org/fast-deep-equal -1601 silly fetchNamedPackageData fast-json-stable-stringify -1602 silly mapToRegistry name fast-json-stable-stringify -1603 silly mapToRegistry using default registry -1604 silly mapToRegistry registry https://registry.npmjs.org/ -1605 silly mapToRegistry uri https://registry.npmjs.org/fast-json-stable-stringify -1606 silly fetchNamedPackageData json-schema-traverse -1607 silly mapToRegistry name json-schema-traverse -1608 silly mapToRegistry using default registry -1609 silly mapToRegistry registry https://registry.npmjs.org/ -1610 silly mapToRegistry uri https://registry.npmjs.org/json-schema-traverse -1611 silly fetchNamedPackageData uri-js -1612 silly mapToRegistry name uri-js -1613 silly mapToRegistry using default registry -1614 silly mapToRegistry registry https://registry.npmjs.org/ -1615 silly mapToRegistry uri https://registry.npmjs.org/uri-js -1616 verbose request uri https://registry.npmjs.org/fast-deep-equal -1617 verbose request no auth needed -1618 info attempt registry request try #1 at 13:48:58 -1619 verbose etag W/"db2dac15e1de3baf39963d09ad4d32a5" -1620 verbose lastModified Wed, 22 Jan 2020 05:22:55 GMT -1621 http request GET https://registry.npmjs.org/fast-deep-equal -1622 verbose request uri https://registry.npmjs.org/json-schema-traverse -1623 verbose request no auth needed -1624 info attempt registry request try #1 at 13:48:58 -1625 verbose etag W/"ff9cf4d0fe6dae90110c679f03d42f51" -1626 verbose lastModified Sun, 10 Jun 2018 08:42:10 GMT -1627 http request GET https://registry.npmjs.org/json-schema-traverse -1628 verbose request uri https://registry.npmjs.org/fast-json-stable-stringify -1629 verbose request no auth needed -1630 info attempt registry request try #1 at 13:48:58 -1631 verbose etag W/"ae0fff93e18698c6aa2dc573fe85ad0a" -1632 verbose lastModified Sat, 14 Dec 2019 16:18:01 GMT -1633 http request GET https://registry.npmjs.org/fast-json-stable-stringify -1634 verbose request uri https://registry.npmjs.org/uri-js -1635 verbose request no auth needed -1636 info attempt registry request try #1 at 13:48:58 -1637 verbose etag W/"98dc8f4198063595fc640811868341b2" -1638 verbose lastModified Wed, 09 Jan 2019 05:32:41 GMT -1639 http request GET https://registry.npmjs.org/uri-js -1640 http 304 https://registry.npmjs.org/fast-deep-equal -1641 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1641 verbose headers connection: 'keep-alive', -1641 verbose headers 'set-cookie': -1641 verbose headers [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1641 verbose headers 'cf-ray': '59764fa919db05bb-FRA', -1641 verbose headers age: '5351', -1641 verbose headers 'cache-control': 'public, max-age=300', -1641 verbose headers etag: '"db2dac15e1de3baf39963d09ad4d32a5"', -1641 verbose headers 'last-modified': 'Wed, 22 Jan 2020 05:22:55 GMT', -1641 verbose headers vary: 'Accept-Encoding', -1641 verbose headers 'cf-cache-status': 'HIT', -1641 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1641 verbose headers server: 'cloudflare', -1641 verbose headers 'cf-request-id': '02ddd01db3000005bb0ca9e200000001' } -1642 silly get cb [ 304, -1642 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1642 silly get connection: 'keep-alive', -1642 silly get 'set-cookie': -1642 silly get [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1642 silly get 'cf-ray': '59764fa919db05bb-FRA', -1642 silly get age: '5351', -1642 silly get 'cache-control': 'public, max-age=300', -1642 silly get etag: '"db2dac15e1de3baf39963d09ad4d32a5"', -1642 silly get 'last-modified': 'Wed, 22 Jan 2020 05:22:55 GMT', -1642 silly get vary: 'Accept-Encoding', -1642 silly get 'cf-cache-status': 'HIT', -1642 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1642 silly get server: 'cloudflare', -1642 silly get 'cf-request-id': '02ddd01db3000005bb0ca9e200000001' } ] -1643 verbose etag https://registry.npmjs.org/fast-deep-equal from cache -1644 verbose get saving fast-deep-equal to /home/christine/.npm/registry.npmjs.org/fast-deep-equal/.cache.json -1645 silly resolveWithNewModule fast-deep-equal@3.1.1 checking installable status -1646 silly cache add args [ 'fast-deep-equal@^3.1.1', null ] -1647 verbose cache add spec fast-deep-equal@^3.1.1 -1648 silly cache add parsed spec Result { -1648 silly cache add raw: 'fast-deep-equal@^3.1.1', -1648 silly cache add scope: null, -1648 silly cache add name: 'fast-deep-equal', -1648 silly cache add rawSpec: '^3.1.1', -1648 silly cache add spec: '>=3.1.1 <4.0.0', -1648 silly cache add type: 'range' } -1649 silly addNamed fast-deep-equal@>=3.1.1 <4.0.0 -1650 verbose addNamed ">=3.1.1 <4.0.0" is a valid semver range for fast-deep-equal -1651 silly addNameRange { name: 'fast-deep-equal', -1651 silly addNameRange range: '>=3.1.1 <4.0.0', -1651 silly addNameRange hasData: false } -1652 silly mapToRegistry name fast-deep-equal -1653 silly mapToRegistry using default registry -1654 silly mapToRegistry registry https://registry.npmjs.org/ -1655 silly mapToRegistry uri https://registry.npmjs.org/fast-deep-equal -1656 verbose addNameRange registry:https://registry.npmjs.org/fast-deep-equal not in flight; fetching -1657 verbose get https://registry.npmjs.org/fast-deep-equal not expired, no request -1658 silly addNameRange number 2 { name: 'fast-deep-equal', -1658 silly addNameRange range: '>=3.1.1 <4.0.0', -1658 silly addNameRange hasData: true } -1659 silly addNameRange versions [ 'fast-deep-equal', -1659 silly addNameRange [ '0.0.1', -1659 silly addNameRange '0.1.0', -1659 silly addNameRange '1.0.0', -1659 silly addNameRange '1.1.0', -1659 silly addNameRange '2.0.0', -1659 silly addNameRange '2.0.1', -1659 silly addNameRange '3.0.0-beta.0', -1659 silly addNameRange '3.0.0-beta.1', -1659 silly addNameRange '3.0.0-beta.2', -1659 silly addNameRange '3.0.0', -1659 silly addNameRange '3.0.1', -1659 silly addNameRange '3.1.0', -1659 silly addNameRange '3.1.1' ] ] -1660 silly addNamed fast-deep-equal@3.1.1 -1661 verbose addNamed "3.1.1" is a plain semver version for fast-deep-equal -1662 silly cache afterAdd fast-deep-equal@3.1.1 -1663 verbose afterAdd /home/christine/.npm/fast-deep-equal/3.1.1/package/package.json not in flight; writing -1664 verbose afterAdd /home/christine/.npm/fast-deep-equal/3.1.1/package/package.json written -1665 http 304 https://registry.npmjs.org/fast-json-stable-stringify -1666 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1666 verbose headers connection: 'keep-alive', -1666 verbose headers 'set-cookie': -1666 verbose headers [ '__cfduid=d2af9fdb41f2d4571645353fe78c8280d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1666 verbose headers 'cf-ray': '59764fa92ba70eab-FRA', -1666 verbose headers age: '5351', -1666 verbose headers 'cache-control': 'public, max-age=300', -1666 verbose headers etag: '"ae0fff93e18698c6aa2dc573fe85ad0a"', -1666 verbose headers 'last-modified': 'Sat, 14 Dec 2019 16:18:01 GMT', -1666 verbose headers vary: 'Accept-Encoding', -1666 verbose headers 'cf-cache-status': 'HIT', -1666 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1666 verbose headers server: 'cloudflare', -1666 verbose headers 'cf-request-id': '02ddd01db900000eabe9180200000001' } -1667 silly get cb [ 304, -1667 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1667 silly get connection: 'keep-alive', -1667 silly get 'set-cookie': -1667 silly get [ '__cfduid=d2af9fdb41f2d4571645353fe78c8280d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1667 silly get 'cf-ray': '59764fa92ba70eab-FRA', -1667 silly get age: '5351', -1667 silly get 'cache-control': 'public, max-age=300', -1667 silly get etag: '"ae0fff93e18698c6aa2dc573fe85ad0a"', -1667 silly get 'last-modified': 'Sat, 14 Dec 2019 16:18:01 GMT', -1667 silly get vary: 'Accept-Encoding', -1667 silly get 'cf-cache-status': 'HIT', -1667 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1667 silly get server: 'cloudflare', -1667 silly get 'cf-request-id': '02ddd01db900000eabe9180200000001' } ] -1668 verbose etag https://registry.npmjs.org/fast-json-stable-stringify from cache -1669 verbose get saving fast-json-stable-stringify to /home/christine/.npm/registry.npmjs.org/fast-json-stable-stringify/.cache.json -1670 silly resolveWithNewModule fast-json-stable-stringify@2.1.0 checking installable status -1671 silly cache add args [ 'fast-json-stable-stringify@^2.0.0', null ] -1672 verbose cache add spec fast-json-stable-stringify@^2.0.0 -1673 silly cache add parsed spec Result { -1673 silly cache add raw: 'fast-json-stable-stringify@^2.0.0', -1673 silly cache add scope: null, -1673 silly cache add name: 'fast-json-stable-stringify', -1673 silly cache add rawSpec: '^2.0.0', -1673 silly cache add spec: '>=2.0.0 <3.0.0', -1673 silly cache add type: 'range' } -1674 silly addNamed fast-json-stable-stringify@>=2.0.0 <3.0.0 -1675 verbose addNamed ">=2.0.0 <3.0.0" is a valid semver range for fast-json-stable-stringify -1676 silly addNameRange { name: 'fast-json-stable-stringify', -1676 silly addNameRange range: '>=2.0.0 <3.0.0', -1676 silly addNameRange hasData: false } -1677 silly mapToRegistry name fast-json-stable-stringify -1678 silly mapToRegistry using default registry -1679 silly mapToRegistry registry https://registry.npmjs.org/ -1680 silly mapToRegistry uri https://registry.npmjs.org/fast-json-stable-stringify -1681 verbose addNameRange registry:https://registry.npmjs.org/fast-json-stable-stringify not in flight; fetching -1682 http 304 https://registry.npmjs.org/json-schema-traverse -1683 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1683 verbose headers connection: 'keep-alive', -1683 verbose headers 'set-cookie': -1683 verbose headers [ '__cfduid=d3221de8ef62ba021521e3facdf4646ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1683 verbose headers 'cf-ray': '59764fa928dbd6e1-FRA', -1683 verbose headers age: '5351', -1683 verbose headers 'cache-control': 'public, max-age=300', -1683 verbose headers etag: '"ff9cf4d0fe6dae90110c679f03d42f51"', -1683 verbose headers 'last-modified': 'Sun, 10 Jun 2018 08:42:10 GMT', -1683 verbose headers vary: 'Accept-Encoding', -1683 verbose headers 'cf-cache-status': 'HIT', -1683 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1683 verbose headers server: 'cloudflare', -1683 verbose headers 'cf-request-id': '02ddd01db80000d6e132393200000001' } -1684 silly get cb [ 304, -1684 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1684 silly get connection: 'keep-alive', -1684 silly get 'set-cookie': -1684 silly get [ '__cfduid=d3221de8ef62ba021521e3facdf4646ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1684 silly get 'cf-ray': '59764fa928dbd6e1-FRA', -1684 silly get age: '5351', -1684 silly get 'cache-control': 'public, max-age=300', -1684 silly get etag: '"ff9cf4d0fe6dae90110c679f03d42f51"', -1684 silly get 'last-modified': 'Sun, 10 Jun 2018 08:42:10 GMT', -1684 silly get vary: 'Accept-Encoding', -1684 silly get 'cf-cache-status': 'HIT', -1684 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1684 silly get server: 'cloudflare', -1684 silly get 'cf-request-id': '02ddd01db80000d6e132393200000001' } ] -1685 verbose etag https://registry.npmjs.org/json-schema-traverse from cache -1686 verbose get saving json-schema-traverse to /home/christine/.npm/registry.npmjs.org/json-schema-traverse/.cache.json -1687 http 304 https://registry.npmjs.org/uri-js -1688 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1688 verbose headers connection: 'keep-alive', -1688 verbose headers 'set-cookie': -1688 verbose headers [ '__cfduid=daac5443483b19b682dfd1142d78174b81590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1688 verbose headers 'cf-ray': '59764fa92aaec2f9-FRA', -1688 verbose headers age: '5351', -1688 verbose headers 'cache-control': 'public, max-age=300', -1688 verbose headers etag: '"98dc8f4198063595fc640811868341b2"', -1688 verbose headers 'last-modified': 'Wed, 09 Jan 2019 05:32:41 GMT', -1688 verbose headers vary: 'Accept-Encoding', -1688 verbose headers 'cf-cache-status': 'HIT', -1688 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1688 verbose headers server: 'cloudflare', -1688 verbose headers 'cf-request-id': '02ddd01db90000c2f92609d200000001' } -1689 silly get cb [ 304, -1689 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1689 silly get connection: 'keep-alive', -1689 silly get 'set-cookie': -1689 silly get [ '__cfduid=daac5443483b19b682dfd1142d78174b81590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1689 silly get 'cf-ray': '59764fa92aaec2f9-FRA', -1689 silly get age: '5351', -1689 silly get 'cache-control': 'public, max-age=300', -1689 silly get etag: '"98dc8f4198063595fc640811868341b2"', -1689 silly get 'last-modified': 'Wed, 09 Jan 2019 05:32:41 GMT', -1689 silly get vary: 'Accept-Encoding', -1689 silly get 'cf-cache-status': 'HIT', -1689 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1689 silly get server: 'cloudflare', -1689 silly get 'cf-request-id': '02ddd01db90000c2f92609d200000001' } ] -1690 verbose etag https://registry.npmjs.org/uri-js from cache -1691 verbose get saving uri-js to /home/christine/.npm/registry.npmjs.org/uri-js/.cache.json -1692 verbose get https://registry.npmjs.org/fast-json-stable-stringify not expired, no request -1693 silly addNameRange number 2 { name: 'fast-json-stable-stringify', -1693 silly addNameRange range: '>=2.0.0 <3.0.0', -1693 silly addNameRange hasData: true } -1694 silly addNameRange versions [ 'fast-json-stable-stringify', [ '1.0.2', '2.0.0', '2.1.0' ] ] -1695 silly addNamed fast-json-stable-stringify@2.1.0 -1696 verbose addNamed "2.1.0" is a plain semver version for fast-json-stable-stringify -1697 silly resolveWithNewModule json-schema-traverse@0.4.1 checking installable status -1698 silly cache add args [ 'json-schema-traverse@^0.4.1', null ] -1699 verbose cache add spec json-schema-traverse@^0.4.1 -1700 silly cache add parsed spec Result { -1700 silly cache add raw: 'json-schema-traverse@^0.4.1', -1700 silly cache add scope: null, -1700 silly cache add name: 'json-schema-traverse', -1700 silly cache add rawSpec: '^0.4.1', -1700 silly cache add spec: '>=0.4.1 <0.5.0', -1700 silly cache add type: 'range' } -1701 silly addNamed json-schema-traverse@>=0.4.1 <0.5.0 -1702 verbose addNamed ">=0.4.1 <0.5.0" is a valid semver range for json-schema-traverse -1703 silly addNameRange { name: 'json-schema-traverse', -1703 silly addNameRange range: '>=0.4.1 <0.5.0', -1703 silly addNameRange hasData: false } -1704 silly mapToRegistry name json-schema-traverse -1705 silly mapToRegistry using default registry -1706 silly mapToRegistry registry https://registry.npmjs.org/ -1707 silly mapToRegistry uri https://registry.npmjs.org/json-schema-traverse -1708 verbose addNameRange registry:https://registry.npmjs.org/json-schema-traverse not in flight; fetching -1709 silly resolveWithNewModule uri-js@4.2.2 checking installable status -1710 silly cache add args [ 'uri-js@^4.2.2', null ] -1711 verbose cache add spec uri-js@^4.2.2 -1712 silly cache add parsed spec Result { -1712 silly cache add raw: 'uri-js@^4.2.2', -1712 silly cache add scope: null, -1712 silly cache add name: 'uri-js', -1712 silly cache add rawSpec: '^4.2.2', -1712 silly cache add spec: '>=4.2.2 <5.0.0', -1712 silly cache add type: 'range' } -1713 silly addNamed uri-js@>=4.2.2 <5.0.0 -1714 verbose addNamed ">=4.2.2 <5.0.0" is a valid semver range for uri-js -1715 silly addNameRange { name: 'uri-js', range: '>=4.2.2 <5.0.0', hasData: false } -1716 silly mapToRegistry name uri-js -1717 silly mapToRegistry using default registry -1718 silly mapToRegistry registry https://registry.npmjs.org/ -1719 silly mapToRegistry uri https://registry.npmjs.org/uri-js -1720 verbose addNameRange registry:https://registry.npmjs.org/uri-js not in flight; fetching -1721 verbose get https://registry.npmjs.org/json-schema-traverse not expired, no request -1722 silly addNameRange number 2 { name: 'json-schema-traverse', -1722 silly addNameRange range: '>=0.4.1 <0.5.0', -1722 silly addNameRange hasData: true } -1723 silly addNameRange versions [ 'json-schema-traverse', -1723 silly addNameRange [ '0.0.1', '0.1.0', '0.2.0', '0.3.0', '0.3.1', '0.4.0', '0.4.1' ] ] -1724 silly addNamed json-schema-traverse@0.4.1 -1725 verbose addNamed "0.4.1" is a plain semver version for json-schema-traverse -1726 verbose get https://registry.npmjs.org/uri-js not expired, no request -1727 silly addNameRange number 2 { name: 'uri-js', range: '>=4.2.2 <5.0.0', hasData: true } -1728 silly addNameRange versions [ 'uri-js', -1728 silly addNameRange [ '1.4.0', -1728 silly addNameRange '1.4.2', -1728 silly addNameRange '2.0.0', -1728 silly addNameRange '2.1.0', -1728 silly addNameRange '2.1.1', -1728 silly addNameRange '3.0.0', -1728 silly addNameRange '3.0.1', -1728 silly addNameRange '3.0.2', -1728 silly addNameRange '4.2.0', -1728 silly addNameRange '4.2.1', -1728 silly addNameRange '4.2.2' ] ] -1729 silly addNamed uri-js@4.2.2 -1730 verbose addNamed "4.2.2" is a plain semver version for uri-js -1731 silly cache afterAdd fast-json-stable-stringify@2.1.0 -1732 verbose afterAdd /home/christine/.npm/fast-json-stable-stringify/2.1.0/package/package.json not in flight; writing -1733 verbose afterAdd /home/christine/.npm/fast-json-stable-stringify/2.1.0/package/package.json written -1734 silly cache afterAdd json-schema-traverse@0.4.1 -1735 verbose afterAdd /home/christine/.npm/json-schema-traverse/0.4.1/package/package.json not in flight; writing -1736 silly cache afterAdd uri-js@4.2.2 -1737 verbose afterAdd /home/christine/.npm/uri-js/4.2.2/package/package.json not in flight; writing -1738 verbose afterAdd /home/christine/.npm/json-schema-traverse/0.4.1/package/package.json written -1739 verbose afterAdd /home/christine/.npm/uri-js/4.2.2/package/package.json written -1740 silly fetchNamedPackageData punycode -1741 silly mapToRegistry name punycode -1742 silly mapToRegistry using default registry -1743 silly mapToRegistry registry https://registry.npmjs.org/ -1744 silly mapToRegistry uri https://registry.npmjs.org/punycode -1745 verbose request uri https://registry.npmjs.org/punycode -1746 verbose request no auth needed -1747 info attempt registry request try #1 at 13:48:58 -1748 verbose etag W/"27ef686d9a29403de9242fe625c85934" -1749 verbose lastModified Sun, 27 May 2018 13:11:15 GMT -1750 http request GET https://registry.npmjs.org/punycode -1751 http 304 https://registry.npmjs.org/punycode -1752 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1752 verbose headers connection: 'keep-alive', -1752 verbose headers 'set-cookie': -1752 verbose headers [ '__cfduid=d27785e001b27740005b62566f67820581590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1752 verbose headers 'cf-ray': '59764fa969ce1772-FRA', -1752 verbose headers age: '5655', -1752 verbose headers 'cache-control': 'public, max-age=300', -1752 verbose headers etag: '"27ef686d9a29403de9242fe625c85934"', -1752 verbose headers 'last-modified': 'Sun, 27 May 2018 13:11:15 GMT', -1752 verbose headers vary: 'Accept-Encoding', -1752 verbose headers 'cf-cache-status': 'HIT', -1752 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1752 verbose headers server: 'cloudflare', -1752 verbose headers 'cf-request-id': '02ddd01de4000017726419b200000001' } -1753 silly get cb [ 304, -1753 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1753 silly get connection: 'keep-alive', -1753 silly get 'set-cookie': -1753 silly get [ '__cfduid=d27785e001b27740005b62566f67820581590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1753 silly get 'cf-ray': '59764fa969ce1772-FRA', -1753 silly get age: '5655', -1753 silly get 'cache-control': 'public, max-age=300', -1753 silly get etag: '"27ef686d9a29403de9242fe625c85934"', -1753 silly get 'last-modified': 'Sun, 27 May 2018 13:11:15 GMT', -1753 silly get vary: 'Accept-Encoding', -1753 silly get 'cf-cache-status': 'HIT', -1753 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1753 silly get server: 'cloudflare', -1753 silly get 'cf-request-id': '02ddd01de4000017726419b200000001' } ] -1754 verbose etag https://registry.npmjs.org/punycode from cache -1755 verbose get saving punycode to /home/christine/.npm/registry.npmjs.org/punycode/.cache.json -1756 silly resolveWithNewModule punycode@2.1.1 checking installable status -1757 silly cache add args [ 'punycode@^2.1.0', null ] -1758 verbose cache add spec punycode@^2.1.0 -1759 silly cache add parsed spec Result { -1759 silly cache add raw: 'punycode@^2.1.0', -1759 silly cache add scope: null, -1759 silly cache add name: 'punycode', -1759 silly cache add rawSpec: '^2.1.0', -1759 silly cache add spec: '>=2.1.0 <3.0.0', -1759 silly cache add type: 'range' } -1760 silly addNamed punycode@>=2.1.0 <3.0.0 -1761 verbose addNamed ">=2.1.0 <3.0.0" is a valid semver range for punycode -1762 silly addNameRange { name: 'punycode', range: '>=2.1.0 <3.0.0', hasData: false } -1763 silly mapToRegistry name punycode -1764 silly mapToRegistry using default registry -1765 silly mapToRegistry registry https://registry.npmjs.org/ -1766 silly mapToRegistry uri https://registry.npmjs.org/punycode -1767 verbose addNameRange registry:https://registry.npmjs.org/punycode not in flight; fetching -1768 verbose get https://registry.npmjs.org/punycode not expired, no request -1769 silly addNameRange number 2 { name: 'punycode', range: '>=2.1.0 <3.0.0', hasData: true } -1770 silly addNameRange versions [ 'punycode', -1770 silly addNameRange [ '0.0.1', -1770 silly addNameRange '0.0.2', -1770 silly addNameRange '0.0.1337', -1770 silly addNameRange '0.1.0', -1770 silly addNameRange '0.1.1', -1770 silly addNameRange '0.1.2', -1770 silly addNameRange '0.2.0', -1770 silly addNameRange '0.2.1', -1770 silly addNameRange '0.2.2', -1770 silly addNameRange '0.3.0', -1770 silly addNameRange '1.0.0', -1770 silly addNameRange '1.1.0', -1770 silly addNameRange '1.1.1', -1770 silly addNameRange '1.2.0', -1770 silly addNameRange '1.2.1', -1770 silly addNameRange '1.2.2', -1770 silly addNameRange '1.2.3', -1770 silly addNameRange '1.2.4', -1770 silly addNameRange '1.3.0', -1770 silly addNameRange '1.3.1', -1770 silly addNameRange '1.3.2', -1770 silly addNameRange '1.4.0', -1770 silly addNameRange '1.4.1', -1770 silly addNameRange '2.0.0', -1770 silly addNameRange '2.0.1', -1770 silly addNameRange '2.1.0', -1770 silly addNameRange '2.1.1' ] ] -1771 silly addNamed punycode@2.1.1 -1772 verbose addNamed "2.1.1" is a plain semver version for punycode -1773 silly cache afterAdd punycode@2.1.1 -1774 verbose afterAdd /home/christine/.npm/punycode/2.1.1/package/package.json not in flight; writing -1775 verbose afterAdd /home/christine/.npm/punycode/2.1.1/package/package.json written -1776 silly fetchNamedPackageData assert-plus -1777 silly mapToRegistry name assert-plus -1778 silly mapToRegistry using default registry -1779 silly mapToRegistry registry https://registry.npmjs.org/ -1780 silly mapToRegistry uri https://registry.npmjs.org/assert-plus -1781 silly fetchNamedPackageData jsprim -1782 silly mapToRegistry name jsprim -1783 silly mapToRegistry using default registry -1784 silly mapToRegistry registry https://registry.npmjs.org/ -1785 silly mapToRegistry uri https://registry.npmjs.org/jsprim -1786 silly fetchNamedPackageData sshpk -1787 silly mapToRegistry name sshpk -1788 silly mapToRegistry using default registry -1789 silly mapToRegistry registry https://registry.npmjs.org/ -1790 silly mapToRegistry uri https://registry.npmjs.org/sshpk -1791 verbose request uri https://registry.npmjs.org/assert-plus -1792 verbose request no auth needed -1793 info attempt registry request try #1 at 13:48:58 -1794 verbose etag W/"5f1c38f02647d4e0324c53fe90ea160c" -1795 verbose lastModified Fri, 13 Dec 2019 16:32:10 GMT -1796 http request GET https://registry.npmjs.org/assert-plus -1797 verbose request uri https://registry.npmjs.org/jsprim -1798 verbose request no auth needed -1799 info attempt registry request try #1 at 13:48:58 -1800 verbose etag W/"ec307a0d291a7abbcabe4ca63c75468e" -1801 verbose lastModified Fri, 13 Dec 2019 16:32:36 GMT -1802 http request GET https://registry.npmjs.org/jsprim -1803 verbose request uri https://registry.npmjs.org/sshpk -1804 verbose request no auth needed -1805 info attempt registry request try #1 at 13:48:58 -1806 verbose etag W/"e8e015112a9fbc16cc4a367405b14614" -1807 verbose lastModified Fri, 13 Dec 2019 16:33:04 GMT -1808 http request GET https://registry.npmjs.org/sshpk -1809 http 200 https://registry.npmjs.org/assert-plus -1810 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1810 verbose headers 'content-type': 'application/json', -1810 verbose headers 'transfer-encoding': 'chunked', -1810 verbose headers connection: 'keep-alive', -1810 verbose headers 'set-cookie': -1810 verbose headers [ '__cfduid=d7b1200d8018131cb680b33099b4da6111590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1810 verbose headers 'cf-ray': '59764fa9af0505e9-FRA', -1810 verbose headers age: '5654', -1810 verbose headers 'cache-control': 'public, max-age=300', -1810 verbose headers etag: 'W/"a6e598834cba689561f3d676e817bde6"', -1810 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -1810 verbose headers vary: 'accept-encoding, accept', -1810 verbose headers 'cf-cache-status': 'HIT', -1810 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1810 verbose headers server: 'cloudflare', -1810 verbose headers 'content-encoding': 'gzip', -1810 verbose headers 'cf-request-id': '02ddd01e0b000005e903b57200000001' } -1811 silly get cb [ 200, -1811 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1811 silly get 'content-type': 'application/json', -1811 silly get 'transfer-encoding': 'chunked', -1811 silly get connection: 'keep-alive', -1811 silly get 'set-cookie': -1811 silly get [ '__cfduid=d7b1200d8018131cb680b33099b4da6111590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1811 silly get 'cf-ray': '59764fa9af0505e9-FRA', -1811 silly get age: '5654', -1811 silly get 'cache-control': 'public, max-age=300', -1811 silly get etag: 'W/"a6e598834cba689561f3d676e817bde6"', -1811 silly get 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -1811 silly get vary: 'accept-encoding, accept', -1811 silly get 'cf-cache-status': 'HIT', -1811 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1811 silly get server: 'cloudflare', -1811 silly get 'content-encoding': 'gzip', -1811 silly get 'cf-request-id': '02ddd01e0b000005e903b57200000001' } ] -1812 verbose get saving assert-plus to /home/christine/.npm/registry.npmjs.org/assert-plus/.cache.json -1813 silly resolveWithNewModule assert-plus@1.0.0 checking installable status -1814 silly cache add args [ 'assert-plus@^1.0.0', null ] -1815 verbose cache add spec assert-plus@^1.0.0 -1816 silly cache add parsed spec Result { -1816 silly cache add raw: 'assert-plus@^1.0.0', -1816 silly cache add scope: null, -1816 silly cache add name: 'assert-plus', -1816 silly cache add rawSpec: '^1.0.0', -1816 silly cache add spec: '>=1.0.0 <2.0.0', -1816 silly cache add type: 'range' } -1817 silly addNamed assert-plus@>=1.0.0 <2.0.0 -1818 verbose addNamed ">=1.0.0 <2.0.0" is a valid semver range for assert-plus -1819 silly addNameRange { name: 'assert-plus', range: '>=1.0.0 <2.0.0', hasData: false } -1820 silly mapToRegistry name assert-plus -1821 silly mapToRegistry using default registry -1822 silly mapToRegistry registry https://registry.npmjs.org/ -1823 silly mapToRegistry uri https://registry.npmjs.org/assert-plus -1824 verbose addNameRange registry:https://registry.npmjs.org/assert-plus not in flight; fetching -1825 verbose get https://registry.npmjs.org/assert-plus not expired, no request -1826 silly addNameRange number 2 { name: 'assert-plus', range: '>=1.0.0 <2.0.0', hasData: true } -1827 silly addNameRange versions [ 'assert-plus', -1827 silly addNameRange [ '0.1.0', -1827 silly addNameRange '0.1.1', -1827 silly addNameRange '0.1.2', -1827 silly addNameRange '0.1.3', -1827 silly addNameRange '0.1.4', -1827 silly addNameRange '0.1.5', -1827 silly addNameRange '0.2.0', -1827 silly addNameRange '1.0.0' ] ] -1828 silly addNamed assert-plus@1.0.0 -1829 verbose addNamed "1.0.0" is a plain semver version for assert-plus -1830 silly cache afterAdd assert-plus@1.0.0 -1831 verbose afterAdd /home/christine/.npm/assert-plus/1.0.0/package/package.json not in flight; writing -1832 verbose afterAdd /home/christine/.npm/assert-plus/1.0.0/package/package.json written -1833 http 200 https://registry.npmjs.org/jsprim -1834 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1834 verbose headers 'content-type': 'application/json', -1834 verbose headers 'transfer-encoding': 'chunked', -1834 verbose headers connection: 'keep-alive', -1834 verbose headers 'set-cookie': -1834 verbose headers [ '__cfduid=d570054c58525c9612ff8b11e8fa974871590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1834 verbose headers 'cf-ray': '59764fa9bc0d176a-FRA', -1834 verbose headers age: '5654', -1834 verbose headers 'cache-control': 'public, max-age=300', -1834 verbose headers etag: 'W/"64e1b4713c2eacf5f810b5a6ad366cd9"', -1834 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:51 GMT', -1834 verbose headers vary: 'accept-encoding, accept', -1834 verbose headers 'cf-cache-status': 'HIT', -1834 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1834 verbose headers server: 'cloudflare', -1834 verbose headers 'content-encoding': 'gzip', -1834 verbose headers 'cf-request-id': '02ddd01e100000176a65ba5200000001' } -1835 silly get cb [ 200, -1835 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1835 silly get 'content-type': 'application/json', -1835 silly get 'transfer-encoding': 'chunked', -1835 silly get connection: 'keep-alive', -1835 silly get 'set-cookie': -1835 silly get [ '__cfduid=d570054c58525c9612ff8b11e8fa974871590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1835 silly get 'cf-ray': '59764fa9bc0d176a-FRA', -1835 silly get age: '5654', -1835 silly get 'cache-control': 'public, max-age=300', -1835 silly get etag: 'W/"64e1b4713c2eacf5f810b5a6ad366cd9"', -1835 silly get 'last-modified': 'Wed, 06 May 2020 14:47:51 GMT', -1835 silly get vary: 'accept-encoding, accept', -1835 silly get 'cf-cache-status': 'HIT', -1835 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1835 silly get server: 'cloudflare', -1835 silly get 'content-encoding': 'gzip', -1835 silly get 'cf-request-id': '02ddd01e100000176a65ba5200000001' } ] -1836 verbose get saving jsprim to /home/christine/.npm/registry.npmjs.org/jsprim/.cache.json -1837 silly resolveWithNewModule jsprim@1.4.1 checking installable status -1838 silly cache add args [ 'jsprim@^1.2.2', null ] -1839 verbose cache add spec jsprim@^1.2.2 -1840 silly cache add parsed spec Result { -1840 silly cache add raw: 'jsprim@^1.2.2', -1840 silly cache add scope: null, -1840 silly cache add name: 'jsprim', -1840 silly cache add rawSpec: '^1.2.2', -1840 silly cache add spec: '>=1.2.2 <2.0.0', -1840 silly cache add type: 'range' } -1841 silly addNamed jsprim@>=1.2.2 <2.0.0 -1842 verbose addNamed ">=1.2.2 <2.0.0" is a valid semver range for jsprim -1843 silly addNameRange { name: 'jsprim', range: '>=1.2.2 <2.0.0', hasData: false } -1844 silly mapToRegistry name jsprim -1845 silly mapToRegistry using default registry -1846 silly mapToRegistry registry https://registry.npmjs.org/ -1847 silly mapToRegistry uri https://registry.npmjs.org/jsprim -1848 verbose addNameRange registry:https://registry.npmjs.org/jsprim not in flight; fetching -1849 verbose get https://registry.npmjs.org/jsprim not expired, no request -1850 silly addNameRange number 2 { name: 'jsprim', range: '>=1.2.2 <2.0.0', hasData: true } -1851 silly addNameRange versions [ 'jsprim', -1851 silly addNameRange [ '0.0.1', -1851 silly addNameRange '0.0.2', -1851 silly addNameRange '0.0.3', -1851 silly addNameRange '0.0.4', -1851 silly addNameRange '0.0.5', -1851 silly addNameRange '0.1.0', -1851 silly addNameRange '0.2.0', -1851 silly addNameRange '0.3.0', -1851 silly addNameRange '0.3.1', -1851 silly addNameRange '0.4.0', -1851 silly addNameRange '0.5.0', -1851 silly addNameRange '0.5.1', -1851 silly addNameRange '0.6.0', -1851 silly addNameRange '0.6.1', -1851 silly addNameRange '0.7.0', -1851 silly addNameRange '0.8.0', -1851 silly addNameRange '1.0.0', -1851 silly addNameRange '1.1.0', -1851 silly addNameRange '1.2.0', -1851 silly addNameRange '1.2.1', -1851 silly addNameRange '1.2.2', -1851 silly addNameRange '1.3.0', -1851 silly addNameRange '1.3.1', -1851 silly addNameRange '1.4.0', -1851 silly addNameRange '1.4.1', -1851 silly addNameRange '2.0.0' ] ] -1852 silly addNamed jsprim@1.4.1 -1853 verbose addNamed "1.4.1" is a plain semver version for jsprim -1854 http 200 https://registry.npmjs.org/sshpk -1855 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1855 verbose headers 'content-type': 'application/json', -1855 verbose headers 'transfer-encoding': 'chunked', -1855 verbose headers connection: 'keep-alive', -1855 verbose headers 'set-cookie': -1855 verbose headers [ '__cfduid=def5a536cfc1c142382a82585aa4561c11590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1855 verbose headers 'cf-ray': '59764fa9bc65dfbb-FRA', -1855 verbose headers age: '5654', -1855 verbose headers 'cache-control': 'public, max-age=300', -1855 verbose headers etag: 'W/"4bb612bfd8ff73b94a8861a146b38953"', -1855 verbose headers 'last-modified': 'Wed, 06 May 2020 14:48:13 GMT', -1855 verbose headers vary: 'accept-encoding, accept', -1855 verbose headers 'cf-cache-status': 'HIT', -1855 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1855 verbose headers server: 'cloudflare', -1855 verbose headers 'content-encoding': 'gzip', -1855 verbose headers 'cf-request-id': '02ddd01e100000dfbb5fae5200000001' } -1856 silly get cb [ 200, -1856 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1856 silly get 'content-type': 'application/json', -1856 silly get 'transfer-encoding': 'chunked', -1856 silly get connection: 'keep-alive', -1856 silly get 'set-cookie': -1856 silly get [ '__cfduid=def5a536cfc1c142382a82585aa4561c11590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1856 silly get 'cf-ray': '59764fa9bc65dfbb-FRA', -1856 silly get age: '5654', -1856 silly get 'cache-control': 'public, max-age=300', -1856 silly get etag: 'W/"4bb612bfd8ff73b94a8861a146b38953"', -1856 silly get 'last-modified': 'Wed, 06 May 2020 14:48:13 GMT', -1856 silly get vary: 'accept-encoding, accept', -1856 silly get 'cf-cache-status': 'HIT', -1856 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1856 silly get server: 'cloudflare', -1856 silly get 'content-encoding': 'gzip', -1856 silly get 'cf-request-id': '02ddd01e100000dfbb5fae5200000001' } ] -1857 verbose get saving sshpk to /home/christine/.npm/registry.npmjs.org/sshpk/.cache.json -1858 silly cache afterAdd jsprim@1.4.1 -1859 verbose afterAdd /home/christine/.npm/jsprim/1.4.1/package/package.json not in flight; writing -1860 silly resolveWithNewModule sshpk@1.16.1 checking installable status -1861 silly cache add args [ 'sshpk@^1.7.0', null ] -1862 verbose cache add spec sshpk@^1.7.0 -1863 silly cache add parsed spec Result { -1863 silly cache add raw: 'sshpk@^1.7.0', -1863 silly cache add scope: null, -1863 silly cache add name: 'sshpk', -1863 silly cache add rawSpec: '^1.7.0', -1863 silly cache add spec: '>=1.7.0 <2.0.0', -1863 silly cache add type: 'range' } -1864 silly addNamed sshpk@>=1.7.0 <2.0.0 -1865 verbose addNamed ">=1.7.0 <2.0.0" is a valid semver range for sshpk -1866 silly addNameRange { name: 'sshpk', range: '>=1.7.0 <2.0.0', hasData: false } -1867 silly mapToRegistry name sshpk -1868 silly mapToRegistry using default registry -1869 silly mapToRegistry registry https://registry.npmjs.org/ -1870 silly mapToRegistry uri https://registry.npmjs.org/sshpk -1871 verbose addNameRange registry:https://registry.npmjs.org/sshpk not in flight; fetching -1872 verbose afterAdd /home/christine/.npm/jsprim/1.4.1/package/package.json written -1873 verbose get https://registry.npmjs.org/sshpk not expired, no request -1874 silly addNameRange number 2 { name: 'sshpk', range: '>=1.7.0 <2.0.0', hasData: true } -1875 silly addNameRange versions [ 'sshpk', -1875 silly addNameRange [ '1.0.0', -1875 silly addNameRange '1.0.1', -1875 silly addNameRange '1.0.2', -1875 silly addNameRange '1.0.3', -1875 silly addNameRange '1.0.4', -1875 silly addNameRange '1.1.0', -1875 silly addNameRange '1.2.0', -1875 silly addNameRange '1.2.1', -1875 silly addNameRange '1.3.0', -1875 silly addNameRange '1.4.0', -1875 silly addNameRange '1.4.1', -1875 silly addNameRange '1.4.2', -1875 silly addNameRange '1.4.3', -1875 silly addNameRange '1.4.4', -1875 silly addNameRange '1.4.5', -1875 silly addNameRange '1.4.6', -1875 silly addNameRange '1.4.7', -1875 silly addNameRange '1.5.0', -1875 silly addNameRange '1.5.1', -1875 silly addNameRange '1.6.0', -1875 silly addNameRange '1.6.1', -1875 silly addNameRange '1.6.2', -1875 silly addNameRange '1.7.0', -1875 silly addNameRange '1.7.1', -1875 silly addNameRange '1.7.2', -1875 silly addNameRange '1.7.3', -1875 silly addNameRange '1.7.4', -1875 silly addNameRange '1.8.0', -1875 silly addNameRange '1.8.1', -1875 silly addNameRange '1.8.2', -1875 silly addNameRange '1.8.3', -1875 silly addNameRange '1.9.0', -1875 silly addNameRange '1.9.1', -1875 silly addNameRange '1.9.2', -1875 silly addNameRange '1.10.0', -1875 silly addNameRange '1.10.1', -1875 silly addNameRange '1.10.2', -1875 silly addNameRange '1.11.0', -1875 silly addNameRange '1.13.0', -1875 silly addNameRange '1.13.1', -1875 silly addNameRange '1.13.2', -1875 silly addNameRange '1.14.1', -1875 silly addNameRange '1.14.2', -1875 silly addNameRange '1.15.0', -1875 silly addNameRange '1.15.1', -1875 silly addNameRange '1.15.2', -1875 silly addNameRange '1.16.0', -1875 silly addNameRange '1.16.1' ] ] -1876 silly addNamed sshpk@1.16.1 -1877 verbose addNamed "1.16.1" is a plain semver version for sshpk -1878 silly cache afterAdd sshpk@1.16.1 -1879 verbose afterAdd /home/christine/.npm/sshpk/1.16.1/package/package.json not in flight; writing -1880 verbose afterAdd /home/christine/.npm/sshpk/1.16.1/package/package.json written -1881 silly fetchNamedPackageData extsprintf -1882 silly mapToRegistry name extsprintf -1883 silly mapToRegistry using default registry -1884 silly mapToRegistry registry https://registry.npmjs.org/ -1885 silly mapToRegistry uri https://registry.npmjs.org/extsprintf -1886 silly fetchNamedPackageData json-schema -1887 silly mapToRegistry name json-schema -1888 silly mapToRegistry using default registry -1889 silly mapToRegistry registry https://registry.npmjs.org/ -1890 silly mapToRegistry uri https://registry.npmjs.org/json-schema -1891 silly fetchNamedPackageData verror -1892 silly mapToRegistry name verror -1893 silly mapToRegistry using default registry -1894 silly mapToRegistry registry https://registry.npmjs.org/ -1895 silly mapToRegistry uri https://registry.npmjs.org/verror -1896 verbose request uri https://registry.npmjs.org/json-schema -1897 verbose request no auth needed -1898 info attempt registry request try #1 at 13:48:58 -1899 verbose etag W/"5274dd0ff41b090868548552fd39da3b" -1900 verbose lastModified Fri, 06 Sep 2019 03:31:48 GMT -1901 http request GET https://registry.npmjs.org/json-schema -1902 verbose request uri https://registry.npmjs.org/extsprintf -1903 verbose request no auth needed -1904 info attempt registry request try #1 at 13:48:58 -1905 verbose etag W/"181f798a7717cf280fb342d9306fa973" -1906 verbose lastModified Fri, 13 Dec 2019 16:32:18 GMT -1907 http request GET https://registry.npmjs.org/extsprintf -1908 verbose request uri https://registry.npmjs.org/verror -1909 verbose request no auth needed -1910 info attempt registry request try #1 at 13:48:58 -1911 verbose etag W/"cee3cbe58715caedf23b4d5aa0f1317b" -1912 verbose lastModified Fri, 13 Dec 2019 16:33:19 GMT -1913 http request GET https://registry.npmjs.org/verror -1914 http 200 https://registry.npmjs.org/extsprintf -1915 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1915 verbose headers 'content-type': 'application/json', -1915 verbose headers 'transfer-encoding': 'chunked', -1915 verbose headers connection: 'keep-alive', -1915 verbose headers 'set-cookie': -1915 verbose headers [ '__cfduid=d97096327dc35362784756beebc4958ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1915 verbose headers 'cf-ray': '59764faa2855c2ae-FRA', -1915 verbose headers age: '5351', -1915 verbose headers 'cache-control': 'public, max-age=300', -1915 verbose headers etag: 'W/"c1458bfec410835c4eaea2e0b344814b"', -1915 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:29 GMT', -1915 verbose headers vary: 'accept-encoding, accept', -1915 verbose headers 'cf-cache-status': 'HIT', -1915 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1915 verbose headers server: 'cloudflare', -1915 verbose headers 'content-encoding': 'gzip', -1915 verbose headers 'cf-request-id': '02ddd01e550000c2aea018c200000001' } -1916 silly get cb [ 200, -1916 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1916 silly get 'content-type': 'application/json', -1916 silly get 'transfer-encoding': 'chunked', -1916 silly get connection: 'keep-alive', -1916 silly get 'set-cookie': -1916 silly get [ '__cfduid=d97096327dc35362784756beebc4958ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1916 silly get 'cf-ray': '59764faa2855c2ae-FRA', -1916 silly get age: '5351', -1916 silly get 'cache-control': 'public, max-age=300', -1916 silly get etag: 'W/"c1458bfec410835c4eaea2e0b344814b"', -1916 silly get 'last-modified': 'Wed, 06 May 2020 14:47:29 GMT', -1916 silly get vary: 'accept-encoding, accept', -1916 silly get 'cf-cache-status': 'HIT', -1916 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1916 silly get server: 'cloudflare', -1916 silly get 'content-encoding': 'gzip', -1916 silly get 'cf-request-id': '02ddd01e550000c2aea018c200000001' } ] -1917 verbose get saving extsprintf to /home/christine/.npm/registry.npmjs.org/extsprintf/.cache.json -1918 silly resolveWithNewModule extsprintf@1.3.0 checking installable status -1919 silly cache add args [ 'extsprintf@1.3.0', null ] -1920 verbose cache add spec extsprintf@1.3.0 -1921 silly cache add parsed spec Result { -1921 silly cache add raw: 'extsprintf@1.3.0', -1921 silly cache add scope: null, -1921 silly cache add name: 'extsprintf', -1921 silly cache add rawSpec: '1.3.0', -1921 silly cache add spec: '1.3.0', -1921 silly cache add type: 'version' } -1922 silly addNamed extsprintf@1.3.0 -1923 verbose addNamed "1.3.0" is a plain semver version for extsprintf -1924 silly mapToRegistry name extsprintf -1925 silly mapToRegistry using default registry -1926 silly mapToRegistry registry https://registry.npmjs.org/ -1927 silly mapToRegistry uri https://registry.npmjs.org/extsprintf -1928 verbose addNameVersion registry:https://registry.npmjs.org/extsprintf not in flight; fetching -1929 verbose get https://registry.npmjs.org/extsprintf not expired, no request -1930 silly cache afterAdd extsprintf@1.3.0 -1931 verbose afterAdd /home/christine/.npm/extsprintf/1.3.0/package/package.json not in flight; writing -1932 verbose afterAdd /home/christine/.npm/extsprintf/1.3.0/package/package.json written -1933 http 200 https://registry.npmjs.org/verror -1934 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1934 verbose headers 'content-type': 'application/json', -1934 verbose headers 'transfer-encoding': 'chunked', -1934 verbose headers connection: 'keep-alive', -1934 verbose headers 'set-cookie': -1934 verbose headers [ '__cfduid=dddfaf86196e34967260afba6c78f92301590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1934 verbose headers 'cf-ray': '59764faa2b02d6e9-FRA', -1934 verbose headers age: '5351', -1934 verbose headers 'cache-control': 'public, max-age=300', -1934 verbose headers etag: 'W/"2464db9fac3b8d5a76540c0581baa37d"', -1934 verbose headers 'last-modified': 'Wed, 06 May 2020 14:48:30 GMT', -1934 verbose headers vary: 'accept-encoding, accept', -1934 verbose headers 'cf-cache-status': 'HIT', -1934 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1934 verbose headers server: 'cloudflare', -1934 verbose headers 'content-encoding': 'gzip', -1934 verbose headers 'cf-request-id': '02ddd01e550000d6e975b63200000001' } -1935 silly get cb [ 200, -1935 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1935 silly get 'content-type': 'application/json', -1935 silly get 'transfer-encoding': 'chunked', -1935 silly get connection: 'keep-alive', -1935 silly get 'set-cookie': -1935 silly get [ '__cfduid=dddfaf86196e34967260afba6c78f92301590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1935 silly get 'cf-ray': '59764faa2b02d6e9-FRA', -1935 silly get age: '5351', -1935 silly get 'cache-control': 'public, max-age=300', -1935 silly get etag: 'W/"2464db9fac3b8d5a76540c0581baa37d"', -1935 silly get 'last-modified': 'Wed, 06 May 2020 14:48:30 GMT', -1935 silly get vary: 'accept-encoding, accept', -1935 silly get 'cf-cache-status': 'HIT', -1935 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1935 silly get server: 'cloudflare', -1935 silly get 'content-encoding': 'gzip', -1935 silly get 'cf-request-id': '02ddd01e550000d6e975b63200000001' } ] -1936 verbose get saving verror to /home/christine/.npm/registry.npmjs.org/verror/.cache.json -1937 silly resolveWithNewModule verror@1.10.0 checking installable status -1938 silly cache add args [ 'verror@1.10.0', null ] -1939 verbose cache add spec verror@1.10.0 -1940 silly cache add parsed spec Result { -1940 silly cache add raw: 'verror@1.10.0', -1940 silly cache add scope: null, -1940 silly cache add name: 'verror', -1940 silly cache add rawSpec: '1.10.0', -1940 silly cache add spec: '1.10.0', -1940 silly cache add type: 'version' } -1941 silly addNamed verror@1.10.0 -1942 verbose addNamed "1.10.0" is a plain semver version for verror -1943 silly mapToRegistry name verror -1944 silly mapToRegistry using default registry -1945 silly mapToRegistry registry https://registry.npmjs.org/ -1946 silly mapToRegistry uri https://registry.npmjs.org/verror -1947 verbose addNameVersion registry:https://registry.npmjs.org/verror not in flight; fetching -1948 verbose get https://registry.npmjs.org/verror not expired, no request -1949 http 304 https://registry.npmjs.org/json-schema -1950 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1950 verbose headers connection: 'keep-alive', -1950 verbose headers 'set-cookie': -1950 verbose headers [ '__cfduid=dcd1e19ee0a127106f70d3cbc3e6456db1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1950 verbose headers 'cf-ray': '59764faa2c451f2d-FRA', -1950 verbose headers age: '5351', -1950 verbose headers 'cache-control': 'public, max-age=300', -1950 verbose headers etag: '"5274dd0ff41b090868548552fd39da3b"', -1950 verbose headers 'last-modified': 'Fri, 06 Sep 2019 03:31:48 GMT', -1950 verbose headers vary: 'Accept-Encoding', -1950 verbose headers 'cf-cache-status': 'HIT', -1950 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1950 verbose headers server: 'cloudflare', -1950 verbose headers 'cf-request-id': '02ddd01e5500001f2df5221200000001' } -1951 silly get cb [ 304, -1951 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1951 silly get connection: 'keep-alive', -1951 silly get 'set-cookie': -1951 silly get [ '__cfduid=dcd1e19ee0a127106f70d3cbc3e6456db1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1951 silly get 'cf-ray': '59764faa2c451f2d-FRA', -1951 silly get age: '5351', -1951 silly get 'cache-control': 'public, max-age=300', -1951 silly get etag: '"5274dd0ff41b090868548552fd39da3b"', -1951 silly get 'last-modified': 'Fri, 06 Sep 2019 03:31:48 GMT', -1951 silly get vary: 'Accept-Encoding', -1951 silly get 'cf-cache-status': 'HIT', -1951 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1951 silly get server: 'cloudflare', -1951 silly get 'cf-request-id': '02ddd01e5500001f2df5221200000001' } ] -1952 verbose etag https://registry.npmjs.org/json-schema from cache -1953 verbose get saving json-schema to /home/christine/.npm/registry.npmjs.org/json-schema/.cache.json -1954 silly cache afterAdd verror@1.10.0 -1955 verbose afterAdd /home/christine/.npm/verror/1.10.0/package/package.json not in flight; writing -1956 silly resolveWithNewModule json-schema@0.2.3 checking installable status -1957 silly cache add args [ 'json-schema@0.2.3', null ] -1958 verbose cache add spec json-schema@0.2.3 -1959 silly cache add parsed spec Result { -1959 silly cache add raw: 'json-schema@0.2.3', -1959 silly cache add scope: null, -1959 silly cache add name: 'json-schema', -1959 silly cache add rawSpec: '0.2.3', -1959 silly cache add spec: '0.2.3', -1959 silly cache add type: 'version' } -1960 silly addNamed json-schema@0.2.3 -1961 verbose addNamed "0.2.3" is a plain semver version for json-schema -1962 silly mapToRegistry name json-schema -1963 silly mapToRegistry using default registry -1964 silly mapToRegistry registry https://registry.npmjs.org/ -1965 silly mapToRegistry uri https://registry.npmjs.org/json-schema -1966 verbose addNameVersion registry:https://registry.npmjs.org/json-schema not in flight; fetching -1967 verbose afterAdd /home/christine/.npm/verror/1.10.0/package/package.json written -1968 verbose get https://registry.npmjs.org/json-schema not expired, no request -1969 silly cache afterAdd json-schema@0.2.3 -1970 verbose afterAdd /home/christine/.npm/json-schema/0.2.3/package/package.json not in flight; writing -1971 verbose afterAdd /home/christine/.npm/json-schema/0.2.3/package/package.json written -1972 silly fetchNamedPackageData core-util-is -1973 silly mapToRegistry name core-util-is -1974 silly mapToRegistry using default registry -1975 silly mapToRegistry registry https://registry.npmjs.org/ -1976 silly mapToRegistry uri https://registry.npmjs.org/core-util-is -1977 verbose request uri https://registry.npmjs.org/core-util-is -1978 verbose request no auth needed -1979 info attempt registry request try #1 at 13:48:58 -1980 verbose etag W/"8076d16a76bac5764f6fda9911b2b501" -1981 verbose lastModified Sat, 26 May 2018 21:08:01 GMT -1982 http request GET https://registry.npmjs.org/core-util-is -1983 http 304 https://registry.npmjs.org/core-util-is -1984 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -1984 verbose headers connection: 'keep-alive', -1984 verbose headers 'set-cookie': -1984 verbose headers [ '__cfduid=dd8c554223c8c1f8d1054bd78bd816a791590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1984 verbose headers 'cf-ray': '59764faa6c9405fd-FRA', -1984 verbose headers age: '5358', -1984 verbose headers 'cache-control': 'public, max-age=300', -1984 verbose headers etag: '"8076d16a76bac5764f6fda9911b2b501"', -1984 verbose headers 'last-modified': 'Sat, 26 May 2018 21:08:01 GMT', -1984 verbose headers vary: 'Accept-Encoding', -1984 verbose headers 'cf-cache-status': 'HIT', -1984 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1984 verbose headers server: 'cloudflare', -1984 verbose headers 'cf-request-id': '02ddd01e80000005fd8daad200000001' } -1985 silly get cb [ 304, -1985 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -1985 silly get connection: 'keep-alive', -1985 silly get 'set-cookie': -1985 silly get [ '__cfduid=dd8c554223c8c1f8d1054bd78bd816a791590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -1985 silly get 'cf-ray': '59764faa6c9405fd-FRA', -1985 silly get age: '5358', -1985 silly get 'cache-control': 'public, max-age=300', -1985 silly get etag: '"8076d16a76bac5764f6fda9911b2b501"', -1985 silly get 'last-modified': 'Sat, 26 May 2018 21:08:01 GMT', -1985 silly get vary: 'Accept-Encoding', -1985 silly get 'cf-cache-status': 'HIT', -1985 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -1985 silly get server: 'cloudflare', -1985 silly get 'cf-request-id': '02ddd01e80000005fd8daad200000001' } ] -1986 verbose etag https://registry.npmjs.org/core-util-is from cache -1987 verbose get saving core-util-is to /home/christine/.npm/registry.npmjs.org/core-util-is/.cache.json -1988 silly resolveWithNewModule core-util-is@1.0.2 checking installable status -1989 silly cache add args [ 'core-util-is@1.0.2', null ] -1990 verbose cache add spec core-util-is@1.0.2 -1991 silly cache add parsed spec Result { -1991 silly cache add raw: 'core-util-is@1.0.2', -1991 silly cache add scope: null, -1991 silly cache add name: 'core-util-is', -1991 silly cache add rawSpec: '1.0.2', -1991 silly cache add spec: '1.0.2', -1991 silly cache add type: 'version' } -1992 silly addNamed core-util-is@1.0.2 -1993 verbose addNamed "1.0.2" is a plain semver version for core-util-is -1994 silly mapToRegistry name core-util-is -1995 silly mapToRegistry using default registry -1996 silly mapToRegistry registry https://registry.npmjs.org/ -1997 silly mapToRegistry uri https://registry.npmjs.org/core-util-is -1998 verbose addNameVersion registry:https://registry.npmjs.org/core-util-is not in flight; fetching -1999 verbose get https://registry.npmjs.org/core-util-is not expired, no request -2000 silly cache afterAdd core-util-is@1.0.2 -2001 verbose afterAdd /home/christine/.npm/core-util-is/1.0.2/package/package.json not in flight; writing -2002 verbose afterAdd /home/christine/.npm/core-util-is/1.0.2/package/package.json written -2003 silly fetchNamedPackageData asn1 -2004 silly mapToRegistry name asn1 -2005 silly mapToRegistry using default registry -2006 silly mapToRegistry registry https://registry.npmjs.org/ -2007 silly mapToRegistry uri https://registry.npmjs.org/asn1 -2008 silly fetchNamedPackageData dashdash -2009 silly mapToRegistry name dashdash -2010 silly mapToRegistry using default registry -2011 silly mapToRegistry registry https://registry.npmjs.org/ -2012 silly mapToRegistry uri https://registry.npmjs.org/dashdash -2013 silly fetchNamedPackageData getpass -2014 silly mapToRegistry name getpass -2015 silly mapToRegistry using default registry -2016 silly mapToRegistry registry https://registry.npmjs.org/ -2017 silly mapToRegistry uri https://registry.npmjs.org/getpass -2018 silly fetchNamedPackageData safer-buffer -2019 silly mapToRegistry name safer-buffer -2020 silly mapToRegistry using default registry -2021 silly mapToRegistry registry https://registry.npmjs.org/ -2022 silly mapToRegistry uri https://registry.npmjs.org/safer-buffer -2023 silly fetchNamedPackageData jsbn -2024 silly mapToRegistry name jsbn -2025 silly mapToRegistry using default registry -2026 silly mapToRegistry registry https://registry.npmjs.org/ -2027 silly mapToRegistry uri https://registry.npmjs.org/jsbn -2028 silly fetchNamedPackageData tweetnacl -2029 silly mapToRegistry name tweetnacl -2030 silly mapToRegistry using default registry -2031 silly mapToRegistry registry https://registry.npmjs.org/ -2032 silly mapToRegistry uri https://registry.npmjs.org/tweetnacl -2033 silly fetchNamedPackageData ecc-jsbn -2034 silly mapToRegistry name ecc-jsbn -2035 silly mapToRegistry using default registry -2036 silly mapToRegistry registry https://registry.npmjs.org/ -2037 silly mapToRegistry uri https://registry.npmjs.org/ecc-jsbn -2038 silly fetchNamedPackageData bcrypt-pbkdf -2039 silly mapToRegistry name bcrypt-pbkdf -2040 silly mapToRegistry using default registry -2041 silly mapToRegistry registry https://registry.npmjs.org/ -2042 silly mapToRegistry uri https://registry.npmjs.org/bcrypt-pbkdf -2043 verbose request uri https://registry.npmjs.org/asn1 -2044 verbose request no auth needed -2045 info attempt registry request try #1 at 13:48:58 -2046 verbose etag W/"de813efa4f95d8b4547fcf05d55dc504" -2047 verbose lastModified Fri, 13 Dec 2019 16:32:09 GMT -2048 http request GET https://registry.npmjs.org/asn1 -2049 verbose request uri https://registry.npmjs.org/jsbn -2050 verbose request no auth needed -2051 info attempt registry request try #1 at 13:48:58 -2052 verbose etag W/"0611ae2a6c0b557511e766ff564197a0" -2053 verbose lastModified Sun, 27 May 2018 05:34:52 GMT -2054 http request GET https://registry.npmjs.org/jsbn -2055 verbose request uri https://registry.npmjs.org/getpass -2056 verbose request no auth needed -2057 info attempt registry request try #1 at 13:48:58 -2058 verbose etag W/"cbefe53bd31f73e662e9120b48930d2f" -2059 verbose lastModified Fri, 13 Dec 2019 16:32:27 GMT -2060 http request GET https://registry.npmjs.org/getpass -2061 verbose request uri https://registry.npmjs.org/safer-buffer -2062 verbose request no auth needed -2063 info attempt registry request try #1 at 13:48:58 -2064 verbose etag W/"af6bd5bd8c6f8fc6f2baa03c0e1637e9" -2065 verbose lastModified Sun, 27 May 2018 16:29:44 GMT -2066 http request GET https://registry.npmjs.org/safer-buffer -2067 verbose request uri https://registry.npmjs.org/ecc-jsbn -2068 verbose request no auth needed -2069 info attempt registry request try #1 at 13:48:58 -2070 verbose etag W/"972b128f4c15e931ec8836237cce37e0" -2071 verbose lastModified Sun, 29 Jul 2018 17:44:41 GMT -2072 http request GET https://registry.npmjs.org/ecc-jsbn -2073 verbose request uri https://registry.npmjs.org/dashdash -2074 verbose request no auth needed -2075 info attempt registry request try #1 at 13:48:58 -2076 verbose etag W/"4ed0f11669a0fcb66513077f2f321ea9" -2077 verbose lastModified Sat, 26 May 2018 21:43:37 GMT -2078 http request GET https://registry.npmjs.org/dashdash -2079 verbose request uri https://registry.npmjs.org/tweetnacl -2080 verbose request no auth needed -2081 info attempt registry request try #1 at 13:48:58 -2082 verbose etag W/"fbf94e62e5226cbf0f67805b6d51d6fe" -2083 verbose lastModified Thu, 16 Jan 2020 19:29:00 GMT -2084 http request GET https://registry.npmjs.org/tweetnacl -2085 verbose request uri https://registry.npmjs.org/bcrypt-pbkdf -2086 verbose request no auth needed -2087 info attempt registry request try #1 at 13:48:58 -2088 verbose etag W/"46ae03958b9d75cded3b6f53d3277a12" -2089 verbose lastModified Fri, 13 Dec 2019 16:32:11 GMT -2090 http request GET https://registry.npmjs.org/bcrypt-pbkdf -2091 http 304 https://registry.npmjs.org/jsbn -2092 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2092 verbose headers connection: 'keep-alive', -2092 verbose headers 'set-cookie': -2092 verbose headers [ '__cfduid=d7325b855bbed19ce898226d1ffb9a3291590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2092 verbose headers 'cf-ray': '59764faad8fd325c-FRA', -2092 verbose headers age: '5657', -2092 verbose headers 'cache-control': 'public, max-age=300', -2092 verbose headers etag: '"0611ae2a6c0b557511e766ff564197a0"', -2092 verbose headers 'last-modified': 'Sun, 27 May 2018 05:34:52 GMT', -2092 verbose headers vary: 'Accept-Encoding', -2092 verbose headers 'cf-cache-status': 'HIT', -2092 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2092 verbose headers server: 'cloudflare', -2092 verbose headers 'cf-request-id': '02ddd01ec40000325c4c86d200000001' } -2093 silly get cb [ 304, -2093 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2093 silly get connection: 'keep-alive', -2093 silly get 'set-cookie': -2093 silly get [ '__cfduid=d7325b855bbed19ce898226d1ffb9a3291590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2093 silly get 'cf-ray': '59764faad8fd325c-FRA', -2093 silly get age: '5657', -2093 silly get 'cache-control': 'public, max-age=300', -2093 silly get etag: '"0611ae2a6c0b557511e766ff564197a0"', -2093 silly get 'last-modified': 'Sun, 27 May 2018 05:34:52 GMT', -2093 silly get vary: 'Accept-Encoding', -2093 silly get 'cf-cache-status': 'HIT', -2093 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2093 silly get server: 'cloudflare', -2093 silly get 'cf-request-id': '02ddd01ec40000325c4c86d200000001' } ] -2094 verbose etag https://registry.npmjs.org/jsbn from cache -2095 verbose get saving jsbn to /home/christine/.npm/registry.npmjs.org/jsbn/.cache.json -2096 silly resolveWithNewModule jsbn@0.1.1 checking installable status -2097 silly cache add args [ 'jsbn@~0.1.0', null ] -2098 verbose cache add spec jsbn@~0.1.0 -2099 silly cache add parsed spec Result { -2099 silly cache add raw: 'jsbn@~0.1.0', -2099 silly cache add scope: null, -2099 silly cache add name: 'jsbn', -2099 silly cache add rawSpec: '~0.1.0', -2099 silly cache add spec: '>=0.1.0 <0.2.0', -2099 silly cache add type: 'range' } -2100 silly addNamed jsbn@>=0.1.0 <0.2.0 -2101 verbose addNamed ">=0.1.0 <0.2.0" is a valid semver range for jsbn -2102 silly addNameRange { name: 'jsbn', range: '>=0.1.0 <0.2.0', hasData: false } -2103 silly mapToRegistry name jsbn -2104 silly mapToRegistry using default registry -2105 silly mapToRegistry registry https://registry.npmjs.org/ -2106 silly mapToRegistry uri https://registry.npmjs.org/jsbn -2107 verbose addNameRange registry:https://registry.npmjs.org/jsbn not in flight; fetching -2108 http 304 https://registry.npmjs.org/safer-buffer -2109 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2109 verbose headers connection: 'keep-alive', -2109 verbose headers 'set-cookie': -2109 verbose headers [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2109 verbose headers 'cf-ray': '59764faadb96648b-FRA', -2109 verbose headers age: '5660', -2109 verbose headers 'cache-control': 'public, max-age=300', -2109 verbose headers etag: '"af6bd5bd8c6f8fc6f2baa03c0e1637e9"', -2109 verbose headers 'last-modified': 'Sun, 27 May 2018 16:29:44 GMT', -2109 verbose headers vary: 'Accept-Encoding', -2109 verbose headers 'cf-cache-status': 'HIT', -2109 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2109 verbose headers server: 'cloudflare', -2109 verbose headers 'cf-request-id': '02ddd01ec80000648bda035200000001' } -2110 silly get cb [ 304, -2110 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2110 silly get connection: 'keep-alive', -2110 silly get 'set-cookie': -2110 silly get [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2110 silly get 'cf-ray': '59764faadb96648b-FRA', -2110 silly get age: '5660', -2110 silly get 'cache-control': 'public, max-age=300', -2110 silly get etag: '"af6bd5bd8c6f8fc6f2baa03c0e1637e9"', -2110 silly get 'last-modified': 'Sun, 27 May 2018 16:29:44 GMT', -2110 silly get vary: 'Accept-Encoding', -2110 silly get 'cf-cache-status': 'HIT', -2110 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2110 silly get server: 'cloudflare', -2110 silly get 'cf-request-id': '02ddd01ec80000648bda035200000001' } ] -2111 verbose etag https://registry.npmjs.org/safer-buffer from cache -2112 verbose get saving safer-buffer to /home/christine/.npm/registry.npmjs.org/safer-buffer/.cache.json -2113 http 200 https://registry.npmjs.org/getpass -2114 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2114 verbose headers 'content-type': 'application/json', -2114 verbose headers 'transfer-encoding': 'chunked', -2114 verbose headers connection: 'keep-alive', -2114 verbose headers 'set-cookie': -2114 verbose headers [ '__cfduid=dd010058b9e3e0b8be866b1c539f3a13d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2114 verbose headers 'cf-ray': '59764faadf226347-FRA', -2114 verbose headers age: '5656', -2114 verbose headers 'cache-control': 'public, max-age=300', -2114 verbose headers etag: 'W/"869ca13d164a27967315d623e8ce7ed7"', -2114 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:37 GMT', -2114 verbose headers vary: 'accept-encoding, accept', -2114 verbose headers 'cf-cache-status': 'HIT', -2114 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2114 verbose headers server: 'cloudflare', -2114 verbose headers 'content-encoding': 'gzip', -2114 verbose headers 'cf-request-id': '02ddd01ec800006347e88e6200000001' } -2115 silly get cb [ 200, -2115 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2115 silly get 'content-type': 'application/json', -2115 silly get 'transfer-encoding': 'chunked', -2115 silly get connection: 'keep-alive', -2115 silly get 'set-cookie': -2115 silly get [ '__cfduid=dd010058b9e3e0b8be866b1c539f3a13d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2115 silly get 'cf-ray': '59764faadf226347-FRA', -2115 silly get age: '5656', -2115 silly get 'cache-control': 'public, max-age=300', -2115 silly get etag: 'W/"869ca13d164a27967315d623e8ce7ed7"', -2115 silly get 'last-modified': 'Wed, 06 May 2020 14:47:37 GMT', -2115 silly get vary: 'accept-encoding, accept', -2115 silly get 'cf-cache-status': 'HIT', -2115 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2115 silly get server: 'cloudflare', -2115 silly get 'content-encoding': 'gzip', -2115 silly get 'cf-request-id': '02ddd01ec800006347e88e6200000001' } ] -2116 verbose get saving getpass to /home/christine/.npm/registry.npmjs.org/getpass/.cache.json -2117 http 200 https://registry.npmjs.org/bcrypt-pbkdf -2118 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2118 verbose headers 'content-type': 'application/json', -2118 verbose headers 'transfer-encoding': 'chunked', -2118 verbose headers connection: 'keep-alive', -2118 verbose headers 'set-cookie': -2118 verbose headers [ '__cfduid=d0e932d8ab348df1bf36d2b5c827b275c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2118 verbose headers 'cf-ray': '59764faaef896413-FRA', -2118 verbose headers age: '5653', -2118 verbose headers 'cache-control': 'public, max-age=300', -2118 verbose headers etag: 'W/"f08505ab6749543a27b96d63fd64d6c1"', -2118 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -2118 verbose headers vary: 'accept-encoding, accept', -2118 verbose headers 'cf-cache-status': 'HIT', -2118 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2118 verbose headers server: 'cloudflare', -2118 verbose headers 'content-encoding': 'gzip', -2118 verbose headers 'cf-request-id': '02ddd01ece000064135f93f200000001' } -2119 silly get cb [ 200, -2119 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2119 silly get 'content-type': 'application/json', -2119 silly get 'transfer-encoding': 'chunked', -2119 silly get connection: 'keep-alive', -2119 silly get 'set-cookie': -2119 silly get [ '__cfduid=d0e932d8ab348df1bf36d2b5c827b275c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2119 silly get 'cf-ray': '59764faaef896413-FRA', -2119 silly get age: '5653', -2119 silly get 'cache-control': 'public, max-age=300', -2119 silly get etag: 'W/"f08505ab6749543a27b96d63fd64d6c1"', -2119 silly get 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT', -2119 silly get vary: 'accept-encoding, accept', -2119 silly get 'cf-cache-status': 'HIT', -2119 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2119 silly get server: 'cloudflare', -2119 silly get 'content-encoding': 'gzip', -2119 silly get 'cf-request-id': '02ddd01ece000064135f93f200000001' } ] -2120 verbose get saving bcrypt-pbkdf to /home/christine/.npm/registry.npmjs.org/bcrypt-pbkdf/.cache.json -2121 http 200 https://registry.npmjs.org/asn1 -2122 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2122 verbose headers 'content-type': 'application/json', -2122 verbose headers 'transfer-encoding': 'chunked', -2122 verbose headers connection: 'keep-alive', -2122 verbose headers 'set-cookie': -2122 verbose headers [ '__cfduid=d2a12158e0b1816dc3511d38bce84223a1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2122 verbose headers 'cf-ray': '59764faadddcc272-FRA', -2122 verbose headers age: '5652', -2122 verbose headers 'cache-control': 'public, max-age=300', -2122 verbose headers etag: 'W/"53988a6250256bd0f9e9b253aaf39e0b"', -2122 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:19 GMT', -2122 verbose headers vary: 'accept-encoding, accept', -2122 verbose headers 'cf-cache-status': 'HIT', -2122 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2122 verbose headers server: 'cloudflare', -2122 verbose headers 'content-encoding': 'gzip', -2122 verbose headers 'cf-request-id': '02ddd01ec40000c272388f9200000001' } -2123 silly get cb [ 200, -2123 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2123 silly get 'content-type': 'application/json', -2123 silly get 'transfer-encoding': 'chunked', -2123 silly get connection: 'keep-alive', -2123 silly get 'set-cookie': -2123 silly get [ '__cfduid=d2a12158e0b1816dc3511d38bce84223a1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2123 silly get 'cf-ray': '59764faadddcc272-FRA', -2123 silly get age: '5652', -2123 silly get 'cache-control': 'public, max-age=300', -2123 silly get etag: 'W/"53988a6250256bd0f9e9b253aaf39e0b"', -2123 silly get 'last-modified': 'Wed, 06 May 2020 14:47:19 GMT', -2123 silly get vary: 'accept-encoding, accept', -2123 silly get 'cf-cache-status': 'HIT', -2123 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2123 silly get server: 'cloudflare', -2123 silly get 'content-encoding': 'gzip', -2123 silly get 'cf-request-id': '02ddd01ec40000c272388f9200000001' } ] -2124 verbose get saving asn1 to /home/christine/.npm/registry.npmjs.org/asn1/.cache.json -2125 verbose get https://registry.npmjs.org/jsbn not expired, no request -2126 silly addNameRange number 2 { name: 'jsbn', range: '>=0.1.0 <0.2.0', hasData: true } -2127 silly addNameRange versions [ 'jsbn', [ '0.0.0', '0.1.0', '0.1.1', '1.1.0' ] ] -2128 silly addNamed jsbn@0.1.1 -2129 verbose addNamed "0.1.1" is a plain semver version for jsbn -2130 http 304 https://registry.npmjs.org/dashdash -2131 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2131 verbose headers connection: 'keep-alive', -2131 verbose headers 'set-cookie': -2131 verbose headers [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2131 verbose headers 'cf-ray': '59764faaeb21175a-FRA', -2131 verbose headers age: '5350', -2131 verbose headers 'cache-control': 'public, max-age=300', -2131 verbose headers etag: '"4ed0f11669a0fcb66513077f2f321ea9"', -2131 verbose headers 'last-modified': 'Sat, 26 May 2018 21:43:37 GMT', -2131 verbose headers vary: 'Accept-Encoding', -2131 verbose headers 'cf-cache-status': 'HIT', -2131 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2131 verbose headers server: 'cloudflare', -2131 verbose headers 'cf-request-id': '02ddd01ece0000175a1e236200000001' } -2132 silly get cb [ 304, -2132 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2132 silly get connection: 'keep-alive', -2132 silly get 'set-cookie': -2132 silly get [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2132 silly get 'cf-ray': '59764faaeb21175a-FRA', -2132 silly get age: '5350', -2132 silly get 'cache-control': 'public, max-age=300', -2132 silly get etag: '"4ed0f11669a0fcb66513077f2f321ea9"', -2132 silly get 'last-modified': 'Sat, 26 May 2018 21:43:37 GMT', -2132 silly get vary: 'Accept-Encoding', -2132 silly get 'cf-cache-status': 'HIT', -2132 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2132 silly get server: 'cloudflare', -2132 silly get 'cf-request-id': '02ddd01ece0000175a1e236200000001' } ] -2133 verbose etag https://registry.npmjs.org/dashdash from cache -2134 verbose get saving dashdash to /home/christine/.npm/registry.npmjs.org/dashdash/.cache.json -2135 silly resolveWithNewModule safer-buffer@2.1.2 checking installable status -2136 silly cache add args [ 'safer-buffer@^2.0.2', null ] -2137 verbose cache add spec safer-buffer@^2.0.2 -2138 silly cache add parsed spec Result { -2138 silly cache add raw: 'safer-buffer@^2.0.2', -2138 silly cache add scope: null, -2138 silly cache add name: 'safer-buffer', -2138 silly cache add rawSpec: '^2.0.2', -2138 silly cache add spec: '>=2.0.2 <3.0.0', -2138 silly cache add type: 'range' } -2139 silly addNamed safer-buffer@>=2.0.2 <3.0.0 -2140 verbose addNamed ">=2.0.2 <3.0.0" is a valid semver range for safer-buffer -2141 silly addNameRange { name: 'safer-buffer', range: '>=2.0.2 <3.0.0', hasData: false } -2142 silly mapToRegistry name safer-buffer -2143 silly mapToRegistry using default registry -2144 silly mapToRegistry registry https://registry.npmjs.org/ -2145 silly mapToRegistry uri https://registry.npmjs.org/safer-buffer -2146 verbose addNameRange registry:https://registry.npmjs.org/safer-buffer not in flight; fetching -2147 silly resolveWithNewModule getpass@0.1.7 checking installable status -2148 silly cache add args [ 'getpass@^0.1.1', null ] -2149 verbose cache add spec getpass@^0.1.1 -2150 silly cache add parsed spec Result { -2150 silly cache add raw: 'getpass@^0.1.1', -2150 silly cache add scope: null, -2150 silly cache add name: 'getpass', -2150 silly cache add rawSpec: '^0.1.1', -2150 silly cache add spec: '>=0.1.1 <0.2.0', -2150 silly cache add type: 'range' } -2151 silly addNamed getpass@>=0.1.1 <0.2.0 -2152 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for getpass -2153 silly addNameRange { name: 'getpass', range: '>=0.1.1 <0.2.0', hasData: false } -2154 silly mapToRegistry name getpass -2155 silly mapToRegistry using default registry -2156 silly mapToRegistry registry https://registry.npmjs.org/ -2157 silly mapToRegistry uri https://registry.npmjs.org/getpass -2158 verbose addNameRange registry:https://registry.npmjs.org/getpass not in flight; fetching -2159 silly resolveWithNewModule bcrypt-pbkdf@1.0.2 checking installable status -2160 silly cache add args [ 'bcrypt-pbkdf@^1.0.0', null ] -2161 verbose cache add spec bcrypt-pbkdf@^1.0.0 -2162 silly cache add parsed spec Result { -2162 silly cache add raw: 'bcrypt-pbkdf@^1.0.0', -2162 silly cache add scope: null, -2162 silly cache add name: 'bcrypt-pbkdf', -2162 silly cache add rawSpec: '^1.0.0', -2162 silly cache add spec: '>=1.0.0 <2.0.0', -2162 silly cache add type: 'range' } -2163 silly addNamed bcrypt-pbkdf@>=1.0.0 <2.0.0 -2164 verbose addNamed ">=1.0.0 <2.0.0" is a valid semver range for bcrypt-pbkdf -2165 silly addNameRange { name: 'bcrypt-pbkdf', range: '>=1.0.0 <2.0.0', hasData: false } -2166 silly mapToRegistry name bcrypt-pbkdf -2167 silly mapToRegistry using default registry -2168 silly mapToRegistry registry https://registry.npmjs.org/ -2169 silly mapToRegistry uri https://registry.npmjs.org/bcrypt-pbkdf -2170 verbose addNameRange registry:https://registry.npmjs.org/bcrypt-pbkdf not in flight; fetching -2171 silly cache afterAdd jsbn@0.1.1 -2172 verbose afterAdd /home/christine/.npm/jsbn/0.1.1/package/package.json not in flight; writing -2173 silly resolveWithNewModule asn1@0.2.4 checking installable status -2174 silly cache add args [ 'asn1@~0.2.3', null ] -2175 verbose cache add spec asn1@~0.2.3 -2176 silly cache add parsed spec Result { -2176 silly cache add raw: 'asn1@~0.2.3', -2176 silly cache add scope: null, -2176 silly cache add name: 'asn1', -2176 silly cache add rawSpec: '~0.2.3', -2176 silly cache add spec: '>=0.2.3 <0.3.0', -2176 silly cache add type: 'range' } -2177 silly addNamed asn1@>=0.2.3 <0.3.0 -2178 verbose addNamed ">=0.2.3 <0.3.0" is a valid semver range for asn1 -2179 silly addNameRange { name: 'asn1', range: '>=0.2.3 <0.3.0', hasData: false } -2180 silly mapToRegistry name asn1 -2181 silly mapToRegistry using default registry -2182 silly mapToRegistry registry https://registry.npmjs.org/ -2183 silly mapToRegistry uri https://registry.npmjs.org/asn1 -2184 verbose addNameRange registry:https://registry.npmjs.org/asn1 not in flight; fetching -2185 silly resolveWithNewModule dashdash@1.14.1 checking installable status -2186 silly cache add args [ 'dashdash@^1.12.0', null ] -2187 verbose cache add spec dashdash@^1.12.0 -2188 silly cache add parsed spec Result { -2188 silly cache add raw: 'dashdash@^1.12.0', -2188 silly cache add scope: null, -2188 silly cache add name: 'dashdash', -2188 silly cache add rawSpec: '^1.12.0', -2188 silly cache add spec: '>=1.12.0 <2.0.0', -2188 silly cache add type: 'range' } -2189 silly addNamed dashdash@>=1.12.0 <2.0.0 -2190 verbose addNamed ">=1.12.0 <2.0.0" is a valid semver range for dashdash -2191 silly addNameRange { name: 'dashdash', range: '>=1.12.0 <2.0.0', hasData: false } -2192 silly mapToRegistry name dashdash -2193 silly mapToRegistry using default registry -2194 silly mapToRegistry registry https://registry.npmjs.org/ -2195 silly mapToRegistry uri https://registry.npmjs.org/dashdash -2196 verbose addNameRange registry:https://registry.npmjs.org/dashdash not in flight; fetching -2197 http 200 https://registry.npmjs.org/tweetnacl -2198 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2198 verbose headers 'content-type': 'application/json', -2198 verbose headers 'transfer-encoding': 'chunked', -2198 verbose headers connection: 'keep-alive', -2198 verbose headers 'set-cookie': -2198 verbose headers [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2198 verbose headers 'cf-ray': '59764faae943d715-FRA', -2198 verbose headers age: '5653', -2198 verbose headers 'cache-control': 'public, max-age=300', -2198 verbose headers etag: 'W/"1b4cf5c8f09886b489d11782a23a9cbf"', -2198 verbose headers 'last-modified': 'Sat, 09 May 2020 13:43:32 GMT', -2198 verbose headers vary: 'accept-encoding, accept', -2198 verbose headers 'cf-cache-status': 'HIT', -2198 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2198 verbose headers server: 'cloudflare', -2198 verbose headers 'content-encoding': 'gzip', -2198 verbose headers 'cf-request-id': '02ddd01ecf0000d715c122c200000001' } -2199 silly get cb [ 200, -2199 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2199 silly get 'content-type': 'application/json', -2199 silly get 'transfer-encoding': 'chunked', -2199 silly get connection: 'keep-alive', -2199 silly get 'set-cookie': -2199 silly get [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2199 silly get 'cf-ray': '59764faae943d715-FRA', -2199 silly get age: '5653', -2199 silly get 'cache-control': 'public, max-age=300', -2199 silly get etag: 'W/"1b4cf5c8f09886b489d11782a23a9cbf"', -2199 silly get 'last-modified': 'Sat, 09 May 2020 13:43:32 GMT', -2199 silly get vary: 'accept-encoding, accept', -2199 silly get 'cf-cache-status': 'HIT', -2199 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2199 silly get server: 'cloudflare', -2199 silly get 'content-encoding': 'gzip', -2199 silly get 'cf-request-id': '02ddd01ecf0000d715c122c200000001' } ] -2200 verbose get saving tweetnacl to /home/christine/.npm/registry.npmjs.org/tweetnacl/.cache.json -2201 verbose get https://registry.npmjs.org/safer-buffer not expired, no request -2202 silly addNameRange number 2 { name: 'safer-buffer', range: '>=2.0.2 <3.0.0', hasData: true } -2203 silly addNameRange versions [ 'safer-buffer', -2203 silly addNameRange [ '2.0.0', '2.0.1', '2.0.2', '2.1.0', '2.1.1', '2.1.2' ] ] -2204 silly addNamed safer-buffer@2.1.2 -2205 verbose addNamed "2.1.2" is a plain semver version for safer-buffer -2206 verbose get https://registry.npmjs.org/getpass not expired, no request -2207 silly addNameRange number 2 { name: 'getpass', range: '>=0.1.1 <0.2.0', hasData: true } -2208 silly addNameRange versions [ 'getpass', -2208 silly addNameRange [ '0.1.0', -2208 silly addNameRange '0.1.1', -2208 silly addNameRange '0.1.2', -2208 silly addNameRange '0.1.3', -2208 silly addNameRange '0.1.4', -2208 silly addNameRange '0.1.5', -2208 silly addNameRange '0.1.6', -2208 silly addNameRange '0.1.7' ] ] -2209 silly addNamed getpass@0.1.7 -2210 verbose addNamed "0.1.7" is a plain semver version for getpass -2211 verbose get https://registry.npmjs.org/bcrypt-pbkdf not expired, no request -2212 silly addNameRange number 2 { name: 'bcrypt-pbkdf', range: '>=1.0.0 <2.0.0', hasData: true } -2213 silly addNameRange versions [ 'bcrypt-pbkdf', [ '1.0.0', '1.0.1', '1.0.2' ] ] -2214 silly addNamed bcrypt-pbkdf@1.0.2 -2215 verbose addNamed "1.0.2" is a plain semver version for bcrypt-pbkdf -2216 verbose get https://registry.npmjs.org/asn1 not expired, no request -2217 silly addNameRange number 2 { name: 'asn1', range: '>=0.2.3 <0.3.0', hasData: true } -2218 silly addNameRange versions [ 'asn1', -2218 silly addNameRange [ '0.1.0', -2218 silly addNameRange '0.1.1', -2218 silly addNameRange '0.1.2', -2218 silly addNameRange '0.1.3', -2218 silly addNameRange '0.1.4', -2218 silly addNameRange '0.1.5', -2218 silly addNameRange '0.1.6', -2218 silly addNameRange '0.1.7', -2218 silly addNameRange '0.1.8', -2218 silly addNameRange '0.1.9', -2218 silly addNameRange '0.1.10', -2218 silly addNameRange '0.1.11', -2218 silly addNameRange '0.2.0', -2218 silly addNameRange '0.2.1', -2218 silly addNameRange '0.2.2', -2218 silly addNameRange '0.2.3', -2218 silly addNameRange '0.2.4' ] ] -2219 silly addNamed asn1@0.2.4 -2220 verbose addNamed "0.2.4" is a plain semver version for asn1 -2221 verbose afterAdd /home/christine/.npm/jsbn/0.1.1/package/package.json written -2222 http 304 https://registry.npmjs.org/ecc-jsbn -2223 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2223 verbose headers connection: 'keep-alive', -2223 verbose headers 'set-cookie': -2223 verbose headers [ '__cfduid=d3be9a0b80d7155f3e9da29972b7410c41590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2223 verbose headers 'cf-ray': '59764faaec18dfc7-FRA', -2223 verbose headers age: '5653', -2223 verbose headers 'cache-control': 'public, max-age=300', -2223 verbose headers etag: '"972b128f4c15e931ec8836237cce37e0"', -2223 verbose headers 'last-modified': 'Sun, 29 Jul 2018 17:44:41 GMT', -2223 verbose headers vary: 'Accept-Encoding', -2223 verbose headers 'cf-cache-status': 'HIT', -2223 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2223 verbose headers server: 'cloudflare', -2223 verbose headers 'cf-request-id': '02ddd01ece0000dfc72a8d3200000001' } -2224 silly get cb [ 304, -2224 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2224 silly get connection: 'keep-alive', -2224 silly get 'set-cookie': -2224 silly get [ '__cfduid=d3be9a0b80d7155f3e9da29972b7410c41590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2224 silly get 'cf-ray': '59764faaec18dfc7-FRA', -2224 silly get age: '5653', -2224 silly get 'cache-control': 'public, max-age=300', -2224 silly get etag: '"972b128f4c15e931ec8836237cce37e0"', -2224 silly get 'last-modified': 'Sun, 29 Jul 2018 17:44:41 GMT', -2224 silly get vary: 'Accept-Encoding', -2224 silly get 'cf-cache-status': 'HIT', -2224 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2224 silly get server: 'cloudflare', -2224 silly get 'cf-request-id': '02ddd01ece0000dfc72a8d3200000001' } ] -2225 verbose etag https://registry.npmjs.org/ecc-jsbn from cache -2226 verbose get saving ecc-jsbn to /home/christine/.npm/registry.npmjs.org/ecc-jsbn/.cache.json -2227 verbose get https://registry.npmjs.org/dashdash not expired, no request -2228 silly addNameRange number 2 { name: 'dashdash', range: '>=1.12.0 <2.0.0', hasData: true } -2229 silly addNameRange versions [ 'dashdash', -2229 silly addNameRange [ '1.0.0', -2229 silly addNameRange '1.0.1', -2229 silly addNameRange '1.0.2', -2229 silly addNameRange '1.1.0', -2229 silly addNameRange '1.2.0', -2229 silly addNameRange '1.2.1', -2229 silly addNameRange '1.3.0', -2229 silly addNameRange '1.3.1', -2229 silly addNameRange '1.3.2', -2229 silly addNameRange '1.4.0', -2229 silly addNameRange '1.5.0', -2229 silly addNameRange '1.6.0', -2229 silly addNameRange '1.7.0', -2229 silly addNameRange '1.7.1', -2229 silly addNameRange '1.7.2', -2229 silly addNameRange '1.7.3', -2229 silly addNameRange '1.8.0', -2229 silly addNameRange '1.9.0', -2229 silly addNameRange '1.10.0', -2229 silly addNameRange '1.10.1', -2229 silly addNameRange '1.11.0', -2229 silly addNameRange '1.12.0', -2229 silly addNameRange '1.12.1', -2229 silly addNameRange '1.12.2', -2229 silly addNameRange '1.13.0', -2229 silly addNameRange '1.13.1', -2229 silly addNameRange '1.14.0', -2229 silly addNameRange '1.14.1' ] ] -2230 silly addNamed dashdash@1.14.1 -2231 verbose addNamed "1.14.1" is a plain semver version for dashdash -2232 silly cache afterAdd safer-buffer@2.1.2 -2233 verbose afterAdd /home/christine/.npm/safer-buffer/2.1.2/package/package.json not in flight; writing -2234 silly resolveWithNewModule tweetnacl@0.14.5 checking installable status -2235 silly cache add args [ 'tweetnacl@~0.14.0', null ] -2236 verbose cache add spec tweetnacl@~0.14.0 -2237 silly cache add parsed spec Result { -2237 silly cache add raw: 'tweetnacl@~0.14.0', -2237 silly cache add scope: null, -2237 silly cache add name: 'tweetnacl', -2237 silly cache add rawSpec: '~0.14.0', -2237 silly cache add spec: '>=0.14.0 <0.15.0', -2237 silly cache add type: 'range' } -2238 silly addNamed tweetnacl@>=0.14.0 <0.15.0 -2239 verbose addNamed ">=0.14.0 <0.15.0" is a valid semver range for tweetnacl -2240 silly addNameRange { name: 'tweetnacl', range: '>=0.14.0 <0.15.0', hasData: false } -2241 silly mapToRegistry name tweetnacl -2242 silly mapToRegistry using default registry -2243 silly mapToRegistry registry https://registry.npmjs.org/ -2244 silly mapToRegistry uri https://registry.npmjs.org/tweetnacl -2245 verbose addNameRange registry:https://registry.npmjs.org/tweetnacl not in flight; fetching -2246 silly cache afterAdd getpass@0.1.7 -2247 verbose afterAdd /home/christine/.npm/getpass/0.1.7/package/package.json not in flight; writing -2248 silly cache afterAdd asn1@0.2.4 -2249 verbose afterAdd /home/christine/.npm/asn1/0.2.4/package/package.json not in flight; writing -2250 silly cache afterAdd bcrypt-pbkdf@1.0.2 -2251 verbose afterAdd /home/christine/.npm/bcrypt-pbkdf/1.0.2/package/package.json not in flight; writing -2252 silly resolveWithNewModule ecc-jsbn@0.1.2 checking installable status -2253 silly cache add args [ 'ecc-jsbn@~0.1.1', null ] -2254 verbose cache add spec ecc-jsbn@~0.1.1 -2255 silly cache add parsed spec Result { -2255 silly cache add raw: 'ecc-jsbn@~0.1.1', -2255 silly cache add scope: null, -2255 silly cache add name: 'ecc-jsbn', -2255 silly cache add rawSpec: '~0.1.1', -2255 silly cache add spec: '>=0.1.1 <0.2.0', -2255 silly cache add type: 'range' } -2256 silly addNamed ecc-jsbn@>=0.1.1 <0.2.0 -2257 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for ecc-jsbn -2258 silly addNameRange { name: 'ecc-jsbn', range: '>=0.1.1 <0.2.0', hasData: false } -2259 silly mapToRegistry name ecc-jsbn -2260 silly mapToRegistry using default registry -2261 silly mapToRegistry registry https://registry.npmjs.org/ -2262 silly mapToRegistry uri https://registry.npmjs.org/ecc-jsbn -2263 verbose addNameRange registry:https://registry.npmjs.org/ecc-jsbn not in flight; fetching -2264 silly cache afterAdd dashdash@1.14.1 -2265 verbose afterAdd /home/christine/.npm/dashdash/1.14.1/package/package.json not in flight; writing -2266 verbose afterAdd /home/christine/.npm/safer-buffer/2.1.2/package/package.json written -2267 verbose get https://registry.npmjs.org/tweetnacl not expired, no request -2268 silly addNameRange number 2 { name: 'tweetnacl', range: '>=0.14.0 <0.15.0', hasData: true } -2269 silly addNameRange versions [ 'tweetnacl', -2269 silly addNameRange [ '0.9.1', -2269 silly addNameRange '0.9.2', -2269 silly addNameRange '0.10.0', -2269 silly addNameRange '0.10.1', -2269 silly addNameRange '0.11.0', -2269 silly addNameRange '0.11.1', -2269 silly addNameRange '0.11.2', -2269 silly addNameRange '0.12.0', -2269 silly addNameRange '0.12.1', -2269 silly addNameRange '0.12.2', -2269 silly addNameRange '0.13.0', -2269 silly addNameRange '0.13.1', -2269 silly addNameRange '0.13.2', -2269 silly addNameRange '0.13.3', -2269 silly addNameRange '0.14.0', -2269 silly addNameRange '0.14.1', -2269 silly addNameRange '0.14.2', -2269 silly addNameRange '0.14.3', -2269 silly addNameRange '0.14.4', -2269 silly addNameRange '0.14.5', -2269 silly addNameRange '1.0.0-rc.1', -2269 silly addNameRange '1.0.0', -2269 silly addNameRange '1.0.1', -2269 silly addNameRange '1.0.2', -2269 silly addNameRange '1.0.3' ] ] -2270 silly addNamed tweetnacl@0.14.5 -2271 verbose addNamed "0.14.5" is a plain semver version for tweetnacl -2272 verbose afterAdd /home/christine/.npm/getpass/0.1.7/package/package.json written -2273 verbose afterAdd /home/christine/.npm/asn1/0.2.4/package/package.json written -2274 verbose afterAdd /home/christine/.npm/bcrypt-pbkdf/1.0.2/package/package.json written -2275 verbose get https://registry.npmjs.org/ecc-jsbn not expired, no request -2276 silly addNameRange number 2 { name: 'ecc-jsbn', range: '>=0.1.1 <0.2.0', hasData: true } -2277 silly addNameRange versions [ 'ecc-jsbn', [ '0.0.1', '0.1.1', '0.1.2', '0.2.0' ] ] -2278 silly addNamed ecc-jsbn@0.1.2 -2279 verbose addNamed "0.1.2" is a plain semver version for ecc-jsbn -2280 verbose afterAdd /home/christine/.npm/dashdash/1.14.1/package/package.json written -2281 silly cache afterAdd tweetnacl@0.14.5 -2282 verbose afterAdd /home/christine/.npm/tweetnacl/0.14.5/package/package.json not in flight; writing -2283 silly cache afterAdd ecc-jsbn@0.1.2 -2284 verbose afterAdd /home/christine/.npm/ecc-jsbn/0.1.2/package/package.json not in flight; writing -2285 verbose afterAdd /home/christine/.npm/tweetnacl/0.14.5/package/package.json written -2286 verbose afterAdd /home/christine/.npm/ecc-jsbn/0.1.2/package/package.json written -2287 silly fetchNamedPackageData psl -2288 silly mapToRegistry name psl -2289 silly mapToRegistry using default registry -2290 silly mapToRegistry registry https://registry.npmjs.org/ -2291 silly mapToRegistry uri https://registry.npmjs.org/psl -2292 verbose request uri https://registry.npmjs.org/psl -2293 verbose request no auth needed -2294 info attempt registry request try #1 at 13:48:58 -2295 verbose etag W/"101ba2d632d4780d2de3d351ee1405be" -2296 verbose lastModified Sat, 28 Dec 2019 13:07:08 GMT -2297 http request GET https://registry.npmjs.org/psl -2298 http 200 https://registry.npmjs.org/psl -2299 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT', -2299 verbose headers 'content-type': 'application/json', -2299 verbose headers 'transfer-encoding': 'chunked', -2299 verbose headers connection: 'keep-alive', -2299 verbose headers 'set-cookie': -2299 verbose headers [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2299 verbose headers 'cf-ray': '59764fab685905bb-FRA', -2299 verbose headers age: '5659', -2299 verbose headers 'cache-control': 'public, max-age=300', -2299 verbose headers etag: 'W/"da7a245ac77d8bce14f4297f73f7e4b3"', -2299 verbose headers 'last-modified': 'Wed, 25 Mar 2020 13:29:16 GMT', -2299 verbose headers vary: 'accept-encoding, accept', -2299 verbose headers 'cf-cache-status': 'HIT', -2299 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2299 verbose headers server: 'cloudflare', -2299 verbose headers 'content-encoding': 'gzip', -2299 verbose headers 'cf-request-id': '02ddd01f1d000005bb0cac0200000001' } -2300 silly get cb [ 200, -2300 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT', -2300 silly get 'content-type': 'application/json', -2300 silly get 'transfer-encoding': 'chunked', -2300 silly get connection: 'keep-alive', -2300 silly get 'set-cookie': -2300 silly get [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ], -2300 silly get 'cf-ray': '59764fab685905bb-FRA', -2300 silly get age: '5659', -2300 silly get 'cache-control': 'public, max-age=300', -2300 silly get etag: 'W/"da7a245ac77d8bce14f4297f73f7e4b3"', -2300 silly get 'last-modified': 'Wed, 25 Mar 2020 13:29:16 GMT', -2300 silly get vary: 'accept-encoding, accept', -2300 silly get 'cf-cache-status': 'HIT', -2300 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', -2300 silly get server: 'cloudflare', -2300 silly get 'content-encoding': 'gzip', -2300 silly get 'cf-request-id': '02ddd01f1d000005bb0cac0200000001' } ] -2301 verbose get saving psl to /home/christine/.npm/registry.npmjs.org/psl/.cache.json -2302 silly resolveWithNewModule psl@1.8.0 checking installable status -2303 silly cache add args [ 'psl@^1.1.28', null ] -2304 verbose cache add spec psl@^1.1.28 -2305 silly cache add parsed spec Result { -2305 silly cache add raw: 'psl@^1.1.28', -2305 silly cache add scope: null, -2305 silly cache add name: 'psl', -2305 silly cache add rawSpec: '^1.1.28', -2305 silly cache add spec: '>=1.1.28 <2.0.0', -2305 silly cache add type: 'range' } -2306 silly addNamed psl@>=1.1.28 <2.0.0 -2307 verbose addNamed ">=1.1.28 <2.0.0" is a valid semver range for psl -2308 silly addNameRange { name: 'psl', range: '>=1.1.28 <2.0.0', hasData: false } -2309 silly mapToRegistry name psl -2310 silly mapToRegistry using default registry -2311 silly mapToRegistry registry https://registry.npmjs.org/ -2312 silly mapToRegistry uri https://registry.npmjs.org/psl -2313 verbose addNameRange registry:https://registry.npmjs.org/psl not in flight; fetching -2314 verbose get https://registry.npmjs.org/psl not expired, no request -2315 silly addNameRange number 2 { name: 'psl', range: '>=1.1.28 <2.0.0', hasData: true } -2316 silly addNameRange versions [ 'psl', -2316 silly addNameRange [ '1.0.0', -2316 silly addNameRange '1.0.1', -2316 silly addNameRange '1.0.2', -2316 silly addNameRange '1.1.0', -2316 silly addNameRange '1.1.1', -2316 silly addNameRange '1.1.2', -2316 silly addNameRange '1.1.3', -2316 silly addNameRange '1.1.4', -2316 silly addNameRange '1.1.5', -2316 silly addNameRange '1.1.6', -2316 silly addNameRange '1.1.7', -2316 silly addNameRange '1.1.8', -2316 silly addNameRange '1.1.9', -2316 silly addNameRange '1.1.10', -2316 silly addNameRange '1.1.11', -2316 silly addNameRange '1.1.12', -2316 silly addNameRange '1.1.13', -2316 silly addNameRange '1.1.14', -2316 silly addNameRange '1.1.15', -2316 silly addNameRange '1.1.16', -2316 silly addNameRange '1.1.17', -2316 silly addNameRange '1.1.18', -2316 silly addNameRange '1.1.19', -2316 silly addNameRange '1.1.20', -2316 silly addNameRange '1.1.21', -2316 silly addNameRange '1.1.22', -2316 silly addNameRange '1.1.23', -2316 silly addNameRange '1.1.24', -2316 silly addNameRange '1.1.25', -2316 silly addNameRange '1.1.26', -2316 silly addNameRange '1.1.27', -2316 silly addNameRange '1.1.28', -2316 silly addNameRange '1.1.29', -2316 silly addNameRange '1.1.30', -2316 silly addNameRange '1.1.31', -2316 silly addNameRange '1.1.32', -2316 silly addNameRange '1.1.33', -2316 silly addNameRange '1.2.0', -2316 silly addNameRange '1.3.0', -2316 silly addNameRange '1.3.1', -2316 silly addNameRange '1.4.0', -2316 silly addNameRange '1.5.0', -2316 silly addNameRange '1.6.0', -2316 silly addNameRange '1.7.0', -2316 silly addNameRange '1.8.0' ] ] -2317 silly addNamed psl@1.8.0 -2318 verbose addNamed "1.8.0" is a plain semver version for psl -2319 silly mapToRegistry name psl -2320 silly mapToRegistry using default registry -2321 silly mapToRegistry registry https://registry.npmjs.org/ -2322 silly mapToRegistry uri https://registry.npmjs.org/psl -2323 verbose addRemoteTarball https://registry.npmjs.org/psl/-/psl-1.8.0.tgz not in flight; adding -2324 verbose addRemoteTarball [ 'https://registry.npmjs.org/psl/-/psl-1.8.0.tgz', -2324 verbose addRemoteTarball '9326f8bcfb013adcc005fdff056acce020e51c24' ] -2325 info retry fetch attempt 1 at 13:48:58 -2326 info attempt registry request try #1 at 13:48:58 -2327 http fetch GET https://registry.npmjs.org/psl/-/psl-1.8.0.tgz -2328 http fetch 200 https://registry.npmjs.org/psl/-/psl-1.8.0.tgz -2329 silly fetchAndShaCheck shasum 9326f8bcfb013adcc005fdff056acce020e51c24 -2330 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/psl/-/psl-1.8.0.tgz not in flight; adding -2331 verbose addTmpTarball already have metadata; skipping unpack for psl@1.8.0 -2332 silly cache afterAdd psl@1.8.0 -2333 verbose afterAdd /home/christine/.npm/psl/1.8.0/package/package.json not in flight; writing -2334 verbose afterAdd /home/christine/.npm/psl/1.8.0/package/package.json written -2335 silly loadAllDepsIntoIdealTree Finishing -2336 silly idealTree:prePrune lib -2336 silly idealTree:prePrune └─┬ less@3.11.1 -2336 silly idealTree:prePrune ├── ajv@6.12.2 -2336 silly idealTree:prePrune ├── asap@2.0.6 -2336 silly idealTree:prePrune ├── asn1@0.2.4 -2336 silly idealTree:prePrune ├── assert-plus@1.0.0 -2336 silly idealTree:prePrune ├── asynckit@0.4.0 -2336 silly idealTree:prePrune ├── aws-sign2@0.7.0 -2336 silly idealTree:prePrune ├── aws4@1.9.1 -2336 silly idealTree:prePrune ├── bcrypt-pbkdf@1.0.2 -2336 silly idealTree:prePrune ├── caseless@0.12.0 -2336 silly idealTree:prePrune ├── clone@2.1.2 -2336 silly idealTree:prePrune ├── combined-stream@1.0.8 -2336 silly idealTree:prePrune ├── core-util-is@1.0.2 -2336 silly idealTree:prePrune ├── dashdash@1.14.1 -2336 silly idealTree:prePrune ├── delayed-stream@1.0.0 -2336 silly idealTree:prePrune ├── ecc-jsbn@0.1.2 -2336 silly idealTree:prePrune ├── errno@0.1.7 -2336 silly idealTree:prePrune ├── extend@3.0.2 -2336 silly idealTree:prePrune ├── extsprintf@1.3.0 -2336 silly idealTree:prePrune ├── fast-deep-equal@3.1.1 -2336 silly idealTree:prePrune ├── fast-json-stable-stringify@2.1.0 -2336 silly idealTree:prePrune ├── forever-agent@0.6.1 -2336 silly idealTree:prePrune ├── form-data@2.3.3 -2336 silly idealTree:prePrune ├── getpass@0.1.7 -2336 silly idealTree:prePrune ├── graceful-fs@4.2.4 -2336 silly idealTree:prePrune ├── har-schema@2.0.0 -2336 silly idealTree:prePrune ├── har-validator@5.1.3 -2336 silly idealTree:prePrune ├── http-signature@1.2.0 -2336 silly idealTree:prePrune ├── image-size@0.5.5 -2336 silly idealTree:prePrune ├── is-typedarray@1.0.0 -2336 silly idealTree:prePrune ├── isstream@0.1.2 -2336 silly idealTree:prePrune ├── jsbn@0.1.1 -2336 silly idealTree:prePrune ├── json-schema-traverse@0.4.1 -2336 silly idealTree:prePrune ├── json-schema@0.2.3 -2336 silly idealTree:prePrune ├── json-stringify-safe@5.0.1 -2336 silly idealTree:prePrune ├── jsprim@1.4.1 -2336 silly idealTree:prePrune ├── mime-db@1.44.0 -2336 silly idealTree:prePrune ├── mime-types@2.1.27 -2336 silly idealTree:prePrune ├── mime@1.6.0 -2336 silly idealTree:prePrune ├── minimist@1.2.5 -2336 silly idealTree:prePrune ├── mkdirp@0.5.5 -2336 silly idealTree:prePrune ├── oauth-sign@0.9.0 -2336 silly idealTree:prePrune ├── performance-now@2.1.0 -2336 silly idealTree:prePrune ├── promise@7.3.1 -2336 silly idealTree:prePrune ├── prr@1.0.1 -2336 silly idealTree:prePrune ├── psl@1.8.0 -2336 silly idealTree:prePrune ├── punycode@2.1.1 -2336 silly idealTree:prePrune ├── qs@6.5.2 -2336 silly idealTree:prePrune ├── request@2.88.2 -2336 silly idealTree:prePrune ├── safe-buffer@5.2.1 -2336 silly idealTree:prePrune ├── safer-buffer@2.1.2 -2336 silly idealTree:prePrune ├── source-map@0.6.1 -2336 silly idealTree:prePrune ├── sshpk@1.16.1 -2336 silly idealTree:prePrune ├── tough-cookie@2.5.0 -2336 silly idealTree:prePrune ├── tslib@1.13.0 -2336 silly idealTree:prePrune ├── tunnel-agent@0.6.0 -2336 silly idealTree:prePrune ├── tweetnacl@0.14.5 -2336 silly idealTree:prePrune ├── uri-js@4.2.2 -2336 silly idealTree:prePrune ├── uuid@3.4.0 -2336 silly idealTree:prePrune └── verror@1.10.0 -2337 silly loadIdealTree Finishing -2338 silly currentTree lib -2339 silly idealTree lib -2339 silly idealTree └─┬ less@3.11.1 -2339 silly idealTree ├── ajv@6.12.2 -2339 silly idealTree ├── asap@2.0.6 -2339 silly idealTree ├── asn1@0.2.4 -2339 silly idealTree ├── assert-plus@1.0.0 -2339 silly idealTree ├── asynckit@0.4.0 -2339 silly idealTree ├── aws-sign2@0.7.0 -2339 silly idealTree ├── aws4@1.9.1 -2339 silly idealTree ├── bcrypt-pbkdf@1.0.2 -2339 silly idealTree ├── caseless@0.12.0 -2339 silly idealTree ├── clone@2.1.2 -2339 silly idealTree ├── combined-stream@1.0.8 -2339 silly idealTree ├── core-util-is@1.0.2 -2339 silly idealTree ├── dashdash@1.14.1 -2339 silly idealTree ├── delayed-stream@1.0.0 -2339 silly idealTree ├── ecc-jsbn@0.1.2 -2339 silly idealTree ├── errno@0.1.7 -2339 silly idealTree ├── extend@3.0.2 -2339 silly idealTree ├── extsprintf@1.3.0 -2339 silly idealTree ├── fast-deep-equal@3.1.1 -2339 silly idealTree ├── fast-json-stable-stringify@2.1.0 -2339 silly idealTree ├── forever-agent@0.6.1 -2339 silly idealTree ├── form-data@2.3.3 -2339 silly idealTree ├── getpass@0.1.7 -2339 silly idealTree ├── graceful-fs@4.2.4 -2339 silly idealTree ├── har-schema@2.0.0 -2339 silly idealTree ├── har-validator@5.1.3 -2339 silly idealTree ├── http-signature@1.2.0 -2339 silly idealTree ├── image-size@0.5.5 -2339 silly idealTree ├── is-typedarray@1.0.0 -2339 silly idealTree ├── isstream@0.1.2 -2339 silly idealTree ├── jsbn@0.1.1 -2339 silly idealTree ├── json-schema-traverse@0.4.1 -2339 silly idealTree ├── json-schema@0.2.3 -2339 silly idealTree ├── json-stringify-safe@5.0.1 -2339 silly idealTree ├── jsprim@1.4.1 -2339 silly idealTree ├── mime-db@1.44.0 -2339 silly idealTree ├── mime-types@2.1.27 -2339 silly idealTree ├── mime@1.6.0 -2339 silly idealTree ├── minimist@1.2.5 -2339 silly idealTree ├── mkdirp@0.5.5 -2339 silly idealTree ├── oauth-sign@0.9.0 -2339 silly idealTree ├── performance-now@2.1.0 -2339 silly idealTree ├── promise@7.3.1 -2339 silly idealTree ├── prr@1.0.1 -2339 silly idealTree ├── psl@1.8.0 -2339 silly idealTree ├── punycode@2.1.1 -2339 silly idealTree ├── qs@6.5.2 -2339 silly idealTree ├── request@2.88.2 -2339 silly idealTree ├── safe-buffer@5.2.1 -2339 silly idealTree ├── safer-buffer@2.1.2 -2339 silly idealTree ├── source-map@0.6.1 -2339 silly idealTree ├── sshpk@1.16.1 -2339 silly idealTree ├── tough-cookie@2.5.0 -2339 silly idealTree ├── tslib@1.13.0 -2339 silly idealTree ├── tunnel-agent@0.6.0 -2339 silly idealTree ├── tweetnacl@0.14.5 -2339 silly idealTree ├── uri-js@4.2.2 -2339 silly idealTree ├── uuid@3.4.0 -2339 silly idealTree └── verror@1.10.0 -2340 silly generateActionsToTake Starting -2341 silly install generateActionsToTake -2342 warn checkPermissions Missing write access to /usr/local/lib/node_modules -2343 silly rollbackFailedOptional Starting -2344 silly rollbackFailedOptional Finishing -2345 silly runTopLevelLifecycles Starting -2346 silly runTopLevelLifecycles Finishing -2347 silly install printInstalled -2348 verbose stack Error: EACCES: permission denied, access '/usr/local/lib/node_modules' -2349 verbose cwd /home/christine/0_WORK/gradcomm -2350 error Linux 4.15.0-99-generic -2351 error argv "/usr/bin/node" "/usr/bin/npm" "install" "-g" "less" -2352 error node v8.10.0 -2353 error npm v3.5.2 -2354 error path /usr/local/lib/node_modules -2355 error code EACCES -2356 error errno -13 -2357 error syscall access -2358 error Error: EACCES: permission denied, access '/usr/local/lib/node_modules' -2358 error { Error: EACCES: permission denied, access '/usr/local/lib/node_modules' -2358 error errno: -13, -2358 error code: 'EACCES', -2358 error syscall: 'access', -2358 error path: '/usr/local/lib/node_modules' } -2359 error Please try running this command again as root/Administrator. -2360 verbose exit [ -13, true ] diff --git a/community_server/parse_proto.sh b/community_server/parse_proto.sh deleted file mode 100755 index e6ccb451f..000000000 --- a/community_server/parse_proto.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -# Copyright 2015 gRPC authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# need grpc only for hedera hashgraph -#PHP_PLUGIN="$(which grpc_php_plugin)" -#protoc --proto_path=./src/protobuf/gradido --php_out=./src/ --grpc_out=./src/ --plugin=protoc-gen-grpc=$PHP_PLUGIN ./src/protobuf/gradido/*.proto - -protoc --proto_path=./src/protobuf --php_out=./src/Model/Messages ./src/protobuf/gradido/*.proto - diff --git a/community_server/phpunit.xml.dist b/community_server/phpunit.xml.dist deleted file mode 100644 index ba971b637..000000000 --- a/community_server/phpunit.xml.dist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - tests/TestCase/ - - - - - - - - - - - - - - - - - src/ - plugins/*/src/ - - src/Console/Installer.php - - - - diff --git a/community_server/plugins/empty b/community_server/plugins/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/src/Application.php b/community_server/src/Application.php deleted file mode 100644 index 66e00f733..000000000 --- a/community_server/src/Application.php +++ /dev/null @@ -1,117 +0,0 @@ -bootstrapCli(); - } - - /* - * Only try to load DebugKit in development mode - * Debug Kit should not be installed on a production system - */ - if (Configure::read('debug')) { - $this->addPlugin(\DebugKit\Plugin::class); - } - - // Load more plugins here - } - - - - /** - * Setup the middleware queue your application will use. - * - * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup. - * @return \Cake\Http\MiddlewareQueue The updated middleware queue. - */ - public function middleware($middlewareQueue) - { - //$csrf = new CsrfProtectionMiddleware(); - - // Token check will be skipped when callback returns `true`. - /*$csrf->whitelistCallback(function ($request) { - // Skip token check for API URLs. - //if ($request->getParam('prefix') === 'api') { - if($request->getAttribute('base') === 'TransactionJsonRequestHandler') { - return true; - } - }); -*/ - // Ensure routing middleware is added to the queue before CSRF protection middleware. - //$middlewareQueue->; - - $middlewareQueue - // ->add($csrf) - // Catch any exceptions in the lower layers, - // and make an error page/response - ->add(new ErrorHandlerMiddleware(null, Configure::read('Error'))) - - // Handle plugin/theme assets like CakePHP normally does. - ->add(new AssetMiddleware([ - 'cacheTime' => Configure::read('Asset.cacheTime') - ])) - - // Add routing middleware. - // If you have a large number of routes connected, turning on routes - // caching in production could improve performance. For that when - // creating the middleware instance specify the cache config name by - // using it's second constructor argument: - // `new RoutingMiddleware($this, '_cake_routes_')` - ->add(new RoutingMiddleware($this)); - - return $middlewareQueue; - } - - /** - * @return void - */ - protected function bootstrapCli() - { - try { - $this->addPlugin('Bake'); - } catch (MissingPluginException $e) { - // Do not halt if the plugin is missing - } - - // Load more plugins here - } -} diff --git a/community_server/src/Console/Installer.php b/community_server/src/Console/Installer.php deleted file mode 100644 index 3bcef473b..000000000 --- a/community_server/src/Console/Installer.php +++ /dev/null @@ -1,246 +0,0 @@ -getIO(); - - $rootDir = dirname(dirname(__DIR__)); - - static::createAppConfig($rootDir, $io); - static::createWritableDirectories($rootDir, $io); - - // ask if the permissions should be changed - if ($io->isInteractive()) { - $validator = function ($arg) { - if (in_array($arg, ['Y', 'y', 'N', 'n'])) { - return $arg; - } - throw new Exception('This is not a valid answer. Please choose Y or n.'); - }; - $setFolderPermissions = $io->askAndValidate( - 'Set Folder Permissions ? (Default to Y) [Y,n]? ', - $validator, - 10, - 'Y' - ); - - if (in_array($setFolderPermissions, ['Y', 'y'])) { - static::setFolderPermissions($rootDir, $io); - } - } else { - static::setFolderPermissions($rootDir, $io); - } - - static::setSecuritySalt($rootDir, $io); - - $class = 'Cake\Codeception\Console\Installer'; - if (class_exists($class)) { - $class::customizeCodeceptionBinary($event); - } - } - - /** - * Create the config/app.php file if it does not exist. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function createAppConfig($dir, $io) - { - $appConfig = $dir . '/config/app.php'; - $defaultConfig = $dir . '/config/app.default.php'; - if (!file_exists($appConfig)) { - copy($defaultConfig, $appConfig); - $io->write('Created `config/app.php` file'); - } - } - - /** - * Create the `logs` and `tmp` directories. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function createWritableDirectories($dir, $io) - { - foreach (static::WRITABLE_DIRS as $path) { - $path = $dir . '/' . $path; - if (!file_exists($path)) { - mkdir($path); - $io->write('Created `' . $path . '` directory'); - } - } - } - - /** - * Set globally writable permissions on the "tmp" and "logs" directory. - * - * This is not the most secure default, but it gets people up and running quickly. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function setFolderPermissions($dir, $io) - { - // Change the permissions on a path and output the results. - $changePerms = function ($path) use ($io) { - $currentPerms = fileperms($path) & 0777; - $worldWritable = $currentPerms | 0007; - if ($worldWritable == $currentPerms) { - return; - } - - $res = chmod($path, $worldWritable); - if ($res) { - $io->write('Permissions set on ' . $path); - } else { - $io->write('Failed to set permissions on ' . $path); - } - }; - - $walker = function ($dir) use (&$walker, $changePerms) { - $files = array_diff(scandir($dir), ['.', '..']); - foreach ($files as $file) { - $path = $dir . '/' . $file; - - if (!is_dir($path)) { - continue; - } - - $changePerms($path); - $walker($path); - } - }; - - $walker($dir . '/tmp'); - $changePerms($dir . '/tmp'); - $changePerms($dir . '/logs'); - } - - /** - * Set the security.salt value in the application's config file. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function setSecuritySalt($dir, $io) - { - $newKey = hash('sha256', Security::randomBytes(64)); - static::setSecuritySaltInFile($dir, $io, $newKey, 'app.php'); - } - - /** - * Set the security.salt value in a given file - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @param string $newKey key to set in the file - * @param string $file A path to a file relative to the application's root - * @return void - */ - public static function setSecuritySaltInFile($dir, $io, $newKey, $file) - { - $config = $dir . '/config/' . $file; - $content = file_get_contents($config); - - $content = str_replace('__SALT__', $newKey, $content, $count); - - if ($count == 0) { - $io->write('No Security.salt placeholder to replace.'); - - return; - } - - $result = file_put_contents($config, $content); - if ($result) { - $io->write('Updated Security.salt value in config/' . $file); - - return; - } - $io->write('Unable to update Security.salt value.'); - } - - /** - * Set the APP_NAME value in a given file - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @param string $appName app name to set in the file - * @param string $file A path to a file relative to the application's root - * @return void - */ - public static function setAppNameInFile($dir, $io, $appName, $file) - { - $config = $dir . '/config/' . $file; - $content = file_get_contents($config); - $content = str_replace('__APP_NAME__', $appName, $content, $count); - - if ($count == 0) { - $io->write('No __APP_NAME__ placeholder to replace.'); - - return; - } - - $result = file_put_contents($config, $content); - if ($result) { - $io->write('Updated __APP_NAME__ value in config/' . $file); - - return; - } - $io->write('Unable to update __APP_NAME__ value.'); - } -} diff --git a/community_server/src/Controller/AddressTypesController.php b/community_server/src/Controller/AddressTypesController.php deleted file mode 100644 index 9b13a7720..000000000 --- a/community_server/src/Controller/AddressTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->AddressTypes); - - $this->set(compact('addressTypes')); - } - - /** - * View method - * - * @param string|null $id Address Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $addressType = $this->AddressTypes->get($id, [ - 'contain' => ['StateGroupAddresses', 'TransactionGroupAddaddress'], - ]); - - $this->set('addressType', $addressType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $addressType = $this->AddressTypes->newEntity(); - if ($this->request->is('post')) { - $addressType = $this->AddressTypes->patchEntity($addressType, $this->request->getData()); - if ($this->AddressTypes->save($addressType)) { - $this->Flash->success(__('The address type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The address type could not be saved. Please, try again.')); - } - $this->set(compact('addressType')); - } - - /** - * Edit method - * - * @param string|null $id Address Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $addressType = $this->AddressTypes->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $addressType = $this->AddressTypes->patchEntity($addressType, $this->request->getData()); - if ($this->AddressTypes->save($addressType)) { - $this->Flash->success(__('The address type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The address type could not be saved. Please, try again.')); - } - $this->set(compact('addressType')); - } - - /** - * Delete method - * - * @param string|null $id Address Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $addressType = $this->AddressTypes->get($id); - if ($this->AddressTypes->delete($addressType)) { - $this->Flash->success(__('The address type has been deleted.')); - } else { - $this->Flash->error(__('The address type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/AdminErrorsController.php b/community_server/src/Controller/AdminErrorsController.php deleted file mode 100644 index a9688008e..000000000 --- a/community_server/src/Controller/AdminErrorsController.php +++ /dev/null @@ -1,111 +0,0 @@ -paginate = [ - 'contain' => ['StateUsers'] - ]; - $adminErrors = $this->paginate($this->AdminErrors); - - $this->set(compact('adminErrors')); - } - - /** - * View method - * - * @param string|null $id Admin Error id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $adminError = $this->AdminErrors->get($id, [ - 'contain' => ['StateUsers'] - ]); - - $this->set('adminError', $adminError); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $adminError = $this->AdminErrors->newEntity(); - if ($this->request->is('post')) { - $adminError = $this->AdminErrors->patchEntity($adminError, $this->request->getData()); - if ($this->AdminErrors->save($adminError)) { - $this->Flash->success(__('The admin error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The admin error could not be saved. Please, try again.')); - } - $stateUsers = $this->AdminErrors->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('adminError', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id Admin Error id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $adminError = $this->AdminErrors->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $adminError = $this->AdminErrors->patchEntity($adminError, $this->request->getData()); - if ($this->AdminErrors->save($adminError)) { - $this->Flash->success(__('The admin error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The admin error could not be saved. Please, try again.')); - } - $stateUsers = $this->AdminErrors->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('adminError', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id Admin Error id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $adminError = $this->AdminErrors->get($id); - if ($this->AdminErrors->delete($adminError)) { - $this->Flash->success(__('The admin error has been deleted.')); - } else { - $this->Flash->error(__('The admin error could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/AppController.php b/community_server/src/Controller/AppController.php deleted file mode 100644 index e70b8e7bd..000000000 --- a/community_server/src/Controller/AppController.php +++ /dev/null @@ -1,386 +0,0 @@ -loadComponent('Security');` - * - * @return void - */ - public function initialize() - { - parent::initialize(); - - $this->loadComponent('RequestHandler', [ - 'enableBeforeRedirect' => false, - ]); - $this->loadComponent('Flash'); - - $this->loadComponent('Auth', [ - 'loginAction' => [ - 'controller' => 'ServerUsers', - 'action' => 'login' - ], - 'loginRedirect' => [ - 'controller' => 'Transactions', - 'action' => 'index' - ], - 'logoutRedirect' => [ - 'controller' => 'Pages', - 'action' => 'display', - 'gradido' - ], - 'authenticate' => [ - 'all' => ['userModel' => 'ServerUsers'], - 'Form' => [ - 'userModel' => 'ServerUsers', - ] - ] - ]); - - $this->Auth->deny(['index']); - - /* - * Enable the following component for recommended CakePHP security settings. - * see https://book.cakephp.org/3.0/en/controllers/components/security.html - */ - //$this->loadComponent('Security'); - - - // load current balance - $session = $this->getRequest()->getSession(); - $state_user_id = $session->read('StateUser.id'); - - - // load error count - if ($state_user_id) { - $stateErrorsTable = TableRegistry::getTableLocator()->get('stateErrors'); - $stateErrorQuery = $stateErrorsTable - ->find('all') - ->select('id') - ->contain(false) - ->where(['state_user_id' => $state_user_id]); - $session->write('StateUser.errorCount', $stateErrorQuery->count()); - } - - // put current page into global for navi - $GLOBALS["passed"] = null; - $side = $this->request->getParam('controller'); - $GLOBALS["side"] = $side; - $subside = $this->request->getParam('action'); - $passedArguments = $this->request->getParam('pass'); - if ($passedArguments) { - $GLOBALS["passed"] = $passedArguments[0]; - } - $GLOBALS["subside"] = $subside; - - // server login - if ($this->Auth->user('id')) { - $GLOBALS['ServerUser'] = $this->Auth->user(); - } - - // login server url - $loginServer = Configure::read('LoginServer'); - if ($loginServer && isset($loginServer['url'])) { - $this->loginServerUrl = $loginServer['url'] . '/'; - } else { - $this->loginServerUrl = Router::url('/', true); - } - /* - * - * 'GradidoBlockchain' => [ - * // type: - * // - mysql: centralized blockchain in mysql db, no cross group transactions - * // - hedera: send transaction over hedera - * 'type' => 'hedera', - * // gradido nodes with blockchain (if type != mysql) - * 'nodes' => [ - * ['host' => 'http://192.168.178.225', 'port' => 13702] - * ] - * ], - */ - $blockchain = Configure::read('GradidoBlockchain'); - if($blockchain && isset($blockchain['type'])) { - $this->blockchainType = $blockchain['type']; - } - } - - protected function requestLogin($sessionId = 0, $redirect = true) - { - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $session = $this->getRequest()->getSession(); - // check login - // disable encryption for cookies - $session_id = 0; - $php_session_id = 0; - if($session->check('session_id')) { - $php_session_id = intval($session->read('session_id')); - } - $cookie_session_id = intval($this->request->getCookie('GRADIDO_LOGIN', '')); - // decide in which order session_ids are tried - if($sessionId != 0) { - $session_id = $sessionId; - } else if($php_session_id != 0) { - $session_id = $php_session_id; - } else if($cookie_session_id != 0) { - $session_id = $cookie_session_id; - } - - $ip = $this->request->clientIp(); - if (!$session->check('client_ip')) { - $session->write('client_ip', $ip); - } - // login server cannot detect host ip - // TODO: update login server, recognize nginx real ip header - $loginServer = Configure::read('LoginServer'); - - if ($session_id != 0) { - $userStored = $session->read('StateUser'); - - $transactionPendings = $session->read('Transactions.pending'); - $transactionExecutings = $session->read('Transactions.executing'); - $transaction_can_signed = $session->read('Transactions.can_signed'); - - - - if ($session->read('session_id') != $session_id || - ( $userStored && (!isset($userStored['id']) || !$userStored['email_checked'])) || - intval($transactionPendings) > 0 || - intval($transactionExecutings) > 0 || - intval($transaction_can_signed > 0)) - { - $http = new Client(); - - try { - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->get($url . '/login', ['session_id' => $session_id]); - $json = $response->getJson(); - - if (isset($json) && count($json) > 0) { - if ($json['state'] === 'success') { - //echo "email checked: " . $json['user']['email_checked'] . ";
    "; - if ($session->read('session_id') != $session_id || - ( $userStored && !isset($userStored['id']))) { - $session->destroy(); - } - foreach ($json['user'] as $key => $value) { - // we don't need the id of user in login server db - if($key == 'id') continue; - $session->write('StateUser.' . $key, $value); - } - //var_dump($json); - $transactionPendings = $json['Transactions.pending']; - $transactionExecuting = $json['Transactions.executing']; - $transaction_can_signed = $json['Transactions.can_signed']; - //echo "read transaction pending: $transactionPendings
    "; - $session->write('Transactions.pending', $transactionPendings); - $session->write('Transactions.executing', $transactionExecuting); - $session->write('Transactions.can_signed', $transaction_can_signed); - $session->write('session_id', $session_id); - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - - - if (isset($json['user']['public_hex']) && $json['user']['public_hex'] != '') { - $public_key_bin = hex2bin($json['user']['public_hex']); - $stateUserQuery = $stateUserTable - ->find('all') - ->where(['public_key' => $public_key_bin]) - ->contain('StateBalances', function ($q) { - return $q->order(['record_date' => 'DESC']) - ->limit(1); - }); - if ($stateUserQuery->count() == 1) { - $stateUser = $stateUserQuery->first(); - if ($stateUser->first_name != $json['user']['first_name'] || - $stateUser->last_name != $json['user']['last_name'] || - $stateUser->disabled != $json['user']['disabled'] || - //$stateUser->username != $json['user']['username'] || - // -> throws error - $stateUser->email != $json['user']['email'] - ) { - $stateUser->first_name = $json['user']['first_name']; - $stateUser->last_name = $json['user']['last_name']; - $stateUser->disabled = intval($json['user']['disabled']); - //$stateUser->username = $json['user']['username']; - $stateUser->email = $json['user']['email']; - if (!$stateUserTable->save($stateUser)) { - $this->Flash->error(__('error updating state user ' . json_encode($stateUser->errors()))); - } - } - $session->write('StateUser.id', $stateUser->id); - //echo $stateUser['id']; - } else { - $newStateUser = $stateUserTable->newEntity(); - $newStateUser->public_key = $public_key_bin; - $newStateUser->first_name = $json['user']['first_name']; - $newStateUser->last_name = $json['user']['last_name']; - $newStateUser->disabled = intval($json['user']['disabled']); - //$newStateUser->username = $json['user']['username']; - $newStateUser->email = $json['user']['email']; - if (!$stateUserTable->save($newStateUser)) { - $this->Flash->error(__('error saving state user ' . json_encode($newStateUser->errors()))); - } - $session->write('StateUser.id', $newStateUser->id); - //echo $newStateUser->id; - } - } else { - if(!$redirect) { - return ['state' => 'error', 'msg' => 'no pubkey']; - } - // we haven't get a pubkey? something seems to gone wrong on the login-server - $this->Flash->error(__('no pubkey')); - //var_dump($json); - return $this->redirect($this->loginServerUrl . 'account/error500/noPubkey', 303); - } - } else { - if(!$redirect) { - return ['state' => 'not found', 'msg' => 'invalid session', 'details' => $json]; - } - if ($json['state'] === 'not found') { - $this->Flash->error(__('invalid session')); - } else { - $this->Flash->error(__('Konto ist nicht aktiviert!')); - } - //die(json_encode($json)); - if(preg_match('/client ip/', $json['msg'])) { - return $this->redirect($this->loginServerUrl . 'account/error500/ipError', 303); - } - return $this->redirect($this->loginServerUrl . 'account/', 303); - } - } - } catch (\Exception $e) { - $msg = $e->getMessage(); - if(!$redirect) { - return ['state' => 'error', 'msg' => 'login-server http request error', 'details' => $msg]; - } - $this->Flash->error(__('error http request: ') . $msg); - return $this->redirect(['controller' => 'Dashboard', 'action' => 'errorHttpRequest']); - //continue; - } - } - $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $session->read('StateUser.id')])->first(); - if ($state_balance) { - $now = new FrozenTime; - $session->write('StateUser.balance', $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now)); - } - } else { - // no login - //die("no login"); - if(!$redirect) { - return ['state' => 'error', 'msg' => 'not logged in']; - } - if (isset($loginServer['path'])) { - return $this->redirect($loginServer['path'], 303); - } else { - return $this->redirect($this->loginServerUrl . 'account/', 303); - } - } - return true; - } - - /* - public function beforeFilter(Event $event) - { - //$this->Auth->allow(['display']); - } - */ - - public function addAdminError($controller, $action, array $returnTable, $state_user_id) - { - if (!is_array($returnTable)) { - $this->addAdminError('AppController', 'addAdminError', ['state' => 'error', 'msg' => 'returnTable isn\'t array', 'details' => gettype($returnTable)], $state_user_id); - return false; - } - $adminErrorTable = TableRegistry::getTableLocator()->get('AdminErrors'); - $adminErrorEntity = $adminErrorTable->newEntity(); - $adminErrorEntity->state_user_id = $state_user_id; - $adminErrorEntity->controller = $controller; - $adminErrorEntity->action = $action; - $adminErrorEntity->state = $returnTable['state']; - if (isset($returnTable['msg'])) { - $adminErrorEntity->msg = $returnTable['msg']; - } else { - $adminErrorEntity->msg = __('(Leere Message)'); - } - if (isset($returnTable['details'])) { - $adminErrorEntity->details = $returnTable['details']; - } else { - $adminErrorEntity->details = __('(Leere Details)'); - } - if (!$adminErrorTable->save($adminErrorEntity)) { - $this->Flash->error( - __('Serious error, couldn\'t save to db, please write the admin: ' . $this->getAdminEmailLink()), - ['escape' => false] - ); - } - return true; - } - - public function getAdminEmailLink($text = '') - { - $serverAdminEmail = Configure::read('ServerAdminEmail'); - return ''. $serverAdminEmail . ''; - } - - public function returnJsonEncoded($json) - { - $this->autoRender = false; - $response = $this->response->withType('application/json'); - return $response->withStringBody($json); - } - - public function returnJson($array) - { - $this->autoRender = false; - $response = $this->response->withType('application/json'); - return $response->withStringBody(json_encode($array)); - } - - public function getStartEndForMonth($month, $year) - { - $timeString = $year . '-' . $month . '-01 00:00'; - $firstDay = new Time($timeString); - $lastDay = new Time($timeString); - $lastDay = $lastDay->addMonth(1); - return [$firstDay, $lastDay]; - } -} diff --git a/community_server/src/Controller/AppRequestsController.php b/community_server/src/Controller/AppRequestsController.php deleted file mode 100644 index 20b182f75..000000000 --- a/community_server/src/Controller/AppRequestsController.php +++ /dev/null @@ -1,465 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->loadComponent('GradidoNumber'); - //$this->loadComponent('JsonRpcRequestClient'); - //$this->Auth->allow(['add', 'edit']); - $this->Auth->allow([ - 'index', 'sendCoins', 'createCoins', 'getBalance', - 'listTransactions','listGDTTransactions', 'getDecayStartBlock' - ]); - } - - - public function index() - { - if($this->request->is('get')) { - $method = $this->request->getQuery('method'); - switch($method) { - - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for get', 'details' => $method]); - } - else if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode'); - //var_dump($jsonData); - if($jsonData == NULL || !isset($jsonData->method)) { - return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']); - } - $method = $jsonData->method; - - switch($method) { - - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for post', 'details' => $method]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post or get']); - } - - private function checkAndCopyRequiredFields($fields, &$param, $data = null) { - if($data == null) { - $data = $this->request->input('json_decode'); - } - foreach($fields as $field) { - if(is_array($field)) { - $one_exist = false; - foreach($field as $oneField) { - if(isset($data->$oneField)) { - $param[$oneField] = $data->$oneField; - $one_exist = true; - break; - } - } - if(!$one_exist) { - return ['state' => 'error', 'msg' => 'missing field of set', 'details' => $field]; - } - } else { - if(!isset($data->$field)) { - return ['state' => 'error', 'msg' => 'missing field', 'details' => $field . ' not found']; - } else { - $param[$field] = $data->$field; - } - } - } - return true; - } - - private function rewriteKeys(&$data, $replaceKeys) - { - foreach(array_keys($replaceKeys) as $key) { - $newKey = $replaceKeys[$key]; - if(isset($data->$key)) { - $data->$newKey = $data->$key; - unset($data->$key); - } - } - } - - private function parseParameterForCreateTransaction(&$param, $data = null) - { - if($data == null) { - $data = $this->request->input('json_decode'); - } - $session_id = 0; - if(isset($data->session_id)) { - $session_id = $data->session_id; - } - $login_request_result = $this->requestLogin($session_id, false); - if($login_request_result !== true) { - return $login_request_result; - } - $session = $this->getRequest()->getSession(); - $param['session_id'] = $session->read('session_id'); - $param['blockchain_type'] = $this->blockchainType; - - $this->rewriteKeys($data, ['email' => 'target_email', 'username' => 'target_username', 'pubkey' => 'target_pubkey']); - $required_fields = $this->checkAndCopyRequiredFields(['amount', ['target_email', 'target_username', 'target_pubkey']], $param, $data); - if($required_fields !== true) { - return $required_fields; - } - - if(floatval($param['amount']) <= 0.0) { - return ['state' => 'error', 'msg' => 'amount is invalid', 'details' => $param['amount']]; - } - $param['amount'] = $this->GradidoNumber->parseInputNumberToCentNumber($param['amount']); - - if(isset($data->memo)) { - $param['memo'] = $data->memo; - } - - if(isset($data->auto_sign)) { - $param['auto_sign'] = boolval($data->auto_sign); - } - - return true; - } - - public function sendCoins() - { - /* - * { - "session_id" : -127182, - "amount": 2000000, - "email": "max.musterman@gmail.de", - "memo":"Thank you :)", - "group": "gdd1", - "auto_sign": true - */ - if(!$this->request->is('post')) { - return $this->returnJson(['state' => 'error', 'msg' => 'no post']); - } - $data = $this->request->input('json_decode'); - $params = []; - $result = $this->parseParameterForCreateTransaction($params, $data); - if($result !== true) { - return $this->returnJson($result); - } - - if(!isset($params['memo']) || strlen($params['memo']) < 5 || strlen($params['memo']) > 150) { - return $this->returnJson(['state' => 'error', 'msg' => 'memo is not set or not in expected range [5;150]']); - } - $params['transaction_type'] = 'transfer'; - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode($params), '/createTransaction'); - - - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $session = $this->getRequest()->getSession(); - $pendingTransactionCount = $session->read('Transactions.pending'); - if($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - //echo "pending: " . $pendingTransactionCount; - return $this->returnJson(['state' => 'success']); - } else { - - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - return $this->returnJson($answear_data); - - } - - } - - public function createCoins() - { - /* - * "session_id" : -127182, - * "email": "max.musterman@gmail.de", - * "amount": 10000000, - * "target_date":"2021-02-19T13:25:36+00:00", - * "memo":"AGE", - * "auto_sign": true - */ - if(!$this->request->is('post')) { - return $this->returnJson(['state' => 'error', 'msg' => 'no post']); - } - $data = $this->request->input('json_decode'); - $params = []; - $result = $this->parseParameterForCreateTransaction($params, $data); - if($result !== true) { - return $this->returnJson($result); - } - $required_fields = $this->checkAndCopyRequiredFields(['target_date'], $params, $data); - if($required_fields !== true) { - return $this->returnJson($required_fields); - } - $params['transaction_type'] = 'creation'; - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode($params), '/createTransaction'); - - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $session = $this->getRequest()->getSession(); - $pendingTransactionCount = $session->read('Transactions.pending'); - if($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - //echo "pending: " . $pendingTransactionCount; - return $this->returnJson(['state' => 'success']); - } else { - - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - return $this->returnJson($answear_data); - - } - - } - - public function getBalance($session_id = 0) - { - $this->viewBuilder()->setLayout('ajax'); - $login_result = $this->requestLogin($session_id, false); - if($login_result !== true) { - $this->set('body', $login_result); - return; - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - $state_balances_table = TableRegistry::getTableLocator()->get('StateBalances'); - $state_balances_table->updateBalances($user['id']); - - $state_balance = $state_balances_table->find()->where(['state_user_id' => $user['id']])->first(); - - - $now = new FrozenTime(); - if(!$state_balance) { - $body = [ - 'state' => 'success', - 'balance' => 0, - 'decay' => 0 - ]; - } else { - - $body = [ - 'state' => 'success', - 'balance' => $state_balance->amount, - 'decay' => $state_balance->partDecay($now), - ]; - } - - $body['decay_date'] = $now; - $this->set('body', $body); - } - - public function listTransactions($page = 1, $count = 25, $orderDirection = 'ASC', $session_id = 0) - { - $this->viewBuilder()->setLayout('ajax'); - $startTime = microtime(true); - - $login_result = $this->requestLogin($session_id, false); - - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - - $stateBalancesTable->updateBalances($user['id']); - - $gdtSum = 0; - - $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi'); - - if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) { - $gdtSum = intval($gdtEntries['data']['sum']); - } else { - $this->addAdminError('StateBalancesController', 'overview', $gdtEntries, $user['id'] ? $user['id'] : 0); - } - - //echo "count: $count, page: $page
    "; - $limit = $count; - $offset = 0; - $skip_first_transaction = false; - if($page > 1) { - $offset = (( $page - 1 ) * $count) - 1; - $limit++; - } - - if($offset && $orderDirection == 'ASC') { - $offset--; - } - - //echo "limit: $limit, offset: $offset, skip first transaction: $skip_first_transaction
    "; - $stateUserTransactionsQuery = $stateUserTransactionsTable - ->find() - ->where(['state_user_id' => $user['id']]) - ->order(['balance_date' => $orderDirection]) - ->contain([]) - ->limit($limit) - //->page($page) - ->offset($offset) - ; - $state_user_transactions_count = $stateUserTransactionsQuery->count(); - if($state_user_transactions_count > $offset + $limit) { - $skip_first_transaction = true; - } - - $decay = true; - if($page > 1) { - $decay = false; - } - $transactions = []; - $transactions_from_db = $stateUserTransactionsQuery->toArray(); - - if(count($transactions_from_db)) { - if($orderDirection == 'DESC') { - $transactions_from_db = array_reverse($transactions_from_db); - } - - $transactions = $transactionsTable->listTransactionsHumanReadable($transactions_from_db, $user, $decay, $skip_first_transaction); - //echo "transactions count: " . count($transactions) . "
    "; - if($orderDirection == 'DESC') { - $transactions = array_reverse($transactions); - } - } - - $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $user['id']])->first(); - - $body = [ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transactions.executing'), - 'count' => $state_user_transactions_count, - 'gdtSum' => $gdtSum, - 'timeUsed' => microtime(true) - $startTime - ]; - $now = new FrozenTime(); - $body['decay_date'] = $now; - - if(!$state_balance) { - $body['balance'] = 0.0; - $body['decay'] = 0.0; - } else { - $body['balance'] = $state_balance->amount; - $body['decay'] = $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now); - } - - $this->set('body', $body); - } - - public function listGDTTransactions($page = 1, $count = 25, $orderDirection = 'ASC', $session_id = 0) - { - $timeBegin = microtime(true); - $this->viewBuilder()->setLayout('ajax'); - - $login_result = $this->requestLogin($session_id, false); - - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - - $gdtEntries = $this->JsonRequestClient->sendRequestGDT([ - 'email' => $user['email'], - 'page' => $page, - 'count' => $count, - 'orderDirection' => $orderDirection - ], 'GdtEntries' . DS . 'listPerEmailApi'); - - if('success' == $gdtEntries['state']) { - $timeEnd = microtime(true); - $gdtEntries['data']['timeUsed'] = $timeEnd - $timeBegin; - return $this->returnJson($gdtEntries['data']); - - } else { - if($user) { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, $user['id']); - } else { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, 0); - } - } - return $this->returnJson(['state' => 'error', 'msg' => 'error by requesting gdt server', 'details' => $gdtEntries]); - } - - public function getDecayStartBlock() - { - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $decayStartBlock = $transactionsTable->find()->where(['transaction_type_id' => 9]); - if(!$decayStartBlock->count()) { - return $this->returnJson(['state' => 'error', 'msg' => 'not found']); - } - return $this->returnJson(['state' => 'success', 'decay_start' => $decayStartBlock->first()->received]); - } - - private function acquireAccessToken($session_id) - { - - } - -} - diff --git a/community_server/src/Controller/BlockchainTypesController.php b/community_server/src/Controller/BlockchainTypesController.php deleted file mode 100644 index 2a94037df..000000000 --- a/community_server/src/Controller/BlockchainTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->BlockchainTypes); - - $this->set(compact('blockchainTypes')); - } - - /** - * View method - * - * @param string|null $id Blockchain Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $blockchainType = $this->BlockchainTypes->get($id, [ - 'contain' => [], - ]); - - $this->set('blockchainType', $blockchainType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $blockchainType = $this->BlockchainTypes->newEntity(); - if ($this->request->is('post')) { - $blockchainType = $this->BlockchainTypes->patchEntity($blockchainType, $this->request->getData()); - if ($this->BlockchainTypes->save($blockchainType)) { - $this->Flash->success(__('The blockchain type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The blockchain type could not be saved. Please, try again.')); - } - $this->set(compact('blockchainType')); - } - - /** - * Edit method - * - * @param string|null $id Blockchain Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $blockchainType = $this->BlockchainTypes->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $blockchainType = $this->BlockchainTypes->patchEntity($blockchainType, $this->request->getData()); - if ($this->BlockchainTypes->save($blockchainType)) { - $this->Flash->success(__('The blockchain type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The blockchain type could not be saved. Please, try again.')); - } - $this->set(compact('blockchainType')); - } - - /** - * Delete method - * - * @param string|null $id Blockchain Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $blockchainType = $this->BlockchainTypes->get($id); - if ($this->BlockchainTypes->delete($blockchainType)) { - $this->Flash->success(__('The blockchain type has been deleted.')); - } else { - $this->Flash->error(__('The blockchain type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/CommunityProfilesController.php b/community_server/src/Controller/CommunityProfilesController.php deleted file mode 100644 index c807da72c..000000000 --- a/community_server/src/Controller/CommunityProfilesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->CommunityProfiles); - - $this->set(compact('communityProfiles')); - } - - /** - * View method - * - * @param string|null $id Community Profile id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $communityProfile = $this->CommunityProfiles->get($id, [ - 'contain' => [], - ]); - - $this->set('communityProfile', $communityProfile); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $communityProfile = $this->CommunityProfiles->newEntity(); - if ($this->request->is('post')) { - $communityProfile = $this->CommunityProfiles->patchEntity($communityProfile, $this->request->getData()); - if ($this->CommunityProfiles->save($communityProfile)) { - $this->Flash->success(__('The community profile has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The community profile could not be saved. Please, try again.')); - } - $this->set(compact('communityProfile')); - } - - /** - * Edit method - * - * @param string|null $id Community Profile id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $communityProfile = $this->CommunityProfiles->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $communityProfile = $this->CommunityProfiles->patchEntity($communityProfile, $this->request->getData()); - if ($this->CommunityProfiles->save($communityProfile)) { - $this->Flash->success(__('The community profile has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The community profile could not be saved. Please, try again.')); - } - $this->set(compact('communityProfile')); - } - - /** - * Delete method - * - * @param string|null $id Community Profile id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $communityProfile = $this->CommunityProfiles->get($id); - if ($this->CommunityProfiles->delete($communityProfile)) { - $this->Flash->success(__('The community profile has been deleted.')); - } else { - $this->Flash->error(__('The community profile could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/Component/GradidoNumberComponent.php b/community_server/src/Controller/Component/GradidoNumberComponent.php deleted file mode 100644 index 5db208c3a..000000000 --- a/community_server/src/Controller/Component/GradidoNumberComponent.php +++ /dev/null @@ -1,33 +0,0 @@ - 'error', 'type' => 'parameter error', 'msg' => 'session_id isn\'t numeric']; - } - if(!is_numeric($user_balance) || intval($user_balance) < 0) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'user_balance invalid']; - } - if(is_array($base64Message)) { - foreach($base64Message as $singleMessage) { - if(!$this->is_base64($singleMessage)) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'at least one base64Message contain invalid base64 characters']; - } - } - } else if(!$this->is_base64($base64Message)) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'base64Message contain invalid base64 characters']; - } - - return $this->sendRequest(json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => $base64Message, - 'balance' => $user_balance, - 'auto_sign' => $auto_sign, - 'blockchain_type' => $this->blockchainType - ]), '/checkTransaction'); - - } - - public function findePublicKeyForEmailHash($emailHash) { - //'ask' = ['account_publickey' => ''] - $results = $this->sendRequestLoginServerNeighbors(json_encode(['ask' => ['account_publickey' => $emailHash]]), 'search'); - } - - public function getRunningUserTasks($email) - { - if($email == "") { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'email is empty']; - } - if(!GenericValidation::email($email, [])) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'email is invalid']; - } - - return $this->sendRequest(json_encode([ - 'email' => $email - ]), '/getRunningUserTasks'); - } - - public function getUsers($session_id, $searchString, $accountState) - { - if($searchString == "") { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'search string is empty']; - } - if(!is_numeric($session_id)) { - return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'session_id isn\'t numeric']; - } - - return $this->sendRequest(json_encode([ - 'session_id' => $session_id, - 'search' => $searchString, - 'account_state' => $accountState, - ]), '/getUsers'); - } - - public function sendRequest($transactionBody, $url_last_part) { - $http = new Client(); - - $response = $http->post($this->getLoginServerUrl() . $url_last_part, $transactionBody, ['type' => 'json']); - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response status code isn\'t 200', 'details' => $responseStatus]; - } - //$responseType = $response->getType(); - //if($responseType != 'application/json') { -// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType]; -// } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - } - return ['state' => 'success', 'data' => $json]; - } - - public function sendRequestGDT($transactionBody, $url) { - - $http = new Client(); - $gdtServerHost = $this->getGDTServerUrl(); - if(!$gdtServerHost) { - return ['state' => 'warning', 'msg' => 'gdt server not configured']; - } - $fullUrl = $gdtServerHost . DS . $url; - $response = $http->post($this->getGDTServerUrl() . DS . $url, $transactionBody, ['type' => 'json']); - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - return [ - 'state' => 'error', - 'type' => 'request error', - 'msg' => 'server response status code isn\'t 200', - 'details' => $responseStatus, - 'fullUrl' => $fullUrl - ]; - } - //$responseType = $response->getType(); - //if($responseType != 'application/json') { -// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType]; -// } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - } - return ['state' => 'success', 'data' => $json]; - } - - public function sendRequestLoginServerNeighbors($transactionBody, $url) { - - $http = new Client(); - if(!Configure::check('NeighborLoginServers')) { - return ['state' => 'warning', 'msg' => 'no neighbor server configured']; - } - $nServers = Configure::read('NeighborLoginServers'); - $results = ['errors' => [], 'data' => []]; - foreach($nServers as $nServer) { - $full_url = $nServer['host'] . ':' . $nServer['port'] . '/' . $url; - $response = $http->post($full_url, $transactionBody, ['type' => 'json']); - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - $results['errors'][] = [ - 'state' => 'error', - 'type' => 'request error', - 'msg' => 'server response status code isn\'t 200', - 'details' => $responseStatus, - 'fullUrl' => $full_url - ]; - continue; - } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - $results['errors'][] = ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - continue; - } - $results['data'][] = $json; - } - return $results; - } - - static public function getLoginServerUrl() - { - $loginServer = Configure::read('LoginServer'); - return $loginServer['host'] . ':' . $loginServer['port']; - } - - static public function getGDTServerUrl() - { - $gdtServer = Configure::read('GDTServer'); - if(isset($gdtServer['host'])) { - return $gdtServer['host']; - } - return false; - } - - static public function is_base64($s) - { - return (bool) preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s); - } - -} diff --git a/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php b/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php deleted file mode 100644 index 504fc8fdd..000000000 --- a/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php +++ /dev/null @@ -1,83 +0,0 @@ -rpcClient = new JsonRpcClient(); - } - - // @param id: if id = 0 call rand for it - public function request($method, $params = [], $id = 0) - { - - if(0 == $id) { - $id = random_int(1, 12000); - } - $this->rpcClient->query($id, $method, $params); - - $message = $this->rpcClient->encode(); - return $this->sendRequest($message); - // message: {"jsonrpc":"2.0","method":"add","params":[1,2],"id":1} - } - - public function sendRequest($message) { - $http = new Client(); - - try { - $url = $this->pickGradidoNodeUrl(); - if(is_array($url)) { - return $url; - } - $response = $http->post($url, $message, ['type' => 'json']); - } catch(Exception $e) { - return ['state' => 'error', 'type' => 'http exception', 'details' => $e->getMessage()]; - } - $responseStatus = $response->getStatusCode(); - if($responseStatus != 200) { - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response status code isn\'t 200', 'details' => $responseStatus]; - } - //$responseType = $response->getType(); - //if($responseType != 'application/json') { -// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType]; -// } - $json = $response->getJson(); - if($json == null) { - //$responseType = $response->getType(); - return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json']; - } - return $json['result']; - //return ['state' => 'success', 'data' => $json]; - } - - static public function pickGradidoNodeUrl() - { - $gradidoNodes = Configure::read('GradidoBlockchain.nodes'); - if(count($gradidoNodes) == 0) { - return ['state' => 'error', 'msg' => 'no gradido nodes in config']; - } - $i = rand(0, count($gradidoNodes)-1); - return $gradidoNodes[$i]['host'] . ':' . $gradidoNodes[$i]['port']; - } - - -} - - diff --git a/community_server/src/Controller/DashboardController.php b/community_server/src/Controller/DashboardController.php deleted file mode 100644 index e25374821..000000000 --- a/community_server/src/Controller/DashboardController.php +++ /dev/null @@ -1,78 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->allow(['index', 'errorHttpRequest']); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', true)) - ); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $serverUser = $this->Auth->user('id'); - if($serverUser) { - $adminErrorsTable = TableRegistry::getTableLocator()->get('AdminErrors'); - $adminErrorCount = $adminErrorsTable->find('all')->count(); - $this->set('adminErrorCount', $adminErrorCount); - } - - $this->set('user', $user); - $this->set('serverUser', $serverUser); - $this->set('timeUsed', microtime(true) - $startTime); - - } - - public function serverIndex() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $adminErrorsTable = TableRegistry::getTableLocator()->get('AdminErrors'); - $adminErrorCount = $adminErrorsTable->find('all')->count(); - - $this->set('adminErrorCount', $adminErrorCount); - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function errorHttpRequest() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $this->set('timeUsed', microtime(true) - $startTime); - } - -} diff --git a/community_server/src/Controller/ElopageBuysController.php b/community_server/src/Controller/ElopageBuysController.php deleted file mode 100644 index e097eddbb..000000000 --- a/community_server/src/Controller/ElopageBuysController.php +++ /dev/null @@ -1,165 +0,0 @@ -paginate = [ - 'contain' => false, - ]; - $elopageBuys = $this->paginate($this->ElopageBuys); - - $this->set(compact('elopageBuys')); - } - - public function statistics() - { - $this->viewBuilder()->setLayout('frontend'); - $connection = ConnectionManager::get('loginServer'); - $dates = $connection->execute('SELECT success_date FROM elopage_buys group by CAST(success_date as DATE)')->fetchAll('assoc'); - - $datesTree = []; - foreach($dates as $i => $date) { - - $date = new Time($date['success_date']); - if(!isset($datesTree[$date->year])) { - $datesTree[$date->year] = []; - } - if(!isset($datesTree[$date->year][$date->month])) { - $datesTree[$date->year][$date->month] = true; - } - } - //var_dump($datesTree); - - $now = Time::now(); - $lastDay = Time::now(); - $lastDay->day = 1; - $now->day = 1; - $lastDay->setTime(0,0,0,0); - $now->setTime(0,0,0,0); - // only for test - $now->month = 11; - $lastDay->month = 11; - $now->year = 2019; - $lastDay->year = 2019; -// var_dump($now); - - $lastDay = $lastDay->addMonth(1); - $sortDate = $this->getStartEndForMonth(11, 2019); - $elopageBuys = $this->ElopageBuys - ->find('all') - ->where(['success_date >=' => $sortDate[0], 'success_date <' => $sortDate[1]]); - $users = []; - foreach($elopageBuys as $elopageEntry) { - array_push($users, $elopageEntry->payer_email); - } - $unique_users = array_unique($users); - - $userTable = TableRegistry::getTableLocator()->get('Users'); - $users = $userTable->find('all') - ->where(['created >=' => $sortDate[0], 'created <' => $sortDate[1]]); - - $this->set(compact('elopageBuys', 'users')); - } - - /** - * View method - * - * @param string|null $id Elopage Buy id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $elopageBuy = $this->ElopageBuys->get($id, [ - 'contain' => false, - ]); - - $this->set('elopageBuy', $elopageBuy); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $elopageBuy = $this->ElopageBuys->newEntity(); - if ($this->request->is('post')) { - $elopageBuy = $this->ElopageBuys->patchEntity($elopageBuy, $this->request->getData()); - if ($this->ElopageBuys->save($elopageBuy)) { - $this->Flash->success(__('The elopage buy has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The elopage buy could not be saved. Please, try again.')); - } - - $this->set(compact('elopageBuy')); - } - - /** - * Edit method - * - * @param string|null $id Elopage Buy id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $elopageBuy = $this->ElopageBuys->get($id, [ - 'contain' => false, - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $elopageBuy = $this->ElopageBuys->patchEntity($elopageBuy, $this->request->getData()); - if ($this->ElopageBuys->save($elopageBuy)) { - $this->Flash->success(__('The elopage buy has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The elopage buy could not be saved. Please, try again.')); - } - $this->set(compact('elopageBuy')); - } - - /** - * Delete method - * - * @param string|null $id Elopage Buy id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $elopageBuy = $this->ElopageBuys->get($id); - if ($this->ElopageBuys->delete($elopageBuy)) { - $this->Flash->success(__('The elopage buy has been deleted.')); - } else { - $this->Flash->error(__('The elopage buy could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/ElopageWebhookController.php b/community_server/src/Controller/ElopageWebhookController.php deleted file mode 100644 index 4e806fa69..000000000 --- a/community_server/src/Controller/ElopageWebhookController.php +++ /dev/null @@ -1,51 +0,0 @@ -Auth->allow(['put']); - - } - - public function put() - { - $this->autoRender = false; - $data = $this->request->getData(); - $response = $this->response->withType('text/plain'); - - $dataString = http_build_query($data); - //$this->recursiveArrayToString($data, $dataString); - // %5B => [ - // %5D => ] - $dataString = preg_replace(['/\%5B/', '/\%5D/'], ['[', ']'], $dataString); - //var_dump($dataString); - - //2020-02-27T13:52:32+01:00 - $dateString = date('c'); - $fh = fopen('/etc/grd_login/php_elopage_requests.txt', 'a'); - if($fh === FALSE) { - return $response->withStringBody('400 ERROR'); - } - fwrite($fh, $dateString); - fwrite($fh, "\n"); - fwrite($fh, $dataString); - fwrite($fh, "\n"); - fclose($fh); - - - return $response->withStringBody('200 OK'); - - } -} diff --git a/community_server/src/Controller/ErrorController.php b/community_server/src/Controller/ErrorController.php deleted file mode 100644 index c5421a24d..000000000 --- a/community_server/src/Controller/ErrorController.php +++ /dev/null @@ -1,70 +0,0 @@ -loadComponent('RequestHandler', [ - 'enableBeforeRedirect' => false, - ]); - } - - /** - * beforeFilter callback. - * - * @param \Cake\Event\Event $event Event. - * @return \Cake\Http\Response|null|void - */ - public function beforeFilter(Event $event) - { - } - - /** - * beforeRender callback. - * - * @param \Cake\Event\Event $event Event. - * @return \Cake\Http\Response|null|void - */ - public function beforeRender(Event $event) - { - parent::beforeRender($event); - $this->RequestHandler->renderAs($this, 'json'); - $this->viewBuilder()->setTemplatePath('Error'); - } - - /** - * afterFilter callback. - * - * @param \Cake\Event\Event $event Event. - * @return \Cake\Http\Response|null|void - */ - public function afterFilter(Event $event) - { - } -} diff --git a/community_server/src/Controller/JsonRequestHandlerController.php b/community_server/src/Controller/JsonRequestHandlerController.php deleted file mode 100644 index 611984118..000000000 --- a/community_server/src/Controller/JsonRequestHandlerController.php +++ /dev/null @@ -1,559 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->loadComponent('JsonRpcRequestClient'); - //$this->Auth->allow(['add', 'edit']); - $this->Auth->allow('index'); - } - - - public function index() - { - if($this->request->is('get')) { - $method = $this->request->getQuery('method'); - switch($method) { - case 'getRunningUserTasks': return $this->getRunningUserTasks(); - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for get', 'details' => $method]); - } - else if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode'); - //var_dump($jsonData); - if($jsonData == NULL || !isset($jsonData->method)) { - return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']); - } - $method = $jsonData->method; - - switch($method) { - case 'putTransaction': - if(!isset($jsonData->transaction)) { - return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']); - } else { - return $this->putTransaction($jsonData->transaction); - } - case 'userDelete': return $this->userDelete($jsonData->user); - case 'moveTransaction': return $this->moveTransaction($jsonData->pubkeys, $jsonData->memo, $jsonData->session_id); - case 'checkUser': return $this->checkUser($jsonData->email, $jsonData->last_name); - case 'getUsers' : return $this->getUsers($jsonData->page, $jsonData->limit); - case 'getUserBalance': return $this->getUserBalance($jsonData->email, $jsonData->last_name); - case 'errorInTransaction': return $this->errorInTransaction($jsonData); - case 'updateReadNode': return $this->updateReadNode(); - case 'addUser' : return $this->addUser($jsonData->user); - } - return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for post', 'details' => $method]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post or get']); - } - - private function addUser($newUser) - { - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $entity = $stateUsersTable->newEntity(); - $required_fields = ['first_name', 'last_name', 'email', 'public_key', 'disabled']; - foreach($required_fields as $required_field) { - if(!isset($newUser->$required_field)) { - return $this->returnJson(['state' => 'error', 'msg' => 'missing required field in addUser', 'details' => $required_field]); - } - if('public_key' == $required_field) { - $entity->$required_field = hex2bin($newUser->public_hex); - } else { - $entity->$required_field = $newUser->$required_field; - } - } - if($stateUsersTable->save($entity)) { - return $this->returnJson(['state' => 'success']); - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'error saving state_user', 'details' => $entity->getErrors()]); - } - } - - // Called from login server like a cron job every 10 minutes or after sending transaction to hedera - private function updateReadNode() - { - $this->autoRender = false; - $response = $this->response->withType('application/json'); - - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $last_transaction_query = $transactionsTable->find('all')->order(['id' => 'DESC']); - $last_transaction_id = 0; - if(!$last_transaction_query->isEmpty()) { - $last_transaction_id = $last_transaction_query->first()->id; - } - $last_known_sequence_number = $last_transaction_id; - - if($last_transaction_query->count() < $last_transaction_id) { - $last_transaction_id = $last_transaction_query->count(); - } - //$last_transaction_id = 0; - - - $group_alias = Configure::read('GroupAlias'); - $result = (array)$this->JsonRpcRequestClient->request('getTransactions', ['groupAlias' => $group_alias, 'lastKnownSequenceNumber' => $last_transaction_id]); - if(isset($result['state']) && $result['state'] == 'error') { - return $this->returnJson(['state' => 'error', 'msg' => 'jsonrpc error', 'details' => ['return' => $result, 'groupAlias' => $group_alias]]); - } - /* example - $result = json_decode("[ - { - \"record_type\":\"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"signature\":\"aed6725baacabf903e51f92503d49fa7e6b93c6402d56d9e3784be9a3366a77459213d858af46b579287aba8b1b63d206febce18bc80cec6fa63da6289e56403\" - }, - \"signature_count\":1, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392811, - \"nanos\":172812 - }, - \"runningHash\":\"f9ccf04137be418c3117a28bb5add6dced9745bcab74b7a2f46c182c8c98eeabf0127c131d15ebea7d0ac376f5d2de45\", - \"sequenceNumber\":94, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"ADD_USER\", - \"add_user\":{ - \"user\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\" - }, - \"result\":\"result\", - \"parts\":1, - \"memo\":\"\" - } - }, - { - \"record_type\":\"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"signature\":\"3134adcd6cbccee17c2db398f91b6b6bdd098b6306fb2fa213eb9eb5a322af9078acca4d8b0383d4e906f3139eb3369e7c1ef0f3ac5fec724be0d085ba44af0b\" - }, - \"signature_count\":2, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392886, - \"nanos\":1528 - }, - \"runningHash\":\"e1df5526331e3def11d6b652b8f248d20c250739b6eb98f1fe7b338901753d9d573a14601ba84f61318a48940b3c237a\", - \"sequenceNumber\":95, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"ADD_USER\", - \"add_user\":{ - \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\" - }, - \"result\":\"result\", - \"parts\":2, - \"memo\":\"\" - } - }, - { - \"record_type\":\"SIGNATURES\", - \"signature\":[ - { - \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"signature\":\"401717e768617c0f3311931c34a61e66ab362599a0e2a48ae7c4955645aec6573773985dafb84a11bfaf2bc12140c30b2f8c8ee094bc35d609bc56d15b4e9f04\" - } - ] - }, - { - \"record_type\": \"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"signature\":\"99665dee9f2b475e426a2f449d0dae61924f6cf025903666ff72f2c7ef1af27523ebcd5fb684d17813fe7906b2f8cfe5ef4bdbb264ebf3ef80363491d9b86807\" - }, - \"signature_count\":1, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392904, - \"nanos\":798541 - }, - \"runningHash\":\"f1fd03610a9788e9bac01e1efb8b99bafae450f9088cb940db954842e0799235c57d842be83d998e6c21786f77f967a7\", - \"sequenceNumber\":96, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"GRADIDO_CREATION\", - \"gradido_creation\":{ - \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"new_balance\":10000000, - \"prev_transfer_rec_num\":0, - \"amount\":10000000 - }, - \"result\":\"result\", - \"parts\":1, - \"memo\":\"\" - } - }, - { - \"record_type\": \"GRADIDO_TRANSACTION\", - \"transaction\":{ - \"version_number\":1, - \"signature\":{ - \"pubkey\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"signature\":\"90125e0cfce61397d50ed9ba6c5df4cd4e0cf6fee8b10c70fee2898765982570d9a1208c222981429ae3c229e3fd36c2bf2333518cd0a4f0515937822e499d0b\" - }, - \"signature_count\":1, - \"hedera_transaction\":{ - \"consensusTimestamp\":{ - \"seconds\":1604392929, - \"nanos\":52539 - }, - \"runningHash\":\"a4be8f54be4f806b61d31f6bd770d7742822f14f03ffe09c07f08bac3031a06d12de5e38fec5c307149c7faf6e9879b8\", - \"sequenceNumber\":97, - \"runningHashVersion\":3 - }, - \"transaction_type\":\"LOCAL_TRANSFER\", - \"local_transfer\":{ - \"sender\":{ - \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\", - \"new_balance\":9825500, - \"prev_transfer_rec_num\":0 - }, - \"receiver\":{ - \"user\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\", - \"new_balance\":174500, - \"prev_transfer_rec_num\":0 - }, - \"amount\":174500 - }, - \"result\":\"result\", - \"parts\":1, - \"memo\":\"\" - } - } -]", true);*/ - $part_count = -1; - $temp_record = new Record; - $errors = []; - foreach($result['blocks'] as $_record) { - if(is_string($_record)) continue; - $parse_result = $temp_record->parseRecord($_record); - - if($parse_result == true) { - $sequenceNumber = $temp_record->getSequenceNumber(); - if($part_count == -1) { - $part_count = $temp_record->getPartCount(); - } - $part_count--; - - if($part_count == 0) { - if($sequenceNumber > $last_known_sequence_number) { - $finalize_result = $temp_record->finalize(); - if($finalize_result !== true) { - $errors[] = ['msg' => 'error in finalize', 'record' => $_record, 'details' => $finalize_result, 'sequenceNumber' => $sequenceNumber]; - } - } - - $temp_record = new Record; - $part_count = -1; - } - } else { - $temp_record = new Record; - $part_count = -1; - $errors[] = ['msg' => 'error in parse record', 'record' => $_record, 'details' => $parse_result]; - } - } - if(count($errors)) { - return $this->returnJson(['state' => 'error', 'msg' => 'error in parsing records', 'details' => $errors]); - } - return $this->returnJson(['state' => 'success']); - } - - /* - * payload.set("created", created); - * payload.set("id", task_model->getID()); - * payload.set("type", task_model->getTaskTypeString()); - * payload.set("public_key", user_model->getPublicKeyHex()); - * payload.set("error", error); - * payload.set("errorMessage", errorDetails); - */ - //! \param $transactionCreated creation of transaction in timestamp in seconds - //! -1 if transaction couldn't decode - //! \param $transactionBodyBase64Sha256 generic hash from transaction body serialized and converted to base64 - //! using sodium_crypto_generichash to calculate - // hash also in base64 format - //! \param $error short error name in user language - //! \param $errorDetails more detailed error message in user language - private function errorInTransaction($jsonData) { - $stateErrorTable = TableRegistry::getTableLocator()->get('StateErrors'); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $transactionTypesTable = TableRegistry::getTableLocator()->get('TransactionTypes'); - $stateError = $stateErrorTable->newEntity(); - // - $pubkey = hex2bin($jsonData->public_key); - $user_query = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $pubkey]); - if($user_query->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'user pubkey hex:' . $jsonData->public_key]); - } - $stateError->state_user_id = $user_query->first()->id; - //$stateError->transaction_type_id - // TODO: - // - show state errors in navi_notify.ctp - $transaction_type_query = $transactionTypesTable->find('all')->select(['id'])->where(['name' => $jsonData->type]); - if($transaction_type_query->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'transaction type not found', 'details' => 'transaction type name: ' . $jsonData->type]); - } - $stateError->transaction_type_id = $transaction_type_query->first()->id; - $stateError->created = $jsonData->created; - $stateError->message_json = json_encode(['task_id' => $jsonData->id, 'error' => $jsonData->error, 'errorMessage' => $jsonData->errorMessage]); - if(!$stateErrorTable->save($stateError)) { - $this->returnJsonSaveError($stateError, [ - 'state' => 'error', - 'msg' => 'error saving state_error in db', - 'details' => json_encode($stateError->getErrors()) - ]); - } - return $this->returnJson(['state' => 'success']); - } - - private function sendEMailTransactionFailed($transaction, $reason_type) - { - $disable_email = Configure::read('disableEmail', false); - if($disable_email) { - return; - } - $transaction_body = $transaction->getTransactionBody(); - $senderUser = $transaction->getFirstSigningUser(); - if($transaction_body != null) { - $transaction_type_name = $transaction_body->getTransactionTypeName(); - - if($transaction_type_name === 'transfer') { - $senderUser = $transaction_body->getSpecificTransaction()->getSenderUser(); - } - } - // send notification email - $noReplyEmail = Configure::read('noReplyEmail'); - if($senderUser) { - try { - $email = new Email(); - $emailViewBuilder = $email->viewBuilder(); - $emailViewBuilder->setTemplate('notificationTransactionFailed') - ->setVars(['user' => $senderUser, 'transaction' => $transaction, 'reason' => $reason_type]); - $receiverNames = $senderUser->getNames(); - if($receiverNames == '' || $senderUser->email == '') { - $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $senderUser->id); - return false; - } - $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)']) - ->setTo([$senderUser->email => $senderUser->getNames()]) - ->setSubject(__('Gradido Transaktion fehlgeschlagen!')) - ->send(); - } catch(Exception $e) { - $this->addAdminError('JsonRequestController', 'sendEMailTransactionFailed', [$e->getMessage(), $reason_type], $senderUser->id); - - } - } - } - - private function putTransaction($transactionBase64) { - $transaction = new Transaction($transactionBase64); - - if($transaction->hasErrors()) { - $this->sendEMailTransactionFailed($transaction, 'parse'); - return $this->returnJson(['state' => 'error', 'msg' => 'error parsing transaction', 'details' => $transaction->getErrors()]); - } - - if(!$transaction->validate()) { - //$transaction_details - $this->sendEMailTransactionFailed($transaction, 'validate'); - return $this->returnJsonSaveError($transaction, [ - 'state' => 'error', - 'msg' => 'error validate transaction', - 'details' => $transaction->getErrors() - ]); - } - - if ($transaction->save()) { - $result = ['state' => 'success']; - if($transaction->hasWarnings()) { - $result['warnings'] = $transaction->getWarnings(); - } - // success - return $this->returnJson($result); - } else { - - $this->sendEMailTransactionFailed($transaction, 'save'); - return $this->returnJsonSaveError($transaction, [ - 'state' => 'error', - 'msg' => 'error saving transaction in db', - 'details' => json_encode($transaction->getErrors()) - ]); - } - } - - private function moveTransaction($pubkeys, $memo, $session_id) { - //$pubkeys->sender - //$pubkeys->receiver - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $user = $stateUserTable->find('all')->where(['public_key' => hex2bin($pubkeys->sender)])->contain(['StateBalances']); - if(!$user->count()) { - return $this->returnJson(['state' => 'not found', 'msg' => 'user not found or empty balance']); - } - $amountCent = $user->first()->state_balances[0]->amount; - //var_dump($user->first()); - $builderResult = TransactionTransfer::build( - $amountCent, - $memo, - $pubkeys->receiver, - $pubkeys->sender - ); - if($builderResult['state'] === 'success') { - - $http = new Client(); - try { - $loginServer = Configure::read('LoginServer'); - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->post($url . '/checkTransaction', json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()), - 'balance' => $amountCent - ]), ['type' => 'json']); - $json = $response->getJson(); - if($json['state'] != 'success') { - if($json['msg'] == 'session not found') { - return $this->returnJson(['state' => 'error', 'msg' => 'session not found']); - } else { - //$this->Flash->error(__('login server return error: ' . json_encode($json))); - return $this->returnJson(['state' => 'error', 'msg' => 'login server return error', 'details' => $json]); - } - } else { - return $this->returnJson(['state' => 'success']); - } - - } catch(\Exception $e) { - $msg = $e->getMessage(); - //$this->Flash->error(__('error http request: ') . $msg); - return $this->returnJson(['state' => 'error', 'msg' => 'error http request', 'details' => $msg]); - } - - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'error building transaction']); - } - } - - private function userDelete($userPubkeyHex) { - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $user = $stateUserTable->find('all')->where(['public_key' => hex2bin($userPubkeyHex)]); - if(!$user || $user->count == 0) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found']); - } - - } - - private function checkUser($email, $last_name) { - $userTable = TableRegistry::getTableLocator()->get('Users'); - $user = $userTable->find('all') - ->where(['email' => $email]) - ->contain([]) - ->select(['first_name', 'last_name', 'email']); - if(!$user->count()) { - return $this->returnJson(['state' => 'not found', 'msg' => 'user not found']); - } - if($user->count() == 1 && $user->first()->last_name == $last_name) { - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'not identical', 'user' => $user->toArray()]); - } - - private function getUserBalance($email, $last_name) { - - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateUsers = $stateUserTable->find('all')->where(['OR' => ['email' => $email, 'last_name' => $last_name]])->contain(['StateBalances']); - $gdds = []; - foreach($stateUsers as $stateUser) { - foreach($stateUser->state_balances as $stateBalance) { - if(!isset($gdds[$stateUser->email])) { - $gdds[$stateUser->email] = []; - } - if(!isset($gdds[$stateUser->email][$stateUser->last_name])) { - $gdds[$stateUser->email][$stateUser->last_name] = 0; - } - $gdds[$stateUser->email][$stateUser->last_name] += $stateBalance->amount; - } - } - return $this->returnJson(['state' => 'success', 'gdds' => $gdds]); - } - - private function getUsers($page, $count) { - - $userTable = TableRegistry::getTableLocator()->get('Users'); - $this->paginate = [ - 'limit' => $count, - 'page' => $page - ]; - $usersQuery = $userTable->find('all') - ->select(['first_name', 'last_name', 'email']) - ->order(['id']); - try { - return $this->returnJson(['state' => 'success', 'users' => $this->paginate($usersQuery)]); - } catch (Exception $ex) { - return $this->returnJson(['state' => 'exception', 'msg' => 'error paginate users', 'details' => $ex->getMessage()]); - } - - - //return $this->returnJson(['state' => 'success', 'users' => $users->toArray()]); - - } - - private function getRunningUserTasks() { - $session = $this->getRequest()->getSession(); - $state_user_email = $session->read('StateUser.email'); - $requestResult = $this->JsonRequestClient->getRunningUserTasks($state_user_email);; - return $this->returnJson($requestResult); - } - - - private function returnJsonSaveError($transaction, $errorArray) { - $json = json_encode($errorArray); - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $pub = $transaction->getFirstPublic(); - $stateUserQuery = $stateUserTable - ->find('all') - ->where(['public_key' => $pub]) - ->contain(false); - if($stateUserQuery->count() == 1) { - $stateErrorsTable = TableRegistry::getTableLocator()->get('StateErrors'); - $stateErrorEntity = $stateErrorsTable->newEntity(); - $stateErrorEntity->state_user_id = $stateUserQuery->first()->id; - $stateErrorEntity->transaction_type_id = $transaction->getTransactionBody()->getTransactionTypeId(); - $stateErrorEntity->message_json = $json; - $stateErrorsTable->save($stateErrorEntity); - } else { - $errorArray['user_error'] = "user with $pub not found"; - $json = json_encode($errorArray); - } - - return $this->returnJsonEncoded($json); - } - - - -} diff --git a/community_server/src/Controller/OperatorTypesController.php b/community_server/src/Controller/OperatorTypesController.php deleted file mode 100644 index 41db53f53..000000000 --- a/community_server/src/Controller/OperatorTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->OperatorTypes); - - $this->set(compact('operatorTypes')); - } - - /** - * View method - * - * @param string|null $id Operator Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $operatorType = $this->OperatorTypes->get($id, [ - 'contain' => ['Operators'] - ]); - - $this->set('operatorType', $operatorType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $operatorType = $this->OperatorTypes->newEntity(); - if ($this->request->is('post')) { - $operatorType = $this->OperatorTypes->patchEntity($operatorType, $this->request->getData()); - if ($this->OperatorTypes->save($operatorType)) { - $this->Flash->success(__('The operator type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator type could not be saved. Please, try again.')); - } - $this->set(compact('operatorType')); - } - - /** - * Edit method - * - * @param string|null $id Operator Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $operatorType = $this->OperatorTypes->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $operatorType = $this->OperatorTypes->patchEntity($operatorType, $this->request->getData()); - if ($this->OperatorTypes->save($operatorType)) { - $this->Flash->success(__('The operator type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator type could not be saved. Please, try again.')); - } - $this->set(compact('operatorType')); - } - - /** - * Delete method - * - * @param string|null $id Operator Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $operatorType = $this->OperatorTypes->get($id); - if ($this->OperatorTypes->delete($operatorType)) { - $this->Flash->success(__('The operator type has been deleted.')); - } else { - $this->Flash->error(__('The operator type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/OperatorsController.php b/community_server/src/Controller/OperatorsController.php deleted file mode 100644 index 974151a7b..000000000 --- a/community_server/src/Controller/OperatorsController.php +++ /dev/null @@ -1,236 +0,0 @@ -Auth->allow(['ajaxSave', 'ajaxLoad', 'ajaxDelete']); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['OperatorTypes'] - ]; - $operators = $this->paginate($this->Operators); - - $this->set(compact('operators')); - } - - public function ajaxSave() - { - if ($this->request->is('post')) { - - $operatorTypeName = $this->request->getData('operator_type_name'); - $username = $this->request->getData('username'); - $pubkey_bin = base64_decode($this->request->getData('user_pubkey')); - $data = base64_decode($this->request->getData('data_base64')); - $sign = base64_decode($this->request->getData('sign')); - - //$publicKey_hex = bin2hex($pubkey_bin); - //$signature_hex = bin2hex($sign); - - if(!sodium_crypto_sign_verify_detached($sign, $data, $pubkey_bin)) { - return $this->returnJson([ - 'state' => 'wrong signature', - /* 'details' => [ - 'pubkey' => $publicKey_hex, - 'sign' => $signature_hex, - 'data' => bin2hex($data) - ] -*/ - ]); - } - - $operatorTypeId = $this->Operators->OperatorTypes-> - find() - ->where(['name' => $operatorTypeName]) - ->select(['id']) - ->first(); - - // load operator from db if already exist - $operator = $this->Operators - ->find() - ->where([ - 'operator_type_id' => $operatorTypeId->id, - 'username' => $username, - 'user_pubkey' => $pubkey_bin]) - ->first(); - if(!$operator) { - // create new entity - $operator = $this->Operators->newEntity(); - } else { - // check if request has valid signature - - } - - $operator = $this->Operators->patchEntity($operator, $this->request->getData()); - $operator->user_pubkey = $pubkey_bin; - $operator->operator_type_id = $operatorTypeId->id; - if ($this->Operators->save($operator)) { - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'error', 'details' => $operator->getErrors()]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxLoad() - { - if ($this->request->is('get')) { - $username = $this->request->getQuery('username'); - $operators = $this->Operators - ->find() - ->where(['username' => $username]) - ->contain(['OperatorTypes']) - ->select(['data_base64', 'OperatorTypes.name']) - ->toArray(); - ; - if($operators) { - return $this->returnJson(['state' => 'success', 'operators' => $operators]); - } else { - return $this->returnJson(['state' => 'not found']); - } - - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - function ajaxDelete() { - if ($this->request->is('delete')) { - $operatorTypeName = $this->request->getData('operator_type_name'); - $username = $this->request->getData('username'); - $pubkey_bin = base64_decode($this->request->getData('user_pubkey')); - $sign = base64_decode($this->request->getData('sign')); - - $operatorTypeId = $this->Operators->OperatorTypes-> - find() - ->where(['name' => $operatorTypeName]) - ->select(['id']) - ->first(); - - // load operator from db if already exist - $operator = $this->Operators - ->find() - ->where([ - 'operator_type_id' => $operatorTypeId->id, - 'username' => $username, - 'user_pubkey' => $pubkey_bin]) - ->first(); - if(!$operator) { - return $this->returnJson(['state' => 'error', 'msg' => 'not found']); - } else { - $data = base64_decode($operator->data_base64); - // check if request has valid signature - if(!sodium_crypto_sign_verify_detached($sign, $data, $pubkey_bin)) { - return $this->returnJson(['state' => 'error', 'msg' => 'wrong signature']); - } - } - if ($this->Operators->delete($operator)) { - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'error', 'details' => $operator->getErrors()]); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - /** - * View method - * - * @param string|null $id Operator id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $operator = $this->Operators->get($id, [ - 'contain' => ['OperatorTypes'] - ]); - - $this->set('operator', $operator); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $operator = $this->Operators->newEntity(); - if ($this->request->is('post')) { - $operator = $this->Operators->patchEntity($operator, $this->request->getData()); - if ($this->Operators->save($operator)) { - $this->Flash->success(__('The operator has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator could not be saved. Please, try again.')); - } - $operatorTypes = $this->Operators->OperatorTypes->find('list', ['limit' => 200]); - $this->set(compact('operator', 'operatorTypes')); - } - - /** - * Edit method - * - * @param string|null $id Operator id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $operator = $this->Operators->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $operator = $this->Operators->patchEntity($operator, $this->request->getData()); - if ($this->Operators->save($operator)) { - $this->Flash->success(__('The operator has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The operator could not be saved. Please, try again.')); - } - $operatorTypes = $this->Operators->OperatorTypes->find('list', ['limit' => 200]); - $this->set(compact('operator', 'operatorTypes')); - } - - /** - * Delete method - * - * @param string|null $id Operator id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $operator = $this->Operators->get($id); - if ($this->Operators->delete($operator)) { - $this->Flash->success(__('The operator has been deleted.')); - } else { - $this->Flash->error(__('The operator could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/PagesController.php b/community_server/src/Controller/PagesController.php deleted file mode 100644 index 69f57356b..000000000 --- a/community_server/src/Controller/PagesController.php +++ /dev/null @@ -1,86 +0,0 @@ -Auth->allow(['display']); - } - - /** - * Displays a view - * - * @param array ...$path Path segments. - * @return \Cake\Http\Response|null - * @throws \Cake\Http\Exception\ForbiddenException When a directory traversal attempt. - * @throws \Cake\Http\Exception\NotFoundException When the view file could not - * be found or \Cake\View\Exception\MissingTemplateException in debug mode. - */ - public function display(...$path) - { - - $count = count($path); - if (!$count) { - return $this->redirect('/'); - } - if (in_array('..', $path, true) || in_array('.', $path, true)) { - throw new ForbiddenException(); - } - $page = $subpage = null; - - if (!empty($path[0])) { - $page = $path[0]; - } - if (!empty($path[1])) { - $subpage = $path[1]; - } - /*$session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $login_server_session = $this->request->getCookie('GRADIDO_LOGIN', '');*/ - if($page == "vue" || $page == "vue-dev") { - $this->viewBuilder()->setLayout(false); - } - $this->set(compact('page', 'subpage')); - - try { - $this->render(implode('/', $path)); - } catch (MissingTemplateException $exception) { - if (Configure::read('debug')) { - throw $exception; - } - throw new NotFoundException(); - } - } -} diff --git a/community_server/src/Controller/ProfileController.php b/community_server/src/Controller/ProfileController.php deleted file mode 100644 index 2a378e076..000000000 --- a/community_server/src/Controller/ProfileController.php +++ /dev/null @@ -1,206 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->Auth->allow(['index', 'edit']); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Mein Profil'), 'Profile', 'index', true)) - ); - } - /** - * Get binary file data from request data - * - * @return binary data - */ - protected function getFileData($requestData) - { - $binaryFileData = null; - // Get a list of UploadedFile objects - $file = $requestData['profile_img']; - // Read the file data. - $type = $file['type']; - $error = $file['error']; - if ($error === 0 && strpos($type, 'image/') === 0) { - $path = new File($file['tmp_name']); - $binaryFileData = $path->read(true, 'r'); - $this->log("binaryFileData: ".$binaryFileData, 'debug'); - } - return $binaryFileData; - } - /** - * Update Profile Data - * - * ...which is spread over two tables, plus needs to be promoted to the Login Server. - * - * @throws Exception - */ - protected function updateProfileData($requestData, $userId, $communityProfile) - { - // Update Profile with Form Data! - $usersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateUserQuery = $usersTable - ->find('all') - ->select(['id', 'first_name', 'last_name']) - ->where(['id' => $userId]); - - if ($stateUserQuery->count() == 1) { - $stateUser = $stateUserQuery->first(); - $stateUser = $usersTable->patchEntity($stateUser, $requestData); - - $profilesTable = TableRegistry::getTableLocator()->get('CommunityProfiles'); - // Save old binary data, because the file input is always empty, in HTML! - $oldBinaryData = $communityProfile['profile_img']; - - $communityProfile = $profilesTable->patchEntity($communityProfile, $requestData); - $communityProfile['state_user_id'] = $userId; - - $binaryFileData = $this->getFileData($requestData); - if ($binaryFileData !== null) { - $this->log("CommunityProfile: Writing binary img data.", 'debug'); - $communityProfile['profile_img'] = $binaryFileData; - } else { - $this->log("CommunityProfile: Nothing uploaded!", 'debug'); - $communityProfile['profile_img'] = $oldBinaryData; - } - if ($profilesTable->save($communityProfile) && - $usersTable->save($stateUser) - ) { - $session = $this->getRequest()->getSession(); - $session_id = $session->read('session_id'); - $email = $session->read('StateUser.email'); - $this->returnJson( - $this->JsonRequestClient->sendRequest( - json_encode( - [ - 'session_id' => $session_id, - 'email' => $email, - 'update' => [ - 'User.first_name' => $requestData['first_name'], - 'User.last_name' => $requestData['last_name'] - ] - ] - ), - '/updateUserInfos' - ) - ); - $this->Flash->success(__('Dein Profil wurde aktualisiert!')); - } - } else { - $this->Flash->error(__("Non-recoverable database problem - state_user doesn't exist or not unique!")); - } - return [$stateUser, $communityProfile]; - } - /** - * Get or create CommunityProfile - * - * @return \Cake\ORM\CommunityProfile - */ - protected function getCommunityProfile($userId) - { - $profilesTable = TableRegistry::getTableLocator()->get('CommunityProfiles'); - $communityProfileQuery = $profilesTable - ->find('all') - ->select(['id', 'profile_img', 'profile_desc']) - ->where(['state_user_id' => $userId]); - if ($communityProfileQuery->count() != 1) { - $communityProfile = $profilesTable->newEntity(); - if ($profilesTable->save($communityProfile)) { - $this->log("CommunityProfile created.", 'debug'); - } - } else { - $communityProfile = $communityProfileQuery->first(); - } - return $communityProfile; - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $communityProfile = $session->read('CommunityProfile'); - if (!$communityProfile) { - $this->log("CommunityProfile not found in session! Loading or creating new one.", 'debug'); - $session->write('CommunityProfile', $this->getCommunityProfile($user['id'])); - } - $this->set('user', $user); - $this->set('communityProfile', $communityProfile); - $this->set('timeUsed', microtime(true) - $startTime); - } - /** - * Edit method - * - * @return \Cake\Http\Response|null - */ - public function edit() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - - $user = $session->read('StateUser'); - $communityProfile = $session->read('CommunityProfile'); - if (!$user) { - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - if (!$communityProfile) { - $this->log("CommunityProfile not found in session! Loading or creating new one.", 'debug'); - $session->write('CommunityProfile', $this->getCommunityProfile($user['id'])); - } - - $profileForm = new ProfileForm(); - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - if ($profileForm->validate($requestData)) { - [$stateUser, $communityProfile] = $this->updateProfileData($requestData, $user['id'], $communityProfile); - $user['first_name'] = $stateUser['first_name']; - $user['last_name'] = $stateUser['last_name']; - $session->write('StateUser.first_name', $stateUser['first_name']); - $session->write('StateUser.last_name', $stateUser['last_name']); - $session->write('CommunityProfile', $communityProfile); - return $this->redirect(['action' => 'index']); - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - } - $this->set('user', $user); - $this->set('communityProfile', $communityProfile); - $this->set('profileForm', $profileForm); - $this->set('timeUsed', microtime(true) - $startTime); - } -} diff --git a/community_server/src/Controller/RolesController.php b/community_server/src/Controller/RolesController.php deleted file mode 100644 index 80aa493d3..000000000 --- a/community_server/src/Controller/RolesController.php +++ /dev/null @@ -1,108 +0,0 @@ -paginate($this->Roles); - - $this->set(compact('roles')); - } - - /** - * View method - * - * @param string|null $id Role id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $role = $this->Roles->get($id, [ - 'contain' => [], - ]); - - $this->set('role', $role); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $role = $this->Roles->newEntity(); - if ($this->request->is('post')) { - $role = $this->Roles->patchEntity($role, $this->request->getData()); - if ($this->Roles->save($role)) { - $this->Flash->success(__('The role has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The role could not be saved. Please, try again.')); - } - $this->set(compact('role')); - } - - /** - * Edit method - * - * @param string|null $id Role id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $role = $this->Roles->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $role = $this->Roles->patchEntity($role, $this->request->getData()); - if ($this->Roles->save($role)) { - $this->Flash->success(__('The role has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The role could not be saved. Please, try again.')); - } - $this->set(compact('role')); - } - - /** - * Delete method - * - * @param string|null $id Role id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $role = $this->Roles->get($id); - if ($this->Roles->delete($role)) { - $this->Flash->success(__('The role has been deleted.')); - } else { - $this->Flash->error(__('The role could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/ServerUsersController.php b/community_server/src/Controller/ServerUsersController.php deleted file mode 100644 index 7255eee0f..000000000 --- a/community_server/src/Controller/ServerUsersController.php +++ /dev/null @@ -1,132 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->deny('index'); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $serverUsers = $this->paginate($this->ServerUsers); - $this->set(compact('serverUsers')); - } - - public function login() - { - $startTime = microtime(true); - if ($this->request->is('post')) { - $user = $this->Auth->identify(); - if ($user) { - $this->Auth->setUser($user); - return $this->redirect($this->Auth->redirectUrl()); - } - $this->Flash->error(__('Invalid username or password, try again')); - } - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function logout() - { - return $this->redirect($this->Auth->logout()); - } - - /** - * View method - * - * @param string|null $id Server User id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $serverUser = $this->ServerUsers->get($id, [ - 'contain' => [] - ]); - - $this->set('serverUser', $serverUser); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $serverUser = $this->ServerUsers->newEntity(); - if ($this->request->is('post')) { - $serverUser = $this->ServerUsers->patchEntity($serverUser, $this->request->getData()); - if ($this->ServerUsers->save($serverUser)) { - $this->Flash->success(__('The server user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The server user could not be saved. Please, try again.')); - } - $this->set(compact('serverUser')); - } - - /** - * Edit method - * - * @param string|null $id Server User id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $serverUser = $this->ServerUsers->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $serverUser = $this->ServerUsers->patchEntity($serverUser, $this->request->getData()); - if ($this->ServerUsers->save($serverUser)) { - $this->Flash->success(__('The server user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The server user could not be saved. Please, try again.')); - } - $this->set(compact('serverUser')); - } - - /** - * Delete method - * - * @param string|null $id Server User id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $serverUser = $this->ServerUsers->get($id); - if ($this->ServerUsers->delete($serverUser)) { - $this->Flash->success(__('The server user has been deleted.')); - } else { - $this->Flash->error(__('The server user could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateBalancesController.php b/community_server/src/Controller/StateBalancesController.php deleted file mode 100644 index 249b6cb06..000000000 --- a/community_server/src/Controller/StateBalancesController.php +++ /dev/null @@ -1,399 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->allow(['overview', 'overviewGdt', 'ajaxListTransactions', 'ajaxGdtOverview', 'ajaxGetBalance', 'ajaxGdtTransactions']); - $this->loadComponent('JsonRequestClient'); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['StateUsers'] - ]; - $stateBalances = $this->paginate($this->StateBalances); - - $this->set(compact('stateBalances')); - } - - - - public function overview() - { - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Kontoübersicht'), 'StateBalances', 'overview', true)) - ); - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - - $user = $session->read('StateUser'); - $update_balance_result = $this->StateBalances->updateBalances($user['id']); - if($update_balance_result['success'] !== true) { - $this->addAdminError('StateBalances', 'overview', $update_balance_result, $user['id']); - } - - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - - $stateBalancesTable->updateBalances($user['id']); - $gdtSum = 0; - $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi'); - if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) { - $gdtSum = intval($gdtEntries['data']['sum']); - } else { - $this->addAdminError('StateBalancesController', 'overview', $gdtEntries, $user['id'] ? $user['id'] : 0); - } - - - $stateUserTransactionsQuery = $stateUserTransactionsTable - ->find() - ->where(['state_user_id' => $user['id']]) - ->order(['balance_date' => 'ASC']) - ->contain([]) - ; - $decay = true; - $transactions = []; - if($stateUserTransactionsQuery->count() > 0) { - $transactions_with_decay = $transactionsTable->listTransactionsHumanReadable($stateUserTransactionsQuery->toArray(), $user, $decay); - foreach($transactions_with_decay as $tr) { - if(isset($tr['decay'])) { - $tr['decay']['type'] = 'decay'; - $tr['decay']['memo'] = ''; - $transactions[] = $tr['decay']; - } - $transactions[] = $tr; - } - } - - $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $user['id']])->first(); - - $body = [ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transactions.executing'), - 'count' => count($transactions), - 'gdtSum' => $gdtSum, - 'timeUsed' => microtime(true) - $startTime - ]; - $now = new FrozenTime(); - $body['decay_date'] = $now; - - if(!$state_balance) { - $balance = 0.0; - } else { - $balance = $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now); - //$balance = $state_balance->partDecay($now); - } - $calculated_balance = 0; - foreach($transactions as $transaction) { - if($transaction['type'] == 'decay' || $transaction['type'] == 'send') { - $calculated_balance -= $transaction['balance']; - } else { - $calculated_balance += $transaction['balance']; - } - } - - $this->set('calculated_balance', $calculated_balance); - - $this->set('transactions', array_reverse($transactions)); - $this->set('transactionExecutingCount', $session->read('Transactions.executing')); - $this->set('balance', $balance); - $this->set('timeUsed', microtime(true) - $startTime); - $this->set('gdtSum', $gdtSum); - } - - - public function ajaxGdtOverview() - { - $gdtSum = 0; - $gdtCount = -1; - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi'); - - if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) { - $gdtSum = intval($gdtEntries['data']['sum']); - if(isset($gdtEntries['data']['count'])) { - $gdtCount = intval($gdtEntries['data']['count']); - } - } else { - if($user) { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, $user['id']); - } else { - $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, 0); - } - } - - return $this->returnJson([ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transaction.executing'), - 'count' => $all_user_transactions_count - ]); - } - - - public function overviewGdt() - { - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('GDT Kontoübersicht'), 'StateBalances', 'overviewGdt', true)) - ); - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - $requestResult = $this->JsonRequestClient->sendRequestGDT([ - 'email' => $user['email'], - 'page' => 1, - 'count' => 100, - 'orderDirection' => 'DESC' - ], 'GdtEntries' . DS . 'listPerEmailApi'); - - //var_dump($requestResult); - if('success' === $requestResult['state'] && 'success' === $requestResult['data']['state']) - { - $moreEntrysAsShown = false; - if(isset($requestResult['data']['count'])) { - if($requestResult['data']['count'] > 100) { - $moreEntrysAsShown = true; - } - } else { - $moreEntrysAsShown = $requestResult['data']['moreEntrysAsShown']; - } - //var_dump(array_keys($requestResult['data'])); - if(isset($requestResult['data']['gdtEntries'])) { - $ownEntries = $requestResult['data']['gdtEntries']; - } else { - $ownEntries = $requestResult['data']['ownEntries']; - } - //$gdtEntries = $requestResult['data']['entries']; - - $gdtSum = 0; - foreach ($ownEntries as $i => $gdtEntry) { - $gdtSum += $gdtEntry['gdt']; - //echo "index: $i
    "; - //var_dump($gdtEntry); - } - if (isset($requestResult['data']['connectEntrys'])) { - $connectEntries = $requestResult['data']['connectEntrys']; - - foreach ($connectEntries as $entry) { - //if(!$count) var_dump($entry); - //$count++; - $gdtSum += $entry['connect']['gdt_entry']['gdt']; - } - $this->set('connectEntries', $connectEntries); - } - - //echo "gdtSum: $gdtSum
    "; - $this->set('gdtSum', $gdtSum); - $this->set('ownEntries', $ownEntries); - $this->set('moreEntrysAsShown', $moreEntrysAsShown); - $this->set('user', $user); - - if (isset($requestResult['data']['publishers'])) { - $publishers = $requestResult['data']['publishers']; - $this->set('publishers', $publishers); - } - } else { - $this->addAdminError('StateBalancesController', 'overviewGdt', $requestResult, $user['id']); - $this->Flash->error(__('Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!')); - } - } - - public function ajaxGdtTransactions() - { - $startTime = microtime(true); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - - $requestResult = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'listPerEmailApi'); - $connectEntries = []; - $publishers = []; - - //var_dump($requestResult); - if('success' === $requestResult['state'] && 'success' === $requestResult['data']['state']) { - - //var_dump(array_keys($requestResult['data'])); - $ownEntries = $requestResult['data']['ownEntries']; - //$gdtEntries = $requestResult['data']['entries']; - - $gdtSum = 0; - foreach ($ownEntries as $i => $gdtEntry) { - $gdtSum += $gdtEntry['gdt']; - //echo "index: $i
    "; - //var_dump($gdtEntry); - } - if (isset($requestResult['data']['connectEntrys'])) { - $connectEntries = $requestResult['data']['connectEntrys']; - - foreach ($connectEntries as $entry) { - //if(!$count) var_dump($entry); - //$count++; - $gdtSum += $entry['connect']['gdt_entry']['gdt']; - } - } - - //echo "gdtSum: $gdtSum
    "; - - if (isset($requestResult['data']['publishers'])) { - $publishers = $requestResult['data']['publishers']; - } - } else { - $this->addAdminError('StateBalancesController', 'ajaxGdtTransactions', $requestResult, $user['id']); - //$this->Flash->error(__('Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!')); - return $this->returnJson(['state' => 'error', 'msg' => 'error from gdt server', 'details' => $requestResult]); - } - - - return $this->returnJson([ - 'state' => 'success', - 'gdtSum' => $gdtSum, - 'ownEntries' => $ownEntries, - 'connectEntries' => $connectEntries, - 'publishers' => $publishers, - 'gdtSumPerEmail' => $requestResult['data']['gdtSumPerEmail'], - 'moreEntrysAsShown' => $requestResult['data']['moreEntrysAsShown'], - 'timeUsed' => microtime(true) - $startTime - ]); - } - - public function sortTransactions($a, $b) - { - if ($a['date'] == $b['date']) { - return 0; - } - return ($a['date'] > $b['date']) ? -1 : 1; - } - - /** - * View method - * - * @param string|null $id State Balance id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateBalance = $this->StateBalances->get($id, [ - 'contain' => ['StateUsers'] - ]); - - $this->set('stateBalance', $stateBalance); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateBalance = $this->StateBalances->newEntity(); - if ($this->request->is('post')) { - $stateBalance = $this->StateBalances->patchEntity($stateBalance, $this->request->getData()); - if ($this->StateBalances->save($stateBalance)) { - $this->Flash->success(__('The state balance has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state balance could not be saved. Please, try again.')); - } - $stateUsers = $this->StateBalances->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateBalance', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id State Balance id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateBalance = $this->StateBalances->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateBalance = $this->StateBalances->patchEntity($stateBalance, $this->request->getData()); - if ($this->StateBalances->save($stateBalance)) { - $this->Flash->success(__('The state balance has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state balance could not be saved. Please, try again.')); - } - $stateUsers = $this->StateBalances->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateBalance', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id State Balance id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateBalance = $this->StateBalances->get($id); - if ($this->StateBalances->delete($stateBalance)) { - $this->Flash->success(__('The state balance has been deleted.')); - } else { - $this->Flash->error(__('The state balance could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateCreatedController.php b/community_server/src/Controller/StateCreatedController.php deleted file mode 100644 index b66f1b7c1..000000000 --- a/community_server/src/Controller/StateCreatedController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'StateUsers'] - ]; - $stateCreated = $this->paginate($this->StateCreated); - - $this->set(compact('stateCreated')); - } - - /** - * View method - * - * @param string|null $id State Created id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateCreated = $this->StateCreated->get($id, [ - 'contain' => ['Transactions', 'StateUsers'] - ]); - - $this->set('stateCreated', $stateCreated); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateCreated = $this->StateCreated->newEntity(); - if ($this->request->is('post')) { - $stateCreated = $this->StateCreated->patchEntity($stateCreated, $this->request->getData()); - if ($this->StateCreated->save($stateCreated)) { - $this->Flash->success(__('The state created has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state created could not be saved. Please, try again.')); - } - $transactions = $this->StateCreated->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->StateCreated->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateCreated', 'transactions', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id State Created id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateCreated = $this->StateCreated->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateCreated = $this->StateCreated->patchEntity($stateCreated, $this->request->getData()); - if ($this->StateCreated->save($stateCreated)) { - $this->Flash->success(__('The state created has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state created could not be saved. Please, try again.')); - } - $transactions = $this->StateCreated->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->StateCreated->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('stateCreated', 'transactions', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id State Created id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateCreated = $this->StateCreated->get($id); - if ($this->StateCreated->delete($stateCreated)) { - $this->Flash->success(__('The state created has been deleted.')); - } else { - $this->Flash->error(__('The state created could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateErrorsController.php b/community_server/src/Controller/StateErrorsController.php deleted file mode 100644 index 0c91d93e3..000000000 --- a/community_server/src/Controller/StateErrorsController.php +++ /dev/null @@ -1,173 +0,0 @@ -Auth->allow(['showForUser', 'deleteForUser']); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Fehler'), 'StateErrors', 'ShowForUser', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['StateUsers', 'TransactionTypes'] - ]; - $stateErrors = $this->paginate($this->StateErrors); - - $this->set(compact('stateErrors')); - } - - public function showForUser() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if(!$user) { - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - - $errors = $this->StateErrors->find('all')->where(['state_user_id' => $user['id']])->contain(false); - $transactionTypes = $this->StateErrors->TransactionTypes->find('all')->select(['id', 'name', 'text'])->order(['id']); - - $this->set('errors', $errors); - $this->set('transactionTypes', $transactionTypes->toList()); - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function deleteForUser($id = null) - { - $this->request->allowMethod(['post', 'delete', 'get']); - $stateError = $this->StateErrors->get($id); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if($user['id'] != $stateError->state_user_id) { - $this->Flash->error(__('Error belongs to another User, cannot delete')); - } - else if ($this->StateErrors->delete($stateError)) { - $this->Flash->success(__('The state error has been deleted.')); - } else { - $this->Flash->error(__('The state error could not be deleted. Please, try again.')); - } - $errors = $this->StateErrors->find('all')->where(['state_user_id' => $user['id']])->contain(false); - if($errors->count() == 0) { - return $this->redirect(['controller' => 'Dashboard']); - } - return $this->redirect(['action' => 'showForUser']); - } - - - /** - * View method - * - * @param string|null $id State Error id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateError = $this->StateErrors->get($id, [ - 'contain' => ['StateUsers', 'TransactionTypes'] - ]); - - $this->set('stateError', $stateError); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateError = $this->StateErrors->newEntity(); - if ($this->request->is('post')) { - $stateError = $this->StateErrors->patchEntity($stateError, $this->request->getData()); - if ($this->StateErrors->save($stateError)) { - $this->Flash->success(__('The state error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state error could not be saved. Please, try again.')); - } - $stateUsers = $this->StateErrors->StateUsers->find('list', ['limit' => 200]); - $transactionTypes = $this->StateErrors->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateError', 'stateUsers', 'transactionTypes')); - } - - /** - * Edit method - * - * @param string|null $id State Error id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateError = $this->StateErrors->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateError = $this->StateErrors->patchEntity($stateError, $this->request->getData()); - if ($this->StateErrors->save($stateError)) { - $this->Flash->success(__('The state error has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state error could not be saved. Please, try again.')); - } - $stateUsers = $this->StateErrors->StateUsers->find('list', ['limit' => 200]); - $transactionTypes = $this->StateErrors->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateError', 'stateUsers', 'transactionTypes')); - } - - /** - * Delete method - * - * @param string|null $id State Error id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateError = $this->StateErrors->get($id); - if ($this->StateErrors->delete($stateError)) { - $this->Flash->success(__('The state error has been deleted.')); - } else { - $this->Flash->error(__('The state error could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateGroupAddressesController.php b/community_server/src/Controller/StateGroupAddressesController.php deleted file mode 100644 index 25afc82c7..000000000 --- a/community_server/src/Controller/StateGroupAddressesController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['AddressTypes'], - ]; - $stateGroupAddresses = $this->paginate($this->StateGroupAddresses); - - $this->set(compact('stateGroupAddresses')); - } - - /** - * View method - * - * @param string|null $id State Group Address id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateGroupAddress = $this->StateGroupAddresses->get($id, [ - 'contain' => ['StateGroups', 'AddressTypes'], - ]); - - $this->set('stateGroupAddress', $stateGroupAddress); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateGroupAddress = $this->StateGroupAddresses->newEntity(); - if ($this->request->is('post')) { - $stateGroupAddress = $this->StateGroupAddresses->patchEntity($stateGroupAddress, $this->request->getData()); - if ($this->StateGroupAddresses->save($stateGroupAddress)) { - $this->Flash->success(__('The state group address has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group address could not be saved. Please, try again.')); - } - $stateGroups = $this->StateGroupAddresses->StateGroups->find('list', ['limit' => 200]); - $addressTypes = $this->StateGroupAddresses->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('stateGroupAddress', 'stateGroups', 'addressTypes')); - } - - /** - * Edit method - * - * @param string|null $id State Group Address id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateGroupAddress = $this->StateGroupAddresses->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateGroupAddress = $this->StateGroupAddresses->patchEntity($stateGroupAddress, $this->request->getData()); - if ($this->StateGroupAddresses->save($stateGroupAddress)) { - $this->Flash->success(__('The state group address has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group address could not be saved. Please, try again.')); - } - $stateGroups = $this->StateGroupAddresses->StateGroups->find('list', ['limit' => 200]); - $addressTypes = $this->StateGroupAddresses->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('stateGroupAddress', 'stateGroups', 'addressTypes')); - } - - /** - * Delete method - * - * @param string|null $id State Group Address id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateGroupAddress = $this->StateGroupAddresses->get($id); - if ($this->StateGroupAddresses->delete($stateGroupAddress)) { - $this->Flash->success(__('The state group address has been deleted.')); - } else { - $this->Flash->error(__('The state group address could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateGroupRelationshipsController.php b/community_server/src/Controller/StateGroupRelationshipsController.php deleted file mode 100644 index 631ca13d1..000000000 --- a/community_server/src/Controller/StateGroupRelationshipsController.php +++ /dev/null @@ -1,115 +0,0 @@ -paginate = [ - 'contain' => ['StateGroup1s', 'StateGroup2s', 'StateRelationships'] - ]; - $stateGroupRelationships = $this->paginate($this->StateGroupRelationships); - - $this->set(compact('stateGroupRelationships')); - } - - /** - * View method - * - * @param string|null $id State Group Relationship id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateGroupRelationship = $this->StateGroupRelationships->get($id, [ - 'contain' => ['StateGroup1s', 'StateGroup2s', 'StateRelationships'] - ]); - - $this->set('stateGroupRelationship', $stateGroupRelationship); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateGroupRelationship = $this->StateGroupRelationships->newEntity(); - if ($this->request->is('post')) { - $stateGroupRelationship = $this->StateGroupRelationships->patchEntity($stateGroupRelationship, $this->request->getData()); - if ($this->StateGroupRelationships->save($stateGroupRelationship)) { - $this->Flash->success(__('The state group relationship has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group relationship could not be saved. Please, try again.')); - } - $stateGroup1s = $this->StateGroupRelationships->StateGroup1s->find('list', ['limit' => 200]); - $stateGroup2s = $this->StateGroupRelationships->StateGroup2s->find('list', ['limit' => 200]); - $stateRelationships = $this->StateGroupRelationships->StateRelationships->find('list', ['limit' => 200]); - $this->set(compact('stateGroupRelationship', 'stateGroup1s', 'stateGroup2s', 'stateRelationships')); - } - - /** - * Edit method - * - * @param string|null $id State Group Relationship id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateGroupRelationship = $this->StateGroupRelationships->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateGroupRelationship = $this->StateGroupRelationships->patchEntity($stateGroupRelationship, $this->request->getData()); - if ($this->StateGroupRelationships->save($stateGroupRelationship)) { - $this->Flash->success(__('The state group relationship has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group relationship could not be saved. Please, try again.')); - } - $stateGroup1s = $this->StateGroupRelationships->StateGroup1s->find('list', ['limit' => 200]); - $stateGroup2s = $this->StateGroupRelationships->StateGroup2s->find('list', ['limit' => 200]); - $stateRelationships = $this->StateGroupRelationships->StateRelationships->find('list', ['limit' => 200]); - $this->set(compact('stateGroupRelationship', 'stateGroup1s', 'stateGroup2s', 'stateRelationships')); - } - - /** - * Delete method - * - * @param string|null $id State Group Relationship id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateGroupRelationship = $this->StateGroupRelationships->get($id); - if ($this->StateGroupRelationships->delete($stateGroupRelationship)) { - $this->Flash->success(__('The state group relationship has been deleted.')); - } else { - $this->Flash->error(__('The state group relationship could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateGroupsController.php b/community_server/src/Controller/StateGroupsController.php deleted file mode 100644 index 36969671d..000000000 --- a/community_server/src/Controller/StateGroupsController.php +++ /dev/null @@ -1,111 +0,0 @@ -paginate = [ - 'contain' => ['Indices'] - ]; - $stateGroups = $this->paginate($this->StateGroups); - - $this->set(compact('stateGroups')); - } - - /** - * View method - * - * @param string|null $id State Group id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateGroup = $this->StateGroups->get($id, [ - 'contain' => ['Indices', 'StateGroupAddresses', 'StateUsers', 'TransactionGroupCreates', 'Transactions'] - ]); - - $this->set('stateGroup', $stateGroup); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateGroup = $this->StateGroups->newEntity(); - if ($this->request->is('post')) { - $stateGroup = $this->StateGroups->patchEntity($stateGroup, $this->request->getData()); - if ($this->StateGroups->save($stateGroup)) { - $this->Flash->success(__('The state group has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group could not be saved. Please, try again.')); - } - $indices = $this->StateGroups->Indices->find('list', ['limit' => 200]); - $this->set(compact('stateGroup', 'indices')); - } - - /** - * Edit method - * - * @param string|null $id State Group id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateGroup = $this->StateGroups->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateGroup = $this->StateGroups->patchEntity($stateGroup, $this->request->getData()); - if ($this->StateGroups->save($stateGroup)) { - $this->Flash->success(__('The state group has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state group could not be saved. Please, try again.')); - } - $indices = $this->StateGroups->Indices->find('list', ['limit' => 200]); - $this->set(compact('stateGroup', 'indices')); - } - - /** - * Delete method - * - * @param string|null $id State Group id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateGroup = $this->StateGroups->get($id); - if ($this->StateGroups->delete($stateGroup)) { - $this->Flash->success(__('The state group has been deleted.')); - } else { - $this->Flash->error(__('The state group could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateRelationshipTypesController.php b/community_server/src/Controller/StateRelationshipTypesController.php deleted file mode 100644 index 954b594e2..000000000 --- a/community_server/src/Controller/StateRelationshipTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->StateRelationshipTypes); - - $this->set(compact('stateRelationshipTypes')); - } - - /** - * View method - * - * @param string|null $id State Relationship Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateRelationshipType = $this->StateRelationshipTypes->get($id, [ - 'contain' => [] - ]); - - $this->set('stateRelationshipType', $stateRelationshipType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateRelationshipType = $this->StateRelationshipTypes->newEntity(); - if ($this->request->is('post')) { - $stateRelationshipType = $this->StateRelationshipTypes->patchEntity($stateRelationshipType, $this->request->getData()); - if ($this->StateRelationshipTypes->save($stateRelationshipType)) { - $this->Flash->success(__('The state relationship type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state relationship type could not be saved. Please, try again.')); - } - $this->set(compact('stateRelationshipType')); - } - - /** - * Edit method - * - * @param string|null $id State Relationship Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateRelationshipType = $this->StateRelationshipTypes->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateRelationshipType = $this->StateRelationshipTypes->patchEntity($stateRelationshipType, $this->request->getData()); - if ($this->StateRelationshipTypes->save($stateRelationshipType)) { - $this->Flash->success(__('The state relationship type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state relationship type could not be saved. Please, try again.')); - } - $this->set(compact('stateRelationshipType')); - } - - /** - * Delete method - * - * @param string|null $id State Relationship Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateRelationshipType = $this->StateRelationshipTypes->get($id); - if ($this->StateRelationshipTypes->delete($stateRelationshipType)) { - $this->Flash->success(__('The state relationship type has been deleted.')); - } else { - $this->Flash->error(__('The state relationship type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateUserRolesController.php b/community_server/src/Controller/StateUserRolesController.php deleted file mode 100644 index 9238c7ad6..000000000 --- a/community_server/src/Controller/StateUserRolesController.php +++ /dev/null @@ -1,185 +0,0 @@ -loadComponent('JsonRequestClient'); - $this->Auth->allow([ -// 'search' - ]); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzer suchen'), 'StateUsers', 'search', true)) - ); - } - - public function search() - { - $this->loadModel('StateUsers'); - $startTime = microtime(true); - I18n::setLocale('de_DE'); - $this->viewBuilder()->setLayout('frontend'); - - $searchForm = new UserSearchForm(); - - $timeUsed = microtime(true) - $startTime; - //$this->set('timeUsed', $timeUsed); - $this->set(compact('timeUsed', 'searchForm')); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - - if ($searchForm->validate($requestData)) { - //var_dump($requestData); - $searchString = $requestData['search']; - - // find user on community server db - $globalSearch = '%' . $searchString . '%'; - $communityUsers = $this->StateUsers - ->find('all') - ->contain([]); - - $communityUsers->where(['OR' => [ - 'first_name LIKE' => $globalSearch, - 'last_name LIKE' => $globalSearch, - //'username LIKE' => $globalSearch, - 'email LIKE' => $globalSearch - ]]); - - //var_dump($communityUsers->toArray()); - $finalUserEntrys = []; - // detect states - $this->loadModel('Roles'); -// foreach ($pubkeySorted as $pubhex => $user) { - foreach($communityUsers as $communityUser) { - $finalUser = $communityUser; - $finalUser['pubkeyhex'] = bin2hex(stream_get_contents($communityUser->public_key)); - - $state_user_id = $communityUser->id; - $stateUserRole = $this->StateUserRoles->find('all')->where(['state_user_id' => $state_user_id])->all(); - - $role_ids = ""; - foreach ($stateUserRole as $userRole) { - if($role_ids != "") - $role_ids .= ",".$userRole->role_id; - else - $role_ids = $userRole->role_id; - } - - $roles = $this->Roles->find('all')->where(['id IN' => explode(",",$role_ids)])->all(); - - $role_names = ""; - foreach($roles as $role) - { - if($role_names != "") - $role_names .= "
    ".$role->title; - else - $role_names = $role->title; - } - - $finalUser['role_name'] = $role_names; - - array_push($finalUserEntrys, $finalUser); - } - - //var_dump($pubkeySorted); - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - $this->set('finalUserEntrys', $finalUserEntrys); - } - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - - public function assignRole() - { - $this->loadModel('Roles'); - $this->loadModel('StateUsers'); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - - $public_hex = hex2bin($requestData['public_hex']); - - $stateUser = $this->StateUsers->find('all')->where(['public_key' => $public_hex])->first(); - - foreach($requestData['role_id'] as $role_id) - { - $newStateUserRole = $this->StateUserRoles->newEntity(); - - $post_data = []; - $post_data['state_user_id'] = $stateUser->id; - $post_data['role_id'] = $role_id; - $this->StateUserRoles->patchEntity($newStateUserRole, $post_data); - $this->StateUserRoles->save($newStateUserRole); - - } - - $this->Flash->success(__('Role has been assigned to User.')); - - return $this->redirect(['controller' => 'state-user-roles', 'action' => 'search']); - - } - - $assignRoleForm = new AssignRoleForm(); - - $public_hex = $this->request->getParam('pass')[0]; - - $publichex = hex2bin($public_hex); - - $stateUser = $this->StateUsers->find('all')->where(['public_key' => $publichex])->first(); - - $stateUserRoles = $this->StateUserRoles->find('all')->where(['state_user_id' => $stateUser->id])->all(); - - $role_ids = ""; - foreach ($stateUserRoles as $userRole) { - if($role_ids != "") - $role_ids .= ",".$userRole->role_id; - else - $role_ids = $userRole->role_id; - } - - $role_ids = explode(",", $role_ids); - - $roles = $this->Roles->find('list', array('fields' => array('id', 'title'))); - - - $this->set('roles', $roles); - $this->set('stateUser', $stateUser); - $this->set('role_ids', $role_ids); - $this->set('assignRoleForm', $assignRoleForm); - $this->set('public_hex', $public_hex); - } - -} diff --git a/community_server/src/Controller/StateUserTransactionsController.php b/community_server/src/Controller/StateUserTransactionsController.php deleted file mode 100644 index f816192f3..000000000 --- a/community_server/src/Controller/StateUserTransactionsController.php +++ /dev/null @@ -1,291 +0,0 @@ -Auth->allow(['add', 'edit']); - $this->Auth->allow(['ajaxListTransactions']); - //$this->loadComponent('JsonRequestClient'); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['StateUsers', 'Transactions', 'TransactionTypes'], - ]; - $stateUserTransactions = $this->paginate($this->StateUserTransactions); - - $this->set(compact('stateUserTransactions')); - } - - public function sortTransactions($a, $b) - { - if ($a['date'] == $b['date']) { - return 0; - } - return ($a['date'] > $b['date']) ? -1 : 1; - } - - - public function ajaxListTransactions($page = 1, $count = 20) - { - $startTime = microtime(true); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if(!$user) { - return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']); - } - - $paged_state_user_transactions = $this->StateUserTransactions - ->find('all') - ->where(['state_user_id' => $user['id'], 'transaction_type_id IN' => [1,2]]) - ->limit($count) - ->page($page) - ->order(['transaction_id']) - ; - $all_user_transactions_count = $this->StateUserTransactions - ->find('all') - ->where(['state_user_id' => $user['id'], 'transaction_type_id IN' => [1,2]]) - ->count() - ; - $creationTransaction_ids = []; - $transferTransaction_ids = []; - $allTransaction_ids = []; - foreach($paged_state_user_transactions as $state_user_transaction) { - $allTransaction_ids[] = $state_user_transaction->transaction_id; - switch($state_user_transaction->transaction_type_id) { - case 1: $creationTransaction_ids[] = $state_user_transaction->transaction_id; break; - case 2: $transferTransaction_ids[] = $state_user_transaction->transaction_id; break; - } - } - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $transactionCreationsTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - $transactionSendCoinsTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - if(count($allTransaction_ids) > 0) { - $transactionEntries = $transactionsTable->find('all')->where(['id IN' => $allTransaction_ids])->order(['id'])->toArray(); - } - if(count($creationTransaction_ids) > 0) { - $transactionCreations = $transactionCreationsTable->find('all')->where(['transaction_id IN' => $creationTransaction_ids]); - } - if(count($transferTransaction_ids)) { - $transactionTransfers = $transactionSendCoinsTable->find('all')->where(['transaction_id IN' => $transferTransaction_ids]); - } - //var_dump($transactions->all()); - - $transactions = []; - // creations - if(isset($transactionCreations)) { - foreach ($transactionCreations as $creation) { - //var_dump($creation); - $transaction_entries_index = array_search($creation->transaction_id, $allTransaction_ids); - if(FALSE === $transaction_entries_index) { - return $this->returnJson(['state' => 'error', 'msg' => 'code error', 'details' => 'creation, transaction_entries_index is FALSE, shouldn\'t occure']); - } - $transaction = $transactionEntries[$transaction_entries_index]; - array_push($transactions, [ - 'name' => 'Gradido Akademie', - 'type' => 'creation', - 'transaction_id' => $creation->transaction_id, - 'date' => $transaction->received, - 'balance' => $creation->amount, - 'memo' => $transaction->memo - ]); - } - } - - // involved users - if(isset($transactionTransfers)) { - $involvedUserIds = []; - - foreach ($transactionTransfers as $transfer) { - //var_dump($sendCoins); - if ($transfer->state_user_id != $user['id']) { - array_push($involvedUserIds, intval($transfer->state_user_id)); - } elseif ($transfer->receiver_user_id != $user['id']) { - array_push($involvedUserIds, intval($transfer->receiver_user_id)); - } - } - - // exchange key with values and drop duplicates - $involvedUser_temp = array_flip($involvedUserIds); - // exchange back - $involvedUserIds = array_flip($involvedUser_temp); - - $involvedUser = $stateUsersTable->find('all', [ - 'contain' => false, - 'where' => ['id IN' => $involvedUserIds], - 'fields' => ['id', 'first_name', 'last_name', 'email'] - ]); - //var_dump($involvedUser->toArray()); - $involvedUserIndices = []; - foreach ($involvedUser as $involvedUser) { - $involvedUserIndices[$involvedUser->id] = $involvedUser; - } - - // transfers - send coins - foreach($transactionTransfers as $transfer) - { - $transaction_entries_index = array_search($transfer->transaction_id, $allTransaction_ids); - if(FALSE === $transaction_entries_index) { - - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'code error', - 'details' => 'transfer, transaction_entries_index is FALSE, shouldn\'t occure', - 'data' => ['haystack' => $allTransaction_ids, 'needle' => $transfer->transaction_id] - ]); - } - $transaction = $transactionEntries[$transaction_entries_index]; - $type = ''; - $otherUser = null; - $other_user_public = ''; - - if ($transfer->state_user_id == $user['id']) { - $type = 'send'; - - if(isset($involvedUserIndices[$transfer->receiver_user_id])) { - $otherUser = $involvedUserIndices[$transfer->receiver_user_id]; - } - $other_user_public = bin2hex(stream_get_contents($transfer->receiver_public_key)); - } else if ($transfer->receiver_user_id == $user['id']) { - $type = 'receive'; - if(isset($involvedUserIndices[$transfer->state_user_id])) { - $otherUser = $involvedUserIndices[$transfer->state_user_id]; - } - if($transfer->sender_public_key) { - $other_user_public = bin2hex(stream_get_contents($transfer->sender_public_key)); - } - } - if(null == $otherUser) { - $otherUser = $stateUsersTable->newEntity(); - } - array_push($transactions, [ - 'name' => $otherUser->first_name . ' ' . $otherUser->last_name, - 'email' => $otherUser->email, - 'type' => $type, - 'transaction_id' => $transfer->transaction_id, - 'date' => $transaction->received, - 'balance' => $transfer->amount, - 'memo' => $transaction->memo, - 'pubkey' => $other_user_public - ]); - //*/ - - } - } - uasort($transactions, array($this, 'sortTransactions')); - - return $this->returnJson([ - 'state' => 'success', - 'transactions' => $transactions, - 'transactionExecutingCount' => $session->read('Transactions.executing'), - 'count' => $all_user_transactions_count, - 'timeUsed' => microtime(true) - $startTime - ]); - } - - /** - * View method - * - * @param string|null $id State User Transaction id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateUserTransaction = $this->StateUserTransactions->get($id, [ - 'contain' => ['StateUsers', 'Transactions', 'TransactionTypes'], - ]); - - $this->set('stateUserTransaction', $stateUserTransaction); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateUserTransaction = $this->StateUserTransactions->newEntity(); - if ($this->request->is('post')) { - $stateUserTransaction = $this->StateUserTransactions->patchEntity($stateUserTransaction, $this->request->getData()); - if ($this->StateUserTransactions->save($stateUserTransaction)) { - $this->Flash->success(__('The state user transaction has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user transaction could not be saved. Please, try again.')); - } - $stateUsers = $this->StateUserTransactions->StateUsers->find('list', ['limit' => 200]); - $transactions = $this->StateUserTransactions->Transactions->find('list', ['limit' => 200]); - $transactionTypes = $this->StateUserTransactions->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateUserTransaction', 'stateUsers', 'transactions', 'transactionTypes')); - } - - /** - * Edit method - * - * @param string|null $id State User Transaction id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateUserTransaction = $this->StateUserTransactions->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateUserTransaction = $this->StateUserTransactions->patchEntity($stateUserTransaction, $this->request->getData()); - if ($this->StateUserTransactions->save($stateUserTransaction)) { - $this->Flash->success(__('The state user transaction has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user transaction could not be saved. Please, try again.')); - } - $stateUsers = $this->StateUserTransactions->StateUsers->find('list', ['limit' => 200]); - $transactions = $this->StateUserTransactions->Transactions->find('list', ['limit' => 200]); - $transactionTypes = $this->StateUserTransactions->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('stateUserTransaction', 'stateUsers', 'transactions', 'transactionTypes')); - } - - /** - * Delete method - * - * @param string|null $id State User Transaction id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateUserTransaction = $this->StateUserTransactions->get($id); - if ($this->StateUserTransactions->delete($stateUserTransaction)) { - $this->Flash->success(__('The state user transaction has been deleted.')); - } else { - $this->Flash->error(__('The state user transaction could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/StateUsersController.php b/community_server/src/Controller/StateUsersController.php deleted file mode 100644 index fc6ec8614..000000000 --- a/community_server/src/Controller/StateUsersController.php +++ /dev/null @@ -1,616 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRequestClient'); - $this->loadComponent('Cookie'); - $this->Auth->allow([ - 'search', 'ajaxCopyLoginToCommunity', 'ajaxCopyCommunityToLogin', - 'ajaxDelete', 'ajaxCountTransactions', 'ajaxVerificationEmailResend', - 'ajaxGetUserEmailVerificationCode', 'ajaxGetCSFRToken', 'login' - ]); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzer suchen'), 'StateUsers', 'search', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => [] - ]; - $stateUsers = $this->paginate($this->StateUsers); - - $this->set(compact('stateUsers')); - } - - /*public function listIdentHashes() - { - $stateUsers = $this->StateUsers->find('all')->toArray(); - foreach($stateUsers as $i => $user) { - $stateUsers[$i]->identHash = TransactionCreation::DRMakeStringHash($user->email); - } - $this->set('stateUsers', $stateUsers); - }*/ - - public function login($session_id) - { - if(isset($session_id) && intval($session_id) !== 0) { - $loginServer = Configure::read('LoginServer'); - $http = new Client(); - - try { - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->get($url . '/login', ['session_id' => $session_id]); - $json = $response->getJson(); - - if (isset($json) && count($json) > 0) { - if ($json['state'] === 'success') { - $this->Cookie->configKey('GRADIDO_LOGIN', 'encryption', false); - $this->Cookie->write('GRADIDO_LOGIN', $session_id); - return $this->redirect(['controller' => 'Dashboard', 'action' => 'index']); - } - } - } catch (\Exception $e) { - $msg = $e->getMessage(); - $this->Flash->error(__('error http request: ') . $msg); - return $this->redirect(['controller' => 'Dashboard', 'action' => 'errorHttpRequest']); - } - } - throw new NotFoundException(); - } - - public function search() - { - $startTime = microtime(true); - I18n::setLocale('de_DE'); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->redirect(['controller' => 'dashboard', 'action' => 'index']); - } - - $searchForm = new UserSearchForm(); - - $timeUsed = microtime(true) - $startTime; - //$this->set('timeUsed', $timeUsed); - $csfr_token = $this->request->getParam('_csrfToken'); - $this->set(compact('timeUsed', 'searchForm', 'csfr_token')); - $empty_string = '... empty ...'; - if ($this->request->is('post')) { - $finalUserEntrys = []; - $requestData = $this->request->getData(); - $account_state = $requestData['account_state']; - if($requestData['search'] == '' && $account_state != 'all') { - $requestData['search'] = $empty_string; - } - - if($searchForm->validate($requestData)) { - //var_dump($requestData); - $searchString = $requestData['search']; - $searchType = 'unknown'; - if(GenericValidation::email($searchString, [])) { - $searchType = 'email'; - } - // find users on login server - $resultJson = $this->JsonRequestClient->getUsers($session->read('session_id'), $searchString, $account_state); - $loginServerUser = []; - if($resultJson['state'] == 'success') { - $dataJson = $resultJson['data']; - if($dataJson['state'] != 'success') { - if($dataJson['msg'] == 'session not found') { - $session->destroy(); - return $this->redirect(Router::url('/', true) . 'account', 303); - } - } - //var_dump($dataJson); - if(isset($dataJson['users'])) { - $loginServerUser = $dataJson['users']; - } - } - $pubkeySorted = []; - $emptyPubkeys = []; - foreach($loginServerUser as $u) { - if(!isset($u['public_hex']) || $u['public_hex'] == '') { - array_push($emptyPubkeys, $u); - } else { - if(!isset($pubkeySorted[$u['public_hex']])) { - $pubkeySorted[$u['public_hex']] = ['login' => [], 'community' => []]; - } - array_push($pubkeySorted[$u['public_hex']]['login'], $u); - } - } - // find user on community server db - - - - $communityUsers = $this->StateUsers - ->find('all') - ->contain(['StateBalances' => ['fields' => ['amount', 'state_user_id']]]); - - if($account_state == 'email not activated') { - if(count($pubkeySorted) > 0) { - $communityUsers->where(['hex(public_key) IN' => array_keys($pubkeySorted)]); - } else { - $communityUsers = null; - } - } else { - $globalSearch = '%' . $searchString . '%'; - $communityUsers->where(['OR' => [ - 'first_name LIKE' => $globalSearch, - 'last_name LIKE' => $globalSearch, - 'email LIKE' => $globalSearch - ]]); - } - - - //var_dump($communityUsers->toArray()); - if($communityUsers) { - foreach($communityUsers as $u) { - $pubkey_hex = bin2hex(stream_get_contents($u->public_key)); - $u->public_hex = $pubkey_hex; - if(!isset($pubkeySorted[$pubkey_hex])) { - $pubkeySorted[$pubkey_hex] = ['login' => [], 'community' => []]; - } - array_push($pubkeySorted[$pubkey_hex]['community'], $u); - } - } - - // detect states - foreach($pubkeySorted as $pubhex => $user) { - $finalUser = []; - $state = 'account created'; - $color = 'secondary'; - $finalUser['balance'] = 0; - $finalUser['pubkeyhex'] = $pubhex; - $finalUser['created'] = null; - - if(count($user['community']) == 1) { - if(isset($user['community'][0]->state_balances) && - isset($user['community'][0]->state_balances[0]['amount'])) { - $finalUser['balance'] = $user['community'][0]->state_balances[0]->amount; - } - } - - if(count($user['login']) == 0) { - $state = 'account not on login-server'; - $color = 'danger'; - if(count($user['community']) == 1) { - $c_user = $user['community'][0]; - $finalUser['name'] = $c_user->first_name . ' ' . $c_user->last_name; - $finalUser['first_name'] = $c_user->first_name; - $finalUser['last_name'] = $c_user->last_name; - $finalUser['email'] = $c_user->email; - } - } else if(count($user['login']) == 1) { - if($user['login'][0]['email_checked'] == true) { - $state = 'email activated'; - $color = 'primary'; - - if(count($user['community']) == 1) { - $state = 'account copied to community'; - $color = 'success'; - //var_dump($user['community'][0]->state_balances[0]['amount']); - } - - } else { - $state = 'email not activated'; - $color = 'warning'; - } - - $l_user = $user['login'][0]; - $finalUser['name'] = $l_user['first_name'] . ' ' . $l_user['last_name']; - $finalUser['first_name'] = $l_user['first_name']; - $finalUser['last_name'] = $l_user['last_name']; - $finalUser['email'] = $l_user['email']; - $finalUser['created'] = new FrozenTime($l_user['created']); - - } else { - $state = 'account multiple times on login-server'; - $color = 'danger'; - } - $finalUser['indicator'] = ['name' => $state, 'color' => $color]; - array_push($finalUserEntrys, $finalUser); - } - - foreach($emptyPubkeys as $user) { - $finalUser = []; - $state = 'account not on community server'; - $color = 'secondary'; - if($user['email_checked'] == false) { - $state = 'email not activated'; - $color = 'warning'; - } else { - $state = 'no keys'; - $color = 'warning'; - } - $finalUser['balance'] = 0; - $finalUser['pubkeyhex'] = ''; - $finalUser['name'] = $user['first_name'] . ' ' . $user['last_name']; - $finalUser['first_name'] = $user['first_name']; - $finalUser['last_name'] = $user['last_name']; - $finalUser['email'] = $user['email']; - $finalUser['created'] = new FrozenTime($user['created']); - $finalUser['indicator'] = ['name' => $state, 'color' => $color]; - array_push($finalUserEntrys, $finalUser); - } - //var_dump($pubkeySorted); - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - - $this->set('finalUserEntrys', $finalUserEntrys); - } - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - - public function ajaxCopyCommunityToLogin() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxCopyLoginToCommunity() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - //$user = $jsonData['user']; - //var_dump($jsonData); - - $newStateUser = $this->StateUsers->newEntity(); - $this->StateUsers->patchEntity($newStateUser, $jsonData); - $newStateUser->public_key = hex2bin($jsonData['pubkeyhex']); - - if(!$this->StateUsers->save($newStateUser)) { - return $this->returnJson(['state' => 'error', 'msg' => 'error by saving', 'details' => json_encode($newStateUser->errors())]); - } - - return $this->returnJson(['state' => 'success']); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxVerificationEmailResend() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - $email = $jsonData['email']; - $session_id = $session->read('session_id'); - - return $this->returnJson($this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $email - ]), '/adminEmailVerificationResend')); - /*return $this->sendRequest(json_encode([ - 'session_id' => $session_id, - 'search' => $searchString - ]), '/getUsers');*/ - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxGetUserEmailVerificationCode() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - $email = $jsonData['email']; - $session_id = $session->read('session_id'); - - return $this->returnJson($this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $email, - 'ask' => ['EmailVerificationCode.Register', 'loginServer.path'] - ]), '/getUserInfos')); - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - - public function ajaxDelete() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - //$user = $jsonData['user']; - //var_dump($jsonData); - $pubkey = hex2bin($jsonData['pubkeyhex']); - $stateUsers = $this->StateUsers->find('all')->where(['public_key' => $pubkey]); - if($stateUsers->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid result count']); - } - - if ($this->StateUsers->delete($stateUsers->first())) { - return $this->returnJson(['state' => 'success']); - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'error by deleting', 'details' => json_encode($stateUser->errors())]); - } - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function ajaxCountTransactions() - { - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - if($result !== true) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']); - } - $user = $session->read('StateUser'); - if($user['role'] != 'admin') { - return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']); - } - - if($this->request->is('post')) { - $jsonData = $this->request->input('json_decode', true); - //$user = $jsonData['user']; - //var_dump($jsonData); - $pubkey = hex2bin($jsonData['pubkeyhex']); - $stateUsers = $this->StateUsers - ->find('all') - ->where(['public_key' => $pubkey]) - ->select(['id']); - if($stateUsers->count() != 1) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid result count']); - } - $stateUser = $stateUsers->first(); - //var_dump($stateUser); - //var_dump($stateUser->toArray()); - $creationsTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - $creationTransactions = $creationsTable - ->find('all') - ->select(['id']) - ->where(['state_user_id' => $stateUser->id]); - - $transferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - $transferTransactions = $transferTable - ->find('all') - ->where(['OR' => ['state_user_id' => $stateUser->id, 'receiver_user_id' => $stateUser->id]]) - ->select(['state_user_id', 'receiver_user_id']); - $counts = ['creation' => $creationTransactions->count(), 'receive' => 0, 'sended' => 0]; - foreach($transferTransactions as $transfer) { - //var_dump($transfer); - if($transfer->state_user_id == $stateUser->id) { - $counts['sended']++; - } - if($transfer->receiver_user_id == $stateUser->id) { - $counts['receive']++; - } - } - return $this->returnJson(['state' => 'success', 'counts' => $counts]); - - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - - } - - public function ajaxGetCSFRToken($session_id) - { - if(!isset($session_id) || $session_id == 0) { - $this->returnJson(['state' => 'error', 'msg' => 'no session id']); - } - - $client_ip = $this->request->clientIp(); - - $loginServer = Configure::read('LoginServer'); - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $http = new Client(); - $response = $http->get($url . '/login', ['session_id' => $session_id]); - $json = $response->getJson(); - - if (isset($json) && count($json) > 0) { - if ($json['state'] === 'success') { - if($json['clientIP'] == $client_ip) { - return $this->returnJson(['state' => 'success', 'csfr' => $this->request->getParam('_csrfToken')]); - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'client ip mismatch', - 'details' => ['login_server' => $json['clientIP'], 'caller' => $client_ip]]); - } - } else { - return $this->returnJson($json); - } - } else { - return $this->returnJson(['state' => 'error', 'invalid response form logins server']); - } - - } - /* - - getField(vnode, 'receive'), - - getField(vnode, 'sended'), - - getField(vnode, 'creation'), - */ - - /** - * View method - * - * @param string|null $id State User id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $stateUser = $this->StateUsers->get($id, [ - 'contain' => [ - 'StateBalances', - 'TransactionCreations' => ['Transactions'], - 'TransactionSendCoins' => ['Transactions', 'ReceiverUsers'], - 'TransactionReceivedCoins' => ['Transactions', 'StateUsers']] - ]); - - $this->set('stateUser', $stateUser); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $stateUser = $this->StateUsers->newEntity(); - if ($this->request->is('post')) { - $stateUser = $this->StateUsers->patchEntity($stateUser, $this->request->getData()); - if ($this->StateUsers->save($stateUser)) { - $this->Flash->success(__('The state user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user could not be saved. Please, try again.')); - } - $indices = $this->StateUsers->Indices->find('list', ['limit' => 200]); - $stateGroups = $this->StateUsers->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('stateUser', 'indices', 'stateGroups')); - } - - /** - * Edit method - * - * @param string|null $id State User id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $stateUser = $this->StateUsers->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $stateUser = $this->StateUsers->patchEntity($stateUser, $this->request->getData()); - if ($this->StateUsers->save($stateUser)) { - $this->Flash->success(__('The state user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The state user could not be saved. Please, try again.')); - } - $indices = $this->StateUsers->Indices->find('list', ['limit' => 200]); - $stateGroups = $this->StateUsers->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('stateUser', 'indices', 'stateGroups')); - } - - /** - * Delete method - * - * @param string|null $id State User id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $stateUser = $this->StateUsers->get($id); - if ($this->StateUsers->delete($stateUser)) { - $this->Flash->success(__('The state user has been deleted.')); - } else { - $this->Flash->error(__('The state user could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionCreationsController.php b/community_server/src/Controller/TransactionCreationsController.php deleted file mode 100644 index d02320d25..000000000 --- a/community_server/src/Controller/TransactionCreationsController.php +++ /dev/null @@ -1,681 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRequestClient'); - //$this->Auth->allow(['add', 'edit']); - //$this->Auth->allow('create'); - $this->Auth->allow('ajaxCreate'); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Gradido schöpfen'), 'TransactionCreations', 'create-multi', true)) - ); - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['Transactions', 'StateUsers'] - ]; - $transactionCreations = $this->paginate($this->TransactionCreations); - $identHashes = []; - /*foreach ($transactionCreations as $creation) { - $identHash = TransactionCreation::DRMakeStringHash($creation->state_user->email); - $identHashes[$creation->state_user->id] = $identHash; - }*/ - - //$this->set(compact('transactionCreations', 'identHashes')); - } - - /** - * View method - * - * @param string|null $id Transaction Creation id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionCreation = $this->TransactionCreations->get($id, [ - 'contain' => ['Transactions', 'StateUsers'] - ]); - - $this->set('transactionCreation', $transactionCreation); - } - - public function create() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - if (!$user) { - $result = $this->requestLogin(); - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - $creationForm = new CreationForm(); - $transactionCreation = $this->TransactionCreations->newEntity(); - $transactionCreation->state_user_id = $user['id']; - - // adding possible addresses + input field for copy - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateUsers = $stateUserTable->find('all')->contain(false); - $receiverProposal = []; - foreach ($stateUsers as $stateUser) { - $name = $stateUser->email; - $keyHex = bin2hex(stream_get_contents($stateUser->public_key)); - if ($name === null) { - $name = $stateUser->first_name . ' ' . $stateUser->last_name; - } - array_push($receiverProposal, ['name' => $name, 'key' => $keyHex, 'email' => $stateUser->email]); - //$stateUser->public_key - } - $timeUsed = microtime(true) - $startTime; - $this->set(compact('transactionCreation', 'timeUsed', 'receiverProposal', 'creationForm')); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - $mode = 'next'; - if (isset($requestData['add'])) { - $mode = 'add'; - } - if ($creationForm->validate($requestData)) { - $pubKeyHex = ''; - $identHash = ''; - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - $receiverIndex = intval($requestData['receiver'])-1; - - if (count($receiverProposal) > $receiverIndex) { - $pubKeyHex = $receiverProposal[$receiverIndex]['key']; - //$identHash = TransactionCreation::DRMakeStringHash($receiverProposal[$receiverIndex]['email']); - } - $builderResult = TransactionCreation::build( - $amountCent, - $requestData['memo'], - $pubKeyHex - ); - if ($builderResult['state'] == 'success') { - $user_balance = 0; - if (isset($user['balance'])) { - $user_balance = $user['balance']; - } - // $session_id, $base64Message, $user_balance = 0 - $requestResult = $this->JsonRequestClient->sendTransaction( - $session->read('session_id'), - base64_encode($builderResult['transactionBody']->serializeToString()), - $user_balance - ); - if ($requestResult['state'] != 'success') { - $this->addAdminError('TransactionCreations', 'create', $requestResult, $user['id']); - if ($requestResult['type'] == 'request error') { - $this->Flash->error(__('Error by requesting LoginServer, please try again')); - } else { - $this->Flash->error(__('Error, please wait for the admin to fix it')); - } - } else { - $json = $requestResult['data']; - if ($json['state'] != 'success') { - if ($json['msg'] == 'session not found') { - $session->destroy(); - return $this->redirect($this->loginServerUrl . 'account', 303); - } else { - $this->addAdminError('TransactionCreations', 'create', $json, $user['id']); - $this->Flash->error(__('Login Server Error, please wait for the admin to fix it')); - } - } else { - $pendingTransactionCount = $session->read('Transactions.pending'); - if ($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - if ($mode === 'next') { - return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303); - } else { - $this->Flash->success(__('Transaction submitted for review.')); - } - } - } - } else { - $this->Flash->error(__('Building transaction failed')); - } - // */ - } else { - $this->Flash->error(__('Something was invalid, please try again!')); - } - } - } - - public function createMulti($page = 0) - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $result = $this->requestLogin(); - $limit = 200; - if ($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - - $connection = ConnectionManager::get('default'); - $transactionActiveMonth = $connection->execute( - 'SELECT id, received FROM transactions ' - . 'where received >= date_sub(date_add(curdate(), interval 1 - day(curdate()) day), interval 2 month) ' - . 'AND ' - . 'received < date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval 2 month) ' - . 'AND ' - . 'transaction_type_id = 1' - )->fetchAll('assoc'); - $transactionActiveMonthSortedById = []; - foreach ($transactionActiveMonth as $t) { - $transactionActiveMonthSortedById[$t['id']] = $t['received']; - } - $firstDayLastMonth = new FrozenDate(); - $firstDayLastMonth = $firstDayLastMonth->day(1)->subMonth(1); - $transactionsLastMonthTargeDate = $this->TransactionCreations - ->find('all') - //->select(['state_user_id', 'target_date', 'amount']) - ->where(['EXTRACT(YEAR_MONTH FROM target_date) LIKE' => $firstDayLastMonth->format('Ym')]) - ->group(['state_user_id']) - ->contain([]); - $transactionsLastMonthTargeDate->select([ - 'state_user_id', - 'sum_amount' => $transactionsLastMonthTargeDate->func()->sum('amount') - ]); - - $transactionsLastMonthTargetDateSortedByStateUserId = []; - foreach ($transactionsLastMonthTargeDate as $transactionCreation) { - $transactionsLastMonthTargetDateSortedByStateUserId[$transactionCreation->state_user_id] = $transactionCreation->sum_amount; - } - - $requestData = $this->request->getData(); - if ($this->request->is('post') && - isset($requestData['searchButton']) && - isset($requestData['searchText']) && - !empty($requestData['searchText']) - ) { - $mode = 'search'; - $page = 0; - $this->log("search for text: ".$requestData['searchText'], 'debug'); - $stateUsers = $stateUserTable - ->find('all') - ->select(['id', 'first_name', 'last_name', 'email']) - ->order(['first_name', 'last_name']) - ->where( - ['AND' => [ - 'disabled' => 0, - 'OR' => [ - 'LOWER(first_name) LIKE' => '%'.strtolower($requestData['searchText']).'%', - 'LOWER(last_name) LIKE' => '%'.strtolower($requestData['searchText']).'%', - 'LOWER(email) LIKE' => '%'.strtolower($requestData['searchText']).'%' - ] - ] - ] - ) - ->contain(['TransactionCreations' => [ - 'fields' => [ - 'TransactionCreations.amount', - 'TransactionCreations.transaction_id', - 'TransactionCreations.state_user_id' - ] - ]]); - $this->log("search query: ".$stateUsers, 'debug'); - } else { - $stateUsers = $stateUserTable - ->find('all') - ->select(['id', 'first_name', 'last_name', 'email']) - //->order(['id']) - ->where(['disabled' => 0]) - ->order(['first_name', 'last_name']) - ->contain(['TransactionCreations' => [ - 'fields' => [ - 'TransactionCreations.amount', - 'TransactionCreations.transaction_id', - 'TransactionCreations.state_user_id' - ] - ]]); - } - - //var_dump($stateUsers->toArray()); - $possibleReceivers = []; - $countUsers = 0; - foreach ($stateUsers as $i => $stateUser) { - $countUsers++; - if ($i < $page * $limit || $i >= ($page + 1) * $limit) { - continue; - } - $sumAmount = 0; - $sumAmount2 = 0; - if (isset($transactionsLastMonthTargetDateSortedByStateUserId[$stateUser->id])) { - $sumAmount2 = $transactionsLastMonthTargetDateSortedByStateUserId[$stateUser->id]; - } - foreach ($stateUser->transaction_creations as $transactionCreation) { - //var_dump($transactionCreation); - if (isset($transactionActiveMonthSortedById[$transactionCreation->transaction_id])) { - $sumAmount += $transactionCreation->amount; - } - } - - //if($sumAmount < 20000000) { - array_push($possibleReceivers, [ - 'name' => $stateUser->first_name . ' ' . $stateUser->last_name, - 'id' => $stateUser->id, - 'email' => $stateUser->email, - 'amount' => $sumAmount, - 'amount2' => $sumAmount2 - ]); - /*} else { - $this->Flash->error(__('Creation above 2.000 GDD for 2 last two month')); - }*/ - } - // usort($possibleReceivers, function ($a, $b) { - // return (strtolower($a['name']) <=> strtolower($b['name'])); - // }); - // -> replaced by SQL "order by" above - $creationForm = new CreationForm(); - - $timeUsed = microtime(true) - $startTime; - $this->set(compact('timeUsed', 'stateUsers', 'creationForm', 'possibleReceivers')); - - $this->set('firstDayLastMonth', $firstDayLastMonth); - $this->set('activeUser', $user); - $this->set('creationForm', $creationForm); - $this->set('transactionExecutingCount', $session->read('Transactions.executing')); - $this->set('timeUsed', microtime(true) - $startTime); - $this->set('countUsers', $countUsers); - $this->set('limit', $limit); - $this->set('page', $page); - - if ($this->request->is('post') && (!isset($mode) || !($mode === 'search'))) { - $this->log("real POST", 'debug'); - $mode = 'next'; - if (isset($requestData['add'])) { - $mode = 'add'; - } - //echo "mode: $mode
    "; - $memo = $requestData['memo']; - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - //$targetDate = $requestData['target_date']; - if (!isset($requestData['user']) || count($requestData['user']) == 0) { - $this->Flash->error(__('No user selected')); - } else { - $users = $requestData['user']; - $pendingTransactionCount = $session->read('Transactions.pending'); - if ($pendingTransactionCount == null) { - $pendingTransactionCount = 0; - } - if (isset($requestData['user_pending'])) { - $pendings = $requestData['user_pending']; - } else { - $pendings = []; - } - $receiverUsers = $stateUserTable->find('all') - ->where(['id IN' => array_keys($users)]) - ->select(['public_key', 'email', 'id']) - ->contain(false); - - foreach ($receiverUsers as $receiverUser) { - $localAmountCent = $amountCent; - //$localTargetDate = $targetDate; - $id = $receiverUser->id; - if ($requestData['user_amount'][$id] != '') { - $localAmountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['user_amount'][$id]); - } - if (isset($requestData['user_target_date']) && isset($requestData['user_target_date'][$id])) { - $localTargetDate = $requestData['user_target_date'][$id]; - } - if (isset($pendings[$id])) { - $pendings[$id] += $localAmountCent; - } else { - $pendings[$id] = $localAmountCent; - } - $pubKeyHex = bin2hex(stream_get_contents($receiverUser->public_key)); - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session->read('session_id'), - 'email' => $receiverUser->email, - 'ask' => ['user.identHash'] - ]), '/getUserInfos'); - - $identHash = 0; - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $identHash = $requestAnswear['data']['userData']['identHash']; - } else { - $this->Flash->error(__('Error by requesting LoginServer, please try again')); - } - - //$identHash = TransactionCreation::DRMakeStringHash($receiverUser->email); - $localTargetDateFrozen = FrozenDate::now(); - $localTargetDateFrozen = $localTargetDateFrozen - ->year($localTargetDate['year']) - ->month($localTargetDate['month']) - ->day($localTargetDate['day']); - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session->read('session_id'), - 'transaction_type' => 'creation', - 'memo' => $memo, - 'amount' => $localAmountCent, - 'target_pubkey' => $pubKeyHex, - 'target_date' => $localTargetDateFrozen, - 'blockchain_type' => $this->blockchainType - ]), '/createTransaction'); - - if('success' != $requestAnswear['state']) { - $this->addAdminError('TransactionCreations', 'createMulti', $requestAnswear, $user['id']); - if ($requestResult['type'] == 'request error') { - $this->Flash->error(__('Error by requesting LoginServer, please try again')); - } else { - $this->Flash->error(__('Error, please wait for the admin to fix it')); - } - } - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $pendingTransactionCount++; - //echo "pending transaction count: $pendingTransactionCount
    "; - } else { - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if amount is invalid in creation - * {"state": "invalid parameter", "msg":"invalid amount", "details":"GDD amount in GDD cent ]0,10000000]"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - if($answear_data['state'] === 'error') { - if($answear_data['msg'] === 'session_id invalid' || $answear_data['msg'] === 'session not found') { - $this->Flash->error(__('Fehler mit der Session, bitte logge dich erneut ein!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - if($answear_data['msg'] === 'user not in group') { - $this->Flash->error(__('Fehler, Benutzer gehört zu einer anderen Gruppe!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - } else if($answear_data['state'] === 'not found' && $answear_data['msg'] === 'receiver not found') { - $this->Flash->error(__('Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else if($answear_data['state'] === 'disabled') { - $this->Flash->error(__('Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden.')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else if($answear_data['msg'] === 'invalid amount') { - $this->Flash->error(__('Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein.')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else { - $this->Flash->error(__('Unbehandelter Fehler: ') . json_encode($answear_data)); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - } - - } - /*echo "pendings: "; - var_dump($pendings); - echo "
    ";*/ - foreach ($possibleReceivers as $i => $possibleReceiver) { - $id = $possibleReceiver['id']; - if (isset($pendings[$id])) { - $possibleReceivers[$i]['pending'] = $pendings[$id]; - } - } - $this->set('possibleReceivers', $possibleReceivers); - if ($pendingTransactionCount > 0) { - $user_balance = 0; - if (isset($user['balance'])) { - $user_balance = $user['balance']; - } - $session->write('Transactions.pending', $pendingTransactionCount); - - if ($mode === 'next') { - return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303); - } else { - $this->Flash->success(__('Transaction submitted for review.')); - } - } - } - } - } - - public function ajaxCreate() - { - if ($this->request->is('post')) { - $startTime = microtime(true); - $jsonData = $this->request->input('json_decode', true); - $session_id = $jsonData['session_id']; - if(!isset($jsonData['session_id']) || intval($jsonData['session_id']) == 0) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'invalid session id']); - } - - $login_result = $this->requestLogin($session_id, false); - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - $memo = ''; - if(isset($jsonData['memo'])) { - $memo = $jsonData['memo']; - } - $auto_sign = true; - if(isset($jsonData['auto_sign'])) { - $auto_sign = $jsonData['auto_sign']; - } - if(!isset($jsonData['amount']) || intval($jsonData['amount']) <= 0) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'amount not set or <= 0']); - } - if(!isset($jsonData['email'])) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'no receiver email set']); - } - $amount = intval($jsonData['amount']); - if($amount > 10000000) { - return $this->returnJson(['state' => 'error', 'msg' => 'amount is to big']); - } - if($amount <= 0) { - return $this->returnJson(['state' => 'error', 'msg' => 'amount must be > 0']); - } - if(!isset($jsonData['target_date'])) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'target_date not found']); - } - //$targetDate = $requestData['target_date']; - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $jsonData['email'], - 'ask' => ['user.pubkeyhex', 'user.disabled', 'user.identHash'] - ]), '/getUserInfos'); - $receiverPubKeyHex = ''; - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - // will be allways 64 byte long, even if it is empty - $receiverPubKeyHex = $requestAnswear['data']['userData']['pubkeyhex']; - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver email not found on login-server', - 'details' => $requestAnswear, - 'timeUsed' => microtime(true) - $startTime - ]); - } - if($requestAnswear['data']['userData']['disabled']) { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver is currently disabled, he cannot receive creations', - 'timeUsed' => microtime(true) - $startTime - ]); - } - - $builderResult = TransactionCreation::build( - $amount, - $memo, - $receiverPubKeyHex, - new FrozenDate($jsonData['target_date']) - ); - $transaction_base64 = ''; - if ($builderResult['state'] == 'success') { - // todo: maybe use sodium base 64 encoder to make sure it can be readed from login-server - $transaction_base64 = base64_encode($builderResult['transactionBody']->serializeToString()); - } - - $requestResult = $this->JsonRequestClient->sendTransaction( - $session_id, - $transaction_base64, - $user['balance'], - $auto_sign, - $this->blockchainType - ); - if ($requestResult['state'] != 'success') { - $msg = 'error returned from login server'; - if ($requestResult['type'] === 'request error') { - $msg = 'login server couldn\'t reached'; - } - //$this->Flash->error(__('Error, please wait for the admin to fix it')); - return $this->returnJson([ - 'state' => 'request error', - 'msg' => $msg, - 'details' => $requestResult, - 'timeUsed' => microtime(true) - $startTime - ]); - } else { - $json = $requestResult['data']; - if ($json['state'] != 'success') { - if ($json['msg'] == 'session not found') { - $session->destroy(); - return $this->returnJson(['state' => 'error', 'msg' => 'session not found', 'timeUsed' => microtime(true) - $startTime]); - } else { - return $this->returnJson(['state' => 'error', 'msg' => 'login server error', 'details' => $json, 'timeUsed' => microtime(true) - $startTime]); - } - } else { - return $this->returnJson(['state' => 'success', 'timeUsed' => microtime(true) - $startTime]); - } - } - } - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - - $transactionCreation = $this->TransactionCreations->newEntity(); - if ($this->request->is('post')) { - $transactionCreation = $this->TransactionCreations->patchEntity($transactionCreation, $this->request->getData()); - if ($this->TransactionCreations->save($transactionCreation)) { - $this->Flash->success(__('The transaction creation has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction creation could not be saved. Please, try again.')); - } - $transactions = $this->TransactionCreations->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionCreations->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionCreation', 'transactions', 'stateUsers')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Creation id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionCreation = $this->TransactionCreations->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionCreation = $this->TransactionCreations->patchEntity($transactionCreation, $this->request->getData()); - if ($this->TransactionCreations->save($transactionCreation)) { - $this->Flash->success(__('The transaction creation has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction creation could not be saved. Please, try again.')); - } - $transactions = $this->TransactionCreations->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionCreations->StateUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionCreation', 'transactions', 'stateUsers')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Creation id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionCreation = $this->TransactionCreations->get($id); - if ($this->TransactionCreations->delete($transactionCreation)) { - $this->Flash->success(__('The transaction creation has been deleted.')); - } else { - $this->Flash->error(__('The transaction creation could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionGroupAddaddressController.php b/community_server/src/Controller/TransactionGroupAddaddressController.php deleted file mode 100644 index fc23c111b..000000000 --- a/community_server/src/Controller/TransactionGroupAddaddressController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'AddressTypes'] - ]; - $transactionGroupAddaddress = $this->paginate($this->TransactionGroupAddaddress); - - $this->set(compact('transactionGroupAddaddress')); - } - - /** - * View method - * - * @param string|null $id Transaction Group Addaddres id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id, [ - 'contain' => ['Transactions', 'AddressTypes'] - ]); - - $this->set('transactionGroupAddaddres', $transactionGroupAddaddres); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->newEntity(); - if ($this->request->is('post')) { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->patchEntity($transactionGroupAddaddres, $this->request->getData()); - if ($this->TransactionGroupAddaddress->save($transactionGroupAddaddres)) { - $this->Flash->success(__('The transaction group addaddres has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group addaddres could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAddaddress->Transactions->find('list', ['limit' => 200]); - $addressTypes = $this->TransactionGroupAddaddress->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAddaddres', 'transactions', 'addressTypes')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Group Addaddres id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->patchEntity($transactionGroupAddaddres, $this->request->getData()); - if ($this->TransactionGroupAddaddress->save($transactionGroupAddaddres)) { - $this->Flash->success(__('The transaction group addaddres has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group addaddres could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAddaddress->Transactions->find('list', ['limit' => 200]); - $addressTypes = $this->TransactionGroupAddaddress->AddressTypes->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAddaddres', 'transactions', 'addressTypes')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Group Addaddres id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id); - if ($this->TransactionGroupAddaddress->delete($transactionGroupAddaddres)) { - $this->Flash->success(__('The transaction group addaddres has been deleted.')); - } else { - $this->Flash->error(__('The transaction group addaddres could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionGroupAllowtradesController.php b/community_server/src/Controller/TransactionGroupAllowtradesController.php deleted file mode 100644 index 0b83332c6..000000000 --- a/community_server/src/Controller/TransactionGroupAllowtradesController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'Groups'] - ]; - $transactionGroupAllowtrades = $this->paginate($this->TransactionGroupAllowtrades); - - $this->set(compact('transactionGroupAllowtrades')); - } - - /** - * View method - * - * @param string|null $id Transaction Group Allowtrade id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id, [ - 'contain' => ['Transactions', 'Groups'] - ]); - - $this->set('transactionGroupAllowtrade', $transactionGroupAllowtrade); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->newEntity(); - if ($this->request->is('post')) { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->patchEntity($transactionGroupAllowtrade, $this->request->getData()); - if ($this->TransactionGroupAllowtrades->save($transactionGroupAllowtrade)) { - $this->Flash->success(__('The transaction group allowtrade has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group allowtrade could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAllowtrades->Transactions->find('list', ['limit' => 200]); - $groups = $this->TransactionGroupAllowtrades->Groups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAllowtrade', 'transactions', 'groups')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Group Allowtrade id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->patchEntity($transactionGroupAllowtrade, $this->request->getData()); - if ($this->TransactionGroupAllowtrades->save($transactionGroupAllowtrade)) { - $this->Flash->success(__('The transaction group allowtrade has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group allowtrade could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupAllowtrades->Transactions->find('list', ['limit' => 200]); - $groups = $this->TransactionGroupAllowtrades->Groups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupAllowtrade', 'transactions', 'groups')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Group Allowtrade id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id); - if ($this->TransactionGroupAllowtrades->delete($transactionGroupAllowtrade)) { - $this->Flash->success(__('The transaction group allowtrade has been deleted.')); - } else { - $this->Flash->error(__('The transaction group allowtrade could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionGroupCreatesController.php b/community_server/src/Controller/TransactionGroupCreatesController.php deleted file mode 100644 index 57e5c7d8f..000000000 --- a/community_server/src/Controller/TransactionGroupCreatesController.php +++ /dev/null @@ -1,113 +0,0 @@ -paginate = [ - 'contain' => ['Transactions', 'StateGroups'] - ]; - $transactionGroupCreates = $this->paginate($this->TransactionGroupCreates); - - $this->set(compact('transactionGroupCreates')); - } - - /** - * View method - * - * @param string|null $id Transaction Group Create id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionGroupCreate = $this->TransactionGroupCreates->get($id, [ - 'contain' => ['Transactions', 'StateGroups'] - ]); - - $this->set('transactionGroupCreate', $transactionGroupCreate); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionGroupCreate = $this->TransactionGroupCreates->newEntity(); - if ($this->request->is('post')) { - $transactionGroupCreate = $this->TransactionGroupCreates->patchEntity($transactionGroupCreate, $this->request->getData()); - if ($this->TransactionGroupCreates->save($transactionGroupCreate)) { - $this->Flash->success(__('The transaction group create has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group create could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupCreates->Transactions->find('list', ['limit' => 200]); - $stateGroups = $this->TransactionGroupCreates->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupCreate', 'transactions', 'stateGroups')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Group Create id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionGroupCreate = $this->TransactionGroupCreates->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionGroupCreate = $this->TransactionGroupCreates->patchEntity($transactionGroupCreate, $this->request->getData()); - if ($this->TransactionGroupCreates->save($transactionGroupCreate)) { - $this->Flash->success(__('The transaction group create has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction group create could not be saved. Please, try again.')); - } - $transactions = $this->TransactionGroupCreates->Transactions->find('list', ['limit' => 200]); - $stateGroups = $this->TransactionGroupCreates->StateGroups->find('list', ['limit' => 200]); - $this->set(compact('transactionGroupCreate', 'transactions', 'stateGroups')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Group Create id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionGroupCreate = $this->TransactionGroupCreates->get($id); - if ($this->TransactionGroupCreates->delete($transactionGroupCreate)) { - $this->Flash->success(__('The transaction group create has been deleted.')); - } else { - $this->Flash->error(__('The transaction group create could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionSendCoinsController.php b/community_server/src/Controller/TransactionSendCoinsController.php deleted file mode 100644 index bffc88290..000000000 --- a/community_server/src/Controller/TransactionSendCoinsController.php +++ /dev/null @@ -1,469 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRequestClient'); - //$this->Auth->allow(['add', 'edit']); - $this->Auth->allow('create'); - $this->Auth->allow('createRaw'); - $this->Auth->allow('ajaxCreate'); - $this->set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))-> - add(new NaviHierarchyEntry(__('Überweisung'), 'TransactionSendCoins', 'create', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['Transactions', 'StateUsers', 'ReceiverUsers'] - ]; - $transactionSendCoins = $this->paginate($this->TransactionSendCoins); - $simple = $this->TransactionSendCoins->find('all'); - - $this->set(compact('transactionSendCoins', 'simple')); - } - - /** - * View method - * - * @param string|null $id Transaction Send Coin id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionSendCoin = $this->TransactionSendCoins->get($id, [ - 'contain' => ['Transactions', 'StateUsers', 'ReceiverUsers'] - ]); - - $this->set('transactionSendCoin', $transactionSendCoin); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionSendCoin = $this->TransactionSendCoins->newEntity(); - if ($this->request->is('post')) { - $transactionSendCoin = $this->TransactionSendCoins->patchEntity($transactionSendCoin, $this->request->getData()); - if ($this->TransactionSendCoins->save($transactionSendCoin)) { - $this->Flash->success(__('The transaction send coin has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction send coin could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSendCoins->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionSendCoins->StateUsers->find('list', ['limit' => 200]); - $receiverUsers = $this->TransactionSendCoins->ReceiverUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionSendCoin', 'transactions', 'stateUsers', 'receiverUsers')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Send Coin id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionSendCoin = $this->TransactionSendCoins->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionSendCoin = $this->TransactionSendCoins->patchEntity($transactionSendCoin, $this->request->getData()); - if ($this->TransactionSendCoins->save($transactionSendCoin)) { - $this->Flash->success(__('The transaction send coin has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction send coin could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSendCoins->Transactions->find('list', ['limit' => 200]); - $stateUsers = $this->TransactionSendCoins->StateUsers->find('list', ['limit' => 200]); - $receiverUsers = $this->TransactionSendCoins->ReceiverUsers->find('list', ['limit' => 200]); - $this->set(compact('transactionSendCoin', 'transactions', 'stateUsers', 'receiverUsers')); - } - - public function create() - { - /*$locale = I18n::getLocale(); - $defaultLocale = I18n::getDefaultLocale(); - echo "locale: $locale, default locale: $defaultLocale
    "; - * */ - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); -// var_dump($user); - if(!$user) { - //return $this->redirect(Router::url('/', true) . 'account/', 303); - $result = $this->requestLogin(); - if($result !== true) { - return $result; - } - $user = $session->read('StateUser'); - } - - $known_groups = $this->JsonRequestClient->sendRequest(json_encode([ - 'ask' => ['groups'] - ]), '/networkInfos'); - - - $transferForm = new TransferForm(); - $this->set('transferForm', $transferForm); - $this->set('timeUsed', microtime(true) - $startTime); - $this->set('groups', $known_groups['data']['data']['groups']); - $this->set('user', $user); - - if ($this->request->is('post')) { - //$this->Flash->error(__('Wird zurzeit noch entwickelt!')); - - $requestData = $this->request->getData(); - $mode = 'next'; - if(isset($requestData['add'])) {$mode = 'add'; } - if($transferForm->validate($requestData)) { - - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - - if(!isset($user['balance']) || $amountCent > $user['balance']) { - $this->Flash->error(__('Du hast nicht genug Gradidos!')); - return; - } - - $receiverEmail = $requestData['email']; - if($receiverEmail === $user['email']) { - $this->Flash->error(__('Du kannst dir selbst keine Gradidos senden!')); - return; - } - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session->read('session_id'), - 'transaction_type' => 'transfer', - 'memo' => $requestData['memo'], - 'amount' => $amountCent, - 'target_group' => $known_groups['data']['data']['groups'][$requestData['group']], - 'target_email' => $receiverEmail, - 'blockchain_type' => $this->blockchainType - ]), '/createTransaction'); - - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - $pendingTransactionCount = $session->read('Transactions.pending'); - if($pendingTransactionCount == null) { - $pendingTransactionCount = 1; - } else { - $pendingTransactionCount++; - } - $session->write('Transactions.pending', $pendingTransactionCount); - //echo "pending: " . $pendingTransactionCount; - if($mode === 'next') { - return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303); - } else { - $this->Flash->success(__('Transaction submitted for review.')); - } - } else { - - /* - * if request contain unknown parameter format, shouldn't happen't at all - * {"state": "error", "msg": "parameter format unknown"} - * if json parsing failed - * {"state": "error", "msg": "json exception", "details":"exception text"} - * if session_id is zero or not set - * {"state": "error", "msg": "session_id invalid"} - * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes) - * {"state": "error", "msg": "session not found"} - * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen - * {"state": "code error", "msg":"user is zero"} - * if transaction type not known - * {"state": "error", "msg":"transaction_type unknown"} - * if receiver wasn't known to Login-Server - * {"state": "not found", "msg":"receiver not found"} - * if receiver account disabled, and therefor cannto receive any coins - * {"state": "disabled", "msg":"receiver is disabled"} - * if transaction was okay and will be further proccessed - * {"state":"success"} - */ - $answear_data = $requestAnswear['data']; - if($answear_data['state'] === 'error') { - if($answear_data['msg'] === 'session_id invalid' || $answear_data['msg'] === 'session not found') { - $this->Flash->error(__('Fehler mit der Session, bitte logge dich erneut ein!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - if($answear_data['msg'] === 'user not in group') { - $this->Flash->error(__('Empfänger befindet sich nicht in Zielgruppe!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - if($answear_data['msg'] === 'memo is not set or not in expected range [5;150]') { - $this->Flash->error(__('Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - } else if($answear_data['state'] === 'not found' && $answear_data['msg'] === 'receiver not found') { - $this->Flash->error(__('Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else if($answear_data['state'] === 'disabled') { - $this->Flash->error(__('Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden.')); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } else { - $this->Flash->error(__('Unbehandelter Fehler: ') . json_encode($answear_data)); - $this->set('timeUsed', microtime(true) - $startTime); - return; - } - - } - } - } - - $this->set('timeUsed', microtime(true) - $startTime); - } - - public function ajaxCreate() - { - if ($this->request->is('post')) { - $startTime = microtime(true); - $jsonData = $this->request->input('json_decode', true); - $session_id = $jsonData['session_id']; - if(!$session_id) { - return $this->returnJson(['state' => 'error', 'msg' => 'invalid session id']); - } - - $login_result = $this->requestLogin($session_id, false); - if($login_result !== true) { - return $this->returnJson($login_result); - } - $session = $this->getRequest()->getSession(); - $user = $session->read('StateUser'); - - $receiverPubKeyHex = ''; - $senderPubKeyHex = $user['public_hex']; - - if(!isset($jsonData['amount']) || !isset($jsonData['email'])) { - return $this->returnJson(['state' => 'parameter missing', 'msg' => 'amount and/or email not set']); - } - $amount = intval($jsonData['amount']); - if($amount < 0) { - return $this->returnJson(['state' => 'error', 'msg' => 'amout must be > 0 and int']); - } - - if(!isset($user['balance']) || $jsonData['amount'] > $user['balance']) { - return $this->returnJson(['state' => 'error', 'msg' => 'not enough GDD']); - } - $memo = ''; - if(isset($jsonData['memo'])) { - $memo = $jsonData['memo']; - } - - $receiverEmail = $jsonData['email']; - if($receiverEmail === $user['email']) { - return $this->returnJson(['state' => 'error', 'msg' => 'sender and receiver email are the same']); - } - - $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([ - 'session_id' => $session_id, - 'email' => $receiverEmail, - 'ask' => ['user.pubkeyhex', 'user.disabled'] - ]), '/getUserInfos'); - if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) { - // will be allways 64 byte long, even if it is empty - $receiverPubKeyHex = $requestAnswear['data']['userData']['pubkeyhex']; - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver email not found on login-server', - 'details' => $requestAnswear, - 'timeUsed' => microtime(true) - $startTime - ]); - } - if($requestAnswear['data']['userData']['disabled']) { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'receiver is currently disabled, he cannot receive payments', - 'timeUsed' => microtime(true) - $startTime - ]); - } - - - //var_dump($sessionStateUser); - - $builderResult = TransactionTransfer::build( - $amount, - $memo, - $receiverPubKeyHex, - $senderPubKeyHex - ); - $auto_sign = true; - if(isset($jsonData['auto_sign'])) { - $auto_sign = $jsonData['auto_sign']; - } - if($builderResult['state'] === 'success') { - - $http = new Client(); - try { - $loginServer = Configure::read('LoginServer'); - $url = $loginServer['host'] . ':' . $loginServer['port']; - - $response = $http->post($url . '/checkTransaction', json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()), - 'auto_sign' => $auto_sign, - 'balance' => $user['balance'] - ]), ['type' => 'json']); - $json = $response->getJson(); - if($json['state'] != 'success') { - if($json['msg'] == 'session not found') { - $session->destroy(); - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'session not found', - 'details' => $session_id, - 'timeUsed' => microtime(true) - $startTime - ]); - //$this->Flash->error(__('session not found, please login again')); - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'login server return error', - 'details' => $json, - 'timeUsed' => microtime(true) - $startTime - ]); - } - } else { - return $this->returnJson(['state' => 'success', 'timeUsed' => microtime(true) - $startTime]); - } - - } catch(\Exception $e) { - $msg = $e->getMessage(); - //$this->Flash->error(__('error http request: ') . $msg); - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'error http request', - 'details' => $msg, - 'timeUsed' => microtime(true) - $startTime - ]); - } - - } else { - return $this->returnJson([ - 'state' => 'error', - 'msg' => 'no valid receiver public key given', - 'details' => $receiverPubKeyHex, - 'timeUsed' => microtime(true) - $startTime - ]); - } - } - return $this->returnJson(['state' => 'error', 'msg' => 'no post request']); - } - - public function createRaw() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - - $transferRawForm = new TransferRawForm(); - $this->set('transferRawForm', $transferRawForm); - - if ($this->request->is('post')) { - $requestData = $this->request->getData(); - if($transferRawForm->validate($requestData)) { - $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); - $sender = ['priv' => $requestData['sender_privkey_hex'], 'pub' => $requestData['sender_pubkey_hex']]; - $reciver = ['pub' => $requestData['receiver_pubkey_hex']]; - - $builderResult = TransactionTransfer::build( - $amountCent, - $requestData['memo'], - $reciver['pub'], - $sender['pub'] - ); - if($builderResult['state'] === 'success') { - $protoTransaction = Transaction::build($builderResult['transactionBody'], $sender); - $transaction = new Transaction($protoTransaction); - if(!$transaction->validate()) { - $this->Flash->error(__('Error validating transaction')); - } else { - if(!$transaction->save()) { - $this->Flash->error(__('Error saving transaction')); - } else { - $this->Flash->success(__('Gradidos erfolgreich überwiesen!')); - } - } - } else { - $this->Flash->error(__('Error building transaction')); - } - - } - //var_dump($requestData); - // - //var_dump($data); - - } - - $this->set('timeUsed', microtime(true) - $startTime); - } - - /** - * Delete method - * - * @param string|null $id Transaction Send Coin id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionSendCoin = $this->TransactionSendCoins->get($id); - if ($this->TransactionSendCoins->delete($transactionSendCoin)) { - $this->Flash->success(__('The transaction send coin has been deleted.')); - } else { - $this->Flash->error(__('The transaction send coin could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionSignaturesController.php b/community_server/src/Controller/TransactionSignaturesController.php deleted file mode 100644 index 91aea9558..000000000 --- a/community_server/src/Controller/TransactionSignaturesController.php +++ /dev/null @@ -1,111 +0,0 @@ -paginate = [ - 'contain' => ['Transactions'] - ]; - $transactionSignatures = $this->paginate($this->TransactionSignatures); - - $this->set(compact('transactionSignatures')); - } - - /** - * View method - * - * @param string|null $id Transaction Signature id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionSignature = $this->TransactionSignatures->get($id, [ - 'contain' => ['Transactions'] - ]); - - $this->set('transactionSignature', $transactionSignature); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionSignature = $this->TransactionSignatures->newEntity(); - if ($this->request->is('post')) { - $transactionSignature = $this->TransactionSignatures->patchEntity($transactionSignature, $this->request->getData()); - if ($this->TransactionSignatures->save($transactionSignature)) { - $this->Flash->success(__('The transaction signature has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction signature could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSignatures->Transactions->find('list', ['limit' => 200]); - $this->set(compact('transactionSignature', 'transactions')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Signature id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionSignature = $this->TransactionSignatures->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionSignature = $this->TransactionSignatures->patchEntity($transactionSignature, $this->request->getData()); - if ($this->TransactionSignatures->save($transactionSignature)) { - $this->Flash->success(__('The transaction signature has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction signature could not be saved. Please, try again.')); - } - $transactions = $this->TransactionSignatures->Transactions->find('list', ['limit' => 200]); - $this->set(compact('transactionSignature', 'transactions')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Signature id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionSignature = $this->TransactionSignatures->get($id); - if ($this->TransactionSignatures->delete($transactionSignature)) { - $this->Flash->success(__('The transaction signature has been deleted.')); - } else { - $this->Flash->error(__('The transaction signature could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionTypesController.php b/community_server/src/Controller/TransactionTypesController.php deleted file mode 100644 index 8256b22eb..000000000 --- a/community_server/src/Controller/TransactionTypesController.php +++ /dev/null @@ -1,106 +0,0 @@ -paginate($this->TransactionTypes); - - $this->set(compact('transactionTypes')); - } - - /** - * View method - * - * @param string|null $id Transaction Type id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transactionType = $this->TransactionTypes->get($id, [ - 'contain' => ['Transactions'] - ]); - - $this->set('transactionType', $transactionType); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transactionType = $this->TransactionTypes->newEntity(); - if ($this->request->is('post')) { - $transactionType = $this->TransactionTypes->patchEntity($transactionType, $this->request->getData()); - if ($this->TransactionTypes->save($transactionType)) { - $this->Flash->success(__('The transaction type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction type could not be saved. Please, try again.')); - } - $this->set(compact('transactionType')); - } - - /** - * Edit method - * - * @param string|null $id Transaction Type id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transactionType = $this->TransactionTypes->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transactionType = $this->TransactionTypes->patchEntity($transactionType, $this->request->getData()); - if ($this->TransactionTypes->save($transactionType)) { - $this->Flash->success(__('The transaction type has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction type could not be saved. Please, try again.')); - } - $this->set(compact('transactionType')); - } - - /** - * Delete method - * - * @param string|null $id Transaction Type id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transactionType = $this->TransactionTypes->get($id); - if ($this->TransactionTypes->delete($transactionType)) { - $this->Flash->success(__('The transaction type has been deleted.')); - } else { - $this->Flash->error(__('The transaction type could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/TransactionsController.php b/community_server/src/Controller/TransactionsController.php deleted file mode 100644 index 67526dfcc..000000000 --- a/community_server/src/Controller/TransactionsController.php +++ /dev/null @@ -1,450 +0,0 @@ -loadComponent('GradidoNumber'); - $this->loadComponent('JsonRpcRequestClient'); - $this->Auth->allow(['decode', 'manualTransaction']); - - } - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $this->paginate = [ - 'contain' => ['TransactionTypes'] - ]; - $transactions = $this->paginate($this->Transactions); - - $this->set(compact('transactions')); - } - - public function synchronizeWithStateUserTransactions() - { - $startTime = microtime(true); - $missing_transaction_ids = []; - $transaction_ids = $this->Transactions - ->find('all') - ->select(['id', 'transaction_type_id']) - ->order(['id']) - ->all() - ; - $state_user_transaction_ids = $this->Transactions->StateUserTransactions - ->find('all') - ->select(['transaction_id']) - ->group(['transaction_id']) - ->order(['transaction_id']) - ->toArray() - ; - $i2 = 0; - $count1 = count($transaction_ids); - $count2 = count($state_user_transaction_ids); - foreach($transaction_ids as $i1 => $tr_id) { - //echo "$i1: "; - if($i2 >= $count2) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id, continue
    "; - continue; - } - $stu_id = $state_user_transaction_ids[$i2]; - if($tr_id->id == $stu_id->transaction_id) { - $i2++; - //echo "after i2++: $i2
    "; - } else if($tr_id->id < $stu_id->transaction_id) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id
    "; - } - } - - if($this->request->is('POST')) { - $tablesForType = [ - 1 => $this->Transactions->TransactionCreations, - 2 => $this->Transactions->TransactionSendCoins, - 3 => $this->Transactions->TransactionGroupCreates, - 4 => $this->Transactions->TransactionGroupAddaddress, - 5 => $this->Transactions->TransactionGroupAddaddress - ]; - $idsForType = []; - foreach($missing_transaction_ids as $i => $transaction) { - if(!isset($idsForType[$transaction->transaction_type_id])) { - $idsForType[$transaction->transaction_type_id] = []; - } - $idsForType[$transaction->transaction_type_id][] = $transaction->id; - if($i > 200) break; - } - $entities = []; - $state_user_ids = []; - foreach($idsForType as $type_id => $transaction_ids) { - $specific_transactions = $tablesForType[$type_id]->find('all')->where(['transaction_id IN' => $transaction_ids])->toArray(); - $keys = $tablesForType[$type_id]->getSchema()->columns(); - //var_dump($keys); - foreach($specific_transactions as $specific) { - - foreach($keys as $key) { - if(preg_match('/_user_id/', $key)) { - $entity = $this->Transactions->StateUserTransactions->newEntity(); - $entity->transaction_id = $specific['transaction_id']; - $entity->transaction_type_id = $type_id; - $entity->state_user_id = $specific[$key]; - if(!in_array($entity->state_user_id, $state_user_ids)) { - array_push($state_user_ids, $entity->state_user_id); - } - $entities[] = $entity; - } - } - } - } - //var_dump($entities); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $existingStateUsers = $stateUsersTable->find('all')->select(['id'])->where(['id IN' => $state_user_ids])->order(['id'])->all(); - $existing_state_user_ids = []; - $finalEntities = []; - foreach($existingStateUsers as $stateUser) { - $existing_state_user_ids[] = $stateUser->id; - } - foreach($entities as $entity) { - if(in_array($entity->state_user_id, $existing_state_user_ids)) { - array_push($finalEntities, $entity); - } - } - - - $results = $this->Transactions->StateUserTransactions->saveMany($finalEntities); - foreach($entities as $i => $entity) { - $errors = $entity->getErrors(); - /* if(count($errors)) { - echo "$i: "; - echo json_encode($errors); - echo "
    "; - echo "state_user_id: " . $entity->state_user_id; - echo "
    "; - }*/ - } - $this->set('results', $results); - $this->set('entities', $entities); - } - - $this->set('missing_transactions', $missing_transaction_ids); - $this->set('count1', $count1); - $this->set('count2', $count2); - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - - /** - * View method - * - * @param string|null $id Transaction id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $transaction = $this->Transactions->get($id, [ - 'contain' => ['TransactionTypes', 'TransactionCreations', 'TransactionGroupAddaddress', 'TransactionGroupAllowtrades', 'TransactionGroupCreates', 'TransactionSendCoins', 'TransactionSignatures'] - ]); - - $this->set('transaction', $transaction); - } - - public function manualTransaction() - { - if ($this->request->is('post')) { - $data = $this->request->getData(); - $type = $data['type']; - - $transaction = new \Proto\Gradido\GradidoTransaction(); - $transactionBody = new \Proto\Gradido\TransactionBody(); - $transactionBody->setMemo($data['memo']); - $created = new \Proto\Gradido\TimestampSeconds(); - $now = new Time(); - $created->setSeconds($now->getTimestamp()); - $transactionBody->setCreated($created); - if($type == "creation") { - $creation = new \Proto\Gradido\GradidoCreation(); - $target_date = new \Proto\Gradido\TimestampSeconds(); - $target_time = new Time($data['target_date']); - $target_date->setSeconds($target_time->getTimestamp()); - $creation->setTargetDate($target_date); - $receiver = new \Proto\Gradido\TransferAmount(); - $receiver->setAmount(intval($data['amount'])); - $receiver->setPubkey(hex2bin($data['target_public_key'])); - $creation->setReceiver($receiver); - $transactionBody->setCreation($creation); - } else if($type == "transfer") { - $transfer = new \Proto\Gradido\GradidoTransfer(); - $local_transfer = new \Proto\Gradido\LocalTransfer(); - $sender = new \Proto\Gradido\TransferAmount(); - $sender->setAmount(intval($data['amount'])); - $sender->setPubkey(hex2bin($data['sender_public_key'])); - $local_transfer->setSender($sender); - $local_transfer->setReceiver(hex2bin($data['receiver_public_key'])); - $transfer->setLocal($local_transfer); - $transactionBody->setTransfer($transfer); - } - $body_bytes = $transactionBody->serializeToString(); - $transaction->setBodyBytes($body_bytes); - - $protoSigMap = new \Proto\Gradido\SignatureMap(); - $sigPairs = $protoSigMap->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); echo "
    "; - //return null; - - // sign with keys - //foreach($keys as $key) { - $sigPair = new \Proto\Gradido\SignaturePair(); - $sigPair->setPubKey(hex2bin($data['signer_public_key'])); - - $signature = sodium_crypto_sign_detached($body_bytes, hex2bin($data['signer_private_key'])); - echo "signature: " . bin2hex($signature). "
    "; - $sigPair->setEd25519($signature); - - $sigPairs[] = $sigPair; - // SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING - // SODIUM_BASE64_VARIANT_ORIGINAL - $transaction->setSigMap($protoSigMap); - //var_dump($protoSigMap); - $transaction_bin = $transaction->serializeToString(); -// $url_safe = sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL); - $base64 = [ - //'original' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL), - //'original_nopadding' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL_NO_PADDING), - //'urlsafe' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_URLSAFE), - 'urlsafe_nopadding' => sodium_bin2base64($transaction_bin, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING), - 'php' => base64_encode($transaction_bin) - - ]; - - $this->set('base64', $base64); - } - } - - public function decode() - { - $this->viewBuilder()->setLayout('frontend'); - if ($this->request->is('post')) { - $base64 = $this->request->getData('base64'); - if(!$base64 || $base64 == '') { - $this->Flash->error(__('No valid data given, please try again.')); - } else { - try { - $transactionBin = sodium_base642bin($base64, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING); - } catch(Exception $ex) { - var_dump($ex); - } - $transaction = new TransactionBody($transactionBin); - if($transaction->hasErrors()) { - $this->set('errors', $transaction->getErrors()); - } else { - //$transaction->validate(); - if($transaction->hasErrors()) { - $this->set('errors', $transaction->getErrors()); - } - //var_dump($transaction); - echo "
    bin:
    "; - var_dump($transactionBin); - echo "
    "; - $this->set('transaction', $transaction); - } - - } - } - - } - - public function sendToNode() { - $this->viewBuilder()->setLayout('frontend'); - $startTime = microtime(true); - - //$loginServer = Configure::read('LoginServer'); - - $jsonRpcResult = $this->JsonRpcRequestClient->request('getlasttransaction', []); - $result = $jsonRpcResult['result']; - //var_dump($result); - if($result['state'] != 'success') { - $this->Flash->error(__('error retriving last saved transaction from gradido node.')); - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - return; - } - - $firstId = 1; - if($result['transaction'] != '') { - $lastKnowTransaction = new Transaction($result['transaction']); - $firstId = $lastKnowTransaction->getId()+1; - } - - $transactionIDEntities = $this->Transactions - ->find('all') - ->select(['id']) - ->where(['id >=' => $firstId]) - ; - $transactionIDs = []; - foreach($transactionIDEntities as $entity) { - array_push($transactionIDs, $entity->id); - } - - $csfr_token = $this->request->getParam('_csrfToken'); - $this->set('csfr_token', $csfr_token); - $this->set('transactionIds', $transactionIDs); - - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - - if ($this->request->is('post')) { - $host = $this->request->getData('host'); - $port = $this->request->getData('port'); - //$gradidod = new JsonRpcClient($host . ':' . $port); - - - //var_dump($transactionIDs); - - //$result = $this->JsonRpcRequestClient->request('puttransaction', ['group' => 'Hallo', 'transaction' => 'Hallo2' ]); - - //$result = $gradidod->putTransaction(['group' => 'Hallo', 'transaction' => 'Hallo2' ]); - //var_dump($result); - - $timeUsed = microtime(true) - $startTime; - $this->set('timeUsed', $timeUsed); - } - } - - public function ajaxPutTransactionToGradidoNode() - { - $startTime = microtime(true); - if($this->request->is('post')) { - //$jsonData = $this->request->input('json_decode', true); - $data = $this->request->getData(); - //$user = $jsonData['user']; - //var_dump($data); - $transactionId = $data['transaction_id']; - if($transactionId == null || $transactionId < 1) { - $timeUsed = microtime(true) - $startTime; - return $this->returnJson(['state' => 'error', 'msg' => 'invalid transaction id', 'timeUsed' => $timeUsed]); - } - try { - $transaction = Transaction::fromTable($transactionId); - } catch(Exception $e) { - echo "exception: "; - var_dump($e); - } - if(is_array($transaction)) { - $timeUsed = microtime(true) - $startTime; - $transaction['timeUsed'] = $timeUsed; - return $this->returnJson($transaction); - } else { - $transactionBase64 = base64_encode($transaction->serializeToString()); - //echo "base64:
    $transactionBase64
    "; - - $result = $this->JsonRpcRequestClient->request('puttransaction', [ - 'group' => 'd502c4254defe1842d71c484dc35f56983ce938e3c22058795c7520b62ab9123', - 'transaction' => $transactionBase64 - ]); - - $timeUsed = microtime(true) - $startTime; - $result['timeUsed'] = $timeUsed; - return $this->returnJson($result); - } - //return $this->returnJson(['state' => 'success', 'timeUsed' => $timeUsed]); - } - $timeUsed = microtime(true) - $startTime; - return $this->returnJson(['state' => 'error', 'msg' => 'no post request', 'timeUsed' => $timeUsed]); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $transaction = $this->Transactions->newEntity(); - if ($this->request->is('post')) { - $transaction = $this->Transactions->patchEntity($transaction, $this->request->getData()); - if ($this->Transactions->save($transaction)) { - $result = $this->Transactions->updateTxHash($transaction, 'start decay'); - if($result === true) { - $this->Flash->success(__('The transaction has been saved.')); - return $this->redirect(['action' => 'index']); - } else { - $this->Flash->error(__('Error by saving: ' . json_encode($result))); - } - } - $this->Flash->error(__('The transaction could not be saved. Please, try again.')); - } - $stateGroups = $this->Transactions->StateGroups->find('list', ['limit' => 200]); - $transactionTypes = $this->Transactions->TransactionTypes->find('list', ['limit' => 200]); - $blockchainTypes = $this->Transactions->BlockchainTypes->find('list'); - $this->set(compact('transaction', 'stateGroups', 'transactionTypes', 'blockchainTypes')); - } - - /** - * Edit method - * - * @param string|null $id Transaction id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $transaction = $this->Transactions->get($id, [ - 'contain' => [] - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $transaction = $this->Transactions->patchEntity($transaction, $this->request->getData()); - if ($this->Transactions->save($transaction)) { - $this->Flash->success(__('The transaction has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The transaction could not be saved. Please, try again.')); - } - $stateGroups = $this->Transactions->StateGroups->find('list', ['limit' => 200]); - $transactionTypes = $this->Transactions->TransactionTypes->find('list', ['limit' => 200]); - $this->set(compact('transaction', 'stateGroups', 'transactionTypes')); - } - - /** - * Delete method - * - * @param string|null $id Transaction id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $transaction = $this->Transactions->get($id); - if ($this->Transactions->delete($transaction)) { - $this->Flash->success(__('The transaction has been deleted.')); - } else { - $this->Flash->error(__('The transaction could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Controller/UsersController.php b/community_server/src/Controller/UsersController.php deleted file mode 100644 index f6b0472d3..000000000 --- a/community_server/src/Controller/UsersController.php +++ /dev/null @@ -1,167 +0,0 @@ -set( - 'naviHierarchy', - (new NaviHierarchy())-> - add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzerstatistiken'), 'Users', 'statistics', true)) - ); - } - - /** - * Index method - * - * @return \Cake\Http\Response|null - */ - public function index() - { - $users = $this->paginate($this->Users); - - $this->set(compact('users')); - } - - public function statistics() - { - $startTime = microtime(true); - $this->viewBuilder()->setLayout('frontend'); - $users = $this->Users->find('all')->select(['id']); - - //$newUsersThisMonth - $now = new Time(); - $sortDate = $this->getStartEndForMonth($now->month, $now->year); - $newUsersThisMonth = $this->Users->find('all') - ->select(['id']) - ->where(['created >=' => $sortDate[0], 'created <' => $sortDate[1]]); - $lastMonth = new Time(); - $lastMonth = $lastMonth->subMonth(1); - $prevSortDate = $this->getStartEndForMonth($lastMonth->month, $lastMonth->year); - $newUsersLastMonth = $this->Users->find('all') - ->select(['id']) - ->where(['created >=' => $prevSortDate[0], 'created <' => $prevSortDate[1]]); - - // new user sorted after date - $connection = ConnectionManager::get('loginServer'); - $newAccountsPerDay = $connection->execute('SELECT count(id) as count, created FROM users GROUP BY CAST(created as DATE) ORDER BY created DESC ')->fetchAll('assoc'); - - $newAccountsTree = []; - foreach($newAccountsPerDay as $entry) { - $created = new Time($entry['created']); - if(!isset($newAccountsTree[$created->year])) { - $newAccountsTree[$created->year] = []; - } - if(!isset($newAccountsTree[$created->year][$created->month])) { - $newAccountsTree[$created->year][$created->month] = ['count' => 0, 'days' => []]; - } - array_push($newAccountsTree[$created->year][$created->month]['days'], $entry); - $newAccountsTree[$created->year][$created->month]['count'] += intval($entry['count']); - } - - // last 5 new users - $lastUsers = $this->Users->find('all')->order(['created DESC'])->limit(5); - - $timeUsed = microtime(true) - $startTime; - - $this->set(compact( - 'users', 'newUsersThisMonth', 'newUsersLastMonth', - 'timeUsed', 'newAccountsTree', 'lastUsers')); - } - - /** - * View method - * - * @param string|null $id User id. - * @return \Cake\Http\Response|null - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function view($id = null) - { - $user = $this->Users->get($id, [ - 'contain' => ['EmailOptIn', 'UserBackups', 'UserRoles'], - ]); - - $this->set('user', $user); - } - - /** - * Add method - * - * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. - */ - public function add() - { - $user = $this->Users->newEntity(); - if ($this->request->is('post')) { - $user = $this->Users->patchEntity($user, $this->request->getData()); - if ($this->Users->save($user)) { - $this->Flash->success(__('The user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The user could not be saved. Please, try again.')); - } - $this->set(compact('user')); - } - - /** - * Edit method - * - * @param string|null $id User id. - * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function edit($id = null) - { - $user = $this->Users->get($id, [ - 'contain' => [], - ]); - if ($this->request->is(['patch', 'post', 'put'])) { - $user = $this->Users->patchEntity($user, $this->request->getData()); - if ($this->Users->save($user)) { - $this->Flash->success(__('The user has been saved.')); - - return $this->redirect(['action' => 'index']); - } - $this->Flash->error(__('The user could not be saved. Please, try again.')); - } - $this->set(compact('user')); - } - - /** - * Delete method - * - * @param string|null $id User id. - * @return \Cake\Http\Response|null Redirects to index. - * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. - */ - public function delete($id = null) - { - $this->request->allowMethod(['post', 'delete']); - $user = $this->Users->get($id); - if ($this->Users->delete($user)) { - $this->Flash->success(__('The user has been deleted.')); - } else { - $this->Flash->error(__('The user could not be deleted. Please, try again.')); - } - - return $this->redirect(['action' => 'index']); - } -} diff --git a/community_server/src/Form/AssignRoleForm.php b/community_server/src/Form/AssignRoleForm.php deleted file mode 100644 index 158fa2296..000000000 --- a/community_server/src/Form/AssignRoleForm.php +++ /dev/null @@ -1,30 +0,0 @@ -addField('role_id', ['type' => 'string']); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\GenericValidation'); - - return $validator; - } - - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/CreationForm.php b/community_server/src/Form/CreationForm.php deleted file mode 100644 index 70b4fce40..000000000 --- a/community_server/src/Form/CreationForm.php +++ /dev/null @@ -1,73 +0,0 @@ -addField('receiver_pubkey_hex', ['type' => 'string']) - ->addField('receiver', ['type' => 'select']) - ->addField('amount', ['type' => 'decimal', 'precision' => 2]) - ->addField('target_date', ['type' => 'date']) - ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation'); - /* - $validator->add('receiver_pubkey_hex', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)' - ])->add('receiver_pubkey_hex_select', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)', - ]); -*/ - // TODO: add validation for used character to prevent hacking attempts - $validator->add('memo', 'length', [ - 'rule' => ['maxLength', 150], - 'message' => 'max 150 character' - ]) - //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed')) - ->add('memo', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('memo', null, 'create') - /*->add('receiver_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->allowEmptyString('receiver_pubkey_hex', null, 'create')*/ - ->add('amount', 'custom', [ - 'rule' => 'amount', - 'provider' => 'custom', - 'message' => __('Please give a valid number with maximal 2 decimal places') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/DecodeTransaction.php b/community_server/src/Form/DecodeTransaction.php deleted file mode 100644 index 3ac00faa6..000000000 --- a/community_server/src/Form/DecodeTransaction.php +++ /dev/null @@ -1,8 +0,0 @@ -addField('first_name', ['type' => 'string']) - ->addField('last_name', ['type' => 'string']) - ->addField('profile_img', ['type' => 'string']) - ->addField('profile_desc', ['type' =>'text', 'default' => '', 'rows' => 10, 'maxlength' => 2000]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('generic', 'App\Model\Validation\GenericValidation'); - $validator->add('first_name', 'length', [ - 'rule' => ['maxLength', 255], - 'message' => __('The first name should contain max 255 characters') - ]) - ->add('last_name', 'length', [ - 'rule' => ['maxLength', 255], - 'message' => __('The last name should contain max 255 characters') - ]) - ->add('profile_desc', 'length', [ - 'rule' => ['maxLength', 2000], - 'message' => __('The description should contain max 2000 characters') - ]) - ->add('profile_desc', 'generic', [ - 'rule' => 'alphaNumeric', - 'provider' => 'generic', - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('profile_img', null, 'create') - ->allowEmptyString('profile_desc', null, 'create') - ; - return $validator; - } - - protected function _execute(array $data) - { - // Send an email. (??? xxx) - return true; - } -} diff --git a/community_server/src/Form/TransferForm.php b/community_server/src/Form/TransferForm.php deleted file mode 100644 index cb135ab9e..000000000 --- a/community_server/src/Form/TransferForm.php +++ /dev/null @@ -1,82 +0,0 @@ -addField('email', ['type' => 'string']) - ->addField('group', ['type' => 'string']) - ->addField('amount', ['type' => 'decimal', 'precision' => 2]) - ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation'); - /* - $validator->add('receiver_pubkey_hex', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)' - ])->add('receiver_pubkey_hex_select', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)', - ]); -*/ - // TODO: add validation for used character to prevent hacking attempts - $validator->add('email', 'format', [ - 'rule' => 'email', - 'message' => __('A valid email address is required') - ]) - ->add('group', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->add('memo', 'length', [ - 'rule' => ['maxLength', 150], - 'message' => __('The memo should contain max 150 character') - ]) - //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed')) - ->add('memo', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('memo', null, 'create') - /*->add('receiver_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->allowEmptyString('receiver_pubkey_hex', null, 'create')*/ - ->add('amount', 'custom', [ - 'rule' => 'amount', - 'provider' => 'custom', - 'message' => __('Please give a valid positive number with maximal 2 decimal places') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/TransferRawForm.php b/community_server/src/Form/TransferRawForm.php deleted file mode 100644 index 50c548ec5..000000000 --- a/community_server/src/Form/TransferRawForm.php +++ /dev/null @@ -1,73 +0,0 @@ -addField('sender_privkey_hex', ['type' => 'string']) - ->addField('sender_pubkey_hex', ['type' => 'string']) - ->addField('receiver_pubkey_hex', ['type' => 'string']) - ->addField('amount', ['type' => 'decimal', 'precision' => 2]) - ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation'); - - $validator - ->add('memo', 'length', [ - 'rule' => ['maxLength', 150], - 'message' => __('The memo should contain max 150 character') - ]) - ->add('memo', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like > or < please.') - ]) - ->allowEmptyString('memo', null, 'create') - ->add('receiver_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->add('sender_privkey_hex', 'custom', [ - 'rule' => 'hexKey128', - 'provider' => 'custom', - 'message' => 'a valid privkey in hex format is required (128 character)' - ]) - ->add('sender_pubkey_hex', 'custom', [ - 'rule' => 'hexKey64', - 'provider' => 'custom', - 'message' => 'a valid pubkey in hex format is required (64 character)' - ]) - ->add('amount', 'custom', [ - 'rule' => 'amount', - 'provider' => 'custom', - 'message' => __('Please give a valid positive number with maximal 2 decimal places') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Form/UserSearchForm.php b/community_server/src/Form/UserSearchForm.php deleted file mode 100644 index c68269920..000000000 --- a/community_server/src/Form/UserSearchForm.php +++ /dev/null @@ -1,58 +0,0 @@ -addField('search', ['type' => 'string']) - ->addField('account_state', ['type' => 'select']); - } - - function validationDefault(Validator $validator) - { - $validator->setProvider('custom', 'App\Model\Validation\GenericValidation'); - /* - $validator->add('receiver_pubkey_hex', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)' - ])->add('receiver_pubkey_hex_select', 'length', [ - 'rule' => ['length', 64], - 'message' => 'a valid pubkey in hex format is required (64 character)', - ]); -*/ - // TODO: add validation for used character to prevent hacking attempts - $validator->add('search', 'length', [ - 'rule' => ['maxLength', 50], - 'message' => __('The search text should contain max 50 character') - ]) - //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed')) - ->add('search', 'custom', [ - 'rule' => 'alphaNumeric', - 'provider' => 'custom', - //'message' => __('Only Alpha Numeric Character allowed') - 'message' => __('No HTML Tags like < or > please.') - ]); - return $validator; - } - /* - * $validator->add('title', 'custom', [ - 'rule' => 'customRule', - 'provider' => 'custom', - 'message' => 'The title is not unique enough' -]); - */ - - protected function _execute(array $data) - { - // Send an email. - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Locale/cake.pot b/community_server/src/Locale/cake.pot deleted file mode 100644 index 7d317194e..000000000 --- a/community_server/src/Locale/cake.pot +++ /dev/null @@ -1,29 +0,0 @@ -# LANGUAGE translation of CakePHP Application -# Copyright YEAR NAME -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2019-11-12 14:40+0000\n" -"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n" -"Last-Translator: NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" - -#: Template/Error/error400.ctp:36 -#: Template/Error/error500.ctp:41 -msgid "Error" -msgstr "" - -#: Template/Error/error400.ctp:37 -msgid "The requested address {0} was not found on this server." -msgstr "" - -#: Template/Error/error500.ctp:39 -msgid "An Internal Error Has Occurred" -msgstr "" - diff --git a/community_server/src/Locale/de_DE/default.mo b/community_server/src/Locale/de_DE/default.mo deleted file mode 100644 index c739334c8..000000000 Binary files a/community_server/src/Locale/de_DE/default.mo and /dev/null differ diff --git a/community_server/src/Locale/de_DE/default.po b/community_server/src/Locale/de_DE/default.po deleted file mode 100644 index 90fa91803..000000000 --- a/community_server/src/Locale/de_DE/default.po +++ /dev/null @@ -1,3097 +0,0 @@ -# LANGUAGE translation of CakePHP Application -# Copyright YEAR NAME -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2021-08-11 11:38+0000\n" -"PO-Revision-Date: 2021-08-11 13:39+0200\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: de_DE\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3\n" - -#: Controller/AddressTypesController.php:54 -#: Controller/AddressTypesController.php:78 -msgid "The address type has been saved." -msgstr "" - -#: Controller/AddressTypesController.php:58 -#: Controller/AddressTypesController.php:82 -msgid "The address type could not be saved. Please, try again." -msgstr "" - -#: Controller/AddressTypesController.php:99 -msgid "The address type has been deleted." -msgstr "" - -#: Controller/AddressTypesController.php:101 -msgid "The address type could not be deleted. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:57 -#: Controller/AdminErrorsController.php:82 -msgid "The admin error has been saved." -msgstr "" - -#: Controller/AdminErrorsController.php:61 -#: Controller/AdminErrorsController.php:86 -msgid "The admin error could not be saved. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:104 -msgid "The admin error has been deleted." -msgstr "" - -#: Controller/AdminErrorsController.php:106 -msgid "The admin error could not be deleted. Please, try again." -msgstr "" - -#: Controller/AppController.php:262 -msgid "error updating state user " -msgstr "" - -#: Controller/AppController.php:276 -msgid "error saving state user " -msgstr "" - -#: Controller/AppController.php:286 -msgid "no pubkey" -msgstr "" - -#: Controller/AppController.php:295 -msgid "invalid session" -msgstr "" - -#: Controller/AppController.php:297 -msgid "Konto ist nicht aktiviert!" -msgstr "" - -#: Controller/AppController.php:311 Controller/StateUsersController.php:103 -msgid "error http request: " -msgstr "" - -#: Controller/AppController.php:358 -msgid "(Leere Message)" -msgstr "" - -#: Controller/AppController.php:363 -msgid "(Leere Details)" -msgstr "" - -#: Controller/AppController.php:367 -msgid "Serious error, couldn't save to db, please write the admin: " -msgstr "" - -#: Controller/BlockchainTypesController.php:54 -#: Controller/BlockchainTypesController.php:78 -msgid "The blockchain type has been saved." -msgstr "" - -#: Controller/BlockchainTypesController.php:58 -#: Controller/BlockchainTypesController.php:82 -msgid "The blockchain type could not be saved. Please, try again." -msgstr "" - -#: Controller/BlockchainTypesController.php:99 -msgid "The blockchain type has been deleted." -msgstr "" - -#: Controller/BlockchainTypesController.php:101 -msgid "The blockchain type could not be deleted. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:54 -#: Controller/CommunityProfilesController.php:78 -msgid "The community profile has been saved." -msgstr "" - -#: Controller/CommunityProfilesController.php:58 -#: Controller/CommunityProfilesController.php:82 -msgid "The community profile could not be saved. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:99 -msgid "The community profile has been deleted." -msgstr "" - -#: Controller/CommunityProfilesController.php:101 -msgid "The community profile could not be deleted. Please, try again." -msgstr "" - -#: Controller/DashboardController.php:29 Controller/ProfileController.php:28 -#: Controller/StateBalancesController.php:52 -#: Controller/StateBalancesController.php:202 -#: Controller/StateErrorsController.php:26 -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 -#: Controller/TransactionCreationsController.php:42 -#: Controller/TransactionSendCoinsController.php:44 -#: Controller/UsersController.php:26 Template/Element/navi.ctp:33 -msgid "Startseite" -msgstr "" - -#: Controller/ElopageBuysController.php:112 -#: Controller/ElopageBuysController.php:137 -msgid "The elopage buy has been saved." -msgstr "" - -#: Controller/ElopageBuysController.php:116 -#: Controller/ElopageBuysController.php:141 -msgid "The elopage buy could not be saved. Please, try again." -msgstr "" - -#: Controller/ElopageBuysController.php:158 -msgid "The elopage buy has been deleted." -msgstr "" - -#: Controller/ElopageBuysController.php:160 -msgid "The elopage buy could not be deleted. Please, try again." -msgstr "" - -#: Controller/JsonRequestHandlerController.php:366 -msgid "Gradido Transaktion fehlgeschlagen!" -msgstr "" - -#: Controller/OperatorTypesController.php:54 -#: Controller/OperatorTypesController.php:78 -msgid "The operator type has been saved." -msgstr "" - -#: Controller/OperatorTypesController.php:58 -#: Controller/OperatorTypesController.php:82 -msgid "The operator type could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorTypesController.php:99 -msgid "The operator type has been deleted." -msgstr "" - -#: Controller/OperatorTypesController.php:101 -msgid "The operator type could not be deleted. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:182 -#: Controller/OperatorsController.php:207 -msgid "The operator has been saved." -msgstr "" - -#: Controller/OperatorsController.php:186 -#: Controller/OperatorsController.php:211 -msgid "The operator could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:229 -msgid "The operator has been deleted." -msgstr "" - -#: Controller/OperatorsController.php:231 -msgid "The operator could not be deleted. Please, try again." -msgstr "" - -#: Controller/ProfileController.php:29 Template/Element/user_menu.ctp:15 -#: Template/Profile/index.ctp:19 -msgid "Mein Profil" -msgstr "" - -#: Controller/ProfileController.php:108 -msgid "Dein Profil wurde aktualisiert!" -msgstr "" - -#: Controller/ProfileController.php:111 -msgid "" -"Non-recoverable database problem - state_user doesn't exist or not unique!" -msgstr "" - -#: Controller/ProfileController.php:198 -#: Controller/StateUserRolesController.php:117 -#: Controller/StateUsersController.php:291 -#: Controller/TransactionCreationsController.php:183 -msgid "Something was invalid, please try again!" -msgstr "" - -#: Controller/RolesController.php:56 Controller/RolesController.php:80 -msgid "The role has been saved." -msgstr "" - -#: Controller/RolesController.php:60 Controller/RolesController.php:84 -msgid "The role could not be saved. Please, try again." -msgstr "" - -#: Controller/RolesController.php:101 -msgid "The role has been deleted." -msgstr "" - -#: Controller/RolesController.php:103 -msgid "The role could not be deleted. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:42 -msgid "Invalid username or password, try again" -msgstr "" - -#: Controller/ServerUsersController.php:79 -#: Controller/ServerUsersController.php:103 -msgid "The server user has been saved." -msgstr "" - -#: Controller/ServerUsersController.php:83 -#: Controller/ServerUsersController.php:107 -msgid "The server user could not be saved. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:124 -msgid "The server user has been deleted." -msgstr "" - -#: Controller/ServerUsersController.php:126 -msgid "The server user could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:53 Template/Dashboard/index.ctp:30 -#: Template/Element/navi.ctp:22 Template/StateBalances/overview.ctp:8 -msgid "Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:203 -#: Template/StateBalances/overview_gdt.ctp:20 -msgid "GDT Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:252 -msgid "Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!" -msgstr "" - -#: Controller/StateBalancesController.php:351 -#: Controller/StateBalancesController.php:376 -msgid "The state balance has been saved." -msgstr "" - -#: Controller/StateBalancesController.php:355 -#: Controller/StateBalancesController.php:380 -msgid "The state balance could not be saved. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:398 -msgid "The state balance has been deleted." -msgstr "" - -#: Controller/StateBalancesController.php:400 -msgid "The state balance could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:57 -#: Controller/StateCreatedController.php:83 -msgid "The state created has been saved." -msgstr "" - -#: Controller/StateCreatedController.php:61 -#: Controller/StateCreatedController.php:87 -msgid "The state created could not be saved. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:106 -msgid "The state created has been deleted." -msgstr "" - -#: Controller/StateCreatedController.php:108 -msgid "The state created could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:27 Template/Dashboard/index.ctp:79 -#: Template/Dashboard/server_index.ctp:31 Template/Element/navi_header.ctp:33 -#: Template/Element/navi_notify.ctp:32 -msgid "Fehler" -msgstr "" - -#: Controller/StateErrorsController.php:75 -msgid "Error belongs to another User, cannot delete" -msgstr "" - -#: Controller/StateErrorsController.php:78 -#: Controller/StateErrorsController.php:166 -msgid "The state error has been deleted." -msgstr "" - -#: Controller/StateErrorsController.php:80 -#: Controller/StateErrorsController.php:168 -msgid "The state error could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:117 -#: Controller/StateErrorsController.php:143 -msgid "The state error has been saved." -msgstr "" - -#: Controller/StateErrorsController.php:121 -#: Controller/StateErrorsController.php:147 -msgid "The state error could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:57 -#: Controller/StateGroupAddressesController.php:83 -msgid "The state group address has been saved." -msgstr "" - -#: Controller/StateGroupAddressesController.php:61 -#: Controller/StateGroupAddressesController.php:87 -msgid "The state group address could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:106 -msgid "The state group address has been deleted." -msgstr "" - -#: Controller/StateGroupAddressesController.php:108 -msgid "The state group address could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:57 -#: Controller/StateGroupRelationshipsController.php:84 -msgid "The state group relationship has been saved." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:61 -#: Controller/StateGroupRelationshipsController.php:88 -msgid "The state group relationship could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:108 -msgid "The state group relationship has been deleted." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:110 -msgid "The state group relationship could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:57 -#: Controller/StateGroupsController.php:82 -msgid "The state group has been saved." -msgstr "" - -#: Controller/StateGroupsController.php:61 -#: Controller/StateGroupsController.php:86 -msgid "The state group could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:104 -msgid "The state group has been deleted." -msgstr "" - -#: Controller/StateGroupsController.php:106 -msgid "The state group could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:54 -#: Controller/StateRelationshipTypesController.php:78 -msgid "The state relationship type has been saved." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:58 -#: Controller/StateRelationshipTypesController.php:82 -msgid "The state relationship type could not be saved. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:99 -msgid "The state relationship type has been deleted." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:101 -msgid "The state relationship type could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 Template/StateUserRoles/search.ctp:9 -#: Template/StateUsers/search.ctp:9 -msgid "Benutzer suchen" -msgstr "" - -#: Controller/StateUserRolesController.php:149 -msgid "Role has been assigned to User." -msgstr "" - -#: Controller/StateUserTransactionsController.php:233 -#: Controller/StateUserTransactionsController.php:260 -msgid "The state user transaction has been saved." -msgstr "" - -#: Controller/StateUserTransactionsController.php:237 -#: Controller/StateUserTransactionsController.php:264 -msgid "The state user transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUserTransactionsController.php:284 -msgid "The state user transaction has been deleted." -msgstr "" - -#: Controller/StateUserTransactionsController.php:286 -msgid "The state user transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:21 -msgid "account created" -msgstr "Konto angelegt" - -#: Controller/StateUsersController.php:22 -msgid "account not on login-server" -msgstr "Konto nicht auf Login-Server" - -#: Controller/StateUsersController.php:23 -msgid "email activated" -msgstr "Konto aktiviert" - -#: Controller/StateUsersController.php:24 -msgid "account copied to community" -msgstr "Konto kopiert nach Community-Server" - -#: Controller/StateUsersController.php:25 -msgid "email not activated" -msgstr "Konto nicht aktiviert" - -#: Controller/StateUsersController.php:26 -msgid "account multiple times on login-server" -msgstr "Konto mehrfach vorhanden" - -#: Controller/StateUsersController.php:27 -msgid "account not on community server" -msgstr "Konto nicht auf Community-Server" - -#: Controller/StateUsersController.php:28 -msgid "no keys" -msgstr "Keine Schlüssel generiert" - -#: Controller/StateUsersController.php:560 -#: Controller/StateUsersController.php:586 -msgid "The state user has been saved." -msgstr "" - -#: Controller/StateUsersController.php:564 -#: Controller/StateUsersController.php:590 -msgid "The state user could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:609 -msgid "The state user has been deleted." -msgstr "" - -#: Controller/StateUsersController.php:611 -msgid "The state user could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:42 -msgid "Gradido schöpfen" -msgstr "" - -#: Controller/TransactionCreationsController.php:149 -#: Controller/TransactionCreationsController.php:385 -#: Controller/TransactionCreationsController.php:408 -msgid "Error by requesting LoginServer, please try again" -msgstr "" - -#: Controller/TransactionCreationsController.php:151 -#: Controller/TransactionCreationsController.php:410 -msgid "Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:161 -msgid "Login Server Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:174 -#: Controller/TransactionCreationsController.php:491 -#: Controller/TransactionSendCoinsController.php:204 -msgid "Transaction submitted for review." -msgstr "" - -#: Controller/TransactionCreationsController.php:179 -msgid "Building transaction failed" -msgstr "" - -#: Controller/TransactionCreationsController.php:342 -msgid "No user selected" -msgstr "" - -#: Controller/TransactionCreationsController.php:442 -#: Controller/TransactionSendCoinsController.php:231 -msgid "Fehler mit der Session, bitte logge dich erneut ein!" -msgstr "" - -#: Controller/TransactionCreationsController.php:447 -msgid "Fehler, Benutzer gehört zu einer anderen Gruppe!" -msgstr "" - -#: Controller/TransactionCreationsController.php:452 -#: Controller/TransactionSendCoinsController.php:246 -msgid "" -"Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto " -"schon angelegt?" -msgstr "" - -#: Controller/TransactionCreationsController.php:456 -#: Controller/TransactionSendCoinsController.php:250 -msgid "" -"Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos " -"gesendet werden." -msgstr "" - -#: Controller/TransactionCreationsController.php:460 -msgid "Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein." -msgstr "" - -#: Controller/TransactionCreationsController.php:464 -#: Controller/TransactionSendCoinsController.php:254 -msgid "Unbehandelter Fehler: " -msgstr "" - -#: Controller/TransactionCreationsController.php:625 -#: Controller/TransactionCreationsController.php:651 -msgid "The transaction creation has been saved." -msgstr "" - -#: Controller/TransactionCreationsController.php:629 -#: Controller/TransactionCreationsController.php:655 -msgid "The transaction creation could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:674 -msgid "The transaction creation has been deleted." -msgstr "" - -#: Controller/TransactionCreationsController.php:676 -msgid "The transaction creation could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:57 -#: Controller/TransactionGroupAddaddressController.php:83 -msgid "The transaction group addaddres has been saved." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:61 -#: Controller/TransactionGroupAddaddressController.php:87 -msgid "The transaction group addaddres could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:106 -msgid "The transaction group addaddres has been deleted." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:108 -msgid "" -"The transaction group addaddres could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:57 -#: Controller/TransactionGroupAllowtradesController.php:83 -msgid "The transaction group allowtrade has been saved." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:61 -#: Controller/TransactionGroupAllowtradesController.php:87 -msgid "The transaction group allowtrade could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:106 -msgid "The transaction group allowtrade has been deleted." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:108 -msgid "" -"The transaction group allowtrade could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:57 -#: Controller/TransactionGroupCreatesController.php:83 -msgid "The transaction group create has been saved." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:61 -#: Controller/TransactionGroupCreatesController.php:87 -msgid "The transaction group create could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:106 -msgid "The transaction group create has been deleted." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:108 -msgid "The transaction group create could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:45 -#: Template/Dashboard/index.ctp:38 Template/Element/navi.ctp:34 -#: Template/StateUsers/view.ctp:83 Template/StateUsers/view.ctp:117 -#: Template/TransactionSendCoins/create.ctp:9 -#: Template/TransactionSendCoins/create_raw.ctp:9 -msgid "Überweisung" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:92 -#: Controller/TransactionSendCoinsController.php:119 -msgid "The transaction send coin has been saved." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:96 -#: Controller/TransactionSendCoinsController.php:123 -msgid "The transaction send coin could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:173 -msgid "Du hast nicht genug Gradidos!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:179 -msgid "Du kannst dir selbst keine Gradidos senden!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:236 -msgid "Empfänger befindet sich nicht in Zielgruppe!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:241 -msgid "Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:428 -msgid "Error validating transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:431 -msgid "Error saving transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:433 -msgid "Gradidos erfolgreich überwiesen!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:437 -msgid "Error building transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:462 -msgid "The transaction send coin has been deleted." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:464 -msgid "The transaction send coin could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:57 -#: Controller/TransactionSignaturesController.php:82 -msgid "The transaction signature has been saved." -msgstr "" - -#: Controller/TransactionSignaturesController.php:61 -#: Controller/TransactionSignaturesController.php:86 -msgid "The transaction signature could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:104 -msgid "The transaction signature has been deleted." -msgstr "" - -#: Controller/TransactionSignaturesController.php:106 -msgid "The transaction signature could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:54 -#: Controller/TransactionTypesController.php:78 -msgid "The transaction type has been saved." -msgstr "" - -#: Controller/TransactionTypesController.php:58 -#: Controller/TransactionTypesController.php:82 -msgid "The transaction type could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:99 -msgid "The transaction type has been deleted." -msgstr "" - -#: Controller/TransactionTypesController.php:101 -msgid "The transaction type could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:252 -msgid "No valid data given, please try again." -msgstr "" - -#: Controller/TransactionsController.php:289 -msgid "error retriving last saved transaction from gradido node." -msgstr "" - -#: Controller/TransactionsController.php:391 -#: Controller/TransactionsController.php:420 -msgid "The transaction has been saved." -msgstr "" - -#: Controller/TransactionsController.php:394 -msgid "Error by saving: " -msgstr "" - -#: Controller/TransactionsController.php:397 -#: Controller/TransactionsController.php:424 -msgid "The transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:443 -msgid "The transaction has been deleted." -msgstr "" - -#: Controller/TransactionsController.php:445 -msgid "The transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/UsersController.php:26 -msgid "Benutzerstatistiken" -msgstr "" - -#: Controller/UsersController.php:115 Controller/UsersController.php:139 -msgid "The user has been saved." -msgstr "" - -#: Controller/UsersController.php:119 Controller/UsersController.php:143 -msgid "The user could not be saved. Please, try again." -msgstr "" - -#: Controller/UsersController.php:160 -msgid "The user has been deleted." -msgstr "" - -#: Controller/UsersController.php:162 -msgid "The user could not be deleted. Please, try again." -msgstr "" - -#: Form/CreationForm.php:44 Form/ProfileForm.php:39 Form/TransferForm.php:42 -#: Form/TransferForm.php:53 Form/TransferRawForm.php:35 -msgid "No HTML Tags like > or < please." -msgstr "" - -#: Form/CreationForm.php:56 -msgid "Please give a valid number with maximal 2 decimal places" -msgstr "" - -#: Form/ProfileForm.php:26 -msgid "The first name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:30 -msgid "The last name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:34 -msgid "The description should contain max 2000 characters" -msgstr "" - -#: Form/TransferForm.php:36 -msgid "A valid email address is required" -msgstr "" - -#: Form/TransferForm.php:46 Form/TransferRawForm.php:29 -msgid "The memo should contain max 150 character" -msgstr "" - -#: Form/TransferForm.php:65 Form/TransferRawForm.php:56 -msgid "Please give a valid positive number with maximal 2 decimal places" -msgstr "" - -#: Form/UserSearchForm.php:34 -msgid "The search text should contain max 50 character" -msgstr "" - -#: Form/UserSearchForm.php:41 -msgid "No HTML Tags like < or > please." -msgstr "" - -#: Model/Table/ServerUsersTable.php:58 -msgid "Please give a username" -msgstr "" - -#: Model/Table/ServerUsersTable.php:64 -msgid "Please give a password" -msgstr "" - -#: Model/Table/ServerUsersTable.php:69 -msgid "Please give a email" -msgstr "" - -#: Model/Transactions/TransactionCreation.php:209 -msgid "Gradido Schöpfung erhalten" -msgstr "" - -#: Model/Transactions/TransactionTransfer.php:210 -msgid "Gradidos erhalten" -msgstr "" - -#: Template/AddressTypes/add.ctp:9 Template/AddressTypes/edit.ctp:9 -#: Template/AddressTypes/index.ctp:9 Template/AddressTypes/index.ctp:25 -#: Template/AddressTypes/view.ctp:9 Template/AddressTypes/view.ctp:45 -#: Template/AddressTypes/view.ctp:73 Template/AdminErrors/add.ctp:9 -#: Template/AdminErrors/edit.ctp:9 Template/AdminErrors/index.ctp:9 -#: Template/AdminErrors/index.ctp:26 Template/AdminErrors/view.ctp:9 -#: Template/BlockchainTypes/add.ctp:9 Template/BlockchainTypes/edit.ctp:9 -#: Template/BlockchainTypes/index.ctp:9 Template/BlockchainTypes/index.ctp:22 -#: Template/BlockchainTypes/view.ctp:9 Template/CommunityProfiles/add.ctp:9 -#: Template/CommunityProfiles/edit.ctp:9 Template/CommunityProfiles/index.ctp:9 -#: Template/CommunityProfiles/index.ctp:21 -#: Template/CommunityProfiles/view.ctp:9 Template/ElopageBuys/add.ctp:9 -#: Template/ElopageBuys/edit.ctp:9 Template/ElopageBuys/index.ctp:9 -#: Template/ElopageBuys/index.ctp:30 Template/ElopageBuys/view.ctp:9 -#: Template/OperatorTypes/edit.ctp:9 Template/OperatorTypes/index.ctp:9 -#: Template/OperatorTypes/index.ctp:23 Template/OperatorTypes/view.ctp:9 -#: Template/OperatorTypes/view.ctp:43 Template/Operators/add.ctp:9 -#: Template/Operators/edit.ctp:9 Template/Operators/index.ctp:9 -#: Template/Operators/index.ctp:24 Template/Operators/view.ctp:9 -#: Template/Roles/add.ctp:9 Template/Roles/edit.ctp:9 -#: Template/Roles/index.ctp:9 Template/Roles/index.ctp:20 -#: Template/Roles/view.ctp:9 Template/ServerUsers/add.ctp:9 -#: Template/ServerUsers/edit.ctp:9 Template/ServerUsers/index.ctp:9 -#: Template/ServerUsers/index.ctp:26 Template/ServerUsers/view.ctp:9 -#: Template/StateBalances/add.ctp:9 Template/StateBalances/edit.ctp:9 -#: Template/StateBalances/index.ctp:9 Template/StateBalances/index.ctp:25 -#: Template/StateBalances/view.ctp:9 Template/StateCreated/add.ctp:9 -#: Template/StateCreated/edit.ctp:9 Template/StateCreated/index.ctp:9 -#: Template/StateCreated/index.ctp:29 Template/StateCreated/view.ctp:9 -#: Template/StateErrors/add.ctp:9 Template/StateErrors/edit.ctp:9 -#: Template/StateErrors/index.ctp:9 Template/StateErrors/index.ctp:26 -#: Template/StateErrors/view.ctp:9 Template/StateGroupAddresses/add.ctp:9 -#: Template/StateGroupAddresses/edit.ctp:9 -#: Template/StateGroupAddresses/index.ctp:9 -#: Template/StateGroupAddresses/index.ctp:26 -#: Template/StateGroupAddresses/view.ctp:9 -#: Template/StateGroupRelationships/add.ctp:9 -#: Template/StateGroupRelationships/edit.ctp:9 -#: Template/StateGroupRelationships/index.ctp:9 -#: Template/StateGroupRelationships/index.ctp:22 -#: Template/StateGroupRelationships/view.ctp:9 Template/StateGroups/add.ctp:9 -#: Template/StateGroups/edit.ctp:9 Template/StateGroups/index.ctp:9 -#: Template/StateGroups/index.ctp:29 Template/StateGroups/view.ctp:9 -#: Template/StateGroups/view.ctp:49 Template/StateGroups/view.ctp:76 -#: Template/StateGroups/view.ctp:104 Template/StateGroups/view.ctp:133 -#: Template/StateRelationshipTypes/add.ctp:9 -#: Template/StateRelationshipTypes/edit.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:21 -#: Template/StateRelationshipTypes/view.ctp:9 -#: Template/StateUserRoles/index.ctp:9 Template/StateUserRoles/index.ctp:36 -#: Template/StateUserRoles/search.ctp:33 -#: Template/StateUserTransactions/add.ctp:9 -#: Template/StateUserTransactions/edit.ctp:9 -#: Template/StateUserTransactions/index.ctp:9 -#: Template/StateUserTransactions/index.ctp:28 -#: Template/StateUserTransactions/view.ctp:9 Template/StateUsers/add.ctp:9 -#: Template/StateUsers/edit.ctp:9 Template/StateUsers/index.ctp:9 -#: Template/StateUsers/index.ctp:36 Template/StateUsers/view.ctp:9 -#: Template/StateUsers/view.ctp:34 Template/StateUsers/view.ctp:58 -#: Template/StateUsers/view.ctp:89 Template/StateUsers/view.ctp:122 -#: Template/TransactionCreations/add.ctp:9 -#: Template/TransactionCreations/edit.ctp:9 -#: Template/TransactionCreations/index.ctp:9 -#: Template/TransactionCreations/index.ctp:28 -#: Template/TransactionCreations/view.ctp:9 -#: Template/TransactionGroupAddaddress/add.ctp:9 -#: Template/TransactionGroupAddaddress/edit.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:9 -#: Template/TransactionGroupAllowtrades/add.ctp:9 -#: Template/TransactionGroupAllowtrades/edit.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:9 -#: Template/TransactionGroupCreates/add.ctp:9 -#: Template/TransactionGroupCreates/edit.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:9 -#: Template/TransactionSendCoins/add.ctp:9 -#: Template/TransactionSendCoins/edit.ctp:9 -#: Template/TransactionSendCoins/index.ctp:9 -#: Template/TransactionSendCoins/index.ctp:28 -#: Template/TransactionSendCoins/view.ctp:9 -#: Template/TransactionSignatures/add.ctp:9 -#: Template/TransactionSignatures/edit.ctp:9 -#: Template/TransactionSignatures/index.ctp:9 -#: Template/TransactionSignatures/index.ctp:22 -#: Template/TransactionSignatures/view.ctp:9 -#: Template/TransactionTypes/add.ctp:9 Template/TransactionTypes/edit.ctp:9 -#: Template/TransactionTypes/index.ctp:9 Template/TransactionTypes/index.ctp:23 -#: Template/TransactionTypes/view.ctp:9 Template/TransactionTypes/view.ctp:44 -#: Template/Transactions/add.ctp:9 Template/Transactions/edit.ctp:9 -#: Template/Transactions/index.ctp:9 Template/Transactions/view.ctp:9 -#: Template/Transactions/view.ctp:66 Template/Transactions/view.ctp:97 -#: Template/Transactions/view.ctp:125 Template/Transactions/view.ctp:152 -#: Template/Transactions/view.ctp:180 Template/Transactions/view.ctp:211 -#: Template/Transactions/view.ctp:241 Template/Users/add.ctp:9 -#: Template/Users/edit.ctp:9 Template/Users/index.ctp:9 -#: Template/Users/index.ctp:26 Template/Users/view.ctp:9 -msgid "Actions" -msgstr "" - -#: Template/AddressTypes/add.ctp:10 Template/AddressTypes/edit.ctp:16 -#: Template/AddressTypes/view.ctp:12 Template/StateGroupAddresses/add.ctp:13 -#: Template/StateGroupAddresses/edit.ctp:19 -#: Template/StateGroupAddresses/index.ctp:13 -#: Template/StateGroupAddresses/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:13 -#: Template/TransactionGroupAddaddress/edit.ctp:19 -#: Template/TransactionGroupAddaddress/index.ctp:13 -#: Template/TransactionGroupAddaddress/view.ctp:16 -msgid "List Address Types" -msgstr "" - -#: Template/AddressTypes/add.ctp:11 Template/AddressTypes/edit.ctp:17 -#: Template/AddressTypes/index.ctp:11 Template/AddressTypes/view.ctp:14 -#: Template/StateGroupAddresses/add.ctp:10 -#: Template/StateGroupAddresses/edit.ctp:16 -#: Template/StateGroupAddresses/view.ctp:12 Template/StateGroups/add.ctp:11 -#: Template/StateGroups/edit.ctp:17 Template/StateGroups/index.ctp:11 -#: Template/StateGroups/view.ctp:14 -msgid "List State Group Addresses" -msgstr "" - -#: Template/AddressTypes/add.ctp:12 Template/AddressTypes/edit.ctp:18 -#: Template/AddressTypes/index.ctp:12 Template/AddressTypes/view.ctp:15 -#: Template/StateGroupAddresses/index.ctp:10 -#: Template/StateGroupAddresses/view.ctp:13 Template/StateGroups/add.ctp:12 -#: Template/StateGroups/edit.ctp:18 Template/StateGroups/index.ctp:12 -#: Template/StateGroups/view.ctp:15 -msgid "New State Group Address" -msgstr "" - -#: Template/AddressTypes/add.ctp:13 Template/AddressTypes/edit.ctp:19 -#: Template/AddressTypes/index.ctp:13 Template/AddressTypes/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:10 -#: Template/TransactionGroupAddaddress/edit.ctp:16 -#: Template/TransactionGroupAddaddress/view.ctp:12 -#: Template/Transactions/add.ctp:19 Template/Transactions/edit.ctp:25 -#: Template/Transactions/index.ctp:19 Template/Transactions/view.ctp:22 -msgid "List Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/add.ctp:14 Template/AddressTypes/edit.ctp:20 -#: Template/AddressTypes/index.ctp:14 Template/AddressTypes/view.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:10 -#: Template/TransactionGroupAddaddress/view.ctp:13 -#: Template/Transactions/add.ctp:20 Template/Transactions/edit.ctp:26 -#: Template/Transactions/index.ctp:20 Template/Transactions/view.ctp:23 -msgid "New Transaction Group Addaddres" -msgstr "" - -#: Template/AddressTypes/add.ctp:20 -msgid "Add Address Type" -msgstr "" - -#: Template/AddressTypes/add.ctp:26 Template/AddressTypes/edit.ctp:32 -#: Template/AdminErrors/add.ctp:28 Template/AdminErrors/edit.ctp:34 -#: Template/BlockchainTypes/add.ctp:23 Template/BlockchainTypes/edit.ctp:29 -#: Template/CommunityProfiles/add.ctp:22 Template/CommunityProfiles/edit.ctp:28 -#: Template/ElopageBuys/add.ctp:31 Template/ElopageBuys/edit.ctp:37 -#: Template/OperatorTypes/add.ctp:24 Template/OperatorTypes/edit.ctp:30 -#: Template/Operators/add.ctp:24 Template/Operators/edit.ctp:30 -#: Template/Roles/add.ctp:21 Template/Roles/edit.ctp:27 -#: Template/ServerUsers/add.ctp:24 Template/ServerUsers/edit.ctp:32 -#: Template/StateBalances/add.ctp:25 Template/StateBalances/edit.ctp:31 -#: Template/StateCreated/add.ctp:29 Template/StateCreated/edit.ctp:35 -#: Template/StateErrors/add.ctp:27 Template/StateErrors/edit.ctp:33 -#: Template/StateGroupAddresses/add.ctp:26 -#: Template/StateGroupAddresses/edit.ctp:32 -#: Template/StateGroupRelationships/add.ctp:23 -#: Template/StateGroupRelationships/edit.ctp:29 Template/StateGroups/add.ctp:30 -#: Template/StateGroups/edit.ctp:36 Template/StateRelationshipTypes/add.ctp:22 -#: Template/StateRelationshipTypes/edit.ctp:28 -#: Template/StateUserTransactions/add.ctp:29 -#: Template/StateUserTransactions/edit.ctp:35 Template/StateUsers/add.ctp:32 -#: Template/StateUsers/edit.ctp:37 Template/TransactionCreations/add.ctp:27 -#: Template/TransactionCreations/edit.ctp:33 -#: Template/TransactionGroupAddaddress/add.ctp:26 -#: Template/TransactionGroupAddaddress/edit.ctp:32 -#: Template/TransactionGroupAllowtrades/add.ctp:25 -#: Template/TransactionGroupAllowtrades/edit.ctp:31 -#: Template/TransactionGroupCreates/add.ctp:27 -#: Template/TransactionGroupCreates/edit.ctp:33 -#: Template/TransactionSendCoins/add.ctp:28 -#: Template/TransactionSendCoins/edit.ctp:34 -#: Template/TransactionSignatures/add.ctp:23 -#: Template/TransactionSignatures/edit.ctp:29 -#: Template/TransactionTypes/add.ctp:24 Template/TransactionTypes/edit.ctp:30 -#: Template/Transactions/add.ctp:42 Template/Transactions/edit.ctp:47 -#: Template/Users/add.ctp:26 Template/Users/edit.ctp:32 -msgid "Submit" -msgstr "" - -#: Template/AddressTypes/edit.ctp:11 Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:56 Template/AddressTypes/view.ctp:85 -#: Template/AdminErrors/edit.ctp:11 Template/AdminErrors/index.ctp:43 -#: Template/BlockchainTypes/edit.ctp:11 Template/BlockchainTypes/index.ctp:35 -#: Template/CommunityProfiles/edit.ctp:11 -#: Template/CommunityProfiles/index.ctp:33 Template/ElopageBuys/edit.ctp:11 -#: Template/OperatorTypes/index.ctp:35 Template/OperatorTypes/view.ctp:54 -#: Template/Operators/edit.ctp:11 Template/Operators/index.ctp:40 -#: Template/Roles/edit.ctp:11 Template/Roles/index.ctp:31 -#: Template/ServerUsers/edit.ctp:11 Template/ServerUsers/index.ctp:43 -#: Template/StateBalances/edit.ctp:11 Template/StateBalances/index.ctp:38 -#: Template/StateCreated/edit.ctp:11 Template/StateCreated/index.ctp:45 -#: Template/StateErrors/edit.ctp:11 Template/StateErrors/index.ctp:39 -#: Template/StateErrors/show_for_user.ctp:44 -#: Template/StateGroupAddresses/edit.ctp:11 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupRelationships/edit.ctp:11 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroups/edit.ctp:11 Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:60 Template/StateGroups/view.ctp:87 -#: Template/StateGroups/view.ctp:116 Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:11 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:11 -#: Template/StateUserTransactions/index.ctp:41 Template/StateUsers/edit.ctp:11 -#: Template/StateUsers/index.ctp:53 Template/TransactionCreations/edit.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:11 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAllowtrades/edit.ctp:11 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupCreates/edit.ctp:11 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionSendCoins/edit.ctp:11 -#: Template/TransactionSignatures/edit.ctp:11 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionTypes/edit.ctp:11 Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:56 Template/Transactions/edit.ctp:11 -#: Template/Transactions/view.ctp:80 Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 Template/Users/edit.ctp:11 -#: Template/Users/index.ctp:43 -msgid "Delete" -msgstr "" - -#: Template/AddressTypes/edit.ctp:13 Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:11 Template/AddressTypes/view.ctp:56 -#: Template/AddressTypes/view.ctp:85 Template/AdminErrors/edit.ctp:13 -#: Template/AdminErrors/index.ctp:43 Template/AdminErrors/view.ctp:11 -#: Template/BlockchainTypes/edit.ctp:13 Template/BlockchainTypes/index.ctp:35 -#: Template/BlockchainTypes/view.ctp:11 Template/CommunityProfiles/edit.ctp:13 -#: Template/CommunityProfiles/index.ctp:33 -#: Template/CommunityProfiles/view.ctp:11 Template/ElopageBuys/edit.ctp:13 -#: Template/ElopageBuys/index.ctp:51 Template/ElopageBuys/view.ctp:11 -#: Template/OperatorTypes/index.ctp:35 Template/OperatorTypes/view.ctp:11 -#: Template/OperatorTypes/view.ctp:54 Template/Operators/edit.ctp:13 -#: Template/Operators/index.ctp:40 Template/Operators/view.ctp:11 -#: Template/Roles/edit.ctp:13 Template/Roles/index.ctp:31 -#: Template/Roles/view.ctp:11 Template/ServerUsers/edit.ctp:13 -#: Template/ServerUsers/index.ctp:43 Template/ServerUsers/view.ctp:11 -#: Template/StateBalances/edit.ctp:13 Template/StateBalances/index.ctp:38 -#: Template/StateBalances/view.ctp:11 Template/StateCreated/edit.ctp:13 -#: Template/StateCreated/index.ctp:45 Template/StateCreated/view.ctp:11 -#: Template/StateErrors/edit.ctp:13 Template/StateErrors/index.ctp:39 -#: Template/StateErrors/view.ctp:11 Template/StateGroupAddresses/edit.ctp:13 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupAddresses/view.ctp:11 -#: Template/StateGroupRelationships/edit.ctp:13 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroupRelationships/view.ctp:11 -#: Template/StateGroups/edit.ctp:13 Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:11 Template/StateGroups/view.ctp:60 -#: Template/StateGroups/view.ctp:87 Template/StateGroups/view.ctp:116 -#: Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:13 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateRelationshipTypes/view.ctp:11 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:13 -#: Template/StateUserTransactions/index.ctp:41 -#: Template/StateUserTransactions/view.ctp:11 Template/StateUsers/edit.ctp:13 -#: Template/StateUsers/index.ctp:53 Template/StateUsers/view.ctp:11 -#: Template/TransactionCreations/edit.ctp:13 -#: Template/TransactionCreations/view.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:13 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAddaddress/view.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:13 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupAllowtrades/view.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:13 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionGroupCreates/view.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:13 -#: Template/TransactionSendCoins/view.ctp:11 -#: Template/TransactionSignatures/edit.ctp:13 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionSignatures/view.ctp:11 -#: Template/TransactionTypes/edit.ctp:13 Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:11 Template/TransactionTypes/view.ctp:56 -#: Template/Transactions/edit.ctp:13 Template/Transactions/view.ctp:11 -#: Template/Transactions/view.ctp:80 Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 Template/Users/edit.ctp:13 -#: Template/Users/index.ctp:43 Template/Users/view.ctp:11 -msgid "Are you sure you want to delete # {0}?" -msgstr "" - -#: Template/AddressTypes/edit.ctp:26 Template/AddressTypes/view.ctp:10 -msgid "Edit Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:10 Template/AddressTypes/view.ctp:13 -#: Template/StateGroupAddresses/add.ctp:14 -#: Template/StateGroupAddresses/edit.ctp:20 -#: Template/StateGroupAddresses/index.ctp:14 -#: Template/StateGroupAddresses/view.ctp:17 -#: Template/TransactionGroupAddaddress/add.ctp:14 -#: Template/TransactionGroupAddaddress/edit.ctp:20 -#: Template/TransactionGroupAddaddress/index.ctp:14 -#: Template/TransactionGroupAddaddress/view.ctp:17 -msgid "New Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:18 -msgid "Address Types" -msgstr "" - -#: Template/AddressTypes/index.ctp:35 Template/AddressTypes/view.ctp:54 -#: Template/AddressTypes/view.ctp:83 Template/AdminErrors/index.ctp:39 -#: Template/BlockchainTypes/index.ctp:33 -#: Template/CommunityProfiles/index.ctp:31 Template/ElopageBuys/index.ctp:49 -#: Template/OperatorTypes/view.ctp:52 Template/Operators/index.ctp:38 -#: Template/Roles/index.ctp:29 Template/ServerUsers/index.ctp:41 -#: Template/StateBalances/index.ctp:36 Template/StateCreated/index.ctp:43 -#: Template/StateErrors/index.ctp:37 Template/StateGroupAddresses/index.ctp:37 -#: Template/StateGroupRelationships/index.ctp:33 -#: Template/StateGroups/index.ctp:39 Template/StateGroups/view.ctp:58 -#: Template/StateGroups/view.ctp:85 Template/StateGroups/view.ctp:114 -#: Template/StateGroups/view.ctp:143 -#: Template/StateRelationshipTypes/index.ctp:31 -#: Template/StateUserRoles/index.ctp:51 -#: Template/StateUserTransactions/index.ctp:39 Template/StateUsers/index.ctp:51 -#: Template/StateUsers/view.ctp:41 Template/StateUsers/view.ctp:71 -#: Template/StateUsers/view.ctp:104 Template/StateUsers/view.ctp:136 -#: Template/TransactionCreations/index.ctp:42 -#: Template/TransactionGroupAddaddress/index.ctp:37 -#: Template/TransactionGroupAllowtrades/index.ctp:35 -#: Template/TransactionGroupCreates/index.ctp:37 -#: Template/TransactionSendCoins/index.ctp:41 -#: Template/TransactionSignatures/index.ctp:31 -#: Template/TransactionTypes/index.ctp:33 Template/TransactionTypes/view.ctp:54 -#: Template/Transactions/view.ctp:78 Template/Transactions/view.ctp:107 -#: Template/Transactions/view.ctp:134 Template/Transactions/view.ctp:161 -#: Template/Transactions/view.ctp:190 Template/Transactions/view.ctp:223 -#: Template/Transactions/view.ctp:250 Template/Users/index.ctp:41 -msgid "View" -msgstr "" - -#: Template/AddressTypes/index.ctp:36 Template/AddressTypes/view.ctp:55 -#: Template/AddressTypes/view.ctp:84 Template/AdminErrors/index.ctp:41 -#: Template/BlockchainTypes/index.ctp:34 -#: Template/CommunityProfiles/index.ctp:32 Template/ElopageBuys/index.ctp:50 -#: Template/OperatorTypes/view.ctp:53 Template/Operators/index.ctp:39 -#: Template/Roles/index.ctp:30 Template/ServerUsers/index.ctp:42 -#: Template/StateBalances/index.ctp:37 Template/StateCreated/index.ctp:44 -#: Template/StateErrors/index.ctp:38 Template/StateGroupAddresses/index.ctp:38 -#: Template/StateGroupRelationships/index.ctp:34 -#: Template/StateGroups/index.ctp:40 Template/StateGroups/view.ctp:59 -#: Template/StateGroups/view.ctp:86 Template/StateGroups/view.ctp:115 -#: Template/StateGroups/view.ctp:144 -#: Template/StateRelationshipTypes/index.ctp:32 -#: Template/StateUserRoles/index.ctp:52 -#: Template/StateUserTransactions/index.ctp:40 Template/StateUsers/index.ctp:52 -#: Template/TransactionGroupAddaddress/index.ctp:38 -#: Template/TransactionGroupAllowtrades/index.ctp:36 -#: Template/TransactionGroupCreates/index.ctp:38 -#: Template/TransactionSignatures/index.ctp:32 -#: Template/TransactionTypes/index.ctp:34 Template/TransactionTypes/view.ctp:55 -#: Template/Transactions/view.ctp:79 Template/Transactions/view.ctp:108 -#: Template/Transactions/view.ctp:135 Template/Transactions/view.ctp:162 -#: Template/Transactions/view.ctp:191 Template/Transactions/view.ctp:224 -#: Template/Transactions/view.ctp:251 Template/Users/index.ctp:42 -msgid "Edit" -msgstr "" - -#: Template/AddressTypes/index.ctp:45 Template/AdminErrors/index.ctp:50 -#: Template/BlockchainTypes/index.ctp:43 -#: Template/CommunityProfiles/index.ctp:41 Template/ElopageBuys/index.ctp:59 -#: Template/Operators/index.ctp:48 Template/Roles/index.ctp:39 -#: Template/ServerUsers/index.ctp:51 Template/StateBalances/index.ctp:46 -#: Template/StateCreated/index.ctp:53 Template/StateErrors/index.ctp:47 -#: Template/StateGroupAddresses/index.ctp:47 -#: Template/StateGroupRelationships/index.ctp:43 -#: Template/StateGroups/index.ctp:49 -#: Template/StateRelationshipTypes/index.ctp:41 -#: Template/StateUserRoles/index.ctp:61 -#: Template/StateUserTransactions/index.ctp:49 Template/StateUsers/index.ctp:61 -#: Template/TransactionCreations/index.ctp:50 -#: Template/TransactionGroupAddaddress/index.ctp:47 -#: Template/TransactionGroupAllowtrades/index.ctp:45 -#: Template/TransactionGroupCreates/index.ctp:47 -#: Template/TransactionSendCoins/index.ctp:49 -#: Template/TransactionSignatures/index.ctp:41 -#: Template/TransactionTypes/index.ctp:43 Template/Transactions/index.ctp:50 -#: Template/Users/index.ctp:51 -msgid "first" -msgstr "" - -#: Template/AddressTypes/index.ctp:46 Template/AdminErrors/index.ctp:51 -#: Template/BlockchainTypes/index.ctp:44 -#: Template/CommunityProfiles/index.ctp:42 Template/ElopageBuys/index.ctp:60 -#: Template/Operators/index.ctp:49 Template/Roles/index.ctp:40 -#: Template/ServerUsers/index.ctp:52 Template/StateBalances/index.ctp:47 -#: Template/StateCreated/index.ctp:54 Template/StateErrors/index.ctp:48 -#: Template/StateGroupAddresses/index.ctp:48 -#: Template/StateGroupRelationships/index.ctp:44 -#: Template/StateGroups/index.ctp:50 -#: Template/StateRelationshipTypes/index.ctp:42 -#: Template/StateUserRoles/index.ctp:62 -#: Template/StateUserTransactions/index.ctp:50 Template/StateUsers/index.ctp:62 -#: Template/TransactionCreations/index.ctp:51 -#: Template/TransactionGroupAddaddress/index.ctp:48 -#: Template/TransactionGroupAllowtrades/index.ctp:46 -#: Template/TransactionGroupCreates/index.ctp:48 -#: Template/TransactionSendCoins/index.ctp:50 -#: Template/TransactionSignatures/index.ctp:42 -#: Template/TransactionTypes/index.ctp:44 Template/Transactions/index.ctp:51 -#: Template/Users/index.ctp:52 -msgid "previous" -msgstr "" - -#: Template/AddressTypes/index.ctp:48 Template/AdminErrors/index.ctp:53 -#: Template/BlockchainTypes/index.ctp:46 -#: Template/CommunityProfiles/index.ctp:44 Template/ElopageBuys/index.ctp:62 -#: Template/Operators/index.ctp:51 Template/Roles/index.ctp:42 -#: Template/ServerUsers/index.ctp:54 Template/StateBalances/index.ctp:49 -#: Template/StateCreated/index.ctp:56 Template/StateErrors/index.ctp:50 -#: Template/StateGroupAddresses/index.ctp:50 -#: Template/StateGroupRelationships/index.ctp:46 -#: Template/StateGroups/index.ctp:52 -#: Template/StateRelationshipTypes/index.ctp:44 -#: Template/StateUserRoles/index.ctp:64 -#: Template/StateUserTransactions/index.ctp:52 Template/StateUsers/index.ctp:64 -#: Template/TransactionCreations/index.ctp:53 -#: Template/TransactionGroupAddaddress/index.ctp:50 -#: Template/TransactionGroupAllowtrades/index.ctp:48 -#: Template/TransactionGroupCreates/index.ctp:50 -#: Template/TransactionSendCoins/index.ctp:52 -#: Template/TransactionSignatures/index.ctp:44 -#: Template/TransactionTypes/index.ctp:46 Template/Transactions/index.ctp:53 -#: Template/Users/index.ctp:54 -msgid "next" -msgstr "" - -#: Template/AddressTypes/index.ctp:49 Template/AdminErrors/index.ctp:54 -#: Template/BlockchainTypes/index.ctp:47 -#: Template/CommunityProfiles/index.ctp:45 Template/ElopageBuys/index.ctp:63 -#: Template/Operators/index.ctp:52 Template/Roles/index.ctp:43 -#: Template/ServerUsers/index.ctp:55 Template/StateBalances/index.ctp:50 -#: Template/StateCreated/index.ctp:57 Template/StateErrors/index.ctp:51 -#: Template/StateGroupAddresses/index.ctp:51 -#: Template/StateGroupRelationships/index.ctp:47 -#: Template/StateGroups/index.ctp:53 -#: Template/StateRelationshipTypes/index.ctp:45 -#: Template/StateUserRoles/index.ctp:65 -#: Template/StateUserTransactions/index.ctp:53 Template/StateUsers/index.ctp:65 -#: Template/TransactionCreations/index.ctp:54 -#: Template/TransactionGroupAddaddress/index.ctp:51 -#: Template/TransactionGroupAllowtrades/index.ctp:49 -#: Template/TransactionGroupCreates/index.ctp:51 -#: Template/TransactionSendCoins/index.ctp:53 -#: Template/TransactionSignatures/index.ctp:45 -#: Template/TransactionTypes/index.ctp:47 Template/Transactions/index.ctp:54 -#: Template/Users/index.ctp:55 -msgid "last" -msgstr "" - -#: Template/AddressTypes/index.ctp:51 Template/AdminErrors/index.ctp:56 -#: Template/BlockchainTypes/index.ctp:49 -#: Template/CommunityProfiles/index.ctp:47 Template/ElopageBuys/index.ctp:65 -#: Template/Operators/index.ctp:54 Template/Roles/index.ctp:45 -#: Template/ServerUsers/index.ctp:57 Template/StateBalances/index.ctp:52 -#: Template/StateCreated/index.ctp:59 Template/StateErrors/index.ctp:53 -#: Template/StateGroupAddresses/index.ctp:53 -#: Template/StateGroupRelationships/index.ctp:49 -#: Template/StateGroups/index.ctp:55 -#: Template/StateRelationshipTypes/index.ctp:47 -#: Template/StateUserRoles/index.ctp:67 -#: Template/StateUserTransactions/index.ctp:55 Template/StateUsers/index.ctp:67 -#: Template/TransactionCreations/index.ctp:56 -#: Template/TransactionGroupAddaddress/index.ctp:53 -#: Template/TransactionGroupAllowtrades/index.ctp:51 -#: Template/TransactionGroupCreates/index.ctp:53 -#: Template/TransactionSendCoins/index.ctp:55 -#: Template/TransactionSignatures/index.ctp:47 -#: Template/TransactionTypes/index.ctp:49 Template/Transactions/index.ctp:56 -#: Template/Users/index.ctp:57 -msgid "" -"Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} " -"total" -msgstr "" - -#: Template/AddressTypes/view.ctp:11 -msgid "Delete Address Type" -msgstr "" - -#: Template/AddressTypes/view.ctp:24 Template/BlockchainTypes/view.ctp:20 -#: Template/OperatorTypes/view.ctp:22 Template/StateGroups/view.ctp:28 -#: Template/StateGroups/view.ctp:103 -#: Template/StateRelationshipTypes/view.ctp:20 -#: Template/TransactionGroupCreates/view.ctp:32 -#: Template/TransactionTypes/view.ctp:22 Template/Transactions/view.ctp:179 -#: Template/Users/statistics.ctp:64 -msgid "Name" -msgstr "" - -#: Template/AddressTypes/view.ctp:28 Template/BlockchainTypes/view.ctp:24 -#: Template/OperatorTypes/view.ctp:26 -#: Template/StateRelationshipTypes/view.ctp:24 -#: Template/TransactionTypes/view.ctp:26 -msgid "Text" -msgstr "" - -#: Template/AddressTypes/view.ctp:32 Template/AddressTypes/view.ctp:41 -#: Template/AddressTypes/view.ctp:68 Template/AdminErrors/view.ctp:46 -#: Template/BlockchainTypes/view.ctp:32 Template/CommunityProfiles/view.ctp:24 -#: Template/OperatorTypes/view.ctp:30 Template/OperatorTypes/view.ctp:39 -#: Template/Operators/view.ctp:32 Template/Roles/view.ctp:24 -#: Template/ServerUsers/view.ctp:36 Template/StateBalances/view.ctp:27 -#: Template/StateCreated/view.ctp:32 Template/StateErrors/view.ctp:32 -#: Template/StateGroupAddresses/view.ctp:28 -#: Template/StateGroupRelationships/view.ctp:20 -#: Template/StateGroups/view.ctp:32 Template/StateGroups/view.ctp:45 -#: Template/StateGroups/view.ctp:72 Template/StateGroups/view.ctp:99 -#: Template/StateGroups/view.ctp:128 -#: Template/StateRelationshipTypes/view.ctp:28 -#: Template/StateUserTransactions/view.ctp:38 -#: Template/TransactionCreations/view.ctp:32 -#: Template/TransactionGroupAddaddress/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:32 -#: Template/TransactionSignatures/view.ctp:26 -#: Template/TransactionTypes/view.ctp:30 Template/TransactionTypes/view.ctp:39 -#: Template/Transactions/view.ctp:46 Template/Transactions/view.ctp:59 -#: Template/Transactions/view.ctp:92 Template/Transactions/view.ctp:121 -#: Template/Transactions/view.ctp:148 Template/Transactions/view.ctp:175 -#: Template/Transactions/view.ctp:204 Template/Transactions/view.ctp:237 -#: Template/Users/view.ctp:36 -msgid "Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:37 Template/StateGroups/view.ctp:41 -msgid "Related State Group Addresses" -msgstr "" - -#: Template/AddressTypes/view.ctp:42 Template/StateGroupAddresses/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:30 -#: Template/Transactions/view.ctp:150 -msgid "Group Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:43 Template/AddressTypes/view.ctp:72 -#: Template/StateGroups/view.ctp:47 Template/StateGroups/view.ctp:75 -#: Template/Transactions/view.ctp:124 -msgid "Public Key" -msgstr "" - -#: Template/AddressTypes/view.ctp:44 Template/AddressTypes/view.ctp:70 -#: Template/StateGroups/view.ctp:48 Template/Transactions/view.ctp:123 -msgid "Address Type Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:64 Template/Transactions/view.ctp:117 -msgid "Related Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/view.ctp:69 Template/StateGroups/view.ctp:100 -#: Template/Transactions/view.ctp:60 Template/Transactions/view.ctp:93 -#: Template/Transactions/view.ctp:122 Template/Transactions/view.ctp:149 -#: Template/Transactions/view.ctp:176 Template/Transactions/view.ctp:205 -#: Template/Transactions/view.ctp:238 -msgid "Transaction Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:71 -msgid "Remove From Group" -msgstr "" - -#: Template/AdminErrors/add.ctp:10 Template/AdminErrors/edit.ctp:16 -#: Template/AdminErrors/view.ctp:12 -msgid "List Admin Errors" -msgstr "" - -#: Template/AdminErrors/add.ctp:11 Template/AdminErrors/edit.ctp:17 -#: Template/AdminErrors/index.ctp:11 Template/AdminErrors/view.ctp:14 -#: Template/StateBalances/add.ctp:11 Template/StateBalances/edit.ctp:17 -#: Template/StateBalances/index.ctp:11 Template/StateBalances/view.ctp:14 -#: Template/StateCreated/add.ctp:13 Template/StateCreated/edit.ctp:19 -#: Template/StateCreated/index.ctp:13 Template/StateCreated/view.ctp:16 -#: Template/StateErrors/add.ctp:11 Template/StateErrors/edit.ctp:17 -#: Template/StateErrors/index.ctp:11 Template/StateErrors/view.ctp:14 -#: Template/StateGroups/add.ctp:13 Template/StateGroups/edit.ctp:19 -#: Template/StateGroups/index.ctp:13 Template/StateGroups/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:11 -#: Template/StateUserTransactions/edit.ctp:17 -#: Template/StateUserTransactions/index.ctp:11 -#: Template/StateUserTransactions/view.ctp:14 Template/StateUsers/add.ctp:10 -#: Template/StateUsers/edit.ctp:16 Template/StateUsers/view.ctp:12 -#: Template/TransactionCreations/add.ctp:13 -#: Template/TransactionCreations/edit.ctp:19 -#: Template/TransactionCreations/index.ctp:13 -#: Template/TransactionCreations/view.ctp:16 -#: Template/TransactionSendCoins/add.ctp:13 -#: Template/TransactionSendCoins/edit.ctp:19 -#: Template/TransactionSendCoins/index.ctp:13 -#: Template/TransactionSendCoins/view.ctp:16 -msgid "List State Users" -msgstr "" - -#: Template/AdminErrors/add.ctp:12 Template/AdminErrors/edit.ctp:18 -#: Template/AdminErrors/index.ctp:12 Template/AdminErrors/view.ctp:15 -#: Template/StateBalances/add.ctp:12 Template/StateBalances/edit.ctp:18 -#: Template/StateBalances/index.ctp:12 Template/StateBalances/view.ctp:15 -#: Template/StateCreated/add.ctp:14 Template/StateCreated/edit.ctp:20 -#: Template/StateCreated/index.ctp:14 Template/StateCreated/view.ctp:17 -#: Template/StateErrors/add.ctp:12 Template/StateErrors/edit.ctp:18 -#: Template/StateErrors/index.ctp:12 Template/StateErrors/view.ctp:15 -#: Template/StateGroups/add.ctp:14 Template/StateGroups/edit.ctp:20 -#: Template/StateGroups/index.ctp:14 Template/StateGroups/view.ctp:17 -#: Template/StateUserRoles/index.ctp:10 -#: Template/StateUserTransactions/add.ctp:12 -#: Template/StateUserTransactions/edit.ctp:18 -#: Template/StateUserTransactions/index.ctp:12 -#: Template/StateUserTransactions/view.ctp:15 Template/StateUsers/index.ctp:10 -#: Template/StateUsers/view.ctp:13 Template/TransactionCreations/add.ctp:14 -#: Template/TransactionCreations/edit.ctp:20 -#: Template/TransactionCreations/index.ctp:14 -#: Template/TransactionCreations/view.ctp:17 -#: Template/TransactionSendCoins/add.ctp:14 -#: Template/TransactionSendCoins/edit.ctp:20 -#: Template/TransactionSendCoins/index.ctp:14 -#: Template/TransactionSendCoins/view.ctp:17 -msgid "New State User" -msgstr "" - -#: Template/AdminErrors/add.ctp:18 -msgid "Add Admin Error" -msgstr "" - -#: Template/AdminErrors/edit.ctp:24 Template/AdminErrors/view.ctp:10 -msgid "Edit Admin Error" -msgstr "" - -#: Template/AdminErrors/index.ctp:10 Template/AdminErrors/view.ctp:13 -msgid "New Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:11 -msgid "Delete Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:22 Template/StateBalances/view.ctp:23 -#: Template/StateCreated/view.ctp:28 Template/StateErrors/view.ctp:24 -#: Template/StateUserTransactions/view.ctp:26 -#: Template/TransactionCreations/view.ctp:28 -#: Template/TransactionSendCoins/view.ctp:28 -msgid "State User" -msgstr "" - -#: Template/AdminErrors/view.ctp:26 -msgid "Controller" -msgstr "" - -#: Template/AdminErrors/view.ctp:30 -msgid "Action" -msgstr "" - -#: Template/AdminErrors/view.ctp:34 -msgid "State" -msgstr "" - -#: Template/AdminErrors/view.ctp:38 -msgid "Msg" -msgstr "" - -#: Template/AdminErrors/view.ctp:42 -msgid "Details" -msgstr "" - -#: Template/AdminErrors/view.ctp:50 Template/ServerUsers/view.ctp:44 -#: Template/StateCreated/view.ctp:48 Template/StateErrors/view.ctp:36 -#: Template/Transactions/view.ctp:64 Template/Users/view.ctp:44 -msgid "Created" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:10 Template/BlockchainTypes/edit.ctp:16 -#: Template/BlockchainTypes/view.ctp:12 -msgid "List Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:16 -msgid "Add Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/edit.ctp:22 Template/BlockchainTypes/view.ctp:10 -msgid "Edit Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:10 Template/BlockchainTypes/view.ctp:13 -msgid "New Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:14 -msgid "Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:11 -msgid "Delete Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:28 -msgid "Symbol" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:10 Template/CommunityProfiles/edit.ctp:16 -#: Template/CommunityProfiles/view.ctp:12 -msgid "List Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:16 -msgid "Add Community Profile" -msgstr "" - -#: Template/CommunityProfiles/edit.ctp:22 -#: Template/CommunityProfiles/view.ctp:10 -msgid "Edit Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:10 -#: Template/CommunityProfiles/view.ctp:13 -msgid "New Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:14 -msgid "Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:11 -msgid "Delete Community Profile" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:20 -msgid "Profile Desc" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:28 Template/Transactions/view.ctp:63 -#: Template/Transactions/view.ctp:94 Template/Transactions/view.ctp:206 -msgid "State User Id" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:9 -msgid "Error, Please try again" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:13 Template/Layout/error.ctp:43 -msgid "Back" -msgstr "" - -#: Template/Dashboard/index.ctp:14 Template/Dashboard/index.ctp:18 -#: Template/Dashboard/server_index.ctp:9 -msgid "Willkommen" -msgstr "" - -#: Template/Dashboard/index.ctp:47 -msgid "löschen" -msgstr "" - -#: Template/Dashboard/index.ctp:51 -msgid "Adminbereich" -msgstr "" - -#: Template/Dashboard/index.ctp:57 Template/Dashboard/server_index.ctp:21 -msgid "viele schöpfen" -msgstr "" - -#: Template/Dashboard/index.ctp:70 -msgid "Anmeldungen" -msgstr "" - -#: Template/Dashboard/index.ctp:94 -msgid "suchen" -msgstr "" - -#: Template/Dashboard/index.ctp:102 -msgid "hinzufügen" -msgstr "" - -#: Template/Dashboard/index.ctp:108 -msgid "hat sein Passwort und Passphrase vergessen" -msgstr "" - -#: Template/Dashboard/index.ctp:119 -msgid "Gruppen" -msgstr "" - -#: Template/Dashboard/index.ctp:125 -msgid "Server" -msgstr "" - -#: Template/Dashboard/index.ctp:131 -msgid "Topics" -msgstr "" - -#: Template/Dashboard/index.ctp:139 -msgid "Hedera Accounts" -msgstr "" - -#: Template/Element/navi.ctp:35 -msgid "Mitgliederbereich" -msgstr "" - -#: Template/Element/navi_header.ctp:38 Template/Element/navi_notify.ctp:35 -msgid "Transaktionen sind noch zu unterzeichnen" -msgstr "" - -#: Template/Element/user_menu.ctp:22 -msgid "Abmelden" -msgstr "" - -#: Template/Element/Flash/success.ctp:9 -msgid "Info:" -msgstr "" - -#: Template/ElopageBuys/add.ctp:10 Template/ElopageBuys/edit.ctp:16 -#: Template/ElopageBuys/view.ctp:12 -msgid "List Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/add.ctp:16 -msgid "Add Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/edit.ctp:22 Template/ElopageBuys/view.ctp:10 -msgid "Edit Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:10 Template/ElopageBuys/view.ctp:13 -msgid "New Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:14 -msgid "Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/statistics.ctp:28 Template/Users/statistics.ctp:49 -msgid "Anmeldungen diesen Monat" -msgstr "" - -#: Template/ElopageBuys/view.ctp:11 -msgid "Delete Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/view.ctp:20 -msgid "Payer Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:24 -msgid "Publisher Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:28 -msgid "Event" -msgstr "" - -#: Template/ElopageBuys/view.ctp:36 -msgid "Elopage User Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:40 -msgid "Affiliate Program Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:44 -msgid "Publisher Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:48 -msgid "Order Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:52 -msgid "Product Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:56 -msgid "Product Price" -msgstr "" - -#: Template/ElopageBuys/view.ctp:60 -msgid "Success Date" -msgstr "" - -#: Template/ElopageBuys/view.ctp:64 -msgid "Payed" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 Template/Users/view.ctp:49 -msgid "Yes" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 Template/Users/view.ctp:49 -msgid "No" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:8 -msgid "Gradido Schöpfung" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:9 -#: Template/Email/text/notification_transaction_failed.ctp:14 -#: Template/Email/text/notification_transfer.ctp:12 -msgid "Hallo" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:11 -msgid "für dich wurden soeben {0} geschöpft." -msgstr "" - -#: Template/Email/text/notification_creation.ctp:16 -#: Template/Email/text/notification_transaction_failed.ctp:46 -#: Template/Email/text/notification_transfer.ctp:19 -msgid "Bitte antworte nicht auf diese E-Mail!" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:18 -#: Template/Email/text/notification_transaction_failed.ctp:49 -#: Template/Email/text/notification_transfer.ctp:25 -msgid "Mit freundlichen Grüßen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:8 -msgid "Gradido Transaktion fehlgeschlagen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:16 -msgid "Deine letzte Transaktion ist leider fehlgeschlagen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:20 -msgid "Du wolltest {0} für {1} schöpfen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:24 -msgid "Das Zieldatum war: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:26 -msgid "Du wolltest {0} an {1} senden." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:32 -msgid "Das ist schief gelaufen: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:35 -msgid "Fehler beim speichern in der Datenbank. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:36 -msgid "Fehler beim parsen der Transaktion. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:8 -msgid "Gradido Überweisung" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:14 -msgid "Du hast soeben {0} von {1} erhalten." -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:15 -msgid "{0} schreibt:" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid "Wenn Du " -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid " per E-Mail antworten willst, schreibe stattdessen an die Adresse: " -msgstr "" - -#: Template/Layout/default.ctp:38 -msgid "Logout" -msgstr "" - -#: Template/Layout/error.ctp:35 -msgid "Error" -msgstr "" - -#: Template/Layout/frontend.ctp:95 -msgid "Datenschutzerklärung" -msgstr "" - -#: Template/Layout/frontend.ctp:96 -msgid "Impressum" -msgstr "" - -#: Template/Layout/frontend.ctp:108 -msgid "Community Server in Entwicklung" -msgstr "" - -#: Template/OperatorTypes/add.ctp:10 Template/OperatorTypes/edit.ctp:16 -#: Template/OperatorTypes/view.ctp:12 -msgid "List Operator Types" -msgstr "" - -#: Template/OperatorTypes/add.ctp:11 Template/OperatorTypes/edit.ctp:17 -#: Template/OperatorTypes/index.ctp:11 Template/OperatorTypes/view.ctp:14 -#: Template/Operators/add.ctp:10 Template/Operators/edit.ctp:16 -#: Template/Operators/view.ctp:12 -msgid "List Operators" -msgstr "" - -#: Template/OperatorTypes/add.ctp:12 Template/OperatorTypes/edit.ctp:18 -#: Template/OperatorTypes/index.ctp:12 Template/OperatorTypes/view.ctp:15 -#: Template/Operators/index.ctp:10 Template/Operators/view.ctp:13 -msgid "New Operator" -msgstr "" - -#: Template/OperatorTypes/add.ctp:18 -msgid "Add Operator Type" -msgstr "" - -#: Template/OperatorTypes/edit.ctp:24 Template/OperatorTypes/view.ctp:10 -msgid "Edit Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:10 Template/OperatorTypes/view.ctp:13 -msgid "New Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:16 -msgid "Operator Types" -msgstr "" - -#: Template/OperatorTypes/view.ctp:11 -msgid "Delete Operator Type" -msgstr "" - -#: Template/OperatorTypes/view.ctp:35 -msgid "Related Operators" -msgstr "" - -#: Template/OperatorTypes/view.ctp:40 Template/Operators/view.ctp:20 -#: Template/ServerUsers/view.ctp:20 -msgid "Username" -msgstr "" - -#: Template/OperatorTypes/view.ctp:41 Template/Operators/view.ctp:36 -msgid "Operator Type Id" -msgstr "" - -#: Template/OperatorTypes/view.ctp:42 Template/Operators/view.ctp:28 -msgid "Data Base64" -msgstr "" - -#: Template/Operators/add.ctp:16 -msgid "Add Operator" -msgstr "" - -#: Template/Operators/edit.ctp:22 Template/Operators/view.ctp:10 -msgid "Edit Operator" -msgstr "" - -#: Template/Operators/index.ctp:14 -msgid "Operators" -msgstr "" - -#: Template/Operators/view.ctp:11 -msgid "Delete Operator" -msgstr "" - -#: Template/Operators/view.ctp:24 -msgid "User Pubkey" -msgstr "" - -#: Template/Profile/edit.ctp:9 -msgid "Profil ändern" -msgstr "" - -#: Template/Profile/edit.ctp:18 -msgid "Vorname" -msgstr "" - -#: Template/Profile/edit.ctp:19 -msgid "Nachname" -msgstr "" - -#: Template/Profile/edit.ctp:20 -msgid "Profilbild" -msgstr "" - -#: Template/Profile/edit.ctp:25 -msgid "Beschreibung" -msgstr "" - -#: Template/Profile/edit.ctp:26 -msgid "Daten speichern" -msgstr "" - -#: Template/Roles/add.ctp:10 Template/Roles/edit.ctp:16 -#: Template/Roles/view.ctp:12 -msgid "List Roles" -msgstr "" - -#: Template/Roles/add.ctp:16 -msgid "Add Role" -msgstr "" - -#: Template/Roles/edit.ctp:22 Template/Roles/view.ctp:10 -msgid "Edit Role" -msgstr "" - -#: Template/Roles/index.ctp:10 Template/Roles/view.ctp:13 -msgid "New Role" -msgstr "" - -#: Template/Roles/index.ctp:14 -msgid "Roles" -msgstr "" - -#: Template/Roles/view.ctp:11 -msgid "Delete Role" -msgstr "" - -#: Template/Roles/view.ctp:20 -msgid "Title" -msgstr "" - -#: Template/ServerUsers/add.ctp:10 Template/ServerUsers/edit.ctp:16 -#: Template/ServerUsers/view.ctp:12 -msgid "List Server Users" -msgstr "" - -#: Template/ServerUsers/add.ctp:16 -msgid "Add Server User" -msgstr "" - -#: Template/ServerUsers/edit.ctp:22 Template/ServerUsers/view.ctp:10 -msgid "Edit Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:10 Template/ServerUsers/view.ctp:13 -msgid "New Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:14 -msgid "Server Users" -msgstr "" - -#: Template/ServerUsers/login.ctp:16 -msgid "Please enter your username and password" -msgstr "" - -#: Template/ServerUsers/login.ctp:20 -msgid "Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:11 -msgid "Delete Server User" -msgstr "" - -#: Template/ServerUsers/view.ctp:24 Template/Users/view.ctp:40 -msgid "Password" -msgstr "" - -#: Template/ServerUsers/view.ctp:28 Template/Users/view.ctp:20 -msgid "Email" -msgstr "" - -#: Template/ServerUsers/view.ctp:32 Template/StateUserRoles/assign_role.ctp:45 -#: Template/StateUserRoles/search.ctp:32 -msgid "Role" -msgstr "" - -#: Template/ServerUsers/view.ctp:40 -msgid "Last Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:48 Template/StateBalances/view.ctp:35 -msgid "Modified" -msgstr "" - -#: Template/ServerUsers/view.ctp:52 -msgid "Activated" -msgstr "" - -#: Template/StateBalances/add.ctp:10 Template/StateBalances/edit.ctp:16 -#: Template/StateBalances/view.ctp:12 Template/StateUserRoles/index.ctp:13 -#: Template/StateUsers/add.ctp:13 Template/StateUsers/edit.ctp:19 -#: Template/StateUsers/index.ctp:13 Template/StateUsers/view.ctp:16 -msgid "List State Balances" -msgstr "" - -#: Template/StateBalances/add.ctp:19 -msgid "Add State Balance" -msgstr "" - -#: Template/StateBalances/edit.ctp:25 Template/StateBalances/view.ctp:10 -msgid "Edit State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:10 Template/StateBalances/view.ctp:13 -#: Template/StateUserRoles/index.ctp:14 Template/StateUsers/add.ctp:14 -#: Template/StateUsers/edit.ctp:20 Template/StateUsers/index.ctp:14 -#: Template/StateUsers/view.ctp:17 -msgid "New State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:16 -msgid "State Balances" -msgstr "" - -#: Template/StateBalances/overview.ctp:10 -msgid "Aktueller Kontostand: " -msgstr "" - -#: Template/StateBalances/overview.ctp:34 -msgid "Absender" -msgstr "" - -#: Template/StateBalances/overview.ctp:35 Template/StateUsers/view.ctp:57 -#: Template/StateUsers/view.ctp:87 Template/StateUsers/view.ctp:121 -#: Template/TransactionSendCoins/create.ctp:21 -#: Template/TransactionSendCoins/create_raw.ctp:32 -msgid "Verwendungszweck" -msgstr "" - -#: Template/StateBalances/overview.ctp:36 -#: Template/StateBalances/overview_gdt.ctp:42 -#: Template/StateBalances/overview_gdt.ctp:75 -msgid "Datum" -msgstr "" - -#: Template/StateBalances/overview.ctp:37 Template/StateUsers/view.ctp:56 -#: Template/StateUsers/view.ctp:86 Template/StateUsers/view.ctp:120 -msgid "Betrag" -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Transaktions Nr." -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Nr" -msgstr "" - -#: Template/StateBalances/overview.ctp:75 -msgid "Geschöpft" -msgstr "" - -#: Template/StateBalances/overview.ctp:78 -msgid "Gesendet" -msgstr "" - -#: Template/StateBalances/overview.ctp:81 -msgid "Empfangen" -msgstr "" - -#: Template/StateBalances/overview.ctp:84 -msgid "Vergänglichkeit" -msgstr "" - -#: Template/StateBalances/overview.ctp:124 -#: Template/TransactionCreations/create_multi.ctp:184 -msgid "Laufende Transaktion" -msgstr "" - -#: Template/StateBalances/overview.ctp:126 -#: Template/TransactionCreations/create_multi.ctp:186 -msgid "Laufende Transaktionen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:21 -msgid "Zur Verfügung: " -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:31 -msgid "Nur die letzten 100 Einträge werden angezeigt!" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:38 -msgid "Eigene Einzahlungen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:41 Template/Users/statistics.ctp:65 -msgid "E-Mail" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:43 -msgid "Kommentar" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:44 -#: Template/StateBalances/overview_gdt.ctp:76 -msgid "Euro" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:45 -#: Template/StateBalances/overview_gdt.ctp:77 -msgid "Factor" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:46 -#: Template/StateBalances/overview_gdt.ctp:78 -msgid "GDT" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:71 -msgid "Einzahlungen anderer (Publisherprogramm)" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:74 -msgid "Einzahlender" -msgstr "" - -#: Template/StateBalances/view.ctp:11 -msgid "Delete State Balance" -msgstr "" - -#: Template/StateBalances/view.ctp:31 Template/StateUsers/view.ctp:33 -#: Template/TransactionCreations/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:36 Template/Transactions/view.ctp:95 -#: Template/Transactions/view.ctp:209 -msgid "Amount" -msgstr "" - -#: Template/StateCreated/add.ctp:10 Template/StateCreated/edit.ctp:16 -#: Template/StateCreated/view.ctp:12 Template/StateUserRoles/index.ctp:15 -#: Template/StateUsers/add.ctp:15 Template/StateUsers/edit.ctp:21 -#: Template/StateUsers/index.ctp:15 Template/Transactions/add.ctp:15 -#: Template/Transactions/edit.ctp:21 Template/Transactions/index.ctp:15 -#: Template/Transactions/view.ctp:18 -msgid "List State Created" -msgstr "" - -#: Template/StateCreated/add.ctp:11 Template/StateCreated/edit.ctp:17 -#: Template/StateCreated/index.ctp:11 Template/StateCreated/view.ctp:14 -#: Template/StateGroups/add.ctp:17 Template/StateGroups/edit.ctp:23 -#: Template/StateGroups/index.ctp:17 Template/StateGroups/view.ctp:20 -#: Template/StateUserTransactions/add.ctp:13 -#: Template/StateUserTransactions/edit.ctp:19 -#: Template/StateUserTransactions/index.ctp:13 -#: Template/StateUserTransactions/view.ctp:16 -#: Template/TransactionCreations/add.ctp:11 -#: Template/TransactionCreations/edit.ctp:17 -#: Template/TransactionCreations/index.ctp:11 -#: Template/TransactionCreations/view.ctp:14 -#: Template/TransactionGroupAddaddress/add.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:11 -#: Template/TransactionGroupAddaddress/view.ctp:14 -#: Template/TransactionGroupAllowtrades/add.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:17 -#: Template/TransactionGroupAllowtrades/index.ctp:11 -#: Template/TransactionGroupAllowtrades/view.ctp:14 -#: Template/TransactionGroupCreates/add.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:17 -#: Template/TransactionGroupCreates/index.ctp:11 -#: Template/TransactionGroupCreates/view.ctp:14 -#: Template/TransactionSendCoins/add.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:17 -#: Template/TransactionSendCoins/index.ctp:11 -#: Template/TransactionSendCoins/view.ctp:14 -#: Template/TransactionSignatures/add.ctp:11 -#: Template/TransactionSignatures/edit.ctp:17 -#: Template/TransactionSignatures/index.ctp:11 -#: Template/TransactionSignatures/view.ctp:14 -#: Template/TransactionTypes/add.ctp:11 Template/TransactionTypes/edit.ctp:17 -#: Template/TransactionTypes/index.ctp:11 Template/TransactionTypes/view.ctp:14 -#: Template/Transactions/add.ctp:10 Template/Transactions/edit.ctp:16 -#: Template/Transactions/view.ctp:12 -msgid "List Transactions" -msgstr "" - -#: Template/StateCreated/add.ctp:12 Template/StateCreated/edit.ctp:18 -#: Template/StateCreated/index.ctp:12 Template/StateCreated/view.ctp:15 -#: Template/StateGroups/add.ctp:18 Template/StateGroups/edit.ctp:24 -#: Template/StateGroups/index.ctp:18 Template/StateGroups/view.ctp:21 -#: Template/StateUserTransactions/add.ctp:14 -#: Template/StateUserTransactions/edit.ctp:20 -#: Template/StateUserTransactions/index.ctp:14 -#: Template/StateUserTransactions/view.ctp:17 -#: Template/TransactionCreations/add.ctp:12 -#: Template/TransactionCreations/edit.ctp:18 -#: Template/TransactionCreations/index.ctp:12 -#: Template/TransactionCreations/view.ctp:15 -#: Template/TransactionGroupAddaddress/add.ctp:12 -#: Template/TransactionGroupAddaddress/edit.ctp:18 -#: Template/TransactionGroupAddaddress/index.ctp:12 -#: Template/TransactionGroupAddaddress/view.ctp:15 -#: Template/TransactionGroupAllowtrades/add.ctp:12 -#: Template/TransactionGroupAllowtrades/edit.ctp:18 -#: Template/TransactionGroupAllowtrades/index.ctp:12 -#: Template/TransactionGroupAllowtrades/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:12 -#: Template/TransactionGroupCreates/edit.ctp:18 -#: Template/TransactionGroupCreates/index.ctp:12 -#: Template/TransactionGroupCreates/view.ctp:15 -#: Template/TransactionSendCoins/add.ctp:12 -#: Template/TransactionSendCoins/edit.ctp:18 -#: Template/TransactionSendCoins/index.ctp:12 -#: Template/TransactionSendCoins/view.ctp:15 -#: Template/TransactionSignatures/add.ctp:12 -#: Template/TransactionSignatures/edit.ctp:18 -#: Template/TransactionSignatures/index.ctp:12 -#: Template/TransactionSignatures/view.ctp:15 -#: Template/TransactionTypes/add.ctp:12 Template/TransactionTypes/edit.ctp:18 -#: Template/TransactionTypes/index.ctp:12 Template/TransactionTypes/view.ctp:15 -#: Template/Transactions/index.ctp:10 Template/Transactions/view.ctp:13 -msgid "New Transaction" -msgstr "" - -#: Template/StateCreated/add.ctp:20 -msgid "Add State Created" -msgstr "" - -#: Template/StateCreated/edit.ctp:26 Template/StateCreated/view.ctp:10 -msgid "Edit State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:10 Template/StateCreated/view.ctp:13 -#: Template/StateUserRoles/index.ctp:16 Template/StateUsers/add.ctp:16 -#: Template/StateUsers/edit.ctp:22 Template/StateUsers/index.ctp:16 -#: Template/Transactions/add.ctp:16 Template/Transactions/edit.ctp:22 -#: Template/Transactions/index.ctp:16 Template/Transactions/view.ctp:19 -msgid "New State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:18 -msgid "State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:11 -msgid "Delete State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:24 Template/StateUserTransactions/view.ctp:30 -#: Template/StateUsers/view.ctp:53 Template/TransactionCreations/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:22 -#: Template/TransactionGroupCreates/view.ctp:24 -#: Template/TransactionSendCoins/view.ctp:24 -#: Template/TransactionSignatures/view.ctp:22 -msgid "Transaction" -msgstr "" - -#: Template/StateCreated/view.ctp:36 Template/Transactions/view.ctp:61 -msgid "Month" -msgstr "" - -#: Template/StateCreated/view.ctp:40 Template/Transactions/view.ctp:62 -msgid "Year" -msgstr "" - -#: Template/StateCreated/view.ctp:44 Template/Transactions/view.ctp:65 -msgid "Short Ident Hash" -msgstr "" - -#: Template/StateErrors/add.ctp:10 Template/StateErrors/edit.ctp:16 -#: Template/StateErrors/view.ctp:12 -msgid "List State Errors" -msgstr "" - -#: Template/StateErrors/add.ctp:13 Template/StateErrors/edit.ctp:19 -#: Template/StateErrors/index.ctp:13 Template/StateErrors/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:15 -#: Template/StateUserTransactions/edit.ctp:21 -#: Template/StateUserTransactions/index.ctp:15 -#: Template/StateUserTransactions/view.ctp:18 -#: Template/TransactionTypes/add.ctp:10 Template/TransactionTypes/edit.ctp:16 -#: Template/TransactionTypes/view.ctp:12 Template/Transactions/add.ctp:13 -#: Template/Transactions/edit.ctp:19 Template/Transactions/index.ctp:13 -#: Template/Transactions/view.ctp:16 -msgid "List Transaction Types" -msgstr "" - -#: Template/StateErrors/add.ctp:14 Template/StateErrors/edit.ctp:20 -#: Template/StateErrors/index.ctp:14 Template/StateErrors/view.ctp:17 -#: Template/StateUserTransactions/add.ctp:16 -#: Template/StateUserTransactions/edit.ctp:22 -#: Template/StateUserTransactions/index.ctp:16 -#: Template/StateUserTransactions/view.ctp:19 -#: Template/TransactionTypes/index.ctp:10 Template/TransactionTypes/view.ctp:13 -#: Template/Transactions/add.ctp:14 Template/Transactions/edit.ctp:20 -#: Template/Transactions/index.ctp:14 Template/Transactions/view.ctp:17 -msgid "New Transaction Type" -msgstr "" - -#: Template/StateErrors/add.ctp:20 -msgid "Add State Error" -msgstr "" - -#: Template/StateErrors/edit.ctp:26 Template/StateErrors/view.ctp:10 -msgid "Edit State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:10 Template/StateErrors/view.ctp:13 -msgid "New State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:18 -msgid "State Errors" -msgstr "" - -#: Template/StateErrors/show_for_user.ctp:9 -msgid "Fehlermeldungen" -msgstr "" - -#: Template/StateErrors/view.ctp:11 -msgid "Delete State Error" -msgstr "" - -#: Template/StateErrors/view.ctp:28 Template/StateUserTransactions/view.ctp:34 -#: Template/Transactions/view.ctp:42 -msgid "Transaction Type" -msgstr "" - -#: Template/StateErrors/view.ctp:41 -msgid "Message Json" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:11 -#: Template/StateGroupAddresses/edit.ctp:17 -#: Template/StateGroupAddresses/index.ctp:11 -#: Template/StateGroupAddresses/view.ctp:14 Template/StateGroups/add.ctp:10 -#: Template/StateGroups/edit.ctp:16 Template/StateGroups/view.ctp:12 -#: Template/StateUserRoles/index.ctp:11 Template/StateUsers/add.ctp:11 -#: Template/StateUsers/edit.ctp:17 Template/StateUsers/index.ctp:11 -#: Template/StateUsers/view.ctp:14 Template/TransactionGroupCreates/add.ctp:13 -#: Template/TransactionGroupCreates/edit.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:13 -#: Template/TransactionGroupCreates/view.ctp:16 -#: Template/Transactions/add.ctp:11 Template/Transactions/edit.ctp:17 -#: Template/Transactions/index.ctp:11 Template/Transactions/view.ctp:14 -msgid "List State Groups" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:12 -#: Template/StateGroupAddresses/edit.ctp:18 -#: Template/StateGroupAddresses/index.ctp:12 -#: Template/StateGroupAddresses/view.ctp:15 Template/StateGroups/index.ctp:10 -#: Template/StateGroups/view.ctp:13 Template/StateUserRoles/index.ctp:12 -#: Template/StateUsers/add.ctp:12 Template/StateUsers/edit.ctp:18 -#: Template/StateUsers/index.ctp:12 Template/StateUsers/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:14 -#: Template/TransactionGroupCreates/edit.ctp:20 -#: Template/TransactionGroupCreates/index.ctp:14 -#: Template/TransactionGroupCreates/view.ctp:17 -#: Template/Transactions/add.ctp:12 Template/Transactions/edit.ctp:18 -#: Template/Transactions/index.ctp:12 Template/Transactions/view.ctp:15 -msgid "New State Group" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:20 -msgid "Add State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/edit.ctp:26 -#: Template/StateGroupAddresses/view.ctp:10 -msgid "Edit State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:18 -msgid "State Group Addresses" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:25 -#: Template/TransactionGroupAddaddress/index.ctp:25 -msgid "user public key" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:11 -msgid "Delete State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:28 -msgid "Address Type" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:10 -#: Template/StateGroupRelationships/edit.ctp:16 -#: Template/StateGroupRelationships/view.ctp:12 -msgid "List State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:16 -msgid "Add State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/edit.ctp:22 -#: Template/StateGroupRelationships/view.ctp:10 -msgid "Edit State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:10 -#: Template/StateGroupRelationships/view.ctp:13 -msgid "New State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:14 -msgid "State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:11 -msgid "Delete State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:24 -msgid "State Group1 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:28 -msgid "State Group2 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:32 -msgid "State Relationship Id" -msgstr "" - -#: Template/StateGroups/add.ctp:15 Template/StateGroups/edit.ctp:21 -#: Template/StateGroups/index.ctp:15 Template/StateGroups/view.ctp:18 -#: Template/TransactionGroupCreates/add.ctp:10 -#: Template/TransactionGroupCreates/edit.ctp:16 -#: Template/TransactionGroupCreates/view.ctp:12 -#: Template/Transactions/add.ctp:23 Template/Transactions/edit.ctp:29 -#: Template/Transactions/index.ctp:23 Template/Transactions/view.ctp:26 -msgid "List Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/add.ctp:16 Template/StateGroups/edit.ctp:22 -#: Template/StateGroups/index.ctp:16 Template/StateGroups/view.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:10 -#: Template/TransactionGroupCreates/view.ctp:13 -#: Template/Transactions/add.ctp:24 Template/Transactions/edit.ctp:30 -#: Template/Transactions/index.ctp:24 Template/Transactions/view.ctp:27 -msgid "New Transaction Group Create" -msgstr "" - -#: Template/StateGroups/add.ctp:24 -msgid "Add State Group" -msgstr "" - -#: Template/StateGroups/edit.ctp:30 Template/StateGroups/view.ctp:10 -msgid "Edit State Group" -msgstr "" - -#: Template/StateGroups/index.ctp:22 -msgid "State Groups" -msgstr "" - -#: Template/StateGroups/view.ctp:11 -msgid "Delete State Group" -msgstr "" - -#: Template/StateGroups/view.ctp:36 -msgid "User Count" -msgstr "" - -#: Template/StateGroups/view.ctp:46 Template/StateGroups/view.ctp:74 -#: Template/StateGroups/view.ctp:102 Template/StateGroups/view.ctp:129 -#: Template/TransactionTypes/view.ctp:40 Template/Transactions/view.ctp:178 -msgid "State Group Id" -msgstr "" - -#: Template/StateGroups/view.ctp:68 -msgid "Related State Users" -msgstr "" - -#: Template/StateGroups/view.ctp:73 -msgid "Index Id" -msgstr "" - -#: Template/StateGroups/view.ctp:95 Template/Transactions/view.ctp:171 -msgid "Related Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/view.ctp:101 Template/Transactions/view.ctp:177 -msgid "Group Public Key" -msgstr "" - -#: Template/StateGroups/view.ctp:124 Template/TransactionTypes/view.ctp:35 -msgid "Related Transactions" -msgstr "" - -#: Template/StateGroups/view.ctp:130 Template/TransactionTypes/view.ctp:41 -msgid "Transaction Type Id" -msgstr "" - -#: Template/StateGroups/view.ctp:131 Template/TransactionTypes/view.ctp:42 -msgid "Tx Hash" -msgstr "" - -#: Template/StateGroups/view.ctp:132 Template/TransactionTypes/view.ctp:43 -#: Template/Transactions/view.ctp:50 -msgid "Received" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:10 -#: Template/StateRelationshipTypes/edit.ctp:16 -#: Template/StateRelationshipTypes/view.ctp:12 -msgid "List State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:16 -msgid "Add State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/edit.ctp:22 -#: Template/StateRelationshipTypes/view.ctp:10 -msgid "Edit State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:10 -#: Template/StateRelationshipTypes/view.ctp:13 -msgid "New State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:14 -msgid "State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/view.ctp:11 -msgid "Delete State Relationship Type" -msgstr "" - -#: Template/StateUserRoles/assign_role.ctp:9 -#: Template/StateUserRoles/assign_role.ctp:46 -#: Template/StateUserRoles/search.ctp:47 -msgid "Assign Role" -msgstr "" - -#: Template/StateUserRoles/index.ctp:17 Template/StateUsers/add.ctp:17 -#: Template/StateUsers/edit.ctp:23 Template/StateUsers/index.ctp:17 -#: Template/StateUsers/view.ctp:18 Template/TransactionCreations/add.ctp:10 -#: Template/TransactionCreations/edit.ctp:16 -#: Template/TransactionCreations/view.ctp:12 Template/Transactions/add.ctp:17 -#: Template/Transactions/edit.ctp:23 Template/Transactions/index.ctp:17 -#: Template/Transactions/view.ctp:20 -msgid "List Transaction Creations" -msgstr "" - -#: Template/StateUserRoles/index.ctp:18 Template/StateUsers/add.ctp:18 -#: Template/StateUsers/edit.ctp:24 Template/StateUsers/index.ctp:18 -#: Template/StateUsers/view.ctp:19 Template/TransactionCreations/index.ctp:10 -#: Template/TransactionCreations/view.ctp:13 Template/Transactions/add.ctp:18 -#: Template/Transactions/edit.ctp:24 Template/Transactions/index.ctp:18 -#: Template/Transactions/view.ctp:21 -msgid "New Transaction Creation" -msgstr "" - -#: Template/StateUserRoles/index.ctp:19 Template/StateUsers/add.ctp:19 -#: Template/StateUsers/edit.ctp:25 Template/StateUsers/index.ctp:19 -#: Template/StateUsers/view.ctp:20 Template/TransactionSendCoins/add.ctp:10 -#: Template/TransactionSendCoins/edit.ctp:16 -#: Template/TransactionSendCoins/view.ctp:12 Template/Transactions/add.ctp:25 -#: Template/Transactions/edit.ctp:31 Template/Transactions/index.ctp:25 -#: Template/Transactions/view.ctp:28 -msgid "List Transaction Send Coins" -msgstr "" - -#: Template/StateUserRoles/index.ctp:20 Template/StateUsers/add.ctp:20 -#: Template/StateUsers/edit.ctp:26 Template/StateUsers/index.ctp:20 -#: Template/StateUsers/view.ctp:21 Template/TransactionSendCoins/index.ctp:10 -#: Template/TransactionSendCoins/view.ctp:13 Template/Transactions/add.ctp:26 -#: Template/Transactions/edit.ctp:32 Template/Transactions/index.ctp:26 -#: Template/Transactions/view.ctp:29 -msgid "New Transaction Send Coin" -msgstr "" - -#: Template/StateUserRoles/index.ctp:24 Template/StateUserRoles/search.ctp:25 -#: Template/StateUsers/index.ctp:24 -msgid "State Users" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 Template/StateUsers/search.ctp:57 -msgid "Suchbegriff" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 Template/StateUsers/search.ctp:57 -msgid "Vorname/Nachname/E-Mail" -msgstr "" - -#: Template/StateUserRoles/search.ctp:20 Template/StateUsers/search.ctp:59 -#: Template/TransactionCreations/create_multi.ctp:35 -msgid "Suchen" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:10 -#: Template/StateUserTransactions/edit.ctp:16 -#: Template/StateUserTransactions/view.ctp:12 -msgid "List State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:22 -msgid "Add State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/edit.ctp:28 -#: Template/StateUserTransactions/view.ctp:10 -msgid "Edit State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:10 -#: Template/StateUserTransactions/view.ctp:13 -msgid "New State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:20 -msgid "State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/view.ctp:11 -msgid "Delete State User Transaction" -msgstr "" - -#: Template/StateUsers/add.ctp:26 -msgid "Add State User" -msgstr "" - -#: Template/StateUsers/edit.ctp:32 Template/StateUsers/view.ctp:10 -msgid "Edit State User" -msgstr "" - -#: Template/StateUsers/search.ctp:16 -msgid "Alle" -msgstr "" - -#: Template/StateUsers/search.ctp:21 -msgid "Konto nicht aktiviert" -msgstr "" - -#: Template/StateUsers/search.ctp:58 -msgid "Konto Status" -msgstr "" - -#: Template/StateUsers/view.ctp:11 -msgid "Delete State User" -msgstr "" - -#: Template/StateUsers/view.ctp:28 -msgid "State Balance" -msgstr "" - -#: Template/StateUsers/view.ctp:32 -msgid "Letztes Update" -msgstr "" - -#: Template/StateUsers/view.ctp:49 -msgid "Schöpfungen" -msgstr "" - -#: Template/StateUsers/view.ctp:54 Template/StateUsers/view.ctp:84 -#: Template/StateUsers/view.ctp:118 -msgid "Erhalten" -msgstr "" - -#: Template/StateUsers/view.ctp:55 -msgid "Verrechnungs-Datum" -msgstr "" - -#: Template/StateUsers/view.ctp:79 -msgid "Versendete Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:85 -msgid "Empfänger " -msgstr "" - -#: Template/StateUsers/view.ctp:88 -msgid "Betrag nach Senden" -msgstr "" - -#: Template/StateUsers/view.ctp:113 -msgid "Empfangende Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:119 -msgid "Sender" -msgstr "" - -#: Template/TransactionCreations/add.ctp:20 -msgid "Add Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/create.ctp:17 -#: Template/TransactionCreations/create_multi.ctp:17 -msgid "Schöpfungstransaktion" -msgstr "" - -#: Template/TransactionCreations/create.ctp:28 -#: Template/TransactionCreations/create_multi.ctp:125 -msgid "Transaktion(en) abschließen" -msgstr "" - -#: Template/TransactionCreations/create.ctp:29 -#: Template/TransactionCreations/create_multi.ctp:126 -#: Template/TransactionSendCoins/create.ctp:24 -msgid "Weitere Transaktion erstellen" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:34 -msgid "Suche" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:38 -msgid "Memo" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:39 -#: Template/TransactionSendCoins/create.ctp:22 -#: Template/TransactionSendCoins/create_raw.ctp:33 -msgid "Betrag in GDD" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:46 -msgid "Zieldatum" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:81 -msgid "Für benutzerdefinierten Betrag" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:189 -msgid "Alle Transaktionen abgeschlossen!" -msgstr "" - -#: Template/TransactionCreations/edit.ctp:26 -#: Template/TransactionCreations/view.ctp:10 -msgid "Edit Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/index.ctp:18 -msgid "Transaction Creations" -msgstr "" - -#: Template/TransactionCreations/view.ctp:11 -msgid "Delete Transaction Creation" -msgstr "" - -#: Template/TransactionGroupAddaddress/add.ctp:20 -msgid "Add Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/edit.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:10 -msgid "Edit Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/index.ctp:18 -msgid "Transaction Group Addaddress" -msgstr "" - -#: Template/TransactionGroupAddaddress/view.ctp:11 -msgid "Delete Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:10 -#: Template/TransactionGroupAllowtrades/edit.ctp:16 -#: Template/TransactionGroupAllowtrades/view.ctp:12 -#: Template/Transactions/add.ctp:21 Template/Transactions/edit.ctp:27 -#: Template/Transactions/index.ctp:21 Template/Transactions/view.ctp:24 -msgid "List Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:18 -msgid "Add Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/edit.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:10 -msgid "Edit Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:10 -#: Template/TransactionGroupAllowtrades/view.ctp:13 -#: Template/Transactions/add.ctp:22 Template/Transactions/edit.ctp:28 -#: Template/Transactions/index.ctp:22 Template/Transactions/view.ctp:25 -msgid "New Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:16 -msgid "Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:11 -msgid "Delete Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:34 -#: Template/Transactions/view.ctp:151 -msgid "Allow" -msgstr "" - -#: Template/TransactionGroupCreates/add.ctp:20 -msgid "Add Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/edit.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:10 -msgid "Edit Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/index.ctp:18 -msgid "Transaction Group Creates" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:11 -msgid "Delete Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:28 -#: Template/Transactions/view.ctp:38 -msgid "State Group" -msgstr "" - -#: Template/TransactionSendCoins/add.ctp:20 -msgid "Add Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:19 -msgid "Empfänger" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:20 -msgid "Community Alias" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:23 -#: Template/TransactionSendCoins/create_raw.ctp:34 -msgid "Transaktion abschließen" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:29 -msgid "Sender Private Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:30 -msgid "Sender Public Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:31 -msgid "Empfänger Public Key" -msgstr "" - -#: Template/TransactionSendCoins/edit.ctp:26 -#: Template/TransactionSendCoins/view.ctp:10 -msgid "Edit Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/index.ctp:18 -msgid "Transaction Send Coins" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:11 -msgid "Delete Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:40 Template/Transactions/view.ctp:210 -msgid "Sender Final Balance" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:10 -#: Template/TransactionSignatures/edit.ctp:16 -#: Template/TransactionSignatures/view.ctp:12 Template/Transactions/add.ctp:27 -#: Template/Transactions/edit.ctp:33 Template/Transactions/index.ctp:27 -#: Template/Transactions/view.ctp:30 -msgid "List Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:18 -msgid "Add Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/edit.ctp:24 -#: Template/TransactionSignatures/view.ctp:10 -msgid "Edit Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:10 -#: Template/TransactionSignatures/view.ctp:13 Template/Transactions/add.ctp:28 -#: Template/Transactions/edit.ctp:34 Template/Transactions/index.ctp:28 -#: Template/Transactions/view.ctp:31 -msgid "New Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:16 -msgid "Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/view.ctp:11 -msgid "Delete Transaction Signature" -msgstr "" - -#: Template/TransactionTypes/add.ctp:18 -msgid "Add Transaction Type" -msgstr "" - -#: Template/TransactionTypes/edit.ctp:24 Template/TransactionTypes/view.ctp:10 -msgid "Edit Transaction Type" -msgstr "" - -#: Template/TransactionTypes/index.ctp:16 -msgid "Transaction Types" -msgstr "" - -#: Template/TransactionTypes/view.ctp:11 -msgid "Delete Transaction Type" -msgstr "" - -#: Template/Transactions/add.ctp:34 -msgid "Add Transaction" -msgstr "" - -#: Template/Transactions/edit.ctp:40 Template/Transactions/view.ctp:10 -msgid "Edit Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:26 -msgid "Creation Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:41 -msgid "Transfer Transaction" -msgstr "" - -#: Template/Transactions/send_to_node.ctp:8 -msgid "Transaktionen an Gradido-Node senden" -msgstr "" - -#: Template/Transactions/synchronize_with_state_user_transactions.ctp:44 -msgid "Synchronize" -msgstr "" - -#: Template/Transactions/view.ctp:11 -msgid "Delete Transaction" -msgstr "" - -#: Template/Transactions/view.ctp:55 -msgid "Related State Created" -msgstr "" - -#: Template/Transactions/view.ctp:88 -msgid "Related Transaction Creations" -msgstr "" - -#: Template/Transactions/view.ctp:96 -msgid "Ident Hash" -msgstr "" - -#: Template/Transactions/view.ctp:144 -msgid "Related Transaction Group Allowtrades" -msgstr "" - -#: Template/Transactions/view.ctp:200 -msgid "Related Transaction Send Coins" -msgstr "" - -#: Template/Transactions/view.ctp:207 -msgid "Receiver Public Key" -msgstr "" - -#: Template/Transactions/view.ctp:208 -msgid "Receiver User Id" -msgstr "" - -#: Template/Transactions/view.ctp:233 -msgid "Related Transaction Signatures" -msgstr "" - -#: Template/Transactions/view.ctp:239 -msgid "Signature" -msgstr "" - -#: Template/Transactions/view.ctp:240 -msgid "Pubkey" -msgstr "" - -#: Template/Users/add.ctp:10 Template/Users/edit.ctp:16 -#: Template/Users/view.ctp:12 -msgid "List Users" -msgstr "" - -#: Template/Users/add.ctp:16 -msgid "Add User" -msgstr "" - -#: Template/Users/edit.ctp:22 Template/Users/view.ctp:10 -msgid "Edit User" -msgstr "" - -#: Template/Users/index.ctp:10 Template/Users/view.ctp:13 -msgid "New User" -msgstr "" - -#: Template/Users/index.ctp:14 -msgid "Users" -msgstr "" - -#: Template/Users/statistics.ctp:9 -msgid "Benutzer Statistiken" -msgstr "" - -#: Template/Users/statistics.ctp:39 -msgid "Alle Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:56 -msgid "Anmeldungen im Vergleich zum letzten Monat, 0% = gleiche Anzahl" -msgstr "" - -#: Template/Users/statistics.ctp:61 -msgid "Letzte Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:66 -msgid "Erstellt" -msgstr "" - -#: Template/Users/statistics.ctp:79 -msgid "Anmeldungen detailliert" -msgstr "" - -#: Template/Users/statistics.ctp:82 -msgid "Jahr" -msgstr "" - -#: Template/Users/statistics.ctp:83 -msgid "Monat" -msgstr "" - -#: Template/Users/statistics.ctp:84 -msgid "Anzahl Anmeldungen" -msgstr "" - -#: Template/Users/view.ctp:11 -msgid "Delete User" -msgstr "" - -#: Template/Users/view.ctp:24 -msgid "First Name" -msgstr "" - -#: Template/Users/view.ctp:28 -msgid "Last Name" -msgstr "" - -#: Template/Users/view.ctp:32 -msgid "Language" -msgstr "" - -#: Template/Users/view.ctp:48 -msgid "Email Checked" -msgstr "" diff --git a/community_server/src/Locale/default.pot b/community_server/src/Locale/default.pot deleted file mode 100644 index 0c9ada315..000000000 --- a/community_server/src/Locale/default.pot +++ /dev/null @@ -1,3566 +0,0 @@ -# LANGUAGE translation of CakePHP Application -# Copyright YEAR NAME -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2021-08-11 11:38+0000\n" -"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n" -"Last-Translator: NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" - -#: Controller/AddressTypesController.php:54 -#: Controller/AddressTypesController.php:78 -msgid "The address type has been saved." -msgstr "" - -#: Controller/AddressTypesController.php:58 -#: Controller/AddressTypesController.php:82 -msgid "The address type could not be saved. Please, try again." -msgstr "" - -#: Controller/AddressTypesController.php:99 -msgid "The address type has been deleted." -msgstr "" - -#: Controller/AddressTypesController.php:101 -msgid "The address type could not be deleted. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:57 -#: Controller/AdminErrorsController.php:82 -msgid "The admin error has been saved." -msgstr "" - -#: Controller/AdminErrorsController.php:61 -#: Controller/AdminErrorsController.php:86 -msgid "The admin error could not be saved. Please, try again." -msgstr "" - -#: Controller/AdminErrorsController.php:104 -msgid "The admin error has been deleted." -msgstr "" - -#: Controller/AdminErrorsController.php:106 -msgid "The admin error could not be deleted. Please, try again." -msgstr "" - -#: Controller/AppController.php:262 -msgid "error updating state user " -msgstr "" - -#: Controller/AppController.php:276 -msgid "error saving state user " -msgstr "" - -#: Controller/AppController.php:286 -msgid "no pubkey" -msgstr "" - -#: Controller/AppController.php:295 -msgid "invalid session" -msgstr "" - -#: Controller/AppController.php:297 -msgid "Konto ist nicht aktiviert!" -msgstr "" - -#: Controller/AppController.php:311 -#: Controller/StateUsersController.php:103 -msgid "error http request: " -msgstr "" - -#: Controller/AppController.php:358 -msgid "(Leere Message)" -msgstr "" - -#: Controller/AppController.php:363 -msgid "(Leere Details)" -msgstr "" - -#: Controller/AppController.php:367 -msgid "Serious error, couldn't save to db, please write the admin: " -msgstr "" - -#: Controller/BlockchainTypesController.php:54 -#: Controller/BlockchainTypesController.php:78 -msgid "The blockchain type has been saved." -msgstr "" - -#: Controller/BlockchainTypesController.php:58 -#: Controller/BlockchainTypesController.php:82 -msgid "The blockchain type could not be saved. Please, try again." -msgstr "" - -#: Controller/BlockchainTypesController.php:99 -msgid "The blockchain type has been deleted." -msgstr "" - -#: Controller/BlockchainTypesController.php:101 -msgid "The blockchain type could not be deleted. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:54 -#: Controller/CommunityProfilesController.php:78 -msgid "The community profile has been saved." -msgstr "" - -#: Controller/CommunityProfilesController.php:58 -#: Controller/CommunityProfilesController.php:82 -msgid "The community profile could not be saved. Please, try again." -msgstr "" - -#: Controller/CommunityProfilesController.php:99 -msgid "The community profile has been deleted." -msgstr "" - -#: Controller/CommunityProfilesController.php:101 -msgid "The community profile could not be deleted. Please, try again." -msgstr "" - -#: Controller/DashboardController.php:29 -#: Controller/ProfileController.php:28 -#: Controller/StateBalancesController.php:52 -#: Controller/StateBalancesController.php:202 -#: Controller/StateErrorsController.php:26 -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 -#: Controller/TransactionCreationsController.php:42 -#: Controller/TransactionSendCoinsController.php:44 -#: Controller/UsersController.php:26 -#: Template/Element/navi.ctp:33 -msgid "Startseite" -msgstr "" - -#: Controller/ElopageBuysController.php:112 -#: Controller/ElopageBuysController.php:137 -msgid "The elopage buy has been saved." -msgstr "" - -#: Controller/ElopageBuysController.php:116 -#: Controller/ElopageBuysController.php:141 -msgid "The elopage buy could not be saved. Please, try again." -msgstr "" - -#: Controller/ElopageBuysController.php:158 -msgid "The elopage buy has been deleted." -msgstr "" - -#: Controller/ElopageBuysController.php:160 -msgid "The elopage buy could not be deleted. Please, try again." -msgstr "" - -#: Controller/JsonRequestHandlerController.php:366 -msgid "Gradido Transaktion fehlgeschlagen!" -msgstr "" - -#: Controller/OperatorTypesController.php:54 -#: Controller/OperatorTypesController.php:78 -msgid "The operator type has been saved." -msgstr "" - -#: Controller/OperatorTypesController.php:58 -#: Controller/OperatorTypesController.php:82 -msgid "The operator type could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorTypesController.php:99 -msgid "The operator type has been deleted." -msgstr "" - -#: Controller/OperatorTypesController.php:101 -msgid "The operator type could not be deleted. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:182 -#: Controller/OperatorsController.php:207 -msgid "The operator has been saved." -msgstr "" - -#: Controller/OperatorsController.php:186 -#: Controller/OperatorsController.php:211 -msgid "The operator could not be saved. Please, try again." -msgstr "" - -#: Controller/OperatorsController.php:229 -msgid "The operator has been deleted." -msgstr "" - -#: Controller/OperatorsController.php:231 -msgid "The operator could not be deleted. Please, try again." -msgstr "" - -#: Controller/ProfileController.php:29 -#: Template/Element/user_menu.ctp:15 -#: Template/Profile/index.ctp:19 -msgid "Mein Profil" -msgstr "" - -#: Controller/ProfileController.php:108 -msgid "Dein Profil wurde aktualisiert!" -msgstr "" - -#: Controller/ProfileController.php:111 -msgid "Non-recoverable database problem - state_user doesn't exist or not unique!" -msgstr "" - -#: Controller/ProfileController.php:198 -#: Controller/StateUserRolesController.php:117 -#: Controller/StateUsersController.php:291 -#: Controller/TransactionCreationsController.php:183 -msgid "Something was invalid, please try again!" -msgstr "" - -#: Controller/RolesController.php:56 -#: Controller/RolesController.php:80 -msgid "The role has been saved." -msgstr "" - -#: Controller/RolesController.php:60 -#: Controller/RolesController.php:84 -msgid "The role could not be saved. Please, try again." -msgstr "" - -#: Controller/RolesController.php:101 -msgid "The role has been deleted." -msgstr "" - -#: Controller/RolesController.php:103 -msgid "The role could not be deleted. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:42 -msgid "Invalid username or password, try again" -msgstr "" - -#: Controller/ServerUsersController.php:79 -#: Controller/ServerUsersController.php:103 -msgid "The server user has been saved." -msgstr "" - -#: Controller/ServerUsersController.php:83 -#: Controller/ServerUsersController.php:107 -msgid "The server user could not be saved. Please, try again." -msgstr "" - -#: Controller/ServerUsersController.php:124 -msgid "The server user has been deleted." -msgstr "" - -#: Controller/ServerUsersController.php:126 -msgid "The server user could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:53 -#: Template/Dashboard/index.ctp:30 -#: Template/Element/navi.ctp:22 -#: Template/StateBalances/overview.ctp:8 -msgid "Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:203 -#: Template/StateBalances/overview_gdt.ctp:20 -msgid "GDT Kontoübersicht" -msgstr "" - -#: Controller/StateBalancesController.php:252 -msgid "Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!" -msgstr "" - -#: Controller/StateBalancesController.php:351 -#: Controller/StateBalancesController.php:376 -msgid "The state balance has been saved." -msgstr "" - -#: Controller/StateBalancesController.php:355 -#: Controller/StateBalancesController.php:380 -msgid "The state balance could not be saved. Please, try again." -msgstr "" - -#: Controller/StateBalancesController.php:398 -msgid "The state balance has been deleted." -msgstr "" - -#: Controller/StateBalancesController.php:400 -msgid "The state balance could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:57 -#: Controller/StateCreatedController.php:83 -msgid "The state created has been saved." -msgstr "" - -#: Controller/StateCreatedController.php:61 -#: Controller/StateCreatedController.php:87 -msgid "The state created could not be saved. Please, try again." -msgstr "" - -#: Controller/StateCreatedController.php:106 -msgid "The state created has been deleted." -msgstr "" - -#: Controller/StateCreatedController.php:108 -msgid "The state created could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:27 -#: Template/Dashboard/index.ctp:79 -#: Template/Dashboard/server_index.ctp:31 -#: Template/Element/navi_header.ctp:33 -#: Template/Element/navi_notify.ctp:32 -msgid "Fehler" -msgstr "" - -#: Controller/StateErrorsController.php:75 -msgid "Error belongs to another User, cannot delete" -msgstr "" - -#: Controller/StateErrorsController.php:78 -#: Controller/StateErrorsController.php:166 -msgid "The state error has been deleted." -msgstr "" - -#: Controller/StateErrorsController.php:80 -#: Controller/StateErrorsController.php:168 -msgid "The state error could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateErrorsController.php:117 -#: Controller/StateErrorsController.php:143 -msgid "The state error has been saved." -msgstr "" - -#: Controller/StateErrorsController.php:121 -#: Controller/StateErrorsController.php:147 -msgid "The state error could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:57 -#: Controller/StateGroupAddressesController.php:83 -msgid "The state group address has been saved." -msgstr "" - -#: Controller/StateGroupAddressesController.php:61 -#: Controller/StateGroupAddressesController.php:87 -msgid "The state group address could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupAddressesController.php:106 -msgid "The state group address has been deleted." -msgstr "" - -#: Controller/StateGroupAddressesController.php:108 -msgid "The state group address could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:57 -#: Controller/StateGroupRelationshipsController.php:84 -msgid "The state group relationship has been saved." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:61 -#: Controller/StateGroupRelationshipsController.php:88 -msgid "The state group relationship could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:108 -msgid "The state group relationship has been deleted." -msgstr "" - -#: Controller/StateGroupRelationshipsController.php:110 -msgid "The state group relationship could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:57 -#: Controller/StateGroupsController.php:82 -msgid "The state group has been saved." -msgstr "" - -#: Controller/StateGroupsController.php:61 -#: Controller/StateGroupsController.php:86 -msgid "The state group could not be saved. Please, try again." -msgstr "" - -#: Controller/StateGroupsController.php:104 -msgid "The state group has been deleted." -msgstr "" - -#: Controller/StateGroupsController.php:106 -msgid "The state group could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:54 -#: Controller/StateRelationshipTypesController.php:78 -msgid "The state relationship type has been saved." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:58 -#: Controller/StateRelationshipTypesController.php:82 -msgid "The state relationship type could not be saved. Please, try again." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:99 -msgid "The state relationship type has been deleted." -msgstr "" - -#: Controller/StateRelationshipTypesController.php:101 -msgid "The state relationship type could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUserRolesController.php:42 -#: Controller/StateUsersController.php:54 -#: Template/StateUserRoles/search.ctp:9 -#: Template/StateUsers/search.ctp:9 -msgid "Benutzer suchen" -msgstr "" - -#: Controller/StateUserRolesController.php:149 -msgid "Role has been assigned to User." -msgstr "" - -#: Controller/StateUserTransactionsController.php:233 -#: Controller/StateUserTransactionsController.php:260 -msgid "The state user transaction has been saved." -msgstr "" - -#: Controller/StateUserTransactionsController.php:237 -#: Controller/StateUserTransactionsController.php:264 -msgid "The state user transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUserTransactionsController.php:284 -msgid "The state user transaction has been deleted." -msgstr "" - -#: Controller/StateUserTransactionsController.php:286 -msgid "The state user transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:21 -msgid "account created" -msgstr "" - -#: Controller/StateUsersController.php:22 -msgid "account not on login-server" -msgstr "" - -#: Controller/StateUsersController.php:23 -msgid "email activated" -msgstr "" - -#: Controller/StateUsersController.php:24 -msgid "account copied to community" -msgstr "" - -#: Controller/StateUsersController.php:25 -msgid "email not activated" -msgstr "" - -#: Controller/StateUsersController.php:26 -msgid "account multiple times on login-server" -msgstr "" - -#: Controller/StateUsersController.php:27 -msgid "account not on community server" -msgstr "" - -#: Controller/StateUsersController.php:28 -msgid "no keys" -msgstr "" - -#: Controller/StateUsersController.php:560 -#: Controller/StateUsersController.php:586 -msgid "The state user has been saved." -msgstr "" - -#: Controller/StateUsersController.php:564 -#: Controller/StateUsersController.php:590 -msgid "The state user could not be saved. Please, try again." -msgstr "" - -#: Controller/StateUsersController.php:609 -msgid "The state user has been deleted." -msgstr "" - -#: Controller/StateUsersController.php:611 -msgid "The state user could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:42 -msgid "Gradido schöpfen" -msgstr "" - -#: Controller/TransactionCreationsController.php:149 -#: Controller/TransactionCreationsController.php:385 -#: Controller/TransactionCreationsController.php:408 -msgid "Error by requesting LoginServer, please try again" -msgstr "" - -#: Controller/TransactionCreationsController.php:151 -#: Controller/TransactionCreationsController.php:410 -msgid "Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:161 -msgid "Login Server Error, please wait for the admin to fix it" -msgstr "" - -#: Controller/TransactionCreationsController.php:174 -#: Controller/TransactionCreationsController.php:491 -#: Controller/TransactionSendCoinsController.php:204 -msgid "Transaction submitted for review." -msgstr "" - -#: Controller/TransactionCreationsController.php:179 -msgid "Building transaction failed" -msgstr "" - -#: Controller/TransactionCreationsController.php:342 -msgid "No user selected" -msgstr "" - -#: Controller/TransactionCreationsController.php:442 -#: Controller/TransactionSendCoinsController.php:231 -msgid "Fehler mit der Session, bitte logge dich erneut ein!" -msgstr "" - -#: Controller/TransactionCreationsController.php:447 -msgid "Fehler, Benutzer gehört zu einer anderen Gruppe!" -msgstr "" - -#: Controller/TransactionCreationsController.php:452 -#: Controller/TransactionSendCoinsController.php:246 -msgid "Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?" -msgstr "" - -#: Controller/TransactionCreationsController.php:456 -#: Controller/TransactionSendCoinsController.php:250 -msgid "Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden." -msgstr "" - -#: Controller/TransactionCreationsController.php:460 -msgid "Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein." -msgstr "" - -#: Controller/TransactionCreationsController.php:464 -#: Controller/TransactionSendCoinsController.php:254 -msgid "Unbehandelter Fehler: " -msgstr "" - -#: Controller/TransactionCreationsController.php:625 -#: Controller/TransactionCreationsController.php:651 -msgid "The transaction creation has been saved." -msgstr "" - -#: Controller/TransactionCreationsController.php:629 -#: Controller/TransactionCreationsController.php:655 -msgid "The transaction creation could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionCreationsController.php:674 -msgid "The transaction creation has been deleted." -msgstr "" - -#: Controller/TransactionCreationsController.php:676 -msgid "The transaction creation could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:57 -#: Controller/TransactionGroupAddaddressController.php:83 -msgid "The transaction group addaddres has been saved." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:61 -#: Controller/TransactionGroupAddaddressController.php:87 -msgid "The transaction group addaddres could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:106 -msgid "The transaction group addaddres has been deleted." -msgstr "" - -#: Controller/TransactionGroupAddaddressController.php:108 -msgid "The transaction group addaddres could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:57 -#: Controller/TransactionGroupAllowtradesController.php:83 -msgid "The transaction group allowtrade has been saved." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:61 -#: Controller/TransactionGroupAllowtradesController.php:87 -msgid "The transaction group allowtrade could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:106 -msgid "The transaction group allowtrade has been deleted." -msgstr "" - -#: Controller/TransactionGroupAllowtradesController.php:108 -msgid "The transaction group allowtrade could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:57 -#: Controller/TransactionGroupCreatesController.php:83 -msgid "The transaction group create has been saved." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:61 -#: Controller/TransactionGroupCreatesController.php:87 -msgid "The transaction group create could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:106 -msgid "The transaction group create has been deleted." -msgstr "" - -#: Controller/TransactionGroupCreatesController.php:108 -msgid "The transaction group create could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:45 -#: Template/Dashboard/index.ctp:38 -#: Template/Element/navi.ctp:34 -#: Template/StateUsers/view.ctp:83 -#: Template/StateUsers/view.ctp:117 -#: Template/TransactionSendCoins/create.ctp:9 -#: Template/TransactionSendCoins/create_raw.ctp:9 -msgid "Überweisung" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:92 -#: Controller/TransactionSendCoinsController.php:119 -msgid "The transaction send coin has been saved." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:96 -#: Controller/TransactionSendCoinsController.php:123 -msgid "The transaction send coin could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:173 -msgid "Du hast nicht genug Gradidos!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:179 -msgid "Du kannst dir selbst keine Gradidos senden!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:236 -msgid "Empfänger befindet sich nicht in Zielgruppe!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:241 -msgid "Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:428 -msgid "Error validating transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:431 -msgid "Error saving transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:433 -msgid "Gradidos erfolgreich überwiesen!" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:437 -msgid "Error building transaction" -msgstr "" - -#: Controller/TransactionSendCoinsController.php:462 -msgid "The transaction send coin has been deleted." -msgstr "" - -#: Controller/TransactionSendCoinsController.php:464 -msgid "The transaction send coin could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:57 -#: Controller/TransactionSignaturesController.php:82 -msgid "The transaction signature has been saved." -msgstr "" - -#: Controller/TransactionSignaturesController.php:61 -#: Controller/TransactionSignaturesController.php:86 -msgid "The transaction signature could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionSignaturesController.php:104 -msgid "The transaction signature has been deleted." -msgstr "" - -#: Controller/TransactionSignaturesController.php:106 -msgid "The transaction signature could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:54 -#: Controller/TransactionTypesController.php:78 -msgid "The transaction type has been saved." -msgstr "" - -#: Controller/TransactionTypesController.php:58 -#: Controller/TransactionTypesController.php:82 -msgid "The transaction type could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionTypesController.php:99 -msgid "The transaction type has been deleted." -msgstr "" - -#: Controller/TransactionTypesController.php:101 -msgid "The transaction type could not be deleted. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:252 -msgid "No valid data given, please try again." -msgstr "" - -#: Controller/TransactionsController.php:289 -msgid "error retriving last saved transaction from gradido node." -msgstr "" - -#: Controller/TransactionsController.php:391 -#: Controller/TransactionsController.php:420 -msgid "The transaction has been saved." -msgstr "" - -#: Controller/TransactionsController.php:394 -msgid "Error by saving: " -msgstr "" - -#: Controller/TransactionsController.php:397 -#: Controller/TransactionsController.php:424 -msgid "The transaction could not be saved. Please, try again." -msgstr "" - -#: Controller/TransactionsController.php:443 -msgid "The transaction has been deleted." -msgstr "" - -#: Controller/TransactionsController.php:445 -msgid "The transaction could not be deleted. Please, try again." -msgstr "" - -#: Controller/UsersController.php:26 -msgid "Benutzerstatistiken" -msgstr "" - -#: Controller/UsersController.php:115 -#: Controller/UsersController.php:139 -msgid "The user has been saved." -msgstr "" - -#: Controller/UsersController.php:119 -#: Controller/UsersController.php:143 -msgid "The user could not be saved. Please, try again." -msgstr "" - -#: Controller/UsersController.php:160 -msgid "The user has been deleted." -msgstr "" - -#: Controller/UsersController.php:162 -msgid "The user could not be deleted. Please, try again." -msgstr "" - -#: Form/CreationForm.php:44 -#: Form/ProfileForm.php:39 -#: Form/TransferForm.php:42 -#: Form/TransferForm.php:53 -#: Form/TransferRawForm.php:35 -msgid "No HTML Tags like > or < please." -msgstr "" - -#: Form/CreationForm.php:56 -msgid "Please give a valid number with maximal 2 decimal places" -msgstr "" - -#: Form/ProfileForm.php:26 -msgid "The first name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:30 -msgid "The last name should contain max 255 characters" -msgstr "" - -#: Form/ProfileForm.php:34 -msgid "The description should contain max 2000 characters" -msgstr "" - -#: Form/TransferForm.php:36 -msgid "A valid email address is required" -msgstr "" - -#: Form/TransferForm.php:46 -#: Form/TransferRawForm.php:29 -msgid "The memo should contain max 150 character" -msgstr "" - -#: Form/TransferForm.php:65 -#: Form/TransferRawForm.php:56 -msgid "Please give a valid positive number with maximal 2 decimal places" -msgstr "" - -#: Form/UserSearchForm.php:34 -msgid "The search text should contain max 50 character" -msgstr "" - -#: Form/UserSearchForm.php:41 -msgid "No HTML Tags like < or > please." -msgstr "" - -#: Model/Table/ServerUsersTable.php:58 -msgid "Please give a username" -msgstr "" - -#: Model/Table/ServerUsersTable.php:64 -msgid "Please give a password" -msgstr "" - -#: Model/Table/ServerUsersTable.php:69 -msgid "Please give a email" -msgstr "" - -#: Model/Transactions/TransactionCreation.php:209 -msgid "Gradido Schöpfung erhalten" -msgstr "" - -#: Model/Transactions/TransactionTransfer.php:210 -msgid "Gradidos erhalten" -msgstr "" - -#: Template/AddressTypes/add.ctp:9 -#: Template/AddressTypes/edit.ctp:9 -#: Template/AddressTypes/index.ctp:9 -#: Template/AddressTypes/index.ctp:25 -#: Template/AddressTypes/view.ctp:9 -#: Template/AddressTypes/view.ctp:45 -#: Template/AddressTypes/view.ctp:73 -#: Template/AdminErrors/add.ctp:9 -#: Template/AdminErrors/edit.ctp:9 -#: Template/AdminErrors/index.ctp:9 -#: Template/AdminErrors/index.ctp:26 -#: Template/AdminErrors/view.ctp:9 -#: Template/BlockchainTypes/add.ctp:9 -#: Template/BlockchainTypes/edit.ctp:9 -#: Template/BlockchainTypes/index.ctp:9 -#: Template/BlockchainTypes/index.ctp:22 -#: Template/BlockchainTypes/view.ctp:9 -#: Template/CommunityProfiles/add.ctp:9 -#: Template/CommunityProfiles/edit.ctp:9 -#: Template/CommunityProfiles/index.ctp:9 -#: Template/CommunityProfiles/index.ctp:21 -#: Template/CommunityProfiles/view.ctp:9 -#: Template/ElopageBuys/add.ctp:9 -#: Template/ElopageBuys/edit.ctp:9 -#: Template/ElopageBuys/index.ctp:9 -#: Template/ElopageBuys/index.ctp:30 -#: Template/ElopageBuys/view.ctp:9 -#: Template/OperatorTypes/add.ctp:9 -#: Template/OperatorTypes/edit.ctp:9 -#: Template/OperatorTypes/index.ctp:9 -#: Template/OperatorTypes/index.ctp:23 -#: Template/OperatorTypes/view.ctp:9 -#: Template/OperatorTypes/view.ctp:43 -#: Template/Operators/add.ctp:9 -#: Template/Operators/edit.ctp:9 -#: Template/Operators/index.ctp:9 -#: Template/Operators/index.ctp:24 -#: Template/Operators/view.ctp:9 -#: Template/Roles/add.ctp:9 -#: Template/Roles/edit.ctp:9 -#: Template/Roles/index.ctp:9 -#: Template/Roles/index.ctp:20 -#: Template/Roles/view.ctp:9 -#: Template/ServerUsers/add.ctp:9 -#: Template/ServerUsers/edit.ctp:9 -#: Template/ServerUsers/index.ctp:9 -#: Template/ServerUsers/index.ctp:26 -#: Template/ServerUsers/view.ctp:9 -#: Template/StateBalances/add.ctp:9 -#: Template/StateBalances/edit.ctp:9 -#: Template/StateBalances/index.ctp:9 -#: Template/StateBalances/index.ctp:25 -#: Template/StateBalances/view.ctp:9 -#: Template/StateCreated/add.ctp:9 -#: Template/StateCreated/edit.ctp:9 -#: Template/StateCreated/index.ctp:9 -#: Template/StateCreated/index.ctp:29 -#: Template/StateCreated/view.ctp:9 -#: Template/StateErrors/add.ctp:9 -#: Template/StateErrors/edit.ctp:9 -#: Template/StateErrors/index.ctp:9 -#: Template/StateErrors/index.ctp:26 -#: Template/StateErrors/view.ctp:9 -#: Template/StateGroupAddresses/add.ctp:9 -#: Template/StateGroupAddresses/edit.ctp:9 -#: Template/StateGroupAddresses/index.ctp:9 -#: Template/StateGroupAddresses/index.ctp:26 -#: Template/StateGroupAddresses/view.ctp:9 -#: Template/StateGroupRelationships/add.ctp:9 -#: Template/StateGroupRelationships/edit.ctp:9 -#: Template/StateGroupRelationships/index.ctp:9 -#: Template/StateGroupRelationships/index.ctp:22 -#: Template/StateGroupRelationships/view.ctp:9 -#: Template/StateGroups/add.ctp:9 -#: Template/StateGroups/edit.ctp:9 -#: Template/StateGroups/index.ctp:9 -#: Template/StateGroups/index.ctp:29 -#: Template/StateGroups/view.ctp:9 -#: Template/StateGroups/view.ctp:49 -#: Template/StateGroups/view.ctp:76 -#: Template/StateGroups/view.ctp:104 -#: Template/StateGroups/view.ctp:133 -#: Template/StateRelationshipTypes/add.ctp:9 -#: Template/StateRelationshipTypes/edit.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:9 -#: Template/StateRelationshipTypes/index.ctp:21 -#: Template/StateRelationshipTypes/view.ctp:9 -#: Template/StateUserRoles/index.ctp:9 -#: Template/StateUserRoles/index.ctp:36 -#: Template/StateUserRoles/search.ctp:33 -#: Template/StateUserTransactions/add.ctp:9 -#: Template/StateUserTransactions/edit.ctp:9 -#: Template/StateUserTransactions/index.ctp:9 -#: Template/StateUserTransactions/index.ctp:28 -#: Template/StateUserTransactions/view.ctp:9 -#: Template/StateUsers/add.ctp:9 -#: Template/StateUsers/edit.ctp:9 -#: Template/StateUsers/index.ctp:9 -#: Template/StateUsers/index.ctp:36 -#: Template/StateUsers/view.ctp:9 -#: Template/StateUsers/view.ctp:34 -#: Template/StateUsers/view.ctp:58 -#: Template/StateUsers/view.ctp:89 -#: Template/StateUsers/view.ctp:122 -#: Template/TransactionCreations/add.ctp:9 -#: Template/TransactionCreations/edit.ctp:9 -#: Template/TransactionCreations/index.ctp:9 -#: Template/TransactionCreations/index.ctp:28 -#: Template/TransactionCreations/view.ctp:9 -#: Template/TransactionGroupAddaddress/add.ctp:9 -#: Template/TransactionGroupAddaddress/edit.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:9 -#: Template/TransactionGroupAddaddress/index.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:9 -#: Template/TransactionGroupAllowtrades/add.ctp:9 -#: Template/TransactionGroupAllowtrades/edit.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:9 -#: Template/TransactionGroupAllowtrades/index.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:9 -#: Template/TransactionGroupCreates/add.ctp:9 -#: Template/TransactionGroupCreates/edit.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:9 -#: Template/TransactionGroupCreates/index.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:9 -#: Template/TransactionSendCoins/add.ctp:9 -#: Template/TransactionSendCoins/edit.ctp:9 -#: Template/TransactionSendCoins/index.ctp:9 -#: Template/TransactionSendCoins/index.ctp:28 -#: Template/TransactionSendCoins/view.ctp:9 -#: Template/TransactionSignatures/add.ctp:9 -#: Template/TransactionSignatures/edit.ctp:9 -#: Template/TransactionSignatures/index.ctp:9 -#: Template/TransactionSignatures/index.ctp:22 -#: Template/TransactionSignatures/view.ctp:9 -#: Template/TransactionTypes/add.ctp:9 -#: Template/TransactionTypes/edit.ctp:9 -#: Template/TransactionTypes/index.ctp:9 -#: Template/TransactionTypes/index.ctp:23 -#: Template/TransactionTypes/view.ctp:9 -#: Template/TransactionTypes/view.ctp:44 -#: Template/Transactions/add.ctp:9 -#: Template/Transactions/edit.ctp:9 -#: Template/Transactions/index.ctp:9 -#: Template/Transactions/view.ctp:9 -#: Template/Transactions/view.ctp:66 -#: Template/Transactions/view.ctp:97 -#: Template/Transactions/view.ctp:125 -#: Template/Transactions/view.ctp:152 -#: Template/Transactions/view.ctp:180 -#: Template/Transactions/view.ctp:211 -#: Template/Transactions/view.ctp:241 -#: Template/Users/add.ctp:9 -#: Template/Users/edit.ctp:9 -#: Template/Users/index.ctp:9 -#: Template/Users/index.ctp:26 -#: Template/Users/view.ctp:9 -msgid "Actions" -msgstr "" - -#: Template/AddressTypes/add.ctp:10 -#: Template/AddressTypes/edit.ctp:16 -#: Template/AddressTypes/view.ctp:12 -#: Template/StateGroupAddresses/add.ctp:13 -#: Template/StateGroupAddresses/edit.ctp:19 -#: Template/StateGroupAddresses/index.ctp:13 -#: Template/StateGroupAddresses/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:13 -#: Template/TransactionGroupAddaddress/edit.ctp:19 -#: Template/TransactionGroupAddaddress/index.ctp:13 -#: Template/TransactionGroupAddaddress/view.ctp:16 -msgid "List Address Types" -msgstr "" - -#: Template/AddressTypes/add.ctp:11 -#: Template/AddressTypes/edit.ctp:17 -#: Template/AddressTypes/index.ctp:11 -#: Template/AddressTypes/view.ctp:14 -#: Template/StateGroupAddresses/add.ctp:10 -#: Template/StateGroupAddresses/edit.ctp:16 -#: Template/StateGroupAddresses/view.ctp:12 -#: Template/StateGroups/add.ctp:11 -#: Template/StateGroups/edit.ctp:17 -#: Template/StateGroups/index.ctp:11 -#: Template/StateGroups/view.ctp:14 -msgid "List State Group Addresses" -msgstr "" - -#: Template/AddressTypes/add.ctp:12 -#: Template/AddressTypes/edit.ctp:18 -#: Template/AddressTypes/index.ctp:12 -#: Template/AddressTypes/view.ctp:15 -#: Template/StateGroupAddresses/index.ctp:10 -#: Template/StateGroupAddresses/view.ctp:13 -#: Template/StateGroups/add.ctp:12 -#: Template/StateGroups/edit.ctp:18 -#: Template/StateGroups/index.ctp:12 -#: Template/StateGroups/view.ctp:15 -msgid "New State Group Address" -msgstr "" - -#: Template/AddressTypes/add.ctp:13 -#: Template/AddressTypes/edit.ctp:19 -#: Template/AddressTypes/index.ctp:13 -#: Template/AddressTypes/view.ctp:16 -#: Template/TransactionGroupAddaddress/add.ctp:10 -#: Template/TransactionGroupAddaddress/edit.ctp:16 -#: Template/TransactionGroupAddaddress/view.ctp:12 -#: Template/Transactions/add.ctp:19 -#: Template/Transactions/edit.ctp:25 -#: Template/Transactions/index.ctp:19 -#: Template/Transactions/view.ctp:22 -msgid "List Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/add.ctp:14 -#: Template/AddressTypes/edit.ctp:20 -#: Template/AddressTypes/index.ctp:14 -#: Template/AddressTypes/view.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:10 -#: Template/TransactionGroupAddaddress/view.ctp:13 -#: Template/Transactions/add.ctp:20 -#: Template/Transactions/edit.ctp:26 -#: Template/Transactions/index.ctp:20 -#: Template/Transactions/view.ctp:23 -msgid "New Transaction Group Addaddres" -msgstr "" - -#: Template/AddressTypes/add.ctp:20 -msgid "Add Address Type" -msgstr "" - -#: Template/AddressTypes/add.ctp:26 -#: Template/AddressTypes/edit.ctp:32 -#: Template/AdminErrors/add.ctp:28 -#: Template/AdminErrors/edit.ctp:34 -#: Template/BlockchainTypes/add.ctp:23 -#: Template/BlockchainTypes/edit.ctp:29 -#: Template/CommunityProfiles/add.ctp:22 -#: Template/CommunityProfiles/edit.ctp:28 -#: Template/ElopageBuys/add.ctp:31 -#: Template/ElopageBuys/edit.ctp:37 -#: Template/OperatorTypes/add.ctp:24 -#: Template/OperatorTypes/edit.ctp:30 -#: Template/Operators/add.ctp:24 -#: Template/Operators/edit.ctp:30 -#: Template/Roles/add.ctp:21 -#: Template/Roles/edit.ctp:27 -#: Template/ServerUsers/add.ctp:24 -#: Template/ServerUsers/edit.ctp:32 -#: Template/StateBalances/add.ctp:25 -#: Template/StateBalances/edit.ctp:31 -#: Template/StateCreated/add.ctp:29 -#: Template/StateCreated/edit.ctp:35 -#: Template/StateErrors/add.ctp:27 -#: Template/StateErrors/edit.ctp:33 -#: Template/StateGroupAddresses/add.ctp:26 -#: Template/StateGroupAddresses/edit.ctp:32 -#: Template/StateGroupRelationships/add.ctp:23 -#: Template/StateGroupRelationships/edit.ctp:29 -#: Template/StateGroups/add.ctp:30 -#: Template/StateGroups/edit.ctp:36 -#: Template/StateRelationshipTypes/add.ctp:22 -#: Template/StateRelationshipTypes/edit.ctp:28 -#: Template/StateUserTransactions/add.ctp:29 -#: Template/StateUserTransactions/edit.ctp:35 -#: Template/StateUsers/add.ctp:32 -#: Template/StateUsers/edit.ctp:37 -#: Template/TransactionCreations/add.ctp:27 -#: Template/TransactionCreations/edit.ctp:33 -#: Template/TransactionGroupAddaddress/add.ctp:26 -#: Template/TransactionGroupAddaddress/edit.ctp:32 -#: Template/TransactionGroupAllowtrades/add.ctp:25 -#: Template/TransactionGroupAllowtrades/edit.ctp:31 -#: Template/TransactionGroupCreates/add.ctp:27 -#: Template/TransactionGroupCreates/edit.ctp:33 -#: Template/TransactionSendCoins/add.ctp:28 -#: Template/TransactionSendCoins/edit.ctp:34 -#: Template/TransactionSignatures/add.ctp:23 -#: Template/TransactionSignatures/edit.ctp:29 -#: Template/TransactionTypes/add.ctp:24 -#: Template/TransactionTypes/edit.ctp:30 -#: Template/Transactions/add.ctp:42 -#: Template/Transactions/edit.ctp:47 -#: Template/Users/add.ctp:26 -#: Template/Users/edit.ctp:32 -msgid "Submit" -msgstr "" - -#: Template/AddressTypes/edit.ctp:11 -#: Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:56 -#: Template/AddressTypes/view.ctp:85 -#: Template/AdminErrors/edit.ctp:11 -#: Template/AdminErrors/index.ctp:43 -#: Template/BlockchainTypes/edit.ctp:11 -#: Template/BlockchainTypes/index.ctp:35 -#: Template/CommunityProfiles/edit.ctp:11 -#: Template/CommunityProfiles/index.ctp:33 -#: Template/ElopageBuys/edit.ctp:11 -#: Template/ElopageBuys/index.ctp:51 -#: Template/OperatorTypes/edit.ctp:11 -#: Template/OperatorTypes/index.ctp:35 -#: Template/OperatorTypes/view.ctp:54 -#: Template/Operators/edit.ctp:11 -#: Template/Operators/index.ctp:40 -#: Template/Roles/edit.ctp:11 -#: Template/Roles/index.ctp:31 -#: Template/ServerUsers/edit.ctp:11 -#: Template/ServerUsers/index.ctp:43 -#: Template/StateBalances/edit.ctp:11 -#: Template/StateBalances/index.ctp:38 -#: Template/StateCreated/edit.ctp:11 -#: Template/StateCreated/index.ctp:45 -#: Template/StateErrors/edit.ctp:11 -#: Template/StateErrors/index.ctp:39 -#: Template/StateErrors/show_for_user.ctp:44 -#: Template/StateGroupAddresses/edit.ctp:11 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupRelationships/edit.ctp:11 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroups/edit.ctp:11 -#: Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:60 -#: Template/StateGroups/view.ctp:87 -#: Template/StateGroups/view.ctp:116 -#: Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:11 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:11 -#: Template/StateUserTransactions/index.ctp:41 -#: Template/StateUsers/edit.ctp:11 -#: Template/StateUsers/index.ctp:53 -#: Template/TransactionCreations/edit.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:11 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAllowtrades/edit.ctp:11 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupCreates/edit.ctp:11 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionSendCoins/edit.ctp:11 -#: Template/TransactionSignatures/edit.ctp:11 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionTypes/edit.ctp:11 -#: Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:56 -#: Template/Transactions/edit.ctp:11 -#: Template/Transactions/view.ctp:80 -#: Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 -#: Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 -#: Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 -#: Template/Users/edit.ctp:11 -#: Template/Users/index.ctp:43 -msgid "Delete" -msgstr "" - -#: Template/AddressTypes/edit.ctp:13 -#: Template/AddressTypes/index.ctp:37 -#: Template/AddressTypes/view.ctp:11 -#: Template/AddressTypes/view.ctp:56 -#: Template/AddressTypes/view.ctp:85 -#: Template/AdminErrors/edit.ctp:13 -#: Template/AdminErrors/index.ctp:43 -#: Template/AdminErrors/view.ctp:11 -#: Template/BlockchainTypes/edit.ctp:13 -#: Template/BlockchainTypes/index.ctp:35 -#: Template/BlockchainTypes/view.ctp:11 -#: Template/CommunityProfiles/edit.ctp:13 -#: Template/CommunityProfiles/index.ctp:33 -#: Template/CommunityProfiles/view.ctp:11 -#: Template/ElopageBuys/edit.ctp:13 -#: Template/ElopageBuys/index.ctp:51 -#: Template/ElopageBuys/view.ctp:11 -#: Template/OperatorTypes/edit.ctp:13 -#: Template/OperatorTypes/index.ctp:35 -#: Template/OperatorTypes/view.ctp:11 -#: Template/OperatorTypes/view.ctp:54 -#: Template/Operators/edit.ctp:13 -#: Template/Operators/index.ctp:40 -#: Template/Operators/view.ctp:11 -#: Template/Roles/edit.ctp:13 -#: Template/Roles/index.ctp:31 -#: Template/Roles/view.ctp:11 -#: Template/ServerUsers/edit.ctp:13 -#: Template/ServerUsers/index.ctp:43 -#: Template/ServerUsers/view.ctp:11 -#: Template/StateBalances/edit.ctp:13 -#: Template/StateBalances/index.ctp:38 -#: Template/StateBalances/view.ctp:11 -#: Template/StateCreated/edit.ctp:13 -#: Template/StateCreated/index.ctp:45 -#: Template/StateCreated/view.ctp:11 -#: Template/StateErrors/edit.ctp:13 -#: Template/StateErrors/index.ctp:39 -#: Template/StateErrors/view.ctp:11 -#: Template/StateGroupAddresses/edit.ctp:13 -#: Template/StateGroupAddresses/index.ctp:39 -#: Template/StateGroupAddresses/view.ctp:11 -#: Template/StateGroupRelationships/edit.ctp:13 -#: Template/StateGroupRelationships/index.ctp:35 -#: Template/StateGroupRelationships/view.ctp:11 -#: Template/StateGroups/edit.ctp:13 -#: Template/StateGroups/index.ctp:41 -#: Template/StateGroups/view.ctp:11 -#: Template/StateGroups/view.ctp:60 -#: Template/StateGroups/view.ctp:87 -#: Template/StateGroups/view.ctp:116 -#: Template/StateGroups/view.ctp:145 -#: Template/StateRelationshipTypes/edit.ctp:13 -#: Template/StateRelationshipTypes/index.ctp:33 -#: Template/StateRelationshipTypes/view.ctp:11 -#: Template/StateUserRoles/index.ctp:53 -#: Template/StateUserTransactions/edit.ctp:13 -#: Template/StateUserTransactions/index.ctp:41 -#: Template/StateUserTransactions/view.ctp:11 -#: Template/StateUsers/edit.ctp:13 -#: Template/StateUsers/index.ctp:53 -#: Template/StateUsers/view.ctp:11 -#: Template/TransactionCreations/edit.ctp:13 -#: Template/TransactionCreations/view.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:13 -#: Template/TransactionGroupAddaddress/index.ctp:39 -#: Template/TransactionGroupAddaddress/view.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:13 -#: Template/TransactionGroupAllowtrades/index.ctp:37 -#: Template/TransactionGroupAllowtrades/view.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:13 -#: Template/TransactionGroupCreates/index.ctp:39 -#: Template/TransactionGroupCreates/view.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:13 -#: Template/TransactionSendCoins/view.ctp:11 -#: Template/TransactionSignatures/edit.ctp:13 -#: Template/TransactionSignatures/index.ctp:33 -#: Template/TransactionSignatures/view.ctp:11 -#: Template/TransactionTypes/edit.ctp:13 -#: Template/TransactionTypes/index.ctp:35 -#: Template/TransactionTypes/view.ctp:11 -#: Template/TransactionTypes/view.ctp:56 -#: Template/Transactions/edit.ctp:13 -#: Template/Transactions/view.ctp:11 -#: Template/Transactions/view.ctp:80 -#: Template/Transactions/view.ctp:109 -#: Template/Transactions/view.ctp:136 -#: Template/Transactions/view.ctp:163 -#: Template/Transactions/view.ctp:192 -#: Template/Transactions/view.ctp:225 -#: Template/Transactions/view.ctp:252 -#: Template/Users/edit.ctp:13 -#: Template/Users/index.ctp:43 -#: Template/Users/view.ctp:11 -msgid "Are you sure you want to delete # {0}?" -msgstr "" - -#: Template/AddressTypes/edit.ctp:26 -#: Template/AddressTypes/view.ctp:10 -msgid "Edit Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:10 -#: Template/AddressTypes/view.ctp:13 -#: Template/StateGroupAddresses/add.ctp:14 -#: Template/StateGroupAddresses/edit.ctp:20 -#: Template/StateGroupAddresses/index.ctp:14 -#: Template/StateGroupAddresses/view.ctp:17 -#: Template/TransactionGroupAddaddress/add.ctp:14 -#: Template/TransactionGroupAddaddress/edit.ctp:20 -#: Template/TransactionGroupAddaddress/index.ctp:14 -#: Template/TransactionGroupAddaddress/view.ctp:17 -msgid "New Address Type" -msgstr "" - -#: Template/AddressTypes/index.ctp:18 -msgid "Address Types" -msgstr "" - -#: Template/AddressTypes/index.ctp:35 -#: Template/AddressTypes/view.ctp:54 -#: Template/AddressTypes/view.ctp:83 -#: Template/AdminErrors/index.ctp:39 -#: Template/BlockchainTypes/index.ctp:33 -#: Template/CommunityProfiles/index.ctp:31 -#: Template/ElopageBuys/index.ctp:49 -#: Template/OperatorTypes/index.ctp:33 -#: Template/OperatorTypes/view.ctp:52 -#: Template/Operators/index.ctp:38 -#: Template/Roles/index.ctp:29 -#: Template/ServerUsers/index.ctp:41 -#: Template/StateBalances/index.ctp:36 -#: Template/StateCreated/index.ctp:43 -#: Template/StateErrors/index.ctp:37 -#: Template/StateGroupAddresses/index.ctp:37 -#: Template/StateGroupRelationships/index.ctp:33 -#: Template/StateGroups/index.ctp:39 -#: Template/StateGroups/view.ctp:58 -#: Template/StateGroups/view.ctp:85 -#: Template/StateGroups/view.ctp:114 -#: Template/StateGroups/view.ctp:143 -#: Template/StateRelationshipTypes/index.ctp:31 -#: Template/StateUserRoles/index.ctp:51 -#: Template/StateUserTransactions/index.ctp:39 -#: Template/StateUsers/index.ctp:51 -#: Template/StateUsers/view.ctp:41 -#: Template/StateUsers/view.ctp:71 -#: Template/StateUsers/view.ctp:104 -#: Template/StateUsers/view.ctp:136 -#: Template/TransactionCreations/index.ctp:42 -#: Template/TransactionGroupAddaddress/index.ctp:37 -#: Template/TransactionGroupAllowtrades/index.ctp:35 -#: Template/TransactionGroupCreates/index.ctp:37 -#: Template/TransactionSendCoins/index.ctp:41 -#: Template/TransactionSignatures/index.ctp:31 -#: Template/TransactionTypes/index.ctp:33 -#: Template/TransactionTypes/view.ctp:54 -#: Template/Transactions/view.ctp:78 -#: Template/Transactions/view.ctp:107 -#: Template/Transactions/view.ctp:134 -#: Template/Transactions/view.ctp:161 -#: Template/Transactions/view.ctp:190 -#: Template/Transactions/view.ctp:223 -#: Template/Transactions/view.ctp:250 -#: Template/Users/index.ctp:41 -msgid "View" -msgstr "" - -#: Template/AddressTypes/index.ctp:36 -#: Template/AddressTypes/view.ctp:55 -#: Template/AddressTypes/view.ctp:84 -#: Template/AdminErrors/index.ctp:41 -#: Template/BlockchainTypes/index.ctp:34 -#: Template/CommunityProfiles/index.ctp:32 -#: Template/ElopageBuys/index.ctp:50 -#: Template/OperatorTypes/index.ctp:34 -#: Template/OperatorTypes/view.ctp:53 -#: Template/Operators/index.ctp:39 -#: Template/Roles/index.ctp:30 -#: Template/ServerUsers/index.ctp:42 -#: Template/StateBalances/index.ctp:37 -#: Template/StateCreated/index.ctp:44 -#: Template/StateErrors/index.ctp:38 -#: Template/StateGroupAddresses/index.ctp:38 -#: Template/StateGroupRelationships/index.ctp:34 -#: Template/StateGroups/index.ctp:40 -#: Template/StateGroups/view.ctp:59 -#: Template/StateGroups/view.ctp:86 -#: Template/StateGroups/view.ctp:115 -#: Template/StateGroups/view.ctp:144 -#: Template/StateRelationshipTypes/index.ctp:32 -#: Template/StateUserRoles/index.ctp:52 -#: Template/StateUserTransactions/index.ctp:40 -#: Template/StateUsers/index.ctp:52 -#: Template/TransactionGroupAddaddress/index.ctp:38 -#: Template/TransactionGroupAllowtrades/index.ctp:36 -#: Template/TransactionGroupCreates/index.ctp:38 -#: Template/TransactionSignatures/index.ctp:32 -#: Template/TransactionTypes/index.ctp:34 -#: Template/TransactionTypes/view.ctp:55 -#: Template/Transactions/view.ctp:79 -#: Template/Transactions/view.ctp:108 -#: Template/Transactions/view.ctp:135 -#: Template/Transactions/view.ctp:162 -#: Template/Transactions/view.ctp:191 -#: Template/Transactions/view.ctp:224 -#: Template/Transactions/view.ctp:251 -#: Template/Users/index.ctp:42 -msgid "Edit" -msgstr "" - -#: Template/AddressTypes/index.ctp:45 -#: Template/AdminErrors/index.ctp:50 -#: Template/BlockchainTypes/index.ctp:43 -#: Template/CommunityProfiles/index.ctp:41 -#: Template/ElopageBuys/index.ctp:59 -#: Template/OperatorTypes/index.ctp:43 -#: Template/Operators/index.ctp:48 -#: Template/Roles/index.ctp:39 -#: Template/ServerUsers/index.ctp:51 -#: Template/StateBalances/index.ctp:46 -#: Template/StateCreated/index.ctp:53 -#: Template/StateErrors/index.ctp:47 -#: Template/StateGroupAddresses/index.ctp:47 -#: Template/StateGroupRelationships/index.ctp:43 -#: Template/StateGroups/index.ctp:49 -#: Template/StateRelationshipTypes/index.ctp:41 -#: Template/StateUserRoles/index.ctp:61 -#: Template/StateUserTransactions/index.ctp:49 -#: Template/StateUsers/index.ctp:61 -#: Template/TransactionCreations/index.ctp:50 -#: Template/TransactionGroupAddaddress/index.ctp:47 -#: Template/TransactionGroupAllowtrades/index.ctp:45 -#: Template/TransactionGroupCreates/index.ctp:47 -#: Template/TransactionSendCoins/index.ctp:49 -#: Template/TransactionSignatures/index.ctp:41 -#: Template/TransactionTypes/index.ctp:43 -#: Template/Transactions/index.ctp:50 -#: Template/Users/index.ctp:51 -msgid "first" -msgstr "" - -#: Template/AddressTypes/index.ctp:46 -#: Template/AdminErrors/index.ctp:51 -#: Template/BlockchainTypes/index.ctp:44 -#: Template/CommunityProfiles/index.ctp:42 -#: Template/ElopageBuys/index.ctp:60 -#: Template/OperatorTypes/index.ctp:44 -#: Template/Operators/index.ctp:49 -#: Template/Roles/index.ctp:40 -#: Template/ServerUsers/index.ctp:52 -#: Template/StateBalances/index.ctp:47 -#: Template/StateCreated/index.ctp:54 -#: Template/StateErrors/index.ctp:48 -#: Template/StateGroupAddresses/index.ctp:48 -#: Template/StateGroupRelationships/index.ctp:44 -#: Template/StateGroups/index.ctp:50 -#: Template/StateRelationshipTypes/index.ctp:42 -#: Template/StateUserRoles/index.ctp:62 -#: Template/StateUserTransactions/index.ctp:50 -#: Template/StateUsers/index.ctp:62 -#: Template/TransactionCreations/index.ctp:51 -#: Template/TransactionGroupAddaddress/index.ctp:48 -#: Template/TransactionGroupAllowtrades/index.ctp:46 -#: Template/TransactionGroupCreates/index.ctp:48 -#: Template/TransactionSendCoins/index.ctp:50 -#: Template/TransactionSignatures/index.ctp:42 -#: Template/TransactionTypes/index.ctp:44 -#: Template/Transactions/index.ctp:51 -#: Template/Users/index.ctp:52 -msgid "previous" -msgstr "" - -#: Template/AddressTypes/index.ctp:48 -#: Template/AdminErrors/index.ctp:53 -#: Template/BlockchainTypes/index.ctp:46 -#: Template/CommunityProfiles/index.ctp:44 -#: Template/ElopageBuys/index.ctp:62 -#: Template/OperatorTypes/index.ctp:46 -#: Template/Operators/index.ctp:51 -#: Template/Roles/index.ctp:42 -#: Template/ServerUsers/index.ctp:54 -#: Template/StateBalances/index.ctp:49 -#: Template/StateCreated/index.ctp:56 -#: Template/StateErrors/index.ctp:50 -#: Template/StateGroupAddresses/index.ctp:50 -#: Template/StateGroupRelationships/index.ctp:46 -#: Template/StateGroups/index.ctp:52 -#: Template/StateRelationshipTypes/index.ctp:44 -#: Template/StateUserRoles/index.ctp:64 -#: Template/StateUserTransactions/index.ctp:52 -#: Template/StateUsers/index.ctp:64 -#: Template/TransactionCreations/index.ctp:53 -#: Template/TransactionGroupAddaddress/index.ctp:50 -#: Template/TransactionGroupAllowtrades/index.ctp:48 -#: Template/TransactionGroupCreates/index.ctp:50 -#: Template/TransactionSendCoins/index.ctp:52 -#: Template/TransactionSignatures/index.ctp:44 -#: Template/TransactionTypes/index.ctp:46 -#: Template/Transactions/index.ctp:53 -#: Template/Users/index.ctp:54 -msgid "next" -msgstr "" - -#: Template/AddressTypes/index.ctp:49 -#: Template/AdminErrors/index.ctp:54 -#: Template/BlockchainTypes/index.ctp:47 -#: Template/CommunityProfiles/index.ctp:45 -#: Template/ElopageBuys/index.ctp:63 -#: Template/OperatorTypes/index.ctp:47 -#: Template/Operators/index.ctp:52 -#: Template/Roles/index.ctp:43 -#: Template/ServerUsers/index.ctp:55 -#: Template/StateBalances/index.ctp:50 -#: Template/StateCreated/index.ctp:57 -#: Template/StateErrors/index.ctp:51 -#: Template/StateGroupAddresses/index.ctp:51 -#: Template/StateGroupRelationships/index.ctp:47 -#: Template/StateGroups/index.ctp:53 -#: Template/StateRelationshipTypes/index.ctp:45 -#: Template/StateUserRoles/index.ctp:65 -#: Template/StateUserTransactions/index.ctp:53 -#: Template/StateUsers/index.ctp:65 -#: Template/TransactionCreations/index.ctp:54 -#: Template/TransactionGroupAddaddress/index.ctp:51 -#: Template/TransactionGroupAllowtrades/index.ctp:49 -#: Template/TransactionGroupCreates/index.ctp:51 -#: Template/TransactionSendCoins/index.ctp:53 -#: Template/TransactionSignatures/index.ctp:45 -#: Template/TransactionTypes/index.ctp:47 -#: Template/Transactions/index.ctp:54 -#: Template/Users/index.ctp:55 -msgid "last" -msgstr "" - -#: Template/AddressTypes/index.ctp:51 -#: Template/AdminErrors/index.ctp:56 -#: Template/BlockchainTypes/index.ctp:49 -#: Template/CommunityProfiles/index.ctp:47 -#: Template/ElopageBuys/index.ctp:65 -#: Template/OperatorTypes/index.ctp:49 -#: Template/Operators/index.ctp:54 -#: Template/Roles/index.ctp:45 -#: Template/ServerUsers/index.ctp:57 -#: Template/StateBalances/index.ctp:52 -#: Template/StateCreated/index.ctp:59 -#: Template/StateErrors/index.ctp:53 -#: Template/StateGroupAddresses/index.ctp:53 -#: Template/StateGroupRelationships/index.ctp:49 -#: Template/StateGroups/index.ctp:55 -#: Template/StateRelationshipTypes/index.ctp:47 -#: Template/StateUserRoles/index.ctp:67 -#: Template/StateUserTransactions/index.ctp:55 -#: Template/StateUsers/index.ctp:67 -#: Template/TransactionCreations/index.ctp:56 -#: Template/TransactionGroupAddaddress/index.ctp:53 -#: Template/TransactionGroupAllowtrades/index.ctp:51 -#: Template/TransactionGroupCreates/index.ctp:53 -#: Template/TransactionSendCoins/index.ctp:55 -#: Template/TransactionSignatures/index.ctp:47 -#: Template/TransactionTypes/index.ctp:49 -#: Template/Transactions/index.ctp:56 -#: Template/Users/index.ctp:57 -msgid "Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total" -msgstr "" - -#: Template/AddressTypes/view.ctp:11 -msgid "Delete Address Type" -msgstr "" - -#: Template/AddressTypes/view.ctp:24 -#: Template/BlockchainTypes/view.ctp:20 -#: Template/OperatorTypes/view.ctp:22 -#: Template/StateGroups/view.ctp:28 -#: Template/StateGroups/view.ctp:103 -#: Template/StateRelationshipTypes/view.ctp:20 -#: Template/TransactionGroupCreates/view.ctp:32 -#: Template/TransactionTypes/view.ctp:22 -#: Template/Transactions/view.ctp:179 -#: Template/Users/statistics.ctp:64 -msgid "Name" -msgstr "" - -#: Template/AddressTypes/view.ctp:28 -#: Template/BlockchainTypes/view.ctp:24 -#: Template/OperatorTypes/view.ctp:26 -#: Template/StateRelationshipTypes/view.ctp:24 -#: Template/TransactionTypes/view.ctp:26 -msgid "Text" -msgstr "" - -#: Template/AddressTypes/view.ctp:32 -#: Template/AddressTypes/view.ctp:41 -#: Template/AddressTypes/view.ctp:68 -#: Template/AdminErrors/view.ctp:46 -#: Template/BlockchainTypes/view.ctp:32 -#: Template/CommunityProfiles/view.ctp:24 -#: Template/ElopageBuys/view.ctp:32 -#: Template/OperatorTypes/view.ctp:30 -#: Template/OperatorTypes/view.ctp:39 -#: Template/Operators/view.ctp:32 -#: Template/Roles/view.ctp:24 -#: Template/ServerUsers/view.ctp:36 -#: Template/StateBalances/view.ctp:27 -#: Template/StateCreated/view.ctp:32 -#: Template/StateErrors/view.ctp:32 -#: Template/StateGroupAddresses/view.ctp:28 -#: Template/StateGroupRelationships/view.ctp:20 -#: Template/StateGroups/view.ctp:32 -#: Template/StateGroups/view.ctp:45 -#: Template/StateGroups/view.ctp:72 -#: Template/StateGroups/view.ctp:99 -#: Template/StateGroups/view.ctp:128 -#: Template/StateRelationshipTypes/view.ctp:28 -#: Template/StateUserTransactions/view.ctp:38 -#: Template/TransactionCreations/view.ctp:32 -#: Template/TransactionGroupAddaddress/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:32 -#: Template/TransactionSignatures/view.ctp:26 -#: Template/TransactionTypes/view.ctp:30 -#: Template/TransactionTypes/view.ctp:39 -#: Template/Transactions/view.ctp:46 -#: Template/Transactions/view.ctp:59 -#: Template/Transactions/view.ctp:92 -#: Template/Transactions/view.ctp:121 -#: Template/Transactions/view.ctp:148 -#: Template/Transactions/view.ctp:175 -#: Template/Transactions/view.ctp:204 -#: Template/Transactions/view.ctp:237 -#: Template/Users/view.ctp:36 -msgid "Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:37 -#: Template/StateGroups/view.ctp:41 -msgid "Related State Group Addresses" -msgstr "" - -#: Template/AddressTypes/view.ctp:42 -#: Template/StateGroupAddresses/view.ctp:32 -#: Template/TransactionGroupAllowtrades/view.ctp:30 -#: Template/Transactions/view.ctp:150 -msgid "Group Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:43 -#: Template/AddressTypes/view.ctp:72 -#: Template/StateGroups/view.ctp:47 -#: Template/StateGroups/view.ctp:75 -#: Template/Transactions/view.ctp:124 -msgid "Public Key" -msgstr "" - -#: Template/AddressTypes/view.ctp:44 -#: Template/AddressTypes/view.ctp:70 -#: Template/StateGroups/view.ctp:48 -#: Template/Transactions/view.ctp:123 -msgid "Address Type Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:64 -#: Template/Transactions/view.ctp:117 -msgid "Related Transaction Group Addaddress" -msgstr "" - -#: Template/AddressTypes/view.ctp:69 -#: Template/StateGroups/view.ctp:100 -#: Template/Transactions/view.ctp:60 -#: Template/Transactions/view.ctp:93 -#: Template/Transactions/view.ctp:122 -#: Template/Transactions/view.ctp:149 -#: Template/Transactions/view.ctp:176 -#: Template/Transactions/view.ctp:205 -#: Template/Transactions/view.ctp:238 -msgid "Transaction Id" -msgstr "" - -#: Template/AddressTypes/view.ctp:71 -msgid "Remove From Group" -msgstr "" - -#: Template/AdminErrors/add.ctp:10 -#: Template/AdminErrors/edit.ctp:16 -#: Template/AdminErrors/view.ctp:12 -msgid "List Admin Errors" -msgstr "" - -#: Template/AdminErrors/add.ctp:11 -#: Template/AdminErrors/edit.ctp:17 -#: Template/AdminErrors/index.ctp:11 -#: Template/AdminErrors/view.ctp:14 -#: Template/StateBalances/add.ctp:11 -#: Template/StateBalances/edit.ctp:17 -#: Template/StateBalances/index.ctp:11 -#: Template/StateBalances/view.ctp:14 -#: Template/StateCreated/add.ctp:13 -#: Template/StateCreated/edit.ctp:19 -#: Template/StateCreated/index.ctp:13 -#: Template/StateCreated/view.ctp:16 -#: Template/StateErrors/add.ctp:11 -#: Template/StateErrors/edit.ctp:17 -#: Template/StateErrors/index.ctp:11 -#: Template/StateErrors/view.ctp:14 -#: Template/StateGroups/add.ctp:13 -#: Template/StateGroups/edit.ctp:19 -#: Template/StateGroups/index.ctp:13 -#: Template/StateGroups/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:11 -#: Template/StateUserTransactions/edit.ctp:17 -#: Template/StateUserTransactions/index.ctp:11 -#: Template/StateUserTransactions/view.ctp:14 -#: Template/StateUsers/add.ctp:10 -#: Template/StateUsers/edit.ctp:16 -#: Template/StateUsers/view.ctp:12 -#: Template/TransactionCreations/add.ctp:13 -#: Template/TransactionCreations/edit.ctp:19 -#: Template/TransactionCreations/index.ctp:13 -#: Template/TransactionCreations/view.ctp:16 -#: Template/TransactionSendCoins/add.ctp:13 -#: Template/TransactionSendCoins/edit.ctp:19 -#: Template/TransactionSendCoins/index.ctp:13 -#: Template/TransactionSendCoins/view.ctp:16 -msgid "List State Users" -msgstr "" - -#: Template/AdminErrors/add.ctp:12 -#: Template/AdminErrors/edit.ctp:18 -#: Template/AdminErrors/index.ctp:12 -#: Template/AdminErrors/view.ctp:15 -#: Template/StateBalances/add.ctp:12 -#: Template/StateBalances/edit.ctp:18 -#: Template/StateBalances/index.ctp:12 -#: Template/StateBalances/view.ctp:15 -#: Template/StateCreated/add.ctp:14 -#: Template/StateCreated/edit.ctp:20 -#: Template/StateCreated/index.ctp:14 -#: Template/StateCreated/view.ctp:17 -#: Template/StateErrors/add.ctp:12 -#: Template/StateErrors/edit.ctp:18 -#: Template/StateErrors/index.ctp:12 -#: Template/StateErrors/view.ctp:15 -#: Template/StateGroups/add.ctp:14 -#: Template/StateGroups/edit.ctp:20 -#: Template/StateGroups/index.ctp:14 -#: Template/StateGroups/view.ctp:17 -#: Template/StateUserRoles/index.ctp:10 -#: Template/StateUserTransactions/add.ctp:12 -#: Template/StateUserTransactions/edit.ctp:18 -#: Template/StateUserTransactions/index.ctp:12 -#: Template/StateUserTransactions/view.ctp:15 -#: Template/StateUsers/index.ctp:10 -#: Template/StateUsers/view.ctp:13 -#: Template/TransactionCreations/add.ctp:14 -#: Template/TransactionCreations/edit.ctp:20 -#: Template/TransactionCreations/index.ctp:14 -#: Template/TransactionCreations/view.ctp:17 -#: Template/TransactionSendCoins/add.ctp:14 -#: Template/TransactionSendCoins/edit.ctp:20 -#: Template/TransactionSendCoins/index.ctp:14 -#: Template/TransactionSendCoins/view.ctp:17 -msgid "New State User" -msgstr "" - -#: Template/AdminErrors/add.ctp:18 -msgid "Add Admin Error" -msgstr "" - -#: Template/AdminErrors/edit.ctp:24 -#: Template/AdminErrors/view.ctp:10 -msgid "Edit Admin Error" -msgstr "" - -#: Template/AdminErrors/index.ctp:10 -#: Template/AdminErrors/view.ctp:13 -msgid "New Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:11 -msgid "Delete Admin Error" -msgstr "" - -#: Template/AdminErrors/view.ctp:22 -#: Template/StateBalances/view.ctp:23 -#: Template/StateCreated/view.ctp:28 -#: Template/StateErrors/view.ctp:24 -#: Template/StateUserTransactions/view.ctp:26 -#: Template/TransactionCreations/view.ctp:28 -#: Template/TransactionSendCoins/view.ctp:28 -msgid "State User" -msgstr "" - -#: Template/AdminErrors/view.ctp:26 -msgid "Controller" -msgstr "" - -#: Template/AdminErrors/view.ctp:30 -msgid "Action" -msgstr "" - -#: Template/AdminErrors/view.ctp:34 -msgid "State" -msgstr "" - -#: Template/AdminErrors/view.ctp:38 -msgid "Msg" -msgstr "" - -#: Template/AdminErrors/view.ctp:42 -msgid "Details" -msgstr "" - -#: Template/AdminErrors/view.ctp:50 -#: Template/ServerUsers/view.ctp:44 -#: Template/StateCreated/view.ctp:48 -#: Template/StateErrors/view.ctp:36 -#: Template/Transactions/view.ctp:64 -#: Template/Users/view.ctp:44 -msgid "Created" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:10 -#: Template/BlockchainTypes/edit.ctp:16 -#: Template/BlockchainTypes/view.ctp:12 -msgid "List Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/add.ctp:16 -msgid "Add Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/edit.ctp:22 -#: Template/BlockchainTypes/view.ctp:10 -msgid "Edit Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:10 -#: Template/BlockchainTypes/view.ctp:13 -msgid "New Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/index.ctp:14 -msgid "Blockchain Types" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:11 -msgid "Delete Blockchain Type" -msgstr "" - -#: Template/BlockchainTypes/view.ctp:28 -msgid "Symbol" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:10 -#: Template/CommunityProfiles/edit.ctp:16 -#: Template/CommunityProfiles/view.ctp:12 -msgid "List Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/add.ctp:16 -msgid "Add Community Profile" -msgstr "" - -#: Template/CommunityProfiles/edit.ctp:22 -#: Template/CommunityProfiles/view.ctp:10 -msgid "Edit Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:10 -#: Template/CommunityProfiles/view.ctp:13 -msgid "New Community Profile" -msgstr "" - -#: Template/CommunityProfiles/index.ctp:14 -msgid "Community Profiles" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:11 -msgid "Delete Community Profile" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:20 -msgid "Profile Desc" -msgstr "" - -#: Template/CommunityProfiles/view.ctp:28 -#: Template/Transactions/view.ctp:63 -#: Template/Transactions/view.ctp:94 -#: Template/Transactions/view.ctp:206 -msgid "State User Id" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:9 -msgid "Error, Please try again" -msgstr "" - -#: Template/Dashboard/error_http_request.ctp:13 -#: Template/Layout/error.ctp:43 -msgid "Back" -msgstr "" - -#: Template/Dashboard/index.ctp:14 -#: Template/Dashboard/index.ctp:18 -#: Template/Dashboard/server_index.ctp:9 -msgid "Willkommen" -msgstr "" - -#: Template/Dashboard/index.ctp:47 -msgid "löschen" -msgstr "" - -#: Template/Dashboard/index.ctp:51 -msgid "Adminbereich" -msgstr "" - -#: Template/Dashboard/index.ctp:57 -#: Template/Dashboard/server_index.ctp:21 -msgid "viele schöpfen" -msgstr "" - -#: Template/Dashboard/index.ctp:70 -msgid "Anmeldungen" -msgstr "" - -#: Template/Dashboard/index.ctp:94 -msgid "suchen" -msgstr "" - -#: Template/Dashboard/index.ctp:102 -msgid "hinzufügen" -msgstr "" - -#: Template/Dashboard/index.ctp:108 -msgid "hat sein Passwort und Passphrase vergessen" -msgstr "" - -#: Template/Dashboard/index.ctp:119 -msgid "Gruppen" -msgstr "" - -#: Template/Dashboard/index.ctp:125 -msgid "Server" -msgstr "" - -#: Template/Dashboard/index.ctp:131 -msgid "Topics" -msgstr "" - -#: Template/Dashboard/index.ctp:139 -msgid "Hedera Accounts" -msgstr "" - -#: Template/Element/navi.ctp:35 -msgid "Mitgliederbereich" -msgstr "" - -#: Template/Element/navi_header.ctp:38 -#: Template/Element/navi_notify.ctp:35 -msgid "Transaktionen sind noch zu unterzeichnen" -msgstr "" - -#: Template/Element/user_menu.ctp:22 -msgid "Abmelden" -msgstr "" - -#: Template/Element/Flash/success.ctp:9 -msgid "Info:" -msgstr "" - -#: Template/ElopageBuys/add.ctp:10 -#: Template/ElopageBuys/edit.ctp:16 -#: Template/ElopageBuys/view.ctp:12 -msgid "List Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/add.ctp:16 -msgid "Add Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/edit.ctp:22 -#: Template/ElopageBuys/view.ctp:10 -msgid "Edit Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:10 -#: Template/ElopageBuys/view.ctp:13 -msgid "New Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/index.ctp:14 -msgid "Elopage Buys" -msgstr "" - -#: Template/ElopageBuys/statistics.ctp:28 -#: Template/Users/statistics.ctp:49 -msgid "Anmeldungen diesen Monat" -msgstr "" - -#: Template/ElopageBuys/view.ctp:11 -msgid "Delete Elopage Buy" -msgstr "" - -#: Template/ElopageBuys/view.ctp:20 -msgid "Payer Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:24 -msgid "Publisher Email" -msgstr "" - -#: Template/ElopageBuys/view.ctp:28 -msgid "Event" -msgstr "" - -#: Template/ElopageBuys/view.ctp:36 -msgid "Elopage User Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:40 -msgid "Affiliate Program Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:44 -msgid "Publisher Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:48 -msgid "Order Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:52 -msgid "Product Id" -msgstr "" - -#: Template/ElopageBuys/view.ctp:56 -msgid "Product Price" -msgstr "" - -#: Template/ElopageBuys/view.ctp:60 -msgid "Success Date" -msgstr "" - -#: Template/ElopageBuys/view.ctp:64 -msgid "Payed" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 -#: Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 -#: Template/Users/view.ctp:49 -msgid "Yes" -msgstr "" - -#: Template/ElopageBuys/view.ctp:65 -#: Template/ServerUsers/view.ctp:53 -#: Template/TransactionGroupAllowtrades/view.ctp:35 -#: Template/Users/view.ctp:49 -msgid "No" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:8 -msgid "Gradido Schöpfung" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:9 -#: Template/Email/text/notification_transaction_failed.ctp:14 -#: Template/Email/text/notification_transfer.ctp:12 -msgid "Hallo" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:11 -msgid "für dich wurden soeben {0} geschöpft." -msgstr "" - -#: Template/Email/text/notification_creation.ctp:16 -#: Template/Email/text/notification_transaction_failed.ctp:46 -#: Template/Email/text/notification_transfer.ctp:19 -msgid "Bitte antworte nicht auf diese E-Mail!" -msgstr "" - -#: Template/Email/text/notification_creation.ctp:18 -#: Template/Email/text/notification_transaction_failed.ctp:49 -#: Template/Email/text/notification_transfer.ctp:25 -msgid "Mit freundlichen Grüßen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:8 -msgid "Gradido Transaktion fehlgeschlagen" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:16 -msgid "Deine letzte Transaktion ist leider fehlgeschlagen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:20 -msgid "Du wolltest {0} für {1} schöpfen." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:24 -msgid "Das Zieldatum war: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:26 -msgid "Du wolltest {0} an {1} senden." -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:32 -msgid "Das ist schief gelaufen: " -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:35 -msgid "Fehler beim speichern in der Datenbank. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transaction_failed.ctp:36 -msgid "Fehler beim parsen der Transaktion. Bitte versuche es später erneut" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:8 -msgid "Gradido Überweisung" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:14 -msgid "Du hast soeben {0} von {1} erhalten." -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:15 -msgid "{0} schreibt:" -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid "Wenn Du " -msgstr "" - -#: Template/Email/text/notification_transfer.ctp:20 -msgid " per E-Mail antworten willst, schreibe stattdessen an die Adresse: " -msgstr "" - -#: Template/Layout/default.ctp:38 -msgid "Logout" -msgstr "" - -#: Template/Layout/error.ctp:35 -msgid "Error" -msgstr "" - -#: Template/Layout/frontend.ctp:95 -msgid "Datenschutzerklärung" -msgstr "" - -#: Template/Layout/frontend.ctp:96 -msgid "Impressum" -msgstr "" - -#: Template/Layout/frontend.ctp:108 -msgid "Community Server in Entwicklung" -msgstr "" - -#: Template/OperatorTypes/add.ctp:10 -#: Template/OperatorTypes/edit.ctp:16 -#: Template/OperatorTypes/view.ctp:12 -msgid "List Operator Types" -msgstr "" - -#: Template/OperatorTypes/add.ctp:11 -#: Template/OperatorTypes/edit.ctp:17 -#: Template/OperatorTypes/index.ctp:11 -#: Template/OperatorTypes/view.ctp:14 -#: Template/Operators/add.ctp:10 -#: Template/Operators/edit.ctp:16 -#: Template/Operators/view.ctp:12 -msgid "List Operators" -msgstr "" - -#: Template/OperatorTypes/add.ctp:12 -#: Template/OperatorTypes/edit.ctp:18 -#: Template/OperatorTypes/index.ctp:12 -#: Template/OperatorTypes/view.ctp:15 -#: Template/Operators/index.ctp:10 -#: Template/Operators/view.ctp:13 -msgid "New Operator" -msgstr "" - -#: Template/OperatorTypes/add.ctp:18 -msgid "Add Operator Type" -msgstr "" - -#: Template/OperatorTypes/edit.ctp:24 -#: Template/OperatorTypes/view.ctp:10 -msgid "Edit Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:10 -#: Template/OperatorTypes/view.ctp:13 -msgid "New Operator Type" -msgstr "" - -#: Template/OperatorTypes/index.ctp:16 -msgid "Operator Types" -msgstr "" - -#: Template/OperatorTypes/view.ctp:11 -msgid "Delete Operator Type" -msgstr "" - -#: Template/OperatorTypes/view.ctp:35 -msgid "Related Operators" -msgstr "" - -#: Template/OperatorTypes/view.ctp:40 -#: Template/Operators/view.ctp:20 -#: Template/ServerUsers/view.ctp:20 -msgid "Username" -msgstr "" - -#: Template/OperatorTypes/view.ctp:41 -#: Template/Operators/view.ctp:36 -msgid "Operator Type Id" -msgstr "" - -#: Template/OperatorTypes/view.ctp:42 -#: Template/Operators/view.ctp:28 -msgid "Data Base64" -msgstr "" - -#: Template/Operators/add.ctp:16 -msgid "Add Operator" -msgstr "" - -#: Template/Operators/edit.ctp:22 -#: Template/Operators/view.ctp:10 -msgid "Edit Operator" -msgstr "" - -#: Template/Operators/index.ctp:14 -msgid "Operators" -msgstr "" - -#: Template/Operators/view.ctp:11 -msgid "Delete Operator" -msgstr "" - -#: Template/Operators/view.ctp:24 -msgid "User Pubkey" -msgstr "" - -#: Template/Profile/edit.ctp:9 -msgid "Profil ändern" -msgstr "" - -#: Template/Profile/edit.ctp:18 -msgid "Vorname" -msgstr "" - -#: Template/Profile/edit.ctp:19 -msgid "Nachname" -msgstr "" - -#: Template/Profile/edit.ctp:20 -msgid "Profilbild" -msgstr "" - -#: Template/Profile/edit.ctp:25 -msgid "Beschreibung" -msgstr "" - -#: Template/Profile/edit.ctp:26 -msgid "Daten speichern" -msgstr "" - -#: Template/Roles/add.ctp:10 -#: Template/Roles/edit.ctp:16 -#: Template/Roles/view.ctp:12 -msgid "List Roles" -msgstr "" - -#: Template/Roles/add.ctp:16 -msgid "Add Role" -msgstr "" - -#: Template/Roles/edit.ctp:22 -#: Template/Roles/view.ctp:10 -msgid "Edit Role" -msgstr "" - -#: Template/Roles/index.ctp:10 -#: Template/Roles/view.ctp:13 -msgid "New Role" -msgstr "" - -#: Template/Roles/index.ctp:14 -msgid "Roles" -msgstr "" - -#: Template/Roles/view.ctp:11 -msgid "Delete Role" -msgstr "" - -#: Template/Roles/view.ctp:20 -msgid "Title" -msgstr "" - -#: Template/ServerUsers/add.ctp:10 -#: Template/ServerUsers/edit.ctp:16 -#: Template/ServerUsers/view.ctp:12 -msgid "List Server Users" -msgstr "" - -#: Template/ServerUsers/add.ctp:16 -msgid "Add Server User" -msgstr "" - -#: Template/ServerUsers/edit.ctp:22 -#: Template/ServerUsers/view.ctp:10 -msgid "Edit Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:10 -#: Template/ServerUsers/view.ctp:13 -msgid "New Server User" -msgstr "" - -#: Template/ServerUsers/index.ctp:14 -msgid "Server Users" -msgstr "" - -#: Template/ServerUsers/login.ctp:16 -msgid "Please enter your username and password" -msgstr "" - -#: Template/ServerUsers/login.ctp:20 -msgid "Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:11 -msgid "Delete Server User" -msgstr "" - -#: Template/ServerUsers/view.ctp:24 -#: Template/Users/view.ctp:40 -msgid "Password" -msgstr "" - -#: Template/ServerUsers/view.ctp:28 -#: Template/Users/view.ctp:20 -msgid "Email" -msgstr "" - -#: Template/ServerUsers/view.ctp:32 -#: Template/StateUserRoles/assign_role.ctp:45 -#: Template/StateUserRoles/search.ctp:32 -msgid "Role" -msgstr "" - -#: Template/ServerUsers/view.ctp:40 -msgid "Last Login" -msgstr "" - -#: Template/ServerUsers/view.ctp:48 -#: Template/StateBalances/view.ctp:35 -msgid "Modified" -msgstr "" - -#: Template/ServerUsers/view.ctp:52 -msgid "Activated" -msgstr "" - -#: Template/StateBalances/add.ctp:10 -#: Template/StateBalances/edit.ctp:16 -#: Template/StateBalances/view.ctp:12 -#: Template/StateUserRoles/index.ctp:13 -#: Template/StateUsers/add.ctp:13 -#: Template/StateUsers/edit.ctp:19 -#: Template/StateUsers/index.ctp:13 -#: Template/StateUsers/view.ctp:16 -msgid "List State Balances" -msgstr "" - -#: Template/StateBalances/add.ctp:19 -msgid "Add State Balance" -msgstr "" - -#: Template/StateBalances/edit.ctp:25 -#: Template/StateBalances/view.ctp:10 -msgid "Edit State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:10 -#: Template/StateBalances/view.ctp:13 -#: Template/StateUserRoles/index.ctp:14 -#: Template/StateUsers/add.ctp:14 -#: Template/StateUsers/edit.ctp:20 -#: Template/StateUsers/index.ctp:14 -#: Template/StateUsers/view.ctp:17 -msgid "New State Balance" -msgstr "" - -#: Template/StateBalances/index.ctp:16 -msgid "State Balances" -msgstr "" - -#: Template/StateBalances/overview.ctp:10 -msgid "Aktueller Kontostand: " -msgstr "" - -#: Template/StateBalances/overview.ctp:34 -msgid "Absender" -msgstr "" - -#: Template/StateBalances/overview.ctp:35 -#: Template/StateUsers/view.ctp:57 -#: Template/StateUsers/view.ctp:87 -#: Template/StateUsers/view.ctp:121 -#: Template/TransactionSendCoins/create.ctp:21 -#: Template/TransactionSendCoins/create_raw.ctp:32 -msgid "Verwendungszweck" -msgstr "" - -#: Template/StateBalances/overview.ctp:36 -#: Template/StateBalances/overview_gdt.ctp:42 -#: Template/StateBalances/overview_gdt.ctp:75 -msgid "Datum" -msgstr "" - -#: Template/StateBalances/overview.ctp:37 -#: Template/StateUsers/view.ctp:56 -#: Template/StateUsers/view.ctp:86 -#: Template/StateUsers/view.ctp:120 -msgid "Betrag" -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Transaktions Nr." -msgstr "" - -#: Template/StateBalances/overview.ctp:38 -msgid "Nr" -msgstr "" - -#: Template/StateBalances/overview.ctp:75 -msgid "Geschöpft" -msgstr "" - -#: Template/StateBalances/overview.ctp:78 -msgid "Gesendet" -msgstr "" - -#: Template/StateBalances/overview.ctp:81 -msgid "Empfangen" -msgstr "" - -#: Template/StateBalances/overview.ctp:84 -msgid "Vergänglichkeit" -msgstr "" - -#: Template/StateBalances/overview.ctp:124 -#: Template/TransactionCreations/create_multi.ctp:184 -msgid "Laufende Transaktion" -msgstr "" - -#: Template/StateBalances/overview.ctp:126 -#: Template/TransactionCreations/create_multi.ctp:186 -msgid "Laufende Transaktionen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:21 -msgid "Zur Verfügung: " -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:31 -msgid "Nur die letzten 100 Einträge werden angezeigt!" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:38 -msgid "Eigene Einzahlungen" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:41 -#: Template/Users/statistics.ctp:65 -msgid "E-Mail" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:43 -msgid "Kommentar" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:44 -#: Template/StateBalances/overview_gdt.ctp:76 -msgid "Euro" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:45 -#: Template/StateBalances/overview_gdt.ctp:77 -msgid "Factor" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:46 -#: Template/StateBalances/overview_gdt.ctp:78 -msgid "GDT" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:71 -msgid "Einzahlungen anderer (Publisherprogramm)" -msgstr "" - -#: Template/StateBalances/overview_gdt.ctp:74 -msgid "Einzahlender" -msgstr "" - -#: Template/StateBalances/view.ctp:11 -msgid "Delete State Balance" -msgstr "" - -#: Template/StateBalances/view.ctp:31 -#: Template/StateUsers/view.ctp:33 -#: Template/TransactionCreations/view.ctp:36 -#: Template/TransactionSendCoins/view.ctp:36 -#: Template/Transactions/view.ctp:95 -#: Template/Transactions/view.ctp:209 -msgid "Amount" -msgstr "" - -#: Template/StateCreated/add.ctp:10 -#: Template/StateCreated/edit.ctp:16 -#: Template/StateCreated/view.ctp:12 -#: Template/StateUserRoles/index.ctp:15 -#: Template/StateUsers/add.ctp:15 -#: Template/StateUsers/edit.ctp:21 -#: Template/StateUsers/index.ctp:15 -#: Template/Transactions/add.ctp:15 -#: Template/Transactions/edit.ctp:21 -#: Template/Transactions/index.ctp:15 -#: Template/Transactions/view.ctp:18 -msgid "List State Created" -msgstr "" - -#: Template/StateCreated/add.ctp:11 -#: Template/StateCreated/edit.ctp:17 -#: Template/StateCreated/index.ctp:11 -#: Template/StateCreated/view.ctp:14 -#: Template/StateGroups/add.ctp:17 -#: Template/StateGroups/edit.ctp:23 -#: Template/StateGroups/index.ctp:17 -#: Template/StateGroups/view.ctp:20 -#: Template/StateUserTransactions/add.ctp:13 -#: Template/StateUserTransactions/edit.ctp:19 -#: Template/StateUserTransactions/index.ctp:13 -#: Template/StateUserTransactions/view.ctp:16 -#: Template/TransactionCreations/add.ctp:11 -#: Template/TransactionCreations/edit.ctp:17 -#: Template/TransactionCreations/index.ctp:11 -#: Template/TransactionCreations/view.ctp:14 -#: Template/TransactionGroupAddaddress/add.ctp:11 -#: Template/TransactionGroupAddaddress/edit.ctp:17 -#: Template/TransactionGroupAddaddress/index.ctp:11 -#: Template/TransactionGroupAddaddress/view.ctp:14 -#: Template/TransactionGroupAllowtrades/add.ctp:11 -#: Template/TransactionGroupAllowtrades/edit.ctp:17 -#: Template/TransactionGroupAllowtrades/index.ctp:11 -#: Template/TransactionGroupAllowtrades/view.ctp:14 -#: Template/TransactionGroupCreates/add.ctp:11 -#: Template/TransactionGroupCreates/edit.ctp:17 -#: Template/TransactionGroupCreates/index.ctp:11 -#: Template/TransactionGroupCreates/view.ctp:14 -#: Template/TransactionSendCoins/add.ctp:11 -#: Template/TransactionSendCoins/edit.ctp:17 -#: Template/TransactionSendCoins/index.ctp:11 -#: Template/TransactionSendCoins/view.ctp:14 -#: Template/TransactionSignatures/add.ctp:11 -#: Template/TransactionSignatures/edit.ctp:17 -#: Template/TransactionSignatures/index.ctp:11 -#: Template/TransactionSignatures/view.ctp:14 -#: Template/TransactionTypes/add.ctp:11 -#: Template/TransactionTypes/edit.ctp:17 -#: Template/TransactionTypes/index.ctp:11 -#: Template/TransactionTypes/view.ctp:14 -#: Template/Transactions/add.ctp:10 -#: Template/Transactions/edit.ctp:16 -#: Template/Transactions/view.ctp:12 -msgid "List Transactions" -msgstr "" - -#: Template/StateCreated/add.ctp:12 -#: Template/StateCreated/edit.ctp:18 -#: Template/StateCreated/index.ctp:12 -#: Template/StateCreated/view.ctp:15 -#: Template/StateGroups/add.ctp:18 -#: Template/StateGroups/edit.ctp:24 -#: Template/StateGroups/index.ctp:18 -#: Template/StateGroups/view.ctp:21 -#: Template/StateUserTransactions/add.ctp:14 -#: Template/StateUserTransactions/edit.ctp:20 -#: Template/StateUserTransactions/index.ctp:14 -#: Template/StateUserTransactions/view.ctp:17 -#: Template/TransactionCreations/add.ctp:12 -#: Template/TransactionCreations/edit.ctp:18 -#: Template/TransactionCreations/index.ctp:12 -#: Template/TransactionCreations/view.ctp:15 -#: Template/TransactionGroupAddaddress/add.ctp:12 -#: Template/TransactionGroupAddaddress/edit.ctp:18 -#: Template/TransactionGroupAddaddress/index.ctp:12 -#: Template/TransactionGroupAddaddress/view.ctp:15 -#: Template/TransactionGroupAllowtrades/add.ctp:12 -#: Template/TransactionGroupAllowtrades/edit.ctp:18 -#: Template/TransactionGroupAllowtrades/index.ctp:12 -#: Template/TransactionGroupAllowtrades/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:12 -#: Template/TransactionGroupCreates/edit.ctp:18 -#: Template/TransactionGroupCreates/index.ctp:12 -#: Template/TransactionGroupCreates/view.ctp:15 -#: Template/TransactionSendCoins/add.ctp:12 -#: Template/TransactionSendCoins/edit.ctp:18 -#: Template/TransactionSendCoins/index.ctp:12 -#: Template/TransactionSendCoins/view.ctp:15 -#: Template/TransactionSignatures/add.ctp:12 -#: Template/TransactionSignatures/edit.ctp:18 -#: Template/TransactionSignatures/index.ctp:12 -#: Template/TransactionSignatures/view.ctp:15 -#: Template/TransactionTypes/add.ctp:12 -#: Template/TransactionTypes/edit.ctp:18 -#: Template/TransactionTypes/index.ctp:12 -#: Template/TransactionTypes/view.ctp:15 -#: Template/Transactions/index.ctp:10 -#: Template/Transactions/view.ctp:13 -msgid "New Transaction" -msgstr "" - -#: Template/StateCreated/add.ctp:20 -msgid "Add State Created" -msgstr "" - -#: Template/StateCreated/edit.ctp:26 -#: Template/StateCreated/view.ctp:10 -msgid "Edit State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:10 -#: Template/StateCreated/view.ctp:13 -#: Template/StateUserRoles/index.ctp:16 -#: Template/StateUsers/add.ctp:16 -#: Template/StateUsers/edit.ctp:22 -#: Template/StateUsers/index.ctp:16 -#: Template/Transactions/add.ctp:16 -#: Template/Transactions/edit.ctp:22 -#: Template/Transactions/index.ctp:16 -#: Template/Transactions/view.ctp:19 -msgid "New State Created" -msgstr "" - -#: Template/StateCreated/index.ctp:18 -msgid "State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:11 -msgid "Delete State Created" -msgstr "" - -#: Template/StateCreated/view.ctp:24 -#: Template/StateUserTransactions/view.ctp:30 -#: Template/StateUsers/view.ctp:53 -#: Template/TransactionCreations/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:22 -#: Template/TransactionGroupCreates/view.ctp:24 -#: Template/TransactionSendCoins/view.ctp:24 -#: Template/TransactionSignatures/view.ctp:22 -msgid "Transaction" -msgstr "" - -#: Template/StateCreated/view.ctp:36 -#: Template/Transactions/view.ctp:61 -msgid "Month" -msgstr "" - -#: Template/StateCreated/view.ctp:40 -#: Template/Transactions/view.ctp:62 -msgid "Year" -msgstr "" - -#: Template/StateCreated/view.ctp:44 -#: Template/Transactions/view.ctp:65 -msgid "Short Ident Hash" -msgstr "" - -#: Template/StateErrors/add.ctp:10 -#: Template/StateErrors/edit.ctp:16 -#: Template/StateErrors/view.ctp:12 -msgid "List State Errors" -msgstr "" - -#: Template/StateErrors/add.ctp:13 -#: Template/StateErrors/edit.ctp:19 -#: Template/StateErrors/index.ctp:13 -#: Template/StateErrors/view.ctp:16 -#: Template/StateUserTransactions/add.ctp:15 -#: Template/StateUserTransactions/edit.ctp:21 -#: Template/StateUserTransactions/index.ctp:15 -#: Template/StateUserTransactions/view.ctp:18 -#: Template/TransactionTypes/add.ctp:10 -#: Template/TransactionTypes/edit.ctp:16 -#: Template/TransactionTypes/view.ctp:12 -#: Template/Transactions/add.ctp:13 -#: Template/Transactions/edit.ctp:19 -#: Template/Transactions/index.ctp:13 -#: Template/Transactions/view.ctp:16 -msgid "List Transaction Types" -msgstr "" - -#: Template/StateErrors/add.ctp:14 -#: Template/StateErrors/edit.ctp:20 -#: Template/StateErrors/index.ctp:14 -#: Template/StateErrors/view.ctp:17 -#: Template/StateUserTransactions/add.ctp:16 -#: Template/StateUserTransactions/edit.ctp:22 -#: Template/StateUserTransactions/index.ctp:16 -#: Template/StateUserTransactions/view.ctp:19 -#: Template/TransactionTypes/index.ctp:10 -#: Template/TransactionTypes/view.ctp:13 -#: Template/Transactions/add.ctp:14 -#: Template/Transactions/edit.ctp:20 -#: Template/Transactions/index.ctp:14 -#: Template/Transactions/view.ctp:17 -msgid "New Transaction Type" -msgstr "" - -#: Template/StateErrors/add.ctp:20 -msgid "Add State Error" -msgstr "" - -#: Template/StateErrors/edit.ctp:26 -#: Template/StateErrors/view.ctp:10 -msgid "Edit State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:10 -#: Template/StateErrors/view.ctp:13 -msgid "New State Error" -msgstr "" - -#: Template/StateErrors/index.ctp:18 -msgid "State Errors" -msgstr "" - -#: Template/StateErrors/show_for_user.ctp:9 -msgid "Fehlermeldungen" -msgstr "" - -#: Template/StateErrors/view.ctp:11 -msgid "Delete State Error" -msgstr "" - -#: Template/StateErrors/view.ctp:28 -#: Template/StateUserTransactions/view.ctp:34 -#: Template/Transactions/view.ctp:42 -msgid "Transaction Type" -msgstr "" - -#: Template/StateErrors/view.ctp:41 -msgid "Message Json" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:11 -#: Template/StateGroupAddresses/edit.ctp:17 -#: Template/StateGroupAddresses/index.ctp:11 -#: Template/StateGroupAddresses/view.ctp:14 -#: Template/StateGroups/add.ctp:10 -#: Template/StateGroups/edit.ctp:16 -#: Template/StateGroups/view.ctp:12 -#: Template/StateUserRoles/index.ctp:11 -#: Template/StateUsers/add.ctp:11 -#: Template/StateUsers/edit.ctp:17 -#: Template/StateUsers/index.ctp:11 -#: Template/StateUsers/view.ctp:14 -#: Template/TransactionGroupCreates/add.ctp:13 -#: Template/TransactionGroupCreates/edit.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:13 -#: Template/TransactionGroupCreates/view.ctp:16 -#: Template/Transactions/add.ctp:11 -#: Template/Transactions/edit.ctp:17 -#: Template/Transactions/index.ctp:11 -#: Template/Transactions/view.ctp:14 -msgid "List State Groups" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:12 -#: Template/StateGroupAddresses/edit.ctp:18 -#: Template/StateGroupAddresses/index.ctp:12 -#: Template/StateGroupAddresses/view.ctp:15 -#: Template/StateGroups/index.ctp:10 -#: Template/StateGroups/view.ctp:13 -#: Template/StateUserRoles/index.ctp:12 -#: Template/StateUsers/add.ctp:12 -#: Template/StateUsers/edit.ctp:18 -#: Template/StateUsers/index.ctp:12 -#: Template/StateUsers/view.ctp:15 -#: Template/TransactionGroupCreates/add.ctp:14 -#: Template/TransactionGroupCreates/edit.ctp:20 -#: Template/TransactionGroupCreates/index.ctp:14 -#: Template/TransactionGroupCreates/view.ctp:17 -#: Template/Transactions/add.ctp:12 -#: Template/Transactions/edit.ctp:18 -#: Template/Transactions/index.ctp:12 -#: Template/Transactions/view.ctp:15 -msgid "New State Group" -msgstr "" - -#: Template/StateGroupAddresses/add.ctp:20 -msgid "Add State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/edit.ctp:26 -#: Template/StateGroupAddresses/view.ctp:10 -msgid "Edit State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:18 -msgid "State Group Addresses" -msgstr "" - -#: Template/StateGroupAddresses/index.ctp:25 -#: Template/TransactionGroupAddaddress/index.ctp:25 -msgid "user public key" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:11 -msgid "Delete State Group Address" -msgstr "" - -#: Template/StateGroupAddresses/view.ctp:24 -#: Template/TransactionGroupAddaddress/view.ctp:28 -msgid "Address Type" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:10 -#: Template/StateGroupRelationships/edit.ctp:16 -#: Template/StateGroupRelationships/view.ctp:12 -msgid "List State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/add.ctp:16 -msgid "Add State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/edit.ctp:22 -#: Template/StateGroupRelationships/view.ctp:10 -msgid "Edit State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:10 -#: Template/StateGroupRelationships/view.ctp:13 -msgid "New State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/index.ctp:14 -msgid "State Group Relationships" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:11 -msgid "Delete State Group Relationship" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:24 -msgid "State Group1 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:28 -msgid "State Group2 Id" -msgstr "" - -#: Template/StateGroupRelationships/view.ctp:32 -msgid "State Relationship Id" -msgstr "" - -#: Template/StateGroups/add.ctp:15 -#: Template/StateGroups/edit.ctp:21 -#: Template/StateGroups/index.ctp:15 -#: Template/StateGroups/view.ctp:18 -#: Template/TransactionGroupCreates/add.ctp:10 -#: Template/TransactionGroupCreates/edit.ctp:16 -#: Template/TransactionGroupCreates/view.ctp:12 -#: Template/Transactions/add.ctp:23 -#: Template/Transactions/edit.ctp:29 -#: Template/Transactions/index.ctp:23 -#: Template/Transactions/view.ctp:26 -msgid "List Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/add.ctp:16 -#: Template/StateGroups/edit.ctp:22 -#: Template/StateGroups/index.ctp:16 -#: Template/StateGroups/view.ctp:19 -#: Template/TransactionGroupCreates/index.ctp:10 -#: Template/TransactionGroupCreates/view.ctp:13 -#: Template/Transactions/add.ctp:24 -#: Template/Transactions/edit.ctp:30 -#: Template/Transactions/index.ctp:24 -#: Template/Transactions/view.ctp:27 -msgid "New Transaction Group Create" -msgstr "" - -#: Template/StateGroups/add.ctp:24 -msgid "Add State Group" -msgstr "" - -#: Template/StateGroups/edit.ctp:30 -#: Template/StateGroups/view.ctp:10 -msgid "Edit State Group" -msgstr "" - -#: Template/StateGroups/index.ctp:22 -msgid "State Groups" -msgstr "" - -#: Template/StateGroups/view.ctp:11 -msgid "Delete State Group" -msgstr "" - -#: Template/StateGroups/view.ctp:36 -msgid "User Count" -msgstr "" - -#: Template/StateGroups/view.ctp:46 -#: Template/StateGroups/view.ctp:74 -#: Template/StateGroups/view.ctp:102 -#: Template/StateGroups/view.ctp:129 -#: Template/TransactionTypes/view.ctp:40 -#: Template/Transactions/view.ctp:178 -msgid "State Group Id" -msgstr "" - -#: Template/StateGroups/view.ctp:68 -msgid "Related State Users" -msgstr "" - -#: Template/StateGroups/view.ctp:73 -msgid "Index Id" -msgstr "" - -#: Template/StateGroups/view.ctp:95 -#: Template/Transactions/view.ctp:171 -msgid "Related Transaction Group Creates" -msgstr "" - -#: Template/StateGroups/view.ctp:101 -#: Template/Transactions/view.ctp:177 -msgid "Group Public Key" -msgstr "" - -#: Template/StateGroups/view.ctp:124 -#: Template/TransactionTypes/view.ctp:35 -msgid "Related Transactions" -msgstr "" - -#: Template/StateGroups/view.ctp:130 -#: Template/TransactionTypes/view.ctp:41 -msgid "Transaction Type Id" -msgstr "" - -#: Template/StateGroups/view.ctp:131 -#: Template/TransactionTypes/view.ctp:42 -msgid "Tx Hash" -msgstr "" - -#: Template/StateGroups/view.ctp:132 -#: Template/TransactionTypes/view.ctp:43 -#: Template/Transactions/view.ctp:50 -msgid "Received" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:10 -#: Template/StateRelationshipTypes/edit.ctp:16 -#: Template/StateRelationshipTypes/view.ctp:12 -msgid "List State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/add.ctp:16 -msgid "Add State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/edit.ctp:22 -#: Template/StateRelationshipTypes/view.ctp:10 -msgid "Edit State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:10 -#: Template/StateRelationshipTypes/view.ctp:13 -msgid "New State Relationship Type" -msgstr "" - -#: Template/StateRelationshipTypes/index.ctp:14 -msgid "State Relationship Types" -msgstr "" - -#: Template/StateRelationshipTypes/view.ctp:11 -msgid "Delete State Relationship Type" -msgstr "" - -#: Template/StateUserRoles/assign_role.ctp:9 -#: Template/StateUserRoles/assign_role.ctp:46 -#: Template/StateUserRoles/search.ctp:47 -msgid "Assign Role" -msgstr "" - -#: Template/StateUserRoles/index.ctp:17 -#: Template/StateUsers/add.ctp:17 -#: Template/StateUsers/edit.ctp:23 -#: Template/StateUsers/index.ctp:17 -#: Template/StateUsers/view.ctp:18 -#: Template/TransactionCreations/add.ctp:10 -#: Template/TransactionCreations/edit.ctp:16 -#: Template/TransactionCreations/view.ctp:12 -#: Template/Transactions/add.ctp:17 -#: Template/Transactions/edit.ctp:23 -#: Template/Transactions/index.ctp:17 -#: Template/Transactions/view.ctp:20 -msgid "List Transaction Creations" -msgstr "" - -#: Template/StateUserRoles/index.ctp:18 -#: Template/StateUsers/add.ctp:18 -#: Template/StateUsers/edit.ctp:24 -#: Template/StateUsers/index.ctp:18 -#: Template/StateUsers/view.ctp:19 -#: Template/TransactionCreations/index.ctp:10 -#: Template/TransactionCreations/view.ctp:13 -#: Template/Transactions/add.ctp:18 -#: Template/Transactions/edit.ctp:24 -#: Template/Transactions/index.ctp:18 -#: Template/Transactions/view.ctp:21 -msgid "New Transaction Creation" -msgstr "" - -#: Template/StateUserRoles/index.ctp:19 -#: Template/StateUsers/add.ctp:19 -#: Template/StateUsers/edit.ctp:25 -#: Template/StateUsers/index.ctp:19 -#: Template/StateUsers/view.ctp:20 -#: Template/TransactionSendCoins/add.ctp:10 -#: Template/TransactionSendCoins/edit.ctp:16 -#: Template/TransactionSendCoins/view.ctp:12 -#: Template/Transactions/add.ctp:25 -#: Template/Transactions/edit.ctp:31 -#: Template/Transactions/index.ctp:25 -#: Template/Transactions/view.ctp:28 -msgid "List Transaction Send Coins" -msgstr "" - -#: Template/StateUserRoles/index.ctp:20 -#: Template/StateUsers/add.ctp:20 -#: Template/StateUsers/edit.ctp:26 -#: Template/StateUsers/index.ctp:20 -#: Template/StateUsers/view.ctp:21 -#: Template/TransactionSendCoins/index.ctp:10 -#: Template/TransactionSendCoins/view.ctp:13 -#: Template/Transactions/add.ctp:26 -#: Template/Transactions/edit.ctp:32 -#: Template/Transactions/index.ctp:26 -#: Template/Transactions/view.ctp:29 -msgid "New Transaction Send Coin" -msgstr "" - -#: Template/StateUserRoles/index.ctp:24 -#: Template/StateUserRoles/search.ctp:25 -#: Template/StateUsers/index.ctp:24 -msgid "State Users" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 -#: Template/StateUsers/search.ctp:57 -msgid "Suchbegriff" -msgstr "" - -#: Template/StateUserRoles/search.ctp:19 -#: Template/StateUsers/search.ctp:57 -msgid "Vorname/Nachname/E-Mail" -msgstr "" - -#: Template/StateUserRoles/search.ctp:20 -#: Template/StateUsers/search.ctp:59 -#: Template/TransactionCreations/create_multi.ctp:35 -msgid "Suchen" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:10 -#: Template/StateUserTransactions/edit.ctp:16 -#: Template/StateUserTransactions/view.ctp:12 -msgid "List State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/add.ctp:22 -msgid "Add State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/edit.ctp:28 -#: Template/StateUserTransactions/view.ctp:10 -msgid "Edit State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:10 -#: Template/StateUserTransactions/view.ctp:13 -msgid "New State User Transaction" -msgstr "" - -#: Template/StateUserTransactions/index.ctp:20 -msgid "State User Transactions" -msgstr "" - -#: Template/StateUserTransactions/view.ctp:11 -msgid "Delete State User Transaction" -msgstr "" - -#: Template/StateUsers/add.ctp:26 -msgid "Add State User" -msgstr "" - -#: Template/StateUsers/edit.ctp:32 -#: Template/StateUsers/view.ctp:10 -msgid "Edit State User" -msgstr "" - -#: Template/StateUsers/search.ctp:16 -msgid "Alle" -msgstr "" - -#: Template/StateUsers/search.ctp:21 -msgid "Konto nicht aktiviert" -msgstr "" - -#: Template/StateUsers/search.ctp:58 -msgid "Konto Status" -msgstr "" - -#: Template/StateUsers/view.ctp:11 -msgid "Delete State User" -msgstr "" - -#: Template/StateUsers/view.ctp:28 -msgid "State Balance" -msgstr "" - -#: Template/StateUsers/view.ctp:32 -msgid "Letztes Update" -msgstr "" - -#: Template/StateUsers/view.ctp:49 -msgid "Schöpfungen" -msgstr "" - -#: Template/StateUsers/view.ctp:54 -#: Template/StateUsers/view.ctp:84 -#: Template/StateUsers/view.ctp:118 -msgid "Erhalten" -msgstr "" - -#: Template/StateUsers/view.ctp:55 -msgid "Verrechnungs-Datum" -msgstr "" - -#: Template/StateUsers/view.ctp:79 -msgid "Versendete Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:85 -msgid "Empfänger " -msgstr "" - -#: Template/StateUsers/view.ctp:88 -msgid "Betrag nach Senden" -msgstr "" - -#: Template/StateUsers/view.ctp:113 -msgid "Empfangende Überweisungen" -msgstr "" - -#: Template/StateUsers/view.ctp:119 -msgid "Sender" -msgstr "" - -#: Template/TransactionCreations/add.ctp:20 -msgid "Add Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/create.ctp:17 -#: Template/TransactionCreations/create_multi.ctp:17 -msgid "Schöpfungstransaktion" -msgstr "" - -#: Template/TransactionCreations/create.ctp:28 -#: Template/TransactionCreations/create_multi.ctp:125 -msgid "Transaktion(en) abschließen" -msgstr "" - -#: Template/TransactionCreations/create.ctp:29 -#: Template/TransactionCreations/create_multi.ctp:126 -#: Template/TransactionSendCoins/create.ctp:24 -msgid "Weitere Transaktion erstellen" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:34 -msgid "Suche" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:38 -msgid "Memo" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:39 -#: Template/TransactionSendCoins/create.ctp:22 -#: Template/TransactionSendCoins/create_raw.ctp:33 -msgid "Betrag in GDD" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:46 -msgid "Zieldatum" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:81 -msgid "Für benutzerdefinierten Betrag" -msgstr "" - -#: Template/TransactionCreations/create_multi.ctp:189 -msgid "Alle Transaktionen abgeschlossen!" -msgstr "" - -#: Template/TransactionCreations/edit.ctp:26 -#: Template/TransactionCreations/view.ctp:10 -msgid "Edit Transaction Creation" -msgstr "" - -#: Template/TransactionCreations/index.ctp:18 -msgid "Transaction Creations" -msgstr "" - -#: Template/TransactionCreations/view.ctp:11 -msgid "Delete Transaction Creation" -msgstr "" - -#: Template/TransactionGroupAddaddress/add.ctp:20 -msgid "Add Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/edit.ctp:26 -#: Template/TransactionGroupAddaddress/view.ctp:10 -msgid "Edit Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAddaddress/index.ctp:18 -msgid "Transaction Group Addaddress" -msgstr "" - -#: Template/TransactionGroupAddaddress/view.ctp:11 -msgid "Delete Transaction Group Addaddres" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:10 -#: Template/TransactionGroupAllowtrades/edit.ctp:16 -#: Template/TransactionGroupAllowtrades/view.ctp:12 -#: Template/Transactions/add.ctp:21 -#: Template/Transactions/edit.ctp:27 -#: Template/Transactions/index.ctp:21 -#: Template/Transactions/view.ctp:24 -msgid "List Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/add.ctp:18 -msgid "Add Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/edit.ctp:24 -#: Template/TransactionGroupAllowtrades/view.ctp:10 -msgid "Edit Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:10 -#: Template/TransactionGroupAllowtrades/view.ctp:13 -#: Template/Transactions/add.ctp:22 -#: Template/Transactions/edit.ctp:28 -#: Template/Transactions/index.ctp:22 -#: Template/Transactions/view.ctp:25 -msgid "New Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/index.ctp:16 -msgid "Transaction Group Allowtrades" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:11 -msgid "Delete Transaction Group Allowtrade" -msgstr "" - -#: Template/TransactionGroupAllowtrades/view.ctp:34 -#: Template/Transactions/view.ctp:151 -msgid "Allow" -msgstr "" - -#: Template/TransactionGroupCreates/add.ctp:20 -msgid "Add Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/edit.ctp:26 -#: Template/TransactionGroupCreates/view.ctp:10 -msgid "Edit Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/index.ctp:18 -msgid "Transaction Group Creates" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:11 -msgid "Delete Transaction Group Create" -msgstr "" - -#: Template/TransactionGroupCreates/view.ctp:28 -#: Template/Transactions/view.ctp:38 -msgid "State Group" -msgstr "" - -#: Template/TransactionSendCoins/add.ctp:20 -msgid "Add Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:19 -msgid "Empfänger" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:20 -msgid "Community Alias" -msgstr "" - -#: Template/TransactionSendCoins/create.ctp:23 -#: Template/TransactionSendCoins/create_raw.ctp:34 -msgid "Transaktion abschließen" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:29 -msgid "Sender Private Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:30 -msgid "Sender Public Key" -msgstr "" - -#: Template/TransactionSendCoins/create_raw.ctp:31 -msgid "Empfänger Public Key" -msgstr "" - -#: Template/TransactionSendCoins/edit.ctp:26 -#: Template/TransactionSendCoins/view.ctp:10 -msgid "Edit Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/index.ctp:18 -msgid "Transaction Send Coins" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:11 -msgid "Delete Transaction Send Coin" -msgstr "" - -#: Template/TransactionSendCoins/view.ctp:40 -#: Template/Transactions/view.ctp:210 -msgid "Sender Final Balance" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:10 -#: Template/TransactionSignatures/edit.ctp:16 -#: Template/TransactionSignatures/view.ctp:12 -#: Template/Transactions/add.ctp:27 -#: Template/Transactions/edit.ctp:33 -#: Template/Transactions/index.ctp:27 -#: Template/Transactions/view.ctp:30 -msgid "List Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/add.ctp:18 -msgid "Add Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/edit.ctp:24 -#: Template/TransactionSignatures/view.ctp:10 -msgid "Edit Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:10 -#: Template/TransactionSignatures/view.ctp:13 -#: Template/Transactions/add.ctp:28 -#: Template/Transactions/edit.ctp:34 -#: Template/Transactions/index.ctp:28 -#: Template/Transactions/view.ctp:31 -msgid "New Transaction Signature" -msgstr "" - -#: Template/TransactionSignatures/index.ctp:16 -msgid "Transaction Signatures" -msgstr "" - -#: Template/TransactionSignatures/view.ctp:11 -msgid "Delete Transaction Signature" -msgstr "" - -#: Template/TransactionTypes/add.ctp:18 -msgid "Add Transaction Type" -msgstr "" - -#: Template/TransactionTypes/edit.ctp:24 -#: Template/TransactionTypes/view.ctp:10 -msgid "Edit Transaction Type" -msgstr "" - -#: Template/TransactionTypes/index.ctp:16 -msgid "Transaction Types" -msgstr "" - -#: Template/TransactionTypes/view.ctp:11 -msgid "Delete Transaction Type" -msgstr "" - -#: Template/Transactions/add.ctp:34 -msgid "Add Transaction" -msgstr "" - -#: Template/Transactions/edit.ctp:40 -#: Template/Transactions/view.ctp:10 -msgid "Edit Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:26 -msgid "Creation Transaction" -msgstr "" - -#: Template/Transactions/manual_transaction.ctp:41 -msgid "Transfer Transaction" -msgstr "" - -#: Template/Transactions/send_to_node.ctp:8 -msgid "Transaktionen an Gradido-Node senden" -msgstr "" - -#: Template/Transactions/synchronize_with_state_user_transactions.ctp:44 -msgid "Synchronize" -msgstr "" - -#: Template/Transactions/view.ctp:11 -msgid "Delete Transaction" -msgstr "" - -#: Template/Transactions/view.ctp:55 -msgid "Related State Created" -msgstr "" - -#: Template/Transactions/view.ctp:88 -msgid "Related Transaction Creations" -msgstr "" - -#: Template/Transactions/view.ctp:96 -msgid "Ident Hash" -msgstr "" - -#: Template/Transactions/view.ctp:144 -msgid "Related Transaction Group Allowtrades" -msgstr "" - -#: Template/Transactions/view.ctp:200 -msgid "Related Transaction Send Coins" -msgstr "" - -#: Template/Transactions/view.ctp:207 -msgid "Receiver Public Key" -msgstr "" - -#: Template/Transactions/view.ctp:208 -msgid "Receiver User Id" -msgstr "" - -#: Template/Transactions/view.ctp:233 -msgid "Related Transaction Signatures" -msgstr "" - -#: Template/Transactions/view.ctp:239 -msgid "Signature" -msgstr "" - -#: Template/Transactions/view.ctp:240 -msgid "Pubkey" -msgstr "" - -#: Template/Users/add.ctp:10 -#: Template/Users/edit.ctp:16 -#: Template/Users/view.ctp:12 -msgid "List Users" -msgstr "" - -#: Template/Users/add.ctp:16 -msgid "Add User" -msgstr "" - -#: Template/Users/edit.ctp:22 -#: Template/Users/view.ctp:10 -msgid "Edit User" -msgstr "" - -#: Template/Users/index.ctp:10 -#: Template/Users/view.ctp:13 -msgid "New User" -msgstr "" - -#: Template/Users/index.ctp:14 -msgid "Users" -msgstr "" - -#: Template/Users/statistics.ctp:9 -msgid "Benutzer Statistiken" -msgstr "" - -#: Template/Users/statistics.ctp:39 -msgid "Alle Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:56 -msgid "Anmeldungen im Vergleich zum letzten Monat, 0% = gleiche Anzahl" -msgstr "" - -#: Template/Users/statistics.ctp:61 -msgid "Letzte Anmeldungen" -msgstr "" - -#: Template/Users/statistics.ctp:66 -msgid "Erstellt" -msgstr "" - -#: Template/Users/statistics.ctp:79 -msgid "Anmeldungen detailliert" -msgstr "" - -#: Template/Users/statistics.ctp:82 -msgid "Jahr" -msgstr "" - -#: Template/Users/statistics.ctp:83 -msgid "Monat" -msgstr "" - -#: Template/Users/statistics.ctp:84 -msgid "Anzahl Anmeldungen" -msgstr "" - -#: Template/Users/view.ctp:11 -msgid "Delete User" -msgstr "" - -#: Template/Users/view.ctp:24 -msgid "First Name" -msgstr "" - -#: Template/Users/view.ctp:28 -msgid "Last Name" -msgstr "" - -#: Template/Users/view.ctp:32 -msgid "Language" -msgstr "" - -#: Template/Users/view.ctp:48 -msgid "Email Checked" -msgstr "" - diff --git a/community_server/src/Model/Behavior/empty b/community_server/src/Model/Behavior/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/src/Model/Entity/AddressType.php b/community_server/src/Model/Entity/AddressType.php deleted file mode 100644 index 87d64d61a..000000000 --- a/community_server/src/Model/Entity/AddressType.php +++ /dev/null @@ -1,33 +0,0 @@ - true, - 'text' => true, - 'state_group_addresses' => true, - 'transaction_group_addaddress' => true, - ]; -} diff --git a/community_server/src/Model/Entity/AdminError.php b/community_server/src/Model/Entity/AdminError.php deleted file mode 100644 index 23c60fd4a..000000000 --- a/community_server/src/Model/Entity/AdminError.php +++ /dev/null @@ -1,41 +0,0 @@ - true, - 'controller' => true, - 'action' => true, - 'state' => true, - 'msg' => true, - 'details' => true, - 'created' => true, - 'state_user' => true - ]; -} diff --git a/community_server/src/Model/Entity/BlockchainType.php b/community_server/src/Model/Entity/BlockchainType.php deleted file mode 100644 index c2e21402c..000000000 --- a/community_server/src/Model/Entity/BlockchainType.php +++ /dev/null @@ -1,30 +0,0 @@ - true, - 'text' => true, - 'symbol' => true, - ]; -} diff --git a/community_server/src/Model/Entity/CommunityProfile.php b/community_server/src/Model/Entity/CommunityProfile.php deleted file mode 100644 index 367fe713c..000000000 --- a/community_server/src/Model/Entity/CommunityProfile.php +++ /dev/null @@ -1,30 +0,0 @@ - true, - 'profile_img' => true, - 'profile_desc' => true, - ]; -} diff --git a/community_server/src/Model/Entity/ElopageBuy.php b/community_server/src/Model/Entity/ElopageBuy.php deleted file mode 100644 index eca2f760b..000000000 --- a/community_server/src/Model/Entity/ElopageBuy.php +++ /dev/null @@ -1,57 +0,0 @@ - true, - 'affiliate_program_id' => true, - 'publisher_id' => true, - 'order_id' => true, - 'product_id' => true, - 'product_price' => true, - 'payer_email' => true, - 'publisher_email' => true, - 'payed' => true, - 'success_date' => true, - 'event' => true, - 'elopage_user' => true, - 'affiliate_program' => true, - 'publisher' => true, - 'order' => true, - 'product' => true, - ]; -} diff --git a/community_server/src/Model/Entity/Operator.php b/community_server/src/Model/Entity/Operator.php deleted file mode 100644 index 9d5ddd3ca..000000000 --- a/community_server/src/Model/Entity/Operator.php +++ /dev/null @@ -1,32 +0,0 @@ - true, - 'user_pubkey' => true, - 'operator_type_id' => true, - 'data_base64' => true, - 'modified' => true - ]; -} diff --git a/community_server/src/Model/Entity/OperatorType.php b/community_server/src/Model/Entity/OperatorType.php deleted file mode 100644 index 0ca968f47..000000000 --- a/community_server/src/Model/Entity/OperatorType.php +++ /dev/null @@ -1,31 +0,0 @@ - true, - 'text' => true, - 'operators' => true - ]; -} diff --git a/community_server/src/Model/Entity/Role.php b/community_server/src/Model/Entity/Role.php deleted file mode 100644 index ae0ddd0ba..000000000 --- a/community_server/src/Model/Entity/Role.php +++ /dev/null @@ -1,26 +0,0 @@ - true, - ]; -} diff --git a/community_server/src/Model/Entity/ServerUser.php b/community_server/src/Model/Entity/ServerUser.php deleted file mode 100644 index f1d47fd34..000000000 --- a/community_server/src/Model/Entity/ServerUser.php +++ /dev/null @@ -1,57 +0,0 @@ - true, - 'password' => true, - 'email' => true, - 'role' => true, - 'activated' => true, - 'last_login' => true, - 'created' => true, - 'modified' => true - ]; - - /** - * Fields that are excluded from JSON versions of the entity. - * - * @var array - */ - protected $_hidden = [ - 'password' - ]; - - protected function _setPassword($password) - { - if (strlen($password) > 0) { - return (new DefaultPasswordHasher)->hash($password); - } - } -} diff --git a/community_server/src/Model/Entity/StateBalance.php b/community_server/src/Model/Entity/StateBalance.php deleted file mode 100644 index 334db222f..000000000 --- a/community_server/src/Model/Entity/StateBalance.php +++ /dev/null @@ -1,89 +0,0 @@ - true, - 'modified' => true, - 'record_date' => true, - 'amount' => true, - 'record_date' => true, - 'state_user' => true - ]; - - protected $_virtual = ['decay','amount_float']; - - private function convertToTimestamp($dateOrTime) - { - if(method_exists($dateOrTime, 'getTimestamp')) { - return $dateOrTime->getTimestamp(); - } else if(method_exists($dateOrTime, 'i18nFormat')) { - return $dateOrTime->i18nFormat(Time::UNIX_TIMESTAMP_FORMAT); - } else { - return 0; - } - } - - protected function _getDecay() - { - // decay factor in seconds per year - // q = e^((lg Kn - lg K0) / n) - // 0.999999978 - // - // SELECT TIMESTAMPDIFF(SECOND, modified, CURDATE()) AS age_in_seconds from state_balances - // decay_for_duration = decay_factor^seconds - // decay = gradido_cent * decay_for_duration - $startDate = $this->convertToTimestamp($this->record_date); - if($startDate == 0) { - return $this->amount; - } - - $decay_duration = intval(Time::now()->getTimestamp() - $startDate); - if($decay_duration === 0) { - return $this->amount; - } - //return $this->amount; - return intval($this->amount * pow(0.99999997802044727, $decay_duration)); - - } - - public function partDecay($target_date) - { - $decay_duration = intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date)); - if($decay_duration <= 0) { - return $this->amount; - } - //return 0; - return intval($this->amount * pow(0.99999997802044727, $decay_duration)); - } - - public function decayDuration($target_date) - { - return intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date)); - } -} - diff --git a/community_server/src/Model/Entity/StateCreated.php b/community_server/src/Model/Entity/StateCreated.php deleted file mode 100644 index 99c783e6c..000000000 --- a/community_server/src/Model/Entity/StateCreated.php +++ /dev/null @@ -1,41 +0,0 @@ - true, - 'month' => true, - 'year' => true, - 'state_user_id' => true, - 'created' => true, - 'short_ident_hash' => true, - 'transaction' => true, - 'state_user' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateError.php b/community_server/src/Model/Entity/StateError.php deleted file mode 100644 index 448e9ccb3..000000000 --- a/community_server/src/Model/Entity/StateError.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'transaction_type_id' => true, - 'created' => true, - 'message_json' => true, - 'state_user' => true, - 'transaction_type' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateGroup.php b/community_server/src/Model/Entity/StateGroup.php deleted file mode 100644 index c2bdc75fc..000000000 --- a/community_server/src/Model/Entity/StateGroup.php +++ /dev/null @@ -1,43 +0,0 @@ - true, - 'name' => true, - 'root_public_key' => true, - 'user_count' => true, - 'index' => true, - 'state_group_addresses' => true, - 'state_users' => true, - 'transaction_group_creates' => true, - 'transactions' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateGroupAddress.php b/community_server/src/Model/Entity/StateGroupAddress.php deleted file mode 100644 index e2d669d09..000000000 --- a/community_server/src/Model/Entity/StateGroupAddress.php +++ /dev/null @@ -1,35 +0,0 @@ - true, - 'public_key' => true, - 'address_type_id' => true, - 'state_group' => true, - 'address_type' => true, - ]; -} diff --git a/community_server/src/Model/Entity/StateGroupRelationship.php b/community_server/src/Model/Entity/StateGroupRelationship.php deleted file mode 100644 index 974b1375d..000000000 --- a/community_server/src/Model/Entity/StateGroupRelationship.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'state_group2_id' => true, - 'state_relationship_id' => true, - 'state_group1' => true, - 'state_group2' => true, - 'state_relationship' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateRelationshipType.php b/community_server/src/Model/Entity/StateRelationshipType.php deleted file mode 100644 index f3c70d31e..000000000 --- a/community_server/src/Model/Entity/StateRelationshipType.php +++ /dev/null @@ -1,28 +0,0 @@ - true, - 'text' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateUser.php b/community_server/src/Model/Entity/StateUser.php deleted file mode 100644 index 5fac7cda7..000000000 --- a/community_server/src/Model/Entity/StateUser.php +++ /dev/null @@ -1,58 +0,0 @@ - true, - 'state_group_id' => true, - 'public_key' => true, - 'email' => true, - 'first_name' => true, - 'last_name' => true, - 'disabled' => true, - 'username' => true, - 'index' => true, - 'state_group' => true, - 'state_balances' => true, - 'state_created' => true, - 'transaction_creations' => true, - 'transaction_send_coins' => true - ]; - - public function getEmailWithName() - { - return $this->first_name . ' ' . $this->last_name . ' <' . $this->email . '>'; - } - - public function getNames() - { - return $this->first_name . ' ' . $this->last_name; - } -} diff --git a/community_server/src/Model/Entity/StateUserRole.php b/community_server/src/Model/Entity/StateUserRole.php deleted file mode 100644 index d510bb025..000000000 --- a/community_server/src/Model/Entity/StateUserRole.php +++ /dev/null @@ -1,30 +0,0 @@ - true, - 'role_id' => true - ]; -} diff --git a/community_server/src/Model/Entity/StateUserTransaction.php b/community_server/src/Model/Entity/StateUserTransaction.php deleted file mode 100644 index 9fed345a5..000000000 --- a/community_server/src/Model/Entity/StateUserTransaction.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'transaction_id' => true, - 'transaction_type_id' => true, - 'state_user' => true, - 'transaction' => true, - 'transaction_type' => true, - ]; -} diff --git a/community_server/src/Model/Entity/Transaction.php b/community_server/src/Model/Entity/Transaction.php deleted file mode 100644 index 209b8997e..000000000 --- a/community_server/src/Model/Entity/Transaction.php +++ /dev/null @@ -1,53 +0,0 @@ - true, - 'transaction_type_id' => true, - 'tx_hash' => true, - 'memo' => true, - 'received' => true, - 'blockchain_type_id' => true, - 'state_group' => true, - 'transaction_type' => true, - 'state_created' => true, - 'transaction_creations' => true, - 'transaction_group_addaddress' => true, - 'transaction_group_allowtrades' => true, - 'transaction_group_creates' => true, - 'transaction_send_coins' => true, - 'transaction_signatures' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionCreation.php b/community_server/src/Model/Entity/TransactionCreation.php deleted file mode 100644 index 36aa7ac2d..000000000 --- a/community_server/src/Model/Entity/TransactionCreation.php +++ /dev/null @@ -1,39 +0,0 @@ - true, - 'state_user_id' => true, - 'amount' => true, - 'ident_hash' => true, - 'transaction' => true, - 'state_user' => true, - 'target_date' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionGroupAddaddres.php b/community_server/src/Model/Entity/TransactionGroupAddaddres.php deleted file mode 100644 index 30819209f..000000000 --- a/community_server/src/Model/Entity/TransactionGroupAddaddres.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'address_type_id' => true, - 'remove_from_group' => true, - 'public_key' => true, - 'transaction' => true, - 'address_type' => true, - 'state_user_id' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionGroupAllowtrade.php b/community_server/src/Model/Entity/TransactionGroupAllowtrade.php deleted file mode 100644 index d097c643f..000000000 --- a/community_server/src/Model/Entity/TransactionGroupAllowtrade.php +++ /dev/null @@ -1,35 +0,0 @@ - true, - 'group_id' => true, - 'allow' => true, - 'transaction' => true, - 'group' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionGroupCreate.php b/community_server/src/Model/Entity/TransactionGroupCreate.php deleted file mode 100644 index 26fab510b..000000000 --- a/community_server/src/Model/Entity/TransactionGroupCreate.php +++ /dev/null @@ -1,37 +0,0 @@ - true, - 'group_public_key' => true, - 'state_group_id' => true, - 'name' => true, - 'transaction' => true, - 'state_group' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionSendCoin.php b/community_server/src/Model/Entity/TransactionSendCoin.php deleted file mode 100644 index 4d774501e..000000000 --- a/community_server/src/Model/Entity/TransactionSendCoin.php +++ /dev/null @@ -1,43 +0,0 @@ - true, - 'state_user_id' => true, - 'receiver_public_key' => true, - 'receiver_user_id' => true, - 'amount' => true, - 'sender_final_balance' => true, - 'transaction' => true, - 'state_user' => true, - 'receiver_user' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionSignature.php b/community_server/src/Model/Entity/TransactionSignature.php deleted file mode 100644 index 16bce8b00..000000000 --- a/community_server/src/Model/Entity/TransactionSignature.php +++ /dev/null @@ -1,33 +0,0 @@ - true, - 'signature' => true, - 'pubkey' => true, - 'transaction' => true - ]; -} diff --git a/community_server/src/Model/Entity/TransactionType.php b/community_server/src/Model/Entity/TransactionType.php deleted file mode 100644 index b8f13e474..000000000 --- a/community_server/src/Model/Entity/TransactionType.php +++ /dev/null @@ -1,31 +0,0 @@ - true, - 'text' => true, - 'transactions' => true - ]; -} diff --git a/community_server/src/Model/Entity/User.php b/community_server/src/Model/Entity/User.php deleted file mode 100644 index 352371471..000000000 --- a/community_server/src/Model/Entity/User.php +++ /dev/null @@ -1,58 +0,0 @@ - true, - 'first_name' => true, - 'last_name' => true, - 'password' => true, - 'pubkey' => true, - 'privkey' => true, - 'created' => true, - 'email_checked' => true, - 'language' => true, - 'email_opt_in' => true, - 'user_backups' => true, - 'user_roles' => true, - ]; - - /** - * Fields that are excluded from JSON versions of the entity. - * - * @var array - */ - protected $_hidden = [ - 'password', - ]; -} diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php deleted file mode 100644 index 60fa5f22b..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php +++ /dev/null @@ -1,39 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0aca030a186772616469646f2f426173696354797065732e70726f746f12" . - "0d70726f746f2e6772616469646f22380a034b657912110a076564323535" . - "313918022001280c480012170a0d656432353531395f7265663130180320" . - "01280c480042050a036b657922580a0d5369676e61747572655061697212" . - "0e0a067075624b657918012001280c12110a076564323535313918022001" . - "280c480012170a0d656432353531395f726566313018032001280c480042" . - "0b0a097369676e6174757265223d0a0c5369676e61747572654d6170122d" . - "0a077369675061697218012003280b321c2e70726f746f2e677261646964" . - "6f2e5369676e617475726550616972222b0a0954696d657374616d70120f" . - "0a077365636f6e6473180120012803120d0a056e616e6f73180220012805" . - "22230a1054696d657374616d705365636f6e6473120f0a077365636f6e64" . - "7318012001280322300a0e5472616e73666572416d6f756e74120e0a0670" . - "75626b657918012001280c120e0a06616d6f756e7418022001281222400a" . - "08486564657261494412100a0873686172644e756d18012001280312100a" . - "087265616c6d4e756d18022001280312100a08746f7069634e756d180320" . - "012803620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php deleted file mode 100644 index ebe7409db..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ab0010a1d6772616469646f2f4772616469646f4372656174696f6e2e70" . - "726f746f120d70726f746f2e6772616469646f22780a0f4772616469646f" . - "4372656174696f6e122f0a08726563656976657218012001280b321d2e70" . - "726f746f2e6772616469646f2e5472616e73666572416d6f756e7412340a" . - "0b7461726765745f6461746518032001280b321f2e70726f746f2e677261" . - "6469646f2e54696d657374616d705365636f6e6473620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php deleted file mode 100644 index 78460bd9f..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php +++ /dev/null @@ -1,29 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0a91010a206772616469646f2f4772616469646f5472616e73616374696f" . - "6e2e70726f746f120d70726f746f2e6772616469646f22560a1247726164" . - "69646f5472616e73616374696f6e122c0a077369675f6d61701801200128" . - "0b321b2e70726f746f2e6772616469646f2e5369676e61747572654d6170" . - "12120a0a626f64795f627974657318022001280c620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php deleted file mode 100644 index 6d7e6e375..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php +++ /dev/null @@ -1,41 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ae6030a1d6772616469646f2f4772616469646f5472616e736665722e70" . - "726f746f120d70726f746f2e6772616469646f22500a0d4c6f63616c5472" . - "616e73666572122d0a0673656e64657218012001280b321d2e70726f746f" . - "2e6772616469646f2e5472616e73666572416d6f756e7412100a08726563" . - "656976657218022001280c22a3010a1243726f737347726f75705472616e" . - "73666572122d0a0673656e64657218012001280b321d2e70726f746f2e67" . - "72616469646f2e5472616e73666572416d6f756e7412100a087265636569" . - "76657218022001280c12130a0b6f746865725f67726f7570180320012809" . - "12370a157061697265645f7472616e73616374696f6e5f69641804200128" . - "0b32182e70726f746f2e6772616469646f2e54696d657374616d7022b501" . - "0a0f4772616469646f5472616e73666572122d0a056c6f63616c18012001" . - "280b321c2e70726f746f2e6772616469646f2e4c6f63616c5472616e7366" . - "6572480012340a07696e626f756e6418022001280b32212e70726f746f2e" . - "6772616469646f2e43726f737347726f75705472616e7366657248001235" . - "0a086f7574626f756e6418032001280b32212e70726f746f2e6772616469" . - "646f2e43726f737347726f75705472616e73666572480042060a04646174" . - "61620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php deleted file mode 100644 index 929e33b9d..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ac6010a206772616469646f2f47726f7570467269656e64735570646174" . - "652e70726f746f120d70726f746f2e6772616469646f228a010a1247726f" . - "7570467269656e6473557064617465120d0a0567726f7570180120012809" . - "12380a06616374696f6e18022001280e32282e70726f746f2e6772616469" . - "646f2e47726f7570467269656e64735570646174652e416374696f6e222b" . - "0a06416374696f6e120e0a0a4144445f465249454e44100012110a0d5245" . - "4d4f56455f465249454e441001620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php deleted file mode 100644 index c2a308292..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php +++ /dev/null @@ -1,36 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ad2020a1f6772616469646f2f47726f75704d656d626572557064617465" . - "2e70726f746f120d70726f746f2e6772616469646f2297020a1147726f75" . - "704d656d62657255706461746512130a0b757365725f7075626b65791801" . - "2001280c124d0a126d656d6265725f7570646174655f7479706518022001" . - "280e32312e70726f746f2e6772616469646f2e47726f75704d656d626572" . - "5570646174652e4d656d6265725570646174655479706512370a15706169" . - "7265645f7472616e73616374696f6e5f696418032001280b32182e70726f" . - "746f2e6772616469646f2e54696d657374616d7012140a0c746172676574" . - "5f67726f7570180420012809224f0a104d656d6265725570646174655479" . - "7065120c0a084144445f55534552100012150a114d4f56455f555345525f" . - "494e424f554e44100112160a124d4f56455f555345525f4f5554424f554e" . - "441002620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php deleted file mode 100644 index aec11c28b..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php +++ /dev/null @@ -1,32 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ab9010a1c6772616469646f2f4d616e6167654e6f6465426f64792e7072" . - "6f746f120d70726f746f2e6772616469646f1a186772616469646f2f4261" . - "73696354797065732e70726f746f22680a0e4d616e6167654e6f6465426f" . - "647912160a0e76657273696f6e5f6e756d62657218012001280412360a09" . - "67726f75705f61646418032001280b32212e70726f746f2e677261646964" . - "6f2e4d616e6167654e6f646547726f7570416464480042060a0464617461" . - "620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php deleted file mode 100644 index ffb25984d..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0aaa010a206772616469646f2f4d616e6167654e6f646547726f75704164" . - "642e70726f746f120d70726f746f2e6772616469646f226f0a124d616e61" . - "67654e6f646547726f757041646412120a0a67726f75705f6e616d651801" . - "2001280912130a0b67726f75705f616c69617318022001280912300a0f68" . - "65646572615f746f7069635f696418032001280b32172e70726f746f2e67" . - "72616469646f2e4865646572614944620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php deleted file mode 100644 index ef7dca297..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php +++ /dev/null @@ -1,36 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ade020a1f6772616469646f2f4d616e6167654e6f646552657175657374" . - "2e70726f746f120d70726f746f2e6772616469646f22550a114d616e6167" . - "654e6f646552657175657374122c0a077369675f6d617018012001280b32" . - "1b2e70726f746f2e6772616469646f2e5369676e61747572654d61701212" . - "0a0a626f64795f627974657318022001280c22cc010a124d616e6167654e" . - "6f6465526573706f6e7365120f0a0773756363657373180120012808123a" . - "0a056572726f7218022001280e322b2e70726f746f2e6772616469646f2e" . - "4d616e6167654e6f6465526573706f6e73652e4572726f72436f64652269" . - "0a094572726f72436f646512100a0c494e56414c49445f424f4459100012" . - "150a11494e56414c49445f5349474e4154555245100112140a105349474e" . - "45525f4e4f545f4b4e4f574e1002121d0a1947524f55505f414c4941535f" . - "414c52454144595f45584953541003620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php deleted file mode 100644 index f55b61f4d..000000000 --- a/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php +++ /dev/null @@ -1,46 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0a92040a1d6772616469646f2f5472616e73616374696f6e426f64792e70" . - "726f746f120d70726f746f2e6772616469646f1a1d6772616469646f2f47" . - "72616469646f4372656174696f6e2e70726f746f1a206772616469646f2f" . - "47726f7570467269656e64735570646174652e70726f746f1a1f67726164" . - "69646f2f47726f75704d656d6265725570646174652e70726f746f1a1867" . - "72616469646f2f426173696354797065732e70726f746f22dd020a0f5472" . - "616e73616374696f6e426f6479120c0a046d656d6f18012001280912300a" . - "076372656174656418022001280b321f2e70726f746f2e6772616469646f" . - "2e54696d657374616d705365636f6e647312160a0e76657273696f6e5f6e" . - "756d62657218032001280412320a087472616e7366657218062001280b32" . - "1e2e70726f746f2e6772616469646f2e4772616469646f5472616e736665" . - "72480012320a086372656174696f6e18072001280b321e2e70726f746f2e" . - "6772616469646f2e4772616469646f4372656174696f6e480012410a1467" . - "726f75705f667269656e64735f75706461746518082001280b32212e7072" . - "6f746f2e6772616469646f2e47726f7570467269656e6473557064617465" . - "4800123f0a1367726f75705f6d656d6265725f7570646174651809200128" . - "0b32202e70726f746f2e6772616469646f2e47726f75704d656d62657255" . - "7064617465480042060a0464617461620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php deleted file mode 100644 index 781ac8f25..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php +++ /dev/null @@ -1,146 +0,0 @@ -proto.gradido.CrossGroupTransfer - */ -class CrossGroupTransfer extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - */ - private $sender = null; - /** - * Generated from protobuf field bytes receiver = 2; - */ - private $receiver = ''; - /** - * Generated from protobuf field string other_group = 3; - */ - private $other_group = ''; - /** - * this matches related OutboundTransfer.paired_transaction_id - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4; - */ - private $paired_transaction_id = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\TransferAmount $sender - * @type string $receiver - * @type string $other_group - * @type \Proto\Gradido\Timestamp $paired_transaction_id - * this matches related OutboundTransfer.paired_transaction_id - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransfer::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @return \Proto\Gradido\TransferAmount - */ - public function getSender() - { - return $this->sender; - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @param \Proto\Gradido\TransferAmount $var - * @return $this - */ - public function setSender($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class); - $this->sender = $var; - - return $this; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @return string - */ - public function getReceiver() - { - return $this->receiver; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @param string $var - * @return $this - */ - public function setReceiver($var) - { - GPBUtil::checkString($var, False); - $this->receiver = $var; - - return $this; - } - - /** - * Generated from protobuf field string other_group = 3; - * @return string - */ - public function getOtherGroup() - { - return $this->other_group; - } - - /** - * Generated from protobuf field string other_group = 3; - * @param string $var - * @return $this - */ - public function setOtherGroup($var) - { - GPBUtil::checkString($var, True); - $this->other_group = $var; - - return $this; - } - - /** - * this matches related OutboundTransfer.paired_transaction_id - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4; - * @return \Proto\Gradido\Timestamp - */ - public function getPairedTransactionId() - { - return $this->paired_transaction_id; - } - - /** - * this matches related OutboundTransfer.paired_transaction_id - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4; - * @param \Proto\Gradido\Timestamp $var - * @return $this - */ - public function setPairedTransactionId($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\Timestamp::class); - $this->paired_transaction_id = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php deleted file mode 100644 index 9b4c3208d..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php +++ /dev/null @@ -1,102 +0,0 @@ -proto.gradido.GradidoCreation - */ -class GradidoCreation extends \Google\Protobuf\Internal\Message -{ - /** - * 40 Byte - * - * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1; - */ - private $receiver = null; - /** - * 8 Byte - * - * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3; - */ - private $target_date = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\TransferAmount $receiver - * 40 Byte - * @type \Proto\Gradido\TimestampSeconds $target_date - * 8 Byte - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoCreation::initOnce(); - parent::__construct($data); - } - - /** - * 40 Byte - * - * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1; - * @return \Proto\Gradido\TransferAmount - */ - public function getReceiver() - { - return $this->receiver; - } - - /** - * 40 Byte - * - * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1; - * @param \Proto\Gradido\TransferAmount $var - * @return $this - */ - public function setReceiver($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class); - $this->receiver = $var; - - return $this; - } - - /** - * 8 Byte - * - * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3; - * @return \Proto\Gradido\TimestampSeconds - */ - public function getTargetDate() - { - return $this->target_date; - } - - /** - * 8 Byte - * - * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3; - * @param \Proto\Gradido\TimestampSeconds $var - * @return $this - */ - public function setTargetDate($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TimestampSeconds::class); - $this->target_date = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php deleted file mode 100644 index b4b34c77e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php +++ /dev/null @@ -1,116 +0,0 @@ -proto.gradido.GradidoTransaction - */ -class GradidoTransaction extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - */ - private $sig_map = null; - /** - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * - * Generated from protobuf field bytes body_bytes = 2; - */ - private $body_bytes = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\SignatureMap $sig_map - * @type string $body_bytes - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransaction::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @return \Proto\Gradido\SignatureMap - */ - public function getSigMap() - { - return $this->sig_map; - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @param \Proto\Gradido\SignatureMap $var - * @return $this - */ - public function setSigMap($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\SignatureMap::class); - $this->sig_map = $var; - - return $this; - } - - /** - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * - * Generated from protobuf field bytes body_bytes = 2; - * @return string - */ - public function getBodyBytes() - { - return $this->body_bytes; - } - - /** - * TODO: consider if having concrete type wouldn't be better; - * having bytes would better show what is signed, still for - * blockchain it doesn't matter, as it has to be serialized again - * when validating - * UNICORN ANSWER: - * Maybe but hedera has at first concrete type and has depracted that now, so is must - * be reason for that - * - * Generated from protobuf field bytes body_bytes = 2; - * @param string $var - * @return $this - */ - public function setBodyBytes($var) - { - GPBUtil::checkString($var, False); - $this->body_bytes = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php deleted file mode 100644 index a76954c2e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php +++ /dev/null @@ -1,109 +0,0 @@ -proto.gradido.GradidoTransfer - */ -class GradidoTransfer extends \Google\Protobuf\Internal\Message -{ - protected $data; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\LocalTransfer $local - * @type \Proto\Gradido\CrossGroupTransfer $inbound - * @type \Proto\Gradido\CrossGroupTransfer $outbound - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransfer::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.LocalTransfer local = 1; - * @return \Proto\Gradido\LocalTransfer - */ - public function getLocal() - { - return $this->readOneof(1); - } - - /** - * Generated from protobuf field .proto.gradido.LocalTransfer local = 1; - * @param \Proto\Gradido\LocalTransfer $var - * @return $this - */ - public function setLocal($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\LocalTransfer::class); - $this->writeOneof(1, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer inbound = 2; - * @return \Proto\Gradido\CrossGroupTransfer - */ - public function getInbound() - { - return $this->readOneof(2); - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer inbound = 2; - * @param \Proto\Gradido\CrossGroupTransfer $var - * @return $this - */ - public function setInbound($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\CrossGroupTransfer::class); - $this->writeOneof(2, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer outbound = 3; - * @return \Proto\Gradido\CrossGroupTransfer - */ - public function getOutbound() - { - return $this->readOneof(3); - } - - /** - * Generated from protobuf field .proto.gradido.CrossGroupTransfer outbound = 3; - * @param \Proto\Gradido\CrossGroupTransfer $var - * @return $this - */ - public function setOutbound($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\CrossGroupTransfer::class); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getData() - { - return $this->whichOneof("data"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php deleted file mode 100644 index 22e86d3e1..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php +++ /dev/null @@ -1,92 +0,0 @@ -proto.gradido.GroupFriendsUpdate - */ -class GroupFriendsUpdate extends \Google\Protobuf\Internal\Message -{ - /** - * char[16], alias - * - * Generated from protobuf field string group = 1; - */ - private $group = ''; - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2; - */ - private $action = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $group - * char[16], alias - * @type int $action - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GroupFriendsUpdate::initOnce(); - parent::__construct($data); - } - - /** - * char[16], alias - * - * Generated from protobuf field string group = 1; - * @return string - */ - public function getGroup() - { - return $this->group; - } - - /** - * char[16], alias - * - * Generated from protobuf field string group = 1; - * @param string $var - * @return $this - */ - public function setGroup($var) - { - GPBUtil::checkString($var, True); - $this->group = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2; - * @return int - */ - public function getAction() - { - return $this->action; - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2; - * @param int $var - * @return $this - */ - public function setAction($var) - { - GPBUtil::checkEnum($var, \Proto\Gradido\GroupFriendsUpdate_Action::class); - $this->action = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php deleted file mode 100644 index 2a3396c55..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php +++ /dev/null @@ -1,51 +0,0 @@ -proto.gradido.GroupFriendsUpdate.Action - */ -class Action -{ - /** - * Generated from protobuf enum ADD_FRIEND = 0; - */ - const ADD_FRIEND = 0; - /** - * Generated from protobuf enum REMOVE_FRIEND = 1; - */ - const REMOVE_FRIEND = 1; - - private static $valueToName = [ - self::ADD_FRIEND => 'ADD_FRIEND', - self::REMOVE_FRIEND => 'REMOVE_FRIEND', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Action::class, \Proto\Gradido\GroupFriendsUpdate_Action::class); - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php deleted file mode 100644 index 24f8cef70..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php +++ /dev/null @@ -1,16 +0,0 @@ -proto.gradido.GroupMemberUpdate - */ -class GroupMemberUpdate extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bytes user_pubkey = 1; - */ - private $user_pubkey = ''; - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2; - */ - private $member_update_type = 0; - /** - * this only makes sense for user move, TODO: probably restructure - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3; - */ - private $paired_transaction_id = null; - /** - * Generated from protobuf field string target_group = 4; - */ - private $target_group = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $user_pubkey - * @type int $member_update_type - * @type \Proto\Gradido\Timestamp $paired_transaction_id - * this only makes sense for user move, TODO: probably restructure - * @type string $target_group - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GroupMemberUpdate::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bytes user_pubkey = 1; - * @return string - */ - public function getUserPubkey() - { - return $this->user_pubkey; - } - - /** - * Generated from protobuf field bytes user_pubkey = 1; - * @param string $var - * @return $this - */ - public function setUserPubkey($var) - { - GPBUtil::checkString($var, False); - $this->user_pubkey = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2; - * @return int - */ - public function getMemberUpdateType() - { - return $this->member_update_type; - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2; - * @param int $var - * @return $this - */ - public function setMemberUpdateType($var) - { - GPBUtil::checkEnum($var, \Proto\Gradido\GroupMemberUpdate_MemberUpdateType::class); - $this->member_update_type = $var; - - return $this; - } - - /** - * this only makes sense for user move, TODO: probably restructure - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3; - * @return \Proto\Gradido\Timestamp - */ - public function getPairedTransactionId() - { - return $this->paired_transaction_id; - } - - /** - * this only makes sense for user move, TODO: probably restructure - * - * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3; - * @param \Proto\Gradido\Timestamp $var - * @return $this - */ - public function setPairedTransactionId($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\Timestamp::class); - $this->paired_transaction_id = $var; - - return $this; - } - - /** - * Generated from protobuf field string target_group = 4; - * @return string - */ - public function getTargetGroup() - { - return $this->target_group; - } - - /** - * Generated from protobuf field string target_group = 4; - * @param string $var - * @return $this - */ - public function setTargetGroup($var) - { - GPBUtil::checkString($var, True); - $this->target_group = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php b/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php deleted file mode 100644 index 57580cd75..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php +++ /dev/null @@ -1,56 +0,0 @@ -proto.gradido.GroupMemberUpdate.MemberUpdateType - */ -class MemberUpdateType -{ - /** - * Generated from protobuf enum ADD_USER = 0; - */ - const ADD_USER = 0; - /** - * Generated from protobuf enum MOVE_USER_INBOUND = 1; - */ - const MOVE_USER_INBOUND = 1; - /** - * Generated from protobuf enum MOVE_USER_OUTBOUND = 2; - */ - const MOVE_USER_OUTBOUND = 2; - - private static $valueToName = [ - self::ADD_USER => 'ADD_USER', - self::MOVE_USER_INBOUND => 'MOVE_USER_INBOUND', - self::MOVE_USER_OUTBOUND => 'MOVE_USER_OUTBOUND', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(MemberUpdateType::class, \Proto\Gradido\GroupMemberUpdate_MemberUpdateType::class); - diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php b/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php deleted file mode 100644 index b7080cf75..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php +++ /dev/null @@ -1,16 +0,0 @@ -proto.gradido.HederaID - */ -class HederaID extends \Google\Protobuf\Internal\Message -{ - /** - * The shard number (nonnegative) - * - * Generated from protobuf field int64 shardNum = 1; - */ - private $shardNum = 0; - /** - * The realm number (nonnegative) - * - * Generated from protobuf field int64 realmNum = 2; - */ - private $realmNum = 0; - /** - * Unique topic identifier within a realm (nonnegative). - * - * Generated from protobuf field int64 topicNum = 3; - */ - private $topicNum = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $shardNum - * The shard number (nonnegative) - * @type int|string $realmNum - * The realm number (nonnegative) - * @type int|string $topicNum - * Unique topic identifier within a realm (nonnegative). - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * The shard number (nonnegative) - * - * Generated from protobuf field int64 shardNum = 1; - * @return int|string - */ - public function getShardNum() - { - return $this->shardNum; - } - - /** - * The shard number (nonnegative) - * - * Generated from protobuf field int64 shardNum = 1; - * @param int|string $var - * @return $this - */ - public function setShardNum($var) - { - GPBUtil::checkInt64($var); - $this->shardNum = $var; - - return $this; - } - - /** - * The realm number (nonnegative) - * - * Generated from protobuf field int64 realmNum = 2; - * @return int|string - */ - public function getRealmNum() - { - return $this->realmNum; - } - - /** - * The realm number (nonnegative) - * - * Generated from protobuf field int64 realmNum = 2; - * @param int|string $var - * @return $this - */ - public function setRealmNum($var) - { - GPBUtil::checkInt64($var); - $this->realmNum = $var; - - return $this; - } - - /** - * Unique topic identifier within a realm (nonnegative). - * - * Generated from protobuf field int64 topicNum = 3; - * @return int|string - */ - public function getTopicNum() - { - return $this->topicNum; - } - - /** - * Unique topic identifier within a realm (nonnegative). - * - * Generated from protobuf field int64 topicNum = 3; - * @param int|string $var - * @return $this - */ - public function setTopicNum($var) - { - GPBUtil::checkInt64($var); - $this->topicNum = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/Key.php b/community_server/src/Model/Messages/Proto/Gradido/Key.php deleted file mode 100644 index 4c32e0083..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/Key.php +++ /dev/null @@ -1,96 +0,0 @@ -proto.gradido.Key - */ -class Key extends \Google\Protobuf\Internal\Message -{ - protected $key; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $ed25519 - * ed25519 signature (libsodium default) - * @type string $ed25519_ref10 - * ed25519 ref10 signature - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @return string - */ - public function getEd25519() - { - return $this->readOneof(2); - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @param string $var - * @return $this - */ - public function setEd25519($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(2, $var); - - return $this; - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @return string - */ - public function getEd25519Ref10() - { - return $this->readOneof(3); - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @param string $var - * @return $this - */ - public function setEd25519Ref10($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getKey() - { - return $this->whichOneof("key"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php deleted file mode 100644 index 58f5e23ae..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php +++ /dev/null @@ -1,85 +0,0 @@ -proto.gradido.LocalTransfer - */ -class LocalTransfer extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - */ - private $sender = null; - /** - * Generated from protobuf field bytes receiver = 2; - */ - private $receiver = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\TransferAmount $sender - * @type string $receiver - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\GradidoTransfer::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @return \Proto\Gradido\TransferAmount - */ - public function getSender() - { - return $this->sender; - } - - /** - * Generated from protobuf field .proto.gradido.TransferAmount sender = 1; - * @param \Proto\Gradido\TransferAmount $var - * @return $this - */ - public function setSender($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class); - $this->sender = $var; - - return $this; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @return string - */ - public function getReceiver() - { - return $this->receiver; - } - - /** - * Generated from protobuf field bytes receiver = 2; - * @param string $var - * @return $this - */ - public function setReceiver($var) - { - GPBUtil::checkString($var, False); - $this->receiver = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php deleted file mode 100644 index eed599868..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php +++ /dev/null @@ -1,90 +0,0 @@ -proto.gradido.ManageNodeBody - */ -class ManageNodeBody extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field uint64 version_number = 1; - */ - private $version_number = 0; - protected $data; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $version_number - * @type \Proto\Gradido\ManageNodeGroupAdd $group_add - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeBody::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field uint64 version_number = 1; - * @return int|string - */ - public function getVersionNumber() - { - return $this->version_number; - } - - /** - * Generated from protobuf field uint64 version_number = 1; - * @param int|string $var - * @return $this - */ - public function setVersionNumber($var) - { - GPBUtil::checkUint64($var); - $this->version_number = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeGroupAdd group_add = 3; - * @return \Proto\Gradido\ManageNodeGroupAdd - */ - public function getGroupAdd() - { - return $this->readOneof(3); - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeGroupAdd group_add = 3; - * @param \Proto\Gradido\ManageNodeGroupAdd $var - * @return $this - */ - public function setGroupAdd($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\ManageNodeGroupAdd::class); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getData() - { - return $this->whichOneof("data"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php deleted file mode 100644 index 777075066..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php +++ /dev/null @@ -1,119 +0,0 @@ -proto.gradido.ManageNodeGroupAdd - */ -class ManageNodeGroupAdd extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string group_name = 1; - */ - private $group_name = ''; - /** - * Generated from protobuf field string group_alias = 2; - */ - private $group_alias = ''; - /** - *string parent_group_alias = 4; - * - * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3; - */ - private $hedera_topic_id = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $group_name - * @type string $group_alias - * @type \Proto\Gradido\HederaID $hedera_topic_id - * string parent_group_alias = 4; - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeGroupAdd::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string group_name = 1; - * @return string - */ - public function getGroupName() - { - return $this->group_name; - } - - /** - * Generated from protobuf field string group_name = 1; - * @param string $var - * @return $this - */ - public function setGroupName($var) - { - GPBUtil::checkString($var, True); - $this->group_name = $var; - - return $this; - } - - /** - * Generated from protobuf field string group_alias = 2; - * @return string - */ - public function getGroupAlias() - { - return $this->group_alias; - } - - /** - * Generated from protobuf field string group_alias = 2; - * @param string $var - * @return $this - */ - public function setGroupAlias($var) - { - GPBUtil::checkString($var, True); - $this->group_alias = $var; - - return $this; - } - - /** - *string parent_group_alias = 4; - * - * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3; - * @return \Proto\Gradido\HederaID - */ - public function getHederaTopicId() - { - return $this->hedera_topic_id; - } - - /** - *string parent_group_alias = 4; - * - * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3; - * @param \Proto\Gradido\HederaID $var - * @return $this - */ - public function setHederaTopicId($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\HederaID::class); - $this->hedera_topic_id = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php deleted file mode 100644 index 6699b98c5..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php +++ /dev/null @@ -1,92 +0,0 @@ -proto.gradido.ManageNodeRequest - */ -class ManageNodeRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - */ - private $sig_map = null; - /** - * ManageNodeBody - * - * Generated from protobuf field bytes body_bytes = 2; - */ - private $body_bytes = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\SignatureMap $sig_map - * @type string $body_bytes - * ManageNodeBody - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeRequest::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @return \Proto\Gradido\SignatureMap - */ - public function getSigMap() - { - return $this->sig_map; - } - - /** - * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1; - * @param \Proto\Gradido\SignatureMap $var - * @return $this - */ - public function setSigMap($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\SignatureMap::class); - $this->sig_map = $var; - - return $this; - } - - /** - * ManageNodeBody - * - * Generated from protobuf field bytes body_bytes = 2; - * @return string - */ - public function getBodyBytes() - { - return $this->body_bytes; - } - - /** - * ManageNodeBody - * - * Generated from protobuf field bytes body_bytes = 2; - * @param string $var - * @return $this - */ - public function setBodyBytes($var) - { - GPBUtil::checkString($var, False); - $this->body_bytes = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php deleted file mode 100644 index c7a4f80a5..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php +++ /dev/null @@ -1,85 +0,0 @@ -proto.gradido.ManageNodeResponse - */ -class ManageNodeResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bool success = 1; - */ - private $success = false; - /** - * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2; - */ - private $error = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $success - * @type int $error - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\ManageNodeRequest::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bool success = 1; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 1; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2; - * @return int - */ - public function getError() - { - return $this->error; - } - - /** - * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2; - * @param int $var - * @return $this - */ - public function setError($var) - { - GPBUtil::checkEnum($var, \Proto\Gradido\ManageNodeResponse_ErrorCode::class); - $this->error = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php deleted file mode 100644 index ab352829e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php +++ /dev/null @@ -1,61 +0,0 @@ -proto.gradido.ManageNodeResponse.ErrorCode - */ -class ErrorCode -{ - /** - * Generated from protobuf enum INVALID_BODY = 0; - */ - const INVALID_BODY = 0; - /** - * Generated from protobuf enum INVALID_SIGNATURE = 1; - */ - const INVALID_SIGNATURE = 1; - /** - * Generated from protobuf enum SIGNER_NOT_KNOWN = 2; - */ - const SIGNER_NOT_KNOWN = 2; - /** - * Generated from protobuf enum GROUP_ALIAS_ALREADY_EXIST = 3; - */ - const GROUP_ALIAS_ALREADY_EXIST = 3; - - private static $valueToName = [ - self::INVALID_BODY => 'INVALID_BODY', - self::INVALID_SIGNATURE => 'INVALID_SIGNATURE', - self::SIGNER_NOT_KNOWN => 'SIGNER_NOT_KNOWN', - self::GROUP_ALIAS_ALREADY_EXIST => 'GROUP_ALIAS_ALREADY_EXIST', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(ErrorCode::class, \Proto\Gradido\ManageNodeResponse_ErrorCode::class); - diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php deleted file mode 100644 index 8a7db7515..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php +++ /dev/null @@ -1,16 +0,0 @@ -proto.gradido.SignatureMap - */ -class SignatureMap extends \Google\Protobuf\Internal\Message -{ - /** - * Each signature pair corresponds to a unique Key required to sign the transaction. - * - * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1; - */ - private $sigPair; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \Proto\Gradido\SignaturePair[]|\Google\Protobuf\Internal\RepeatedField $sigPair - * Each signature pair corresponds to a unique Key required to sign the transaction. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Each signature pair corresponds to a unique Key required to sign the transaction. - * - * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getSigPair() - { - return $this->sigPair; - } - - /** - * Each signature pair corresponds to a unique Key required to sign the transaction. - * - * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1; - * @param \Proto\Gradido\SignaturePair[]|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setSigPair($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Proto\Gradido\SignaturePair::class); - $this->sigPair = $arr; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php b/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php deleted file mode 100644 index 2ef0e81c5..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php +++ /dev/null @@ -1,123 +0,0 @@ -proto.gradido.SignaturePair - */ -class SignaturePair extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bytes pubKey = 1; - */ - private $pubKey = ''; - protected $signature; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $pubKey - * @type string $ed25519 - * ed25519 signature (libsodium default) - * @type string $ed25519_ref10 - * ed25519 ref10 signature - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bytes pubKey = 1; - * @return string - */ - public function getPubKey() - { - return $this->pubKey; - } - - /** - * Generated from protobuf field bytes pubKey = 1; - * @param string $var - * @return $this - */ - public function setPubKey($var) - { - GPBUtil::checkString($var, False); - $this->pubKey = $var; - - return $this; - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @return string - */ - public function getEd25519() - { - return $this->readOneof(2); - } - - /** - * ed25519 signature (libsodium default) - * - * Generated from protobuf field bytes ed25519 = 2; - * @param string $var - * @return $this - */ - public function setEd25519($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(2, $var); - - return $this; - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @return string - */ - public function getEd25519Ref10() - { - return $this->readOneof(3); - } - - /** - * ed25519 ref10 signature - * - * Generated from protobuf field bytes ed25519_ref10 = 3; - * @param string $var - * @return $this - */ - public function setEd25519Ref10($var) - { - GPBUtil::checkString($var, False); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * @return string - */ - public function getSignature() - { - return $this->whichOneof("signature"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php b/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php deleted file mode 100644 index ae3ecea0e..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php +++ /dev/null @@ -1,101 +0,0 @@ -proto.gradido.Timestamp - */ -class Timestamp extends \Google\Protobuf\Internal\Message -{ - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - */ - private $seconds = 0; - /** - * Number of nanoseconds since the start of the last second - * - * Generated from protobuf field int32 nanos = 2; - */ - private $nanos = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $seconds - * Number of complete seconds since the start of the epoch - * @type int $nanos - * Number of nanoseconds since the start of the last second - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @return int|string - */ - public function getSeconds() - { - return $this->seconds; - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @param int|string $var - * @return $this - */ - public function setSeconds($var) - { - GPBUtil::checkInt64($var); - $this->seconds = $var; - - return $this; - } - - /** - * Number of nanoseconds since the start of the last second - * - * Generated from protobuf field int32 nanos = 2; - * @return int - */ - public function getNanos() - { - return $this->nanos; - } - - /** - * Number of nanoseconds since the start of the last second - * - * Generated from protobuf field int32 nanos = 2; - * @param int $var - * @return $this - */ - public function setNanos($var) - { - GPBUtil::checkInt32($var); - $this->nanos = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php b/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php deleted file mode 100644 index d31aa40d2..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php +++ /dev/null @@ -1,67 +0,0 @@ -proto.gradido.TimestampSeconds - */ -class TimestampSeconds extends \Google\Protobuf\Internal\Message -{ - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - */ - private $seconds = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $seconds - * Number of complete seconds since the start of the epoch - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @return int|string - */ - public function getSeconds() - { - return $this->seconds; - } - - /** - * Number of complete seconds since the start of the epoch - * - * Generated from protobuf field int64 seconds = 1; - * @param int|string $var - * @return $this - */ - public function setSeconds($var) - { - GPBUtil::checkInt64($var); - $this->seconds = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php b/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php deleted file mode 100644 index b1ad01ea4..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php +++ /dev/null @@ -1,220 +0,0 @@ -proto.gradido.TransactionBody - */ -class TransactionBody extends \Google\Protobuf\Internal\Message -{ - /** - * max 150 chars - * - * Generated from protobuf field string memo = 1; - */ - private $memo = ''; - /** - * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2; - */ - private $created = null; - /** - * Generated from protobuf field uint64 version_number = 3; - */ - private $version_number = 0; - protected $data; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $memo - * max 150 chars - * @type \Proto\Gradido\TimestampSeconds $created - * @type int|string $version_number - * @type \Proto\Gradido\GradidoTransfer $transfer - * @type \Proto\Gradido\GradidoCreation $creation - * @type \Proto\Gradido\GroupFriendsUpdate $group_friends_update - * @type \Proto\Gradido\GroupMemberUpdate $group_member_update - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\TransactionBody::initOnce(); - parent::__construct($data); - } - - /** - * max 150 chars - * - * Generated from protobuf field string memo = 1; - * @return string - */ - public function getMemo() - { - return $this->memo; - } - - /** - * max 150 chars - * - * Generated from protobuf field string memo = 1; - * @param string $var - * @return $this - */ - public function setMemo($var) - { - GPBUtil::checkString($var, True); - $this->memo = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2; - * @return \Proto\Gradido\TimestampSeconds - */ - public function getCreated() - { - return $this->created; - } - - /** - * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2; - * @param \Proto\Gradido\TimestampSeconds $var - * @return $this - */ - public function setCreated($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\TimestampSeconds::class); - $this->created = $var; - - return $this; - } - - /** - * Generated from protobuf field uint64 version_number = 3; - * @return int|string - */ - public function getVersionNumber() - { - return $this->version_number; - } - - /** - * Generated from protobuf field uint64 version_number = 3; - * @param int|string $var - * @return $this - */ - public function setVersionNumber($var) - { - GPBUtil::checkUint64($var); - $this->version_number = $var; - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GradidoTransfer transfer = 6; - * @return \Proto\Gradido\GradidoTransfer - */ - public function getTransfer() - { - return $this->readOneof(6); - } - - /** - * Generated from protobuf field .proto.gradido.GradidoTransfer transfer = 6; - * @param \Proto\Gradido\GradidoTransfer $var - * @return $this - */ - public function setTransfer($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GradidoTransfer::class); - $this->writeOneof(6, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GradidoCreation creation = 7; - * @return \Proto\Gradido\GradidoCreation - */ - public function getCreation() - { - return $this->readOneof(7); - } - - /** - * Generated from protobuf field .proto.gradido.GradidoCreation creation = 7; - * @param \Proto\Gradido\GradidoCreation $var - * @return $this - */ - public function setCreation($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GradidoCreation::class); - $this->writeOneof(7, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate group_friends_update = 8; - * @return \Proto\Gradido\GroupFriendsUpdate - */ - public function getGroupFriendsUpdate() - { - return $this->readOneof(8); - } - - /** - * Generated from protobuf field .proto.gradido.GroupFriendsUpdate group_friends_update = 8; - * @param \Proto\Gradido\GroupFriendsUpdate $var - * @return $this - */ - public function setGroupFriendsUpdate($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GroupFriendsUpdate::class); - $this->writeOneof(8, $var); - - return $this; - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate group_member_update = 9; - * @return \Proto\Gradido\GroupMemberUpdate - */ - public function getGroupMemberUpdate() - { - return $this->readOneof(9); - } - - /** - * Generated from protobuf field .proto.gradido.GroupMemberUpdate group_member_update = 9; - * @param \Proto\Gradido\GroupMemberUpdate $var - * @return $this - */ - public function setGroupMemberUpdate($var) - { - GPBUtil::checkMessage($var, \Proto\Gradido\GroupMemberUpdate::class); - $this->writeOneof(9, $var); - - return $this; - } - - /** - * @return string - */ - public function getData() - { - return $this->whichOneof("data"); - } - -} - diff --git a/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php b/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php deleted file mode 100644 index 7673582fa..000000000 --- a/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php +++ /dev/null @@ -1,85 +0,0 @@ -proto.gradido.TransferAmount - */ -class TransferAmount extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bytes pubkey = 1; - */ - private $pubkey = ''; - /** - * Generated from protobuf field sint64 amount = 2; - */ - private $amount = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $pubkey - * @type int|string $amount - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Gradido\BasicTypes::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bytes pubkey = 1; - * @return string - */ - public function getPubkey() - { - return $this->pubkey; - } - - /** - * Generated from protobuf field bytes pubkey = 1; - * @param string $var - * @return $this - */ - public function setPubkey($var) - { - GPBUtil::checkString($var, False); - $this->pubkey = $var; - - return $this; - } - - /** - * Generated from protobuf field sint64 amount = 2; - * @return int|string - */ - public function getAmount() - { - return $this->amount; - } - - /** - * Generated from protobuf field sint64 amount = 2; - * @param int|string $var - * @return $this - */ - public function setAmount($var) - { - GPBUtil::checkInt64($var); - $this->amount = $var; - - return $this; - } - -} - diff --git a/community_server/src/Model/Navigation/NaviBreakLine.php b/community_server/src/Model/Navigation/NaviBreakLine.php deleted file mode 100644 index 79917db8c..000000000 --- a/community_server/src/Model/Navigation/NaviBreakLine.php +++ /dev/null @@ -1,16 +0,0 @@ -
    "; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Navigation/NaviEntry.php b/community_server/src/Model/Navigation/NaviEntry.php deleted file mode 100644 index 2b02db9a8..000000000 --- a/community_server/src/Model/Navigation/NaviEntry.php +++ /dev/null @@ -1,89 +0,0 @@ -controller = $controller; - $this->action = $action; - $this->param = $param; - $this->iconClass = $iconClass; - if($active != null) { - $this->active = $active; - } else { - $this->active = ($GLOBALS["side"] == $controller && - $GLOBALS["subside"] == $action && - $GLOBALS["passed"] == $param); - } - $this->title = $title; - return $this; - } - - public function setIconColor($iconColorClass) { - $this->iconColor = $iconColorClass; - return $this; - } - public function setBGColor($bgColorClass) { - $this->bgColorClass = $bgColorClass; - return $this; - } - private function isActive() { - return $this->active; - } - - - - private function link() { - $self = $GLOBALS["self"]; - if($this->hasChilds()) { - return $self->Html->link( - $this->title.'', - ['controller' => $this->controller, "action" => $this->action, $this->param], - ['escape' => false] - ); - } else { - return $self->Html->Link( - ''. $this->iconClass .'' - .'' . $this->title . '', - ['controller' => $this->controller, 'action' => $this->action, $this->param], - ['class' => $this->bgColorClass, 'escape' => false]); - } - } - - public function __toString() { - $str = ""; - $str .= "hasChilds()) { $class .= "dropdown";} - if($this->isActive()) { $class .= " selected"; } - if(strlen($class) > 0 ) $str .= " class='$class'"; - $str .= ">"; - - $str .= $this->link(); - if($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php b/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php deleted file mode 100644 index 7d467ed69..000000000 --- a/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php +++ /dev/null @@ -1,92 +0,0 @@ -link = $link; - $this->iconClass = $iconClass; - if ($active != null) { - $this->active = $active; - } - $this->title = $title; - return $this; - } - - public function setIconColor($iconColorClass) - { - $this->iconColor = $iconColorClass; - return $this; - } - - public function setBGColor($bgColorClass) - { - $this->bgColorClass = $bgColorClass; - return $this; - } - - private function isActive() - { - return $this->active; - } - - protected function link() - { - $self = $GLOBALS["self"]; - if ($this->hasChilds()) { - return $self->Html->link( - $this->title.'', - ['controller' => $this->controller, "action" => $this->action, $this->param], - ['escape' => false] - ); - } else { - return '' - .''. $this->iconClass .'' - . '' . $this->title . '' - . ''; - } - } - - public function __toString() - { - $str = ""; - $str .= "hasChilds()) { - $class .= "dropdown"; - } - if ($this->isActive()) { - $class .= " selected"; - } - if (strlen($class) > 0) { - $str .= " class='$class'"; - } - $str .= ">"; - - $str .= $this->link(); - if ($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Navigation/NaviEntryBase.php b/community_server/src/Model/Navigation/NaviEntryBase.php deleted file mode 100644 index ebb4e122f..000000000 --- a/community_server/src/Model/Navigation/NaviEntryBase.php +++ /dev/null @@ -1,31 +0,0 @@ -title = $title; - return $this; - } - - public function add($child) { - $child->isChild = true; - array_push($this->childs, $child); - return $this; - } - - protected function hasChilds() { - return count($this->childs) > 0; - } - -} diff --git a/community_server/src/Model/Navigation/NaviEntryExternLink.php b/community_server/src/Model/Navigation/NaviEntryExternLink.php deleted file mode 100644 index 8ace7fb4c..000000000 --- a/community_server/src/Model/Navigation/NaviEntryExternLink.php +++ /dev/null @@ -1,26 +0,0 @@ -link.'" class="' .$this->bgColorClass .'" target="_blank">' - .''. $this->iconClass .'' - . '' . $this->title . '' - . ''; - } -} diff --git a/community_server/src/Model/Navigation/NaviEntrySub.php b/community_server/src/Model/Navigation/NaviEntrySub.php deleted file mode 100644 index ae79aa433..000000000 --- a/community_server/src/Model/Navigation/NaviEntrySub.php +++ /dev/null @@ -1,105 +0,0 @@ -controller = $controller; - $this->action = $action; - $this->param = $param; - $this->iconClass = $iconClass; - if ($active != null) { - $this->active = $active; - } else { - $this->active = ($GLOBALS["side"] == $controller && - $GLOBALS["subside"] == $action && - $GLOBALS["passed"] == $param); - } - $this->title = $title; - $this->subtitle = $subtitle; - return $this; - } - - public function setIconColor($iconColorClass) - { - $this->iconColor = $iconColorClass; - return $this; - } - public function setBGColor($bgColorClass) - { - $this->bgColorClass = $bgColorClass; - return $this; - } - private function isActive() - { - return $this->active; - } - - private function link() - { - $self = $GLOBALS["self"]; - if ($this->hasChilds()) { - return $self->Html->link( - $this->title.'', - ['controller' => $this->controller, "action" => $this->action, $this->param], - ['escape' => false] - ); - } else { - return $self->Html->Link( - '' - .'' . $this->title . '' - .''. $this->iconClass .'', - ['controller' => $this->controller, 'action' => $this->action, $this->param], - ['class' => $this->bgColorClass, 'escape' => false] - ); - } - } - - public function __toString() - { - $str = ""; - $str .= "hasChilds()) { - $class .= "dropdown"; - } - if ($this->isActive()) { - $class .= " selected"; - } - if (strlen($class) > 0) { - $str .= " class='$class'"; - } - $str .= ">"; - - $str .= ''. $this->subtitle .''; - $str .= $this->link(); - - if ($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Navigation/NaviHierarchy.php b/community_server/src/Model/Navigation/NaviHierarchy.php deleted file mode 100644 index 5017f8678..000000000 --- a/community_server/src/Model/Navigation/NaviHierarchy.php +++ /dev/null @@ -1,49 +0,0 @@ - -*/ -class NaviHierarchy implements \Countable -{ - private $hierarchy = []; - - public function add($entry) - { - array_push($this->hierarchy, $entry); - return $this; - } - public function getHierarchy() - { - return $this->hierarchy; - } - public function count() - { - return count($this->hierarchy); - } - public function __toString() - { - $html = ""; - return $html; - } -} diff --git a/community_server/src/Model/Navigation/NaviHierarchyEntry.php b/community_server/src/Model/Navigation/NaviHierarchyEntry.php deleted file mode 100644 index 5256518df..000000000 --- a/community_server/src/Model/Navigation/NaviHierarchyEntry.php +++ /dev/null @@ -1,53 +0,0 @@ - -*/ -class NaviHierarchyEntry -{ - private $name; - private $controller; - private $action; - public function __construct($name, $controller, $action, $isLast) - { - $this->name = $name; - $this->controller = $controller; - $this->action = $action; - $this->isLast = $isLast; - return $this; - } - private function link() - { - $self = $GLOBALS["self"]; - return $self->Html->Link( - '' . $this->name . '', - ['controller' => $this->controller, 'action' => $this->action], - ['class' => "", 'escape' => false] - ); - } - - public function __toString() - { - $str = "isLast){ - $str .= " class='selected'"; - } - $str .= ">"; - $str .= $this->link(); - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Navigation/TitleOnly.php b/community_server/src/Model/Navigation/TitleOnly.php deleted file mode 100644 index 39d7ac616..000000000 --- a/community_server/src/Model/Navigation/TitleOnly.php +++ /dev/null @@ -1,37 +0,0 @@ -title = $title; - } - - public function __toString() { - $str = ""; - $str .= "hasChilds()) { $class .= " dropdown";} - if(strlen($class) > 0 ) $str .= " class='$class'"; - $str .= ">"; - $hNumber = 1; - if($this->isChild) $hNumber = 3; - $str .= "" . $this->title . ""; - if($this->hasChilds()) { - $str .= ""; - } - $str .= ""; - return $str; - } -} diff --git a/community_server/src/Model/Table/AddressTypesTable.php b/community_server/src/Model/Table/AddressTypesTable.php deleted file mode 100644 index ba94c99c7..000000000 --- a/community_server/src/Model/Table/AddressTypesTable.php +++ /dev/null @@ -1,74 +0,0 @@ -setTable('address_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->hasMany('StateGroupAddresses', [ - 'foreignKey' => 'address_type_id', - ]); - $this->hasMany('TransactionGroupAddaddress', [ - 'foreignKey' => 'address_type_id', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 45) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->requirePresence('text', 'create') - ->notEmptyString('text'); - - return $validator; - } -} diff --git a/community_server/src/Model/Table/AdminErrorsTable.php b/community_server/src/Model/Table/AdminErrorsTable.php deleted file mode 100644 index e6263d8ff..000000000 --- a/community_server/src/Model/Table/AdminErrorsTable.php +++ /dev/null @@ -1,107 +0,0 @@ -setTable('admin_errors'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('controller') - ->maxLength('controller', 255) - ->requirePresence('controller', 'create') - ->notEmptyString('controller'); - - $validator - ->scalar('action') - ->maxLength('action', 255) - ->requirePresence('action', 'create') - ->notEmptyString('action'); - - $validator - ->scalar('state') - ->maxLength('state', 255) - ->requirePresence('state', 'create') - ->notEmptyString('state'); - - $validator - ->scalar('msg') - ->maxLength('msg', 255) - ->requirePresence('msg', 'create') - ->notEmptyString('msg'); - - $validator - ->scalar('details') - ->maxLength('details', 255) - ->requirePresence('details', 'create') - ->notEmptyString('details'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/AppTable.php b/community_server/src/Model/Table/AppTable.php deleted file mode 100644 index a0758c97a..000000000 --- a/community_server/src/Model/Table/AppTable.php +++ /dev/null @@ -1,41 +0,0 @@ -getSchema()->truncateSql($this->getConnection()); - foreach ($truncateCommands as $truncateCommand) { - $this->getConnection()->query($truncateCommand); - } - $this->getConnection()->query('ALTER TABLE ' . $this->getSchema()->name() . ' AUTO_INCREMENT=1'); - return ['success' => true]; - } - public function saveManyWithErrors($entities) - { - $save_results = $this->saveMany($entities); - // save all at once failed, no try one by one to get error message - if($save_results === false) { - foreach($entities as $entity) { - if(!$this->save($entity)) { - return ['success' => false, 'errors' => $entity->getErrors()]; - } - } - } else { - return ['success' => true]; - } - } -} diff --git a/community_server/src/Model/Table/BlockchainTypesTable.php b/community_server/src/Model/Table/BlockchainTypesTable.php deleted file mode 100644 index 3aa67a83d..000000000 --- a/community_server/src/Model/Table/BlockchainTypesTable.php +++ /dev/null @@ -1,94 +0,0 @@ -setTable('blockchain_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 45) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->allowEmptyString('text'); - - $validator - ->scalar('symbol') - ->maxLength('symbol', 10) - ->allowEmptyString('symbol'); - - return $validator; - } - - public function fillWithDefault() - { - $entry_contents = [ - [ - 'id' => 1, - 'name' => 'mysql', - 'text' => 'use mysql db as blockchain, work only with single community-server', - 'symbol' => NULL - ], - [ - 'id' => 2, - 'name' => 'hedera', - 'text' => 'use hedera for transactions', - 'symbol' => 'HBAR' - ] - ]; - $entities = $this->newEntities($entry_contents); - $this->truncate(); - $save_results = $this->saveManyWithErrors($entities); - if(!$save_results['success']) { - $save_results['msg'] = 'error by saving default transaction types'; - } - return $save_results; - - } -} diff --git a/community_server/src/Model/Table/CommunityProfilesTable.php b/community_server/src/Model/Table/CommunityProfilesTable.php deleted file mode 100644 index bbe862092..000000000 --- a/community_server/src/Model/Table/CommunityProfilesTable.php +++ /dev/null @@ -1,81 +0,0 @@ -setTable('community_profiles'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->allowEmptyFile('profile_img'); - - $validator - ->scalar('profile_desc') - ->maxLength('profile_desc', 2000) - ->allowEmptyFile('profile_desc'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/ElopageBuysTable.php b/community_server/src/Model/Table/ElopageBuysTable.php deleted file mode 100644 index a5279d920..000000000 --- a/community_server/src/Model/Table/ElopageBuysTable.php +++ /dev/null @@ -1,116 +0,0 @@ -setTable('elopage_buys'); - $this->setDisplayField('payer_email'); - $this->setPrimaryKey('id'); - - } - - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->integer('product_price') - ->requirePresence('product_price', 'create') - ->notEmptyString('product_price'); - - $validator - ->scalar('payer_email') - ->maxLength('payer_email', 255) - ->requirePresence('payer_email', 'create') - ->notEmptyString('payer_email'); - - $validator - ->scalar('publisher_email') - ->maxLength('publisher_email', 255) - ->requirePresence('publisher_email', 'create') - ->notEmptyString('publisher_email'); - - $validator - ->boolean('payed') - ->requirePresence('payed', 'create') - ->notEmptyString('payed'); - - $validator - ->dateTime('success_date') - ->requirePresence('success_date', 'create') - ->notEmptyDateTime('success_date'); - - $validator - ->scalar('event') - ->maxLength('event', 255) - ->requirePresence('event', 'create') - ->notEmptyString('event'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - - return $rules; - } - - /** - * Returns the database connection name to use by default. - * - * @return string - */ - public static function defaultConnectionName() - { - return 'loginServer'; - } -} diff --git a/community_server/src/Model/Table/OperatorTypesTable.php b/community_server/src/Model/Table/OperatorTypesTable.php deleted file mode 100644 index 8a3ce608c..000000000 --- a/community_server/src/Model/Table/OperatorTypesTable.php +++ /dev/null @@ -1,70 +0,0 @@ -setTable('operator_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->hasMany('Operators', [ - 'foreignKey' => 'operator_type_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 25) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->requirePresence('text', 'create') - ->notEmptyString('text'); - - return $validator; - } -} diff --git a/community_server/src/Model/Table/OperatorsTable.php b/community_server/src/Model/Table/OperatorsTable.php deleted file mode 100644 index 7ae272767..000000000 --- a/community_server/src/Model/Table/OperatorsTable.php +++ /dev/null @@ -1,93 +0,0 @@ -setTable('operators'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->belongsTo('OperatorTypes', [ - 'foreignKey' => 'operator_type_id', - 'joinType' => 'INNER' - ]); - - $this->addBehavior('Timestamp'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('username') - ->maxLength('username', 50) - ->requirePresence('username', 'create') - ->notEmptyString('username'); - //->add('usernamePasswordHash', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - $validator - ->requirePresence('user_pubkey', 'create') - ->notEmptyString('user_pubkey'); - - $validator - ->scalar('data_base64') - ->maxLength('data_base64', 255) - ->requirePresence('data_base64', 'create') - ->notEmptyString('data_base64'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - //$rules->add($rules->isUnique(['usernamePasswordHash'])); - $rules->add($rules->existsIn(['operator_type_id'], 'OperatorTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/RolesTable.php b/community_server/src/Model/Table/RolesTable.php deleted file mode 100644 index 940b7f246..000000000 --- a/community_server/src/Model/Table/RolesTable.php +++ /dev/null @@ -1,72 +0,0 @@ -setTable('roles'); - $this->setDisplayField('title'); - $this->setPrimaryKey('id'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create') - ->add('id', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - $validator - ->scalar('title') - ->maxLength('title', 255) - ->allowEmptyString('title'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['id'])); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/ServerUsersTable.php b/community_server/src/Model/Table/ServerUsersTable.php deleted file mode 100644 index 0ad1fbacb..000000000 --- a/community_server/src/Model/Table/ServerUsersTable.php +++ /dev/null @@ -1,101 +0,0 @@ -setTable('server_users'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('username') - ->maxLength('username', 50) - ->requirePresence('username', 'create') - ->notEmptyString('username', __('Please give a username')); - - $validator - ->scalar('password') - ->maxLength('password', 255) - ->requirePresence('password', 'create') - ->notEmptyString('password', __('Please give a password')); - - $validator - ->email('email') - ->requirePresence('email', 'create') - ->notEmptyString('email', __('Please give a email')); - - $validator - ->scalar('role') - ->maxLength('role', 20) - ->notEmptyString('role'); - - $validator - ->boolean('activated') - ->notEmptyString('activated'); - - $validator - ->dateTime('last_login') - ->allowEmptyDateTime('last_login'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['username'])); - $rules->add($rules->isUnique(['email'])); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateBalancesTable.php b/community_server/src/Model/Table/StateBalancesTable.php deleted file mode 100644 index ff7a0aca2..000000000 --- a/community_server/src/Model/Table/StateBalancesTable.php +++ /dev/null @@ -1,325 +0,0 @@ -setTable('state_balances'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - public static function getDecayStartDateCached() - { - if(self::$startDecayDate == null) { - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - self::$startDecayDate = $transactionsTable->getDecayStartDate(); - } - return self::$startDecayDate; - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('amount', 'create') - ->notEmptyString('amount'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } - - public function calculateDecay($startBalance, FrozenTime $startDate, FrozenTime $endDate, $withInterval = false) - { - $decayStartDate = self::getDecayStartDateCached(); - // if no start decay block exist, we just return input - // if start date for decay is after enddate, we also just return input - if($decayStartDate === null || $decayStartDate >= $endDate) { - if($withInterval) { - return [ - 'balance' => $startBalance, - 'interval' => new \DateInterval('PT0S'), - 'start_date' => $startDate->getTimestamp(), - 'end_date' => $startDate->getTimestamp() - ]; - } else { - return $startBalance; - } - } - $state_balance = $this->newEntity(); - $state_balance->amount = $startBalance; - $interval = null; - // if decay start date is before start date we calculate decay for full duration - if($decayStartDate < $startDate) { - $state_balance->record_date = $startDate; - $interval = $endDate->diff($startDate); - } - // if decay start in between start date and end date we caculcate decay from decay start time to end date - else { - $state_balance->record_date = $decayStartDate; - $interval = $endDate->diff($decayStartDate); - } - $decay = $state_balance->partDecay($endDate); - if($withInterval) { - return [ - 'balance' => $decay, - 'interval' => $interval, - 'start_date' => $state_balance->record_date->getTimestamp(), - 'end_date' => $endDate->getTimestamp() - ]; - } else { - return $decay; - } - - - } - - public function updateAllBalances() - { - $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers'); - $state_users = $stateUserTable->find()->select(['id'])->contain([]); - foreach($state_users as $state_user) { - $result = $this->updateBalances($state_user->id); - if($result['success'] === false) { - $result['state_user_id'] = $state_user->id; - return $result; - } - } - return ['success' => true]; - } - - public function updateBalances($stateUserId) - { - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $now = new FrozenTime; - // info: cakephp use lazy loading, query will be executed later only if needed - $state_balances = $this->find('all')->where(['state_user_id' => $stateUserId]); - $state_user_transactions = $stateUserTransactionsTable - ->find() - ->where(['state_user_id' => $stateUserId]) - ->order(['balance_date ASC']) - //->contain(false); - ; - - if(!$state_user_transactions || !$state_user_transactions->count()) { - return ['success' => true]; - } - - // first: decide what todo - $create_state_balance = false; - $recalculate_state_user_transactions_balance = false; - $clear_state_balance = false; - $update_state_balance = false; - if($state_balances->count() == 0) { - $create_state_balance = true; - $recalculate_state_user_transactions_balance = true; - } - if($state_balances->count() > 1) { - $clear_state_balance = true; - $create_state_balance = true; - $recalculate_state_user_transactions_balance = true; - } - if($state_balances->count() == 1) { - if($state_user_transactions->count() == 0){ - $clear_state_balance = true; - } else { - - $first_state_balance = $state_balances->first(); - $first_state_balance_decayed = self::calculateDecay( - $first_state_balance->amount, - $first_state_balance->record_date, - $now); - - $last_state_user_transaction = $state_user_transactions->last(); - $last_state_user_transaction_decayed = self::calculateDecay( - $last_state_user_transaction->balance, - $last_state_user_transaction->balance_date, - $now); - // if entrys are nearly the same, we don't need doing anything - if(floor($last_state_user_transaction_decayed/100) !== floor($first_state_balance_decayed/100)) { - $recalculate_state_user_transactions_balance = true; - $update_state_balance = true; - } - } - } - - if(!$recalculate_state_user_transactions_balance) { - $last_state_user_transaction = $state_user_transactions->last(); - if($last_state_user_transaction && $last_state_user_transaction->balance <= 0) { - $recalculate_state_user_transactions_balance = true; - if(!$create_state_balance) { - $update_state_balance = true; - } - } else if(!$last_state_user_transaction) { - - $creationsTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - $creationTransactions = $creationsTable - ->find('all') - ->where(['state_user_id' => $stateUserId]) - ->contain(false); - - $transferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - $transferTransactions = $transferTable - ->find('all') - ->where(['OR' => ['state_user_id' => $stateUserId, 'receiver_user_id' => $stateUserId]]) - ->contain(false); - if($creationTransactions->count() > 0 || $transferTransactions->count() > 0) { - return ['success' => false, 'error' => 'state_user_transactions is empty but it exist transactions for user']; - } - } - } - // second: do what is needed - if($clear_state_balance) { - $this->deleteAll(['state_user_id' => $stateUserId]); - } - - $transaction_ids = []; - if($recalculate_state_user_transactions_balance) { - - $state_user_transactions_array = $state_user_transactions->toArray(); - foreach($state_user_transactions_array as $i => $state_user_transaction) { - $transaction_ids[$state_user_transaction->transaction_id] = $i; - } - - $transactions = $transactionsTable - ->find('all') - ->where(['Transactions.id IN' => array_keys($transaction_ids)]) - ->contain(['TransactionCreations', 'TransactionSendCoins']); - - $transactions_indiced = []; - foreach($transactions as $transaction) { - $transactions_indiced[$transaction->id] = $transaction; - } - $balance_cursor = $this->newEntity(); - $i = 0; - foreach($state_user_transactions_array as $state_user_transaction) { - $transaction = $transactions_indiced[$state_user_transaction->transaction_id]; - if($transaction->transaction_type_id > 2) { - continue; - } - $amount = 0; - - if($transaction->transaction_type_id == 1) { // creation - $amount = intval($transaction->transaction_creation->amount); - } else if($transaction->transaction_type_id == 2) { // transfer - $temp = $transaction->transaction_send_coin; - $amount = intval($temp->amount); - // reverse if sender - if($stateUserId == $temp->state_user_id) { - $amount *= -1.0; - } - } - $amount_date = $transaction->received; - if($i == 0) { - $balance_cursor->amount = $amount; - } else { - - //$balance_cursor->amount = $balance_cursor->partDecay($amount_date) + $amount; - $balance_cursor->amount = - $this->calculateDecay($balance_cursor->amount, $balance_cursor->record_date, $amount_date) - + $amount; - } - //echo "new balance: " . $balance_cursor->amount . "
    "; - - $balance_cursor->record_date = $amount_date; - $state_user_transaction_index = $transaction_ids[$transaction->id]; - $state_user_transactions_array[$state_user_transaction_index]->balance = $balance_cursor->amount; - $state_user_transactions_array[$state_user_transaction_index]->balance_date = $balance_cursor->record_date; - $i++; - - } - - $results = $stateUserTransactionsTable->saveMany($state_user_transactions_array); - $errors = []; - foreach($results as $i => $result) { - if(!$result) { - $errors[$i] = $state_user_transactions_array[$i]->getErrors(); - } - } - if(count($errors)) { - return ['success' => false, 'error' => 'error saving one ore more state user transactions', 'details' => $errors]; - } - } - $state_balance = null; - if($update_state_balance) { - $state_balance = $state_balances->first(); - } - else if($create_state_balance) { - $state_balance = $this->newEntity(); - $state_balance->state_user_id = $stateUserId; - } - if($state_balance) { - $state_balance->amount = $state_user_transactions->last()->balance; - $state_balance->record_date = $state_user_transactions->last()->balance_date; - if(!$this->save($state_balance)) { - return ['success' => false, 'error' => 'error saving state balance', 'details' => $state_balance->getErrors()]; - } - } - return ['success' => true]; - - } - -} diff --git a/community_server/src/Model/Table/StateCreatedTable.php b/community_server/src/Model/Table/StateCreatedTable.php deleted file mode 100644 index c97851f28..000000000 --- a/community_server/src/Model/Table/StateCreatedTable.php +++ /dev/null @@ -1,96 +0,0 @@ -setTable('state_created'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('month', 'create') - ->notEmptyString('month'); - - $validator - ->requirePresence('year', 'create') - ->notEmptyString('year'); - - $validator - ->integer('short_ident_hash') - ->requirePresence('short_ident_hash', 'create') - ->notEmptyString('short_ident_hash'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateErrorsTable.php b/community_server/src/Model/Table/StateErrorsTable.php deleted file mode 100644 index 62893b7bf..000000000 --- a/community_server/src/Model/Table/StateErrorsTable.php +++ /dev/null @@ -1,88 +0,0 @@ -setTable('state_errors'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('TransactionTypes', [ - 'foreignKey' => 'transaction_type_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('message_json') - ->requirePresence('message_json', 'create') - ->notEmptyString('message_json'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateGroupAddressesTable.php b/community_server/src/Model/Table/StateGroupAddressesTable.php deleted file mode 100644 index a63e2ae1c..000000000 --- a/community_server/src/Model/Table/StateGroupAddressesTable.php +++ /dev/null @@ -1,85 +0,0 @@ -setTable('state_group_addresses'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - /*$this->belongsTo('Groups', [ - 'foreignKey' => 'group_id', - 'joinType' => 'INNER', - ]);*/ - $this->belongsTo('AddressTypes', [ - 'foreignKey' => 'address_type_id', - 'joinType' => 'INNER', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('public_key', 'create') - ->notEmptyString('public_key') - ->add('public_key', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['public_key'])); - //$rules->add($rules->existsIn(['group_id'], 'Groups')); - $rules->add($rules->existsIn(['address_type_id'], 'AddressTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateGroupRelationshipsTable.php b/community_server/src/Model/Table/StateGroupRelationshipsTable.php deleted file mode 100644 index 449561583..000000000 --- a/community_server/src/Model/Table/StateGroupRelationshipsTable.php +++ /dev/null @@ -1,85 +0,0 @@ -setTable('state_group_relationships'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateGroup1s', [ - 'foreignKey' => 'state_group1_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateGroup2s', [ - 'foreignKey' => 'state_group2_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateRelationships', [ - 'foreignKey' => 'state_relationship_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_group1_id'], 'StateGroup1s')); - $rules->add($rules->existsIn(['state_group2_id'], 'StateGroup2s')); - $rules->add($rules->existsIn(['state_relationship_id'], 'StateRelationships')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateGroupsTable.php b/community_server/src/Model/Table/StateGroupsTable.php deleted file mode 100644 index 49911d495..000000000 --- a/community_server/src/Model/Table/StateGroupsTable.php +++ /dev/null @@ -1,102 +0,0 @@ -setTable('state_groups'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Indices', [ - 'foreignKey' => 'index_id', - 'joinType' => 'INNER' - ]); - $this->hasMany('StateGroupAddresses', [ - 'foreignKey' => 'state_group_id' - ]); - $this->hasMany('StateUsers', [ - 'foreignKey' => 'state_group_id' - ]); - $this->hasMany('TransactionGroupCreates', [ - 'foreignKey' => 'state_group_id' - ]); - $this->hasMany('Transactions', [ - 'foreignKey' => 'state_group_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 50) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->requirePresence('root_public_key', 'create') - ->notEmptyString('root_public_key'); - - $validator - ->notEmptyString('user_count'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['index_id'], 'Indices')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateRelationshipTypesTable.php b/community_server/src/Model/Table/StateRelationshipTypesTable.php deleted file mode 100644 index a18e7ce51..000000000 --- a/community_server/src/Model/Table/StateRelationshipTypesTable.php +++ /dev/null @@ -1,63 +0,0 @@ -setTable('state_relationship_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 25) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->allowEmptyString('text'); - - return $validator; - } -} diff --git a/community_server/src/Model/Table/StateUserRolesTable.php b/community_server/src/Model/Table/StateUserRolesTable.php deleted file mode 100644 index 895e788b2..000000000 --- a/community_server/src/Model/Table/StateUserRolesTable.php +++ /dev/null @@ -1,86 +0,0 @@ -setTable('state_user_roles'); - $this->setPrimaryKey('id'); - - - $this->belongsTo('StateUser', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - - $this->belongsTo('Role', [ - 'foreignKey' => 'role_id', - 'joinType' => 'INNER' - ]); - - - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - // $rules->add($rules->existsIn(['index_id'], 'Indices')); - //$rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - - return $rules; - } - - -} diff --git a/community_server/src/Model/Table/StateUserTransactionsTable.php b/community_server/src/Model/Table/StateUserTransactionsTable.php deleted file mode 100644 index 2c984d964..000000000 --- a/community_server/src/Model/Table/StateUserTransactionsTable.php +++ /dev/null @@ -1,85 +0,0 @@ -setTable('state_user_transactions'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER', - ]); - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER', - ]); - $this->belongsTo('TransactionTypes', [ - 'foreignKey' => 'transaction_type_id', - 'joinType' => 'INNER', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->nonNegativeInteger('id') - ->allowEmptyString('id', null, 'create'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/StateUsersTable.php b/community_server/src/Model/Table/StateUsersTable.php deleted file mode 100644 index 5b01609f3..000000000 --- a/community_server/src/Model/Table/StateUsersTable.php +++ /dev/null @@ -1,136 +0,0 @@ -setTable('state_users'); - $this->setDisplayField('email'); - $this->setPrimaryKey('id'); - - /*$this->belongsTo('Indices', [ - 'foreignKey' => 'index_id', - 'joinType' => 'INNER' - ]);*/ - $this->belongsTo('StateGroups', [ - 'foreignKey' => 'state_group_id', - 'joinType' => 'INNER' - ]); - $this->hasMany('StateBalances', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('StateCreated', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('TransactionCreations', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('TransactionSendCoins', [ - 'foreignKey' => 'state_user_id' - ]); - $this->hasMany('TransactionReceivedCoins', [ - 'className' => 'TransactionSendCoins', - 'foreignKey' => 'receiver_user_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('public_key', 'create') - ->notEmptyString('public_key'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - // $rules->add($rules->existsIn(['index_id'], 'Indices')); - //$rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - - return $rules; - } - - public function getReceiverProposal() { - $stateUsers = $this->find('all'); - $receiverProposal = []; - foreach($stateUsers as $stateUser) { - $name = $stateUser->email; - $keyHex = bin2hex(stream_get_contents($stateUser->public_key)); - if($name === NULL) { - $name = $stateUser->first_name . ' ' . $stateUser->last_name; - } - array_push($receiverProposal, ['name' => $name, 'key' => $keyHex]); - //$stateUser->public_key - } - return $receiverProposal; - } - - public function getUsersIndiced($user_ids) - { - $involvedUser_temp = array_flip($user_ids); - // exchange back - $involvedUserIds = array_flip($involvedUser_temp); - $involvedUser = $this->find('all', [ - 'contain' => [], - 'where' => ['id IN' => $involvedUserIds], - 'fields' => ['id', 'first_name', 'last_name', 'email'], - ]); - //var_dump($involvedUser->toArray()); - $involvedUserIndices = []; - foreach ($involvedUser as $involvedUser) { - $involvedUserIndices[$involvedUser->id] = $involvedUser; - } - return $involvedUserIndices; - } -} diff --git a/community_server/src/Model/Table/TransactionCreationsTable.php b/community_server/src/Model/Table/TransactionCreationsTable.php deleted file mode 100644 index bc9592ccf..000000000 --- a/community_server/src/Model/Table/TransactionCreationsTable.php +++ /dev/null @@ -1,89 +0,0 @@ -setTable('transaction_creations'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('amount', 'create') - ->notEmptyString('amount'); - - $validator - //->requirePresence('ident_hash', 'create') - //->notEmptyString('ident_hash'); - ->allowEmptyString('ident_hash', null, 'create'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['receiver_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionGroupAddaddressTable.php b/community_server/src/Model/Table/TransactionGroupAddaddressTable.php deleted file mode 100644 index cb9912083..000000000 --- a/community_server/src/Model/Table/TransactionGroupAddaddressTable.php +++ /dev/null @@ -1,88 +0,0 @@ -setTable('transaction_group_addaddress'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('AddressTypes', [ - 'foreignKey' => 'address_type_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('public_key', 'create') - ->notEmptyString('public_key'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['address_type_id'], 'AddressTypes')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php b/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php deleted file mode 100644 index 463d1af8e..000000000 --- a/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php +++ /dev/null @@ -1,83 +0,0 @@ -setTable('transaction_group_allowtrades'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('Groups', [ - 'foreignKey' => 'group_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->boolean('allow') - ->notEmptyString('allow'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['group_id'], 'Groups')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionGroupCreatesTable.php b/community_server/src/Model/Table/TransactionGroupCreatesTable.php deleted file mode 100644 index 263182b8e..000000000 --- a/community_server/src/Model/Table/TransactionGroupCreatesTable.php +++ /dev/null @@ -1,89 +0,0 @@ -setTable('transaction_group_creates'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateGroups', [ - 'foreignKey' => 'state_group_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('group_public_key', 'create') - ->notEmptyString('group_public_key'); - - $validator - ->scalar('name') - ->maxLength('name', 64) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionSendCoinsTable.php b/community_server/src/Model/Table/TransactionSendCoinsTable.php deleted file mode 100644 index c1530e908..000000000 --- a/community_server/src/Model/Table/TransactionSendCoinsTable.php +++ /dev/null @@ -1,102 +0,0 @@ -setTable('transaction_send_coins'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('StateUsers', [ - 'foreignKey' => 'state_user_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('ReceiverUsers', [ - 'className' => 'StateUsers', - 'foreignKey' => 'receiver_user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('sender_public_key', 'create') - ->notEmptyString('sender_public_key'); - - $validator - ->requirePresence('receiver_public_key', 'create') - ->notEmptyString('receiver_public_key'); - - $validator - ->requirePresence('amount', 'create') - ->notEmptyString('amount'); - - $validator - ->requirePresence('sender_final_balance', 'create') - ->notEmptyString('sender_final_balance'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - $rules->add($rules->existsIn(['state_user_id'], 'StateUsers')); - $rules->add($rules->existsIn(['receiver_user_id'], 'ReceiverUsers')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionSignaturesTable.php b/community_server/src/Model/Table/TransactionSignaturesTable.php deleted file mode 100644 index 60c1ae99f..000000000 --- a/community_server/src/Model/Table/TransactionSignaturesTable.php +++ /dev/null @@ -1,81 +0,0 @@ -setTable('transaction_signatures'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('Transactions', [ - 'foreignKey' => 'transaction_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->requirePresence('signature', 'create') - ->notEmptyString('signature'); - - $validator - ->requirePresence('pubkey', 'create') - ->notEmptyString('pubkey'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['transaction_id'], 'Transactions')); - - return $rules; - } -} diff --git a/community_server/src/Model/Table/TransactionTypesTable.php b/community_server/src/Model/Table/TransactionTypesTable.php deleted file mode 100644 index 2ffd1e64c..000000000 --- a/community_server/src/Model/Table/TransactionTypesTable.php +++ /dev/null @@ -1,120 +0,0 @@ -setTable('transaction_types'); - $this->setDisplayField('name'); - $this->setPrimaryKey('id'); - - $this->hasMany('Transactions', [ - 'foreignKey' => 'transaction_type_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->scalar('name') - ->maxLength('name', 45) - ->requirePresence('name', 'create') - ->notEmptyString('name'); - - $validator - ->scalar('text') - ->maxLength('text', 255) - ->allowEmptyString('text'); - - return $validator; - } - - public function fillWithDefault() - { - - $entry_contents = [ - [ - 'id' => 1, - 'name' => 'creation', - 'text' => 'create new gradidos for member and also for group (in development)', - ], [ - 'id' => 2, - 'name' => 'transfer', - 'text' => 'send gradidos from one member to another, also cross group transfer', - ], [ - 'id' => 3, - 'name' => 'group create', - 'text' => 'create a new group, trigger creation of new hedera topic and new blockchain on node server' - ], [ - 'id' => 4, - 'name' => 'group add member', - 'text' => 'add user to a group or move if he was already in a group' - ], [ - 'id' => 5, - 'name' => 'group remove member', - 'text' => 'remove user from group, maybe he was moved elsewhere' - ],[ - 'id' => 6, - 'name' => 'hedera topic create', - 'text' => 'create new topic on hedera' - ],[ - 'id' => 7, - 'name' => 'hedera topic send message', - 'text' => 'send consensus message over hedera topic' - ],[ - 'id' => 8, - 'name' => 'hedera account create', - 'text' => 'create new account on hedera for holding some founds with unencrypted keys' - ],[ - 'id' => 9, - 'name' => 'decay start', - 'text' => 'signalize the starting point for decay calculation, allowed only once per chain' - ] - ]; - $entities = $this->newEntities($entry_contents); - $this->truncate(); - $save_results = $this->saveManyWithErrors($entities); - if(!$save_results['success']) { - $save_results['msg'] = 'error by saving default transaction types'; - } - return $save_results; - } -} diff --git a/community_server/src/Model/Table/TransactionsTable.php b/community_server/src/Model/Table/TransactionsTable.php deleted file mode 100644 index 1f8606a82..000000000 --- a/community_server/src/Model/Table/TransactionsTable.php +++ /dev/null @@ -1,469 +0,0 @@ -setTable('transactions'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->belongsTo('StateGroups', [ - 'foreignKey' => 'state_group_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('TransactionTypes', [ - 'foreignKey' => 'transaction_type_id', - 'joinType' => 'INNER' - ]); - $this->belongsTo('BlockchainTypes', [ - 'foreignKey' => 'blockchain_type_id', - 'joinType' => 'INNER' - ]); - $this->hasMany('StateCreated', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionCreations', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionGroupAddaddress', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionGroupAllowtrades', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionGroupCreates', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasOne('TransactionSendCoins', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasMany('TransactionSignatures', [ - 'foreignKey' => 'transaction_id' - ]); - $this->hasMany('StateUserTransactions', [ - 'foreignKey' => 'transaction_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->allowEmptyString('id', null, 'create'); - - $validator - //->requirePresence('tx_hash', 'create') - ->allowEmptyString('tx_hash', null, 'create'); - - $validator - ->allowEmptyString('memo', null, 'create'); - - $validator - ->dateTime('received') - ->notEmptyDateTime('received'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['state_group_id'], 'StateGroups')); - $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes')); - $rules->add($rules->existsIn(['blockchain_type_id'], 'BlockchainTypes')); - - return $rules; - } - - public function sortTransactions($a, $b) - { - if ($a['date'] == $b['date']) { - return 0; - } - return ($a['date'] > $b['date']) ? -1 : 1; - } - - - public function listTransactionsHumanReadable($stateUserTransactions, array $user, $decay = true, $skip_first_transaction = false) - { - - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - - $transaction_ids = []; - $involved_user_ids = []; - $stateUserTransactionsCount = 0; - foreach($stateUserTransactions as $su_transaction) { - $transaction_ids[] = $su_transaction->transaction_id; - $involved_user_ids[] = $su_transaction->state_user_id; - $stateUserTransactionsCount++; - } - - $involved_users = $stateUsersTable->getUsersIndiced($involved_user_ids); - - $transactions = $this - ->find() - ->where(['Transactions.id IN' => $transaction_ids]) - ->contain(['TransactionSendCoins', 'TransactionCreations']) - ; - $transaction_indiced = []; - foreach($transactions as $tr) { - $transaction_indiced[$tr->id] = $tr; - } - - $state_balance = $stateBalancesTable->newEntity(); - $final_transactions = []; - $decay_start_transaction = $transactionsTable->find()->where(['transaction_type_id' => 9]); - $decay_start_transaction_id = 0; - if($decay_start_transaction->count()) { - $decay_start_transaction_id = $decay_start_transaction->first()->id; - } - $decay_start_date = $stateBalancesTable->getDecayStartDateCached(); - $decay_start_time = 0; - if($decay_start_date) { - $decay_start_time = $decay_start_date->getTimestamp(); - } - - foreach($stateUserTransactions as $i => $su_transaction) - { - // sender or receiver when user has sended money - // group name if creation - // type: gesendet / empfangen / geschöpft - // transaktion nr / id - // date - // balance - $transaction = $transaction_indiced[$su_transaction->transaction_id]; - - $final_transaction = [ - 'transaction_id' => $transaction->id, - 'date' => $transaction->received, - 'memo' => $transaction->memo - ]; - - $prev = null; - if($i > 0 ) { - $prev = $stateUserTransactions[$i-1]; - } - if($prev) - { - if($prev->balance > 0) - { - $current = $su_transaction; - $calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true); - $balance = floatval($prev->balance - $calculated_decay['balance']); - - if($balance) - { - $final_transaction['decay'] = [ - 'balance' => $balance, - 'decay_duration' => $calculated_decay['interval']->format('%a days, %H hours, %I minutes, %S seconds'), - 'decay_start' => $calculated_decay['start_date'], - 'decay_end' => $calculated_decay['end_date'] - ]; - if($decay_start_time && $prev->transaction_id < $decay_start_transaction_id && - $current->transaction_id > $decay_start_transaction_id) { - $final_transaction['decay']['decay_start_block'] = $decay_start_time; - } - // hint: use transaction id - /*if($calculated_decay['start_date'] < $decay_start_time && $calculated_decay['end_date'] > $decay_start_time) { - $final_transaction['decay']['decay_start_block'] = $decay_start_time; - } else { - echo "start block: " . $decay_start_time . "
    "; - echo "start date: " . $calculated_decay['start_date'] . "
    "; - echo "end date: " . $calculated_decay['end_date']. "
    "; - }*/ - } - } - } - - // sender or receiver when user has sended money - // group name if creation - // type: gesendet / empfangen / geschöpft - // transaktion nr / id - // date - // balance - $transaction = $transaction_indiced[$su_transaction->transaction_id]; - - if($su_transaction->transaction_type_id == 1) { // creation - $creation = $transaction->transaction_creation; - - $final_transaction['name'] = 'Gradido Akademie'; - $final_transaction['type'] = 'creation'; - $final_transaction['target_date'] = $creation->target_date; - //$final_transaction['creation_amount'] = $creation->amount; - $final_transaction['balance'] = $creation->amount; - - } else if($su_transaction->transaction_type_id == 2) { // transfer or send coins - $sendCoins = $transaction->transaction_send_coin; - $otherUser = null; - $final_transaction['balance'] = $sendCoins->amount; - $other_user_public = ''; - if ($sendCoins->state_user_id == $user['id']) { - $final_transaction['type'] = 'send'; - - if(isset($involved_users[$sendCoins->receiver_user_id])) { - $otherUser = $involved_users[$sendCoins->receiver_user_id]; - } - $final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->receiver_public_key)); - } else if ($sendCoins->receiver_user_id == $user['id']) { - $final_transaction['type'] = 'receive'; - if(isset($involved_users[$sendCoins->state_user_id])) { - $otherUser = $involved_users[$sendCoins->state_user_id]; - } - if($sendCoins->sender_public_key) { - $final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->sender_public_key)); - } - } - if(null == $otherUser) { - $otherUser = $stateUsersTable->newEntity(); - } - $final_transaction['name'] = $otherUser->first_name . ' ' . $otherUser->last_name; - $final_transaction['email'] = $otherUser->email; - } - if($i > 0 || !$skip_first_transaction) { - $final_transactions[] = $final_transaction; - } - - if($i == $stateUserTransactionsCount-1 && $decay) { - $now = new FrozenTime(); - $calculated_decay = $stateBalancesTable->calculateDecay( - $su_transaction->balance, - $su_transaction->balance_date, $now, true); - $decay_start_date = $stateBalancesTable->getDecayStartDateCached(); - $duration = $su_transaction->balance_date->timeAgoInWords(); - if($decay_start_date > $su_transaction->balance_date) { - $duration = $decay_start_date->timeAgoInWords(); - } - $balance = floatval($su_transaction->balance - $calculated_decay['balance']); - if($balance) { - $final_transactions[] = [ - 'type' => 'decay', - 'balance' => $balance, - 'decay_duration' => $duration, - 'decay_start' => $calculated_decay['start_date'], - 'decay_end' => $calculated_decay['end_date'], - 'memo' => '' - ]; - } - } - } - - return $final_transactions; - - } - - public function updateTxHash($transaction, $signatureMapString) - { - $transaction_id = $transaction->id; - $previousTxHash = null; - if($transaction_id > 1) { - try { - $previousTransaction = $this - ->find('all', ['contain' => false]) - ->select(['tx_hash']) - ->where(['id' => $transaction_id - 1]) - ->first(); - /*$previousTransaction = $transactionsTable->get($this->mTransactionID - 1, [ - 'contain' => false, - 'fields' => ['tx_hash'] - ]);*/ - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - return ['state' => 'error', 'msg' => 'previous transaction not found', 'details' => $ex->getMessage()]; - } - if(!$previousTransaction) { - // shouldn't occur - return ['state' => 'error', 'msg' => 'previous transaction not found']; - } - $previousTxHash = $previousTransaction->tx_hash; - } - try { - //$transactionEntity->received = $transactionsTable->get($transactionEntity->id, ['contain' => false, 'fields' => ['received']])->received; - $transaction->received = $this - ->find('all', ['contain' => false]) - ->where(['id' => $transaction->id]) - ->select(['received'])->first()->received; - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - return ['state' => 'error', 'msg' => 'current transaction not found in db', 'details' => $ex->getMessage()]; - } - - // calculate tx hash - // previous tx hash + id + received + sigMap as string - // Sodium use for the generichash function BLAKE2b today (11.11.2019), mabye change in the future - $state = \Sodium\crypto_generichash_init(); - //echo "prev hash: $previousTxHash\n"; - if($previousTxHash != null) { - \Sodium\crypto_generichash_update($state, stream_get_contents($previousTxHash)); - } - //echo "id: " . $transactionEntity->id . "\n"; - \Sodium\crypto_generichash_update($state, strval($transaction->id)); - //echo "received: " . $transactionEntity->received; - \Sodium\crypto_generichash_update($state, $transaction->received->i18nFormat('yyyy-MM-dd HH:mm:ss')); - \Sodium\crypto_generichash_update($state, $signatureMapString); - $transaction->tx_hash = \Sodium\crypto_generichash_final($state); - if ($this->save($transaction)) { - return true; - } - return ['state' => 'error', 'msg' => 'error by saving transaction', 'details' => $transaction->getErrors()]; - } - - /*! - * @return: false if no decay start block found - * @return: DateTime Object with start date if one start block found - * @return: ['state':'error'] if more than one found - */ - public function getDecayStartDate() - { - $transaction = $this->find()->where(['transaction_type_id' => 9])->select(['received'])->order(['received' => 'ASC']); - if($transaction->count() == 0) { - return null; - } - return $transaction->first()->received; - } - - public function fillStateUserTransactions() - { - $missing_transaction_ids = []; - $transaction_ids = $this - ->find('all') - ->select(['id', 'transaction_type_id']) - ->order(['id']) - ->where(['transaction_type_id <' => 6]) - ->all() - ; - $state_user_transaction_ids = $this->StateUserTransactions - ->find('all') - ->select(['transaction_id']) - ->group(['transaction_id']) - ->order(['transaction_id']) - ->toArray() - ; - $i2 = 0; - $count = count($state_user_transaction_ids); - foreach($transaction_ids as $tr_id) { - //echo "$i1: "; - if($i2 >= $count) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id, continue
    "; - continue; - } - $stu_id = $state_user_transaction_ids[$i2]; - if($tr_id->id == $stu_id->transaction_id) { - $i2++; - //echo "after i2++: $i2
    "; - } else if($tr_id->id < $stu_id->transaction_id) { - $missing_transaction_ids[] = $tr_id; - //echo "adding to missing: $tr_id
    "; - } - } - - - $tablesForType = [ - 1 => $this->TransactionCreations, - 2 => $this->TransactionSendCoins, - 3 => $this->TransactionGroupCreates, - 4 => $this->TransactionGroupAddaddress, - 5 => $this->TransactionGroupAddaddress - ]; - $idsForType = []; - foreach($missing_transaction_ids as $i => $transaction) { - if(!isset($idsForType[$transaction->transaction_type_id])) { - $idsForType[$transaction->transaction_type_id] = []; - } - $idsForType[$transaction->transaction_type_id][] = $transaction->id; - } - $entities = []; - $state_user_ids = []; - foreach($idsForType as $type_id => $transaction_ids) { - $specific_transactions = $tablesForType[$type_id]->find('all')->where(['transaction_id IN' => $transaction_ids])->toArray(); - $keys = $tablesForType[$type_id]->getSchema()->columns(); - //var_dump($keys); - foreach($specific_transactions as $specific) { - - foreach($keys as $key) { - if(preg_match('/_user_id/', $key)) { - $entity = $this->StateUserTransactions->newEntity(); - $entity->transaction_id = $specific['transaction_id']; - $entity->transaction_type_id = $type_id; - $entity->state_user_id = $specific[$key]; - if(!in_array($entity->state_user_id, $state_user_ids)) { - array_push($state_user_ids, $entity->state_user_id); - } - $entities[] = $entity; - } - } - } - } - if(count($state_user_ids) < 1) { - return ['success' => true]; - } - //var_dump($entities); - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - $existingStateUsers = $stateUsersTable->find('all')->select(['id'])->where(['id IN' => $state_user_ids])->order(['id'])->all(); - $existing_state_user_ids = []; - $finalEntities = []; - foreach($existingStateUsers as $stateUser) { - $existing_state_user_ids[] = $stateUser->id; - } - foreach($entities as $entity) { - if(in_array($entity->state_user_id, $existing_state_user_ids)) { - array_push($finalEntities, $entity); - } - } - - $save_results = $this->StateUserTransactions->saveManyWithErrors($finalEntities); - if(!$save_results['success']) { - $save_results['msg'] = 'error by saving at least one state user transaction'; - } - return $save_results; - } -} diff --git a/community_server/src/Model/Table/UsersTable.php b/community_server/src/Model/Table/UsersTable.php deleted file mode 100644 index 0e99ba521..000000000 --- a/community_server/src/Model/Table/UsersTable.php +++ /dev/null @@ -1,130 +0,0 @@ -setTable('users'); - $this->setDisplayField('id'); - $this->setPrimaryKey('id'); - - $this->addBehavior('Timestamp'); - - $this->hasMany('EmailOptIn', [ - 'foreignKey' => 'user_id', - ]); - $this->hasMany('UserBackups', [ - 'foreignKey' => 'user_id', - ]); - $this->hasMany('UserRoles', [ - 'foreignKey' => 'user_id', - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->integer('id') - ->allowEmptyString('id', null, 'create'); - - $validator - ->email('email') - ->requirePresence('email', 'create') - ->notEmptyString('email') - ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); - - $validator - ->scalar('first_name') - ->maxLength('first_name', 150) - ->requirePresence('first_name', 'create') - ->notEmptyString('first_name'); - - $validator - ->scalar('last_name') - ->maxLength('last_name', 255) - ->allowEmptyString('last_name'); - - $validator - ->requirePresence('password', 'create') - ->notEmptyString('password'); - - $validator - ->allowEmptyString('pubkey'); - - $validator - ->allowEmptyString('privkey'); - - $validator - ->boolean('email_checked') - ->notEmptyString('email_checked'); - - $validator - ->scalar('language') - ->maxLength('language', 4) - ->notEmptyString('language'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['email'])); - - return $rules; - } - - /** - * Returns the database connection name to use by default. - * - * @return string - */ - public static function defaultConnectionName() - { - return 'loginServer'; - } -} diff --git a/community_server/src/Model/Transactions/Record.php b/community_server/src/Model/Transactions/Record.php deleted file mode 100644 index 5572730ef..000000000 --- a/community_server/src/Model/Transactions/Record.php +++ /dev/null @@ -1,575 +0,0 @@ -signature = $signature; - $this->publicKey = $pubkey; - } - - public function finalize($transactionId) - { - $signaturesTable = TableRegistry::getTableLocator()->get('TransactionSignatures'); - $entity = $signaturesTable->newEntity(); - $entity->transaction_id = $transactionId; - if(strlen($this->signature) != 128) { - return ['state' => 'error', 'msg' => 'invalid signature size', 'details' => strlen($this->signature)]; - } - if(strlen($this->publicKey) != 64) { - return ['state' => 'error', 'msg' => 'invalid pubkey size', 'details' => strlen($this->publicKey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->signature)) { - return ['state' => 'error', 'msg' => 'signature isn\'t in hex format']; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->publicKey)) { - return ['state' => 'error', 'msg' => 'publicKey isn\'t in hex format']; - } - $entity->signature = hex2bin($this->signature); - $entity->pubkey = hex2bin($this->publicKey); - - if(!$signaturesTable->save($entity)) { - return ['state' => 'error', 'msg' => 'error saving signature', 'details' => $entity->getErrors()]; - } - return true; - } -} - - - -class GradidoModifieUserBalance -{ - private $state_users = []; - private $user_balances = []; - - public function getUserId($userPublicKey) - { - $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); - - $stateUser = $stateUsersTable->find('all')->where(['public_key' => hex2bin($userPublicKey)]); - if($stateUser->isEmpty()) { - return ['state' => 'error', 'msg' => '[GradidoModifieUserBalance::getUserId] couldn\'t find user via public key']; - } - $id = $stateUser->first()->id; - if($id && is_int($id) && (int)$id > 0 && !in_array((int)$id, $this->state_users)) { - array_push($this->state_users, (int)$id); - } - return $id; - } - - public function updateBalance($newBalance, $recordDate, $userId) - { - $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); - $state_balance_query = $stateBalancesTable->find()->where(['state_user_id' => $userId])->order(['record_date ASC']); - $state_balance = null; - if($state_balance_query->count() > 0) { - $state_balance = $state_balance_query->last(); - } else { - $state_balance = $stateBalancesTable->newEntity(); - $state_balance->state_user_id = $userId; - } - $state_balance->amount = $newBalance; - $state_balance->record_date = $recordDate; - $this->user_balances[$userId] = $state_balance; - $stateBalancesTable->save($state_balance); - return true; - //$this->user_balances[$userId] = ['balance' => $newBalance, ''] - // - //return $stateBalancesTable->updateBalanceWithTransaction($newBalance, $recordDate, $userId); - - /*$first_of_month = new Time("$year-$month-01 00:00"); - $stateBalanceQuery = $stateBalancesTable - ->find('all') - ->where(['state_user_id' => $userId]) - ->order(['record_date' => 'DESC']) - ->limit(1); - $entity = null; - - if(!$stateBalanceQuery->isEmpty()) { - $entity = $stateBalanceQuery->first(); - if($entity->record_date != NULL && - ($entity->record_date > $recordDate || $entity->record_date->day == 1)) { - return false; - } - } else { - $entity = $stateBalancesTable->newEntity(); - $entity->state_user_id = $userId; - } - $entity->record_date = $recordDate; - $entity->amount = $newBalance; - /*if(!$stateBalancesTable->save($entity)) { - return ['state' => 'error', 'msg' => 'error saving state balance', 'details' => $entity->getErrors()]; - }*/ - //return true; - } - - public function getAllStateUsers() - { - return $this->state_users; - } - public function getAllStateUserBalances() - { - return $this->user_balances; - } -} - -class ManageNodeGroupAdd extends GradidoModifieUserBalance -{ - /* - "add_user": { - "user\": " << user << ", - }, - OR - - "move_user_inbound|move_user_outbound": { - "user": " << user << ", - "other_group": " << other_group << ", - "paired_transaction_id": { - "seconds": << ts.seconds <<, - "nanos": << ts.nanos - } - }, - - */ - - private $user_pubkey; - private $other_group = ''; - private $remove_from_group = false; - - public function __construct($data) - { - $this->user_pubkey = $data['user']; - if(isset($data['other_group'])) { - $this->other_group = $data['other_group']; - } - } - - public function finalize($transactionId, $received) - { - $transactionGroupAddadressTable = TableRegistry::getTableLocator()->get('TransactionGroupAddaddress'); - $stateGroupAddresses = TableRegistry::getTableLocator()->get('StateGroupAddresses'); - $transactionGroupEntity = $transactionGroupAddadressTable->newEntity(); - if(!is_int($transactionId)) { - return ['state' => 'error', 'msg' => '[ManageNodeGroupAdd::finalize] transaction id is not int', 'details' => $transactionId]; - } - $transactionGroupEntity->transaction_id = $transactionId; - $transactionGroupEntity->address_type_id = 1; - if(strlen($this->user_pubkey) != 64) { - return ['state' => 'error', 'msg' => 'invalid size user pubkey', 'details' => strlen($this->user_pubkey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->user_pubkey)) { - return ['state' => 'error', 'msg' => 'user_pubkey isn\'t in hex format']; - } - - $userPubkeyBin = hex2bin($this->user_pubkey); - - $transactionGroupEntity->public_key = $userPubkeyBin; - $user_id = $this->getUserId($this->user_pubkey); - if(!is_int($user_id)) { - return ['state' => 'error', 'msg' => '[ManageNodeGroupAdd::finalize] user id is not int', 'details' => $user_id]; - } - $transactionGroupEntity->state_user_id = $user_id; - $transactionGroupEntity->remove_from_group = $this->remove_from_group; - if(!$transactionGroupAddadressTable->save($transactionGroupEntity)) { - return ['state' => 'error', 'msg' => 'error saving TransactionGroupAddaddress Entity', 'details' => $transactionGroupEntity->getErrors()]; - } - - - if($this->remove_from_group) { - $stateGroup_query = $stateGroupAddresses->find('all')->where(['public_key' => hex2bin($this->user_pubkey)]); - if(!$stateGroup_query->isEmpty()) { - $stateGroupAddresses->delete($stateGroup_query->first()); - } - } else { - $stateGroupAddressesEntity = $stateGroupAddresses->newEntity(); - $stateGroupAddressesEntity->group_id = 1; - $stateGroupAddressesEntity->public_key = $userPubkeyBin; - $stateGroupAddressesEntity->address_type_id = 1; - if(!$stateGroupAddresses->save($stateGroupAddressesEntity)) { - return ['state' => 'error', 'msg' => 'error saving state group addresses entity', 'details' => $stateGroupAddressesEntity->getErrors()]; - } - } - - return true; - } - - public function setRemoveFromGroup($removeFromGroup) { - $this->remove_from_group = $removeFromGroup; - } -} - - -class GradidoCreation extends GradidoModifieUserBalance -{ - /* - * "gradido_creation": { - "user": " << user << ", - "new_balance": << v.new_balance << , - "prev_transfer_rec_num": << v.prev_transfer_rec_num <<, - "amount": << v.amount << - } - */ - private $userPubkey; - private $amount; - private $targetDate; // seems currently not in node server implementet, use hedera date until it is implemented - private $new_balance; - - - public function __construct($data) - { - $this->userPubkey = $data['user']; - $this->amount = $data['amount']['amount']; - $this->new_balance = $data['new_balance']['amount']; - //$this->targetDate = $received; - } - - public function finalize($transactionId, $received) - { - // TODO: don't use, after node server transmit correct date - $this->targetDate = $received; - - $transactionCreationTable = TableRegistry::getTableLocator()->get('TransactionCreations'); - - - $state_user_id = $this->getUserId($this->userPubkey); - if(!is_int($state_user_id)) { - return $state_user_id; - } - - $entity = $transactionCreationTable->newEntity(); - $entity->transaction_id = $transactionId; - $entity->amount = $this->amount; - $entity->target_date = $this->targetDate; - $entity->state_user_id = $state_user_id; - - if(!$transactionCreationTable->save($entity)) { - return ['state' => 'error', 'msg' => 'error saving create transaction', 'details' => $entity->getErrors()]; - } - - $balance_result = $this->updateBalance($this->new_balance, $received, $state_user_id); - if(is_array($balance_result)) { - return $balance_result; - } - - return true; - } - - - -} - -class GradidoTransfer extends GradidoModifieUserBalance -{ - /* - "local_transfer|inbound_transfer|outbound_transfer": { - "sender": { - "user": " << sender << ", - "new_balance": << tt.sender.new_balance << , - "prev_transfer_rec_num": << tt.sender.prev_transfer_rec_num << - }, - "receiver": { - "user": " << receiver << ", - "new_balance": << tt.receiver.new_balance << , - "prev_transfer_rec_num": << tt.receiver.prev_transfer_rec_num << - }, - "amount": << tt.amount << - }, - * */ - private $amount; - private $sender_new_balance = null; - private $sender_pubkey; - - private $receiver_pubkey; - private $receiver_new_balance = null; - - - public function __construct($data) - { - $this->amount = $data['amount']['amount']; - - $sender = $data['sender']; - $this->sender_pubkey = $sender['user']; - if(isset($sender['new_balance'])) { - $this->sender_new_balance = $sender['new_balance']['amount']; - } - - $receiver = $data['receiver']; - $this->receiver_pubkey = $receiver['user']; - if(isset($receiver['new_balance'])) { - $this->receiver_new_balance = $receiver['new_balance']['amount']; - } - - } - - public function finalize($transactionId, $received) - { - $transactionTransferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - if(strlen($this->sender_pubkey) != 64) { - return ['state' => 'error', 'msg' => 'invalid size sender pubkey', 'details' => strlen($this->user_pubkey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->sender_pubkey)) { - return ['state' => 'error', 'msg' => 'sender_pubkey isn\'t in hex format']; - } - if(strlen($this->receiver_pubkey) != 64) { - return ['state' => 'error', 'msg' => 'invalid size receiver pubkey', 'details' => strlen($this->user_pubkey)]; - } - if(!preg_match('/^[0-9a-fA-F]*$/', $this->receiver_pubkey)) { - return ['state' => 'error', 'msg' => 'receiver_pubkey isn\'t in hex format']; - } - - $sender_id = $this->getUserId($this->sender_pubkey); - $receiver_id = $this->getUserId($this->receiver_pubkey); - if(is_array($sender_id) && is_array($receiver_id)) { - return ['state' => 'error', 'msg' => 'neither sender or receiver known']; - } - $transferEntity = $transactionTransferTable->newEntity(); - $transferEntity->transaction_id = $transactionId; - $transferEntity->sender_public_key = hex2bin($this->sender_pubkey); - $transferEntity->receiver_public_key = hex2bin($this->receiver_pubkey); - $transferEntity->amount = $this->amount; - if($this->sender_new_balance != null) { - $transferEntity->sender_final_balance = $this->sender_new_balance; - - if(is_int($sender_id) && $sender_id > 0) { - $transferEntity->state_user_id = $sender_id; - $balance_result = $this->updateBalance($this->sender_new_balance, $received, $sender_id); - if(is_array($balance_result)) { - return $balance_result; - } - } - } - if($this->receiver_new_balance != null && is_int($receiver_id) && $receiver_id > 0) { - $transferEntity->receiver_user_id = $receiver_id; - $balance_result = $this->updateBalance($this->receiver_new_balance, $received, $receiver_id); - if(is_array($balance_result)) { - return $balance_result; - } - } - - if(!$transactionTransferTable->save($transferEntity)) { - return ['state' => 'error', 'msg' => 'error saving transaction send coins entity', 'details' => $transferEntity->getErrors()]; - } - - return true; - } - -} - - - - -class Record -{ - private $sequenceNumber = 0; - private $runningHash = null; - private $transactionType = ''; - private $memo = ''; - private $signatures = []; - private $received; - private $transactionObj = null; - private $result; - private $partCount = 0; - - public function __construct() - { - - } - - - public function parseRecord($json) { - if(!isset($json['record_type'])) { - return false; - } - //var_dump($json); - switch($json['record_type']) { - case 'GRADIDO_TRANSACTION': - return $this->parseTransaction($json['transaction']); - case 'MEMO': - $this->memo .= $json['memo']; - return true; - case 'SIGNATURES': - return $this->parseSignatures($json['signature']); - case 'STRUCTURALLY_BAD_MESSAGE': - case 'RAW_MESSAGE': - case 'BLANK': - return false; - } - } - - /*! - * \brief save data parts in db - */ - public function finalize() - { - $transactionTypesTable = TableRegistry::getTableLocator()->get('TransactionTypes'); - $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); - $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); - - $transactionTypeName = $this->nodeTransactionTypeToDBTransactionType($this->transactionType); - $transactionTypeResults = $transactionTypesTable->find('all')->where(['name' => $transactionTypeName]); - if($transactionTypeResults->isEmpty()) { - return [ - 'state' => 'error', 'msg' => 'transaction type not found', - 'details' => ['nodeType' => $this->transactionType, 'dbType' => $transactionTypeName] - ]; - } - if(!$this->transactionObj) { - return ['state' => 'error', 'msg' => 'transaction obj is null']; - } - if($this->sequenceNumber <= 0) { - return ['state' => 'error', 'msg' => 'sequence number invalid', 'details' => $this->sequenceNumber]; - } - $transactionExistResult = $transactionsTable->find('all')->where(['id' => intval($this->sequenceNumber)]); - if(!$transactionExistResult->isEmpty()) { - return ['state' => 'warning', 'msg' => 'transaction already exist in db', 'details' => $this->sequenceNumber]; - } - $newTransaction = $transactionsTable->newEntity(); - $newTransaction->id = $this->sequenceNumber; - $newTransaction->transaction_type_id = $transactionTypeResults->first()->id; - $newTransaction->memo = $this->memo; - if($this->runningHash != '' && strlen($this->runningHash) % 2 == 0) { - $newTransaction->tx_hash = hex2bin($this->runningHash); - } - $newTransaction->received = $this->received; - - //! TODO change into transaction, if at least one fail, rollback - /* - // In a controller. - $articles->getConnection()->transactional(function () use ($articles, $entities) { - foreach ($entities as $entity) { - $articles->save($entity, ['atomic' => false]); - } - }); - */ - if(!$transactionsTable->save($newTransaction)) { - return ['state' => 'error', 'msg' => 'error saving transaction', 'details' => $newTransaction->getErrors()]; - } - - foreach($this->signatures as $sign) { - $sign_result = $sign->finalize($this->sequenceNumber); - if($sign_result !== true) { - return ['state' => 'error', 'msg', 'error finalizing signature', 'details' => $sign_result]; - } - } - $transaction_obj_result = $this->transactionObj->finalize($newTransaction->id, $this->received); - if($transaction_obj_result !== true) { - return ['state' => 'error', 'msg' => 'error finalizing transaction object', 'details' => $transaction_obj_result]; - } - $state_users = $this->transactionObj->getAllStateUsers(); - $sut_entities = []; - $state_user_balances = $this->transactionObj->getAllStateUserBalances(); - foreach($state_users as $state_user_id) { - $entity = $stateUserTransactionsTable->newEntity(); - $entity->state_user_id = $state_user_id; - $entity->transaction_id = $newTransaction->id; - $entity->transaction_type_id = $newTransaction->transaction_type_id; - $entity->balance = $state_user_balances[$state_user_id]->amount; - $entity->balance_date = $state_user_balances[$state_user_id]->record_date; - $sut_entities[] = $entity; - } - $sut_results = $stateUserTransactionsTable->saveMany($sut_entities); - foreach($sut_results as $i => $result) { - if(false == $result) { - return ['state' => 'error', 'msg' => 'error saving state_user_transaction', 'details' => $sut_entities[$i]->getErrors()]; - } - } - - return true; - - } - - private function nodeTransactionTypeToDBTransactionType($nodeTransactionType) - { - switch($nodeTransactionType) { - case 'GRADIDO_CREATION': - return 'creation'; - - case 'MOVE_USER_INBOUND': - case 'ADD_USER': - return 'group add member'; - - case 'MOVE_USER_OUTBOUND': - return 'group remove member'; - - case 'LOCAL_TRANSFER': - case 'INBOUND_TRANSFER': - case 'OUTBOUND_TRANSFER': - return 'transfer'; - } - return 'unknown'; - } - - private function parseSignatures($signaturesArray) - { - foreach($signaturesArray as $sign) { - $this->signatures[] = new Signature($sign['signature'], $sign['pubkey']); - } - return true; - } - - private function parseTransaction($data) - { - $this->transactionType = $data['transaction_type']; - $sign = $data['signature']; - $this->signatures[] = new Signature($sign['signature'], $sign['pubkey']); - - $hedera = $data['hedera_transaction']; - $this->sequenceNumber = $hedera['sequenceNumber']; - $this->runningHash = $hedera['runningHash']; - $this->received = Time::createFromTimestamp($hedera['consensusTimestamp']['seconds']); - - $field_index = ''; - $class_name = ''; - - $removeFromGroup = false; - switch($this->transactionType) - { - case 'GRADIDO_CREATION': $field_index = 'gradido_creation'; $class_name = 'GradidoCreation'; break; - case 'ADD_USER': $field_index = 'add_user'; $class_name = 'ManageNodeGroupAdd'; break; - case 'MOVE_USER_INBOUND': $field_index = 'move_user_inbound'; $class_name = 'ManageNodeGroupAdd'; break; - case 'MOVE_USER_OUTBOUND': $field_index = 'move_user_outbound'; $class_name = 'ManageNodeGroupAdd'; $removeFromGroup = true; break; - case 'LOCAL_TRANSFER': $field_index = 'local_transfer'; $class_name = 'GradidoTransfer'; break; - case 'INBOUND_TRANSFER': $field_index = 'inbound_transfer'; $class_name = 'GradidoTransfer'; break; - case 'OUTBOUND_TRANSFER': $field_index = 'outbound_transfer'; $class_name = 'GradidoTransfer'; break; - } - if($class_name == '' || $field_index == '') { - return ['state' => 'error', 'msg' => 'node transaction type unknown', 'details' => $this->transactionType]; - } - $class_name = 'Model\\Transactions\\' . $class_name; - $this->transactionObj = new $class_name($data[$field_index]); - if($class_name == 'ManageNodeGroupAdd') { - $this->transactionObj->setRemoveFromGroup($removeFromGroup); - } - - $this->result = $data['result']; - $this->partCount = intval($data['parts']); - $this->memo = $data['memo']; - return true; - } - - public function getSequenceNumber() { - return $this->sequenceNumber; - } - public function getPartCount() { - return $this->partCount; - } - -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/SignatureMap.php b/community_server/src/Model/Transactions/SignatureMap.php deleted file mode 100644 index cbe48e636..000000000 --- a/community_server/src/Model/Transactions/SignatureMap.php +++ /dev/null @@ -1,68 +0,0 @@ -mProtoSigMap = $protoSigMap; - } - - public function getProto() { - return $this->mProtoSigMap; - } - - static public function fromEntity($transactionSignatures) - { - - $protoSigMap = new \Proto\Gradido\SignatureMap(); - $sigPairs = $protoSigMap->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); echo "
    "; - //return null; - foreach($transactionSignatures as $signature) { - $sigPair = new \Proto\Gradido\SignaturePair(); - $sigPair->setPubKey(stream_get_contents($signature->pubkey)); - $sigPair->setEd25519(stream_get_contents($signature->signature)); - - $sigPairs[] = $sigPair; - //array_push($sigPairs, $sigPair); - } - return new SignatureMap($protoSigMap); - } - - static public function build($bodyBytes, array $keys) - { - $protoSigMap = new \Proto\Gradido\SignatureMap(); - $sigPairs = $protoSigMap->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); echo "
    "; - //return null; - - // sign with keys - foreach($keys as $key) { - $sigPair = new \Proto\Gradido\SignaturePair(); - $sigPair->setPubKey(hex2bin($key['pub'])); - $sigPair->setEd25519(sodium_crypto_sign_detached($bodyBytes, hex2bin($key['priv']))); - - $sigPairs[] = $sigPair; - } - //array_push($sigPairs, $sigPair); - - return new SignatureMap($protoSigMap); - } - - -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/Transaction.php b/community_server/src/Model/Transactions/Transaction.php deleted file mode 100644 index 810f20c9d..000000000 --- a/community_server/src/Model/Transactions/Transaction.php +++ /dev/null @@ -1,289 +0,0 @@ -mProtoTransaction = $base64Data; - $this->mTransactionBody = new TransactionBody($this->mProtoTransaction->getBodyBytes()); - return; - } - - try { - $transactionBin = sodium_base642bin($base64Data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING); - } catch(\SodiumException $e) { - //$this->addError('Transaction', $e->getMessage());// . ' ' . $base64Data); - //return; - $transactionBin = base64_decode($base64Data, true); - if($transactionBin == false) { - $this->addError('Transaction', $e->getMessage());// . ' ' . $base64Data); - $this->addError('base64', $base64Data); - return; - } - } - //*/} - - if($transactionBin == false) { - //$this->addError('base64 decode failed'); - $this->addError('Transaction', 'base64 decode error: ' . $base64Data); - } else { - //var_dump($transactionBin); - $this->mProtoTransaction = new \Proto\Gradido\GradidoTransaction(); - try { - $this->mProtoTransaction->mergeFromString($transactionBin); - //var_dump($this->mProtoTransaction); - // cannot catch Exception with cakePHP, I don't know why - } catch(\Google\Protobuf\Internal\GPBDecodeException $e) { - //var_dump($e); - $this->addError('Transaction', $e->getMessage()); - return; - }//*/ - - //echo 'serialize to json:
    '; - //echo $this->mProtoTransaction->serializeToJsonString(); - //echo "body bytes:
    "; - //var_dump($this->mProtoTransaction->getBodyBytes()); - //echo "
    end body bytes
    "; - $this->mTransactionBody = new TransactionBody($this->mProtoTransaction->getBodyBytes()); - } - } - - static public function build(\Proto\Gradido\TransactionBody $transactionBody, $senderKeyPair) - { - $protoTransaction = new \Proto\Gradido\GradidoTransaction(); - - $recevied = new \Proto\Gradido\TimestampSeconds(); - $recevied->setSeconds(time()); - $protoTransaction->setReceived($recevied); - - $bodyBytes = $transactionBody->serializeToString(); - - $sigMap = SignatureMap::build($bodyBytes, [$senderKeyPair]); - $protoTransaction->setSigMap($sigMap->getProto()); - - $protoTransaction->setBodyBytes($bodyBytes); - - return $protoTransaction; - - } - - public function getTransactionBody() { - return $this->mTransactionBody; - } - - public function getFirstPublic() - { - if(!$this->mProtoTransaction || !$this->mProtoTransaction->getSigMap()) { - return ''; - } - $sigPairs = $this->mProtoTransaction->getSigMap()->getSigPair(); - return $sigPairs[0]->getPubKey(); - } - - public function getFirstSigningUser() - { - return $this->getStateUserFromPublickey($this->getFirstPublic()); - } - - public function getId() { - return $this->mProtoTransaction->getId(); - } - - public function validate() { - $sigMap = $this->mProtoTransaction->getSigMap(); - if(!$sigMap) { - $this->addError('Transaction', 'signature map is zero'); - //var_dump($this->mProtoTransaction); - return false; - } - //var_dump($sigMap); - //die(); - $sigPairs = $sigMap->getSigPair(); - $bodyBytes = $this->mProtoTransaction->getBodyBytes(); - - - if(!$sigPairs || count($sigPairs) < 1) { - $this->addError('Transaction::validate', 'no signature found'); - return false; - } - - // check signature(s) - foreach($sigPairs as $sigPair) { - //echo 'sig Pair: '; var_dump($sigPair); echo "
    "; - $pubkey = $sigPair->getPubKey(); - $signature = $sigPair->getEd25519(); - //echo "verify bodybytes:
    " . bin2hex($bodyBytes) . '
    '; - if (!\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) { - $this->addError('Transaction::validate', 'signature for key ' . bin2hex($pubkey) . ' isn\'t valid ' ); - return false; - } - } - - if(!$this->mTransactionBody->validate($sigPairs)) { - $this->addErrors($this->mTransactionBody->getErrors()); - return false; - } - - return true; - } - - public function save() - { - $connection = ConnectionManager::get('default'); - $connection->begin(); - //id transaction_id signature pubkey - - if (!$this->mTransactionBody->save($this->getFirstPublic(), $this->mProtoTransaction->getSigMap())) { - $this->addErrors($this->mTransactionBody->getErrors()); - $connection->rollback(); - // correct auto-increment value to prevent gaps - $transactionsTable = $this->getTable('transactions'); - $transactions = $transactionsTable->find()->select(['id'])->contain(false); - $count = $transactions->count(); - $connection = ConnectionManager::get('default'); - $connection->execute("ALTER TABLE `transactions` auto_increment = $count;"); - - return false; - } - - // save transaction signatures - $transactionsSignaturesTable = TableRegistry::getTableLocator()->get('transaction_signatures'); - $transactionId = $this->mTransactionBody->getTransactionID(); - //signature pubkey - - $sigPairs = $this->mProtoTransaction->getSigMap()->getSigPair(); - //echo "sigPairs: "; var_dump($sigPairs); - $signatureEntitys = []; - foreach($sigPairs as $sigPair) { - $signatureEntity = $transactionsSignaturesTable->newEntity(); - $signatureEntity->transaction_id = $transactionId; - $signatureEntity->signature = $sigPair->getEd25519(); - $signatureEntity->pubkey = $sigPair->getPubKey(); - array_push($signatureEntitys, $signatureEntity); - } - //debug($signatureEntitys); - if(!$transactionsSignaturesTable->saveMany($signatureEntitys)) { - foreach($signatureEntitys as $entity) { - $errors = $entity->getErrors(); - if(!$errors && count($errors) > 0) { - $pubkeyHex = bin2hex($entity->pubkey); - $this->addError('Transaction::save', 'error saving signature for pubkey: ' . $pubkeyHex . ', with errors: ' . json_encode($errors) ); - } - } - $connection->rollback(); - return false; - } - - $connection->commit(); - - $specificTransaction = $this->mTransactionBody->getSpecificTransaction(); - - $specificTransaction->sendNotificationEmail($this->mTransactionBody->getMemo()); - $this->addWarnings($specificTransaction->getWarnings()); - return true; - } - - static public function fromTable($id) - { - $transactionsTable = TableRegistry::getTableLocator()->get('transactions'); - $transactionEntry = $transactionsTable - ->find('all') - ->where(['id' => $id]) - ->contain([ - 'TransactionCreations', - 'TransactionSendCoins', - 'TransactionSignatures']) - ->first(); - //var_dump($transactionEntry->toArray()); - $protoTransaction = new \Proto\Gradido\Transaction(); - - - - $protoTransaction->setId($transactionEntry->id); - - - $recevied = new \Proto\Gradido\TimestampSeconds(); - $recevied->setSeconds($transactionEntry->received->getTimestamp()); - $protoTransaction->setReceived($recevied); - - - $sigMap = SignatureMap::fromEntity($transactionEntry->transaction_signatures); - $protoTransaction->setSigMap($sigMap->getProto()); - - //echo "sig map: check
    "; - $protoTransaction->setTxHash(stream_get_contents($transactionEntry->tx_hash)); - - $body = TransactionBody::fromEntity($transactionEntry->memo, $transactionEntry); - if(is_array($body)) { - return ['state' => 'error', 'msg' => 'error creating body transaction', 'details' => $body]; - } - - // validate signatures - $sigPairs = $sigMap->getProto()->getSigPair(); - - if(!$sigPairs || count($sigPairs) < 1) { - return ['state' => 'error', 'msg' => 'error no signatures found']; - } - - //echo "verify bodybytes:
    " . bin2hex($bodyBytes) . '
    '; - $created = new \Proto\Gradido\TimestampSeconds(); - $created->setSeconds($recevied->getSeconds()); - $body->setCreated($created); - $bodyBytes = $body->serializeToString(); - $createTrys = 0; - $createRight = false; - // check signature(s) and - // try to get created field of TransactionBody right, because it wasn't saved - foreach($sigPairs as $sigPair) { - //echo 'sig Pair: '; var_dump($sigPair); echo "
    "; - $pubkey = $sigPair->getPubKey(); - $signature = $sigPair->getEd25519(); - if(!$createRight) { - while($createTrys < 500) { - if(\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) { - $createRight = true; - break; - } else { - $createTrys++; - $created->setSeconds($created->getSeconds() - 1); - //$body->setCreated($created); - $bodyBytes = $body->serializeToString(); - } - } - } - - if (!\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) { - return ['state' => 'error', 'msg' => 'signature for key ' . bin2hex($pubkey) . ' isn\'t valid ']; - } - } - - $protoTransaction->setBodyBytes($bodyBytes); - - - - return $protoTransaction; - } - -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/TransactionBase.php b/community_server/src/Model/Transactions/TransactionBase.php deleted file mode 100644 index 6b3817201..000000000 --- a/community_server/src/Model/Transactions/TransactionBase.php +++ /dev/null @@ -1,166 +0,0 @@ -errors; - } - - public function getWarnings() { - return $this->warnings; - } - public function addError($functionName, $errorName) { - array_push($this->errors, [$functionName => $errorName]); - } - public function addWarning($functionName, $warningName) { - array_push($this->warnings, [$functionName => $warningName]); - } - - public function addErrors($errors) { - $this->errors = array_merge($this->errors, $errors); - } - - public function addWarnings($warnings) { - $this->warnings = array_merge($this->warnings, $warnings); - } - - public function hasErrors() { - return count($this->errors) > 0; - } - - public function hasWarnings() { - return count($this->warnings) > 0; - } - public static function getTable($tableName) { - if(!isset(self::$tables[$tableName])) { - self::$tables[$tableName] = TableRegistry::getTableLocator()->get($tableName); - } - return self::$tables[$tableName]; - } - - - protected function getStateUserId($publicKey) { - - $stateUsersTable = self::getTable('state_users'); - $stateUser = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $publicKey])->first(); - if($stateUser) { - return $stateUser->id; - } - // create new entry - $stateUserEntity = $stateUsersTable->newEntity(); - $stateUserEntity->public_key = $publicKey; - if($stateUsersTable->save($stateUserEntity)) { - return $stateUserEntity->id; - } else { - $this->addError('TransactionBase::getStateUserId', 'error saving new state user with error: ' . json_encode($stateUserEntity->getErrors())); - } - - return NULL; - } - - protected function getStateUser($id) { - $stateUsersTable = self::getTable('state_users'); - $stateUser = $stateUsersTable->get($id); - if($stateUser) { - return $stateUser; - } - - return NULL; - } - - protected function getStateUserFromPublickey($publicKey) { - $stateUsersTable = self::getTable('state_users'); - $stateUser = $stateUsersTable->find('all')->where(['public_key' => $publicKey])->first(); - if($stateUser) { - return $stateUser; - } - - return NULL; - } - - - protected function updateStateBalance($stateUserId, $addAmountCent, $recordDate) { - $stateBalancesTable = self::getTable('stateBalances'); - $stateBalanceQuery = $stateBalancesTable - ->find('all') - ->select(['amount', 'id', 'record_date']) - ->contain(false) - ->where(['state_user_id' => $stateUserId]);//->first(); - //debug($stateBalanceQuery); - - if($stateBalanceQuery->count() > 0) { - - $stateBalanceEntry = $stateBalanceQuery->first(); - $stateBalanceEntry->amount = - $stateBalancesTable->calculateDecay($stateBalanceEntry->amount, $stateBalanceEntry->record_date, $recordDate) - + $addAmountCent; - } else { - $stateBalanceEntry = $stateBalancesTable->newEntity(); - $stateBalanceEntry->state_user_id = $stateUserId; - $stateBalanceEntry->amount = $addAmountCent; - } - $stateBalanceEntry->record_date = $recordDate; - $finalBalance = $stateBalanceEntry->amount; - //echo "\ntry to save: "; var_dump($stateBalanceEntry); echo "\n"; - if(!$stateBalancesTable->save($stateBalanceEntry)) { - $errors = $stateBalanceEntry->getErrors(); - $this->addError('TransactionBase::updateStateBalance', 'error saving state balance with: ' . json_encode($errors)); - return false; - } - return $finalBalance; - } - - protected function addStateUserTransaction($stateUserId, $transactionId, $transactionTypeId, $balance, $balance_date) { - $stateUserTransactionTable = self::getTable('state_user_transactions'); - - $stateUserTransactions = $stateUserTransactionTable - ->find('all') - ->where(['state_user_id' => $stateUserId]) - ->order(['transaction_id DESC']); - $new_balance = $balance; - if($stateUserTransactions->count() > 0) { - $stateBalanceTable = self::getTable('state_balances'); - $state_user_transaction = $stateUserTransactions->first(); - if(!$state_user_transaction) { - $this->addError('TransactionBase::addStateUserTransaction', 'state_user_transaction is zero, no first entry exist?'); - return false; - } - $new_balance += $stateBalanceTable->calculateDecay( - $state_user_transaction->balance, - $state_user_transaction->balance_date, - $balance_date - ); - } - $entity = $stateUserTransactionTable->newEntity(); - $entity->state_user_id = $stateUserId; - $entity->transaction_id = $transactionId; - $entity->transaction_type_id = $transactionTypeId; - $entity->balance = $new_balance; - $entity->balance_date = $balance_date; - - if(!$stateUserTransactionTable->save($entity)) { - $errors = $entity->getErrors(); - $this->addError('TransactionBase::addStateUserTransaction', 'error saving state user balance with: ' . json_encode($errors)); - return false; - } - // set balance from all state_user_transactions which came after (sorted by balance_date) to 0 - // because creation transaction can be added before other transaction which already happend - $state_user_transactions = $stateUserTransactionTable - ->find() - ->select(['id', 'balance']) - ->where(['state_user_id' => $stateUserId, 'balance_date >' => $balance_date]) - ; - foreach($state_user_transactions as $t) { - $t->balance = 0; - } - $stateUserTransactionTable->saveMany($state_user_transactions); - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Transactions/TransactionBody.php b/community_server/src/Model/Transactions/TransactionBody.php deleted file mode 100644 index 87a029b80..000000000 --- a/community_server/src/Model/Transactions/TransactionBody.php +++ /dev/null @@ -1,194 +0,0 @@ -mProtoTransactionBody = new \Proto\Gradido\TransactionBody(); - try { - $this->mProtoTransactionBody->mergeFromString($bodyBytes); - // cannot catch Exception with cakePHP, I don't know why - } catch(\Google\Protobuf\Internal\GPBDecodeException $e) { - //var_dump($e); - $this->addError('TransactionBody', $e->getMessage()); - return; - } - - switch($this->mProtoTransactionBody->getData()) { - case 'creation' : $this->mSpecificTransaction = new TransactionCreation($this->mProtoTransactionBody->getCreation()); break; - case 'transfer' : $this->mSpecificTransaction = new TransactionTransfer($this->mProtoTransactionBody->getTransfer()); break; - } - } - - public function validate($sigPairs) { - - // transaction type id - $transactionTypesTable = TableRegistry::getTableLocator()->get('transaction_types'); - - $typeName = $this->getTransactionTypeName(); - $transactionType = $transactionTypesTable->find('all')->where(['name' => $typeName])->select(['id'])->first(); - if($transactionType == NULL) { - $this->addError('TransactionBody::validate', 'zero type id for type: ' . $typeName); - return false; - } - $this->transactionTypeId = $transactionType->id; - - // check if creation time is in the past - if($this->mProtoTransactionBody->getCreated()->getSeconds() > time()) { - $this->addError('TransactionBody::validate', 'Transaction were created in the past!'); - return false; - } - if(!$this->mSpecificTransaction->validate($sigPairs)) { - $this->addErrors($this->mSpecificTransaction->getErrors()); - return false; - } - - - - return true; - } - - public function getSpecificTransaction() { - return $this->mSpecificTransaction; - } - - public function getMemo() { - return $this->mProtoTransactionBody->getMemo(); - } - - public function getTransactionTypeName() - { - return $this->mProtoTransactionBody->getData(); - } - - public function save($firstPublic, $sigMap) { - $transactionsTable = TableRegistry::getTableLocator()->get('transactions'); - $transactionEntity = $transactionsTable->newEntity(); - - - $transactionEntity->transaction_type_id = $this->transactionTypeId; - $transactionEntity->memo = $this->getMemo(); - - if ($transactionsTable->save($transactionEntity)) { - // reload entity to get received date filled from mysql - $transactionEntity = $transactionsTable->get($transactionEntity->id); - // success - $this->mTransactionID = $transactionEntity->id; - if(!$this->mSpecificTransaction->save($transactionEntity->id, $firstPublic, $transactionEntity->received)) { - $this->addErrors($this->mSpecificTransaction->getErrors()); - return false; - } - } else { - $this->addError('TransactionBody::save', 'error saving transaction with: ' . json_encode($transactionEntity->getError())); - return false; - } - $previousTxHash = null; - if($this->mTransactionID > 1) { - try { - $previousTransaction = $transactionsTable - ->find('all', ['contain' => false]) - ->select(['tx_hash']) - ->where(['id' => $this->mTransactionID - 1]) - ->first(); - /*$previousTransaction = $transactionsTable->get($this->mTransactionID - 1, [ - 'contain' => false, - 'fields' => ['tx_hash'] - ]);*/ - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - $this->addError('TransactionBody::save', 'previous transaction (with id ' . ($this->mTransactionID-1) . ' not found'); - return false; - } - if(!$previousTransaction) { - // shouldn't occur - $this->addError('TransactionBody::save', 'previous transaction (with id ' . ($this->mTransactionID-1) . ' not found'); - return false; - } - $previousTxHash = $previousTransaction->tx_hash; - } - try { - //$transactionEntity->received = $transactionsTable->get($transactionEntity->id, ['contain' => false, 'fields' => ['received']])->received; - $transactionEntity->received = $transactionsTable - ->find('all', ['contain' => false]) - ->where(['id' => $transactionEntity->id]) - ->select(['received'])->first()->received; - } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) { - $this->addError('TransactionBody::save', 'current transaction (with id ' . ($transactionEntity->id) . ' not found'); - $this->addError('exception: ', $ex->getMessage()); - return false; - } - - // calculate tx hash - // previous tx hash + id + received + sigMap as string - // Sodium use for the generichash function BLAKE2b today (11.11.2019), mabye change in the future - $state = \Sodium\crypto_generichash_init(); - //echo "prev hash: $previousTxHash\n"; - if($previousTxHash != null) { - \Sodium\crypto_generichash_update($state, stream_get_contents($previousTxHash)); - } - //echo "id: " . $transactionEntity->id . "\n"; - \Sodium\crypto_generichash_update($state, strval($transactionEntity->id)); - //echo "received: " . $transactionEntity->received; - \Sodium\crypto_generichash_update($state, $transactionEntity->received->i18nFormat('yyyy-MM-dd HH:mm:ss')); - \Sodium\crypto_generichash_update($state, $sigMap->serializeToString()); - $transactionEntity->tx_hash = \Sodium\crypto_generichash_final($state); - if ($transactionsTable->save($transactionEntity)) { - return true; - } - $this->addError('TransactionBody::save', 'error saving transaction with: ' . json_encode($transactionEntity->getError())); - return false; - } - - public function getTransactionID() { - return $this->mTransactionID; - } - - public function getTransactionTypeId() { - return $this->transactionTypeId; - } - - static public function fromEntity($memo, $transaction) - { - $protoBody = new \Proto\Gradido\TransactionBody(); - $protoBody->setMemo($memo); - - //$created->setSeconds($var); - //$protoBody->setCreated($created); - if(count($transaction->transaction_creations) == 1) { - //echo "is creation
    "; - $protoBody->setCreation(TransactionCreation::fromEntity($transaction->transaction_creations[0])->getProto()); - } - else if(count($transaction->transaction_send_coins) == 1) { - //echo "is transfer"; - $protoBody->setTransfer(TransactionTransfer::fromEntity($transaction->transaction_send_coins)->getProto()); - } else { - return ['invalid transaction type or count']; - } - - return $protoBody; - } - - static public function build($memo, $specificTransaction) - { - $protoBody = new \Proto\Gradido\TransactionBody(); - $protoBody->setMemo($memo); - - if(is_a($specificTransaction, 'TransactionCreation')) { - $protoBody->setCreation($specificTransaction->getProto()); - } else if(is_a($specificTransaction, 'TransactionTransfer')) { - $protoBody->setTransfer($specificTransaction->getProto()); - } else { - return ['invalid tarnsaction type']; - } - return $protoBody; - - } - -} diff --git a/community_server/src/Model/Transactions/TransactionCreation.php b/community_server/src/Model/Transactions/TransactionCreation.php deleted file mode 100644 index 87f2d2104..000000000 --- a/community_server/src/Model/Transactions/TransactionCreation.php +++ /dev/null @@ -1,249 +0,0 @@ -protoTransactionCreation = $protoTransactionCreation; - $this->transactionCreationsTable = TableRegistry::getTableLocator()->get('transaction_creations'); - $this->receiver_pubkey_hex = bin2hex($this->getReceiverPublic()); - } - - public function getProto() { - return $this->protoTransactionCreation; - } - - static public function build($amount, $memo, $receiver_public_hex, $targetDate = null) - { - $receiver = new \Proto\Gradido\TransferAmount(); - $receiver->setAmount($amount); - //$this->receiver_pubkey_hex = $receiver_public_hex; - if(strlen($receiver_public_hex) != 64) { - return ['state' => 'error', 'msg' => 'invalid pubkey']; - } - $pubKeyBin = hex2bin($receiver_public_hex); - $receiver->setPubkey($pubKeyBin); - //var_dump($requestData); - - $creationDate = new \Proto\Gradido\TimestampSeconds(); - $creationDate->setSeconds(time()); - - $transactionBody = new \Proto\Gradido\TransactionBody(); - $transactionBody->setMemo($memo); - $transactionBody->setCreated($creationDate); - - - $transaction = new \Proto\Gradido\GradidoTransaction(); - $transaction->setReceiver($receiver); - //echo "target date: "; - //var_dump($targetDate); - //die('die'); - if($targetDate) { - $targetDateTimestamp = new \Proto\Gradido\TimestampSeconds(); - $targetDateTimestamp->setSeconds($targetDate->getTimestamp()); - //var_dump($targetDateTimestamp); die('target'); - $transaction->setTargetDate($targetDateTimestamp); - } - - $transactionBody->setCreation($transaction); - return ['state' => 'success', 'transactionBody' => $transactionBody]; - } - - - public function getAmount() { - return $this->protoTransactionCreation->getReceiver()->getAmount(); - } - - public function getReceiverPublic() { - return $this->protoTransactionCreation->getReceiver()->getPubkey(); - } - - public function getReceiverUser() { - return $this->getStateUserFromPublickey($this->getReceiverPublic()); - } - public function getTargetDate() { - return new FrozenDate($this->protoTransactionCreation->getTargetDate()->getSeconds()); - } - - public function validate($sigPairs) { - // check if receiver public is not in signature list - $receiverPublic = $this->getReceiverPublic(); - foreach($sigPairs as $sigPair) { - $pubkey = $sigPair->getPubKey(); - if($pubkey == $receiverPublic) { - $this->addError('TransactionCreation::validate', 'receiver aren\'t allowed to sign creation Transaction'); - return false; - } - } - - - /////////////// new validation, not more than 1K GDD per month via target_date /////////////////////////// - $existingCreations2 = $this->transactionCreationsTable - ->find('all') - ->select(['amount', 'state_user_id', 'target_date']) - ->contain(['StateUsers' => ['fields' => ['StateUsers.public_key']]]); - $q = $existingCreations2; - $targetDate = $this->protoTransactionCreation->getTargetDate(); - - $targetDateFrozen = new FrozenDate($targetDate->getSeconds()); - $targetDateMonthYearConcat = $targetDateFrozen->format('Ym'); - - $existingCreations2->where([ - 'target_date IS NOT' => NULL, - 'EXTRACT(YEAR_MONTH FROM target_date) LIKE ' => $targetDateMonthYearConcat, - ]); - - $newSum2 = $this->getAmount(); - $receiverEmail = ''; - foreach($existingCreations2 as $creation) { - $keyHex = bin2hex(stream_get_contents($creation->state_user->public_key)); - //echo "\ncompare \n$keyHex\nwith: \n". $this->receiver_pubkey_hex."\n"; - if($keyHex == $this->receiver_pubkey_hex) { - $newSum2 += $creation->amount; - $receiverEmail = $creation->state_user->email; - } - //$newSum2 += $creation->amount; - } - - /*if(!$existingCreations2->count()) { - if($newSum > 30000000) { - $this->addError('TransactionCreation::validate', 'Creation more than 1.000 GDD per Month (3 Month) not allowed'); - return false; - } - } else {*/ - if($newSum2 <= 0) { - $this->addError( - 'TransactionCreation::validate', - 'Creation less than 0 GDD per Month for '. $receiverEmail .' in target_date not allowed' - ); - } - if($newSum2 > 10000000) { - $this->addError( - 'TransactionCreation::validate', - 'Creation more than 1.000 GDD per Month for '. $receiverEmail .' in target_date not allowed' - ); - return false; - //} - } - - return true; - } - - public function save($transaction_id, $firstPublic, $received) - { - $stateBalancesTable = self::getTable('stateBalances'); - - $transactionCreationEntity = $this->transactionCreationsTable->newEntity(); - $transactionCreationEntity->transaction_id = $transaction_id; - - // state user id - //$state_user_id = $this->getStateUserId($firstPublic); - $receiverUserId = $this->getStateUserId($this->getReceiverPublic()); - if(!$receiverUserId) { - $this->addError('TransactionCreation::save', 'couldn\'t get state user id'); - return false; - } - - $transactionCreationEntity->state_user_id = $receiverUserId; - $transactionCreationEntity->amount = $this->getAmount(); - $transactionCreationEntity->target_date = $this->protoTransactionCreation->getTargetDate()->getSeconds(); - $target_date = new FrozenTime($transactionCreationEntity->target_date); - - //$decayed_balance = $stateBalancesTable->calculateDecay($this->getAmount(), $target_date, $received); - $balance = $this->getAmount(); - - if(!$this->transactionCreationsTable->save($transactionCreationEntity)) { - $this->addError('TransactionCreation::save', 'error saving transactionCreation with errors: ' . json_encode($transactionCreationEntity->getErrors())); - return false; - } - - // update state balance - $final_balance = $this->updateStateBalance($receiverUserId, $balance, $received); - if(false === $final_balance) { - return false; - } - - // decay is a virtual field which is calculated from amount and now() - record_date - if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 1, $balance, $received)) { - return false; - } - - return true; - } - - public function sendNotificationEmail($memo) - { - $disable_email = Configure::read('disableEmail', false); - if($disable_email) return true; - // send notification email - $receiverUserId = $this->getStateUserId($this->getReceiverPublic()); - $receiverUser = $this->getStateUser($receiverUserId); - $noReplyEmail = Configure::read('noReplyEmail'); - - try { - $email = new Email(); - $emailViewBuilder = $email->viewBuilder(); - $emailViewBuilder->setTemplate('notificationCreation') - ->setVars(['user' => $receiverUser, 'gdd_cent' => $this->getAmount(), 'memo' => $memo]); - $receiverNames = $receiverUser->getNames(); - if($receiverNames == '' || $receiverUser->email == '') { - $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $receiverUser->id); - return false; - } - $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)']) - ->setTo([$receiverUser->email => $receiverUser->getNames()]) - ->setSubject(__('Gradido Schöpfung erhalten')) - ->send(); - } catch(Exception $e) { -// $this->addError('TransactionCreation::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - $this->addWarning('TransactionCreation::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - return false; - } - return true; - } - - static public function fromEntity($transactionCreationEntity) - { - $protoCreation = new \Proto\Gradido\GradidoCreation(); - - //var_dump($transactionCreationEntity); - $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); - //return new TransactionCreation($protoCreation); - $userId = $transactionCreationEntity->state_user_id; - - - $stateUser = $stateUsersTable->get($userId); - - - $receiverAmount = new \Proto\Gradido\TransferAmount(); - $receiverAmount->setPubkey(stream_get_contents($stateUser->public_key)); - $receiverAmount->setAmount($transactionCreationEntity->amount); - - $protoCreation->setReceiver($receiverAmount); - - // TODO: add target_date - // function currently not used, maybe can even be deleted - - //echo "receiver amount: check
    "; - //$identHashBytes = stream_get_contents($transactionCreationEntity->ident_hash); - - // intval - //$protoCreation->setIdentHash(intval($identHashBytes)); - //$protoCreation->setIdentHash(self::DRMakeStringHash($stateUser->email)); - return new TransactionCreation($protoCreation); - } -} diff --git a/community_server/src/Model/Transactions/TransactionTransfer.php b/community_server/src/Model/Transactions/TransactionTransfer.php deleted file mode 100644 index dc1606f55..000000000 --- a/community_server/src/Model/Transactions/TransactionTransfer.php +++ /dev/null @@ -1,249 +0,0 @@ -protoTransactionTransfer = $protoTransactionTransfer; - } - - public function getProto() { - return $this->protoTransactionTransfer; - } - - static public function build($amount, $memo, $receiver_public_hex, $sender_public_hex) - { - // repeated SenderAmount senderAmounts = 1; - // repeated ReceiverAmount receiverAmounts = 2; - - $sender = new \Proto\Gradido\TransferAmount(); - $sender->setAmount($amount); - - if(strlen($receiver_public_hex) != 64) { - return ['state' => 'error', 'msg' => 'invalid receiver pubkey']; - } - if(strlen($sender_public_hex) != 64) { - return ['state' => 'error', 'msg' => 'invalid sender pubkey']; - } - $receiverPubKeyBin = hex2bin($receiver_public_hex); - - $senderPubKeyBin = hex2bin($sender_public_hex); - $sender->setPubkey($senderPubKeyBin); - //var_dump($requestData); - - $creationDate = new \Proto\Gradido\TimestampSeconds(); - $creationDate->setSeconds(time()); - - $transactionBody = new \Proto\Gradido\TransactionBody(); - $transactionBody->setMemo($memo); - $transactionBody->setCreated($creationDate); - - $transfer = new \Proto\Gradido\GradidoTransfer(); - $local_transfer = new \Proto\Gradido\LocalTransfer(); - $local_transfer->setReceiver($receiverPubKeyBin); - $local_transfer->setSender($sender); - $transfer->setLocal($local_transfer); - $transactionBody->setTransfer($transfer); - return ['state' => 'success', 'transactionBody' => $transactionBody]; - } - - public function validate($sigPairs) { - //$this->addError('TransactionTransfer::validate', 'not implemented yet'); - //return false; - //$time = microtime(true); - static $functionName = 'TransactionTransfer::validate'; - - $sigPubHexs = []; - foreach($sigPairs as $sigPair) - { - $pubkey = $sigPair->getPubKey(); - $pubkey_hex = bin2hex($pubkey); - //$hash = TransactionCreation::DRMakeStringHash($pubkey); - $hash = $pubkey_hex; - if(!isset($sigPubHexs[$hash])) { - $sigPubHexs[$hash] = [$pubkey_hex]; - } else { - array_push($sigPubHexs[$hash], $pubkey_hex); - } - //array_push($sigPubHexs, $pubkey); - } - - $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); - $local_transfer = $this->protoTransactionTransfer->getLocal(); - $sender = $local_transfer->getSender(); - $senderPublic = $sender->getPubkey(); - $senderPublicHex = bin2hex($senderPublic); - if(strlen($senderPublicHex) != 64) { - $this->addError($functionName, 'invalid sender public key'); - return false; - } - // check if signature exist for sender - //$hash = TransactionCreation::DRMakeStringHash($senderPublicHex); - $hash = $senderPublicHex; - if(!isset($sigPubHexs[$hash]) || in_array($senderPublicHex, $sigPubHexs[$hash]) === FALSE) { - $this->addError($functionName, 'missing signature for sender'); - return false; - } - // check if sender has enough Gradido - $amount = $sender->getAmount(); - $user = $stateUsersTable - ->find('all') - ->select(['id']) - ->where(['public_key' => $senderPublic]) - ->contain(['StateBalances' => ['fields' => ['amount', 'state_user_id']]])->first(); - if(!$user) { - $this->addError($functionName, 'couldn\'t find sender in db' ); - return false; - } - //var_dump($user); - if(intval($user->state_balances[0]->amount) < intval($amount)) { - $this->addError($functionName, 'sender hasn\t enough GDD'); - return false; - } - - $receiver_public_key = $local_transfer->getReceiver(); - if(strlen($receiver_public_key) != 32) { - $this->addError($functionName, 'invalid receiver public key'); - return false; - } - // check if receiver exist - $receiver_user = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $receiver_public_key])->first(); - if(!$receiver_user) { - $this->addError($functionName, 'couldn\'t find receiver in db' ); - return false; - } - if($amount < 0) { - $this->addError($functionName, 'negative amount not supported'); - return false; - } - return true; - } - - public function save($transaction_id, $firstPublic, $received) { - - static $functionName = 'TransactionCreation::save'; - $local_transfer = $this->protoTransactionTransfer->getLocal(); - - $senderAmount = $local_transfer->getSender(); - $receiver = $local_transfer->getReceiver(); - - $transactionTransferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins'); - - $senderUserId = $this->getStateUserId($senderAmount->getPubkey()); - $receiverUserId = $this->getStateUserId($receiver); - - if($senderUserId === NULL || $receiverUserId === NULL) { - return false; - } - - $finalSenderBalance = $this->updateStateBalance($senderUserId, -$senderAmount->getAmount(), $received); - if(false === $finalSenderBalance) { - return false; - } - if(false === $this->updateStateBalance($receiverUserId, $senderAmount->getAmount(), $received)) { - return false; - } - - $transactionTransferEntity = $transactionTransferTable->newEntity(); - $transactionTransferEntity->transaction_id = $transaction_id; - $transactionTransferEntity->state_user_id = $senderUserId; - $transactionTransferEntity->sender_public_key = $senderAmount->getPubkey(); - $transactionTransferEntity->receiver_public_key = $receiver; - $transactionTransferEntity->receiver_user_id = $receiverUserId; - $transactionTransferEntity->amount = $senderAmount->getAmount(); - $transactionTransferEntity->sender_final_balance = $finalSenderBalance; - - if(!$transactionTransferTable->save($transactionTransferEntity)) { - $this->addError($functionName, 'error saving transactionSendCoins with errors: ' . json_encode($transactionTransferEntity->getErrors())); - return false; - } - - if(!$this->addStateUserTransaction($senderUserId, $transaction_id, 2, $senderAmount->getAmount(), $received)) { - return false; - } - if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 2, -$senderAmount->getAmount(), $received)) { - return false; - } - - //$this->addError('TransactionTransfer::save', 'not implemented yet'); - //return false; - return true; - } - - public function sendNotificationEmail($memo) - { - // send notification email - $disable_email = Configure::read('disableEmail', false); - if($disable_email) return true; - - $local_transfer = $this->protoTransactionTransfer->getLocal(); - $sender = $local_transfer->getSender(); - $senderAmount = $sender->getAmount(); - $senderUser = $this->getStateUserFromPublickey($sender->getPubkey()); - $receiverUser = $this->getStateUserFromPublickey($local_transfer->getReceiver()); - - $serverAdminEmail = Configure::read('ServerAdminEmail'); - - try { - $email = new Email(); - $emailViewBuilder = $email->viewBuilder(); - $emailViewBuilder->setTemplate('notificationTransfer') - ->setVars(['receiverUser' => $receiverUser, - 'senderUser' => $senderUser, - 'gdd_cent' => $senderAmount, - 'memo' => $memo]); - $receiverNames = $receiverUser->getNames(); - if($receiverNames == '' || $receiverUser->email == '') { - $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $receiverUser->id); - return false; - } - $noReplyEmail = Configure::read('noReplyEmail'); - $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)']) - ->setTo([$receiverUser->email => $receiverUser->getNames()]) - ->setSubject(__('Gradidos erhalten')) - ->send(); - } catch(Exception $e) { - //$this->addError('TransactionTransfer::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - $this->addWarning('TransactionTransfer::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage()); - return false; - } - return true; - } - - public function getSenderUser() - { - $local_transfer = $this->protoTransactionTransfer->getLocal(); - return $this->getStateUserFromPublickey($local_transfer->getSender()->getPubkey()); - } - - public function getReceiverUser() - { - $local_transfer = $this->protoTransactionTransfer->getLocal(); - return $this->getStateUserFromPublickey($local_transfer->getReceiver()); - } - - public function getAmount() - { - $local_transfer = $this->protoTransactionTransfer->getLocal(); - $sender = $local_transfer->getSender(); - return $sender->getAmount(); - } - - static public function fromEntity($transactionTransferEntity) - { - $protoTransfer = new \Proto\Gradido\GradidoTransfer(); - - $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); - - - return new TransactionTransfer($protoTransfer); - } -} - diff --git a/community_server/src/Model/Validation/GenericValidation.php b/community_server/src/Model/Validation/GenericValidation.php deleted file mode 100644 index 839441454..000000000 --- a/community_server/src/Model/Validation/GenericValidation.php +++ /dev/null @@ -1,35 +0,0 @@ -]|>|<|javascript:){1,}/', $value)) { - return false; - } - return true; - } - - public static function email($value, array $context) { - if(preg_match('/^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/', $value)) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/community_server/src/Model/Validation/TransactionValidation.php b/community_server/src/Model/Validation/TransactionValidation.php deleted file mode 100644 index 9705ef40b..000000000 --- a/community_server/src/Model/Validation/TransactionValidation.php +++ /dev/null @@ -1,49 +0,0 @@ - 'en_GB']); - $numberparts = preg_split('/\./', $checkFloatVal); - //var_dump($numberparts); - if(isset($numberparts[1]) && strlen($numberparts[1]) > 2) return false; - - $floatVal = floatval(Number::format($value, ['places' => 4, 'locale' => 'en_GB'])); - //echo "floatVal: $floatVal
    "; - return $floatVal >= 0.0; - } - - public static function hexKey64($value, array $context) { - if(strlen($value) != 64) return false; - if(preg_match('/^[[:xdigit:]]*$/', $value)) { - return true; - } - return false; - } - - public static function hexKey128($value, array $context) { - if(strlen($value) != 128) return false; - if(preg_match('/^[[:xdigit:]]*$/', $value)) { - return true; - } - return false; - } - - public static function alphaNumeric($value, array $context) { - //if(preg_match('/^[a-zA-Z0-9äöüÄÖÜß _;:()-]\n\r*$/', $value)) { - if(preg_match('/([<>]|>|<|javascript:){1,}/', $value)) { - return false; - } - return true; - } -} \ No newline at end of file diff --git a/community_server/src/Shell/ConsoleShell.php b/community_server/src/Shell/ConsoleShell.php deleted file mode 100644 index f7bfe8ed4..000000000 --- a/community_server/src/Shell/ConsoleShell.php +++ /dev/null @@ -1,81 +0,0 @@ -err('Unable to load Psy\Shell.'); - $this->err(''); - $this->err('Make sure you have installed psysh as a dependency,'); - $this->err('and that Psy\Shell is registered in your autoloader.'); - $this->err(''); - $this->err('If you are using composer run'); - $this->err(''); - $this->err('$ php composer.phar require --dev psy/psysh'); - $this->err(''); - - return self::CODE_ERROR; - } - - $this->out("You can exit with `CTRL-C` or `exit`"); - $this->out(''); - - Log::drop('debug'); - Log::drop('error'); - $this->_io->setLoggers(false); - restore_error_handler(); - restore_exception_handler(); - - $psy = new PsyShell(); - $psy->run(); - } - - /** - * Display help for this console. - * - * @return \Cake\Console\ConsoleOptionParser - */ - public function getOptionParser() - { - $parser = new ConsoleOptionParser('console'); - $parser->setDescription( - 'This shell provides a REPL that you can use to interact with ' . - 'your application in a command line designed to run PHP code. ' . - 'You can use it to run adhoc queries with your models, or ' . - 'explore the features of CakePHP and your application.' . - "\n\n" . - 'You will need to have psysh installed for this Shell to work.' - ); - - return $parser; - } -} diff --git a/community_server/src/Template/AddressTypes/add.ctp b/community_server/src/Template/AddressTypes/add.ctp deleted file mode 100644 index f62c5115e..000000000 --- a/community_server/src/Template/AddressTypes/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($addressType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AddressTypes/edit.ctp b/community_server/src/Template/AddressTypes/edit.ctp deleted file mode 100644 index 3e363e331..000000000 --- a/community_server/src/Template/AddressTypes/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($addressType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AddressTypes/index.ctp b/community_server/src/Template/AddressTypes/index.ctp deleted file mode 100644 index 905d406a1..000000000 --- a/community_server/src/Template/AddressTypes/index.ctp +++ /dev/null @@ -1,53 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($addressType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $addressType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $addressType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $addressType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $addressType->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/AddressTypes/view.ctp b/community_server/src/Template/AddressTypes/view.ctp deleted file mode 100644 index 69817e264..000000000 --- a/community_server/src/Template/AddressTypes/view.ctp +++ /dev/null @@ -1,92 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($addressType->id) ?>
    - - -
    diff --git a/community_server/src/Template/AdminErrors/add.ctp b/community_server/src/Template/AdminErrors/add.ctp deleted file mode 100644 index b69f68213..000000000 --- a/community_server/src/Template/AdminErrors/add.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($adminError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('controller'); - echo $this->Form->control('action'); - echo $this->Form->control('state'); - echo $this->Form->control('msg'); - echo $this->Form->control('details'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AdminErrors/edit.ctp b/community_server/src/Template/AdminErrors/edit.ctp deleted file mode 100644 index dea74b94b..000000000 --- a/community_server/src/Template/AdminErrors/edit.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - Form->create($adminError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('controller'); - echo $this->Form->control('action'); - echo $this->Form->control('state'); - echo $this->Form->control('msg'); - echo $this->Form->control('details'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/AdminErrors/index.ctp b/community_server/src/Template/AdminErrors/index.ctp deleted file mode 100644 index 96e077ce1..000000000 --- a/community_server/src/Template/AdminErrors/index.ctp +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -
    -
    -
    Paginator->sort('id') ?>
    -
    Paginator->sort('state_user_id') ?>
    -
    Paginator->sort('controller') ?>
    -
    Paginator->sort('action') ?>
    -
    Paginator->sort('state') ?>
    -
    Paginator->sort('msg') ?>
    -
    Paginator->sort('details') ?>
    -
    Paginator->sort('created') ?>
    -
    -
    - -
    -
    Number->format($adminError->id) ?>
    -
    has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
    -
    controller) ?>
    -
    action) ?>
    -
    state) ?>
    -
    msg) ?>
    -
    details) ?>
    -
    created) ?>
    -
    - Html->link(__('View'), ['action' => 'view', $adminError->id]) ?> -   - Html->link(__('Edit'), ['action' => 'edit', $adminError->id]) ?> -   - Form->postLink(__('Delete'), ['action' => 'delete', $adminError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $adminError->id)]) ?> -
    -
    - -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/AdminErrors/view.ctp b/community_server/src/Template/AdminErrors/view.ctp deleted file mode 100644 index 0b0bebb64..000000000 --- a/community_server/src/Template/AdminErrors/view.ctp +++ /dev/null @@ -1,54 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
    controller) ?>
    action) ?>
    state) ?>
    msg) ?>
    details) ?>
    Number->format($adminError->id) ?>
    created) ?>
    -
    diff --git a/community_server/src/Template/AppRequests/get_balance.ctp b/community_server/src/Template/AppRequests/get_balance.ctp deleted file mode 100644 index 7dd4d6025..000000000 --- a/community_server/src/Template/AppRequests/get_balance.ctp +++ /dev/null @@ -1,15 +0,0 @@ -element('centToFloat', ['cent' => $body['balance'], 'precision' => 4]); -} -if(isset($body['decay'])) { - $body['decay'] = $this->element('centToFloat', ['cent' => $body['decay'], 'precision' => 4]); -} -?> \ No newline at end of file diff --git a/community_server/src/Template/AppRequests/list_transactions.ctp b/community_server/src/Template/AppRequests/list_transactions.ctp deleted file mode 100644 index 174092273..000000000 --- a/community_server/src/Template/AppRequests/list_transactions.ctp +++ /dev/null @@ -1,31 +0,0 @@ -element('centToFloat', ['cent' => $body['balance'], 'precision' => 4]); -$body['decay'] = $this->element('centToFloat', ['cent' => $body['decay'], 'precision' => 4]); -$body['gdtSum'] = $this->element('centToFloat', ['cent' => $body['gdtSum'], 'precision' => 2]); - -foreach($body['transactions'] as $i => $transaction) { - $useCeil = false; - if(!isset($transaction['type'])) { - $body = ['state' => 'error', 'msg' => 'transaction without type found', 'details' => $transaction]; - } else { - if($transaction['type'] == 'decay') { - $useCeil = true; - } - $body['transactions'][$i]['balance'] = $this->element('centToFloat', ['cent' => $transaction['balance'], 'precision' => 4, 'useCeil' => $useCeil]); - if(isset($transaction['creation_amount'])) { - $body['transactions'][$i]['creation_amount'] = $this->element('centToFloat', ['cent' => $transaction['creation_amount'], 'precision' => 4]); - } - if(isset($transaction['decay'])) { - $body['transactions'][$i]['decay']['balance'] = $this->element('centToFloat', ['cent' => $transaction['decay']['balance'], 'precision' => 4]); - } - } -} - -?> \ No newline at end of file diff --git a/community_server/src/Template/BlockchainTypes/add.ctp b/community_server/src/Template/BlockchainTypes/add.ctp deleted file mode 100644 index bef6b70c5..000000000 --- a/community_server/src/Template/BlockchainTypes/add.ctp +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - Form->create($blockchainType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - echo $this->Form->control('symbol'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/BlockchainTypes/edit.ctp b/community_server/src/Template/BlockchainTypes/edit.ctp deleted file mode 100644 index 40cd7849b..000000000 --- a/community_server/src/Template/BlockchainTypes/edit.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($blockchainType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - echo $this->Form->control('symbol'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/BlockchainTypes/index.ctp b/community_server/src/Template/BlockchainTypes/index.ctp deleted file mode 100644 index 457782043..000000000 --- a/community_server/src/Template/BlockchainTypes/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>Paginator->sort('symbol') ?>
    Number->format($blockchainType->id) ?>name) ?>text) ?>symbol) ?> - Html->link(__('View'), ['action' => 'view', $blockchainType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $blockchainType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $blockchainType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $blockchainType->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/BlockchainTypes/view.ctp b/community_server/src/Template/BlockchainTypes/view.ctp deleted file mode 100644 index 481cc7b90..000000000 --- a/community_server/src/Template/BlockchainTypes/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    symbol) ?>
    Number->format($blockchainType->id) ?>
    -
    diff --git a/community_server/src/Template/Cell/empty b/community_server/src/Template/Cell/empty deleted file mode 100644 index 8b1378917..000000000 --- a/community_server/src/Template/Cell/empty +++ /dev/null @@ -1 +0,0 @@ - diff --git a/community_server/src/Template/CommunityProfiles/add.ctp b/community_server/src/Template/CommunityProfiles/add.ctp deleted file mode 100644 index ab7ce0f6b..000000000 --- a/community_server/src/Template/CommunityProfiles/add.ctp +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - Form->create($communityProfile) ?> -
    - - Form->control('state_user_id'); - echo $this->Form->control('profile_desc'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/CommunityProfiles/edit.ctp b/community_server/src/Template/CommunityProfiles/edit.ctp deleted file mode 100644 index 230e3b685..000000000 --- a/community_server/src/Template/CommunityProfiles/edit.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($communityProfile) ?> -
    - - Form->control('state_user_id'); - echo $this->Form->control('profile_desc'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/CommunityProfiles/index.ctp b/community_server/src/Template/CommunityProfiles/index.ctp deleted file mode 100644 index 12f3c03b1..000000000 --- a/community_server/src/Template/CommunityProfiles/index.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('profile_desc') ?>
    Number->format($communityProfile->id) ?>Number->format($communityProfile->state_user_id) ?>profile_desc) ?> - Html->link(__('View'), ['action' => 'view', $communityProfile->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $communityProfile->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $communityProfile->id], ['confirm' => __('Are you sure you want to delete # {0}?', $communityProfile->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/CommunityProfiles/view.ctp b/community_server/src/Template/CommunityProfiles/view.ctp deleted file mode 100644 index 1f8aaf0f4..000000000 --- a/community_server/src/Template/CommunityProfiles/view.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    profile_desc) ?>
    Number->format($communityProfile->id) ?>
    Number->format($communityProfile->state_user_id) ?>
    -
    diff --git a/community_server/src/Template/Dashboard/error_http_request.ctp b/community_server/src/Template/Dashboard/error_http_request.ctp deleted file mode 100644 index cdbbec19b..000000000 --- a/community_server/src/Template/Dashboard/error_http_request.ctp +++ /dev/null @@ -1,14 +0,0 @@ -assign('title', __('Error, Please try again')); -?> - -
    - -
    diff --git a/community_server/src/Template/Dashboard/index.ctp b/community_server/src/Template/Dashboard/index.ctp deleted file mode 100644 index fdfe5b072..000000000 --- a/community_server/src/Template/Dashboard/index.ctp +++ /dev/null @@ -1,143 +0,0 @@ -assign( - 'title', - __('Willkommen') . ', ' . $user['first_name'] . ' ' . $user['last_name'] . '!' -); -$this->assign( - 'header', - '

    '.__('Willkommen') . ', ' . $user['first_name'] . ' ' . $user['last_name'] . '!

    ' -); -?> - - ms - -
    -

    Gradido ...

    -
    -
    - account_balance_wallet - Html->link( - __('Kontoübersicht'), - ['controller' => 'StateBalances', 'action' => 'overview'], - ['class' => 'action-button-link'] - );?> -
    -
    - account_balance - Html->link( - __('Überweisung'), - ['controller' => 'TransactionSendCoins', 'action' => 'create'], - ['class' => 'action-button-link'] - ); ?> -
    -
    -
    - - -
    -

    -

    Gradido ...

    -
    -
    - redeem - Html->link( - __('viele schöpfen'), - ['controller' => 'TransactionCreations', 'action' => 'createMulti'], - ['class' => 'action-button-link'] - );?> -
    -
    -
    -
    - Statistik -
    -
    - cached - Html->link( - __('Anmeldungen'), - ['controller' => 'Users', 'action' => 'statistics'], - ['class' => 'info-item-link'] - );?> -
    - -
    - error_outline - Html->link( - __('Fehler') . ' (' . $adminErrorCount . ')', - ['controller' => 'AdminErrors'], ['class' => 'info-item-link']); - ?> -
    - -
    -
    - - -
    -

    Benutzer ...

    -
    -
    - search - Html->link( - __('suchen'), - ['controller' => 'StateUsers', 'action' => 'search'], - ['class' => 'info-item-link'] - ); ?> -
    -
    - how_to_reg - - - -
    -
    - enhanced_encryption - - - -
    -
    -
    -
    -

    Login Server ...

    -
    -
    - groups - - - -
    -
    - servers - - - -
    -
    - topics - - - -
    -
    -
    -
    - hedera_accounts - - - -
    -
    - diff --git a/community_server/src/Template/Dashboard/server_index.ctp b/community_server/src/Template/Dashboard/server_index.ctp deleted file mode 100644 index 1b4da7647..000000000 --- a/community_server/src/Template/Dashboard/server_index.ctp +++ /dev/null @@ -1,36 +0,0 @@ -assign('title', __('Willkommen')); -$this->assign( - 'header', - '

    Server Dashboard, nur für Admins

    ' -); -?> -
    -

    Gradido ...

    -
    -
    - redeem - Html->link( - __('viele schöpfen'), - ['controller' => 'TransactionCreations', 'action' => 'createMulti'], - ['class' => 'action-button-link'] - );?> -
    -
    -
    -
    - error_outline - Html->link( - __('Fehler') . ' (' . $adminErrorCount . ')', - ['controller' => 'AdminErrors'], ['class' => 'info-item-link']); - ?> -
    -
    -
    \ No newline at end of file diff --git a/community_server/src/Template/Element/Flash/default.ctp b/community_server/src/Template/Element/Flash/default.ctp deleted file mode 100644 index 694b244c1..000000000 --- a/community_server/src/Template/Element/Flash/default.ctp +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/community_server/src/Template/Element/Flash/error.ctp b/community_server/src/Template/Element/Flash/error.ctp deleted file mode 100644 index 65a8fbec3..000000000 --- a/community_server/src/Template/Element/Flash/error.ctp +++ /dev/null @@ -1,10 +0,0 @@ - - - \ No newline at end of file diff --git a/community_server/src/Template/Element/Flash/success.ctp b/community_server/src/Template/Element/Flash/success.ctp deleted file mode 100644 index 31a062095..000000000 --- a/community_server/src/Template/Element/Flash/success.ctp +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/community_server/src/Template/Element/centToFloat.ctp b/community_server/src/Template/Element/centToFloat.ctp deleted file mode 100644 index 3beabf837..000000000 --- a/community_server/src/Template/Element/centToFloat.ctp +++ /dev/null @@ -1,22 +0,0 @@ - 0) { - if(isset($useCeil) && $useCeil) { - $transformAmount = ceil($cent / pow(10, $cut_places)); - } else { - $transformAmount = floor($cent / pow(10, $cut_places)); - } -} -if($cut_places < 0) { - $cut_places = 0; -} -echo $transformAmount / pow(10, $precision - $cut_places); - diff --git a/community_server/src/Template/Element/navi.ctp b/community_server/src/Template/Element/navi.ctp deleted file mode 100644 index 33055197f..000000000 --- a/community_server/src/Template/Element/navi.ctp +++ /dev/null @@ -1,38 +0,0 @@ -getRequest()->getSession(); -$errorCount = intval($session->read('StateUser.errorCount')); -$balance = $session->read('StateUser.balance'); -//echo "balance: $balance
    "; -if(!isset($balance)) { - $balance = 0; -} - -$navi = []; -/*if($errorCount > 0) { - $errorNaviEntry = new NaviEntry(__('Fehler '). "($errorCount)", 'mdi-alert-outline', 'StateErrors', 'showForUser'); - $errorNaviEntry->setBGColor('bg-inverse-danger') - ->setIconColor('alert-color'); - array_push($navi, $errorNaviEntry); -}*/ -$balanceNaviEntry = new NaviEntry( - __('Kontoübersicht') . ' (' . - str_replace(array("\r", "\n"), '', strip_tags($this->element('printGradido', ['number' => $balance]))) - . ' )', - 'account_balance_wallet', 'StateBalances', 'overview' -); -if($balance < 0 ) { - //$balanceNaviEntry->setIconColor('alert-color'); -} else if($balance > 0) { - //$balanceNaviEntry->setIconColor('success-color'); -} -array_push($navi, $balanceNaviEntry); -array_push($navi, new NaviEntry(__('Startseite'), 'home', 'Dashboard', 'index')); -array_push($navi, new NaviEntry(__('Überweisung'), 'account_balance', 'TransactionSendCoins', 'create')); -array_push($navi, new NaviEntryExternLink(__('Mitgliederbereich'), 'people_alt', 'https://elopage.com/s/gradido/sign_in')); - -?> - diff --git a/community_server/src/Template/Element/navi_center.ctp b/community_server/src/Template/Element/navi_center.ctp deleted file mode 100644 index d07f44978..000000000 --- a/community_server/src/Template/Element/navi_center.ctp +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/community_server/src/Template/Element/navi_header.ctp b/community_server/src/Template/Element/navi_header.ctp deleted file mode 100644 index cbc2eea97..000000000 --- a/community_server/src/Template/Element/navi_header.ctp +++ /dev/null @@ -1,45 +0,0 @@ -getRequest()->getSession(); -$errorCount = intval($session->read('StateUser.errorCount')); -$transactionPendings = $session->read('Transactions.pending'); - -/* -class NavHeaderEntry -{ - public function __construct($icon_name, $controller, $action, $title) { - ; - } - - public function -} -*/ -?> - \ No newline at end of file diff --git a/community_server/src/Template/Element/navi_notify.ctp b/community_server/src/Template/Element/navi_notify.ctp deleted file mode 100644 index 12ae74465..000000000 --- a/community_server/src/Template/Element/navi_notify.ctp +++ /dev/null @@ -1,44 +0,0 @@ -getRequest()->getSession(); -$errorCount = intval($session->read('StateUser.errorCount')); -$transactionPendings = $session->read('Transactions.pending'); -$transactionPendings += $session->read('Transactions.can_signed'); - -/* -class NavHeaderEntry -{ - public function __construct($icon_name, $controller, $action, $title) { - ; - } - - public function -} -*/ -?> - 0) : ?> - Html->link( - 'announcement' - . 'ss', - ['controller' => 'StateErrors', 'action' => 'ShowForUser'], - ['class' => 'nav-link', 'escape' => false, 'title' => "$errorCount " . __('Fehler')]) ?> - - 0) : ?> - " href="account/checkTransactions"> - verified_user - - () - - - diff --git a/community_server/src/Template/Element/printEuro.ctp b/community_server/src/Template/Element/printEuro.ctp deleted file mode 100644 index 976e4e007..000000000 --- a/community_server/src/Template/Element/printEuro.ctp +++ /dev/null @@ -1,24 +0,0 @@ - 0) $class = "grd-positive-currency";*/ -if($number < 0) { - $class = 'grd-negative-currency'; -} - -?> -Number->format(intval($number) / 100.0, ['precision' => 2]) . ' €';?> - - - Number->format(intval($number) / 100.0, ['precision' => 2]) . ' €';?> - - \ No newline at end of file diff --git a/community_server/src/Template/Element/printGDT.ctp b/community_server/src/Template/Element/printGDT.ctp deleted file mode 100644 index 8052283d0..000000000 --- a/community_server/src/Template/Element/printGDT.ctp +++ /dev/null @@ -1,24 +0,0 @@ - 0) $class = "grd-positive-currency";*/ -if($number < 0) { - $class = 'grd-negative-currency'; -} - -?> -Number->format(intval($number) / 100.0, ['precision' => 2]) . ' GDT';?> - - - Number->format(intval($number) / 100.0, ['precision' => 2]) . ' GDT';?> - - \ No newline at end of file diff --git a/community_server/src/Template/Element/printGradido.ctp b/community_server/src/Template/Element/printGradido.ctp deleted file mode 100644 index 404bdb70d..000000000 --- a/community_server/src/Template/Element/printGradido.ctp +++ /dev/null @@ -1,19 +0,0 @@ - -Number->format(intval($number) / 10000.0, ['precision' => 2]) . ' GDD';?> - - - Number->format(intval($number) / 10000.0, ['precision' => 2]) . ' GDD';?> - - \ No newline at end of file diff --git a/community_server/src/Template/Element/user_menu.ctp b/community_server/src/Template/Element/user_menu.ctp deleted file mode 100644 index 633674233..000000000 --- a/community_server/src/Template/Element/user_menu.ctp +++ /dev/null @@ -1,43 +0,0 @@ -getRequest()->getSession(); -$user = $session->read('StateUser'); -$transactionPendings = $session->read('Transactions.pending'); -$this->set('user', $user); -$navi = []; -array_push($navi, new NaviEntry(__('Mein Profil'), 'build', 'Profile', 'index')); -if(intval($transactionPendings) > 0) { -/* array_push($navi, new NaviEntryAbsoluteLink( - __("Transaktionen unterzeichnen") . ' (' . intval($transactionPendings) . ')', - 'mdi-signature-freehand', 'account/checkTransactions' - ));*/ -} else { - array_push($navi, new NaviEntryAbsoluteLink(__('Abmelden'), 'exit_to_app', 'account/logout')); -} -?> -
    - - account_circle -
    - - \ No newline at end of file diff --git a/community_server/src/Template/ElopageBuys/add.ctp b/community_server/src/Template/ElopageBuys/add.ctp deleted file mode 100644 index e9c2c6a80..000000000 --- a/community_server/src/Template/ElopageBuys/add.ctp +++ /dev/null @@ -1,33 +0,0 @@ - - -
    - Form->create($elopageBuy) ?> -
    - - Form->control('elopage_user_id'); - echo $this->Form->control('affiliate_program_id'); - echo $this->Form->control('publisher_id'); - echo $this->Form->control('order_id'); - echo $this->Form->control('product_id'); - echo $this->Form->control('product_price'); - echo $this->Form->control('payer_email'); - echo $this->Form->control('publisher_email'); - echo $this->Form->control('payed'); - echo $this->Form->control('success_date'); - echo $this->Form->control('event'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ElopageBuys/edit.ctp b/community_server/src/Template/ElopageBuys/edit.ctp deleted file mode 100644 index e33956b83..000000000 --- a/community_server/src/Template/ElopageBuys/edit.ctp +++ /dev/null @@ -1,39 +0,0 @@ - - -
    - Form->create($elopageBuy) ?> -
    - - Form->control('elopage_user_id'); - echo $this->Form->control('affiliate_program_id'); - echo $this->Form->control('publisher_id'); - echo $this->Form->control('order_id'); - echo $this->Form->control('product_id'); - echo $this->Form->control('product_price'); - echo $this->Form->control('payer_email'); - echo $this->Form->control('publisher_email'); - echo $this->Form->control('payed'); - echo $this->Form->control('success_date'); - echo $this->Form->control('event'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ElopageBuys/index.ctp b/community_server/src/Template/ElopageBuys/index.ctp deleted file mode 100644 index 4d5ecc1d1..000000000 --- a/community_server/src/Template/ElopageBuys/index.ctp +++ /dev/null @@ -1,67 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('elopage_user_id') ?>Paginator->sort('affiliate_program_id') ?>Paginator->sort('publisher_id') ?>Paginator->sort('order_id') ?>Paginator->sort('product_id') ?>Paginator->sort('product_price') ?>Paginator->sort('payer_email') ?>Paginator->sort('publisher_email') ?>Paginator->sort('payed') ?>Paginator->sort('success_date') ?>Paginator->sort('event') ?>
    Number->format($elopageBuy->id) ?>Number->format($elopageBuy->elopage_user_id) ?>Number->format($elopageBuy->affiliate_program_id) ?>Number->format($elopageBuy->publisher_id) ?>Number->format($elopageBuy->order_id) ?>Number->format($elopageBuy->product_id) ?>Number->format($elopageBuy->product_price) ?>payer_email) ?>publisher_email) ?>payed) ?>success_date) ?>event) ?> - Html->link(__('View'), ['action' => 'view', $elopageBuy->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $elopageBuy->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $elopageBuy->id], ['confirm' => __('Are you sure you want to delete # {0}?', $elopageBuy->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/ElopageBuys/statistics.ctp b/community_server/src/Template/ElopageBuys/statistics.ctp deleted file mode 100644 index 3ac6cf7f6..000000000 --- a/community_server/src/Template/ElopageBuys/statistics.ctp +++ /dev/null @@ -1,35 +0,0 @@ -toArray()); -/*foreach($elopageBuys as $entry) { - echo $entry->success_date . "
    "; -} - * - */ -/*foreach($users as $user) { - //var_dump($user); - echo $user->created; - echo "
    "; -}*/ -?> -
    -
    -
    -
    -
    -
    -
    -

    count()?>

    - - 12.01% -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/community_server/src/Template/ElopageBuys/view.ctp b/community_server/src/Template/ElopageBuys/view.ctp deleted file mode 100644 index 2631e17fe..000000000 --- a/community_server/src/Template/ElopageBuys/view.ctp +++ /dev/null @@ -1,68 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    payer_email) ?>
    publisher_email) ?>
    event) ?>
    Number->format($elopageBuy->id) ?>
    Number->format($elopageBuy->elopage_user_id) ?>
    Number->format($elopageBuy->affiliate_program_id) ?>
    Number->format($elopageBuy->publisher_id) ?>
    Number->format($elopageBuy->order_id) ?>
    Number->format($elopageBuy->product_id) ?>
    Number->format($elopageBuy->product_price) ?>
    success_date) ?>
    payed ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/Template/Email/html/default.ctp b/community_server/src/Template/Email/html/default.ctp deleted file mode 100644 index ac3daa7fe..000000000 --- a/community_server/src/Template/Email/html/default.ctp +++ /dev/null @@ -1,20 +0,0 @@ - ' . $line . "

    \n"; -endforeach; diff --git a/community_server/src/Template/Email/text/default.ctp b/community_server/src/Template/Email/text/default.ctp deleted file mode 100644 index 862cd9f76..000000000 --- a/community_server/src/Template/Email/text/default.ctp +++ /dev/null @@ -1,16 +0,0 @@ -assign('title', __('Gradido Schöpfung')); -?> first_name ?> last_name ?>, - -element('printGradido', ['number' => $gdd_cent, 'raw' => true])) ?> -Gradido Akademie schreibt: - - - - - - -Gradido Community Server \ No newline at end of file diff --git a/community_server/src/Template/Email/text/notification_transaction_failed.ctp b/community_server/src/Template/Email/text/notification_transaction_failed.ctp deleted file mode 100644 index 975848e58..000000000 --- a/community_server/src/Template/Email/text/notification_transaction_failed.ctp +++ /dev/null @@ -1,50 +0,0 @@ -assign('title', __('Gradido Transaktion fehlgeschlagen')); - -$transaction_body = $transaction->getTransactionBody(); -$specific_transaction = $transaction_body->getSpecificTransaction(); -$transaction_type_name = $transaction_body->getTransactionTypeName(); - -?> first_name ?> last_name ?>, - - - - -element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]), - $specific_transaction->getReceiverUser()->getEmailWithName()) ?> - -getTargetDate()->format('d.m.Y') ?> - -element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]), - $specific_transaction->getReceiverUser()->getEmailWithName()) ?> - - - - - -getErrors(); - foreach($errors as $error) { - //echo "\t".json_encode($error); - echo "\n\t".$error[array_keys($error)[0]]."\n"; - } -}?> - - - - - - -Gradido Community Server \ No newline at end of file diff --git a/community_server/src/Template/Email/text/notification_transfer.ctp b/community_server/src/Template/Email/text/notification_transfer.ctp deleted file mode 100644 index 05df9695d..000000000 --- a/community_server/src/Template/Email/text/notification_transfer.ctp +++ /dev/null @@ -1,26 +0,0 @@ -assign('title', __('Gradido Überweisung')); -$receiverNames = $receiverUser->first_name . ' ' . $receiverUser->last_name; -$senderNames = $senderUser->first_name . ' ' . $senderUser->last_name; -$senderNamesEmail = $senderUser->getEmailWithName(); -?> , - -element('printGradido', ['number' => $gdd_cent, 'raw' => true]), $senderNamesEmail) ?> - - - - - - - -email ?> - - - -Gradido Community Server \ No newline at end of file diff --git a/community_server/src/Template/Error/error400.ctp b/community_server/src/Template/Error/error400.ctp deleted file mode 100644 index 6b538b7f4..000000000 --- a/community_server/src/Template/Error/error400.ctp +++ /dev/null @@ -1,38 +0,0 @@ -layout = 'error'; - -if (Configure::read('debug')) : - $this->layout = 'dev_error'; - - $this->assign('title', $message); - $this->assign('templateName', 'error400.ctp'); - - $this->start('file'); -?> -queryString)) : ?> -

    - SQL Query: - queryString) ?> -

    - -params)) : ?> - SQL Query Params: - params) ?> - -element('auto_table_warning') ?> -end(); -endif; -?> -

    -

    - : - '{$url}'") ?> -

    diff --git a/community_server/src/Template/Error/error500.ctp b/community_server/src/Template/Error/error500.ctp deleted file mode 100644 index 3328cc52c..000000000 --- a/community_server/src/Template/Error/error500.ctp +++ /dev/null @@ -1,43 +0,0 @@ -layout = 'error'; - -if (Configure::read('debug')) : - $this->layout = 'dev_error'; - - $this->assign('title', $message); - $this->assign('templateName', 'error500.ctp'); - - $this->start('file'); -?> -queryString)) : ?> -

    - SQL Query: - queryString) ?> -

    - -params)) : ?> - SQL Query Params: - params) ?> - - - Error in: - getFile()), $error->getLine()) ?> - -element('auto_table_warning'); - - if (extension_loaded('xdebug')) : - xdebug_print_function_stack(); - endif; - - $this->end(); -endif; -?> -

    -

    - : - -

    diff --git a/community_server/src/Template/Layout/Email/html/default.ctp b/community_server/src/Template/Layout/Email/html/default.ctp deleted file mode 100644 index 3ff87ff83..000000000 --- a/community_server/src/Template/Layout/Email/html/default.ctp +++ /dev/null @@ -1,24 +0,0 @@ - - - - - <?= $this->fetch('title') ?> - - - fetch('content') ?> - - diff --git a/community_server/src/Template/Layout/Email/text/default.ctp b/community_server/src/Template/Layout/Email/text/default.ctp deleted file mode 100644 index 29b439ccc..000000000 --- a/community_server/src/Template/Layout/Email/text/default.ctp +++ /dev/null @@ -1,16 +0,0 @@ -fetch('content'); diff --git a/community_server/src/Template/Layout/ajax.ctp b/community_server/src/Template/Layout/ajax.ctp deleted file mode 100644 index 29b439ccc..000000000 --- a/community_server/src/Template/Layout/ajax.ctp +++ /dev/null @@ -1,16 +0,0 @@ -fetch('content'); diff --git a/community_server/src/Template/Layout/default.ctp b/community_server/src/Template/Layout/default.ctp deleted file mode 100644 index 4633502df..000000000 --- a/community_server/src/Template/Layout/default.ctp +++ /dev/null @@ -1,53 +0,0 @@ - - - - - Html->charset() ?> - - - <?= $cakeDescription ?>: - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - Html->css(['main.css']) ?> - Html->script(['basic']) ?> - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    -
    - -

    fetch('title') ?>

    - Flash->render() ?> - fetch('content') ?> -
    -
    - -
    - ms -
    - - - diff --git a/community_server/src/Template/Layout/error.ctp b/community_server/src/Template/Layout/error.ctp deleted file mode 100644 index 7367c1bf7..000000000 --- a/community_server/src/Template/Layout/error.ctp +++ /dev/null @@ -1,47 +0,0 @@ - - - - - Html->charset() ?> - - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - - Html->css('base.css') ?> - Html->css('style.css') ?> - - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    - -
    - Flash->render() ?> - - fetch('content') ?> -
    - -
    - - diff --git a/community_server/src/Template/Layout/frontend.ctp b/community_server/src/Template/Layout/frontend.ctp deleted file mode 100644 index cb01fea30..000000000 --- a/community_server/src/Template/Layout/frontend.ctp +++ /dev/null @@ -1,113 +0,0 @@ -"; -//echo "transactions pending: " . $transactionPendings; -?> - - - - Html->charset() ?> - - - <?= $cakeDescription ?>: - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - Html->css(['main.css']) ?> - Html->script(['basic']) ?> - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    -
    - element('navi_notify'); ?> -
    -
    - element('user_menu'); ?> -
    -
    - menu -
    - - - -
    - fetch('header')): ?> -
    - fetch('header') ?> -
    - -
    - fetch('content') ?> -
    -
    - - -
    - - ms - -
    -
    -

    -

    Alpha 0.20.06.03

    -
    -
    - - \ No newline at end of file diff --git a/community_server/src/Template/Layout/rss/default.ctp b/community_server/src/Template/Layout/rss/default.ctp deleted file mode 100644 index 8269be212..000000000 --- a/community_server/src/Template/Layout/rss/default.ctp +++ /dev/null @@ -1,11 +0,0 @@ -fetch('title'); -endif; - -echo $this->Rss->document( - $this->Rss->channel([], $channel, $this->fetch('content')) -); diff --git a/community_server/src/Template/OperatorTypes/add.ctp b/community_server/src/Template/OperatorTypes/add.ctp deleted file mode 100644 index c50feecf0..000000000 --- a/community_server/src/Template/OperatorTypes/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($operatorType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/OperatorTypes/edit.ctp b/community_server/src/Template/OperatorTypes/edit.ctp deleted file mode 100644 index 0b61f0f7a..000000000 --- a/community_server/src/Template/OperatorTypes/edit.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($operatorType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/OperatorTypes/index.ctp b/community_server/src/Template/OperatorTypes/index.ctp deleted file mode 100644 index 52a49b547..000000000 --- a/community_server/src/Template/OperatorTypes/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($operatorType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $operatorType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $operatorType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $operatorType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operatorType->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/OperatorTypes/view.ctp b/community_server/src/Template/OperatorTypes/view.ctp deleted file mode 100644 index a7cb775cf..000000000 --- a/community_server/src/Template/OperatorTypes/view.ctp +++ /dev/null @@ -1,61 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($operatorType->id) ?>
    - -
    diff --git a/community_server/src/Template/Operators/add.ctp b/community_server/src/Template/Operators/add.ctp deleted file mode 100644 index 6696cce5c..000000000 --- a/community_server/src/Template/Operators/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($operator) ?> -
    - - Form->control('username'); - echo $this->Form->control('user_pubkey'); - echo $this->Form->control('operator_type_id'); - echo $this->Form->control('data_base64'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Operators/edit.ctp b/community_server/src/Template/Operators/edit.ctp deleted file mode 100644 index 88a348e59..000000000 --- a/community_server/src/Template/Operators/edit.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($operator) ?> -
    - - Form->control('username'); - echo $this->Form->control('user_pubkey'); - echo $this->Form->control('operator_type_id'); - echo $this->Form->control('data_base64'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Operators/index.ctp b/community_server/src/Template/Operators/index.ctp deleted file mode 100644 index 3da9a6afb..000000000 --- a/community_server/src/Template/Operators/index.ctp +++ /dev/null @@ -1,56 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - operator_type->name ?> - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('username') ?>Paginator->sort('user_pubkey') ?>Paginator->sort('operator_type_id') ?>Paginator->sort('data_base64') ?>Paginator->sort('modified') ?>
    Number->format($operator->id) ?>username) ?>user_pubkey)) ?>Html->link(__($operator->operator_type->name), ['controller' => 'OperatorTypes', 'action' => 'view', $operator->operator_type_id]) ?>data_base64) ?>modified) ?> - Html->link(__('View'), ['action' => 'view', $operator->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $operator->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $operator->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operator->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Operators/view.ctp b/community_server/src/Template/Operators/view.ctp deleted file mode 100644 index a317c8e17..000000000 --- a/community_server/src/Template/Operators/view.ctp +++ /dev/null @@ -1,40 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - -
    username) ?>
    user_pubkey)) ?>
    data_base64) ?>
    Number->format($operator->id) ?>
    Number->format($operator->operator_type_id) ?>
    -
    diff --git a/community_server/src/Template/Pages/cake_home.ctp b/community_server/src/Template/Pages/cake_home.ctp deleted file mode 100644 index 5a3731e4c..000000000 --- a/community_server/src/Template/Pages/cake_home.ctp +++ /dev/null @@ -1,276 +0,0 @@ -layout = false; - -if (!Configure::read('debug')) : - throw new NotFoundException( - 'Please replace src/Template/Pages/home.ctp with your own version or re-enable debug mode.' - ); -endif; - -$cakeDescription = 'CakePHP: the rapid development PHP framework'; -?> - - - - Html->charset() ?> - - - <?= $cakeDescription ?> - - - Html->meta('icon') ?> - Html->css('base.css') ?> - Html->css('style.css') ?> - Html->css('home.css') ?> - - - - -
    -
    Html->image('cake.logo.svg') ?>
    -
    -

    Welcome to CakePHP Red Velvet. Build fast. Grow solid.

    -
    -
    - -
    -
    -
    -

    Please be aware that this page will not be shown if you turn off debug mode unless you replace src/Template/Pages/home.ctp with your own version.

    -
    -
    - -
    - -
    -
    - -
    -
    -

    Environment

    -
      - =')) : ?> -
    • Your version of PHP is 5.6.0 or higher (detected ).
    • - -
    • Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected ).
    • - - - -
    • Your version of PHP has the mbstring extension loaded.
    • - -
    • Your version of PHP does NOT have the mbstring extension loaded.
    • - - - -
    • Your version of PHP has the openssl extension loaded.
    • - -
    • Your version of PHP has the mcrypt extension loaded.
    • - -
    • Your version of PHP does NOT have the openssl or mcrypt extension loaded.
    • - - - -
    • Your version of PHP has the intl extension loaded.
    • - -
    • Your version of PHP does NOT have the intl extension loaded.
    • - -
    -
    -
    -

    Filesystem

    -
      - -
    • Your tmp directory is writable.
    • - -
    • Your tmp directory is NOT writable.
    • - - - -
    • Your logs directory is writable.
    • - -
    • Your logs directory is NOT writable.
    • - - - - -
    • The Engine is being used for core caching. To change the config edit config/app.php
    • - -
    • Your cache is NOT working. Please check the settings in config/app.php
    • - -
    -
    -
    -
    - -
    -
    -

    Database

    - connect(); - } catch (Exception $connectionError) { - $connected = false; - $errorMsg = $connectionError->getMessage(); - if (method_exists($connectionError, 'getAttributes')) : - $attributes = $connectionError->getAttributes(); - if (isset($errorMsg['message'])) : - $errorMsg .= '
    ' . $attributes['message']; - endif; - endif; - } - ?> -
      - -
    • CakePHP is able to connect to the database.
    • - -
    • CakePHP is NOT able to connect to the database.
    • - -
    -
    -
    -

    DebugKit

    -
      - -
    • DebugKit is loaded.
    • - -
    • DebugKit is NOT loaded. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
    • - -
    -
    -
    -
    - -
    -
    -

    Editing this Page

    -
      -
    • To change the content of this page, edit: src/Template/Pages/home.ctp.
    • -
    • You can also add some CSS styles for your pages at: webroot/css/.
    • -
    -
    -
    -

    Getting Started

    - -
    -
    - -
    -
    -

    More about Cake

    -

    - CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Front Controller and MVC.
    - Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility. -

    -
    -
    -
    - -
    -
    - P -

    Help and Bug Reports

    - -
    -
    - r -

    Docs and Downloads

    - -
    -
    - s -

    Training and Certification

    - -
    -
    - - - diff --git a/community_server/src/Template/Pages/gradido.ctp b/community_server/src/Template/Pages/gradido.ctp deleted file mode 100644 index f6a2213cc..000000000 --- a/community_server/src/Template/Pages/gradido.ctp +++ /dev/null @@ -1,14 +0,0 @@ -layout = false;?> - - Web Assembly Test (CakePHP Single Node Version) - - - -
    Wird geladen...
    - - - - - \ No newline at end of file diff --git a/community_server/src/Template/Pages/home.ctp b/community_server/src/Template/Pages/home.ctp deleted file mode 100644 index 3926921c4..000000000 --- a/community_server/src/Template/Pages/home.ctp +++ /dev/null @@ -1,19 +0,0 @@ -layout = false;?> - - Web Assembly Test (CakePHP Single Node Version) - - - -
    -
    -

    Gradido

    -

    Implementierung wählen

    -
    - -
    - - - \ No newline at end of file diff --git a/community_server/src/Template/Pages/js.ctp b/community_server/src/Template/Pages/js.ctp deleted file mode 100644 index dd1525dbe..000000000 --- a/community_server/src/Template/Pages/js.ctp +++ /dev/null @@ -1,41 +0,0 @@ -layout = false;?> - - - - - - - - - BootstrapVue Argon Dashboard by Creative Tim - - - - - - - - - -
    - wird geladen... -
    - - - - diff --git a/community_server/src/Template/Pages/visitor.ctp b/community_server/src/Template/Pages/visitor.ctp deleted file mode 100644 index e6956c97c..000000000 --- a/community_server/src/Template/Pages/visitor.ctp +++ /dev/null @@ -1,16 +0,0 @@ -layout = false;?> - - - - Visitor Page - - - - -
    Info Page for Visitor to learn about group before try to enter or connect (befriend)
    - - diff --git a/community_server/src/Template/Profile/edit.ctp b/community_server/src/Template/Profile/edit.ctp deleted file mode 100644 index edddf1631..000000000 --- a/community_server/src/Template/Profile/edit.ctp +++ /dev/null @@ -1,41 +0,0 @@ -assign('title', __('Profil ändern')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -
    -
    - Form->create($profileForm, ['enctype' => 'multipart/form-data']) ?> - Form->control('first_name', ['label' => __('Vorname'), 'placeholder' => 'Vorname', 'value' => $user['first_name']]) ?> - Form->control('last_name', ['label' => __('Nachname'), 'placeholder' => 'Nachname', 'value' => $user['last_name']]) ?> - Form->control('profile_img', ['type' => 'file', 'accept' => 'image/*', 'label' => __('Profilbild')]) ?> - - -
    - - Form->control('profile_desc', ['label' => __('Beschreibung'), 'rows' => 4, 'placeholder' => 'Beschreibung', 'value' => $communityProfile['profile_desc']]) ?> - Form->button(__('Daten speichern'), ['name' => 'submit', 'class' => 'form-button']) ?> - Form->end() ?> -
    -
    - -Html->script(['core', 'vendor.addons']); ?> - diff --git a/community_server/src/Template/Profile/index.ctp b/community_server/src/Template/Profile/index.ctp deleted file mode 100644 index b77ff9f70..000000000 --- a/community_server/src/Template/Profile/index.ctp +++ /dev/null @@ -1,82 +0,0 @@ -'; -$header .= '

    '.$user['first_name'] . ' ' . $user['last_name'] . '

    '; -if (!empty($communityProfile['profile_desc'])) { - $header .= "

    ".$communityProfile['profile_desc']."

    "; -} -$header .= '
    '; -if ($communityProfile && $communityProfile['profile_img']) { - $header .= "
    "; -} -$this->assign('title', __('Mein Profil')); -$this->assign('header', $header); -?> - - ms - -
    -

    - - Meine Daten -

    -
    - -
    - -

    - - Passwort ändern -

    -
    - -
    -
    diff --git a/community_server/src/Template/Roles/add.ctp b/community_server/src/Template/Roles/add.ctp deleted file mode 100644 index c671ed011..000000000 --- a/community_server/src/Template/Roles/add.ctp +++ /dev/null @@ -1,23 +0,0 @@ - - -
    - Form->create($role) ?> -
    - - Form->control('title'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Roles/edit.ctp b/community_server/src/Template/Roles/edit.ctp deleted file mode 100644 index 8a7cd385f..000000000 --- a/community_server/src/Template/Roles/edit.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($role) ?> -
    - - Form->control('title'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Roles/index.ctp b/community_server/src/Template/Roles/index.ctp deleted file mode 100644 index 2637ef958..000000000 --- a/community_server/src/Template/Roles/index.ctp +++ /dev/null @@ -1,47 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('title') ?>
    Number->format($role->id) ?>title) ?> - Html->link(__('View'), ['action' => 'view', $role->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $role->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $role->id], ['confirm' => __('Are you sure you want to delete # {0}?', $role->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Roles/view.ctp b/community_server/src/Template/Roles/view.ctp deleted file mode 100644 index 04e1dcec5..000000000 --- a/community_server/src/Template/Roles/view.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    -

    title) ?>

    - - - - - - - - - -
    title) ?>
    Number->format($role->id) ?>
    -
    diff --git a/community_server/src/Template/ServerUsers/add.ctp b/community_server/src/Template/ServerUsers/add.ctp deleted file mode 100644 index 35907282b..000000000 --- a/community_server/src/Template/ServerUsers/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($serverUser) ?> -
    - - Form->control('username'); - echo $this->Form->control('password'); - echo $this->Form->control('email'); - echo $this->Form->control('role'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ServerUsers/edit.ctp b/community_server/src/Template/ServerUsers/edit.ctp deleted file mode 100644 index df812d032..000000000 --- a/community_server/src/Template/ServerUsers/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($serverUser) ?> -
    - - Form->control('username'); - echo $this->Form->control('password'); - echo $this->Form->control('email'); - echo $this->Form->control('role'); - echo $this->Form->control('activated'); - echo $this->Form->control('last_login', ['empty' => true]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ServerUsers/index.ctp b/community_server/src/Template/ServerUsers/index.ctp deleted file mode 100644 index a6e14cedc..000000000 --- a/community_server/src/Template/ServerUsers/index.ctp +++ /dev/null @@ -1,59 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('username') ?>Paginator->sort('email') ?>Paginator->sort('role') ?>Paginator->sort('activated') ?>Paginator->sort('last_login') ?>Paginator->sort('created') ?>Paginator->sort('modified') ?>
    Number->format($serverUser->id) ?>username) ?>email) ?>role) ?>activated) ?>last_login) ?>created) ?>modified) ?> - Html->link(__('View'), ['action' => 'view', $serverUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $serverUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $serverUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $serverUser->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/ServerUsers/login.ctp b/community_server/src/Template/ServerUsers/login.ctp deleted file mode 100644 index 4996d5e7b..000000000 --- a/community_server/src/Template/ServerUsers/login.ctp +++ /dev/null @@ -1,22 +0,0 @@ -loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -Flash->render() ?> -
    - Form->create() ?> -
    - - Form->control('username') ?> - Form->control('password') ?> -
    - Form->button(__('Login'), ['class' => 'form-button']); ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/ServerUsers/view.ctp b/community_server/src/Template/ServerUsers/view.ctp deleted file mode 100644 index 0d3a9ae21..000000000 --- a/community_server/src/Template/ServerUsers/view.ctp +++ /dev/null @@ -1,56 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    username) ?>
    password) ?>
    email) ?>
    role) ?>
    Number->format($serverUser->id) ?>
    last_login) ?>
    created) ?>
    modified) ?>
    activated ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/Template/StateBalances/add.ctp b/community_server/src/Template/StateBalances/add.ctp deleted file mode 100644 index 64ef5d576..000000000 --- a/community_server/src/Template/StateBalances/add.ctp +++ /dev/null @@ -1,27 +0,0 @@ - - -
    - Form->create($stateBalance) ?> - add -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateBalances/edit.ctp b/community_server/src/Template/StateBalances/edit.ctp deleted file mode 100644 index c4a6c1e81..000000000 --- a/community_server/src/Template/StateBalances/edit.ctp +++ /dev/null @@ -1,33 +0,0 @@ - - -
    - Form->create($stateBalance) ?> - edit -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateBalances/index.ctp b/community_server/src/Template/StateBalances/index.ctp deleted file mode 100644 index 4b0db06d6..000000000 --- a/community_server/src/Template/StateBalances/index.ctp +++ /dev/null @@ -1,54 +0,0 @@ - - -
    -

    - index - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('modified') ?>Paginator->sort('amount') ?>
    Number->format($stateBalance->id) ?>has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>modified) ?>Number->format($stateBalance->amount) ?> - Html->link(__('View'), ['action' => 'view', $stateBalance->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateBalance->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateBalance->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateBalance->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateBalances/overview.ctp b/community_server/src/Template/StateBalances/overview.ctp deleted file mode 100644 index 1f2f4c811..000000000 --- a/community_server/src/Template/StateBalances/overview.ctp +++ /dev/null @@ -1,166 +0,0 @@ -assign('title', __('Kontoübersicht')); - -$header = '

    ' . __('Aktueller Kontostand: ') . '

    ' . - '

    ' . $this->element('printGradido', ['number' => $balance]) . '

    '; - -if($gdtSum > 0) { - $header .= '

    '.$this->Html->link( - $this->element('printGDT', ['number' => $gdtSum]), - ['action' => 'overview_gdt'], - ['escape' => false] - ).'

    '; -} -$this->assign('header', $header); -//var_dump($transactions); -?> - - 0) : ?> -
    - -
    - -
    -

    Überweisungen

    -

    Berechnet (debugging): element('printGradido', ['number' => $calculated_balance]) ?>

    -
    -
    -
    -
    -
    -
    -
    -
    - 30) { - $memoShort = substr($memoShort, 0, 30) . '...'; - } - $cellColorClass = 'success-color'; - if($send) { - $balance = -$balance; - $cellColorClass = 'alert-color'; - } else if($transaction['type'] == 'creation') { - $cellColorClass = 'orange-color'; - } else if($transaction['type'] == 'decay') { - $cellColorClass = 'red-color'; - } - ?> -
    -
    - Html->image('50x50.png', ['class' => 'profile-img', 'alt' => 'profile image']) ?> -
    - - - - - - - - - - -
    - - redeem - - - - arrow_back - - - arrow_forward - - - minus_circle_multiple - - -
    -
    -
    -
    - 30): ?> - - - - -
    -
    - - nice() ?> - - - -
    -
    element('printGradido', ['number' => $balance]) ?>
    -
    - - - -
    -
    - -
    -
    - - - 0) : ?> - - \ No newline at end of file diff --git a/community_server/src/Template/StateBalances/overview_gdt.ctp b/community_server/src/Template/StateBalances/overview_gdt.ctp deleted file mode 100644 index f293b93be..000000000 --- a/community_server/src/Template/StateBalances/overview_gdt.ctp +++ /dev/null @@ -1,123 +0,0 @@ -assign('title', __('GDT Kontoübersicht')); -$header = '

    ' . __('Zur Verfügung: ') . '

    '; - -if($gdtSum > 0){ - $header .= '

    '.$this->element('printGDT', ['number' => $gdtSum*100.0]).'

    '; -} -if($moreEntrysAsShown) { - $header .= ''. __('Nur die letzten 100 Einträge werden angezeigt!') . ''; -} -$this->assign('header', $header); - -?> - 0) :?> -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - element('printGDT', ['number' => $entry['amount']*100.0]); ?> - - element('printEuro', ['number' => $entry['amount']*100.0]); ?> - element('printEuro', ['number' => $entry['amount2']*100.0]) ?> - -
    -
    - Number->format($entry['factor']) ?> - x - Number->format($entry['factor2']) ?> - -
    -
    element('printGDT', ['number' => $entry['gdt']*100.0]) ?>
    -
    - -
    -
    - - 0) : ?> -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    - - -
    -
    - - element('printGDT', ['number' => $gdtEntry['amount']*100.0]); ?> - - element('printEuro', ['number' => $gdtEntry['amount']*100.0]); ?> - element('printEuro', ['number' => $gdtEntry['amount2']*100.0]) ?> - -
    -
    - Number->format($gdtEntry['factor']) ?> - x - Number->format($gdtEntry['factor2']) ?> - -
    -
    element('printGDT', ['number' => $gdtEntry['gdt'] * 100.0]) ?>
    -
    - -
    -
    - -Html->script(['basic', 'popper.min', 'tippy-bundle.umd.min']) ?> - \ No newline at end of file diff --git a/community_server/src/Template/StateBalances/view.ctp b/community_server/src/Template/StateBalances/view.ctp deleted file mode 100644 index e5f8901dd..000000000 --- a/community_server/src/Template/StateBalances/view.ctp +++ /dev/null @@ -1,39 +0,0 @@ - - -
    -

    id) ?>

    - view - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>
    Number->format($stateBalance->id) ?>
    Number->format($stateBalance->amount) ?>
    modified) ?>
    -
    diff --git a/community_server/src/Template/StateCreated/add.ctp b/community_server/src/Template/StateCreated/add.ctp deleted file mode 100644 index c66cf83f3..000000000 --- a/community_server/src/Template/StateCreated/add.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($stateCreated) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('month'); - echo $this->Form->control('year'); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('short_ident_hash'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateCreated/edit.ctp b/community_server/src/Template/StateCreated/edit.ctp deleted file mode 100644 index be1ef330b..000000000 --- a/community_server/src/Template/StateCreated/edit.ctp +++ /dev/null @@ -1,37 +0,0 @@ - - -
    - Form->create($stateCreated) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('month'); - echo $this->Form->control('year'); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('short_ident_hash'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateCreated/index.ctp b/community_server/src/Template/StateCreated/index.ctp deleted file mode 100644 index 64a514b3b..000000000 --- a/community_server/src/Template/StateCreated/index.ctp +++ /dev/null @@ -1,61 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('month') ?>Paginator->sort('year') ?>Paginator->sort('state_user_id') ?>Paginator->sort('created') ?>Paginator->sort('short_ident_hash') ?>
    Number->format($stateCreated->id) ?>has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>Number->format($stateCreated->month) ?>Number->format($stateCreated->year) ?>has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>created) ?>Number->format($stateCreated->short_ident_hash) ?> - Html->link(__('View'), ['action' => 'view', $stateCreated->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateCreated->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateCreated->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateCreated->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateCreated/view.ctp b/community_server/src/Template/StateCreated/view.ctp deleted file mode 100644 index e0e9301ec..000000000 --- a/community_server/src/Template/StateCreated/view.ctp +++ /dev/null @@ -1,52 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>
    Number->format($stateCreated->id) ?>
    Number->format($stateCreated->month) ?>
    Number->format($stateCreated->year) ?>
    Number->format($stateCreated->short_ident_hash) ?>
    created) ?>
    -
    diff --git a/community_server/src/Template/StateErrors/add.ctp b/community_server/src/Template/StateErrors/add.ctp deleted file mode 100644 index 24d095b90..000000000 --- a/community_server/src/Template/StateErrors/add.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($stateError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('message_json'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateErrors/edit.ctp b/community_server/src/Template/StateErrors/edit.ctp deleted file mode 100644 index 795b6c7dd..000000000 --- a/community_server/src/Template/StateErrors/edit.ctp +++ /dev/null @@ -1,35 +0,0 @@ - - -
    - Form->create($stateError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('message_json'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateErrors/index.ctp b/community_server/src/Template/StateErrors/index.ctp deleted file mode 100644 index 3f34f449b..000000000 --- a/community_server/src/Template/StateErrors/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('transaction_type_id') ?>Paginator->sort('created') ?>
    Number->format($stateError->id) ?>has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>created) ?> - Html->link(__('View'), ['action' => 'view', $stateError->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateError->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateError->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateErrors/show_for_user.ctp b/community_server/src/Template/StateErrors/show_for_user.ctp deleted file mode 100644 index 2420571a3..000000000 --- a/community_server/src/Template/StateErrors/show_for_user.ctp +++ /dev/null @@ -1,51 +0,0 @@ -assign('title', __('Fehlermeldungen')); -//var_dump($transactionTypes); -/*foreach($transactionTypes as $i => $t) { - echo "$i => "; - var_dump($t); - echo "
    "; -}*/ -?> -
    -

    Fehler

    -
    -
    -
    Transaktion Typ
    -
    Datum
    -
    Fehler
    -
    Aktionen
    -
    - transaction_type_id-1]; - $errorMessage = ""; - $errorArray = json_decode($error->message_json, true); - if(isset($errorArray['details']) && is_array($errorArray['details'])) { - foreach($errorArray['details'][0] as $function => $errorString) { - $errorMessage = '' . $function . '
    ' . $errorString; - } - } else { - $errorMessage = $error->message_json; - } - ?> -
    -
    name ?>
    -
    created ?>
    -
    -
    - Html->link( - __('Delete'), - ['action' => 'deleteForUser', $error->id], - ['class' => 'form-button button-cancel'] - ) ?>
    -
    - -
    -
    diff --git a/community_server/src/Template/StateErrors/view.ctp b/community_server/src/Template/StateErrors/view.ctp deleted file mode 100644 index c2913d306..000000000 --- a/community_server/src/Template/StateErrors/view.ctp +++ /dev/null @@ -1,44 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>
    Number->format($stateError->id) ?>
    created) ?>
    -
    -

    - Text->autoParagraph(h($stateError->message_json)); ?> -
    -
    diff --git a/community_server/src/Template/StateGroupAddresses/add.ctp b/community_server/src/Template/StateGroupAddresses/add.ctp deleted file mode 100644 index 43ba76178..000000000 --- a/community_server/src/Template/StateGroupAddresses/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($stateGroupAddress) ?> -
    - - Form->control('group_id'); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupAddresses/edit.ctp b/community_server/src/Template/StateGroupAddresses/edit.ctp deleted file mode 100644 index d3ad6fe70..000000000 --- a/community_server/src/Template/StateGroupAddresses/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($stateGroupAddress) ?> -
    - - Form->control('group_id'); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupAddresses/index.ctp b/community_server/src/Template/StateGroupAddresses/index.ctp deleted file mode 100644 index fb463e5dd..000000000 --- a/community_server/src/Template/StateGroupAddresses/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('group_id') ?>Paginator->sort('address_type_id') ?>
    Number->format($stateGroupAddress->id) ?>Number->format($stateGroupAddress->group_id) ?>has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>public_key)) ?> - - Html->link(__('View'), ['action' => 'view', $stateGroupAddress->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroupAddress->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupAddress->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupAddress->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateGroupAddresses/view.ctp b/community_server/src/Template/StateGroupAddresses/view.ctp deleted file mode 100644 index 964b12847..000000000 --- a/community_server/src/Template/StateGroupAddresses/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>
    Number->format($stateGroupAddress->id) ?>
    Number->format($stateGroupAddress->group_id) ?>
    -
    diff --git a/community_server/src/Template/StateGroupRelationships/add.ctp b/community_server/src/Template/StateGroupRelationships/add.ctp deleted file mode 100644 index 39eb550e8..000000000 --- a/community_server/src/Template/StateGroupRelationships/add.ctp +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - Form->create($stateGroupRelationship) ?> -
    - - Form->control('state_group1_id'); - echo $this->Form->control('state_group2_id'); - echo $this->Form->control('state_relationship_id'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupRelationships/edit.ctp b/community_server/src/Template/StateGroupRelationships/edit.ctp deleted file mode 100644 index 55bcc6afe..000000000 --- a/community_server/src/Template/StateGroupRelationships/edit.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($stateGroupRelationship) ?> -
    - - Form->control('state_group1_id'); - echo $this->Form->control('state_group2_id'); - echo $this->Form->control('state_relationship_id'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroupRelationships/index.ctp b/community_server/src/Template/StateGroupRelationships/index.ctp deleted file mode 100644 index 57fbc4da5..000000000 --- a/community_server/src/Template/StateGroupRelationships/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_group1_id') ?>Paginator->sort('state_group2_id') ?>Paginator->sort('state_relationship_id') ?>
    Number->format($stateGroupRelationship->id) ?>Number->format($stateGroupRelationship->state_group1_id) ?>Number->format($stateGroupRelationship->state_group2_id) ?>Number->format($stateGroupRelationship->state_relationship_id) ?> - Html->link(__('View'), ['action' => 'view', $stateGroupRelationship->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroupRelationship->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupRelationship->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupRelationship->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateGroupRelationships/view.ctp b/community_server/src/Template/StateGroupRelationships/view.ctp deleted file mode 100644 index de871dc77..000000000 --- a/community_server/src/Template/StateGroupRelationships/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    Number->format($stateGroupRelationship->id) ?>
    Number->format($stateGroupRelationship->state_group1_id) ?>
    Number->format($stateGroupRelationship->state_group2_id) ?>
    Number->format($stateGroupRelationship->state_relationship_id) ?>
    -
    diff --git a/community_server/src/Template/StateGroups/add.ctp b/community_server/src/Template/StateGroups/add.ctp deleted file mode 100644 index e71480593..000000000 --- a/community_server/src/Template/StateGroups/add.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($stateGroup) ?> -
    - - Form->control('name'); - echo $this->Form->control('user_count'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroups/edit.ctp b/community_server/src/Template/StateGroups/edit.ctp deleted file mode 100644 index 93b35256b..000000000 --- a/community_server/src/Template/StateGroups/edit.ctp +++ /dev/null @@ -1,38 +0,0 @@ - - -
    - Form->create($stateGroup) ?> -
    - - Form->control('name'); - echo $this->Form->control('user_count'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateGroups/index.ctp b/community_server/src/Template/StateGroups/index.ctp deleted file mode 100644 index a37029ab2..000000000 --- a/community_server/src/Template/StateGroups/index.ctp +++ /dev/null @@ -1,57 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('user_count') ?>
    Number->format($stateGroup->id) ?>name) ?>Number->format($stateGroup->user_count) ?> - Html->link(__('View'), ['action' => 'view', $stateGroup->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroup->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroup->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroup->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateGroups/view.ctp b/community_server/src/Template/StateGroups/view.ctp deleted file mode 100644 index 0ecb27009..000000000 --- a/community_server/src/Template/StateGroups/view.ctp +++ /dev/null @@ -1,152 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    Number->format($stateGroup->id) ?>
    Number->format($stateGroup->user_count) ?>
    - - - - -
    diff --git a/community_server/src/Template/StateRelationshipTypes/add.ctp b/community_server/src/Template/StateRelationshipTypes/add.ctp deleted file mode 100644 index 5eb7c3b4f..000000000 --- a/community_server/src/Template/StateRelationshipTypes/add.ctp +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - Form->create($stateRelationshipType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateRelationshipTypes/edit.ctp b/community_server/src/Template/StateRelationshipTypes/edit.ctp deleted file mode 100644 index 96ef4ba88..000000000 --- a/community_server/src/Template/StateRelationshipTypes/edit.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($stateRelationshipType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateRelationshipTypes/index.ctp b/community_server/src/Template/StateRelationshipTypes/index.ctp deleted file mode 100644 index 2e44a8d88..000000000 --- a/community_server/src/Template/StateRelationshipTypes/index.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($stateRelationshipType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $stateRelationshipType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateRelationshipType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateRelationshipType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateRelationshipType->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateRelationshipTypes/view.ctp b/community_server/src/Template/StateRelationshipTypes/view.ctp deleted file mode 100644 index 5d745a0df..000000000 --- a/community_server/src/Template/StateRelationshipTypes/view.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($stateRelationshipType->id) ?>
    -
    diff --git a/community_server/src/Template/StateUserRoles/assign_role.ctp b/community_server/src/Template/StateUserRoles/assign_role.ctp deleted file mode 100644 index 64d3a1f8b..000000000 --- a/community_server/src/Template/StateUserRoles/assign_role.ctp +++ /dev/null @@ -1,49 +0,0 @@ -assign('title', __('Assign Role')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -Html->css([ - 'loginServer/style.css', - 'rippleUI/style.css', - 'materialdesignicons.min.css' -]) ?> - -
    -

    Assign Role

    -
    - Form->create($assignRoleForm, []) ?> -
    User:  first_name." ".$stateUser->last_name ?>
    -
    Select Role:
    Form->select('role_id', $roles, ['label' => __('Role'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Role'), "multiple" => "multiple", "value" => $role_ids]) ?>
    - Form->button(' ' . __('Assign Role'), ['class' => 'form-button']) ?> - Form->hidden('public_hex', ['id' => 'input-order-row', 'value' => $public_hex]) ?> -
    -
    diff --git a/community_server/src/Template/StateUserRoles/index.ctp b/community_server/src/Template/StateUserRoles/index.ctp deleted file mode 100644 index 4e6ea8cb1..000000000 --- a/community_server/src/Template/StateUserRoles/index.ctp +++ /dev/null @@ -1,69 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('first_name') ?> - Paginator->sort('last_name') ?> - Paginator->sort('username') ?> - Paginator->sort('email') ?> - Paginator->sort('disabled') ?> -
    Number->format($stateUser->id) ?>first_name ?>last_name ?>username ?>email ?>disabled ?> - Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateUserRoles/search.ctp b/community_server/src/Template/StateUserRoles/search.ctp deleted file mode 100644 index aff7fbbcb..000000000 --- a/community_server/src/Template/StateUserRoles/search.ctp +++ /dev/null @@ -1,53 +0,0 @@ -assign('title', __('Benutzer suchen')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -
    -

    Benutzer suchen

    -
    - Form->create($searchForm, []) ?> - Form->control('search', ['label' => __('Suchbegriff'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Vorname/Nachname/E-Mail')]) ?> - Form->button('search ' . __('Suchen'), ['class' => 'form-button']) ?> - Form->hidden('order_row', ['id' => 'input-order-row']) ?> -
    -
    -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('first_name') ?>Paginator->sort('last_name') ?>Paginator->sort('email') ?>
    - Html->link(__('Assign Role'), ['action' => 'assignRole', $stateUser['pubkeyhex']]) ?> -
    -
    diff --git a/community_server/src/Template/StateUserTransactions/add.ctp b/community_server/src/Template/StateUserTransactions/add.ctp deleted file mode 100644 index b131a43e5..000000000 --- a/community_server/src/Template/StateUserTransactions/add.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($stateUserTransaction) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUserTransactions/edit.ctp b/community_server/src/Template/StateUserTransactions/edit.ctp deleted file mode 100644 index eec26e522..000000000 --- a/community_server/src/Template/StateUserTransactions/edit.ctp +++ /dev/null @@ -1,37 +0,0 @@ - - -
    - Form->create($stateUserTransaction) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUserTransactions/index.ctp b/community_server/src/Template/StateUserTransactions/index.ctp deleted file mode 100644 index 9bdd3d6b3..000000000 --- a/community_server/src/Template/StateUserTransactions/index.ctp +++ /dev/null @@ -1,57 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('transaction_type_id') ?>
    Number->format($stateUserTransaction->id) ?>has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?> - Html->link(__('View'), ['action' => 'view', $stateUserTransaction->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUserTransaction->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUserTransaction->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUserTransaction->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateUserTransactions/view.ctp b/community_server/src/Template/StateUserTransactions/view.ctp deleted file mode 100644 index 13c05347b..000000000 --- a/community_server/src/Template/StateUserTransactions/view.ctp +++ /dev/null @@ -1,42 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>
    has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?>
    Number->format($stateUserTransaction->id) ?>
    -
    diff --git a/community_server/src/Template/StateUsers/add.ctp b/community_server/src/Template/StateUsers/add.ctp deleted file mode 100644 index a810bc9d5..000000000 --- a/community_server/src/Template/StateUsers/add.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($stateUser) ?> -
    - - Form->control('index_id'); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUsers/edit.ctp b/community_server/src/Template/StateUsers/edit.ctp deleted file mode 100644 index 473f1d845..000000000 --- a/community_server/src/Template/StateUsers/edit.ctp +++ /dev/null @@ -1,39 +0,0 @@ - - -
    - Form->create($stateUser) ?> -
    - - Form->control('disabled'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/StateUsers/index.ctp b/community_server/src/Template/StateUsers/index.ctp deleted file mode 100644 index 4e6ea8cb1..000000000 --- a/community_server/src/Template/StateUsers/index.ctp +++ /dev/null @@ -1,69 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('first_name') ?> - Paginator->sort('last_name') ?> - Paginator->sort('username') ?> - Paginator->sort('email') ?> - Paginator->sort('disabled') ?> -
    Number->format($stateUser->id) ?>first_name ?>last_name ?>username ?>email ?>disabled ?> - Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/StateUsers/list_ident_hashes.ctp b/community_server/src/Template/StateUsers/list_ident_hashes.ctp deleted file mode 100644 index 777a32c99..000000000 --- a/community_server/src/Template/StateUsers/list_ident_hashes.ctp +++ /dev/null @@ -1,29 +0,0 @@ - -
    - - - - - - - - - - - - - - - - - -
    first namelast nameemailidentHashPublic key hex -
    first_name ?>last_name ?>email ?>identHash ?>public_key)) ?>
    -
    diff --git a/community_server/src/Template/StateUsers/search.ctp b/community_server/src/Template/StateUsers/search.ctp deleted file mode 100644 index 626cb7313..000000000 --- a/community_server/src/Template/StateUsers/search.ctp +++ /dev/null @@ -1,79 +0,0 @@ -assign('title', __('Benutzer suchen')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); - -$stateOptions = [ - 'all' => __('Alle'), - //'account created'=>__('Konto angelegt'), - //'account not on login-server' => __('Konto nicht auf Login-Server'), - //'email activated' => __('Konto aktiviert'), - //'account copied to community' => __('Konto auf Gemeinschafts-Server'), - 'email not activated' => __('Konto nicht aktiviert'), - //'account multiple times on login-server' => __('Konto mehrfach vorhanden'), - //'account not on community server' => __('Konto nicht auf Gemeinschafts-Server'), - //'no keys' => __('Keine Schlüssel generiert') -]; - -?> -Html->css([ - 'loginServer/style.css', - 'rippleUI/style.css', - 'materialdesignicons.min.css' -]) ?> - -
    -

    Benutzer suchen

    -
    - Form->create($searchForm, []) ?> - Form->control('search', ['label' => __('Suchbegriff'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Vorname/Nachname/E-Mail'), 'required' => false]) ?> - Form->control('account_state', ['label' => __('Konto Status'), 'class' => 'form-control', 'type' => 'select', 'options' => $stateOptions]) ?> - Form->button('search ' . __('Suchen'), ['class' => 'form-button']) ?> - Form->hidden('order_row', ['id' => 'input-order-row']) ?> -
    -
    -
    - -
    - - -Html->script('userSearch.min') ?> - - - diff --git a/community_server/src/Template/StateUsers/view.ctp b/community_server/src/Template/StateUsers/view.ctp deleted file mode 100644 index c2bb33c2b..000000000 --- a/community_server/src/Template/StateUsers/view.ctp +++ /dev/null @@ -1,143 +0,0 @@ - - -
    -

    first_name) ?> last_name) ?> <email) ?>>

    - Konto-Adresse: public_key))) ?> - - - - - -
    diff --git a/community_server/src/Template/TransactionCreations/add.ctp b/community_server/src/Template/TransactionCreations/add.ctp deleted file mode 100644 index dfe34be56..000000000 --- a/community_server/src/Template/TransactionCreations/add.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($transactionCreation) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionCreations/create.ctp b/community_server/src/Template/TransactionCreations/create.ctp deleted file mode 100644 index d5c9ee2c5..000000000 --- a/community_server/src/Template/TransactionCreations/create.ctp +++ /dev/null @@ -1,31 +0,0 @@ - $receiver) { - //var_dump($receiver); - array_push($address_options, [ - 'text' => $receiver['name'], - 'value' => $i+1, - 'title' => $receiver['key'] - ]); -} -$this->assign('title', __('Schöpfungstransaktion')); -?> -
    - - Form->create($creationForm) ?> -
    - Form->control('memo'); ?> - Form->control('amount'); ?> - Form->control('receiver', ['options' => $address_options]); ?> - -
    - Form->button(__('Transaktion(en) abschließen'), ['name' => 'next', 'class' => 'grd-form-bn grd-form-bn-succeed grd_clickable grd-width-200']) ?> - Form->button(__('Weitere Transaktion erstellen'), ['name' => 'add', 'class' => 'grd-form-bn grd_clickable grd-width-200']) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionCreations/create_multi.ctp b/community_server/src/Template/TransactionCreations/create_multi.ctp deleted file mode 100644 index d4d130b9c..000000000 --- a/community_server/src/Template/TransactionCreations/create_multi.ctp +++ /dev/null @@ -1,229 +0,0 @@ - $receiver) { - //var_dump($receiver); - array_push($address_options, [ - 'text' => $receiver['name'], - 'value' => $i+1, - 'title' => $receiver['key'] - ]); -}*/ -$this->assign('title', __('Schöpfungstransaktion')); -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); - -use Cake\I18n\FrozenTime; - -?> -
    -

    Schöpfen

    -
    - Form->create($creationForm) ?> - 0) : ?> -
    - -
    -
    - Form->control('searchText', ['label' => __('Suche'), 'placeholder' => 'Email/Name']); ?> - Form->button(__('Suchen'), ['name' => 'searchButton', 'class' => 'form-button']) ?> -
    -
    - Form->control('memo', ['label' => __('Memo'), 'placeholder' => 'Memo']); ?> - Form->control('amount', ['label' => __('Betrag in GDD'), 'required' => false]); ?> - day(1)->subMonth(1); - ?> - -
    -
    - - -
    -
    - 30000000) { - //$disable = 'disabled'; - } - ?> -
    - - Form->hidden('user_pending[' . $possibleReceiver['id'] . ']', ['value' => $possibleReceiver['pending']] ) ?> - -
    -
    - Form->checkbox('user[' .$possibleReceiver['id'] . ']', ['value' => $possibleReceiver['id'], 'hiddenField' => false, $disable]); ?> -
    -
    - - - - - - - <> - - -
    -
    - Form->text('user_amount[' . $possibleReceiver['id'] . ']', ['placeholder' => __('Für benutzerdefinierten Betrag'), 'class' => 'user_amount', 'type' => 'number', 'step' => '0.01', $disable]); ?> GDD -
    -
    - Form->date('user_target_date[' . $possibleReceiver['id'] . ']', ['value' => $firstDayLastMonth]) ?> -
    -
    -
    - - - Bereits als Transaktion angelegt: element('printGradido', ['number' => $possibleReceiver['pending']]);?> - - - - - In diesen und den letzten 2 Monaten bereits geschöpft (alte Berechnung): element('printGradido', ['number' => $possibleReceiver['amount']]);?> - - - 0) : ?> - - Im letzten Monat geschöpft (neue Berechnung): element('printGradido', ['number' => $possibleReceiver['amount2']]) ?> - - -
    -
    - - -
    - $limit) : ?> -

    Benutzer insgesamt

    -

    Seiten: - 0) echo ', '; - if($i != $page) { - echo $this->Html->link($i, ['action' => 'create_multi', $i]); - } else { - echo $i; - } - } - ?> -

    - -
    -
    -
    - Form->button(__('Transaktion(en) abschließen'), ['name' => 'next', 'class' => 'form-button' ]) ?> - Form->button(__('Weitere Transaktion erstellen'), ['name' => 'add', 'class' => 'form-button']) ?> -
    -
    - Form->end() ?> -
    -
    -Html->script('basic'); ?> - - 0) : ?> - - \ No newline at end of file diff --git a/community_server/src/Template/TransactionCreations/edit.ctp b/community_server/src/Template/TransactionCreations/edit.ctp deleted file mode 100644 index 85b7704be..000000000 --- a/community_server/src/Template/TransactionCreations/edit.ctp +++ /dev/null @@ -1,35 +0,0 @@ - - -
    - Form->create($transactionCreation) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionCreations/index.ctp b/community_server/src/Template/TransactionCreations/index.ctp deleted file mode 100644 index 4eb7b2471..000000000 --- a/community_server/src/Template/TransactionCreations/index.ctp +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('target_date') ?>Paginator->sort('received') ?>Paginator->sort('amount') ?>
    Number->format($transactionCreation->id) ?>has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>has('state_user') ? $this->Html->link($transactionCreation->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>target_date) ?>transaction->received) ?>element('printGradido', ['number' => $transactionCreation->amount]) ?>ident_hash) ?> - Html->link(__('View'), ['action' => 'view', $transactionCreation->id]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionCreations/view.ctp b/community_server/src/Template/TransactionCreations/view.ctp deleted file mode 100644 index a51312674..000000000 --- a/community_server/src/Template/TransactionCreations/view.ctp +++ /dev/null @@ -1,40 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($transactionCreation->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>
    Number->format($transactionCreation->id) ?>
    Number->format($transactionCreation->amount) ?>
    -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/add.ctp b/community_server/src/Template/TransactionGroupAddaddress/add.ctp deleted file mode 100644 index 21fa1bea7..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($transactionGroupAddaddres) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/edit.ctp b/community_server/src/Template/TransactionGroupAddaddress/edit.ctp deleted file mode 100644 index e9d7c318a..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($transactionGroupAddaddres) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/index.ctp b/community_server/src/Template/TransactionGroupAddaddress/index.ctp deleted file mode 100644 index 404115d69..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('address_type_id') ?>
    Number->format($transactionGroupAddaddres->id) ?>has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>public_key)) ?> - - Html->link(__('View'), ['action' => 'view', $transactionGroupAddaddres->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAddaddres->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAddaddres->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAddaddres->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionGroupAddaddress/view.ctp b/community_server/src/Template/TransactionGroupAddaddress/view.ctp deleted file mode 100644 index 8401780e7..000000000 --- a/community_server/src/Template/TransactionGroupAddaddress/view.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>
    has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>
    Number->format($transactionGroupAddaddres->id) ?>
    -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/add.ctp b/community_server/src/Template/TransactionGroupAllowtrades/add.ctp deleted file mode 100644 index 7e29efc24..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/add.ctp +++ /dev/null @@ -1,27 +0,0 @@ - - -
    - Form->create($transactionGroupAllowtrade) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('group_id'); - echo $this->Form->control('allow'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp b/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp deleted file mode 100644 index 500241331..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp +++ /dev/null @@ -1,33 +0,0 @@ - - -
    - Form->create($transactionGroupAllowtrade) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('group_id'); - echo $this->Form->control('allow'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/index.ctp b/community_server/src/Template/TransactionGroupAllowtrades/index.ctp deleted file mode 100644 index 07386ccb2..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/index.ctp +++ /dev/null @@ -1,53 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('group_id') ?>Paginator->sort('allow') ?>
    Number->format($transactionGroupAllowtrade->id) ?>has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>Number->format($transactionGroupAllowtrade->group_id) ?>allow) ?> - Html->link(__('View'), ['action' => 'view', $transactionGroupAllowtrade->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAllowtrade->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAllowtrade->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAllowtrade->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionGroupAllowtrades/view.ctp b/community_server/src/Template/TransactionGroupAllowtrades/view.ctp deleted file mode 100644 index 7a6a36f5a..000000000 --- a/community_server/src/Template/TransactionGroupAllowtrades/view.ctp +++ /dev/null @@ -1,38 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>
    Number->format($transactionGroupAllowtrade->id) ?>
    Number->format($transactionGroupAllowtrade->group_id) ?>
    allow ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/Template/TransactionGroupCreates/add.ctp b/community_server/src/Template/TransactionGroupCreates/add.ctp deleted file mode 100644 index 6e6174eb4..000000000 --- a/community_server/src/Template/TransactionGroupCreates/add.ctp +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - Form->create($transactionGroupCreate) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('name'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupCreates/edit.ctp b/community_server/src/Template/TransactionGroupCreates/edit.ctp deleted file mode 100644 index d1890afca..000000000 --- a/community_server/src/Template/TransactionGroupCreates/edit.ctp +++ /dev/null @@ -1,35 +0,0 @@ - - -
    - Form->create($transactionGroupCreate) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('name'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionGroupCreates/index.ctp b/community_server/src/Template/TransactionGroupCreates/index.ctp deleted file mode 100644 index 13aeabf83..000000000 --- a/community_server/src/Template/TransactionGroupCreates/index.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_group_id') ?>Paginator->sort('name') ?>
    Number->format($transactionGroupCreate->id) ?>has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>name) ?> - Html->link(__('View'), ['action' => 'view', $transactionGroupCreate->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupCreate->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupCreate->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupCreate->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionGroupCreates/view.ctp b/community_server/src/Template/TransactionGroupCreates/view.ctp deleted file mode 100644 index c774f8bc3..000000000 --- a/community_server/src/Template/TransactionGroupCreates/view.ctp +++ /dev/null @@ -1,40 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>
    has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>
    name) ?>
    Number->format($transactionGroupCreate->id) ?>
    -
    diff --git a/community_server/src/Template/TransactionSendCoins/add.ctp b/community_server/src/Template/TransactionSendCoins/add.ctp deleted file mode 100644 index 8b5a757c4..000000000 --- a/community_server/src/Template/TransactionSendCoins/add.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - Form->create($transactionSendCoin) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - echo $this->Form->control('sender_final_balance'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSendCoins/create.ctp b/community_server/src/Template/TransactionSendCoins/create.ctp deleted file mode 100644 index 91e7678e0..000000000 --- a/community_server/src/Template/TransactionSendCoins/create.ctp +++ /dev/null @@ -1,40 +0,0 @@ -assign('title', __('Überweisung')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> -
    -

    Überweisen

    -
    - Form->create($transferForm) ?> - Form->control('email', ['label' => __('Empfänger'), 'placeholder' => 'E-Mail']) ?> - Form->control('group', ['label' => __('Community Alias'), 'options' => $groups, 'default' => $user['group_alias']]) ?> - Form->control('memo', ['label' => __('Verwendungszweck'), 'rows' => 3]) ?> - Form->control('amount', ['label' => __('Betrag in GDD')]) ?> - Form->button(__('Transaktion abschließen'), ['name' => 'next', 'class' => 'form-button']) ?> - - Form->end() ?> -
    -
    - -Html->script(['core', 'vendor.addons']); ?> - diff --git a/community_server/src/Template/TransactionSendCoins/create_raw.ctp b/community_server/src/Template/TransactionSendCoins/create_raw.ctp deleted file mode 100644 index 0b3d74e1f..000000000 --- a/community_server/src/Template/TransactionSendCoins/create_raw.ctp +++ /dev/null @@ -1,55 +0,0 @@ -assign('title', __('Überweisung')); -// In a View class -$this->loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -?> - -
    -
    -
    -

    Überweisen

    -
    -
    -
    -
    - Form->create($transferRawForm) ?> - Form->control('sender_privkey_hex', ['label' => __('Sender Private Key')]) ?> - Form->control('sender_pubkey_hex', ['label' => __('Sender Public Key')]) ?> - Form->control('receiver_pubkey_hex', ['label' => __('Empfänger Public Key')]) ?> - Form->control('memo', ['label' => __('Verwendungszweck'), 'rows' => 3]) ?> - Form->control('amount', ['label' => __('Betrag in GDD')]) ?> - Form->button(__('Transaktion abschließen'), ['name' => 'next', 'class' => 'btn btn-sm btn-primary']) ?> - Form->end() ?> -
    -
    -
    -
    -
    -
    -
    - -Html->script(['core', 'vendor.addons']); ?> - diff --git a/community_server/src/Template/TransactionSendCoins/edit.ctp b/community_server/src/Template/TransactionSendCoins/edit.ctp deleted file mode 100644 index 61a6841fe..000000000 --- a/community_server/src/Template/TransactionSendCoins/edit.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - Form->create($transactionSendCoin) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - echo $this->Form->control('sender_final_balance'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSendCoins/index.ctp b/community_server/src/Template/TransactionSendCoins/index.ctp deleted file mode 100644 index c98f675a5..000000000 --- a/community_server/src/Template/TransactionSendCoins/index.ctp +++ /dev/null @@ -1,57 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('receiver_user_id') ?>Paginator->sort('amount') ?>Paginator->sort('sender_final_balance') ?>
    Number->format($transactionSendCoin->id) ?>has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>has('state_user') ? $this->Html->link($transactionSendCoin->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>has('receiver_user') ? $this->Html->link($transactionSendCoin->receiver_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->receiver_user->id]) : ''?>element('printGradido', ['number' => $transactionSendCoin->amount]) ?>Number->format($transactionSendCoin->sender_final_balance) ?> - Html->link(__('View'), ['action' => 'view', $transactionSendCoin->id]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionSendCoins/view.ctp b/community_server/src/Template/TransactionSendCoins/view.ctp deleted file mode 100644 index 322621942..000000000 --- a/community_server/src/Template/TransactionSendCoins/view.ctp +++ /dev/null @@ -1,44 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($transactionSendCoin->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>
    Number->format($transactionSendCoin->id) ?>
    Number->format($transactionSendCoin->amount) ?>
    Number->format($transactionSendCoin->sender_final_balance) ?>
    -
    diff --git a/community_server/src/Template/TransactionSignatures/add.ctp b/community_server/src/Template/TransactionSignatures/add.ctp deleted file mode 100644 index 752389cd7..000000000 --- a/community_server/src/Template/TransactionSignatures/add.ctp +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - Form->create($transactionSignature) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSignatures/edit.ctp b/community_server/src/Template/TransactionSignatures/edit.ctp deleted file mode 100644 index 68143712b..000000000 --- a/community_server/src/Template/TransactionSignatures/edit.ctp +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - Form->create($transactionSignature) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionSignatures/index.ctp b/community_server/src/Template/TransactionSignatures/index.ctp deleted file mode 100644 index 9b8bc2826..000000000 --- a/community_server/src/Template/TransactionSignatures/index.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>
    Number->format($transactionSignature->id) ?>has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?> - Html->link(__('View'), ['action' => 'view', $transactionSignature->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionSignature->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionSignature->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionSignature->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionSignatures/view.ctp b/community_server/src/Template/TransactionSignatures/view.ctp deleted file mode 100644 index 681198125..000000000 --- a/community_server/src/Template/TransactionSignatures/view.ctp +++ /dev/null @@ -1,30 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?>
    Number->format($transactionSignature->id) ?>
    -
    diff --git a/community_server/src/Template/TransactionTypes/add.ctp b/community_server/src/Template/TransactionTypes/add.ctp deleted file mode 100644 index 97de82122..000000000 --- a/community_server/src/Template/TransactionTypes/add.ctp +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - Form->create($transactionType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionTypes/edit.ctp b/community_server/src/Template/TransactionTypes/edit.ctp deleted file mode 100644 index 421184b55..000000000 --- a/community_server/src/Template/TransactionTypes/edit.ctp +++ /dev/null @@ -1,32 +0,0 @@ - - -
    - Form->create($transactionType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/TransactionTypes/index.ctp b/community_server/src/Template/TransactionTypes/index.ctp deleted file mode 100644 index b2248ae4b..000000000 --- a/community_server/src/Template/TransactionTypes/index.ctp +++ /dev/null @@ -1,51 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($transactionType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $transactionType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionType->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/TransactionTypes/view.ctp b/community_server/src/Template/TransactionTypes/view.ctp deleted file mode 100644 index 3da64f7e3..000000000 --- a/community_server/src/Template/TransactionTypes/view.ctp +++ /dev/null @@ -1,63 +0,0 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    Number->format($transactionType->id) ?>
    - -
    diff --git a/community_server/src/Template/Transactions/add.ctp b/community_server/src/Template/Transactions/add.ctp deleted file mode 100644 index 012d82027..000000000 --- a/community_server/src/Template/Transactions/add.ctp +++ /dev/null @@ -1,44 +0,0 @@ - - -
    - Form->create($transaction) ?> -
    - - Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('memo', ['type' => 'textarea']); - echo $this->Form->control('blockchain_type_id', ['options' => $blockchainTypes]); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Transactions/decode.ctp b/community_server/src/Template/Transactions/decode.ctp deleted file mode 100644 index dddde1cb8..000000000 --- a/community_server/src/Template/Transactions/decode.ctp +++ /dev/null @@ -1,36 +0,0 @@ - - 0) : ?> -
    -
      - -
    • - -
    • - -
    -
    - - -Form->create() ?> -Form->control('base64', ['type'=> 'textarea', 'rows' => '5', 'cols' => 40]) ?> -Form->submit(); ?> -Form->end() ?> - - -getTransactionBody(); -?> - - - getMemo() ?> -
    TypegetTransactionTypeName() ?>
    Memo
    - - diff --git a/community_server/src/Template/Transactions/edit.ctp b/community_server/src/Template/Transactions/edit.ctp deleted file mode 100644 index 4085a60c4..000000000 --- a/community_server/src/Template/Transactions/edit.ctp +++ /dev/null @@ -1,49 +0,0 @@ - - -
    - Form->create($transaction) ?> -
    - - Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('received'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Transactions/index.ctp b/community_server/src/Template/Transactions/index.ctp deleted file mode 100644 index 9f97dc0c8..000000000 --- a/community_server/src/Template/Transactions/index.ctp +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -
    -
    -
    Paginator->sort('id') ?>
    -
    Paginator->sort('memo') ?>
    -
    Paginator->sort('transaction_type_id') ?>
    -
    Paginator->sort('received') ?>
    -
    - -
    -
    Number->format($transaction->id) ?>
    -
    memo) ?>
    -
    has('transaction_type') ? $this->Html->link(__($transaction->transaction_type->name), ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
    -
    received) ?>
    -
    - -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Transactions/manual_transaction.ctp b/community_server/src/Template/Transactions/manual_transaction.ctp deleted file mode 100644 index 30bda1175..000000000 --- a/community_server/src/Template/Transactions/manual_transaction.ctp +++ /dev/null @@ -1,63 +0,0 @@ -loadHelper('Form', [ - 'templates' => 'horizontal_form', -]); -$now = new \DateTime; -?> - 0) : ?> -
    -
      - -
    • - -
    • - -
    -
    - - -
    -

    -
    - Form->create() ?> - Form->control('type', ['type' => 'hidden', 'value' => 'creation']) ?> - Form->control('target_public_key', ['type'=> 'text']) ?> - Form->control('target_date', ['type'=> 'text', 'placeholder' => 'yyyy-mm-dd hh:ii:ss', 'default' => $now->format('Y-m-d H:i:s')]) ?> - Form->control('amount', ['type'=> 'number']) ?> - Form->control('memo', ['type'=> 'textarea', 'rows' => '8', 'cols' => 40]) ?> - Form->control('signer_public_key', ['type' => 'text']) ?> - Form->control('signer_private_key', ['type'=> 'text']) ?> - Form->submit(); ?> - Form->end() ?> -
    -
    -
    -

    -
    - Form->create() ?> - Form->control('type', ['type' => 'hidden', 'value' => 'transfer']) ?> - Form->control('sender_public_key', ['type'=> 'text']) ?> - Form->control('receiver_public_key', ['type'=> 'text']) ?> - Form->control('amount', ['type'=> 'number']) ?> - Form->control('memo', ['type'=> 'textarea', 'rows' => '8', 'cols' => 40]) ?> - Form->control('signer_public_key', ['type' => 'text']) ?> - Form->control('signer_private_key', ['type'=> 'text']) ?> - Form->submit(); ?> - Form->end() ?> -
    -
    - -
    -
      - $value) : ?> -
    • :
    • - -
    -
    - \ No newline at end of file diff --git a/community_server/src/Template/Transactions/send_to_node.ctp b/community_server/src/Template/Transactions/send_to_node.ctp deleted file mode 100644 index 0bb652feb..000000000 --- a/community_server/src/Template/Transactions/send_to_node.ctp +++ /dev/null @@ -1,106 +0,0 @@ -assign('title', __('Transaktionen an Gradido-Node senden')); -?> - - -

    - -Bisher keine Transaktionen eingereicht - -Letzte eingereichte Transaktion - -

    -
      - $id) : ?> -
    • - : - - - Wird verarbeitet - - in Warteschlange - - - -
    • -
    -Html->script(['core']); ?> - diff --git a/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp b/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp deleted file mode 100644 index 8ac1ecb2d..000000000 --- a/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp +++ /dev/null @@ -1,46 +0,0 @@ - -
    -

    Synchronize state_user_transactions with transactions

    -

    transactions count:

    -

    state_user_transaction count:

    -

    Missing count:

    -

    First 10 Missing ids:

    -

    $id) { - if($i > 10) break; - if($i > 0) echo ', '; - echo $id['id']; -} ?>

    - - -

    Synchronize errors:

    -
      - $result) : - if(false != $result) { - $succeed++; - continue; - } - ?> -
    • Error saving entity: with error: getErrors()) ?>
    • - - -
    • Succeed:
    • -
    - - - Form->create() ?> - Form->button(__('Synchronize')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Transactions/view.ctp b/community_server/src/Template/Transactions/view.ctp deleted file mode 100644 index e15b9dbe3..000000000 --- a/community_server/src/Template/Transactions/view.ctp +++ /dev/null @@ -1,259 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_group') ? $this->Html->link($transaction->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transaction->state_group->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($transaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
    Number->format($transaction->id) ?>
    received) ?>
    - - - - - - - -
    diff --git a/community_server/src/Template/Users/add.ctp b/community_server/src/Template/Users/add.ctp deleted file mode 100644 index 6f67f02e6..000000000 --- a/community_server/src/Template/Users/add.ctp +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - Form->create($user) ?> -
    - - Form->control('email'); - echo $this->Form->control('first_name'); - echo $this->Form->control('last_name'); - echo $this->Form->control('password'); - echo $this->Form->control('email_checked'); - echo $this->Form->control('language'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Users/edit.ctp b/community_server/src/Template/Users/edit.ctp deleted file mode 100644 index 681eacd36..000000000 --- a/community_server/src/Template/Users/edit.ctp +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - Form->create($user) ?> -
    - - Form->control('email'); - echo $this->Form->control('first_name'); - echo $this->Form->control('last_name'); - echo $this->Form->control('password'); - echo $this->Form->control('email_checked'); - echo $this->Form->control('language'); - ?> -
    - Form->button(__('Submit')) ?> - Form->end() ?> -
    diff --git a/community_server/src/Template/Users/index.ctp b/community_server/src/Template/Users/index.ctp deleted file mode 100644 index 14566ea26..000000000 --- a/community_server/src/Template/Users/index.ctp +++ /dev/null @@ -1,59 +0,0 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('email') ?>Paginator->sort('first_name') ?>Paginator->sort('last_name') ?>Paginator->sort('password') ?>Paginator->sort('created') ?>Paginator->sort('email_checked') ?>Paginator->sort('language') ?>
    Number->format($user->id) ?>email) ?>first_name) ?>last_name) ?>Number->format($user->password) ?>created) ?>email_checked) ?>language) ?> - Html->link(__('View'), ['action' => 'view', $user->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $user->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?> -
    -
    - -

    Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

    -
    -
    diff --git a/community_server/src/Template/Users/statistics.ctp b/community_server/src/Template/Users/statistics.ctp deleted file mode 100644 index 76532faa8..000000000 --- a/community_server/src/Template/Users/statistics.ctp +++ /dev/null @@ -1,98 +0,0 @@ -assign('title', __('Benutzer Statistiken')); - -//mdi mdi-account-multiple-plus -//$newUserPercent = (1 - (b / a)) * 100 -$newUserPercent = 0; -$percentColor = 'info'; -if($users->count() > 0 && $newUsersLastMonth->count()) { - $newUserPercent = round((1 - ($users->count() / $newUsersLastMonth->count())) * 100.0, 2); - if($newUserPercent > 0 ) { - $percentColor = 'success'; - } else if($newUserPercent <= 0) { - $percentColor = 'alert'; - } -} - -$userColor = 'info'; -if($users->count() > 0) { - if($users->count() > 0 ) { - $userColor = 'success'; - } else if($users->count() <= 0) { - $userColor = 'alert'; - } -} -?> -
    -
    -
    - people -
    -

    count()?>

    -
     
    - -   - -
    -
    -
    - group_add -
    -

    count() ?>

    -
     
    - - - arrow_drop_down - 0) : ?> - arrow_drop_up - - % - -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    - -
    -
    first_name . ' ' . $user->last_name ?>
    -
    email ?>
    -
    created ?>
    -
    - - toArray()); ?> -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    - $yearEntrys) : ?> - $monthEntrys): ?> -
    -
    -
    -
    -
    - - -
    -
    -Html->script(['core', 'vendor.addons']); ?> -Html->script('userSearch') ?> \ No newline at end of file diff --git a/community_server/src/Template/Users/view.ctp b/community_server/src/Template/Users/view.ctp deleted file mode 100644 index d3a1e67cd..000000000 --- a/community_server/src/Template/Users/view.ctp +++ /dev/null @@ -1,52 +0,0 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    email) ?>
    first_name) ?>
    last_name) ?>
    language) ?>
    Number->format($user->id) ?>
    Number->format($user->password) ?>
    created) ?>
    email_checked ? __('Yes') : __('No'); ?>
    -
    diff --git a/community_server/src/View/AjaxView.php b/community_server/src/View/AjaxView.php deleted file mode 100644 index 3cb786926..000000000 --- a/community_server/src/View/AjaxView.php +++ /dev/null @@ -1,49 +0,0 @@ -response = $this->response->withType('ajax'); - } -} diff --git a/community_server/src/View/AppView.php b/community_server/src/View/AppView.php deleted file mode 100644 index 242ab6bde..000000000 --- a/community_server/src/View/AppView.php +++ /dev/null @@ -1,40 +0,0 @@ -loadHelper('Html');` - * - * @return void - */ - public function initialize() - { - } -} diff --git a/community_server/src/View/Cell/empty b/community_server/src/View/Cell/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/src/View/Helper/empty b/community_server/src/View/Helper/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/src/protobuf b/community_server/src/protobuf deleted file mode 160000 index 77dee5685..000000000 --- a/community_server/src/protobuf +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 77dee5685ebba543ea1cd2321580ad56c92f5775 diff --git a/community_server/testJson.sh b/community_server/testJson.sh deleted file mode 100755 index b66cf8d18..000000000 --- a/community_server/testJson.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -#sudo -u www-data ./vendor/bin/phpunit --filter testIndex tests/TestCase/Controller/TransactionJsonRequestHandlerControllerTest - -sudo -u www-data ./vendor/bin/phpunit --testdox tests/TestCase/Controller/JsonRequestHandlerControllerTest - diff --git a/community_server/tests/Fixture/AddressTypesFixture.php b/community_server/tests/Fixture/AddressTypesFixture.php deleted file mode 100644 index 1e06a0ec9..000000000 --- a/community_server/tests/Fixture/AddressTypesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'name' => ['type' => 'string', 'length' => 45, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'Lorem ipsum dolor sit amet', - 'text' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/AdminErrorsFixture.php b/community_server/tests/Fixture/AdminErrorsFixture.php deleted file mode 100644 index 0fbc3a067..000000000 --- a/community_server/tests/Fixture/AdminErrorsFixture.php +++ /dev/null @@ -1,56 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'controller' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'action' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'state' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'msg' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'details' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_user_id' => 1, - 'controller' => 'Lorem ipsum dolor sit amet', - 'action' => 'Lorem ipsum dolor sit amet', - 'state' => 'Lorem ipsum dolor sit amet', - 'msg' => 'Lorem ipsum dolor sit amet', - 'details' => 'Lorem ipsum dolor sit amet', - 'created' => '2019-12-16 15:08:19' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/BaseTestFixture.php b/community_server/tests/Fixture/BaseTestFixture.php deleted file mode 100644 index 1f63aa55e..000000000 --- a/community_server/tests/Fixture/BaseTestFixture.php +++ /dev/null @@ -1,36 +0,0 @@ - '$1' - protected function sqlEntrysToRecords($sql_entries, $fields) { - $field_array_keys = array_keys($fields); - $records = []; - foreach($sql_entries as $sql_entry) { - $record = []; - foreach($sql_entry as $i => $value) { - $field = $field_array_keys[$i]; - if($fields[$field]['type'] == 'binary') { - if(is_string($value)) { - $record[$field] = hex2bin($value); - } - } else { - $record[$field] = $value; - } - } - $records[] = $record; - } - return $records; - } -} \ No newline at end of file diff --git a/community_server/tests/Fixture/CommunityProfilesFixture.php b/community_server/tests/Fixture/CommunityProfilesFixture.php deleted file mode 100644 index 0fa7ed764..000000000 --- a/community_server/tests/Fixture/CommunityProfilesFixture.php +++ /dev/null @@ -1,51 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'profile_img' => ['type' => 'binary', 'length' => 4294967295, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'profile_desc' => ['type' => 'string', 'length' => 2000, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_indexes' => [ - 'state_user_id' => ['type' => 'index', 'columns' => ['state_user_id'], 'length' => []], - ], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []] - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_user_id' => 1, - 'profile_img' => 'Lorem ipsum dolor sit amet', - 'profile_desc' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/ElopageBuysFixture.php b/community_server/tests/Fixture/ElopageBuysFixture.php deleted file mode 100644 index 20be0f4e3..000000000 --- a/community_server/tests/Fixture/ElopageBuysFixture.php +++ /dev/null @@ -1,64 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'elopage_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'affiliate_program_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'publisher_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'order_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'product_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'product_price' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'payer_email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'publisher_email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'payed' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'success_date' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'event' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'elopage_user_id' => 1, - 'affiliate_program_id' => 1, - 'publisher_id' => 1, - 'order_id' => 1, - 'product_id' => 1, - 'product_price' => 1, - 'payer_email' => 'Lorem ipsum dolor sit amet', - 'publisher_email' => 'Lorem ipsum dolor sit amet', - 'payed' => 1, - 'success_date' => '2020-02-13 09:49:46', - 'event' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/OperatorTypesFixture.php b/community_server/tests/Fixture/OperatorTypesFixture.php deleted file mode 100644 index dfc589034..000000000 --- a/community_server/tests/Fixture/OperatorTypesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'name' => ['type' => 'string', 'length' => 25, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'Lorem ipsum dolor sit a', - 'text' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/OperatorsFixture.php b/community_server/tests/Fixture/OperatorsFixture.php deleted file mode 100644 index 2cb852efc..000000000 --- a/community_server/tests/Fixture/OperatorsFixture.php +++ /dev/null @@ -1,49 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'username' => ['type' => 'string', 'length' => 128, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'operator_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'data_base64' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'username' => ['type' => 'unique', 'columns' => ['username'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'username' => 'Lorem ipsum dolor sit amet', - 'operator_type_id' => 1, - 'data_base64' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/RolesFixture.php b/community_server/tests/Fixture/RolesFixture.php deleted file mode 100644 index db2c7640f..000000000 --- a/community_server/tests/Fixture/RolesFixture.php +++ /dev/null @@ -1,45 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'title' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'roles_id_IDX' => ['type' => 'unique', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'title' => 'Lorem ipsum dolor sit amet', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/ServerUsersFixture.php b/community_server/tests/Fixture/ServerUsersFixture.php deleted file mode 100644 index 3aeedab12..000000000 --- a/community_server/tests/Fixture/ServerUsersFixture.php +++ /dev/null @@ -1,58 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'username' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'password' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'email' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'role' => ['type' => 'string', 'length' => 20, 'null' => false, 'default' => 'admin', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'activated' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - 'last_login' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'username' => 'Lorem ipsum dolor sit amet', - 'password' => 'Lorem ipsum dolor sit amet', - 'email' => 'Lorem ipsum dolor sit amet', - 'role' => 'Lorem ipsum dolor ', - 'activated' => 1, - 'last_login' => '2019-09-13 10:30:09', - 'created' => '2019-09-13 10:30:09', - 'modified' => '2019-09-13 10:30:09' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateBalancesFixture.php b/community_server/tests/Fixture/StateBalancesFixture.php deleted file mode 100644 index 015366c80..000000000 --- a/community_server/tests/Fixture/StateBalancesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'record_date' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [4, 4, '2021-05-27 17:47:50', '2021-05-27 17:47:50', 28808497], - [5, 1, '2021-05-27 17:47:51', '2021-05-27 17:47:50', 9823963] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateCreatedFixture.php b/community_server/tests/Fixture/StateCreatedFixture.php deleted file mode 100644 index 2f1abd155..000000000 --- a/community_server/tests/Fixture/StateCreatedFixture.php +++ /dev/null @@ -1,63 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'month' => ['type' => 'tinyinteger', 'length' => 4, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'year' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'short_ident_hash' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_indexes' => [ - 'short_ident_hash' => ['type' => 'index', 'columns' => ['short_ident_hash'], 'length' => []], - ], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'month' => 1, - 'year' => 1, - 'state_user_id' => 1, - 'created' => '2019-09-12 11:14:51', - 'short_ident_hash' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateErrorsFixture.php b/community_server/tests/Fixture/StateErrorsFixture.php deleted file mode 100644 index 6f0d95e26..000000000 --- a/community_server/tests/Fixture/StateErrorsFixture.php +++ /dev/null @@ -1,50 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'message_json' => ['type' => 'text', 'length' => null, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_user_id' => 1, - 'transaction_type_id' => 1, - 'created' => '2019-11-07 13:13:12', - 'message_json' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateGroupAddressesFixture.php b/community_server/tests/Fixture/StateGroupAddressesFixture.php deleted file mode 100644 index 2ae5581c8..000000000 --- a/community_server/tests/Fixture/StateGroupAddressesFixture.php +++ /dev/null @@ -1,49 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'address_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'public_key' => ['type' => 'unique', 'columns' => ['public_key'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'group_id' => 1, - 'public_key' => 'Lorem ipsum dolor sit amet', - 'address_type_id' => 1, - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateGroupRelationshipsFixture.php b/community_server/tests/Fixture/StateGroupRelationshipsFixture.php deleted file mode 100644 index e50d76f5d..000000000 --- a/community_server/tests/Fixture/StateGroupRelationshipsFixture.php +++ /dev/null @@ -1,48 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_group1_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_group2_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_relationship_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'state_group1_id' => 1, - 'state_group2_id' => 1, - 'state_relationship_id' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateGroupsFixture.php b/community_server/tests/Fixture/StateGroupsFixture.php deleted file mode 100644 index 57cde2350..000000000 --- a/community_server/tests/Fixture/StateGroupsFixture.php +++ /dev/null @@ -1,50 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'index_id' => ['type' => 'binary', 'length' => 64, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'name' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'root_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'user_count' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'index_id' => 'Lorem ipsum dolor sit amet', - 'name' => 'Lorem ipsum dolor sit amet', - 'root_public_key' => 'Lorem ipsum dolor sit amet', - 'user_count' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateRelationshipTypesFixture.php b/community_server/tests/Fixture/StateRelationshipTypesFixture.php deleted file mode 100644 index c461e0ce3..000000000 --- a/community_server/tests/Fixture/StateRelationshipTypesFixture.php +++ /dev/null @@ -1,46 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'name' => ['type' => 'string', 'length' => 25, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'Lorem ipsum dolor sit a', - 'text' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateUserTransactionsFixture.php b/community_server/tests/Fixture/StateUserTransactionsFixture.php deleted file mode 100644 index 605e10e5b..000000000 --- a/community_server/tests/Fixture/StateUserTransactionsFixture.php +++ /dev/null @@ -1,59 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'balance' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'balance_date' => ['type' => 'timestamp', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [1, 4, 1, 1, 0, '2021-04-09 00:00:00'], - [2, 1, 2, 1, 0, '2021-04-12 00:00:00'], - [5, 1, 3, 2, 0, '2021-04-12 00:00:00'], - [6, 4, 3, 2, 0, '2021-04-12 00:00:00'], - [7, 1, 4, 2, 0, '2021-04-14 00:00:00'], - [8, 4, 4, 2, 0, '2021-04-14 00:00:00'], - [23, 1, 5, 2, 0, '2021-04-14 09:01:07'], - [24, 4, 5, 2, 0, '2021-04-14 09:01:07'], - [25, 4, 7, 2, 0, '2021-04-14 09:02:28'], - [26, 1, 7, 2, 0, '2021-04-14 09:02:28'], - [27, 4, 8, 2, 0, '2021-04-14 09:28:46'], - [28, 1, 8, 2, 0, '2021-04-14 09:28:46'], - [29, 4, 9, 2, 0, '2021-04-14 09:31:28'], - [30, 1, 9, 2, 0, '2021-04-14 09:31:28'] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/StateUsersFixture.php b/community_server/tests/Fixture/StateUsersFixture.php deleted file mode 100644 index a9b033bf7..000000000 --- a/community_server/tests/Fixture/StateUsersFixture.php +++ /dev/null @@ -1,54 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'index_id' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - 'group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'email' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'first_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'last_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'username' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'disabled' => ['type' => 'tinyinteger', 'length' => 4, 'unsigned' => false, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'public_key' => ['type' => 'unique', 'columns' => ['public_key'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - - - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql_entrys = [ - [1, 0, 0, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 'test1.gmail.de', 'Max', 'Mustermann', NULL, 0], - [3, 0, 0, '131c7f68dd94b2be4c913400ff7ff4cdc03ac2bda99c2d29edcacb3b065c67e6', 'test2.gmail.com', 'Ines', 'Mustermann', NULL, 0], - [4, 0, 0, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 'test3.yahoo.com', 'Samuel', 'Schmied', NULL, 0] - ]; - $this->records = $this->sqlEntrysToRecords($sql_entrys, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionCreationsFixture.php b/community_server/tests/Fixture/TransactionCreationsFixture.php deleted file mode 100644 index 4221e8729..000000000 --- a/community_server/tests/Fixture/TransactionCreationsFixture.php +++ /dev/null @@ -1,44 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'target_date' => ['type' => 'timestamp', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [2, 1, 4, 10000000, '2021-01-01 00:00:00'], - [3, 2, 1, 10000000, '2021-01-01 00:00:00'] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php b/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php deleted file mode 100644 index 7b659386c..000000000 --- a/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php +++ /dev/null @@ -1,54 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'address_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'address_type_id' => 1, - 'public_key' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php b/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php deleted file mode 100644 index edb745441..000000000 --- a/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php +++ /dev/null @@ -1,48 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'group_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'allow' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'group_id' => 1, - 'allow' => 1 - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionGroupCreatesFixture.php b/community_server/tests/Fixture/TransactionGroupCreatesFixture.php deleted file mode 100644 index 73db1c751..000000000 --- a/community_server/tests/Fixture/TransactionGroupCreatesFixture.php +++ /dev/null @@ -1,50 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'group_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'state_group_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'name' => ['type' => 'string', 'length' => 64, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'transaction_id' => 1, - 'group_public_key' => 'Lorem ipsum dolor sit amet', - 'state_group_id' => 1, - 'name' => 'Lorem ipsum dolor sit amet' - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionSendCoinsFixture.php b/community_server/tests/Fixture/TransactionSendCoinsFixture.php deleted file mode 100644 index c186ccf8e..000000000 --- a/community_server/tests/Fixture/TransactionSendCoinsFixture.php +++ /dev/null @@ -1,54 +0,0 @@ - ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'sender_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'receiver_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'receiver_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'sender_final_balance' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [2, 3, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 1000000, 6254699], - [3, 4, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 100000, 7027197], - [11, 5, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 100000, 6922113], - [12, 7, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 9212951], - [13, 8, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 9112627], - [14, 9, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 8912594] - ]; - - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionSignaturesFixture.php b/community_server/tests/Fixture/TransactionSignaturesFixture.php deleted file mode 100644 index 9a5bbecee..000000000 --- a/community_server/tests/Fixture/TransactionSignaturesFixture.php +++ /dev/null @@ -1,51 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'signature' => ['type' => 'binary', 'length' => 64, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - 'pubkey' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [1, 1, '1c5357f9438f700a5378abadd0dbd74d90e335c6b9691bb9e126520813f3218573b19226382efb89aa8444a9ca98c2e8933463335baac37baf2f4eecd990600a', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [2, 2, '5215376ae7fb989993e3466961636519d4ade77b3bde066149ade028ad54a1a88ca8a206fcf09f52839ae0ed37b99df08ec9af12f3f37197979a206489e3ff0f', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'], - [3, 3, 'c70f124feaaea02194d22a5f597963ed3e430343122a0952877854766fe37a709f92b39510de2aae494ef11abe743cd59f08f971b1e0e36f4c333990453d8b0d', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [4, 4, 'a65b39e51ab6191c51d5629bbcefd30f85f801efbb14e1c635c519e97abe217a248820fa1fc6aef56227c9d888c1919bc92471d5d7ae3522c9c50fba9f0d8402', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [5, 5, 'a65b39e51ab6191c51d5629bbcefd30f85f801efbb14e1c635c519e97abe217a248820fa1fc6aef56227c9d888c1919bc92471d5d7ae3522c9c50fba9f0d8402', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'], - [6, 7, 'c233726674bff9bfb8ccb98bf358c6bc701825d971ece915d3c3a3de98886d1d13ee2f773cd9fc4ccbe543ac17be0d780ebead23a0dbf4ec814f7bae2efb9c0e', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'], - [7, 8, '83ab780535883ec53ee76d0f68db0e1596418c9e100c806a4d4655d4dedf589d54a6319a2795dabab301e212b52f0dafb2725b7583447f19e47cb417d188a107', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'], - [8, 9, '83ab780535883ec53ee76d0f68db0e1596418c9e100c806a4d4655d4dedf589d54a6319a2795dabab301e212b52f0dafb2725b7583447f19e47cb417d188a107', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionTypesFixture.php b/community_server/tests/Fixture/TransactionTypesFixture.php deleted file mode 100644 index 48e00e0ec..000000000 --- a/community_server/tests/Fixture/TransactionTypesFixture.php +++ /dev/null @@ -1,51 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'name' => ['type' => 'string', 'length' => 24, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'text' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_bin' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'name' => 'creation', - 'text' => 'Aktives oder Bedingsungsloses Grundeinkommen' - ], - [ - 'id' => 2, - 'name' => 'transfer', - 'text' => 'Einfache Überweisung' - ] - ]; - parent::init(); - } -} diff --git a/community_server/tests/Fixture/TransactionsFixture.php b/community_server/tests/Fixture/TransactionsFixture.php deleted file mode 100644 index 8c38f0657..000000000 --- a/community_server/tests/Fixture/TransactionsFixture.php +++ /dev/null @@ -1,55 +0,0 @@ - ['type' => 'biginteger', 'length' => 20, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'state_group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'transaction_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'tx_hash' => ['type' => 'binary', 'length' => 48, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'memo' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null], - 'received' => ['type' => 'timestamp', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null], - 'blockchain_type_id' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => true, 'null' => false, 'default' => '1', 'comment' => '', 'precision' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $sql = [ - [1, NULL, 1, '15f242a7bb92a7db82678e0baf5ec1734c038ac0dc7b19e6d1ebbcf92a6cf3ad00000000000000000000000000000000', 'AGE Januar 2021', '2021-04-09 00:00:00', 1], - [2, NULL, 1, 'f932eca7686802d1697773fea713a3c6a3e3dace8b5aa552dd8503d50ce349f500000000000000000000000000000000', 'AGE Januar 2021', '2021-04-12 00:00:00', 1], - [3, NULL, 2, '4e2235f208edaf5cbb285955732022a625cf1e100eb629c56896d2fbfb8b34e800000000000000000000000000000000', 'test', '2021-04-12 00:00:00', 1], - [4, NULL, 2, 'fc6e69696beb7c56ad7c511fc3999f954411427bec810184b70c092911deae1900000000000000000000000000000000', 'test time', '2021-04-14 00:00:00', 1], - [5, NULL, 2, 'a7149ebc0d6cd8c061906dafe05e13689b51642a41100d0ec7bb6cd2dcafdc1800000000000000000000000000000000', 'test time', '2021-04-14 09:01:07', 1], - [6, NULL, 9, '', '', '2021-04-14 09:02:00', 1], - [7, NULL, 2, '2e3c3ab3e42c06f2ecb12f61c970712467d8ad9ddfa16fa58dd76492e5924b7d00000000000000000000000000000000', 'test time 3', '2021-04-14 09:02:28', 1], - [8, NULL, 2, 'c2c6354d77ff371daeee25fce9c947748b53d3d6b8398a92bd681923cfd2057100000000000000000000000000000000', 'test login crash', '2021-04-14 09:28:46', 1], - [9, NULL, 2, '5a8cbf1aaac06b00b2951ff39983cb2ca9a1e6710d72c8e5067278dc679a823100000000000000000000000000000000', 'test login crash', '2021-04-14 09:31:28', 1] - ]; - $this->records = $this->sqlEntrysToRecords($sql, $this->fields); - parent::init(); - } -} diff --git a/community_server/tests/Fixture/UsersFixture.php b/community_server/tests/Fixture/UsersFixture.php deleted file mode 100644 index fc1a9e620..000000000 --- a/community_server/tests/Fixture/UsersFixture.php +++ /dev/null @@ -1,61 +0,0 @@ - ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], - 'email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'first_name' => ['type' => 'string', 'length' => 150, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'last_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => '', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - 'password' => ['type' => 'biginteger', 'length' => 25, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], - 'pubkey' => ['type' => 'binary', 'length' => 32, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'privkey' => ['type' => 'binary', 'length' => 80, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], - 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null], - 'email_checked' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null], - 'language' => ['type' => 'string', 'length' => 4, 'null' => false, 'default' => 'de', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'email' => ['type' => 'unique', 'columns' => ['email'], 'length' => []], - ], - '_options' => [ - 'engine' => 'InnoDB', - 'collation' => 'utf8_general_ci' - ], - ]; - // @codingStandardsIgnoreEnd - /** - * Init method - * - * @return void - */ - public function init() - { - $this->records = [ - [ - 'id' => 1, - 'email' => 'Lorem ipsum dolor sit amet', - 'first_name' => 'Lorem ipsum dolor sit amet', - 'last_name' => 'Lorem ipsum dolor sit amet', - 'password' => 1, - 'pubkey' => 'Lorem ipsum dolor sit amet', - 'privkey' => 'Lorem ipsum dolor sit amet', - 'created' => '2020-02-13 10:54:19', - 'email_checked' => 1, - 'language' => 'Lo', - ], - ]; - parent::init(); - } -} diff --git a/community_server/tests/TestCase/ApplicationTest.php b/community_server/tests/TestCase/ApplicationTest.php deleted file mode 100644 index 1d183729d..000000000 --- a/community_server/tests/TestCase/ApplicationTest.php +++ /dev/null @@ -1,83 +0,0 @@ -bootstrap(); - $plugins = $app->getPlugins(); - - $this->assertCount(2, $plugins); - $this->assertSame('Bake', $plugins->get('Bake')->getName()); - $this->assertSame('DebugKit', $plugins->get('DebugKit')->getName()); - } - - /** - * testBootstrapPluginWitoutHalt - * - * @return void - */ - public function testBootstrapPluginWithoutHalt() - { - $this->expectException(InvalidArgumentException::class); - - $app = $this->getMockBuilder(Application::class) - ->setConstructorArgs([dirname(dirname(__DIR__)) . '/config']) - ->setMethods(['addPlugin']) - ->getMock(); - - $app->method('addPlugin') - ->will($this->throwException(new InvalidArgumentException('test exception.'))); - - $app->bootstrap(); - } - - /** - * testMiddleware - * - * @return void - */ - public function testMiddleware() - { - $app = new Application(dirname(dirname(__DIR__)) . '/config'); - $middleware = new MiddlewareQueue(); - - $middleware = $app->middleware($middleware); - - $this->assertInstanceOf(ErrorHandlerMiddleware::class, $middleware->get(0)); - $this->assertInstanceOf(AssetMiddleware::class, $middleware->get(1)); - $this->assertInstanceOf(RoutingMiddleware::class, $middleware->get(2)); - } -} diff --git a/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php b/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php deleted file mode 100644 index 835fc8d08..000000000 --- a/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php +++ /dev/null @@ -1,77 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php b/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php deleted file mode 100644 index a9044b4ae..000000000 --- a/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php +++ /dev/null @@ -1,76 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old deleted file mode 100644 index 321ed5ac1..000000000 --- a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old +++ /dev/null @@ -1,345 +0,0 @@ -session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 1, - 'email_checked' => 1, - 'public_hex' => 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f' - ] - ]); - - $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id); - $this->assertEquals('success', $response->state); - $this->assertEquals(9099652, $response->balance); - $this->assertLessThan(9099652, $response->decay); - - } - - public function testGetBalance2() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 3, - 'email_checked' => 1, - 'public_hex' => '131c7f68dd94b2be4c913400ff7ff4cdc03ac2bda99c2d29edcacb3b065c67e6' - ] - ]); - - $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id); - $this->assertEquals('success', $response->state); - $this->assertEquals(0, $response->balance); - } - public function testGetBalance3() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 4, - 'email_checked' => 1, - 'public_hex' => 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2' - ] - ]); - - $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id); - $this->assertEquals('success', $response->state); - $this->assertEquals(10899568, $response->balance); - $this->assertLessThan(10899568, $response->decay); - } - - public function testGetBalanceInvalidSession() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'email_checked' => 1, - 'public_hex' => '8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d' - ] - ]); - - $this->getAndParse('/api/get-balance/' . 1211, - ['state' => 'not found', 'msg' => 'invalid session', - 'details' => ['msg' => 'session not found', 'state' => 'not found'] - ] - ); - } - - public function testGetBalanceInvalidSessionId() - { - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transaction' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'email_checked' => 1, - 'public_hex' => '8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d' - ] - ]); - - $this->getAndParse('/api/get-balance/' , - ['state' => 'not found', 'msg' => 'invalid session', - 'details' => ['msg' => 'session not found', 'state' => 'not found'] - ] - ); - } - - /** - * Test ajaxListTransactions method - * - * @return void - */ - public function testListTransactions() - { - //ajaxListTransactions - $session_id = rand(); - $this->session([ - 'session_id' => $session_id, - 'Transactions' => ['pending' => 0, 'executing' => 0], - 'StateUser' => [ - 'id' => 1, - 'first_name' => 'Dario', - 'last_name' => 'Frodo', - 'email_checked' => 1, - 'email' => 'fördertest@gradido.org', - 'public_hex' => '94ae135b93cd9f33752b4e55c41903a3faa13a75bb90bfd411ea1d4a1a5e711f' - ] - ]); - //echo "balance: $balance"; - $expectedResult = '{ - "state": "success", - "transactions": [ - { - "transaction_id": 2, - "date": "2021-04-12T00:00:00+00:00", - "memo": "AGE Januar 2021", - "name": "Gradido Akademie", - "type": "creation", - "target_date": "2021-01-01T00:00:00+00:00", - "balance": 10000000 - }, - { - "transaction_id": 3, - "date": "2021-04-12T00:00:00+00:00", - "memo": "test", - "balance": 1000000, - "type": "send", - "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 4, - "date": "2021-04-14T00:00:00+00:00", - "memo": "test time", - "balance": 100000, - "type": "send", - "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 5, - "date": "2021-04-14T09:01:07+00:00", - "memo": "test time", - "balance": 100000, - "type": "send", - "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 7, - "date": "2021-04-14T09:02:28+00:00", - "memo": "test time 3", - "decay": { - "balance": 6, - "decay_duration": "0 days, 00 hours, 00 minutes, 28 seconds", - "decay_start": 1618390920, - "decay_end": 1618390948, - "decay_start_block": 1618390920 - }, - "balance": 100000, - "type": "receive", - "pubkey": "0000000000000000000000000000000000000000000000000000000000000000", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 8, - "date": "2021-04-14T09:28:46+00:00", - "memo": "test login crash", - "decay": { - "balance": 309, - "decay_duration": "0 days, 00 hours, 26 minutes, 18 seconds", - "decay_start": 1618390948, - "decay_end": 1618392526 - }, - "balance": 100000, - "type": "receive", - "pubkey": "0000000000000000000000000000000000000000000000000000000000000000", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "transaction_id": 9, - "date": "2021-04-14T09:31:28+00:00", - "memo": "test login crash", - "decay": { - "balance": 33, - "decay_duration": "0 days, 00 hours, 02 minutes, 42 seconds", - "decay_start": 1618392526, - "decay_end": 1618392688 - }, - "balance": 100000, - "type": "receive", - "pubkey": "0000000000000000000000000000000000000000000000000000000000000000", - "name": "Samuel Schmied", - "email": "test3.yahoo.com" - }, - { - "type": "decay", - "balance": 1345726, - "decay_duration": "on 14.04.21", - "decay_start": 1618392688, - "decay_end": 1625673853, - "memo": "" - } - ], - "transactionExecutingCount": 0, - "count": 7, - "gdtSum": 180000, - "timeUsed": 0.44154810905456545, - "decay_date": "2021-07-07T16:04:13+00:00", - "balance": 9099652, - "decay": 7753926 -}'; - $this->getAndParse('/api/list-transactions/', json_decode($expectedResult, true)); - } - - - private function getAndParse($path, $expected) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was in 2xx - 3xx - $this->assertResponseSuccess(); - $json = (object)$this->viewVariable('body'); - - if(!$json) { - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - } else { - $responseBodyString = json_encode($json); - } - - if(is_array($expected)) { - $dynamic_fields = ['timeUsed', 'decay_date', 'decay', 'gdtSum']; - // copy timeUsed because this value will be variy always - foreach($dynamic_fields as $field) { - if(isset($expected[$field]) && isset($json->$field)) { - $expected[$field] = $json->$field; - } - } - // decay balance variy always - if(isset($expected['transactions'])) { - $dynamic_transaction_fields = ['decay_duration', 'balance', 'decay_end']; - foreach($expected['transactions'] as $i => $transaction) { - if(isset($transaction['type']) && $transaction['type'] == 'decay') { - foreach($dynamic_transaction_fields as $field) { - if(isset($transaction[$field])) { - $expected['transactions'][$i][$field] = $json->transactions[$i][$field]; - } - } - } - } - } - $expected = json_encode($expected); - } - - $this->assertEquals($expected, $responseBodyString); - } - private function getAndParseWithoutCompare($path) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was in 2xx - 3xx - $this->assertResponseSuccess(); - $view_body = $this->viewVariable('body'); - if($view_body) { - return (object)$view_body; - } - // Check that the response was a 200 - $this->assertResponseOk(); - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString, true); - $this->assertNotFalse($json); - - return $json; - } -} diff --git a/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php b/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php deleted file mode 100644 index 35f439dd7..000000000 --- a/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php +++ /dev/null @@ -1,75 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php b/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php deleted file mode 100644 index be6167155..000000000 --- a/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php +++ /dev/null @@ -1,95 +0,0 @@ -GradidoNumberComponent = new GradidoNumberComponent($registry); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->GradidoNumberComponent); - - parent::tearDown(); - } - - /** - * Test parseInputNumberToCentNumber method - * - * @return void - */ - /* public function testParseInputNumberToCentNumber() - { - $this->markTestIncomplete('Not implemented yet.'); - }*/ - - public function test100() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(100); - $this->assertEquals(1000000, $result); - } - - public function test1000() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(1000); - $this->assertEquals(10000000, $result); - } - - public function test100Comma() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('100,12'); - $this->assertEquals(1001200, $result); - } - - public function test100Point() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('100.12'); - $this->assertEquals(1001200, $result); - } - - public function test100Decimal() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(100.12); - $this->assertEquals(1001200, $result); - } - - public function test1000Point() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('1000.12'); - $this->assertEquals(10001200, $result); - } - - public function test1000Comma() - { - $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('1000,12'); - $this->assertEquals(10001200, $result); - } -} diff --git a/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php b/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php deleted file mode 100644 index c1ba84ee3..000000000 --- a/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php +++ /dev/null @@ -1,72 +0,0 @@ -JsonRequestClientComponent = new JsonRequestClientComponent($registry); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->JsonRequestClientComponent); - - parent::tearDown(); - } - - /** - * Test sendTransaction method - * - * @return void - */ - public function testSendTransaction() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test is_base64 method - * - * @return void - */ - public function testIsBase64Valid() - { - $result = $this->JsonRequestClientComponent->is_base64('CgpIYWxsbyBXZWx0EgYIr6fe7wVKLwonCiDWDyYU4+zldTQdQMIzGpsL20W+vV44JuNVA5hwczIELRDgg5sBELmhkoIE'); - - $this->assertEquals($result, true); - } - - public function testIsBase64Invalid() - { - $result = $this->JsonRequestClientComponent->is_base64('CgpIYWxsbyBXZWx0EgYIr6fe7wVKLwonCiDWDyYU4-zldTQdQMIzGpsL20W+vV44JuNVA5hwczIELRDgg5sBELmhkoIE'); - - $this->assertEquals($result, false); - } -} diff --git a/community_server/tests/TestCase/Controller/DashboardControllerTest.php b/community_server/tests/TestCase/Controller/DashboardControllerTest.php deleted file mode 100644 index cddf0b7ef..000000000 --- a/community_server/tests/TestCase/Controller/DashboardControllerTest.php +++ /dev/null @@ -1,45 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test index method - * - * @return void - */ - public function testIndex() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php b/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php deleted file mode 100644 index f990b3e57..000000000 --- a/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php +++ /dev/null @@ -1,176 +0,0 @@ - 'CmYKZAog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfISQDnatUMvitiiP0-sY93JStYPhPKKPU4Vosv_EGrh77BVs48xhPgPj2QHWC3oyuuMh6nN8YNjBQZx20rKvdQ4uwMSRwoMQUdFIE1haSAyMDIxEgYI_c3ChQY6LwolCiD39KSaSsEDefi53ctzHE2exJXm7dFgdfUmcs0l4xefDxDQDxoGCPqbtIQG', - 'validCreation900' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQCaZHmvmvJOt336E3qst3rn1pptdAR5ZPzePaUT10x0_Yky8FnEiQtMGNy1yT94QErzwQudJZjJwDY2uyK4cTgkSOxIGCKb1vYUGOjEKJwog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfIQgNHKCBoGCIDMuf8F', - 'validCreation1200' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQF8jptIrosEyVmCf3WEIGVOK0NR8YCcO0j-s8v2yUyR5BKus0ciT6B7IA5LDtn7eQX6zHjg1v5WlsTiZuOpuNgwSRAoHVG8gbXVjaBIGCL3Jv4UGOjEKJwog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfIQgOy4CxoGCOG5toQG', - 'notBase64' => 'CgpIYWxsbyBXZW-0EgYIyfSG7gV_LwonCiCboKikqwjZfes9xuqgthFH3', - 'validTransfer' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQA0ZVQ9T1qBabzmgDO1NAWNy2J6mlv0YjMP99CiV7bSR0zemt5XoM-kTviR1aTqKggzpSYSyTN5T6gIx2xa-hgkSYwoLTXkgQmlydGhkYXkSBgie0L-FBjJMCkoKJgog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8QgIl6EiDjNp3jYjzoRG0EJMQBPnodcaJnGuPXvx55jr8GZdFF8g', - 'errornusTransfer' => 'ClxGcm9oZXMgTmV1ZXMgSmFociB1bmQgREFOS0UsIGRhc3MgZHUgZGljaCBzbyBlaW5zZXR6dCBmw7xyIEdyYWRpZG8hIEhlcnpsaWNoZSBHcsO8w59lIFRlcmVzYRIGCPjjgvEFQlAKJgogUQwFYeVlGlfWDrkXNN7rHwejoCDJKt+YkYJfbJVyj3EQwIQ9EiYKIPXIRnUhVJ/zCs5+y/VaTBjTIoYizJNwS+JC//xsbQrHEMCEPQ==' - ]; - - /*public function setUp() { - parent::setUp(); - } -*/ - public function testWrongMethod() - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - $this->get('/JsonRequestHandler'); - $this->assertResponseOk(); - - $expected = json_encode(['state' => 'error', 'msg' => 'unknown method for get', 'details' => null]); - $this->assertEquals($expected, (string)$this->_response->getBody()); - } - - public function testInvalidJson() - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - $this->post('/JsonRequestHandler', '{This isn\'t valid json}'); - $this->assertResponseOk(); - - $expected = json_encode(['state' => 'error', 'msg' => 'parameter error']); - $this->assertEquals($expected, (string)$this->_response->getBody()); - } - - public function testNotSetTransaction() - { - $this->postAndParse( - ['method' => 'putTransaction'], - ['state' => 'error', 'msg' => 'parameter error'] - ); - } - public function testNotSetMethod() - { - $this->postAndParse( - ['transaction' => $this->transactions['validCreation']], - ['state' => 'error', 'msg' => 'parameter error'] - ); - } - - public function testUnknownMethod() - { - //$this->post('/TransactionJsonRequestHandler', ['method' => 'putTransaction', 'transaction' => 'CgpIYWxsbyBXZWx0EgYIyfSG7gVKLwonCiCboKikqwjZfes9xuqgthFH3/cHHaWchkUhWiGhQjB23xCg2pMBELWJ7ZYK']); - $this->postAndParse( - ['method' => 'foobar', 'transaction' => $this->transactions['validCreation']], - ['state' => 'error', 'msg' => 'unknown method for post', 'details' => 'foobar'] - ); - - } - - public function testInvalidEncodedTransaction() { - //"msg":"error parsing transaction","details":[{"Transaction":"base64 decode error"}] - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['notBase64']], - ['state' => 'error', 'msg' => 'error parsing transaction', 'details' => [ - ['Transaction' => 'invalid base64 string'], - ['base64' => 'CgpIYWxsbyBXZW-0EgYIyfSG7gV_LwonCiCboKikqwjZfes9xuqgthFH3'] - ]] - ); - } - - public function testInvalidTransaction() { - - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => base64_encode('Hallo Miau Welt')], - ['state' => 'error', 'msg' => 'error parsing transaction', 'details' => [ - ['Transaction' => 'Error occurred during parsing: Unexpected wire type.'] - ]] - ); - } - - public function testToLargeCreationSum() - { - - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation900']], - '{"state":"error","msg":"error validate transaction","details":[{"TransactionCreation::validate":"Creation more than 1.000 GDD per Month for in target_date not allowed"}]}' - ); - } - - public function testToLargeCreation() - { - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation1200']], - '{"state":"error","msg":"error validate transaction","details":[{"TransactionCreation::validate":"Creation more than 1.000 GDD per Month for in target_date not allowed"}]}' - ); - } - - public function testValidTransfer() - { - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validTransfer']], - ['state' => 'success'] - ); - } - - public function testValidCreation() - { - $this->postAndParse( - ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation']], - ['state' => 'success'] - ); - } - - private function postAndParse($params, $expected) - { - $this->enableCsrfToken(); - //$this->enableSecurityToken(); - - //$token = 'my-csrf-token'; - //$this->cookie('csrfToken', $token); - - $this->configRequest([ - 'headers' => ['Accept' => 'application/json']//, 'X-CSRF-Token' => $token] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->post('/JsonRequestHandler', json_encode($params)); - - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - - if(is_array($expected)) { - $expected = json_encode($expected); - } - $this->assertEquals($expected, $responseBodyString); - } -} diff --git a/community_server/tests/TestCase/Controller/PagesControllerTest.php b/community_server/tests/TestCase/Controller/PagesControllerTest.php deleted file mode 100644 index a8fd65233..000000000 --- a/community_server/tests/TestCase/Controller/PagesControllerTest.php +++ /dev/null @@ -1,101 +0,0 @@ -get('/'); - $locations = $this->_response->getHeader('Location'); - $this->assertRegExp('%.*/account/$%', $locations[0]); - - $this->get('/'); - $locations = $this->_response->getHeader('Location'); - $this->assertRegExp('%.*/account/$%', $locations[0]); - } - - /** - * testDisplay method - * - * @return void - */ - public function testDisplay() - { - $this->get('/pages/home'); - $this->assertResponseOk(); - $this->assertResponseContains('CakePHP'); - $this->assertResponseContains(''); - } - - /** - * Test that missing template renders 404 page in production - * - * @return void - */ - public function testMissingTemplate() - { - Configure::write('debug', false); - $this->get('/pages/not_existing'); - - $this->assertResponseError(); - $this->assertResponseContains('Not Found'); - } - - /** - * Test that missing template in debug mode renders missing_template error page - * - * @return void - */ - public function testMissingTemplateInDebug() - { - Configure::write('debug', true); - $this->get('/pages/not_existing'); - - $this->assertResponseFailure(); - $this->assertResponseContains('Template file \u0022Pages\/not_existing.ctp\u0022 is missing.'); - $this->assertResponseContains('not_existing.ctp'); - } - - /** - * Test directory traversal protection - * - * @return void - */ - public function testDirectoryTraversalProtection() - { - $this->get('/pages/../Layout/ajax'); - $this->assertResponseCode(403); - $this->assertResponseContains('Forbidden'); - } -} diff --git a/community_server/tests/TestCase/Controller/ProfilesControllerTest.php b/community_server/tests/TestCase/Controller/ProfilesControllerTest.php deleted file mode 100644 index d87558e55..000000000 --- a/community_server/tests/TestCase/Controller/ProfilesControllerTest.php +++ /dev/null @@ -1,76 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/RolesControllerTest.php b/community_server/tests/TestCase/Controller/RolesControllerTest.php deleted file mode 100644 index 12b2868a2..000000000 --- a/community_server/tests/TestCase/Controller/RolesControllerTest.php +++ /dev/null @@ -1,75 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php b/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php deleted file mode 100644 index 9ef8d28e9..000000000 --- a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php +++ /dev/null @@ -1,179 +0,0 @@ -StateBalances = TableRegistry::getTableLocator()->get('StateBalances'); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test index method - * - * @return void - */ - public function testIndex() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test overview method - * - * @return void - */ - public function testOverview() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - - - /** - * Test overviewGdt method - * - * @return void - */ - public function testOverviewGdt() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test sortTransactions method - * - * @return void - */ - public function testSortTransactions() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - - private function getAndParse($path, $expected) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - - if(is_array($expected)) { - // copy timeUsed because this value will be variy always - if(isset($expected['timeUsed']) && isset($json->timeUsed)) { - $expected['timeUsed'] = $json->timeUsed; - } - $expected = json_encode($expected); - } - - $this->assertEquals($expected, $responseBodyString); - } - private function getAndParseWithoutCompare($path) - { - $this->configRequest([ - 'headers' => ['Accept' => 'application/json'] - ]); - - $this->disableErrorHandlerMiddleware(); - $this->get($path); - - // Check that the response was a 200 - $this->assertResponseOk(); - - $responseBodyString = (string)$this->_response->getBody(); - $json = json_decode($responseBodyString); - $this->assertNotFalse($json); - - return $json; - } -} diff --git a/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php b/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php deleted file mode 100644 index 452af54fc..000000000 --- a/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php +++ /dev/null @@ -1,77 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php b/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php deleted file mode 100644 index 0c9e0a513..000000000 --- a/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php +++ /dev/null @@ -1,78 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php b/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php deleted file mode 100644 index 74c0e4b1e..000000000 --- a/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php +++ /dev/null @@ -1,97 +0,0 @@ -markTestIncomplete('Not implemented yet.'); - } - - /** - * Test index method - * - * @return void - */ - public function testIndex() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test view method - * - * @return void - */ - public function testView() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test create method - * - * @return void - */ - public function testCreate() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test add method - * - * @return void - */ - public function testAdd() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test edit method - * - * @return void - */ - public function testEdit() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test delete method - * - * @return void - */ - public function testDelete() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Behavior/empty b/community_server/tests/TestCase/Model/Behavior/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php b/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php deleted file mode 100644 index 8f145215c..000000000 --- a/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php +++ /dev/null @@ -1,74 +0,0 @@ -exists('AddressTypes') ? [] : ['className' => AddressTypesTable::class]; - $this->AddressTypes = TableRegistry::getTableLocator()->get('AddressTypes', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->AddressTypes); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php b/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php deleted file mode 100644 index 09d7a35fb..000000000 --- a/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php +++ /dev/null @@ -1,83 +0,0 @@ -exists('AdminErrors') ? [] : ['className' => AdminErrorsTable::class]; - $this->AdminErrors = TableRegistry::getTableLocator()->get('AdminErrors', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->AdminErrors); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php b/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php deleted file mode 100644 index 0d7e5fba2..000000000 --- a/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php +++ /dev/null @@ -1,72 +0,0 @@ -exists('CommunityProfiles') ? [] : ['className' => CommunityProfilesTable::class]; - $this->CommunityProfiles = TableRegistry::getTableLocator()->get('CommunityProfiles', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->CommunityProfiles); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/RolesTableTest.php b/community_server/tests/TestCase/Model/Table/RolesTableTest.php deleted file mode 100644 index b40a0ca9b..000000000 --- a/community_server/tests/TestCase/Model/Table/RolesTableTest.php +++ /dev/null @@ -1,82 +0,0 @@ -exists('Roles') ? [] : ['className' => RolesTable::class]; - $this->Roles = TableRegistry::getTableLocator()->get('Roles', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->Roles); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php b/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php deleted file mode 100644 index 68049de34..000000000 --- a/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php +++ /dev/null @@ -1,124 +0,0 @@ -exists('StateBalances') ? [] : ['className' => StateBalancesTable::class]; - $this->StateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateBalancesTable); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test sortTransactions method - * - * @return void - */ - public function testSortTransactions() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test updateLastStateBalanceOfMonth method - * - * @return void - */ - public function testUpdateLastStateBalanceOfMonth() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test chooseForMonthAndUser method - * - * @return void - */ - public function testChooseForMonthAndUser() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test updateBalanceWithTransaction method - * - * @return void - */ - public function testUpdateBalanceWithTransaction() - { - $this->markTestIncomplete('Not implemented yet.'); - } - -} diff --git a/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php b/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php deleted file mode 100644 index 21cbe6128..000000000 --- a/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php +++ /dev/null @@ -1,84 +0,0 @@ -exists('StateErrors') ? [] : ['className' => StateErrorsTable::class]; - $this->StateErrors = TableRegistry::getTableLocator()->get('StateErrors', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateErrors); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php b/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php deleted file mode 100644 index 173ad8e12..000000000 --- a/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php +++ /dev/null @@ -1,85 +0,0 @@ -exists('StateUserTransactions') ? [] : ['className' => StateUserTransactionsTable::class]; - $this->StateUserTransactions = TableRegistry::getTableLocator()->get('StateUserTransactions', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateUserTransactions); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php b/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php deleted file mode 100644 index 49deb1166..000000000 --- a/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php +++ /dev/null @@ -1,97 +0,0 @@ -exists('StateUsers') ? [] : ['className' => StateUsersTable::class]; - $this->StateUsersTable = TableRegistry::getTableLocator()->get('StateUsers', $config); - } - - /** - * tearDown method - * - * @return void - */ - public function tearDown() - { - unset($this->StateUsersTable); - - parent::tearDown(); - } - - /** - * Test initialize method - * - * @return void - */ - public function testInitialize() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test validationDefault method - * - * @return void - */ - public function testValidationDefault() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test buildRules method - * - * @return void - */ - public function testBuildRules() - { - $this->markTestIncomplete('Not implemented yet.'); - } - - /** - * Test getReceiverProposal method - * - * @return void - */ - public function testGetReceiverProposal() - { - $this->markTestIncomplete('Not implemented yet.'); - } -} diff --git a/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php b/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php deleted file mode 100644 index e53549a42..000000000 --- a/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php +++ /dev/null @@ -1,41 +0,0 @@ -assertEquals(true, true); - } - - - - -} diff --git a/community_server/tests/TestCase/View/Helper/empty b/community_server/tests/TestCase/View/Helper/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/community_server/tests/bootstrap.php b/community_server/tests/bootstrap.php deleted file mode 100644 index 0ca191e4a..000000000 --- a/community_server/tests/bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ - - RewriteEngine On - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^ index.php [L] - diff --git a/community_server/webroot/css/fonts_local.css b/community_server/webroot/css/fonts_local.css deleted file mode 100644 index 99dac0484..000000000 --- a/community_server/webroot/css/fonts_local.css +++ /dev/null @@ -1,79 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 21.01.2021, 12:32:20 - Author : einhornimmond -*/ - -/* open-sans-300 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 300; - src: url('../fonts/open-sans-v18-latin-300.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-300.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-300.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-regular - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - src: url('../fonts/open-sans-v18-latin-regular.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-regular.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-regular.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-600 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 600; - src: url('../fonts/open-sans-v18-latin-600.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-600.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-600.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-600.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-600.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-700 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 700; - src: url('../fonts/open-sans-v18-latin-700.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-700.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-700.svg#OpenSans') format('svg'); /* Legacy iOS */ -} - -/* open-sans-800 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 800; - src: url('../fonts/open-sans-v18-latin-800.eot'); /* IE9 Compat Modes */ - src: local(''), - url('../fonts/open-sans-v18-latin-800.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/open-sans-v18-latin-800.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/open-sans-v18-latin-800.woff') format('woff'), /* Modern Browsers */ - url('../fonts/open-sans-v18-latin-800.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/open-sans-v18-latin-800.svg#OpenSans') format('svg'); /* Legacy iOS */ -} diff --git a/community_server/webroot/css/grd_styles.css b/community_server/webroot/css/grd_styles.css deleted file mode 100644 index e745ea55e..000000000 --- a/community_server/webroot/css/grd_styles.css +++ /dev/null @@ -1,1821 +0,0 @@ -/* ============================================================ - - Grid Layout Page - - Datei : layout.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -/*==================================== -= BREAK POINTS = -====================================*/ -/* https://scotch.io/courses/getting-started-with-less/responsive-and-media-queries */ -/* GRID */ -.layout { - display: grid; - grid-template-rows: [top] 8vh [line2] 86vh [footer1] 3vh [footer2] 5vh [end]; - grid-template-columns: [left1] auto [left2] 1fr [left3] 12fr [right3] 1fr [right2] auto [right1]; - grid-template-areas: "header header header header header" "left . center center ." "footer footer footer footer footer" "bottom bottom bottom bottom bottom"; - margin: 0; - padding: 0; -} -@media (max-width:1199px) { - .layout { - grid-template-areas: "header header header header header" "left . center center center" "footer footer footer footer footer" "bottom bottom bottom bottom bottom"; - } -} -@media (max-width:767px) { - .layout { - position: relative; - display: grid; - grid-template-rows: [top] 12vh [line2] 80vh [footer1] 3vh [footer2] 8vh [end]; - grid-template-columns: [left1] 100vw [right1]; - grid-template-areas: "header" "center" "footer" "bottom"; - margin: 0; - padding: 0; - } -} -.header-notify { - grid-area: header; - grid-column-start: right3; - grid-column-end: right2; -} -.header-user { - grid-area: header; - grid-column-start: right2; - grid-column-end: right1; -} -.sidebar1 { - grid-area: left; - grid-row-start: top; - grid-row-end: end; -} -@media (max-width:767px) { - .sidebar1 { - position: relative; - grid-area: header; - z-index: 2; - top: -300px; - right: 0px; - } - .header-user, - .header-notify { - grid-area: header; - } -} -.center-form-single, -.content { - grid-area: center; - grid-row-start: line2; - grid-row-end: footer1; -} -.footer { - grid-area: footer; - grid-row-start: footer1; - grid-row-end: footer2; -} -.nav-bottom { - grid-area: bottom; - grid-row-start: footer2; - grid-row-end: end; -} -/* ============================================================ - - Generic Color Definitions - - Vars and some generic CSS rules. - - Datei : colors.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -/* MAIN */ -/* MENU */ -/* CONTENT */ -/* CONTENT-NAV */ -/* CONTENT-ITEMS */ -/* CONTENT-TABLE */ -/* FORMS */ -/* VARIOUS INDIVIDUAL */ -/* XXX TODO XXX */ -/*rgba(0, 0, 0, 0.5) ??? */ -/* NOTIFICATION */ -/* https://www.w3schools.com/colors/colors_shades.asp */ -.info-color { - color: grey; -} -.success-color { - color: #047006; -} -.alert-color { - color: #ff5f66; -} -.orange-color { - color: #ffa600; -} -.blue-color { - color: blue; -} -.unobtrusive { - color: grey; -} -.info-icon { - color: grey; - background-color: #80808026; -} -.success-icon { - color: #047006; - background-color: rgba(4, 112, 6, 0.2); -} -.alert-icon { - color: #ff5f66; - background-color: #ff5f662e; -} -/* ======================= - Gradido - =======================*/ -/* Gradido */ -.grd-negative-currency { - color: red; -} -/* Gradido Transform */ -.gdt-text-color { - color: #a27824; -} -.grd_clickable { - cursor: pointer; -} -/* ============================================================ - - Typography Definitions - - Datei : typography.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -.small-font { - font-size: 0.75em; - font-weight: 300; -} -/* ============================================================ - - Basic screen styles. - - Datei : screen.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@font-face { - font-family: 'Material Icons Outlined'; - font-style: normal; - font-weight: 400; - src: url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.eot); - /* For IE6-8 */ - src: local('Material Icons Outlined'), local('Material-Icons-Outlined'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2) format('woff2'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff) format('woff'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf) format('truetype'); -} -.material-icons-outlined { - font-family: 'Material Icons Outlined'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - vertical-align: middle; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -webkit-font-feature-settings: 'liga'; - -webkit-font-smoothing: antialiased; -} -@media screen { - /* ======================= - Basis - =======================*/ - html, - body { - font-family: 'Roboto', sans-serif; - font-size: 100%; - line-height: 27px; - color: #212529; - background-color: #f9fafb; - margin: 0; - overflow: auto; - } - div { - border-collapse: collapse; - box-sizing: border-box; - } - /* ======================= - Kopfbereich - =======================*/ - .header { - display: flex; - justify-content: space-between; - align-items: center; - flex: flex-grow; - width: 100%; - padding: 1em; - background-color: #fff; - } - /* ======================= - Fußbereich - =======================*/ - .footer { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - font-size: 70%; - font-style: italic; - line-height: 0; - } - .bottomright { - position: fixed; - bottom: 0; - right: 0; - color: grey; - font-size: smaller; - line-height: 0.125em; - padding-right: 0.25em; - text-align: right; - } - .bottomleft { - position: fixed; - bottom: 0; - left: 0; - color: grey; - font-size: smaller; - line-height: 1.125em; - padding-left: 0.25em; - } - /* ======================= - Sonstige - =======================*/ - /* Hyperlinks */ - a { - text-decoration: none; - color: inherit; - } - main a { - text-decoration: underline; - font-style: italic; - } - a:link, - a:visited { - color: inherit; - } - a:hover, - a:focus { - text-decoration: underline; - } - a:active { - background-color: #fff; - color: #000; - } - a:focus, - a:active { - outline: none; - } - a.grd_invisible_link { - color: #000; - text-decoration: none; - } - a.grd_invisible_link:hover { - color: grey; - } - [type=button]:not(:disabled), - [type=reset]:not(:disabled), - [type=submit]:not(:disabled), - button:not(:disabled) { - cursor: pointer; - } -} -@media screen and (max-width:767px) { - .bottomright { - font-size: 0.7em; - font-weight: 300; - line-height: 1em; - width: 100px; - } - .bottomright p { - margin-block-start: 0; - margin-block-end: 2px; - margin-inline-start: 0; - margin-inline-end: 0; - } -} -/* Ende @media screen */ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* ============================================================ - - Screen styles for flash messages. - - Datei : messages.css - Datum : 30.10.2019, 16:04:16 - Autor : einhornimmond, Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .flash-messages { - width: 30%; - position: absolute; - top: 57px; - left: 241px; - text-align: center; - } - .flash-messages .alert { - margin: 0; - padding: 1em; - vertical-align: middle; - border-radius: 5px; - } - .flash-messages .alert-success { - color: #1A1A1A !important; - background-color: #06c50a; - border: 1px solid #04700675; - } - .flash-messages .alert-error { - color: #fff !important; - background-color: red; - border: 1px solid rgba(255, 0, 0, 0.5); - } - .flash-messages .message { - padding: 5px; - } - .flash-messages .success { - color: #047006; - } - .flash-messages .error { - color: red; - } - .flash-messages.hidden { - display: none; - } - /* messages, update flash */ - .grd-error { - color: red; - border: 1px solid rgba(255, 0, 0, 0.5); - padding: 5px; - } - .grd-info { - border: 1px dotted gray; - padding: 5px; - } - .grd-success { - padding: 5px; - color: #047006; - } -} -@media screen and (max-width:767px) { - .flash-messages { - width: 90%; - top: 0; - left: 0; - text-align: center; - } -} -/* ============================================================ - - User Menu - - Datei : user.less - Datum : 2020-07-03 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-user { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: flex-end; - align-content: flex-end; - position: relative; - width: 100%; - min-width: 12em; - height: 40px; - background-color: #fff; - border: 1px solid #f2f4f5; - border-radius: 0 0 0 18px; - } - .user-menu-container { - display: flex; - justify-content: flex-end; - align-items: center; - font-size: 0.8em; - font-weight: 300; - padding: 0.25em 0.5em; - z-index: 20; - height: 40px; - } - .user-name, - .user-icon { - display: inline-block; - vertical-align: middle; - cursor: pointer; - } - .user-name { - padding-right: 0.25em; - } - .nav-vertical.user-menu { - display: none; - background-color: #fff; - border-left: 1px solid #f2f4f5; - border-bottom: 1px solid #f2f4f5; - border-radius: 0 0 16px 16px; - z-index: 15; - font-size: 0.9em; - margin-top: 0 !important; - position: fixed; - top: 39px; - right: 0; - } - .nav-vertical.user-menu.visible { - display: inherit; - } - .nav-vertical.user-menu > ul { - padding: 2em; - padding-top: 0.5em; - padding-bottom: 1em; - margin-block-end: 0; - margin-block-start: 0; - } - .nav-vertical.user-menu li { - padding: 0.0125em; - } - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - .material-icons-outlined.user-info { - color: grey; - } - .material-icons-outlined.user-info.success { - color: #047006; - } -} -@media screen and (max-width:767px) { - .header-user { - position: relative; - min-width: 3em; - background-color: transparent; - justify-content: center; - height: 100%; - margin-top: -13px; - margin-left: -16px; - color: #047006; - } - .user-menu-container { - margin: 0; - padding: 0; - } - .user-name { - display: none; - } - .nav-vertical { - margin-top: 55px; - } - .nav-vertical.user-menu { - position: fixed; - top: 1px; - right: 0; - margin-top: 0; - } - .nav-vertical.user-menu > ul { - padding: 1em 1em; - padding-top: 3em; - } -} -/* ============================================================ - - Navigation - - Datei : navi.less - Datum : 2020-04-30 - Autor : einhornimmond / Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .logo { - display: none; - vertical-align: middle; - height: 30px; - padding: 0.5em; - } - .logo.big.visible, - .logo.small.visible { - display: block !important; - } - .logo.mobile { - display: none; - } - .logo.small.visible { - padding-left: 41px; - } - /* - SIDEBARS - */ - .sidebar1 { - background-color: #fff; - font-size: 0.8em; - font-weight: 500; - line-height: 2.5em; - padding: 0; - border-right: 1px solid #f2f4f5; - } - .sidebar2 { - padding: 1em; - background-color: #f9fafb; - } - .sidebar1-header { - font-size: 0.75em; - font-style: italic; - color: grey; - } - /* set general icons size here! */ - .nav-icon { - font-size: 18px !important; - color: #4F4F4F; - vertical-align: middle; - padding-right: 1em; - } - /* important! order matters! we need to overwrite the main button's size here */ - .nav-main-button { - font-size: 32px !important; - color: grey; - margin: 0.3em; - } - /* Hide mobile menu button! */ - .nav-main-button.mobile { - display: none; - } - .nav-menu.nav-menu-maximized { - width: 280px; - height: 100%; - } - .nav-menu.nav-menu-minimized { - width: 120px; - height: 100%; - } - .nav-menu-maximized { - -webkit-animation: slide-out 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-out 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - .nav-menu-minimized { - -webkit-animation: slide-in 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-in 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - .nav-menu-minimized .link-title { - display: none; - } - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 72px; - } - /** - * ---------------------------------------- - * animations slide-in / slide-out - * ---------------------------------------- - */ - /* slide-in */ - @-webkit-keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - } - @keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - } - /* slide-out */ - @-webkit-keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - } - @keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - } - /* - NAVI MOBILE - */ - /* END navi mobile base */ - .selected { - color: #047006; - } - .link-title { - vertical-align: middle; - line-height: normal; - background-color: transparent; - } - .nav-horizontal { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - align-items: flex-end; - list-style-type: none; - gap: 5%; - padding: 1em; - } - .footer .nav-horizontal { - gap: 0; - padding: 0 1em; - padding-inline-start: 0 !important; - } - .nav-top-smaller { - margin: 0; - padding: 0; - } - .nav-smaller { - justify-content: left; - align-items: flex-start; - gap: 0; - padding: 0; - } - .nav-smaller li { - padding: 0 !important; - padding: 0.2em 0.5em !important; - border: 1px solid #047006; - margin: 0.1em 0.3em; - border-radius: 12px; - } - .nav-smaller .heading { - font-weight: bold; - } - .nav-vertical { - margin-top: -2em; - } - .nav-horizontal li { - padding: 0.5em; - } - .nav-vertical > ul { - display: flex; - flex-direction: column; - list-style-type: none; - gap: 5%; - padding: 1em; - } - .nav-vertical li { - padding: 0.5em; - } - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - .nav-bottom { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - list-style-type: none; - margin-bottom: 20px; - } - .nav-bottom p { - font-size: 0.9em; - color: grey; - margin: 0; - } - nav.grd-left-bar { - position: fixed; - top: 80.5px; - } - nav .grd-nav-bn { - width: 100px; - } - nav ul { - margin-top: 0; - padding-left: 0; - } - /* buttons */ - .grd-nav-bn:hover, - .grd-active { - background-color: lightgray; - border-color: #000; - } - .grd-nav-bn { - padding: 10px; - border: 1px solid grey; - display: table-cell; - text-align: center; - vertical-align: middle; - color: grey; - } - .grd-nav-bn-large { - width: 40vw; - height: 18vh; - font-size: 35px; - } - a.grd-nav-bn, - a.grd-nav-bn:visited { - color: #000; - text-decoration: none; - } -} -@media screen and (max-width:767px) { - .logo.big, - .logo.small { - display: none; - } - .logo.visible { - padding: 0 !important; - } - .logo, - .logo.mobile, - .logo.mobile.visible { - display: block; - position: fixed; - top: 12px; - left: 12px; - } - .logo.big, - .logo.big.visible { - display: none !important; - } - .nav-main-button { - display: none; - } - .nav-main-button.mobile { - display: block; - position: fixed; - top: 2px; - right: 46px; - z-index: 3; - } - .nav-menu.nav-menu-minimized, - .nav-menu.nav-menu-maximized { - width: 280px; - height: 300px; - } - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 0; - } - .nav-menu-maximized { - -webkit-animation: slide-down 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-down 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - .nav-menu-minimized { - -webkit-animation: slide-up 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-up 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - } - @-webkit-keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - 100% { - -webkit-transform: translateY(300px); - transform: translateX(300px); - opacity: 1; - } - } - @keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - 100% { - -webkit-transform: translateY(300px); - transform: translateY(300px); - opacity: 1; - } - } - @-webkit-keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - } - @keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - } -} -@media screen and (max-width:767px) { - .nav-vertical { - margin-top: 55px; - } -} -@media screen and (max-width:767px) { - .nav-bottom p { - font-size: 0.8em; - margin-top: -10px; - } -} -/* ============================================================ - - Notification - - Datei : notification.css - Datum : 2020-06-10 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-notify { - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; - z-index: 10; - } - .notify { - display: block; - padding: 0.5rem 0.3rem; - color: #525c5d; - animation: blinkingNotifySymbol 1.2s infinite; - } - .notify-alert { - color: #ff5f66; - animation: blinkingAlertSymbol 1.2s infinite; - } - @keyframes blinkingNotifySymbol { - 0% { - color: #525c5d; - } - 49% { - color: #525c5d; - } - 60% { - color: #525c5d82; - } - 99% { - color: #525c5d82; - } - 100% { - color: #525c5d; - } - } - @keyframes blinkingAlertSymbol { - 0% { - color: #ff5f66; - } - 49% { - color: #ff5f66; - } - 60% { - color: #ff5f669e; - } - 99% { - color: #ff5f669e; - } - 100% { - color: #ff5f66; - } - } - /* - .notification-indicator-primary { - background: #047006; - } - - .notification-indicator-warning { - background: #f0825f - } - .notification-indicator-secondary { - background: grey - } - - .notification-indicator-secondary:before { - content: ""; - background: rgba(128, 128, 128, .5) - } - - .notification-indicator-success { - background: #00e093 - } - - .notification-indicator-success:before { - content: ""; - background: rgba(0, 224, 147, .5) - } - - .notification-indicator-info { - background: #6c61f6 - } - - .notification-indicator-info:before { - content: ""; - background: rgba(108, 97, 246, .5) - } - - - .notification-indicator-danger { - background: #ff5f66 - } - - .notification-indicator-danger:before { - content: ""; - background: rgba(255, 95, 102, .5) - } - - .notification-indicator-light { - background: #dfdfdf - } - - .notification-indicator-light:before { - content: ""; - background: rgba(223, 223, 223, .5) - } - - .notification-indicator-dark { - background: #74767b - } - - .notification-indicator-dark:before { - content: ""; - background: rgba(116, 118, 123, .5) - } - - .notification-indicator-white { - background: #fff - } - - .notification-indicator-white:before { - content: ""; - background: rgba(255, 255, 255, .5) - } - */ -} -@media screen and (max-width:767px) { - .header-notify { - justify-content: flex-end; - margin-right: 93px; - margin-top: 8px; - } -} -/* ============================================================ - - Screen styles for the regular center part. - - Datei : center.css - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - /* ========= - CONTENT - =========*/ - .content-default { - display: flex; - justify-content: center; - max-width: 90%; - } - .content { - display: flex; - justify-content: flex-start; - flex-direction: column; - overflow: auto; - width: 100%; - background-color: #f9fafb; - line-height: 1.75em; - letter-spacing: 0.03rem; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 1rem; - padding-right: 5em; - } - /* Center Navigation Top */ - .nav-content { - position: relative; - color: #565656; - margin: 0 0.25em; - } - .nav-content-list { - display: flex; - list-style-type: none; - padding: 0; - margin-left: 0.25em; - } - .nav-content-separator { - margin: 0 1em; - } - /* Center Content Container */ - .content-container { - background-color: #fff; - color: #212529; - border-radius: 0.5em; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, 0.2); - border: 1px solid rgba(238, 238, 238, 0.75); - margin: 1em 0.25em; - } - /* Block Container Above Main */ - .block-container { - width: 100%; - display: flex; - } - /* Top Info Above Main */ - .info-container { - display: flex; - justify-content: space-between; - align-items: center; - max-width: 70%; - padding: 1em 25px; - } - /* Main Container */ - .main-container { - width: 100%; - } - .default-container { - width: 90%; - margin: auto; - padding: 1em; - } - /* Content Block */ - .content-block { - width: 170px; - padding: 20px 25px 20px; - border: 1px dashed grey; - border-radius: 16px; - margin: 1em; - display: flex; - flex-direction: column; - justify-content: center; - justify-items: center; - align-items: center; - } - .block-img { - width: 40px; - height: 40px; - line-height: 20px; - font-size: 24px; - padding: 8px; - border-radius: 20px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - } - /* Generic Content */ - .content-region h3 { - color: #21252969; - } - .content-region { - border-bottom: 1px dashed #F5F5F5; - padding: 0 25px; - padding-bottom: 2em; - margin: 1em 0.25em; - } - .content-collection { - display: flex; - } - .content-item { - margin: 0.5em 0; - margin-right: 5em; - width: 220px; - padding: 1em 2em; - } - .action-button { - background: #f9fafb; - border-left: 3px solid #047006; - } - .info-item { - border-left: 2px solid grey; - } - .inline-header { - display: inline; - } - .show-profile-img { - display: block; - height: 100px; - vertical-align: middle; - border-radius: 10px; - border: 2px dotted #80808026; - } - /* OTHER */ - .info-item i, - .info-item-link, - .action-button i, - .action-button-link { - vertical-align: middle; - } -} -@media screen and (max-width:767px) { - .content { - padding-right: 0; - } -} -@media screen and (max-width:767px) { - .nav-content-list { - display: flex; - font-size: small; - margin-bottom: 0; - justify-content: center; - } -} -@media screen and (max-width:1199px) { - .info-container { - flex-direction: column; - max-width: 90%; - line-height: 0.25em; - } -} -@media screen and (max-width:767px) { - .main-container { - max-width: 97%; - } -} -@media screen and (max-width:767px) { - .content-region { - padding-left: 5px; - } - .content-collection { - flex-direction: column; - align-items: center; - } - .content-item { - margin: 0.5em 0; - margin-right: 0; - width: 160px; - padding: 1em 2em; - } -} -/* Ende @media screen */ -/* ============================================================ - - Screen styles for the simple center form. (login etc) - - Datei : center-form-single.css - Datum : 2020-07-10 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .center-form-single { - width: 50%; - margin: auto; - } - .center-form-header { - margin-bottom: 50px; - } - .center-logo { - display: block; - margin: 0 auto; - width: 280px; - } - .center-logo img { - width: 100%; - vertical-align: middle; - border-style: none; - } - .center-form-container { - display: flex; - flex-direction: column; - padding: 2em 8em; - background-color: #fff; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, 0.2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, 0.75); - } - .center-form-title h1 { - margin-block-start: 0; - } - .center-form-selectors { - display: flex; - justify-content: flex-end; - align-items: center; - height: 38px; - padding: 5px 0; - margin-bottom: 2em; - } - .center-form-form, - .center-form-form form { - display: flex; - flex-direction: column; - } - .center-form-form .form-label { - text-align: left; - } - .center-form-form .form-control { - width: 100%; - margin: auto; - box-sizing: border-box; - margin-bottom: 0.5em; - } - .center-form-submit { - width: 100%; - margin: 1em 0; - } - .reset-pwd-link, - .signup-link { - padding: 0 20px; - } - .reset-pwd-link a, - .signup-link a { - color: #047006; - } - .reset-pwd-link p, - .signup-link p { - display: inline-block; - margin-block-start: 0; - margin-block-end: 0; - } - .center-bottom { - color: grey; - text-align: center; - padding-top: 30px; - } - .flag-btn { - text-align: center; - vertical-align: middle; - padding: 3px 11px; - } - .flag { - display: block; - } - .flag-germany { - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - width: 40px; - height: 10px; - } - .flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - } - .group { - padding-left: 10px; - padding-top: 10px; - padding-bottom: 10px; - } - .group-is-invalid { - background-color: rgba(240, 130, 95, 0.2); - border-color: #dc3545; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(0.375em + 0.1875rem); - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); - } - .group-is-invalid .radio label .input-frame::before { - border-color: red; - } -} -@media screen and (max-width:767px) { - .center-form-header { - margin-bottom: 30px; - margin-top: -50px; - } - .center-form-single { - width: 97%; - margin: auto; - } - .center-form-container { - padding: 1em 0.5em; - } -} -/* Ende @media screen */ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* ============================================================ - - Screen styles for plain facts. - - Datei : facts.css - Datum : 08.07.2020 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .fact-list { - display: flex; - flex-direction: column; - list-style-type: none; - width: 100%; - padding-inline-start: 0; - font-weight: 300; - } - .fact { - display: inline-block; - padding-left: 1em; - } - .label { - width: 150px; - text-align: right; - font-weight: bold; - } -} -@media screen and (max-width:767px) { - .fact-list { - margin-block-start: 0; - margin-block-end: 0; - } - li.fact { - display: flex; - flex-direction: column; - } - .fact { - padding-left: 0.5em; - } - .label { - width: 250px; - text-align: left; - font-size: 0.9em; - font-weight: normal; - } -} -/* ============================================================ - - Screen styles for lists. - - Datei : list.css - Datum : 2020-06-09 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - /* ========= - LISTS - =========*/ - /* List Content */ - .content-list { - width: 100%; - } - .content-list-title { - font-size: 1rem; - margin: 0; - padding: 20px 25px; - color: #313131; - } - .content-list-table { - display: flex; - flex-direction: column; - width: 100%; - overflow: auto; - font-size: 16px; - color: #212529; - } - .row { - display: flex; - width: 100%; - border-top: 1px solid #f2f4f9; - -webkit-transition-duration: 0.5s; - transition-duration: 0.5s; - } - .row:hover { - background-color: #f6f7f9; - } - .cell { - display: flex; - flex-wrap: wrap; - align-items: center; - padding: 1em 1.5em; - } - .cell-dense { - padding: 0.1em 0.5em; - } - .centered { - justify-content: center; - } - .c0 { - flex-grow: 5; - min-width: 20%; - } - .c1 { - min-width: 40px; - flex: 0 0 40px; - } - .c2 { - min-width: 80px; - flex: 0 0 80px; - } - .c3 { - min-width: 160px; - flex: 0 0 160px; - } - .c4 { - min-width: 240px; - flex: 0 0 240px; - } - .c5 { - min-width: 320px; - flex: 0 0 320px; - } - .c6 { - min-width: 400px; - flex: 0 0 400px; - } - .header-cell { - border-top: 1px solid #f2f4f9; - background-color: #fafafa; - color: #101010; - } - .content-list-table img, - .content-list-table i { - vertical-align: middle; - } - .content-list-table > span { - font-size: 0.8em; - padding: 0.5em 2em; - vertical-align: middle; - } - /* Individual Tables XXX rm!! */ - .error-list { - grid-template-columns: 2fr 2fr 5fr 1fr; - } - .transactions { - grid-template-columns: 1fr 4fr 2fr 2fr; - } - .profile-img { - width: 30px; - height: 30px; - border-radius: 6px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - margin-right: 40px; - } - .tx-email { - cursor: pointer; - display: block; - color: #101010; - font-weight: 400; - } - .small { - font-size: 80%; - font-weight: 400; - } - /*, - .cell-icon .material-icons-outlined */ - .cell-icon { - /*noch ungeklärt - icon ist nicht aligned */ - /*font-size: 1.25em;*/ - vertical-align: middle; - } - /* ===================================== - FORM TOP CONTENT (checkTransaction) - =====================================*/ - .form-content { - padding: 35px; - padding-top: 20px; - max-width: 80%; - margin: auto; - } - .content-table { - border: 1px solid #f2f4f9; - border-top: none; - margin-bottom: 1.5rem; - } - .content-row { - display: flex; - justify-content: space-between; - font-weight: 400; - border-top: 1px solid #f2f4f9; - } - .content-row-header { - font-weight: 500; - color: #101010; - } - .content-row-bg { - background-color: #f0f2f5; - } - .content-cell { - display: block; - border-collapse: collapse; - padding: 10px 15px; - } - .form-button .material-icons-outlined { - font-size: 1.25em; - } -} -@media screen and (max-width:767px) { - .row { - flex-direction: column; - } -} -@media screen and (max-width:767px) { - .cell { - padding: 0.25em 1.5em; - } - .c1 { - flex-basis: auto; - } - .c2 { - flex-basis: auto; - } - .c3 { - flex-basis: auto; - } - .c4 { - flex-basis: auto; - } - .c5 { - flex-basis: auto; - } - .c6 { - flex-basis: auto; - } -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 23.11.2020, 14:04:28 - Author : einhornimmond -*/ -/* Style the tab */ -.tab { - overflow: hidden; - border: 1px solid #ccc; - background-color: #f1f1f1; -} -/* Style the buttons that are used to open the tab content */ -.tab button { - background-color: inherit; - float: left; - border: none; - outline: none; - cursor: pointer; - padding: 14px 16px; - transition: 0.3s; -} -/* Change background color of buttons on hover */ -.tab button:hover { - background-color: #ddd; -} -/* Create an active/current tablink class */ -.tab button.active { - background-color: #ccc; -} -/* Style the tab content */ -.tabcontent { - display: none; - padding: 6px 12px; - border: 1px solid #ccc; - border-top: none; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* ============================================================ - - Screen styles for forms. - - Datei : form.css - Datum : 2020-06-07 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - /* ========= - FORMS - =========*/ - /* Form Content */ - .action-form { - width: 100%; - } - .form-header { - border-left: 3px solid #047006; - background: #f9fafb; - padding: 15px 20px; - margin: 0; - margin-bottom: 15px; - border-radius: 0 6px 0 0; - } - .form-label { - grid-column: 0.5; - font-weight: 400; - text-align: right; - padding-right: 0.5em; - } - .form-control { - grid-column: 0.66666667; - padding: 0.4em 0.75em; - padding-left: 20px; - padding-right: 20px; - margin: 0; - margin-right: 0.5em; - color: rgba(16, 16, 16, 0.8); - display: block; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: 0.25rem; - -webkit-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - } - .form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); - } - textarea { - resize: vertical; - } - .badge { - display: inline-block; - padding: 0.45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - } - .badge-warning { - color: #fff; - background-color: #00e093; - } - .badge-error { - color: #fff; - background-color: #ff5f66; - } - .form-full-width { - grid-column-start: 1; - grid-column-end: 3; - display: flex; - flex-direction: column; - } - .form-button { - cursor: pointer; - font: 600 13.3333px Arial; - font-size: 0.875rem; - line-height: 1.5; - text-align: center; - vertical-align: middle; - color: #fff; - background-color: #047006; - border-color: #047006; - border: 1px solid transparent; - border-radius: 0.2rem; - height: 35px; - max-height: 35px; - padding: 4px 15px; - margin-right: 0.5em; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - } - .form-button:hover { - background-color: #034b04; - border-color: #023f03; - } - .button-cancel { - color: #fff !important; - background-color: #f0825f; - border-color: #f0825f; - } - .button-cancel:hover { - background-color: #ec5e30; - border-color: #eb5425; - } - .link-button { - display: inline-block; - background: #f9fafb; - color: #fff; - height: 17px; - padding: 1em 2em; - line-height: 1em; - border-radius: 6px; - text-align: center; - vertical-align: middle; - } - .action-link { - color: #047006 !important; - } - .action-link-button { - background-color: #047006 !important; - color: #fff !important; - margin-top: 1em; - padding: 0.5em 1em; - } - .edit-profile-img { - width: 100px; - } - .note-smaller { - font-size: smaller; - } - .form-row, - .grid-row { - display: flex; - justify-content: flex-start; - align-items: center; - align-content: center; - width: 100%; - -webkit-transition-duration: 0.5s; - transition-duration: 0.5s; - } - .justify-end { - justify-content: flex-end; - } - .form-row { - border-top: 1px solid #f2f4f9; - } - .form-row:hover { - background-color: #f6f7f9; - } - /* CENTER FORM SPECIFICS */ - .form-body form { - display: grid; - grid-template-columns: 220px 1fr; - margin: 36px 75px; - grid-gap: 1em; - } - .center-form { - width: 450px; - } - .center-form .form-control { - width: 90%; - } - .center-form fieldset { - margin-bottom: 1em; - } -} -@media screen and (max-width:767px) { - .grid-row { - flex-direction: column; - } -} -@media screen and (max-width:767px) { - .form-body form { - grid-template-columns: 1fr; - margin: 20px; - grid-gap: 0.25em; - } - .form-label { - text-align: left; - } -} diff --git a/community_server/webroot/css/loginServer/style.css b/community_server/webroot/css/loginServer/style.css deleted file mode 100644 index bf5f617a7..000000000 --- a/community_server/webroot/css/loginServer/style.css +++ /dev/null @@ -1,14488 +0,0 @@ -.bg-inverse-primary { - background: rgba(4, 112, 6, .2) -} - -.bg-inverse-secondary { - background: rgba(128, 128, 128, .2) -} - -.bg-inverse-success { - background: rgba(0, 224, 147, .2) -} - -.bg-inverse-info { - background: rgba(108, 97, 246, .2) -} - -.bg-inverse-warning { - background: rgba(240, 130, 95, .2) -} - -.bg-inverse-danger { - background: rgba(255, 95, 102, .2) -} - -.bg-inverse-light { - background: rgba(223, 223, 223, .2) -} - -.bg-inverse-dark { - background: rgba(116, 118, 123, .2) -} - -.bg-inverse-white { - background: rgba(255, 255, 255, .2) -} - -.bg-inverse-orange { - background: rgba(255, 166, 0, .2) -} - -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite -} - -@-webkit-keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -@keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn -} - -@-webkit-keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown -} - -@-webkit-keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -@keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp -} - -@-webkit-keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -@keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -.zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn -} - -@keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@-webkit-keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -@keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -body, -html { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - letter-spacing: .03rem; - font-family: Roboto, sans-serif; - font-weight: 400; - font-size: 14px -} - -@media (min-width:768px) and (max-width:991px) { - body, - html { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - body, - html { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - body, - html { - font-size: 14px - } - -} - -h1, -h2, -h3, -h4, -h5, -h6, -label { - font-family: Roboto, sans-serif; - font-weight: 500 -} - -label, -p { - font-family: Roboto, sans-serif; - font-weight: 400; - letter-spacing: .03rem -} - -a { - font-family: Roboto, sans-serif; - font-weight: 400 -} - -a:hover { - text-decoration: none -} - -pre { - font-size: 15px -} - -@media (min-width:768px) and (max-width:991px) { - pre { - font-size: calc(15px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - pre { - font-size: calc(16px + 0 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - pre { - font-size: 16px - } - -} - -.checkbox label, -.radio label, -label { - font-family: Roboto, sans-serif; - font-weight: 400 -} - -b { - font-weight: 700 -} - -small { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 400; - display: inline-block; - line-height: 1.4 -} - -@media (min-width:768px) and (max-width:991px) { - small { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - small { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - small { - font-size: 13px - } - -} - -h1 { - font-size: 20px -} - -@media (min-width:768px) and (max-width:991px) { - h1 { - font-size: calc(20px + 4 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h1 { - font-size: calc(24px + 8 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h1 { - font-size: 32px - } - -} - -h2 { - font-size: 19px -} - -@media (min-width:768px) and (max-width:991px) { - h2 { - font-size: calc(19px + 3 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h2 { - font-size: calc(22px + 7 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h2 { - font-size: 29px - } - -} - -h3 { - font-size: 18px -} - -@media (min-width:768px) and (max-width:991px) { - h3 { - font-size: calc(18px + 3 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h3 { - font-size: calc(21px + 5 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h3 { - font-size: 26px - } - -} - -h4 { - font-size: 17px -} - -@media (min-width:768px) and (max-width:991px) { - h4 { - font-size: calc(17px + 2 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h4 { - font-size: calc(19px + 4 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h4 { - font-size: 23px - } - -} - -h5 { - font-size: 17px -} - -@media (min-width:768px) and (max-width:991px) { - h5 { - font-size: calc(17px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h5 { - font-size: calc(18px + 2 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h5 { - font-size: 20px - } - -} - -h6 { - font-size: 16px -} - -@media (min-width:768px) and (max-width:991px) { - h6 { - font-size: calc(16px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - h6 { - font-size: calc(17px + 1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - h6 { - font-size: 18px - } - -} - -.display-1 { - font-size: 26px -} - -@media (min-width:768px) and (max-width:991px) { - .display-1 { - font-size: calc(26px + 7 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-1 { - font-size: calc(33px + 25 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-1 { - font-size: 58px - } - -} - -.display-2 { - font-size: 24px -} - -@media (min-width:768px) and (max-width:991px) { - .display-2 { - font-size: calc(24px + 7 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-2 { - font-size: calc(31px + 21 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-2 { - font-size: 52px - } - -} - -.display-3 { - font-size: 23px -} - -@media (min-width:768px) and (max-width:991px) { - .display-3 { - font-size: calc(23px + 6 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-3 { - font-size: calc(29px + 17 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-3 { - font-size: 46px - } - -} - -.display-4 { - font-size: 22px -} - -@media (min-width:768px) and (max-width:991px) { - .display-4 { - font-size: calc(22px + 5 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-4 { - font-size: calc(27px + 14 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-4 { - font-size: 41px - } - -} - -.display-5 { - font-size: 21px -} - -@media (min-width:768px) and (max-width:991px) { - .display-5 { - font-size: calc(21px + 4 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .display-5 { - font-size: calc(25px + 11 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .display-5 { - font-size: 36px - } - -} - -.form-control, -input[type=email], -input[type=name], -input[type=number], -input[type=password], -input[type=text], -textarea { - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 14px -} - -@media (min-width:768px) and (max-width:991px) { - .form-control, - input[type=email], - input[type=name], - input[type=number], - input[type=password], - input[type=text], - textarea { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .form-control, - input[type=email], - input[type=name], - input[type=number], - input[type=password], - input[type=text], - textarea { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .form-control, - input[type=email], - input[type=name], - input[type=number], - input[type=password], - input[type=text], - textarea { - font-size: 13px - } - -} - -.form-control.placeholder, -input[type=email].placeholder, -input[type=name].placeholder, -input[type=number].placeholder, -input[type=password].placeholder, -input[type=text].placeholder, -textarea.placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control:-moz-placeholder, -input[type=email]:-moz-placeholder, -input[type=name]:-moz-placeholder, -input[type=number]:-moz-placeholder, -input[type=password]:-moz-placeholder, -input[type=text]:-moz-placeholder, -textarea:-moz-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control::-moz-placeholder, -input[type=email]::-moz-placeholder, -input[type=name]::-moz-placeholder, -input[type=number]::-moz-placeholder, -input[type=password]::-moz-placeholder, -input[type=text]::-moz-placeholder, -textarea::-moz-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control:-ms-input-placeholder, -input[type=email]:-ms-input-placeholder, -input[type=name]:-ms-input-placeholder, -input[type=number]:-ms-input-placeholder, -input[type=password]:-ms-input-placeholder, -input[type=text]:-ms-input-placeholder, -textarea:-ms-input-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.form-control::-webkit-input-placeholder, -input[type=email]::-webkit-input-placeholder, -input[type=name]::-webkit-input-placeholder, -input[type=number]::-webkit-input-placeholder, -input[type=password]::-webkit-input-placeholder, -input[type=text]::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - font-family: inherit; - font-size: inherit; - color: #afb5ba; - font-weight: inherit -} - -.grid-title { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -@media (min-width:768px) and (max-width:991px) { - .grid-title { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .grid-title { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .grid-title { - font-size: 14px - } - -} - -.bootstrap-tagsinput .tag { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -@media (min-width:768px) and (max-width:991px) { - .bootstrap-tagsinput .tag { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .bootstrap-tagsinput .tag { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .bootstrap-tagsinput .tag { - font-size: 13px - } - -} - -.font-weight-medium { - font-weight: 500 !important -} - -.font-weight-bold, -.font-weight-bolder, -.font-weight-medium { - letter-spacing: 1px -} - -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #047006; - --secondary: grey; - --success: #00e093; - --info: #6c61f6; - --warning: #f0825f; - --danger: #ff5f66; - --light: #dfdfdf; - --dark: #74767b; - --white: #fff; - --orange: #ffa600; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace -} - -*, -::after, -::before { - box-sizing: border-box -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0) -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.7; - color: #212529; - text-align: left; - background-color: #fff -} - -[tabindex="-1"]:focus { - outline: 0 !important -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: .5rem -} - -p { - margin-top: 0; - margin-bottom: 1rem -} - -abbr[data-original-title], -abbr[title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - text-decoration-skip-ink: none -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit -} - -dl, -ol, -ul { - margin-top: 0; - margin-bottom: 1rem -} - -ol ol, -ol ul, -ul ol, -ul ul { - margin-bottom: 0 -} - -dt { - font-weight: 700 -} - -dd { - margin-bottom: .5rem; - margin-left: 0 -} - -blockquote { - margin: 0 0 1rem -} - -b, -strong { - font-weight: bolder -} - -small { - font-size: 80% -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline -} - -sub { - bottom: -.25em -} - -sup { - top: -.5em -} - -a { - color: #047006; - text-decoration: none; - background-color: transparent -} - -a:hover { - color: #012602; - text-decoration: underline -} - -a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus, -a:not([href]):not([tabindex]):hover { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus { - outline: 0 -} - -code, -kbd, -pre, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto -} - -figure { - margin: 0 0 1rem -} - -img { - vertical-align: middle; - border-style: none -} - -svg { - overflow: hidden; - vertical-align: middle -} - -table { - border-collapse: collapse -} - -caption { - padding-top: 10px 15px; - padding-bottom: 10px 15px; - color: #6c757d; - text-align: left; - caption-side: bottom -} - -th { - text-align: inherit -} - -label { - display: inline-block; - margin-bottom: .5rem -} - -button { - border-radius: 0 -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color -} - -button, -input, -optgroup, -select, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit -} - -button, -input { - overflow: visible -} - -button, -select { - text-transform: none -} - -select { - word-wrap: normal -} - -[type=button], -[type=reset], -[type=submit], -button { - -webkit-appearance: button -} - -[type=button]:not(:disabled), -[type=reset]:not(:disabled), -[type=submit]:not(:disabled), -button:not(:disabled) { - cursor: pointer -} - -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner, -button::-moz-focus-inner { - padding: 0; - border-style: none -} - -input[type=checkbox], -input[type=radio] { - box-sizing: border-box; - padding: 0 -} - -input[type=date], -input[type=datetime-local], -input[type=month], -input[type=time] { - -webkit-appearance: listbox -} - -textarea { - overflow: auto; - resize: vertical -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0 -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal -} - -progress { - vertical-align: baseline -} - -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { - height: auto -} - -[type=search] { - outline-offset: -2px; - -webkit-appearance: none -} - -[type=search]::-webkit-search-decoration { - -webkit-appearance: none -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button -} - -output { - display: inline-block -} - -summary { - display: list-item; - cursor: pointer -} - -template { - display: none -} - -[hidden] { - display: none !important -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - margin-bottom: .5rem; - font-weight: 500; - line-height: 1.2 -} - -.h1, -h1 { - font-size: 2.5rem -} - -.h2, -h2 { - font-size: 2rem -} - -.h3, -h3 { - font-size: 1.75rem -} - -.h4, -h4 { - font-size: 1.5rem -} - -.h5, -h5 { - font-size: 1.25rem -} - -.h6, -h6 { - font-size: 1rem -} - -.lead { - font-size: 1.25rem; - font-weight: 300 -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2 -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2 -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.small, -small { - font-size: 80%; - font-weight: 400 -} - -.mark, -mark { - padding: .2em; - background-color: #fcf8e3 -} - -.list-unstyled { - padding-left: 0; - list-style: none -} - -.list-inline { - padding-left: 0; - list-style: none -} - -.list-inline-item { - display: inline-block -} - -.list-inline-item:not(:last-child) { - margin-right: .5rem -} - -.initialism { - font-size: 90%; - text-transform: uppercase -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d -} - -.blockquote-footer::before { - content: "\2014\00A0" -} - -.img-fluid { - max-width: 100%; - height: auto -} - -.img-thumbnail { - padding: .25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: .25rem; - max-width: 100%; - height: auto -} - -.figure { - display: inline-block -} - -.figure-img { - margin-bottom: .5rem; - line-height: 1 -} - -.figure-caption { - font-size: 90%; - color: #6c757d -} - -code { - font-size: 90%; - color: #bd4147; - word-break: break-word -} - -a>code { - color: inherit -} - -kbd { - padding: .2rem .4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: .2rem -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700 -} - -pre { - display: block; - font-size: 90%; - color: #212529 -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll -} - -.container { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -@media (min-width:576px) { - .container { - max-width: 540px - } - -} - -@media (min-width:768px) { - .container { - max-width: 720px - } - -} - -@media (min-width:992px) { - .container { - max-width: 960px - } - -} - -@media (min-width:1200px) { - .container { - max-width: 1140px - } - -} - -.container-fluid { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -.row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -10px; - margin-left: -10px -} - -.no-gutters { - margin-right: 0; - margin-left: 0 -} - -.no-gutters>.col, -.no-gutters>[class*=col-] { - padding-right: 0; - padding-left: 0 -} - -.col, -.col-1, -.col-10, -.col-11, -.col-12, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-auto, -.col-lg, -.col-lg-1, -.col-lg-10, -.col-lg-11, -.col-lg-12, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-auto, -.col-md, -.col-md-1, -.col-md-10, -.col-md-11, -.col-md-12, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-auto, -.col-sm, -.col-sm-1, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-auto, -.col-xl, -.col-xl-1, -.col-xl-10, -.col-xl-11, -.col-xl-12, -.col-xl-2, -.col-xl-3, -.col-xl-4, -.col-xl-5, -.col-xl-6, -.col-xl-7, -.col-xl-8, -.col-xl-9, -.col-xl-auto { - position: relative; - width: 100%; - padding-right: 10px; - padding-left: 10px -} - -.col { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% -} - -.col-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% -} - -.col-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% -} - -.col-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% -} - -.col-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% -} - -.col-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% -} - -.col-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% -} - -.col-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% -} - -.col-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% -} - -.col-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% -} - -.col-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% -} - -.col-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% -} - -.col-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% -} - -.col-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% -} - -.order-first { - -webkit-box-ordinal-group: 0; - order: -1 -} - -.order-last { - -webkit-box-ordinal-group: 14; - order: 13 -} - -.order-0 { - -webkit-box-ordinal-group: 1; - order: 0 -} - -.order-1 { - -webkit-box-ordinal-group: 2; - order: 1 -} - -.order-2 { - -webkit-box-ordinal-group: 3; - order: 2 -} - -.order-3 { - -webkit-box-ordinal-group: 4; - order: 3 -} - -.order-4 { - -webkit-box-ordinal-group: 5; - order: 4 -} - -.order-5 { - -webkit-box-ordinal-group: 6; - order: 5 -} - -.order-6 { - -webkit-box-ordinal-group: 7; - order: 6 -} - -.order-7 { - -webkit-box-ordinal-group: 8; - order: 7 -} - -.order-8 { - -webkit-box-ordinal-group: 9; - order: 8 -} - -.order-9 { - -webkit-box-ordinal-group: 10; - order: 9 -} - -.order-10 { - -webkit-box-ordinal-group: 11; - order: 10 -} - -.order-11 { - -webkit-box-ordinal-group: 12; - order: 11 -} - -.order-12 { - -webkit-box-ordinal-group: 13; - order: 12 -} - -.offset-1 { - margin-left: 8.33333% -} - -.offset-2 { - margin-left: 16.66667% -} - -.offset-3 { - margin-left: 25% -} - -.offset-4 { - margin-left: 33.33333% -} - -.offset-5 { - margin-left: 41.66667% -} - -.offset-6 { - margin-left: 50% -} - -.offset-7 { - margin-left: 58.33333% -} - -.offset-8 { - margin-left: 66.66667% -} - -.offset-9 { - margin-left: 75% -} - -.offset-10 { - margin-left: 83.33333% -} - -.offset-11 { - margin-left: 91.66667% -} - -@media (min-width:576px) { - .col-sm { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-sm-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-sm-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-sm-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-sm-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-sm-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-sm-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-sm-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-sm-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-sm-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-sm-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-sm-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-sm-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-sm-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-sm-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-sm-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-sm-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-sm-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-sm-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-sm-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-sm-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-sm-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-sm-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-sm-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-sm-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-sm-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-sm-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-sm-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-sm-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-sm-0 { - margin-left: 0 - } - - .offset-sm-1 { - margin-left: 8.33333% - } - - .offset-sm-2 { - margin-left: 16.66667% - } - - .offset-sm-3 { - margin-left: 25% - } - - .offset-sm-4 { - margin-left: 33.33333% - } - - .offset-sm-5 { - margin-left: 41.66667% - } - - .offset-sm-6 { - margin-left: 50% - } - - .offset-sm-7 { - margin-left: 58.33333% - } - - .offset-sm-8 { - margin-left: 66.66667% - } - - .offset-sm-9 { - margin-left: 75% - } - - .offset-sm-10 { - margin-left: 83.33333% - } - - .offset-sm-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:768px) { - .col-md { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-md-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-md-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-md-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-md-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-md-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-md-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-md-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-md-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-md-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-md-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-md-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-md-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-md-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-md-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-md-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-md-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-md-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-md-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-md-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-md-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-md-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-md-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-md-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-md-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-md-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-md-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-md-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-md-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-md-0 { - margin-left: 0 - } - - .offset-md-1 { - margin-left: 8.33333% - } - - .offset-md-2 { - margin-left: 16.66667% - } - - .offset-md-3 { - margin-left: 25% - } - - .offset-md-4 { - margin-left: 33.33333% - } - - .offset-md-5 { - margin-left: 41.66667% - } - - .offset-md-6 { - margin-left: 50% - } - - .offset-md-7 { - margin-left: 58.33333% - } - - .offset-md-8 { - margin-left: 66.66667% - } - - .offset-md-9 { - margin-left: 75% - } - - .offset-md-10 { - margin-left: 83.33333% - } - - .offset-md-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:992px) { - .col-lg { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-lg-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-lg-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-lg-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-lg-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-lg-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-lg-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-lg-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-lg-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-lg-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-lg-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-lg-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-lg-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-lg-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-lg-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-lg-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-lg-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-lg-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-lg-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-lg-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-lg-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-lg-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-lg-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-lg-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-lg-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-lg-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-lg-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-lg-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-lg-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-lg-0 { - margin-left: 0 - } - - .offset-lg-1 { - margin-left: 8.33333% - } - - .offset-lg-2 { - margin-left: 16.66667% - } - - .offset-lg-3 { - margin-left: 25% - } - - .offset-lg-4 { - margin-left: 33.33333% - } - - .offset-lg-5 { - margin-left: 41.66667% - } - - .offset-lg-6 { - margin-left: 50% - } - - .offset-lg-7 { - margin-left: 58.33333% - } - - .offset-lg-8 { - margin-left: 66.66667% - } - - .offset-lg-9 { - margin-left: 75% - } - - .offset-lg-10 { - margin-left: 83.33333% - } - - .offset-lg-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:1200px) { - .col-xl { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-xl-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-xl-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-xl-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-xl-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-xl-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-xl-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-xl-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-xl-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-xl-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-xl-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-xl-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-xl-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-xl-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-xl-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-xl-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-xl-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-xl-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-xl-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-xl-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-xl-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-xl-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-xl-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-xl-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-xl-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-xl-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-xl-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-xl-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-xl-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-xl-0 { - margin-left: 0 - } - - .offset-xl-1 { - margin-left: 8.33333% - } - - .offset-xl-2 { - margin-left: 16.66667% - } - - .offset-xl-3 { - margin-left: 25% - } - - .offset-xl-4 { - margin-left: 33.33333% - } - - .offset-xl-5 { - margin-left: 41.66667% - } - - .offset-xl-6 { - margin-left: 50% - } - - .offset-xl-7 { - margin-left: 58.33333% - } - - .offset-xl-8 { - margin-left: 66.66667% - } - - .offset-xl-9 { - margin-left: 75% - } - - .offset-xl-10 { - margin-left: 83.33333% - } - - .offset-xl-11 { - margin-left: 91.66667% - } - -} - -.table { - width: 100%; - margin-bottom: 1rem; - color: #212529 -} - -.table td, -.table th { - padding: 10px 15px; - vertical-align: top; - border-top: 1px solid #f2f4f9 -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #f2f4f9 -} - -.table tbody+tbody { - border-top: 2px solid #f2f4f9 -} - -.table-sm td, -.table-sm th { - padding: 10px 15px -} - -.table-bordered { - border: 1px solid #f2f4f9 -} - -.table-bordered td, -.table-bordered th { - border: 1px solid #f2f4f9 -} - -.table-bordered thead td, -.table-bordered thead th { - border-bottom-width: 2px -} - -.table-borderless tbody+tbody, -.table-borderless td, -.table-borderless th, -.table-borderless thead th { - border: 0 -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: #f6f7f9 -} - -.table-hover tbody tr:hover { - color: #212529; - background-color: #f6f7f9 -} - -.table-primary, -.table-primary>td, -.table-primary>th { - background-color: #b9d7b9 -} - -.table-primary tbody+tbody, -.table-primary td, -.table-primary th, -.table-primary thead th { - border-color: #7cb57e -} - -.table-hover .table-primary:hover { - background-color: #a9cea9 -} - -.table-hover .table-primary:hover>td, -.table-hover .table-primary:hover>th { - background-color: #a9cea9 -} - -.table-secondary, -.table-secondary>td, -.table-secondary>th { - background-color: #dbdbdb -} - -.table-secondary tbody+tbody, -.table-secondary td, -.table-secondary th, -.table-secondary thead th { - border-color: #bdbdbd -} - -.table-hover .table-secondary:hover { - background-color: #cecece -} - -.table-hover .table-secondary:hover>td, -.table-hover .table-secondary:hover>th { - background-color: #cecece -} - -.table-success, -.table-success>td, -.table-success>th { - background-color: #b8f6e1 -} - -.table-success tbody+tbody, -.table-success td, -.table-success th, -.table-success thead th { - border-color: #7aefc7 -} - -.table-hover .table-success:hover { - background-color: #a1f3d7 -} - -.table-hover .table-success:hover>td, -.table-hover .table-success:hover>th { - background-color: #a1f3d7 -} - -.table-info, -.table-info>td, -.table-info>th { - background-color: #d6d3fc -} - -.table-info tbody+tbody, -.table-info td, -.table-info th, -.table-info thead th { - border-color: #b3adfa -} - -.table-hover .table-info:hover { - background-color: #c0bbfa -} - -.table-hover .table-info:hover>td, -.table-hover .table-info:hover>th { - background-color: #c0bbfa -} - -.table-warning, -.table-warning>td, -.table-warning>th { - background-color: #fbdcd2 -} - -.table-warning tbody+tbody, -.table-warning td, -.table-warning th, -.table-warning thead th { - border-color: #f7beac -} - -.table-hover .table-warning:hover { - background-color: #f9cabb -} - -.table-hover .table-warning:hover>td, -.table-hover .table-warning:hover>th { - background-color: #f9cabb -} - -.table-danger, -.table-danger>td, -.table-danger>th { - background-color: #ffd2d4 -} - -.table-danger tbody+tbody, -.table-danger td, -.table-danger th, -.table-danger thead th { - border-color: #ffacaf -} - -.table-hover .table-danger:hover { - background-color: #ffb9bc -} - -.table-hover .table-danger:hover>td, -.table-hover .table-danger:hover>th { - background-color: #ffb9bc -} - -.table-light, -.table-light>td, -.table-light>th { - background-color: #f6f6f6 -} - -.table-light tbody+tbody, -.table-light td, -.table-light th, -.table-light thead th { - border-color: #eee -} - -.table-hover .table-light:hover { - background-color: #e9e9e9 -} - -.table-hover .table-light:hover>td, -.table-hover .table-light:hover>th { - background-color: #e9e9e9 -} - -.table-dark, -.table-dark>td, -.table-dark>th { - background-color: #d8d9da -} - -.table-dark tbody+tbody, -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #b7b8ba -} - -.table-hover .table-dark:hover { - background-color: #cbccce -} - -.table-hover .table-dark:hover>td, -.table-hover .table-dark:hover>th { - background-color: #cbccce -} - -.table-white, -.table-white>td, -.table-white>th { - background-color: #fff -} - -.table-white tbody+tbody, -.table-white td, -.table-white th, -.table-white thead th { - border-color: #fff -} - -.table-hover .table-white:hover { - background-color: #f2f2f2 -} - -.table-hover .table-white:hover>td, -.table-hover .table-white:hover>th { - background-color: #f2f2f2 -} - -.table-orange, -.table-orange>td, -.table-orange>th { - background-color: #ffe6b8 -} - -.table-orange tbody+tbody, -.table-orange td, -.table-orange th, -.table-orange thead th { - border-color: #ffd17a -} - -.table-hover .table-orange:hover { - background-color: #ffdd9f -} - -.table-hover .table-orange:hover>td, -.table-hover .table-orange:hover>th { - background-color: #ffdd9f -} - -.table-active, -.table-active>td, -.table-active>th { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover>td, -.table-hover .table-active:hover>th { - background-color: rgba(0, 0, 0, .075) -} - -.table .thead-dark th { - color: #fff; - background-color: #343a40; - border-color: #454d55 -} - -.table .thead-light th { - color: #495057; - background-color: #e1e4e6; - border-color: #f2f4f9 -} - -.table-dark { - color: #fff; - background-color: #343a40 -} - -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #454d55 -} - -.table-dark.table-bordered { - border: 0 -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, .05) -} - -.table-dark.table-hover tbody tr:hover { - color: #fff; - background-color: rgba(255, 255, 255, .075) -} - -@media (max-width:575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-sm>.table-bordered { - border: 0 - } - -} - -@media (max-width:767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-md>.table-bordered { - border: 0 - } - -} - -@media (max-width:991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-lg>.table-bordered { - border: 0 - } - -} - -@media (max-width:1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-xl>.table-bordered { - border: 0 - } - -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch -} - -.table-responsive>.table-bordered { - border: 0 -} - -.form-control { - display: block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: .25rem; - -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .form-control { - -webkit-transition: none; - transition: none - } - -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0 -} - -.form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control:disabled, -.form-control[readonly] { - background-color: #f8f9fa; - opacity: 1 -} - -select.form-control:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.form-control-file, -.form-control-range { - display: block; - width: 100% -} - -.col-form-label { - padding-top: calc(.375rem + 1px); - padding-bottom: calc(.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5 -} - -.col-form-label-lg { - padding-top: calc(.5rem + 1px); - padding-bottom: calc(.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5 -} - -.col-form-label-sm { - padding-top: calc(.25rem + 1px); - padding-bottom: calc(.25rem + 1px); - font-size: .875rem; - line-height: 1.5 -} - -.form-control-plaintext { - display: block; - width: 100%; - padding-top: .375rem; - padding-bottom: .375rem; - margin-bottom: 0; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0 -} - -.form-control-plaintext.form-control-lg, -.form-control-plaintext.form-control-sm { - padding-right: 0; - padding-left: 0 -} - -.form-control-sm { - height: calc(1.5em + .5rem + 2px); - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.form-control-lg { - height: calc(1.5em + 1rem + 2px); - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -select.form-control[multiple], -select.form-control[size] { - height: auto -} - -textarea.form-control { - height: auto -} - -.form-group { - margin-bottom: 1rem -} - -.form-text { - display: block; - margin-top: .25rem -} - -.form-row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px -} - -.form-row>.col, -.form-row>[class*=col-] { - padding-right: 5px; - padding-left: 5px -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem -} - -.form-check-input { - position: absolute; - margin-top: .3rem; - margin-left: -1.25rem -} - -.form-check-input:disabled~.form-check-label { - color: #adb5bd -} - -.form-check-label { - margin-bottom: 0 -} - -.form-check-inline { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-align: center; - align-items: center; - padding-left: 0; - margin-right: .75rem -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: .3125rem; - margin-left: 0 -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #28a745 -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(40, 167, 69, .9); - border-radius: .25rem -} - -.form-control.is-valid, -.was-validated .form-control:valid { - border-color: #28a745; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-valid:focus, -.was-validated .form-control:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.form-control.is-valid~.valid-feedback, -.form-control.is-valid~.valid-tooltip, -.was-validated .form-control:valid~.valid-feedback, -.was-validated .form-control:valid~.valid-tooltip { - display: block -} - -.was-validated textarea.form-control:valid, -textarea.form-control.is-valid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-valid, -.was-validated .custom-select:valid { - border-color: #28a745; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-valid:focus, -.was-validated .custom-select:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-select.is-valid~.valid-feedback, -.custom-select.is-valid~.valid-tooltip, -.was-validated .custom-select:valid~.valid-feedback, -.was-validated .custom-select:valid~.valid-tooltip { - display: block -} - -.form-control-file.is-valid~.valid-feedback, -.form-control-file.is-valid~.valid-tooltip, -.was-validated .form-control-file:valid~.valid-feedback, -.was-validated .form-control-file:valid~.valid-tooltip { - display: block -} - -.form-check-input.is-valid~.form-check-label, -.was-validated .form-check-input:valid~.form-check-label { - color: #28a745 -} - -.form-check-input.is-valid~.valid-feedback, -.form-check-input.is-valid~.valid-tooltip, -.was-validated .form-check-input:valid~.valid-feedback, -.was-validated .form-check-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid~.custom-control-label, -.was-validated .custom-control-input:valid~.custom-control-label { - color: #28a745 -} - -.custom-control-input.is-valid~.custom-control-label::before, -.was-validated .custom-control-input:valid~.custom-control-label::before { - border-color: #28a745 -} - -.custom-control-input.is-valid~.valid-feedback, -.custom-control-input.is-valid~.valid-tooltip, -.was-validated .custom-control-input:valid~.valid-feedback, -.was-validated .custom-control-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid:checked~.custom-control-label::before, -.was-validated .custom-control-input:valid:checked~.custom-control-label::before { - border-color: #34ce57; - background-color: #34ce57 -} - -.custom-control-input.is-valid:focus~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before { - border-color: #28a745 -} - -.custom-file-input.is-valid~.custom-file-label, -.was-validated .custom-file-input:valid~.custom-file-label { - border-color: #28a745 -} - -.custom-file-input.is-valid~.valid-feedback, -.custom-file-input.is-valid~.valid-tooltip, -.was-validated .custom-file-input:valid~.valid-feedback, -.was-validated .custom-file-input:valid~.valid-tooltip { - display: block -} - -.custom-file-input.is-valid:focus~.custom-file-label, -.was-validated .custom-file-input:valid:focus~.custom-file-label { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #dc3545 -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(220, 53, 69, .9); - border-radius: .25rem -} - -.form-control.is-invalid, -.was-validated .form-control:invalid { - border-color: #dc3545; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-invalid:focus, -.was-validated .form-control:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-control.is-invalid~.invalid-feedback, -.form-control.is-invalid~.invalid-tooltip, -.was-validated .form-control:invalid~.invalid-feedback, -.was-validated .form-control:invalid~.invalid-tooltip { - display: block -} - -.was-validated textarea.form-control:invalid, -textarea.form-control.is-invalid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-invalid, -.was-validated .custom-select:invalid { - border-color: #dc3545; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-invalid:focus, -.was-validated .custom-select:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-select.is-invalid~.invalid-feedback, -.custom-select.is-invalid~.invalid-tooltip, -.was-validated .custom-select:invalid~.invalid-feedback, -.was-validated .custom-select:invalid~.invalid-tooltip { - display: block -} - -.form-control-file.is-invalid~.invalid-feedback, -.form-control-file.is-invalid~.invalid-tooltip, -.was-validated .form-control-file:invalid~.invalid-feedback, -.was-validated .form-control-file:invalid~.invalid-tooltip { - display: block -} - -.form-check-input.is-invalid~.form-check-label, -.was-validated .form-check-input:invalid~.form-check-label { - color: #dc3545 -} - -.form-check-input.is-invalid~.invalid-feedback, -.form-check-input.is-invalid~.invalid-tooltip, -.was-validated .form-check-input:invalid~.invalid-feedback, -.was-validated .form-check-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid~.custom-control-label, -.was-validated .custom-control-input:invalid~.custom-control-label { - color: #dc3545 -} - -.custom-control-input.is-invalid~.custom-control-label::before, -.was-validated .custom-control-input:invalid~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-control-input.is-invalid~.invalid-feedback, -.custom-control-input.is-invalid~.invalid-tooltip, -.was-validated .custom-control-input:invalid~.invalid-feedback, -.was-validated .custom-control-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid:checked~.custom-control-label::before, -.was-validated .custom-control-input:invalid:checked~.custom-control-label::before { - border-color: #e4606d; - background-color: #e4606d -} - -.custom-control-input.is-invalid:focus~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.custom-file-label, -.was-validated .custom-file-input:invalid~.custom-file-label { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.invalid-feedback, -.custom-file-input.is-invalid~.invalid-tooltip, -.was-validated .custom-file-input:invalid~.invalid-feedback, -.was-validated .custom-file-input:invalid~.invalid-tooltip { - display: block -} - -.custom-file-input.is-invalid:focus~.custom-file-label, -.was-validated .custom-file-input:invalid:focus~.custom-file-label { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-inline { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center -} - -.form-inline .form-check { - width: 100% -} - -@media (min-width:576px) { - .form-inline label { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - margin-bottom: 0 - } - - .form-inline .form-group { - display: -webkit-box; - display: flex; - -webkit-box-flex: 0; - flex: 0 0 auto; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center; - margin-bottom: 0 - } - - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - - .form-inline .form-control-plaintext { - display: inline-block - } - - .form-inline .custom-select, - .form-inline .input-group { - width: auto - } - - .form-inline .form-check { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: auto; - padding-left: 0 - } - - .form-inline .form-check-input { - position: relative; - flex-shrink: 0; - margin-top: 0; - margin-right: .25rem; - margin-left: 0 - } - - .form-inline .custom-control { - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center - } - - .form-inline .custom-control-label { - margin-bottom: 0 - } - -} - -.btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .btn { - -webkit-transition: none; - transition: none - } - -} - -.btn:hover { - color: #212529; - text-decoration: none -} - -.btn.focus, -.btn:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.btn.disabled, -.btn:disabled { - opacity: .65 -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none -} - -.btn-primary { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:hover { - color: #fff; - background-color: #034b04; - border-color: #023f03 -} - -.btn-primary.focus, -.btn-primary:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-primary.disabled, -.btn-primary:disabled { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:not(:disabled):not(.disabled).active, -.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle { - color: #fff; - background-color: #023f03; - border-color: #023203 -} - -.btn-primary:not(:disabled):not(.disabled).active:focus, -.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-secondary { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:hover { - color: #fff; - background-color: #6d6d6d; - border-color: #676767 -} - -.btn-secondary.focus, -.btn-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-secondary.disabled, -.btn-secondary:disabled { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:not(:disabled):not(.disabled).active, -.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle { - color: #fff; - background-color: #676767; - border-color: #606060 -} - -.btn-secondary:not(:disabled):not(.disabled).active:focus, -.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-success { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-success:hover { - color: #fff; - background-color: #00ba7a; - border-color: #00ad72 -} - -.btn-success.focus, -.btn-success:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-success.disabled, -.btn-success:disabled { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-success:not(:disabled):not(.disabled).active, -.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle { - color: #fff; - background-color: #00ad72; - border-color: #00a069 -} - -.btn-success:not(:disabled):not(.disabled).active:focus, -.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-info { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:hover { - color: #fff; - background-color: #4a3df4; - border-color: #3f31f3 -} - -.btn-info.focus, -.btn-info:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-info.disabled, -.btn-info:disabled { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:not(:disabled):not(.disabled).active, -.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle { - color: #fff; - background-color: #3f31f3; - border-color: #3425f3 -} - -.btn-info:not(:disabled):not(.disabled).active:focus, -.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-warning { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:hover { - color: #fff; - background-color: #ed673c; - border-color: #ec5e30 -} - -.btn-warning.focus, -.btn-warning:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-warning.disabled, -.btn-warning:disabled { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:not(:disabled):not(.disabled).active, -.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle { - color: #fff; - background-color: #ec5e30; - border-color: #eb5425 -} - -.btn-warning:not(:disabled):not(.disabled).active:focus, -.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-danger { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:hover { - color: #fff; - background-color: #ff3941; - border-color: #ff2c35 -} - -.btn-danger.focus, -.btn-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-danger.disabled, -.btn-danger:disabled { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:not(:disabled):not(.disabled).active, -.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle { - color: #fff; - background-color: #ff2c35; - border-color: #ff1f29 -} - -.btn-danger:not(:disabled):not(.disabled).active:focus, -.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-light { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:hover { - color: #212529; - background-color: #ccc; - border-color: #c6c6c6 -} - -.btn-light.focus, -.btn-light:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-light.disabled, -.btn-light:disabled { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:not(:disabled):not(.disabled).active, -.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle { - color: #212529; - background-color: #c6c6c6; - border-color: #bfbfbf -} - -.btn-light:not(:disabled):not(.disabled).active:focus, -.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-dark { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:hover { - color: #fff; - background-color: #616367; - border-color: #5b5d61 -} - -.btn-dark.focus, -.btn-dark:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-dark.disabled, -.btn-dark:disabled { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:not(:disabled):not(.disabled).active, -.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle { - color: #fff; - background-color: #5b5d61; - border-color: #55575a -} - -.btn-dark:not(:disabled):not(.disabled).active:focus, -.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-white { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:hover { - color: #212529; - background-color: #ececec; - border-color: #e6e6e6 -} - -.btn-white.focus, -.btn-white:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-white.disabled, -.btn-white:disabled { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:not(:disabled):not(.disabled).active, -.btn-white:not(:disabled):not(.disabled):active,.show>.btn-white.dropdown-toggle { - color: #212529; - background-color: #e6e6e6; - border-color: #dfdfdf -} - -.btn-white:not(:disabled):not(.disabled).active:focus, -.btn-white:not(:disabled):not(.disabled):active:focus,.show>.btn-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-orange { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-orange:hover { - color: #fff; - background-color: #d98d00; - border-color: #cc8500 -} - -.btn-orange.focus, -.btn-orange:focus { - box-shadow: 0 0 0 .2rem rgba(222, 147, 6, .5) -} - -.btn-orange.disabled, -.btn-orange:disabled { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-orange:not(:disabled):not(.disabled).active, -.btn-orange:not(:disabled):not(.disabled):active,.show>.btn-orange.dropdown-toggle { - color: #fff; - background-color: #cc8500; - border-color: #bf7d00 -} - -.btn-orange:not(:disabled):not(.disabled).active:focus, -.btn-orange:not(:disabled):not(.disabled):active:focus,.show>.btn-orange.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(222, 147, 6, .5) -} - -.btn-outline-primary { - color: #047006; - border-color: #047006 -} - -.btn-outline-primary:hover { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary.focus, -.btn-outline-primary:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-primary.disabled, -.btn-outline-primary:disabled { - color: #047006; - background-color: transparent -} - -.btn-outline-primary:not(:disabled):not(.disabled).active, -.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-secondary { - color: grey; - border-color: grey -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary.focus, -.btn-outline-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-secondary.disabled, -.btn-outline-secondary:disabled { - color: grey; - background-color: transparent -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active, -.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-success { - color: #00e093; - border-color: #00e093 -} - -.btn-outline-success:hover { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-outline-success.focus, -.btn-outline-success:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-success.disabled, -.btn-outline-success:disabled { - color: #00e093; - background-color: transparent -} - -.btn-outline-success:not(:disabled):not(.disabled).active, -.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #00e093; - border-color: #00e093 -} - -.btn-outline-success:not(:disabled):not(.disabled).active:focus, -.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-info { - color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:hover { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info.focus, -.btn-outline-info:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-info.disabled, -.btn-outline-info:disabled { - color: #6c61f6; - background-color: transparent -} - -.btn-outline-info:not(:disabled):not(.disabled).active, -.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:not(:disabled):not(.disabled).active:focus, -.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-warning { - color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning.focus, -.btn-outline-warning:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-warning.disabled, -.btn-outline-warning:disabled { - color: #f0825f; - background-color: transparent -} - -.btn-outline-warning:not(:disabled):not(.disabled).active, -.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-danger { - color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger.focus, -.btn-outline-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-danger.disabled, -.btn-outline-danger:disabled { - color: #ff5f66; - background-color: transparent -} - -.btn-outline-danger:not(:disabled):not(.disabled).active, -.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-light { - color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:hover { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light.focus, -.btn-outline-light:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-light.disabled, -.btn-outline-light:disabled { - color: #dfdfdf; - background-color: transparent -} - -.btn-outline-light:not(:disabled):not(.disabled).active, -.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:not(:disabled):not(.disabled).active:focus, -.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-dark { - color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark.focus, -.btn-outline-dark:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-dark.disabled, -.btn-outline-dark:disabled { - color: #74767b; - background-color: transparent -} - -.btn-outline-dark:not(:disabled):not(.disabled).active, -.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-white { - color: #fff; - border-color: #fff -} - -.btn-outline-white:hover { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white.focus, -.btn-outline-white:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-outline-white.disabled, -.btn-outline-white:disabled { - color: #fff; - background-color: transparent -} - -.btn-outline-white:not(:disabled):not(.disabled).active, -.btn-outline-white:not(:disabled):not(.disabled):active,.show>.btn-outline-white.dropdown-toggle { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white:not(:disabled):not(.disabled).active:focus, -.btn-outline-white:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-outline-orange { - color: #ffa600; - border-color: #ffa600 -} - -.btn-outline-orange:hover { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-outline-orange.focus, -.btn-outline-orange:focus { - box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5) -} - -.btn-outline-orange.disabled, -.btn-outline-orange:disabled { - color: #ffa600; - background-color: transparent -} - -.btn-outline-orange:not(:disabled):not(.disabled).active, -.btn-outline-orange:not(:disabled):not(.disabled):active,.show>.btn-outline-orange.dropdown-toggle { - color: #212529; - background-color: #ffa600; - border-color: #ffa600 -} - -.btn-outline-orange:not(:disabled):not(.disabled).active:focus, -.btn-outline-orange:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-orange.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5) -} - -.btn-link { - font-weight: 400; - color: #047006; - text-decoration: none -} - -.btn-link:hover { - color: #012602; - text-decoration: underline -} - -.btn-link.focus, -.btn-link:focus { - text-decoration: underline; - box-shadow: none -} - -.btn-link.disabled, -.btn-link:disabled { - color: #6c757d; - pointer-events: none -} - -.btn-group-lg>.btn, -.btn-lg { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.btn-group-sm>.btn, -.btn-sm { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.btn-block { - display: block; - width: 100% -} - -.btn-block+.btn-block { - margin-top: .5rem -} - -input[type=button].btn-block, -input[type=reset].btn-block, -input[type=submit].btn-block { - width: 100% -} - -.fade { - -webkit-transition: opacity .15s linear; - transition: opacity .15s linear -} - -@media (prefers-reduced-motion:reduce) { - .fade { - -webkit-transition: none; - transition: none - } - -} - -.fade:not(.show) { - opacity: 0 -} - -.collapse:not(.show) { - display: none -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height .35s ease; - transition: height .35s ease -} - -@media (prefers-reduced-motion:reduce) { - .collapsing { - -webkit-transition: none; - transition: none - } - -} - -.dropdown, -.dropleft, -.dropright, -.dropup { - position: relative -} - -.dropdown-toggle { - white-space: nowrap -} - -.dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid; - border-right: .3em solid transparent; - border-bottom: 0; - border-left: .3em solid transparent -} - -.dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: .5rem 0; - margin: .125rem 0 0; - font-size: 1rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: .25rem -} - -.dropdown-menu-left { - right: auto; - left: 0 -} - -.dropdown-menu-right { - right: 0; - left: auto -} - -@media (min-width:576px) { - .dropdown-menu-sm-left { - right: auto; - left: 0 - } - - .dropdown-menu-sm-right { - right: 0; - left: auto - } - -} - -@media (min-width:768px) { - .dropdown-menu-md-left { - right: auto; - left: 0 - } - - .dropdown-menu-md-right { - right: 0; - left: auto - } - -} - -@media (min-width:992px) { - .dropdown-menu-lg-left { - right: auto; - left: 0 - } - - .dropdown-menu-lg-right { - right: 0; - left: auto - } - -} - -@media (min-width:1200px) { - .dropdown-menu-xl-left { - right: auto; - left: 0 - } - - .dropdown-menu-xl-right { - right: 0; - left: auto - } - -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: .125rem -} - -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '0 0 8 8'; - border-top: 0; - border-right: .3em solid transparent; - border-bottom: .3em solid; - border-left: .3em solid transparent -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: .125rem -} - -.dropright .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '%2328a745'; - border-top: .3em solid transparent; - border-right: 0; - border-bottom: .3em solid transparent; - border-left: .3em solid -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-toggle::after { - vertical-align: 0 -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: .125rem -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.dropleft .dropdown-toggle::after { - display: none -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - margin-right: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid transparent; - border-right: .3em solid; - border-bottom: .3em solid transparent -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0 -} - -.dropdown-menu[x-placement^=bottom], -.dropdown-menu[x-placement^=left], -.dropdown-menu[x-placement^=right], -.dropdown-menu[x-placement^=top] { - right: auto; - bottom: auto -} - -.dropdown-divider { - height: 0; - margin: .5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef -} - -.dropdown-item { - display: block; - width: 100%; - padding: .25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0 -} - -.dropdown-item:focus, -.dropdown-item:hover { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa -} - -.dropdown-item.active, -.dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #007bff -} - -.dropdown-item.disabled, -.dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent -} - -.dropdown-menu.show { - display: block -} - -.dropdown-header { - display: block; - padding: .5rem 1.5rem; - margin-bottom: 0; - font-size: .875rem; - color: #6c757d; - white-space: nowrap -} - -.dropdown-item-text { - display: block; - padding: .25rem 1.5rem; - color: #212529 -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: -webkit-inline-box; - display: inline-flex; - vertical-align: middle -} - -.btn-group-vertical>.btn, -.btn-group>.btn { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto -} - -.btn-group-vertical>.btn:hover, -.btn-group>.btn:hover { - z-index: 1 -} - -.btn-group-vertical>.btn.active, -.btn-group-vertical>.btn:active, -.btn-group-vertical>.btn:focus, -.btn-group>.btn.active, -.btn-group>.btn:active, -.btn-group>.btn:focus { - z-index: 1 -} - -.btn-toolbar { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.btn-toolbar .input-group { - width: auto -} - -.btn-group>.btn-group:not(:first-child), -.btn-group>.btn:not(:first-child) { - margin-left: -1px -} - -.btn-group>.btn-group:not(:last-child)>.btn, -.btn-group>.btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.btn-group>.btn-group:not(:first-child)>.btn, -.btn-group>.btn:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.dropdown-toggle-split { - padding-right: .5625rem; - padding-left: .5625rem -} - -.dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0 -} - -.btn-group-sm>.btn+.dropdown-toggle-split, -.btn-sm+.dropdown-toggle-split { - padding-right: .375rem; - padding-left: .375rem -} - -.btn-group-lg>.btn+.dropdown-toggle-split, -.btn-lg+.dropdown-toggle-split { - padding-right: .75rem; - padding-left: .75rem -} - -.btn-group-vertical { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: center; - justify-content: center -} - -.btn-group-vertical>.btn, -.btn-group-vertical>.btn-group { - width: 100% -} - -.btn-group-vertical>.btn-group:not(:first-child), -.btn-group-vertical>.btn:not(:first-child) { - margin-top: -1px -} - -.btn-group-vertical>.btn-group:not(:last-child)>.btn, -.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn-group:not(:first-child)>.btn, -.btn-group-vertical>.btn:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.btn-group-toggle>.btn, -.btn-group-toggle>.btn-group>.btn { - margin-bottom: 0 -} - -.btn-group-toggle>.btn input[type=checkbox], -.btn-group-toggle>.btn input[type=radio], -.btn-group-toggle>.btn-group>.btn input[type=checkbox], -.btn-group-toggle>.btn-group>.btn input[type=radio] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none -} - -.input-group { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: stretch; - align-items: stretch; - width: 100% -} - -.input-group>.custom-file, -.input-group>.custom-select, -.input-group>.form-control, -.input-group>.form-control-plaintext { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0 -} - -.input-group>.custom-file+.custom-file, -.input-group>.custom-file+.custom-select, -.input-group>.custom-file+.form-control, -.input-group>.custom-select+.custom-file, -.input-group>.custom-select+.custom-select, -.input-group>.custom-select+.form-control, -.input-group>.form-control+.custom-file, -.input-group>.form-control+.custom-select, -.input-group>.form-control+.form-control, -.input-group>.form-control-plaintext+.custom-file, -.input-group>.form-control-plaintext+.custom-select, -.input-group>.form-control-plaintext+.form-control { - margin-left: -1px -} - -.input-group>.custom-file .custom-file-input:focus~.custom-file-label, -.input-group>.custom-select:focus, -.input-group>.form-control:focus { - z-index: 3 -} - -.input-group>.custom-file .custom-file-input:focus { - z-index: 4 -} - -.input-group>.custom-select:not(:last-child), -.input-group>.form-control:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-select:not(:first-child), -.input-group>.form-control:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group>.custom-file { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center -} - -.input-group>.custom-file:not(:last-child) .custom-file-label, -.input-group>.custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group-append, -.input-group-prepend { - display: -webkit-box; - display: flex -} - -.input-group-append .btn, -.input-group-prepend .btn { - position: relative; - z-index: 2 -} - -.input-group-append .btn:focus, -.input-group-prepend .btn:focus { - z-index: 3 -} - -.input-group-append .btn+.btn, -.input-group-append .btn+.input-group-text, -.input-group-append .input-group-text+.btn, -.input-group-append .input-group-text+.input-group-text, -.input-group-prepend .btn+.btn, -.input-group-prepend .btn+.input-group-text, -.input-group-prepend .input-group-text+.btn, -.input-group-prepend .input-group-text+.input-group-text { - margin-left: -1px -} - -.input-group-prepend { - margin-right: -1px -} - -.input-group-append { - margin-left: -1px -} - -.input-group-text { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .375rem .75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.input-group-text input[type=checkbox], -.input-group-text input[type=radio] { - margin-top: 0 -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control:not(textarea) { - height: calc(1.5em + 1rem + 2px) -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control, -.input-group-lg>.input-group-append>.btn, -.input-group-lg>.input-group-append>.input-group-text, -.input-group-lg>.input-group-prepend>.btn, -.input-group-lg>.input-group-prepend>.input-group-text { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control:not(textarea) { - height: calc(1.5em + .5rem + 2px) -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control, -.input-group-sm>.input-group-append>.btn, -.input-group-sm>.input-group-append>.input-group-text, -.input-group-sm>.input-group-prepend>.btn, -.input-group-sm>.input-group-prepend>.input-group-text { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.input-group-lg>.custom-select, -.input-group-sm>.custom-select { - padding-right: 1.75rem -} - -.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle), -.input-group>.input-group-append:last-child>.input-group-text:not(:last-child), -.input-group>.input-group-append:not(:last-child)>.btn, -.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.input-group-append>.btn, -.input-group>.input-group-append>.input-group-text, -.input-group>.input-group-prepend:first-child>.btn:not(:first-child), -.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child), -.input-group>.input-group-prepend:not(:first-child)>.btn, -.input-group>.input-group-prepend:not(:first-child)>.input-group-text { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.custom-control { - position: relative; - display: block; - min-height: 1.7rem; - padding-left: 1.9rem -} - -.custom-control-inline { - display: -webkit-inline-box; - display: inline-flex; - margin-right: 1rem -} - -.custom-control-input { - position: absolute; - z-index: -1; - opacity: 0 -} - -.custom-control-input:checked~.custom-control-label::before { - color: #fff; - border-color: #00e093; - background-color: #00e093 -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-control-input:focus:not(:checked)~.custom-control-label::before { - border-color: #80bdff -} - -.custom-control-input:not(:disabled):active~.custom-control-label::before { - color: #fff; - background-color: #b3d7ff; - border-color: #b3d7ff -} - -.custom-control-input:disabled~.custom-control-label { - color: #6c757d -} - -.custom-control-input:disabled~.custom-control-label::before { - background-color: #e9ecef -} - -.custom-control-label { - position: relative; - margin-bottom: 0; - vertical-align: top -} - -.custom-control-label::before { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - pointer-events: none; - content: '0 0 4 5'; - background-color: #fff; - border: #e1e5f1 solid 1px -} - -.custom-control-label::after { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - content: '%23343a40'; - background: no-repeat 50%/50% 50% -} - -.custom-checkbox .custom-control-label::before { - border-radius: .25rem -} - -.custom-checkbox .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before { - border-color: #007bff; - background-color: #007bff -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-radio .custom-control-label::before { - border-radius: 50% -} - -.custom-radio .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3ccircle r=!string!fill=!string!/%3e%3c/svg%3e") -} - -.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-switch { - padding-left: 2.8rem -} - -.custom-switch .custom-control-label::before { - left: -2.8rem; - width: 2.3rem; - pointer-events: all; - border-radius: 25px -} - -.custom-switch .custom-control-label::after { - top: calc(.15rem + 2px); - left: calc(-2.8rem + 2px); - width: 1.1rem; - height: 1.1rem; - background-color: #e1e5f1; - border-radius: 25px; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-switch .custom-control-label::after { - -webkit-transition: none; - transition: none - } - -} - -.custom-switch .custom-control-input:checked~.custom-control-label::after { - background-color: #fff; - -webkit-transform: translateX(.9rem); - transform: translateX(.9rem) -} - -.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem 1.75rem .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: .25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-select:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.custom-select[multiple], -.custom-select[size]:not([size='M2 0L0 2h4zm0 5L0 3h4z']) { - height: auto; - padding-right: .75rem; - background-image: none -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef -} - -.custom-select::-ms-expand { - display: none -} - -.custom-select-sm { - height: calc(1.5em + .5rem + 2px); - padding-top: .25rem; - padding-bottom: .25rem; - padding-left: .5rem; - font-size: .875rem -} - -.custom-select-lg { - height: calc(1.5em + 1rem + 2px); - padding-top: .5rem; - padding-bottom: .5rem; - padding-left: 1rem; - font-size: 1.25rem -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin-bottom: 0 -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin: 0; - opacity: 0 -} - -.custom-file-input:focus~.custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-file-input:disabled~.custom-file-label { - background-color: #e9ecef -} - -.custom-file-input:lang(en)~.custom-file-label::after { - content: 'http://www.w3.org/2000/svg' -} - -.custom-file-input~.custom-file-label[data-browse]::after { - content: attr(data-browse) -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(1.5em + .75rem); - padding: .375rem .75rem; - line-height: 1.5; - color: #495057; - content: '0 0 8 8'; - background-color: #e9ecef; - border-left: inherit; - border-radius: 0 .25rem .25rem 0 -} - -.custom-range { - width: 100%; - height: calc(1rem + .4rem); - padding: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-range:focus { - outline: 0 -} - -.custom-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-ms-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range::-moz-focus-outer { - border: 0 -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -webkit-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -moz-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-moz-range-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-moz-range-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - margin-top: 0; - margin-right: .2rem; - margin-left: .2rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-ms-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-ms-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: .5rem -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-webkit-slider-runnable-track { - cursor: default -} - -.custom-range:disabled::-moz-range-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-moz-range-track { - cursor: default -} - -.custom-range:disabled::-ms-thumb { - background-color: #adb5bd -} - -.custom-control-label::before, -.custom-file-label, -.custom-select { - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-control-label::before, - .custom-file-label, - .custom-select { - -webkit-transition: none; - transition: none - } - -} - -.nav { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.nav-link { - display: block; - padding: .5rem 1rem -} - -.nav-link:focus, -.nav-link:hover { - text-decoration: none -} - -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6 -} - -.nav-tabs .nav-item { - margin-bottom: -1px -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 2px; - border-top-right-radius: 2px -} - -.nav-tabs .nav-link:focus, -.nav-tabs .nav-link:hover { - border-color: #e9ecef #e9ecef #dee2e6 -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent -} - -.nav-tabs .nav-item.show .nav-link, -.nav-tabs .nav-link.active { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.nav-pills .nav-link { - border-radius: 2px -} - -.nav-pills .nav-link.active, -.nav-pills .show>.nav-link { - color: #fff; - background-color: #007bff -} - -.nav-fill .nav-item { - -webkit-box-flex: 1; - flex: 1 1 auto; - text-align: center -} - -.nav-justified .nav-item { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - text-align: center -} - -.tab-content>.tab-pane { - display: none -} - -.tab-content>.active { - display: block -} - -.navbar { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between; - padding: .5rem 1rem -} - -.navbar>.container, -.navbar>.container-fluid { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between -} - -.navbar-brand { - display: inline-block; - padding-top: .3125rem; - padding-bottom: .3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap -} - -.navbar-brand:focus, -.navbar-brand:hover { - text-decoration: none -} - -.navbar-nav { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0 -} - -.navbar-nav .dropdown-menu { - position: static; - float: none -} - -.navbar-text { - display: inline-block; - padding-top: .5rem; - padding-bottom: .5rem -} - -.navbar-collapse { - flex-basis: 100%; - -webkit-box-flex: 1; - flex-grow: 1; - -webkit-box-align: center; - align-items: center -} - -.navbar-toggler { - padding: .25rem .75rem; - font-size: 1.25rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: .25rem -} - -.navbar-toggler:focus, -.navbar-toggler:hover { - text-decoration: none -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: '%2328a745'; - background: no-repeat center center; - background-size: 100% 100% -} - -@media (max-width:575.98px) { - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:576px) { - .navbar-expand-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-sm .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-sm .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-sm .navbar-toggler { - display: none - } - -} - -@media (max-width:767.98px) { - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:768px) { - .navbar-expand-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-md .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-md .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-md .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-md .navbar-toggler { - display: none - } - -} - -@media (max-width:991.98px) { - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:992px) { - .navbar-expand-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-lg .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-lg .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-lg .navbar-toggler { - display: none - } - -} - -@media (max-width:1199.98px) { - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:1200px) { - .navbar-expand-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-xl .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-xl .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-xl .navbar-toggler { - display: none - } - -} - -.navbar-expand { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - padding-right: 0; - padding-left: 0 -} - -.navbar-expand .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - flex-wrap: nowrap -} - -.navbar-expand .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto -} - -.navbar-expand .navbar-toggler { - display: none -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-brand:focus, -.navbar-light .navbar-brand:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-nav .nav-link:focus, -.navbar-light .navbar-nav .nav-link:hover { - color: rgba(0, 0, 0, .7) -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, .3) -} - -.navbar-light .navbar-nav .active>.nav-link, -.navbar-light .navbar-nav .nav-link.active, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .show>.nav-link { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, .5); - border-color: rgba(0, 0, 0, .1) -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-text a:focus, -.navbar-light .navbar-text a:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-dark .navbar-brand { - color: #fff -} - -.navbar-dark .navbar-brand:focus, -.navbar-dark .navbar-brand:hover { - color: #fff -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-nav .nav-link:focus, -.navbar-dark .navbar-nav .nav-link:hover { - color: rgba(255, 255, 255, .75) -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, .25) -} - -.navbar-dark .navbar-nav .active>.nav-link, -.navbar-dark .navbar-nav .nav-link.active, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .show>.nav-link { - color: #fff -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, .5); - border-color: rgba(255, 255, 255, .1) -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-text a { - color: #fff -} - -.navbar-dark .navbar-text a:focus, -.navbar-dark .navbar-text a:hover { - color: #fff -} - -.card { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(238, 238, 238, .75); - border-radius: .25rem -} - -.card>hr { - margin-right: 0; - margin-left: 0 -} - -.card>.list-group:first-child .list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.card>.list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.card-body { - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1.25rem -} - -.card-title { - margin-bottom: .75rem -} - -.card-subtitle { - margin-top: -.375rem; - margin-bottom: 0 -} - -.card-text:last-child { - margin-bottom: 0 -} - -.card-link:hover { - text-decoration: none -} - -.card-link+.card-link { - margin-left: 1.25rem -} - -.card-header { - padding: .75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, .03); - border-bottom: 1px solid rgba(238, 238, 238, .75) -} - -.card-header:first-child { - border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 -} - -.card-header+.list-group .list-group-item:first-child { - border-top: 0 -} - -.card-footer { - padding: .75rem 1.25rem; - background-color: rgba(0, 0, 0, .03); - border-top: 1px solid rgba(238, 238, 238, .75) -} - -.card-footer:last-child { - border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px) -} - -.card-header-tabs { - margin-right: -.625rem; - margin-bottom: -.75rem; - margin-left: -.625rem; - border-bottom: 0 -} - -.card-header-pills { - margin-right: -.625rem; - margin-left: -.625rem -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem -} - -.card-img { - width: 100%; - border-radius: calc(.25rem - 1px) -} - -.card-img-top { - width: 100%; - border-top-left-radius: calc(.25rem - 1px); - border-top-right-radius: calc(.25rem - 1px) -} - -.card-img-bottom { - width: 100%; - border-bottom-right-radius: calc(.25rem - 1px); - border-bottom-left-radius: calc(.25rem - 1px) -} - -.card-deck { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-deck .card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-deck { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px - } - - .card-deck .card { - display: -webkit-box; - display: flex; - -webkit-box-flex: 1; - flex: 1 0 0%; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px - } - -} - -.card-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-group>.card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-group { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap - } - - .card-group>.card { - -webkit-box-flex: 1; - flex: 1 0 0%; - margin-bottom: 0 - } - - .card-group>.card+.card { - margin-left: 0; - border-left: 0 - } - - .card-group>.card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-header, - .card-group>.card:not(:last-child) .card-img-top { - border-top-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-footer, - .card-group>.card:not(:last-child) .card-img-bottom { - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-header, - .card-group>.card:not(:first-child) .card-img-top { - border-top-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-footer, - .card-group>.card:not(:first-child) .card-img-bottom { - border-bottom-left-radius: 0 - } - -} - -.card-columns .card { - margin-bottom: .75rem -} - -@media (min-width:576px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1 - } - - .card-columns .card { - display: inline-block; - width: 100% - } - -} - -.accordion>.card { - overflow: hidden -} - -.accordion>.card:not(:first-of-type) .card-header:first-child { - border-radius: 0 -} - -.accordion>.card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0 -} - -.accordion>.card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.accordion>.card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.accordion>.card .card-header { - margin-bottom: -1px -} - -.breadcrumb { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding: .75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #f7f9fa; - border-radius: .25rem -} - -.breadcrumb-item+.breadcrumb-item { - padding-left: .5rem -} - -.breadcrumb-item+.breadcrumb-item::before { - display: inline-block; - padding-right: .5rem; - color: #a8a9ad; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: underline -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: none -} - -.breadcrumb-item.active { - color: #6c757d -} - -.pagination { - display: -webkit-box; - display: flex; - padding-left: 0; - list-style: none; - border-radius: 2px -} - -.page-link { - position: relative; - display: block; - padding: .5rem .75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #fff; - border: 1px solid #dee2e6 -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6 -} - -.page-link:focus { - z-index: 2; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 2px; - border-bottom-left-radius: 2px -} - -.page-item:last-child .page-link { - border-top-right-radius: 2px; - border-bottom-right-radius: 2px -} - -.page-item.active .page-link { - z-index: 1; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6 -} - -.pagination-lg .page-link { - padding: .75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5 -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px -} - -.pagination-sm .page-link { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5 -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: .2rem; - border-bottom-left-radius: .2rem -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: .2rem; - border-bottom-right-radius: .2rem -} - -.badge { - display: inline-block; - padding: .45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .badge { - -webkit-transition: none; - transition: none - } - -} - -a.badge:focus, -a.badge:hover { - text-decoration: none -} - -.badge:empty { - display: none -} - -.btn .badge { - position: relative; - top: -1px -} - -.badge-pill { - padding-right: .5rem; - padding-left: .5rem; - border-radius: 10rem -} - -.badge-primary { - color: #fff; - background-color: #047006 -} - -a.badge-primary:focus, -a.badge-primary:hover { - color: #fff; - background-color: #023f03 -} - -a.badge-primary.focus, -a.badge-primary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.badge-secondary { - color: #fff; - background-color: grey -} - -a.badge-secondary:focus, -a.badge-secondary:hover { - color: #fff; - background-color: #676767 -} - -a.badge-secondary.focus, -a.badge-secondary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.badge-success { - color: #fff; - background-color: #00e093 -} - -a.badge-success:focus, -a.badge-success:hover { - color: #fff; - background-color: #00ad72 -} - -a.badge-success.focus, -a.badge-success:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.badge-info { - color: #fff; - background-color: #6c61f6 -} - -a.badge-info:focus, -a.badge-info:hover { - color: #fff; - background-color: #3f31f3 -} - -a.badge-info.focus, -a.badge-info:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.badge-warning { - color: #212529; - background-color: #f0825f -} - -a.badge-warning:focus, -a.badge-warning:hover { - color: #212529; - background-color: #ec5e30 -} - -a.badge-warning.focus, -a.badge-warning:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.badge-danger { - color: #fff; - background-color: #ff5f66 -} - -a.badge-danger:focus, -a.badge-danger:hover { - color: #fff; - background-color: #ff2c35 -} - -a.badge-danger.focus, -a.badge-danger:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.badge-light { - color: #212529; - background-color: #dfdfdf -} - -a.badge-light:focus, -a.badge-light:hover { - color: #212529; - background-color: #c6c6c6 -} - -a.badge-light.focus, -a.badge-light:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.badge-dark { - color: #fff; - background-color: #74767b -} - -a.badge-dark:focus, -a.badge-dark:hover { - color: #fff; - background-color: #5b5d61 -} - -a.badge-dark.focus, -a.badge-dark:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.badge-white { - color: #212529; - background-color: #fff -} - -a.badge-white:focus, -a.badge-white:hover { - color: #212529; - background-color: #e6e6e6 -} - -a.badge-white.focus, -a.badge-white:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.badge-orange { - color: #212529; - background-color: #ffa600 -} - -a.badge-orange:focus, -a.badge-orange:hover { - color: #212529; - background-color: #cc8500 -} - -a.badge-orange.focus, -a.badge-orange:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5) -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 6px -} - -@media (min-width:576px) { - .jumbotron { - padding: 4rem 2rem - } - -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0 -} - -.alert { - position: relative; - padding: 1.15rem 1.15rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 2px -} - -.alert-heading { - color: inherit -} - -.alert-link { - font-weight: 700 -} - -.alert-dismissible { - padding-right: 3.8rem -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 1.15rem 1.15rem; - color: inherit -} - -.alert-primary { - color: #023a03; - background-color: #cde2cd; - border-color: #b9d7b9 -} - -.alert-primary hr { - border-top-color: #a9cea9 -} - -.alert-primary .alert-link { - color: #000900 -} - -.alert-secondary { - color: #434343; - background-color: #e6e6e6; - border-color: #dbdbdb -} - -.alert-secondary hr { - border-top-color: #cecece -} - -.alert-secondary .alert-link { - color: #2a2a2a -} - -.alert-success { - color: #00744c; - background-color: #ccf9e9; - border-color: #b8f6e1 -} - -.alert-success hr { - border-top-color: #a1f3d7 -} - -.alert-success .alert-link { - color: #00412b -} - -.alert-info { - color: #383280; - background-color: #e2dffd; - border-color: #d6d3fc -} - -.alert-info hr { - border-top-color: #c0bbfa -} - -.alert-info .alert-link { - color: #28245b -} - -.alert-warning { - color: #7d4431; - background-color: #fce6df; - border-color: #fbdcd2 -} - -.alert-warning hr { - border-top-color: #f9cabb -} - -.alert-warning .alert-link { - color: #583023 -} - -.alert-danger { - color: #853135; - background-color: #ffdfe0; - border-color: #ffd2d4 -} - -.alert-danger hr { - border-top-color: #ffb9bc -} - -.alert-danger .alert-link { - color: #602326 -} - -.alert-light { - color: #747474; - background-color: #f9f9f9; - border-color: #f6f6f6 -} - -.alert-light hr { - border-top-color: #e9e9e9 -} - -.alert-light .alert-link { - color: #5b5b5b -} - -.alert-dark { - color: #3c3d40; - background-color: #e3e4e5; - border-color: #d8d9da -} - -.alert-dark hr { - border-top-color: #cbccce -} - -.alert-dark .alert-link { - color: #232426 -} - -.alert-white { - color: #858585; - background-color: #fff; - border-color: #fff -} - -.alert-white hr { - border-top-color: #f2f2f2 -} - -.alert-white .alert-link { - color: #6c6c6c -} - -.alert-orange { - color: #855600; - background-color: #ffedcc; - border-color: #ffe6b8 -} - -.alert-orange hr { - border-top-color: #ffdd9f -} - -.alert-orange .alert-link { - color: #523500 -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -.progress { - display: -webkit-box; - display: flex; - height: 1rem; - overflow: hidden; - font-size: .75rem; - background-color: #f3f5f7; - border-radius: 2px -} - -.progress-bar { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - -webkit-transition: width .6s ease; - transition: width .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar { - -webkit-transition: none; - transition: none - } - -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar-animated { - -webkit-animation: none; - animation: none - } - -} - -.media { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start -} - -.media-body { - -webkit-box-flex: 1; - flex: 1 -} - -.list-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0 -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit -} - -.list-group-item-action:focus, -.list-group-item-action:hover { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef -} - -.list-group-item { - position: relative; - display: block; - padding: .75rem 1.25rem; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, .125) -} - -.list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.list-group-item.disabled, -.list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.list-group-horizontal { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.list-group-horizontal .list-group-item { - margin-right: -1px; - margin-bottom: 0 -} - -.list-group-horizontal .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 -} - -.list-group-horizontal .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 -} - -@media (min-width:576px) { - .list-group-horizontal-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-sm .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-sm .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-sm .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:768px) { - .list-group-horizontal-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-md .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-md .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-md .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:992px) { - .list-group-horizontal-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-lg .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-lg .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-lg .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:1200px) { - .list-group-horizontal-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-xl .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-xl .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-xl .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -.list-group-flush .list-group-item { - border-right: 0; - border-left: 0; - border-radius: 0 -} - -.list-group-flush .list-group-item:last-child { - margin-bottom: -1px -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0 -} - -.list-group-flush:last-child .list-group-item:last-child { - margin-bottom: 0; - border-bottom: 0 -} - -.list-group-item-primary { - color: #023a03; - background-color: #b9d7b9 -} - -.list-group-item-primary.list-group-item-action:focus, -.list-group-item-primary.list-group-item-action:hover { - color: #023a03; - background-color: #a9cea9 -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #023a03; - border-color: #023a03 -} - -.list-group-item-secondary { - color: #434343; - background-color: #dbdbdb -} - -.list-group-item-secondary.list-group-item-action:focus, -.list-group-item-secondary.list-group-item-action:hover { - color: #434343; - background-color: #cecece -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #434343; - border-color: #434343 -} - -.list-group-item-success { - color: #00744c; - background-color: #b8f6e1 -} - -.list-group-item-success.list-group-item-action:focus, -.list-group-item-success.list-group-item-action:hover { - color: #00744c; - background-color: #a1f3d7 -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #00744c; - border-color: #00744c -} - -.list-group-item-info { - color: #383280; - background-color: #d6d3fc -} - -.list-group-item-info.list-group-item-action:focus, -.list-group-item-info.list-group-item-action:hover { - color: #383280; - background-color: #c0bbfa -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #383280; - border-color: #383280 -} - -.list-group-item-warning { - color: #7d4431; - background-color: #fbdcd2 -} - -.list-group-item-warning.list-group-item-action:focus, -.list-group-item-warning.list-group-item-action:hover { - color: #7d4431; - background-color: #f9cabb -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #7d4431; - border-color: #7d4431 -} - -.list-group-item-danger { - color: #853135; - background-color: #ffd2d4 -} - -.list-group-item-danger.list-group-item-action:focus, -.list-group-item-danger.list-group-item-action:hover { - color: #853135; - background-color: #ffb9bc -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #853135; - border-color: #853135 -} - -.list-group-item-light { - color: #747474; - background-color: #f6f6f6 -} - -.list-group-item-light.list-group-item-action:focus, -.list-group-item-light.list-group-item-action:hover { - color: #747474; - background-color: #e9e9e9 -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #747474; - border-color: #747474 -} - -.list-group-item-dark { - color: #3c3d40; - background-color: #d8d9da -} - -.list-group-item-dark.list-group-item-action:focus, -.list-group-item-dark.list-group-item-action:hover { - color: #3c3d40; - background-color: #cbccce -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #3c3d40; - border-color: #3c3d40 -} - -.list-group-item-white { - color: #858585; - background-color: #fff -} - -.list-group-item-white.list-group-item-action:focus, -.list-group-item-white.list-group-item-action:hover { - color: #858585; - background-color: #f2f2f2 -} - -.list-group-item-white.list-group-item-action.active { - color: #fff; - background-color: #858585; - border-color: #858585 -} - -.list-group-item-orange { - color: #855600; - background-color: #ffe6b8 -} - -.list-group-item-orange.list-group-item-action:focus, -.list-group-item-orange.list-group-item-action:hover { - color: #855600; - background-color: #ffdd9f -} - -.list-group-item-orange.list-group-item-action.active { - color: #fff; - background-color: #855600; - border-color: #855600 -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5 -} - -.close:hover { - color: #000; - text-decoration: none -} - -.close:not(:disabled):not(.disabled):focus, -.close:not(:disabled):not(.disabled):hover { - opacity: .75 -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -a.close.disabled { - pointer-events: none -} - -.toast { - max-width: 350px; - overflow: hidden; - font-size: .875rem; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .1); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - opacity: 0; - border-radius: .25rem -} - -.toast:not(:last-child) { - margin-bottom: .75rem -} - -.toast.showing { - opacity: 1 -} - -.toast.show { - display: block; - opacity: 1 -} - -.toast.hide { - display: none -} - -.toast-header { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .25rem .75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, .05) -} - -.toast-body { - padding: .75rem -} - -.modal-open { - overflow: hidden -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - display: none; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0 -} - -.modal-dialog { - position: relative; - width: auto; - margin: .5rem; - pointer-events: none -} - -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - transition: -webkit-transform .3s ease-out; - transition: transform .3s ease-out; - transition: transform .3s ease-out, -webkit-transform .3s ease-out; - -webkit-transform: translate(0, -50px); - transform: translate(0, -50px) -} - -@media (prefers-reduced-motion:reduce) { - .modal.fade .modal-dialog { - -webkit-transition: none; - transition: none - } - -} - -.modal.show .modal-dialog { - -webkit-transform: none; - transform: none -} - -.modal-dialog-scrollable { - display: -webkit-box; - display: flex; - max-height: calc(100% - 1rem) -} - -.modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 1rem); - overflow: hidden -} - -.modal-dialog-scrollable .modal-footer, -.modal-dialog-scrollable .modal-header { - flex-shrink: 0 -} - -.modal-dialog-scrollable .modal-body { - overflow-y: auto -} - -.modal-dialog-centered { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - min-height: calc(100% - 1rem) -} - -.modal-dialog-centered::before { - display: block; - height: calc(100vh - 1rem); - content: 'http://www.w3.org/2000/svg' -} - -.modal-dialog-centered.modal-dialog-scrollable { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - height: 100% -} - -.modal-dialog-centered.modal-dialog-scrollable .modal-content { - max-height: none -} - -.modal-dialog-centered.modal-dialog-scrollable::before { - content: none -} - -.modal-content { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem; - outline: 0 -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000 -} - -.modal-backdrop.fade { - opacity: 0 -} - -.modal-backdrop.show { - opacity: .8 -} - -.modal-header { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: justify; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: .3rem; - border-top-right-radius: .3rem -} - -.modal-header .close { - padding: 1rem 1rem; - margin: -1rem -1rem -1rem auto -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5 -} - -.modal-body { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1rem -} - -.modal-footer { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: end; - justify-content: flex-end; - padding: 1rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: .3rem; - border-bottom-left-radius: .3rem -} - -.modal-footer>:not(:first-child) { - margin-left: .25rem -} - -.modal-footer>:not(:last-child) { - margin-right: .25rem -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll -} - -@media (min-width:576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto - } - - .modal-dialog-scrollable { - max-height: calc(100% - 3.5rem) - } - - .modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 3.5rem) - } - - .modal-dialog-centered { - min-height: calc(100% - 3.5rem) - } - - .modal-dialog-centered::before { - height: calc(100vh - 3.5rem) - } - - .modal-sm { - max-width: 300px - } - -} - -@media (min-width:992px) { - .modal-lg, - .modal-xl { - max-width: 800px - } - -} - -@media (min-width:1200px) { - .modal-xl { - max-width: 1140px - } - -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - opacity: 0 -} - -.tooltip.show { - opacity: .9 -} - -.tooltip .arrow { - position: absolute; - display: block; - width: .8rem; - height: .4rem -} - -.tooltip .arrow::before { - position: absolute; - content: '%23dc3545'; - border-color: transparent; - border-style: solid -} - -.bs-tooltip-auto[x-placement^=top], -.bs-tooltip-top { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow, -.bs-tooltip-top .arrow { - bottom: 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow::before, -.bs-tooltip-top .arrow::before { - top: 0; - border-width: .4rem .4rem 0; - border-top-color: #000 -} - -.bs-tooltip-auto[x-placement^=right], -.bs-tooltip-right { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow, -.bs-tooltip-right .arrow { - left: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow::before, -.bs-tooltip-right .arrow::before { - right: 0; - border-width: .4rem .4rem .4rem 0; - border-right-color: #000 -} - -.bs-tooltip-auto[x-placement^=bottom], -.bs-tooltip-bottom { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow, -.bs-tooltip-bottom .arrow { - top: 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow::before, -.bs-tooltip-bottom .arrow::before { - bottom: 0; - border-width: 0 .4rem .4rem; - border-bottom-color: #000 -} - -.bs-tooltip-auto[x-placement^=left], -.bs-tooltip-left { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow, -.bs-tooltip-left .arrow { - right: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow::before, -.bs-tooltip-left .arrow::before { - left: 0; - border-width: .4rem 0 .4rem .4rem; - border-left-color: #000 -} - -.tooltip-inner { - max-width: 200px; - padding: .25rem .5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: .25rem -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: .5rem; - margin: 0 6px -} - -.popover .arrow::after, -.popover .arrow::before { - position: absolute; - display: block; - content: '-2 -2 7 7'; - border-color: transparent; - border-style: solid -} - -.bs-popover-auto[x-placement^=top], -.bs-popover-top { - margin-bottom: .5rem -} - -.bs-popover-auto[x-placement^=top]>.arrow, -.bs-popover-top>.arrow { - bottom: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=top]>.arrow::before, -.bs-popover-top>.arrow::before { - bottom: 0; - border-width: .5rem .5rem 0; - border-top-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=top]>.arrow::after, -.bs-popover-top>.arrow::after { - bottom: 1px; - border-width: .5rem .5rem 0; - border-top-color: #fff -} - -.bs-popover-auto[x-placement^=right], -.bs-popover-right { - margin-left: .5rem -} - -.bs-popover-auto[x-placement^=right]>.arrow, -.bs-popover-right>.arrow { - left: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=right]>.arrow::before, -.bs-popover-right>.arrow::before { - left: 0; - border-width: .5rem .5rem .5rem 0; - border-right-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=right]>.arrow::after, -.bs-popover-right>.arrow::after { - left: 1px; - border-width: .5rem .5rem .5rem 0; - border-right-color: #fff -} - -.bs-popover-auto[x-placement^=bottom], -.bs-popover-bottom { - margin-top: .5rem -} - -.bs-popover-auto[x-placement^=bottom]>.arrow, -.bs-popover-bottom>.arrow { - top: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::before, -.bs-popover-bottom>.arrow::before { - top: 0; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::after, -.bs-popover-bottom>.arrow::after { - top: 1px; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: #fff -} - -.bs-popover-auto[x-placement^=bottom] .popover-header::before, -.bs-popover-bottom .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -.5rem; - content: '%23dc3545'; - border-bottom: 1px solid #f7f7f7 -} - -.bs-popover-auto[x-placement^=left], -.bs-popover-left { - margin-right: .5rem -} - -.bs-popover-auto[x-placement^=left]>.arrow, -.bs-popover-left>.arrow { - right: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=left]>.arrow::before, -.bs-popover-left>.arrow::before { - right: 0; - border-width: .5rem 0 .5rem .5rem; - border-left-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=left]>.arrow::after, -.bs-popover-left>.arrow::after { - right: 1px; - border-width: .5rem 0 .5rem .5rem; - border-left-color: #fff -} - -.popover-header { - padding: .5rem .75rem; - margin-bottom: 0; - font-size: 1rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(6px - 1px); - border-top-right-radius: calc(6px - 1px) -} - -.popover-header:empty { - display: none -} - -.popover-body { - padding: .5rem .75rem; - color: #212529 -} - -.carousel { - position: relative -} - -.carousel.pointer-event { - touch-action: pan-y -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden -} - -.carousel-inner::after { - display: block; - clear: both; - content: 'M0 0l3 3m0-3L0 3' -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transition: -webkit-transform .6s ease-in-out; - transition: -webkit-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .carousel-item { - -webkit-transition: none; - transition: none - } - -} - -.carousel-item-next, -.carousel-item-prev, -.carousel-item.active { - display: block -} - -.active.carousel-item-right, -.carousel-item-next:not(.carousel-item-left) { - -webkit-transform: translateX(100%); - transform: translateX(100%) -} - -.active.carousel-item-left, -.carousel-item-prev:not(.carousel-item-right) { - -webkit-transform: translateX(-100%); - transform: translateX(-100%) -} - -.carousel-fade .carousel-item { - opacity: 0; - -webkit-transition-property: opacity; - transition-property: opacity; - -webkit-transform: none; - transform: none -} - -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right, -.carousel-fade .carousel-item.active { - z-index: 1; - opacity: 1 -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - z-index: 0; - opacity: 0; - -webkit-transition: 0s .6s opacity; - transition: 0s .6s opacity -} - -@media (prefers-reduced-motion:reduce) { - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next, -.carousel-control-prev { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: .5; - -webkit-transition: opacity .15s ease; - transition: opacity .15s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-control-next, - .carousel-control-prev { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next:focus, -.carousel-control-next:hover, -.carousel-control-prev:focus, -.carousel-control-prev:hover { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9 -} - -.carousel-control-prev { - left: 0 -} - -.carousel-control-next { - right: 0 -} - -.carousel-control-next-icon, -.carousel-control-prev-icon { - display: inline-block; - width: 20px; - height: 20px; - background: no-repeat 50%/100% 100% -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 15; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none -} - -.carousel-indicators li { - box-sizing: content-box; - -webkit-box-flex: 0; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: .5; - -webkit-transition: opacity .6s ease; - transition: opacity .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-indicators li { - -webkit-transition: none; - transition: none - } - -} - -.carousel-indicators .active { - opacity: 1 -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center -} - -@-webkit-keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -@keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - border: .25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: .2em -} - -@-webkit-keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -@keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem -} - -.align-baseline { - vertical-align: baseline !important -} - -.align-top { - vertical-align: top !important -} - -.align-middle { - vertical-align: middle !important -} - -.align-bottom { - vertical-align: bottom !important -} - -.align-text-bottom { - vertical-align: text-bottom !important -} - -.align-text-top { - vertical-align: text-top !important -} - -.bg-primary { - background-color: #047006 !important -} - -a.bg-primary:focus, -a.bg-primary:hover, -button.bg-primary:focus, -button.bg-primary:hover { - background-color: #023f03 !important -} - -.bg-secondary { - background-color: grey !important -} - -a.bg-secondary:focus, -a.bg-secondary:hover, -button.bg-secondary:focus, -button.bg-secondary:hover { - background-color: #676767 !important -} - -.bg-success { - background-color: #00e093 !important -} - -a.bg-success:focus, -a.bg-success:hover, -button.bg-success:focus, -button.bg-success:hover { - background-color: #00ad72 !important -} - -.bg-info { - background-color: #6c61f6 !important -} - -a.bg-info:focus, -a.bg-info:hover, -button.bg-info:focus, -button.bg-info:hover { - background-color: #3f31f3 !important -} - -.bg-warning { - background-color: #f0825f !important -} - -a.bg-warning:focus, -a.bg-warning:hover, -button.bg-warning:focus, -button.bg-warning:hover { - background-color: #ec5e30 !important -} - -.bg-danger { - background-color: #ff5f66 !important -} - -a.bg-danger:focus, -a.bg-danger:hover, -button.bg-danger:focus, -button.bg-danger:hover { - background-color: #ff2c35 !important -} - -.bg-light { - background-color: #dfdfdf !important -} - -a.bg-light:focus, -a.bg-light:hover, -button.bg-light:focus, -button.bg-light:hover { - background-color: #c6c6c6 !important -} - -.bg-dark { - background-color: #74767b !important -} - -a.bg-dark:focus, -a.bg-dark:hover, -button.bg-dark:focus, -button.bg-dark:hover { - background-color: #5b5d61 !important -} - -.bg-white { - background-color: #fff !important -} - -a.bg-white:focus, -a.bg-white:hover, -button.bg-white:focus, -button.bg-white:hover { - background-color: #e6e6e6 !important -} - -.bg-orange { - background-color: #ffa600 !important -} - -a.bg-orange:focus, -a.bg-orange:hover, -button.bg-orange:focus, -button.bg-orange:hover { - background-color: #cc8500 !important -} - -.bg-white { - background-color: #fff !important -} - -.bg-transparent { - background-color: transparent !important -} - -.border { - border: 1px solid #f2f4f9 !important -} - -.border-top { - border-top: 1px solid #f2f4f9 !important -} - -.border-right { - border-right: 1px solid #f2f4f9 !important -} - -.border-bottom { - border-bottom: 1px solid #f2f4f9 !important -} - -.border-left { - border-left: 1px solid #f2f4f9 !important -} - -.border-0 { - border: 0 !important -} - -.border-top-0 { - border-top: 0 !important -} - -.border-right-0 { - border-right: 0 !important -} - -.border-bottom-0 { - border-bottom: 0 !important -} - -.border-left-0 { - border-left: 0 !important -} - -.border-primary { - border-color: #047006 !important -} - -.border-secondary { - border-color: grey !important -} - -.border-success { - border-color: #00e093 !important -} - -.border-info { - border-color: #6c61f6 !important -} - -.border-warning { - border-color: #f0825f !important -} - -.border-danger { - border-color: #ff5f66 !important -} - -.border-light { - border-color: #dfdfdf !important -} - -.border-dark { - border-color: #74767b !important -} - -.border-white { - border-color: #fff !important -} - -.border-orange { - border-color: #ffa600 !important -} - -.border-white { - border-color: #fff !important -} - -.rounded-sm { - border-radius: .2rem !important -} - -.rounded { - border-radius: 2px !important -} - -.rounded-top { - border-top-left-radius: 2px !important; - border-top-right-radius: 2px !important -} - -.rounded-right { - border-top-right-radius: 2px !important; - border-bottom-right-radius: 2px !important -} - -.rounded-bottom { - border-bottom-right-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-left { - border-top-left-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-lg { - border-radius: 6px !important -} - -.rounded-circle { - border-radius: 50% !important -} - -.rounded-pill { - border-radius: 50rem !important -} - -.rounded-0 { - border-radius: 0 !important -} - -.clearfix::after { - display: block; - clear: both; - content: '.5' -} - -.d-none { - display: none !important -} - -.d-inline { - display: inline !important -} - -.d-inline-block { - display: inline-block !important -} - -.d-block { - display: block !important -} - -.d-table { - display: table !important -} - -.d-table-row { - display: table-row !important -} - -.d-table-cell { - display: table-cell !important -} - -.d-flex { - display: -webkit-box !important; - display: flex !important -} - -.d-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important -} - -@media (min-width:576px) { - .d-sm-none { - display: none !important - } - - .d-sm-inline { - display: inline !important - } - - .d-sm-inline-block { - display: inline-block !important - } - - .d-sm-block { - display: block !important - } - - .d-sm-table { - display: table !important - } - - .d-sm-table-row { - display: table-row !important - } - - .d-sm-table-cell { - display: table-cell !important - } - - .d-sm-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-sm-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:768px) { - .d-md-none { - display: none !important - } - - .d-md-inline { - display: inline !important - } - - .d-md-inline-block { - display: inline-block !important - } - - .d-md-block { - display: block !important - } - - .d-md-table { - display: table !important - } - - .d-md-table-row { - display: table-row !important - } - - .d-md-table-cell { - display: table-cell !important - } - - .d-md-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-md-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:992px) { - .d-lg-none { - display: none !important - } - - .d-lg-inline { - display: inline !important - } - - .d-lg-inline-block { - display: inline-block !important - } - - .d-lg-block { - display: block !important - } - - .d-lg-table { - display: table !important - } - - .d-lg-table-row { - display: table-row !important - } - - .d-lg-table-cell { - display: table-cell !important - } - - .d-lg-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-lg-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:1200px) { - .d-xl-none { - display: none !important - } - - .d-xl-inline { - display: inline !important - } - - .d-xl-inline-block { - display: inline-block !important - } - - .d-xl-block { - display: block !important - } - - .d-xl-table { - display: table !important - } - - .d-xl-table-row { - display: table-row !important - } - - .d-xl-table-cell { - display: table-cell !important - } - - .d-xl-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-xl-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media print { - .d-print-none { - display: none !important - } - - .d-print-inline { - display: inline !important - } - - .d-print-inline-block { - display: inline-block !important - } - - .d-print-block { - display: block !important - } - - .d-print-table { - display: table !important - } - - .d-print-table-row { - display: table-row !important - } - - .d-print-table-cell { - display: table-cell !important - } - - .d-print-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-print-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden -} - -.embed-responsive::before { - display: block; - content: '3' -} - -.embed-responsive .embed-responsive-item, -.embed-responsive embed, -.embed-responsive iframe, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0 -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.flex-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important -} - -.flex-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important -} - -.flex-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important -} - -.flex-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important -} - -.flex-wrap { - flex-wrap: wrap !important -} - -.flex-nowrap { - flex-wrap: nowrap !important -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important -} - -.flex-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important -} - -.flex-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important -} - -.flex-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important -} - -.flex-shrink-0 { - flex-shrink: 0 !important -} - -.flex-shrink-1 { - flex-shrink: 1 !important -} - -.justify-content-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important -} - -.justify-content-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important -} - -.justify-content-center { - -webkit-box-pack: center !important; - justify-content: center !important -} - -.justify-content-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important -} - -.justify-content-around { - justify-content: space-around !important -} - -.align-items-start { - -webkit-box-align: start !important; - align-items: flex-start !important -} - -.align-items-end { - -webkit-box-align: end !important; - align-items: flex-end !important -} - -.align-items-center { - -webkit-box-align: center !important; - align-items: center !important -} - -.align-items-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important -} - -.align-items-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important -} - -.align-content-start { - align-content: flex-start !important -} - -.align-content-end { - align-content: flex-end !important -} - -.align-content-center { - align-content: center !important -} - -.align-content-between { - align-content: space-between !important -} - -.align-content-around { - align-content: space-around !important -} - -.align-content-stretch { - align-content: stretch !important -} - -.align-self-auto { - align-self: auto !important -} - -.align-self-start { - align-self: flex-start !important -} - -.align-self-end { - align-self: flex-end !important -} - -.align-self-center { - align-self: center !important -} - -.align-self-baseline { - align-self: baseline !important -} - -.align-self-stretch { - align-self: stretch !important -} - -@media (min-width:576px) { - .flex-sm-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-sm-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-sm-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-sm-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-sm-wrap { - flex-wrap: wrap !important - } - - .flex-sm-nowrap { - flex-wrap: nowrap !important - } - - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-sm-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-sm-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-sm-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-sm-shrink-0 { - flex-shrink: 0 !important - } - - .flex-sm-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-sm-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-sm-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-sm-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-sm-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-sm-around { - justify-content: space-around !important - } - - .align-items-sm-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-sm-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-sm-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-sm-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-sm-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-sm-start { - align-content: flex-start !important - } - - .align-content-sm-end { - align-content: flex-end !important - } - - .align-content-sm-center { - align-content: center !important - } - - .align-content-sm-between { - align-content: space-between !important - } - - .align-content-sm-around { - align-content: space-around !important - } - - .align-content-sm-stretch { - align-content: stretch !important - } - - .align-self-sm-auto { - align-self: auto !important - } - - .align-self-sm-start { - align-self: flex-start !important - } - - .align-self-sm-end { - align-self: flex-end !important - } - - .align-self-sm-center { - align-self: center !important - } - - .align-self-sm-baseline { - align-self: baseline !important - } - - .align-self-sm-stretch { - align-self: stretch !important - } - -} - -@media (min-width:768px) { - .flex-md-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-md-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-md-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-md-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-md-wrap { - flex-wrap: wrap !important - } - - .flex-md-nowrap { - flex-wrap: nowrap !important - } - - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-md-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-md-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-md-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-md-shrink-0 { - flex-shrink: 0 !important - } - - .flex-md-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-md-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-md-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-md-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-md-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-md-around { - justify-content: space-around !important - } - - .align-items-md-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-md-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-md-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-md-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-md-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-md-start { - align-content: flex-start !important - } - - .align-content-md-end { - align-content: flex-end !important - } - - .align-content-md-center { - align-content: center !important - } - - .align-content-md-between { - align-content: space-between !important - } - - .align-content-md-around { - align-content: space-around !important - } - - .align-content-md-stretch { - align-content: stretch !important - } - - .align-self-md-auto { - align-self: auto !important - } - - .align-self-md-start { - align-self: flex-start !important - } - - .align-self-md-end { - align-self: flex-end !important - } - - .align-self-md-center { - align-self: center !important - } - - .align-self-md-baseline { - align-self: baseline !important - } - - .align-self-md-stretch { - align-self: stretch !important - } - -} - -@media (min-width:992px) { - .flex-lg-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-lg-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-lg-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-lg-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-lg-wrap { - flex-wrap: wrap !important - } - - .flex-lg-nowrap { - flex-wrap: nowrap !important - } - - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-lg-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-lg-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-lg-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-lg-shrink-0 { - flex-shrink: 0 !important - } - - .flex-lg-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-lg-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-lg-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-lg-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-lg-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-lg-around { - justify-content: space-around !important - } - - .align-items-lg-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-lg-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-lg-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-lg-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-lg-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-lg-start { - align-content: flex-start !important - } - - .align-content-lg-end { - align-content: flex-end !important - } - - .align-content-lg-center { - align-content: center !important - } - - .align-content-lg-between { - align-content: space-between !important - } - - .align-content-lg-around { - align-content: space-around !important - } - - .align-content-lg-stretch { - align-content: stretch !important - } - - .align-self-lg-auto { - align-self: auto !important - } - - .align-self-lg-start { - align-self: flex-start !important - } - - .align-self-lg-end { - align-self: flex-end !important - } - - .align-self-lg-center { - align-self: center !important - } - - .align-self-lg-baseline { - align-self: baseline !important - } - - .align-self-lg-stretch { - align-self: stretch !important - } - -} - -@media (min-width:1200px) { - .flex-xl-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-xl-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-xl-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-xl-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-xl-wrap { - flex-wrap: wrap !important - } - - .flex-xl-nowrap { - flex-wrap: nowrap !important - } - - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-xl-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-xl-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-xl-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-xl-shrink-0 { - flex-shrink: 0 !important - } - - .flex-xl-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-xl-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-xl-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-xl-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-xl-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-xl-around { - justify-content: space-around !important - } - - .align-items-xl-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-xl-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-xl-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-xl-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-xl-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-xl-start { - align-content: flex-start !important - } - - .align-content-xl-end { - align-content: flex-end !important - } - - .align-content-xl-center { - align-content: center !important - } - - .align-content-xl-between { - align-content: space-between !important - } - - .align-content-xl-around { - align-content: space-around !important - } - - .align-content-xl-stretch { - align-content: stretch !important - } - - .align-self-xl-auto { - align-self: auto !important - } - - .align-self-xl-start { - align-self: flex-start !important - } - - .align-self-xl-end { - align-self: flex-end !important - } - - .align-self-xl-center { - align-self: center !important - } - - .align-self-xl-baseline { - align-self: baseline !important - } - - .align-self-xl-stretch { - align-self: stretch !important - } - -} - -.float-left { - float: left !important -} - -.float-right { - float: right !important -} - -.float-none { - float: none !important -} - -@media (min-width:576px) { - .float-sm-left { - float: left !important - } - - .float-sm-right { - float: right !important - } - - .float-sm-none { - float: none !important - } - -} - -@media (min-width:768px) { - .float-md-left { - float: left !important - } - - .float-md-right { - float: right !important - } - - .float-md-none { - float: none !important - } - -} - -@media (min-width:992px) { - .float-lg-left { - float: left !important - } - - .float-lg-right { - float: right !important - } - - .float-lg-none { - float: none !important - } - -} - -@media (min-width:1200px) { - .float-xl-left { - float: left !important - } - - .float-xl-right { - float: right !important - } - - .float-xl-none { - float: none !important - } - -} - -.overflow-auto { - overflow: auto !important -} - -.overflow-hidden { - overflow: hidden !important -} - -.position-static { - position: static !important -} - -.position-relative { - position: relative !important -} - -.position-absolute { - position: absolute !important -} - -.position-fixed { - position: fixed !important -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030 -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030 -} - -@supports ((position:-webkit-sticky) or (position:sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0 -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal -} - -.shadow-sm { - box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important -} - -.shadow { - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important -} - -.shadow-none { - box-shadow: none !important -} - -.w-25 { - width: 25% !important -} - -.w-50 { - width: 50% !important -} - -.w-75 { - width: 75% !important -} - -.w-100 { - width: 100% !important -} - -.w-auto { - width: auto !important -} - -.h-25 { - height: 25% !important -} - -.h-50 { - height: 50% !important -} - -.h-75 { - height: 75% !important -} - -.h-100 { - height: 100% !important -} - -.h-auto { - height: auto !important -} - -.mw-100 { - max-width: 100% !important -} - -.mh-100 { - max-height: 100% !important -} - -.min-vw-100 { - min-width: 100vw !important -} - -.min-vh-100 { - min-height: 100vh !important -} - -.vw-100 { - width: 100vw !important -} - -.vh-100 { - height: 100vh !important -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - pointer-events: auto; - content: '.5'; - background-color: rgba(0, 0, 0, 0) -} - -.m-0 { - margin: 0 !important -} - -.mt-0, -.my-0 { - margin-top: 0 !important -} - -.mr-0, -.mx-0 { - margin-right: 0 !important -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important -} - -.ml-0, -.mx-0 { - margin-left: 0 !important -} - -.m-1 { - margin: .25rem !important -} - -.mt-1, -.my-1 { - margin-top: .25rem !important -} - -.mr-1, -.mx-1 { - margin-right: .25rem !important -} - -.mb-1, -.my-1 { - margin-bottom: .25rem !important -} - -.ml-1, -.mx-1 { - margin-left: .25rem !important -} - -.m-2 { - margin: .5rem !important -} - -.mt-2, -.my-2 { - margin-top: .5rem !important -} - -.mr-2, -.mx-2 { - margin-right: .5rem !important -} - -.mb-2, -.my-2 { - margin-bottom: .5rem !important -} - -.ml-2, -.mx-2 { - margin-left: .5rem !important -} - -.m-3 { - margin: 1rem !important -} - -.mt-3, -.my-3 { - margin-top: 1rem !important -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important -} - -.m-4 { - margin: 1.5rem !important -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important -} - -.m-5 { - margin: 3rem !important -} - -.mt-5, -.my-5 { - margin-top: 3rem !important -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important -} - -.p-0 { - padding: 0 !important -} - -.pt-0, -.py-0 { - padding-top: 0 !important -} - -.pr-0, -.px-0 { - padding-right: 0 !important -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important -} - -.pl-0, -.px-0 { - padding-left: 0 !important -} - -.p-1 { - padding: .25rem !important -} - -.pt-1, -.py-1 { - padding-top: .25rem !important -} - -.pr-1, -.px-1 { - padding-right: .25rem !important -} - -.pb-1, -.py-1 { - padding-bottom: .25rem !important -} - -.pl-1, -.px-1 { - padding-left: .25rem !important -} - -.p-2 { - padding: .5rem !important -} - -.pt-2, -.py-2 { - padding-top: .5rem !important -} - -.pr-2, -.px-2 { - padding-right: .5rem !important -} - -.pb-2, -.py-2 { - padding-bottom: .5rem !important -} - -.pl-2, -.px-2 { - padding-left: .5rem !important -} - -.p-3 { - padding: 1rem !important -} - -.pt-3, -.py-3 { - padding-top: 1rem !important -} - -.pr-3, -.px-3 { - padding-right: 1rem !important -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important -} - -.pl-3, -.px-3 { - padding-left: 1rem !important -} - -.p-4 { - padding: 1.5rem !important -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important -} - -.p-5 { - padding: 3rem !important -} - -.pt-5, -.py-5 { - padding-top: 3rem !important -} - -.pr-5, -.px-5 { - padding-right: 3rem !important -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important -} - -.pl-5, -.px-5 { - padding-left: 3rem !important -} - -.m-n1 { - margin: -.25rem !important -} - -.mt-n1, -.my-n1 { - margin-top: -.25rem !important -} - -.mr-n1, -.mx-n1 { - margin-right: -.25rem !important -} - -.mb-n1, -.my-n1 { - margin-bottom: -.25rem !important -} - -.ml-n1, -.mx-n1 { - margin-left: -.25rem !important -} - -.m-n2 { - margin: -.5rem !important -} - -.mt-n2, -.my-n2 { - margin-top: -.5rem !important -} - -.mr-n2, -.mx-n2 { - margin-right: -.5rem !important -} - -.mb-n2, -.my-n2 { - margin-bottom: -.5rem !important -} - -.ml-n2, -.mx-n2 { - margin-left: -.5rem !important -} - -.m-n3 { - margin: -1rem !important -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important -} - -.m-n4 { - margin: -1.5rem !important -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important -} - -.m-n5 { - margin: -3rem !important -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important -} - -.m-auto { - margin: auto !important -} - -.mt-auto, -.my-auto { - margin-top: auto !important -} - -.mr-auto, -.mx-auto { - margin-right: auto !important -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important -} - -.ml-auto, -.mx-auto { - margin-left: auto !important -} - -@media (min-width:576px) { - .m-sm-0 { - margin: 0 !important - } - - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important - } - - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important - } - - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important - } - - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important - } - - .m-sm-1 { - margin: .25rem !important - } - - .mt-sm-1, - .my-sm-1 { - margin-top: .25rem !important - } - - .mr-sm-1, - .mx-sm-1 { - margin-right: .25rem !important - } - - .mb-sm-1, - .my-sm-1 { - margin-bottom: .25rem !important - } - - .ml-sm-1, - .mx-sm-1 { - margin-left: .25rem !important - } - - .m-sm-2 { - margin: .5rem !important - } - - .mt-sm-2, - .my-sm-2 { - margin-top: .5rem !important - } - - .mr-sm-2, - .mx-sm-2 { - margin-right: .5rem !important - } - - .mb-sm-2, - .my-sm-2 { - margin-bottom: .5rem !important - } - - .ml-sm-2, - .mx-sm-2 { - margin-left: .5rem !important - } - - .m-sm-3 { - margin: 1rem !important - } - - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important - } - - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important - } - - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important - } - - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important - } - - .m-sm-4 { - margin: 1.5rem !important - } - - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important - } - - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important - } - - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important - } - - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important - } - - .m-sm-5 { - margin: 3rem !important - } - - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important - } - - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important - } - - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important - } - - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important - } - - .p-sm-0 { - padding: 0 !important - } - - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important - } - - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important - } - - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important - } - - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important - } - - .p-sm-1 { - padding: .25rem !important - } - - .pt-sm-1, - .py-sm-1 { - padding-top: .25rem !important - } - - .pr-sm-1, - .px-sm-1 { - padding-right: .25rem !important - } - - .pb-sm-1, - .py-sm-1 { - padding-bottom: .25rem !important - } - - .pl-sm-1, - .px-sm-1 { - padding-left: .25rem !important - } - - .p-sm-2 { - padding: .5rem !important - } - - .pt-sm-2, - .py-sm-2 { - padding-top: .5rem !important - } - - .pr-sm-2, - .px-sm-2 { - padding-right: .5rem !important - } - - .pb-sm-2, - .py-sm-2 { - padding-bottom: .5rem !important - } - - .pl-sm-2, - .px-sm-2 { - padding-left: .5rem !important - } - - .p-sm-3 { - padding: 1rem !important - } - - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important - } - - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important - } - - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important - } - - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important - } - - .p-sm-4 { - padding: 1.5rem !important - } - - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important - } - - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important - } - - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important - } - - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important - } - - .p-sm-5 { - padding: 3rem !important - } - - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important - } - - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important - } - - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important - } - - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important - } - - .m-sm-n1 { - margin: -.25rem !important - } - - .mt-sm-n1, - .my-sm-n1 { - margin-top: -.25rem !important - } - - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -.25rem !important - } - - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -.25rem !important - } - - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -.25rem !important - } - - .m-sm-n2 { - margin: -.5rem !important - } - - .mt-sm-n2, - .my-sm-n2 { - margin-top: -.5rem !important - } - - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -.5rem !important - } - - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -.5rem !important - } - - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -.5rem !important - } - - .m-sm-n3 { - margin: -1rem !important - } - - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important - } - - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important - } - - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important - } - - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important - } - - .m-sm-n4 { - margin: -1.5rem !important - } - - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important - } - - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important - } - - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important - } - - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important - } - - .m-sm-n5 { - margin: -3rem !important - } - - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important - } - - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important - } - - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important - } - - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important - } - - .m-sm-auto { - margin: auto !important - } - - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important - } - - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important - } - - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important - } - - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important - } - -} - -@media (min-width:768px) { - .m-md-0 { - margin: 0 !important - } - - .mt-md-0, - .my-md-0 { - margin-top: 0 !important - } - - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important - } - - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important - } - - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important - } - - .m-md-1 { - margin: .25rem !important - } - - .mt-md-1, - .my-md-1 { - margin-top: .25rem !important - } - - .mr-md-1, - .mx-md-1 { - margin-right: .25rem !important - } - - .mb-md-1, - .my-md-1 { - margin-bottom: .25rem !important - } - - .ml-md-1, - .mx-md-1 { - margin-left: .25rem !important - } - - .m-md-2 { - margin: .5rem !important - } - - .mt-md-2, - .my-md-2 { - margin-top: .5rem !important - } - - .mr-md-2, - .mx-md-2 { - margin-right: .5rem !important - } - - .mb-md-2, - .my-md-2 { - margin-bottom: .5rem !important - } - - .ml-md-2, - .mx-md-2 { - margin-left: .5rem !important - } - - .m-md-3 { - margin: 1rem !important - } - - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important - } - - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important - } - - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important - } - - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important - } - - .m-md-4 { - margin: 1.5rem !important - } - - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important - } - - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important - } - - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important - } - - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important - } - - .m-md-5 { - margin: 3rem !important - } - - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important - } - - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important - } - - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important - } - - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important - } - - .p-md-0 { - padding: 0 !important - } - - .pt-md-0, - .py-md-0 { - padding-top: 0 !important - } - - .pr-md-0, - .px-md-0 { - padding-right: 0 !important - } - - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important - } - - .pl-md-0, - .px-md-0 { - padding-left: 0 !important - } - - .p-md-1 { - padding: .25rem !important - } - - .pt-md-1, - .py-md-1 { - padding-top: .25rem !important - } - - .pr-md-1, - .px-md-1 { - padding-right: .25rem !important - } - - .pb-md-1, - .py-md-1 { - padding-bottom: .25rem !important - } - - .pl-md-1, - .px-md-1 { - padding-left: .25rem !important - } - - .p-md-2 { - padding: .5rem !important - } - - .pt-md-2, - .py-md-2 { - padding-top: .5rem !important - } - - .pr-md-2, - .px-md-2 { - padding-right: .5rem !important - } - - .pb-md-2, - .py-md-2 { - padding-bottom: .5rem !important - } - - .pl-md-2, - .px-md-2 { - padding-left: .5rem !important - } - - .p-md-3 { - padding: 1rem !important - } - - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important - } - - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important - } - - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important - } - - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important - } - - .p-md-4 { - padding: 1.5rem !important - } - - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important - } - - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important - } - - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important - } - - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important - } - - .p-md-5 { - padding: 3rem !important - } - - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important - } - - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important - } - - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important - } - - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important - } - - .m-md-n1 { - margin: -.25rem !important - } - - .mt-md-n1, - .my-md-n1 { - margin-top: -.25rem !important - } - - .mr-md-n1, - .mx-md-n1 { - margin-right: -.25rem !important - } - - .mb-md-n1, - .my-md-n1 { - margin-bottom: -.25rem !important - } - - .ml-md-n1, - .mx-md-n1 { - margin-left: -.25rem !important - } - - .m-md-n2 { - margin: -.5rem !important - } - - .mt-md-n2, - .my-md-n2 { - margin-top: -.5rem !important - } - - .mr-md-n2, - .mx-md-n2 { - margin-right: -.5rem !important - } - - .mb-md-n2, - .my-md-n2 { - margin-bottom: -.5rem !important - } - - .ml-md-n2, - .mx-md-n2 { - margin-left: -.5rem !important - } - - .m-md-n3 { - margin: -1rem !important - } - - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important - } - - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important - } - - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important - } - - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important - } - - .m-md-n4 { - margin: -1.5rem !important - } - - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important - } - - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important - } - - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important - } - - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important - } - - .m-md-n5 { - margin: -3rem !important - } - - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important - } - - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important - } - - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important - } - - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important - } - - .m-md-auto { - margin: auto !important - } - - .mt-md-auto, - .my-md-auto { - margin-top: auto !important - } - - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important - } - - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important - } - - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important - } - -} - -@media (min-width:992px) { - .m-lg-0 { - margin: 0 !important - } - - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important - } - - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important - } - - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important - } - - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important - } - - .m-lg-1 { - margin: .25rem !important - } - - .mt-lg-1, - .my-lg-1 { - margin-top: .25rem !important - } - - .mr-lg-1, - .mx-lg-1 { - margin-right: .25rem !important - } - - .mb-lg-1, - .my-lg-1 { - margin-bottom: .25rem !important - } - - .ml-lg-1, - .mx-lg-1 { - margin-left: .25rem !important - } - - .m-lg-2 { - margin: .5rem !important - } - - .mt-lg-2, - .my-lg-2 { - margin-top: .5rem !important - } - - .mr-lg-2, - .mx-lg-2 { - margin-right: .5rem !important - } - - .mb-lg-2, - .my-lg-2 { - margin-bottom: .5rem !important - } - - .ml-lg-2, - .mx-lg-2 { - margin-left: .5rem !important - } - - .m-lg-3 { - margin: 1rem !important - } - - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important - } - - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important - } - - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important - } - - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important - } - - .m-lg-4 { - margin: 1.5rem !important - } - - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important - } - - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important - } - - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important - } - - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important - } - - .m-lg-5 { - margin: 3rem !important - } - - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important - } - - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important - } - - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important - } - - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important - } - - .p-lg-0 { - padding: 0 !important - } - - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important - } - - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important - } - - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important - } - - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important - } - - .p-lg-1 { - padding: .25rem !important - } - - .pt-lg-1, - .py-lg-1 { - padding-top: .25rem !important - } - - .pr-lg-1, - .px-lg-1 { - padding-right: .25rem !important - } - - .pb-lg-1, - .py-lg-1 { - padding-bottom: .25rem !important - } - - .pl-lg-1, - .px-lg-1 { - padding-left: .25rem !important - } - - .p-lg-2 { - padding: .5rem !important - } - - .pt-lg-2, - .py-lg-2 { - padding-top: .5rem !important - } - - .pr-lg-2, - .px-lg-2 { - padding-right: .5rem !important - } - - .pb-lg-2, - .py-lg-2 { - padding-bottom: .5rem !important - } - - .pl-lg-2, - .px-lg-2 { - padding-left: .5rem !important - } - - .p-lg-3 { - padding: 1rem !important - } - - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important - } - - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important - } - - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important - } - - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important - } - - .p-lg-4 { - padding: 1.5rem !important - } - - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important - } - - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important - } - - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important - } - - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important - } - - .p-lg-5 { - padding: 3rem !important - } - - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important - } - - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important - } - - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important - } - - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important - } - - .m-lg-n1 { - margin: -.25rem !important - } - - .mt-lg-n1, - .my-lg-n1 { - margin-top: -.25rem !important - } - - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -.25rem !important - } - - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -.25rem !important - } - - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -.25rem !important - } - - .m-lg-n2 { - margin: -.5rem !important - } - - .mt-lg-n2, - .my-lg-n2 { - margin-top: -.5rem !important - } - - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -.5rem !important - } - - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -.5rem !important - } - - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -.5rem !important - } - - .m-lg-n3 { - margin: -1rem !important - } - - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important - } - - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important - } - - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important - } - - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important - } - - .m-lg-n4 { - margin: -1.5rem !important - } - - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important - } - - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important - } - - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important - } - - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important - } - - .m-lg-n5 { - margin: -3rem !important - } - - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important - } - - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important - } - - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important - } - - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important - } - - .m-lg-auto { - margin: auto !important - } - - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important - } - - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important - } - - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important - } - - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important - } - -} - -@media (min-width:1200px) { - .m-xl-0 { - margin: 0 !important - } - - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important - } - - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important - } - - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important - } - - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important - } - - .m-xl-1 { - margin: .25rem !important - } - - .mt-xl-1, - .my-xl-1 { - margin-top: .25rem !important - } - - .mr-xl-1, - .mx-xl-1 { - margin-right: .25rem !important - } - - .mb-xl-1, - .my-xl-1 { - margin-bottom: .25rem !important - } - - .ml-xl-1, - .mx-xl-1 { - margin-left: .25rem !important - } - - .m-xl-2 { - margin: .5rem !important - } - - .mt-xl-2, - .my-xl-2 { - margin-top: .5rem !important - } - - .mr-xl-2, - .mx-xl-2 { - margin-right: .5rem !important - } - - .mb-xl-2, - .my-xl-2 { - margin-bottom: .5rem !important - } - - .ml-xl-2, - .mx-xl-2 { - margin-left: .5rem !important - } - - .m-xl-3 { - margin: 1rem !important - } - - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important - } - - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important - } - - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important - } - - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important - } - - .m-xl-4 { - margin: 1.5rem !important - } - - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important - } - - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important - } - - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important - } - - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important - } - - .m-xl-5 { - margin: 3rem !important - } - - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important - } - - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important - } - - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important - } - - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important - } - - .p-xl-0 { - padding: 0 !important - } - - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important - } - - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important - } - - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important - } - - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important - } - - .p-xl-1 { - padding: .25rem !important - } - - .pt-xl-1, - .py-xl-1 { - padding-top: .25rem !important - } - - .pr-xl-1, - .px-xl-1 { - padding-right: .25rem !important - } - - .pb-xl-1, - .py-xl-1 { - padding-bottom: .25rem !important - } - - .pl-xl-1, - .px-xl-1 { - padding-left: .25rem !important - } - - .p-xl-2 { - padding: .5rem !important - } - - .pt-xl-2, - .py-xl-2 { - padding-top: .5rem !important - } - - .pr-xl-2, - .px-xl-2 { - padding-right: .5rem !important - } - - .pb-xl-2, - .py-xl-2 { - padding-bottom: .5rem !important - } - - .pl-xl-2, - .px-xl-2 { - padding-left: .5rem !important - } - - .p-xl-3 { - padding: 1rem !important - } - - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important - } - - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important - } - - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important - } - - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important - } - - .p-xl-4 { - padding: 1.5rem !important - } - - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important - } - - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important - } - - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important - } - - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important - } - - .p-xl-5 { - padding: 3rem !important - } - - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important - } - - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important - } - - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important - } - - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important - } - - .m-xl-n1 { - margin: -.25rem !important - } - - .mt-xl-n1, - .my-xl-n1 { - margin-top: -.25rem !important - } - - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -.25rem !important - } - - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -.25rem !important - } - - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -.25rem !important - } - - .m-xl-n2 { - margin: -.5rem !important - } - - .mt-xl-n2, - .my-xl-n2 { - margin-top: -.5rem !important - } - - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -.5rem !important - } - - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -.5rem !important - } - - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -.5rem !important - } - - .m-xl-n3 { - margin: -1rem !important - } - - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important - } - - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important - } - - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important - } - - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important - } - - .m-xl-n4 { - margin: -1.5rem !important - } - - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important - } - - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important - } - - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important - } - - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important - } - - .m-xl-n5 { - margin: -3rem !important - } - - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important - } - - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important - } - - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important - } - - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important - } - - .m-xl-auto { - margin: auto !important - } - - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important - } - - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important - } - - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important - } - - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important - } - -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important -} - -.text-justify { - text-align: justify !important -} - -.text-wrap { - white-space: normal !important -} - -.text-nowrap { - white-space: nowrap !important -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap -} - -.text-left { - text-align: left !important -} - -.text-right { - text-align: right !important -} - -.text-center { - text-align: center !important -} - -@media (min-width:576px) { - .text-sm-left { - text-align: left !important - } - - .text-sm-right { - text-align: right !important - } - - .text-sm-center { - text-align: center !important - } - -} - -@media (min-width:768px) { - .text-md-left { - text-align: left !important - } - - .text-md-right { - text-align: right !important - } - - .text-md-center { - text-align: center !important - } - -} - -@media (min-width:992px) { - .text-lg-left { - text-align: left !important - } - - .text-lg-right { - text-align: right !important - } - - .text-lg-center { - text-align: center !important - } - -} - -@media (min-width:1200px) { - .text-xl-left { - text-align: left !important - } - - .text-xl-right { - text-align: right !important - } - - .text-xl-center { - text-align: center !important - } - -} - -.text-lowercase { - text-transform: lowercase !important -} - -.text-uppercase { - text-transform: uppercase !important -} - -.text-capitalize { - text-transform: capitalize !important -} - -.font-weight-light { - font-weight: 300 !important -} - -.font-weight-lighter { - font-weight: lighter !important -} - -.font-weight-normal { - font-weight: 400 !important -} - -.font-weight-bold { - font-weight: 700 !important -} - -.font-weight-bolder { - font-weight: bolder !important -} - -.font-italic { - font-style: italic !important -} - -.text-white { - color: #fff !important -} - -.text-primary { - color: #047006 !important -} - -a.text-primary:focus, -a.text-primary:hover { - color: #012602 !important -} - -.text-secondary { - color: grey !important -} - -a.text-secondary:focus, -a.text-secondary:hover { - color: #5a5a5a !important -} - -.text-success { - color: #00e093 !important -} - -a.text-success:focus, -a.text-success:hover { - color: #009461 !important -} - -.text-info { - color: #6c61f6 !important -} - -a.text-info:focus, -a.text-info:hover { - color: #2919f2 !important -} - -.text-warning { - color: #f0825f !important -} - -a.text-warning:focus, -a.text-warning:hover { - color: #e94b19 !important -} - -.text-danger { - color: #ff5f66 !important -} - -a.text-danger:focus, -a.text-danger:hover { - color: #ff131d !important -} - -.text-light { - color: #dfdfdf !important -} - -a.text-light:focus, -a.text-light:hover { - color: #b9b9b9 !important -} - -.text-dark { - color: #74767b !important -} - -a.text-dark:focus, -a.text-dark:hover { - color: #4f5054 !important -} - -.text-white { - color: #fff !important -} - -a.text-white:focus, -a.text-white:hover { - color: #d9d9d9 !important -} - -.text-orange { - color: #ffa600 !important -} - -a.text-orange:focus, -a.text-orange:hover { - color: #b37400 !important -} - -.text-body { - color: #212529 !important -} - -.text-muted { - color: #adb5bd !important -} - -.text-black-50 { - color: rgba(0, 0, 0, .5) !important -} - -.text-white-50 { - color: rgba(255, 255, 255, .5) !important -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0 -} - -.text-decoration-none { - text-decoration: none !important -} - -.text-break { - word-break: break-word !important; - overflow-wrap: break-word !important -} - -.text-reset { - color: inherit !important -} - -.visible { - visibility: visible !important -} - -.invisible { - visibility: hidden !important -} - -@media print { - *, - ::after, - ::before { - text-shadow: none !important; - box-shadow: none !important - } - - a:not(.btn) { - text-decoration: underline - } - - abbr[title]::after { - content: '3'attr(title) ")" - } - - pre { - white-space: pre-wrap !important - } - - blockquote, - pre { - border: 1px solid #adb5bd; - page-break-inside: avoid - } - - thead { - display: table-header-group - } - - img, - tr { - page-break-inside: avoid - } - - h2, - h3, - p { - orphans: 3; - widows: 3 - } - - h2, - h3 { - page-break-after: avoid - } - - @page { - size: a3 - } - - body { - min-width: 992px !important - } - - .container { - min-width: 992px !important - } - - .navbar { - display: none - } - - .badge { - border: 1px solid #000 - } - - .table { - border-collapse: collapse !important - } - - .table td, - .table th { - background-color: #fff !important - } - - .table-bordered td, - .table-bordered th { - border: 1px solid #dee2e6 !important - } - - .table-dark { - color: inherit - } - - .table-dark tbody+tbody, - .table-dark td, - .table-dark th, - .table-dark thead th { - border-color: #f2f4f9 - } - - .table .thead-dark th { - color: inherit; - border-color: #f2f4f9 - } - -} - -.dev-info { - position: fixed; - color: grey; - font-size: smaller; - left: 8px; - z-index: 120 -} - -.versionstring { - top: 70px; - right: 8px; - left: auto -} - -.grd-time-used { - bottom: 0 -} - -footer { - position: absolute; - bottom: 0; - left: 0; - right: 0; - padding: 2rem 2.5rem; - max-width: 1140px; - margin-left: auto; - margin-right: auto -} - -@media (max-width:991.98px) { - footer { - padding: 20px 0 30px 0 - } - -} - -footer ul { - margin-left: 0; - padding-left: 0 -} - -footer ul li { - display: inline-block; - padding: 0 10px 0 0; - line-height: 1 -} - -footer ul li:not(:last-child) { - margin-right: 10px; - border-right: 1px solid #f2f4f9 -} - -footer ul li a { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 400; - letter-spacing: .03rem; - color: #565656 -} - -@media (min-width:768px) and (max-width:991px) { - footer ul li a { - font-size: calc(14px + 0 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - footer ul li a { - font-size: calc(14px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - footer ul li a { - font-size: 13px - } - -} - -.alert { - border: none; - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 400 -} - -@media (min-width:768px) and (max-width:991px) { - .alert { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .alert { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .alert { - font-size: 14px - } - -} - -.alert .alert-heading { - margin-top: 20px; - margin-bottom: 10px -} - -.alert .btn-dismmiss { - margin-top: 20px -} - -.alert.dismissible-alert { - position: relative; - padding-right: 40px -} - -.alert.dismissible-alert .alert-close { - position: absolute; - top: 0; - right: 0; - bottom: 0; - padding: 10px; - font-size: 18px; - display: -webkit-box; - display: flex; - cursor: pointer; - height: inherit; - -webkit-box-align: center; - align-items: center -} - -.alert-notification-wrapper { - position: fixed; - left: 17rem; - right: 0; - z-index: 999 -} - -@media (max-width:991.98px) { - .alert-notification-wrapper { - left: 0 - } - -} - -.alert-notification-wrapper.top { - top: 70px -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter { - border: 2px solid #55acee; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter i { - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook { - border: 2px solid #0084ff; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook i { - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google { - border: 2px solid #dd4b39; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google i { - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin { - border: 2px solid #0077b5; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin i { - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest { - border: 2px solid #bd081c; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest i { - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube { - border: 2px solid #cd201f; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube i { - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github { - border: 2px solid #333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github i { - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance { - border: 2px solid #0454f6; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance i { - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble { - border: 2px solid #ea4c89; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble i { - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit { - border: 2px solid #ed4333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit i { - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram { - border: 2px solid #ff759b; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram i { - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-inverse-primary { - background: rgba(4, 112, 6, .15); - color: #047006 -} - -.btn-inverse-primary i { - color: inherit -} - -.btn-inverse-primary:hover { - background: rgba(4, 112, 6, .8); - color: #fff -} - -.btn-inverse-secondary { - background: rgba(128, 128, 128, .15); - color: grey -} - -.btn-inverse-secondary i { - color: inherit -} - -.btn-inverse-secondary:hover { - background: rgba(128, 128, 128, .8); - color: #fff -} - -.btn-inverse-success { - background: rgba(0, 224, 147, .15); - color: #00e093 -} - -.btn-inverse-success i { - color: inherit -} - -.btn-inverse-success:hover { - background: rgba(0, 224, 147, .8); - color: #fff -} - -.btn-inverse-info { - background: rgba(108, 97, 246, .15); - color: #6c61f6 -} - -.btn-inverse-info i { - color: inherit -} - -.btn-inverse-info:hover { - background: rgba(108, 97, 246, .8); - color: #fff -} - -.btn-inverse-warning { - background: rgba(240, 130, 95, .15); - color: #f0825f -} - -.btn-inverse-warning i { - color: inherit -} - -.btn-inverse-warning:hover { - background: rgba(240, 130, 95, .8); - color: #fff -} - -.btn-inverse-danger { - background: rgba(255, 95, 102, .15); - color: #ff5f66 -} - -.btn-inverse-danger i { - color: inherit -} - -.btn-inverse-danger:hover { - background: rgba(255, 95, 102, .8); - color: #fff -} - -.btn-inverse-light { - background: rgba(223, 223, 223, .15); - color: #dfdfdf -} - -.btn-inverse-light i { - color: inherit -} - -.btn-inverse-light:hover { - background: rgba(223, 223, 223, .8); - color: #fff -} - -.btn-inverse-dark { - background: rgba(116, 118, 123, .15); - color: #74767b -} - -.btn-inverse-dark i { - color: inherit -} - -.btn-inverse-dark:hover { - background: rgba(116, 118, 123, .8); - color: #fff -} - -.btn-inverse-white { - background: rgba(255, 255, 255, .15); - color: #fff -} - -.btn-inverse-white i { - color: inherit -} - -.btn-inverse-white:hover { - background: rgba(255, 255, 255, .8); - color: #fff -} - -.btn-inverse-orange { - background: rgba(255, 166, 0, .15); - color: #ffa600 -} - -.btn-inverse-orange i { - color: inherit -} - -.btn-inverse-orange:hover { - background: rgba(255, 166, 0, .8); - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter { - background: #55acee; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter:hover { - background: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-facebook { - background: #0084ff; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-facebook:hover { - background: #006acc -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-btn-outlined).btn-google { - background: #dd4b39; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-google:hover { - background: #c23321 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-btn-outlined).btn-linkedin { - background: #0077b5; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-linkedin:hover { - background: #005582 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-btn-outlined).btn-pinterest { - background: #bd081c; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-pinterest:hover { - background: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-youtube { - background: #cd201f; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-youtube:hover { - background: #a11918 -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-btn-outlined).btn-github { - background: #333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-github:hover { - background: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-btn-outlined).btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-behance { - background: #0454f6; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-behance:hover { - background: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-dribbble { - background: #ea4c89; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-dribbble:hover { - background: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-reddit { - background: #ed4333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-reddit:hover { - background: #da2413 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-btn-outlined).btn-instagram { - background: #ff759b; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-instagram:hover { - background: #ff4276 -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-group label.btn.btn-primary:not(:disabled):not(.disabled).active { - background: #000e01 -} - -.btn-group label.btn.btn-secondary:not(:disabled):not(.disabled).active { - background: #4d4d4d -} - -.btn-group label.btn.btn-success:not(:disabled):not(.disabled).active { - background: #007a50 -} - -.btn-group label.btn.btn-info:not(:disabled):not(.disabled).active { - background: #1d0de4 -} - -.btn-group label.btn.btn-warning:not(:disabled):not(.disabled).active { - background: #d54314 -} - -.btn-group label.btn.btn-danger:not(:disabled):not(.disabled).active { - background: #f8000b -} - -.btn-group label.btn.btn-light:not(:disabled):not(.disabled).active { - background: #acacac -} - -.btn-group label.btn.btn-dark:not(:disabled):not(.disabled).active { - background: #424447 -} - -.btn-group label.btn.btn-white:not(:disabled):not(.disabled).active { - background: #ccc -} - -.btn-group label.btn.btn-orange:not(:disabled):not(.disabled).active { - background: #996400 -} - -.btn-outline-primary { - border: 2px solid #047006 -} - -.btn-outline-secondary { - border: 2px solid grey -} - -.btn-outline-success { - border: 2px solid #00e093 -} - -.btn-outline-info { - border: 2px solid #6c61f6 -} - -.btn-outline-warning { - border: 2px solid #f0825f -} - -.btn-outline-danger { - border: 2px solid #ff5f66 -} - -.btn-outline-light { - border: 2px solid #dfdfdf -} - -.btn-outline-dark { - border: 2px solid #74767b -} - -.btn-outline-white { - border: 2px solid #fff -} - -.btn-outline-orange { - border: 2px solid #ffa600 -} - -.btn-group label.btn input { - display: none -} - -.btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - -webkit-transition: .3s ease; - transition: .3s ease; - -webkit-transition-property: background, color; - transition-property: background, color; - font-size: .875rem; - font-family: Roboto, sans-serif; - font-weight: 600; - letter-spacing: .03rem -} - -.btn:not([class*=btn-inverse]):not(.component-flat) { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.btn i { - font-size: 1.25rem -} - -.btn-group-lg>.btn, -.btn.btn-lg { - height: 55px; - max-height: 55px; - padding: 15px 30px; - font-size: 1.125rem -} - -.btn-group-sm>.btn, -.btn.btn-sm { - height: 35px; - max-height: 35px; - padding: 4px 15px; - font-size: .875rem -} - -.btn.btn-xs { - height: 25px; - max-height: 25px; - padding: 0 10px; - line-height: 1; - font-size: .75rem -} - -.btn.btn-xs.has-icon i, -.btn.btn-xs.has-icon span { - font-size: .8125rem; - margin-right: 5px -} - -.btn { - height: 40px; - max-height: 40px; - padding: 5px 20px -} - -.btn.active { - box-shadow: none -} - -.btn.social-icon-btn { - height: 40px; - width: 40px -} - -.btn.social-btn i { - margin-right: 10px -} - -.btn.social-btn-outlined i { - margin-right: 10px -} - -.btn.has-icon i, -.btn.has-icon span { - font-size: 1.25rem; - margin-right: 10px; - line-height: 1 -} - -.btn.btn-outline-secondary { - color: #1a1a1a; - border-color: #676767 -} - -.btn.btn-info, -.btn.btn-warning { - color: #fff -} - -.btn.btn-light { - background: #fff; - color: #000 -} - -.btn.dropdown-dotted-list { - background: #fff -} - -.btn.dropdown-toggle-split { - padding: 0 8px -} - -.btn.action-btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - padding: 0; - height: 40px; - width: 40px -} - -.btn.action-btn i { - font-size: 1.25rem; - width: 26px; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - line-height: 23px; - vertical-align: middle; - font-size: 1.25rem -} - -.btn.action-btn i:before { - width: inherit; - height: inherit; - line-height: inherit; - font-size: inherit -} - -.btn.action-btn.btn-xs { - height: 30px; - width: 30px -} - -.btn-group-sm>.btn.action-btn, -.btn.action-btn.btn-sm { - height: 35px; - width: 35px -} - -.btn-group-lg>.btn.action-btn, -.btn.action-btn.btn-lg { - height: 50px; - width: 50px -} - -.btn-group-lg>.btn.action-btn i, -.btn.action-btn.btn-lg i { - font-size: 1.875rem; - line-height: 24px -} - -.btn.action-btn.btn-refresh.clicked i { - color: #047006; - -webkit-animation: rotate360 .8s linear infinite; - animation: rotate360 .8s linear infinite -} - -.btn.action-btn.btn-like.clicked i { - color: #ff5f66; - -webkit-animation: bounceIn .8s linear 1; - animation: bounceIn .8s linear 1 -} - -.btn.action-btn.btn-like.clicked:hover i { - color: #fff -} - -.btn.btn-rounded { - border-radius: 50px -} - -.flag-germany { - width: 40px; - height: 28px; - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - display: block -} - -.flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - display: block -} - -.language-active { - background-color: #f9fafb; - padding: 2px -} - -.language-inactive { - padding: 2px; - background-color: transparent -} - -.is-invalid .form-control { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.is-invalid .invalid-feedback { - display: block -} - -.is-valid .form-control { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.form-control { - padding-left: 20px; - padding-right: 20px; - color: rgba(16, 16, 16, .8) -} - -.form-control.placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-ms-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-webkit-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control.is-invalid { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.form-control.is-valid { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.input-group-text { - background-color: #f6f7f9; - color: #101010; - border-color: #f2f4f9; - padding: 0 10px; - font-size: 17px -} - -.is-valid .input-group-text { - background-color: rgba(4, 112, 6, .2); - color: #047006 -} - -.is-invalid .input-group-text { - background-color: rgba(240, 130, 95, .2); - color: #f0825f -} - -.form-group { - margin-bottom: 20px -} - -.form-group.input-rounded .form-control { - border-radius: 25px -} - -.custom-file .custom-file-label { - padding: 8px .75rem; - height: 41px -} - -.custom-file .custom-file-label:after { - padding: 1.45rem .8rem; - line-height: 0 -} - -.custom-select, -.custom-select[multiple] { - background: #f6f7f9; - border-color: #f0f2f5; - color: rgba(16, 16, 16, .8) -} - -.custom-select option, -.custom-select[multiple] option { - background: #f6f7f9; - color: rgba(16, 16, 16, .8); - display: block; - border-bottom: 1px solid #f2f4f9; - padding: 5px 10px -} - -.custom-select option:checked, -.custom-select[multiple] option:checked { - background: #f6f7f9 -} - -.custom-select option[selected], -.custom-select[multiple] option[selected] { - background: #f6f7f9; - display: block -} - -.custom-select[multiple] { - padding: 0; - border-radius: 2px -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: none -} - -.custom-switch .custom-control-label::after { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - background: #047006 -} - -.checkbox, -.radio { - position: relative; - display: block; - margin-top: 2px; - margin-bottom: 20px -} - -.checkbox label, -.radio label { - display: block; - padding-left: 30px; - line-height: 1.42857143; - font-size: .875rem -} - -.checkbox label input, -.radio label input { - position: absolute; - margin-left: -20px; - margin-top: 4px\9; - top: 0; - left: 0; - margin-left: 0 !important; - z-index: 1; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); - margin-top: 0 -} - -.checkbox label input:checked+.input-frame:before, -.radio label input:checked+.input-frame:before { - background-color: #fff -} - -.checkbox label input:checked+.input-frame:after, -.radio label input:checked+.input-frame:after { - color: #047006; - opacity: 1; - line-height: 1.5; - filter: alpha(opacity=100); - -webkit-transform: scale(1); - transform: scale(1) -} - -.checkbox label input:disabled+.input-frame:before, -.radio label input:disabled+.input-frame:before { - border-color: #fff -} - -.checkbox label input:disabled:checked+.input-frame:before, -.radio label input:disabled:checked+.input-frame:before { - background: #047006 -} - -.checkbox label .input-frame:before, -.radio label .input-frame:before { - position: absolute; - content: '.5'; - top: 0; - width: 19px; - height: 19px; - border-radius: 2px; - left: 0; - border: 2px solid #f2f4f9; - -webkit-transition: all; - transition: all; - -webkit-transition-duration: 250ms; - transition-duration: 250ms -} - -.checkbox label .input-frame:after, -.radio label .input-frame:after { - line-height: 1.5; - -webkit-transition: all; - transition: all; - -webkit-transition-duration: 250ms; - transition-duration: 250ms; - font-family: Material Design Icons; - opacity: 0; - filter: alpha(opacity=0); - -webkit-transform: scale(0); - transform: scale(0); - content: '3'; - position: absolute; - font-size: .9375rem; - left: 1px; - top: -2px; - color: #fff -} - -.checkbox label { - font-size: 16; - line-height: 1.5; - padding-left: 30px -} - -.checkbox label input:checked+.input-helper:before { - background-color: #fff -} - -.checkbox label input:checked+.input-helper:after { - width: 18px; - opacity: 1; - line-height: 18px; - filter: alpha(opacity=100); - -webkit-transform: scale(1); - transform: scale(1) -} - -.checkbox label input:disabled+.input-helper:before { - border-color: #f2f4f9 -} - -.checkbox label input:disabled:checked+.input-helper:after { - color: #f2f4f9 -} - -.checkbox label .input-frame:before { - position: absolute; - content: '3'; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - width: 18px; - height: 18px; - border-radius: 2px; - left: 0; - border: 2px solid #f2f4f9; - -webkit-transition: all; - transition: all; - transition-duration: 0s; - -webkit-transition-duration: 250ms; - transition-duration: 250ms -} - -.rtl .checkbox label .input-frame:before { - left: auto; - right: 0 -} - -.checkbox label .input-frame:after { - -webkit-transition: all; - transition: all; - transition-duration: 0s; - -webkit-transition-duration: 250ms; - transition-duration: 250ms; - font-family: Material Design Icons; - opacity: 0; - filter: alpha(opacity=0); - -webkit-transform: scale(0); - transform: scale(0); - content: '.5'; - position: absolute; - font-size: 15px; - font-weight: 700; - left: 0; - top: 0; - -webkit-transform: translateY(-14%); - transform: translateY(-14%); - color: #047006 -} - -.rtl .checkbox label .input-frame:after { - left: auto; - right: 0 -} - -.radio label input:checked+.input-frame:before { - background-color: #fff -} - -.radio label input:checked:disabled+.input-frame:before { - background-color: #fff; - border-color: #fff -} - -.radio label input:checked:disabled+.input-frame:after { - background-color: #047006 -} - -.radio label .input-frame:before { - border-radius: 50% -} - -.radio label .input-frame:after { - content: 'http://www.w3.org/2000/svg'; - width: 9px; - height: 9px; - background: #047006; - border-radius: 50%; - top: 5px; - left: 5px; - -webkit-transform: scale(0); - transform: scale(0) -} - -.form-inline .checkbox, -.form-inline .radio { - margin-right: 30px -} - -.form-inline .checkbox:last-child, -.form-inline .radio:last-child { - margin-right: 0 -} - -.form-inline .form-check-input { - display: none -} - -.bootstrap-tagsinput { - background: #f6f7f9; - border-color: #f0f2f5; - box-shadow: none; - min-width: 100%; - width: 100%; - max-width: 100% -} - -.bootstrap-tagsinput .tag { - display: inline-block; - background: #047006; - color: #fff; - padding: 2px 9px; - border-radius: 2px; - margin-bottom: 5px -} - -.bootstrap-tagsinput .tag:nth-child(5n+1) { - background: #047006 -} - -.bootstrap-tagsinput .tag:nth-child(5n+2) { - background: #00e093 -} - -.bootstrap-tagsinput .tag:nth-child(5n+3) { - background: #6c61f6 -} - -.bootstrap-tagsinput .tag:nth-child(5n+4) { - background: #f0825f -} - -.bootstrap-tagsinput .tag:nth-child(5n+5) { - background: #ff5f66 -} - -.page-body { - background: #fff -} - -.page-content-wrapper { - background: #f9fafb; - border-left: 1px solid #f2f4f9 -} - -@media (min-width:992px) { - .t-header .t-header-content-wrapper { - border-left: 1px solid #f2f4f9 - } - -} - -@media (min-width:768px) { - .page-body { - position: relative; - display: grid; - max-width: 100%; - grid-template-columns: 17rem calc(100vw - 17rem); - -webkit-transition: .3s; - transition: .3s - } - - .page-body .page-content-wrapper { - position: relative; - width: 100%; - min-height: 100vh; - padding: 1.5rem 2.5rem calc(90px + 1.5rem); - margin-top: 70px - } - - .page-body .page-content-wrapper .page-content-wrapper-inner { - max-width: 1140px; - margin-left: auto; - margin-right: auto - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header { - position: -webkit-sticky; - position: sticky; - top: 70px; - background: #f9fafb; - z-index: 99 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb { - padding: 1rem 1rem 1rem 21px; - margin-left: -20px; - margin-right: -20px; - background: #f9fafb - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item { - color: #565656; - letter-spacing: .03rem; - font-family: Roboto, sans-serif; - font-weight: 500 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item a { - color: inherit - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item.active { - color: #047006 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-title-heading { - color: #565656; - font-size: 1.5rem; - font-family: Roboto, sans-serif; - font-weight: 500; - margin-bottom: 0 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-description { - opacity: .7; - margin-top: 15px - } - - body.sidebar-minimized .t-header .t-header-brand-wrapper { - background: #f9fafb - } - - body.sidebar-minimized .t-header .t-header-content-wrapper { - border-left: #f9fafb - } - - body.sidebar-minimized .page-body { - grid-template-columns: 0 100% - } - - body.sidebar-minimized .page-body .sidebar .sidebar_footer { - left: -17rem - } - - body.sidebar-minimized .page-body .sidebar .nav-category-divider { - position: initial - } - -} - -@media (max-width:991.98px) { - .t-header { - width: 100vw - } - - .t-header .t-header-brand-wrapper { - background: #f9fafb; - width: 4rem; - min-width: 4rem; - max-width: 4rem - } - - .t-header .t-header-brand-wrapper a .logo { - -webkit-animation-name: menuItemFadeIn; - animation-name: menuItemFadeIn; - -webkit-animation-duration: .25s; - animation-duration: .25s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: none - } - - @-webkit-keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - @keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - .t-header .t-header-brand-wrapper a .logo-mini { - display: block - } - - .page-body { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - overflow: hidden; - max-width: 100% - } - - .page-body .sidebar { - position: relative; - left: 0; - z-index: 99; - width: 15rem; - min-width: 15rem; - max-width: 15rem; - margin-left: -15rem; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left, width; - transition-property: margin-left, width - } - - .page-body .sidebar .sidebar_footer { - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: left; - transition-property: left; - left: -15rem - } - - .page-body .page-content-wrapper { - padding: 20px 20px; - min-width: 100vw; - margin-left: 0; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left; - transition-property: margin-left - } - - .page-body .page-content-wrapper .viewport-header .breadcrumb { - background: 0 0; - padding-left: 0 - } - - .page-body .page-content-wrapper footer { - position: relative - } - - .page-body.sidebar-collpased .sidebar { - margin-left: 0; - min-width: 15rem - } - - .page-body.sidebar-collpased .sidebar .sidebar_footer { - left: 0 - } - -} - -@media (max-width:767.98px) { - .page-body .page-content-wrapper { - padding: 80px 20px 0 20px - } - -} - -.logo { - display: block; - margin: 0 auto; - width: 280px -} - -.logo img { - width: 100% -} - -.grid { - background: #fff; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, .75) -} - -.grid-header { - padding: 15px 20px; - margin-bottom: 15px; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 14px; - letter-spacing: .03rem; - background: #f9fafb; - border-left: 3px solid #047006; - border-radius: 0 6px 0 0 -} - -@media (min-width:768px) and (max-width:991px) { - .grid-header { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .grid-header { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .grid-header { - font-size: 14px - } - -} - -.grid-title { - opacity: .9; - margin-bottom: 25px -} - -.close { - color: #101010 -} - -.split-header { - display: -webkit-box; - display: flex; - -webkit-box-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper { - display: -webkit-box; - display: flex -} - -.split-header .content-wrapper a i, -.split-header .content-wrapper span i { - font-size: 20px; - color: #adb5bd; - -webkit-transition: .3s ease color; - transition: .3s ease color -} - -.split-header .content-wrapper a i:hover, -.split-header .content-wrapper span i:hover { - color: #047006 -} - -.split-header .content-wrapper.v-centered { - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper.h-centered { - -webkit-box-pack: center; - justify-content: center -} - -.grid-body { - padding: 20px 25px 20px -} - -.card-title { - font-size: 14px; - font-family: Roboto, sans-serif; - font-weight: 500; - color: #313131; - margin-bottom: 0 -} - -@media (min-width:768px) and (max-width:991px) { - .card-title { - font-size: calc(14px + 1 * ((100vw - 768px)/ 223)) - } - -} - -@media (min-width:991px) and (max-width:1200px) { - .card-title { - font-size: calc(15px + -1 * ((100vw - 991px)/ 209)) - } - -} - -@media (min-width:1200px) { - .card-title { - font-size: 14px - } - -} - -.equel-grid { - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch -} - -.equel-grid .grid { - width: 100%; - min-width: 100% -} - -.showcase_row_area { - margin-bottom: 20px -} - -.showcase_row_area .showcase_text_area { - text-align: right -} - -@media (max-width:767.98px) { - .showcase_row_area .showcase_text_area { - text-align: left - } - -} - -.showcase_row_area .showcase_content_area { - margin-bottom: -10px -} - -.showcase_row_area .showcase_content_area .btn { - margin-right: 5px; - margin-bottom: 10px -} - -.showcase_row_area:last-child { - margin-bottom: 0 -} - -.content-preview { - width: 45px; - height: 45px -} - -.content-preview.rounded { - border-radius: 100% -} - -.btn:not(.disabled),.cursor_pointer,a { - cursor: pointer -} - -.grd-positive-currency { - color: #047006 -} - -.grd-negative-currency { - color: red -} - -.color-success { - color: var(--success) -} - -.color-danger { - color: var(--danger) -} - -.color-warning { - color: var(--warning) -} - -.color-primary { - color: var(--primary) -} - -.btn-gradido-orange { - color: #fff; - background-color: #ffa600; - border-color: #ffa600 -} - -.visible-modal { - display: block -} - -.margin-top-10 { - margin-top: 10px -} - -.pull-right { - float: right -} - -.pull-right-row { - display: block; - margin-right: 10px -} - -.display-block { - display: block -} - -p.grd_small { - margin-top: 2px; - margin-bottom: 2px -} - -ul.grd-no-style { - list-style-type: none -} - -.center-ul-container ul { - padding-left: 0; - margin-bottom: 0; - text-align: center -} - -.center-ul-container ul .grd-error { - margin-top: 5px; - color: #8b0000 -} - -.grd-alert-color { - color: #ff5f66 !important -} - -.grd-success-color { - color: #047006 !important -} - -.grd-orange-color { - color: #ffa600 -} - -.hidden { - display: none -} - -.alert { - cursor: pointer -} - -.table.table-auto-break td, -.table.table-auto-break th { - white-space: pre-line -} - -.grd-passphrase-words { - cursor: pointer -} - -.authentication-theme .reset-pwd-link, -.authentication-theme .signup-link { - margin: 20px auto 0 auto; - text-align: center; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center -} - -.authentication-theme .reset-pwd-link a, -.authentication-theme .signup-link a { - display: inline-block; - margin-left: 10px -} - -.authentication-theme .auth_footer { - margin-top: 30px -} - -.authentication-theme.auth-style_1 { - min-height: 100vh; - width: 100%; - background: #f9fafb; - padding: 10% 0 2px 0 -} - -.authentication-theme.auth-style_1 .logo-section { - margin-bottom: 50px -} - -.authentication-theme.auth-style_1 .grid-body { - padding: 60px 15px; - padding-bottom: 80px; - position: relative -} - -.authentication-theme.auth-style_1 .grid-body .form-wrapper { - position: unset -} - -.authentication-theme.auth-style_1 .grid-body-small { - padding: 15px 5px; - position: relative -} - -.authentication-theme.auth-style_1 .signup-link { - position: absolute; - bottom: 25px; - left: 0; - right: 0 -} - -.authentication-theme.auth-style_1 .reset-pwd-link { - position: absolute; - bottom: 20px; - left: 0; - right: 0 -} - -.authentication-theme.auth-style_2 { - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch; - -webkit-box-pack: center; - justify-content: center; - min-height: 100vh -} - -.authentication-theme.auth-style_2 .inner-wrapper { - width: 100% -} - -.authentication-theme.auth-style_2 .banner-section { - background: url(http://www.placehold.it/1200x800) no-repeat center; - background-size: 60%; - background-color: #fff; - display: -webkit-box; - display: flex; - -webkit-box-align: end; - align-items: flex-end -} - -.authentication-theme.auth-style_2 .banner-section .auth_footer { - padding: 20px 20px -} - -@media (max-width:767.98px) { - .authentication-theme.auth-style_2 .banner-section { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 0 - } - -} - -.authentication-theme.auth-style_2 .form-section { - background-color: #fff; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center -} - -.authentication-theme.auth-style_2 .form-section .logo-section { - margin: 0 auto 50px auto -} - -.authentication-theme.auth-style_2 .form-section form { - width: 100%; - max-width: 350px; - margin: 0 auto -} - -@media (max-width:767.98px) { - .authentication-theme.auth-style_2 .form-section { - background: rgba(255, 255, 255, .96) - } - -} - -.authentication-theme.auth-style_3 { - background: url(http://www.placehold.it/1200x800) no-repeat center; - background-size: cover; - background-color: #fff; - min-height: 100vh; - height: 100%; - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch; - -webkit-box-pack: center; - justify-content: center -} - -.authentication-theme.auth-style_3 .inner-wrapper { - width: 100% -} - -.authentication-theme.auth-style_3 .logo-section { - margin: 0 auto 50px auto -} - -.authentication-theme.auth-style_3 .form-section { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center -} - -.authentication-theme.auth-style_3 .form-section form { - width: 100%; - max-width: 400px; - margin: 0 auto -} - -@media (max-width:767.98px) { - .authentication-theme.auth-style_3 .form-section form { - max-width: 300px - } - -} diff --git a/community_server/webroot/css/main.css b/community_server/webroot/css/main.css deleted file mode 100644 index 3e16f1164..000000000 --- a/community_server/webroot/css/main.css +++ /dev/null @@ -1,25 +0,0 @@ -@charset "UTF-8"; -/* ============================================================ - - Common CSS file, importing other files. - - Datei : main.css - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ - -@import url(normalize.css); -@import url(grd_styles.css); - -/*! debug.css v0.0.3 | MIT License | https://gist.github.com/zaydek/6b2e55258734deabbd2b4a284321d6f6 */ -[debug], -[debug] * { - color: hsla(210, 100%, 100%, 0.9) !important; - background: hsla(210, 100%, 50%, 0.5) !important; - outline: solid 0.25rem hsla(210, 100%, 100%, 0.5) !important; - - box-shadow: none !important; - filter: none !important; -} diff --git a/community_server/webroot/css/materialdesignicons.min.css b/community_server/webroot/css/materialdesignicons.min.css deleted file mode 100644 index bbdcbc816..000000000 --- a/community_server/webroot/css/materialdesignicons.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/* MaterialDesignIcons.com */@font-face{font-family:"Material Design Icons";src:url("../fonts/materialdesignicons-webfont.eot?v=3.5.95");src:url("../fonts/materialdesignicons-webfont.eot?#iefix&v=3.5.95") format("embedded-opentype"),url("../fonts/materialdesignicons-webfont.woff2?v=3.5.95") format("woff2"),url("../fonts/materialdesignicons-webfont.woff?v=3.5.95") format("woff"),url("../fonts/materialdesignicons-webfont.ttf?v=3.5.95") format("truetype"),url("../fonts/materialdesignicons-webfont.svg?v=3.5.95#materialdesigniconsregular") format("svg");font-weight:normal;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-access-point:before{content:"\F002"}.mdi-access-point-network:before{content:"\F003"}.mdi-access-point-network-off:before{content:"\FBBD"}.mdi-account:before{content:"\F004"}.mdi-account-alert:before{content:"\F005"}.mdi-account-alert-outline:before{content:"\FB2C"}.mdi-account-arrow-left:before{content:"\FB2D"}.mdi-account-arrow-left-outline:before{content:"\FB2E"}.mdi-account-arrow-right:before{content:"\FB2F"}.mdi-account-arrow-right-outline:before{content:"\FB30"}.mdi-account-badge:before{content:"\FD83"}.mdi-account-badge-alert:before{content:"\FD84"}.mdi-account-badge-alert-outline:before{content:"\FD85"}.mdi-account-badge-outline:before{content:"\FD86"}.mdi-account-box:before{content:"\F006"}.mdi-account-box-multiple:before{content:"\F933"}.mdi-account-box-outline:before{content:"\F007"}.mdi-account-card-details:before{content:"\F5D2"}.mdi-account-card-details-outline:before{content:"\FD87"}.mdi-account-check:before{content:"\F008"}.mdi-account-check-outline:before{content:"\FBBE"}.mdi-account-child:before{content:"\FA88"}.mdi-account-child-circle:before{content:"\FA89"}.mdi-account-circle:before{content:"\F009"}.mdi-account-circle-outline:before{content:"\FB31"}.mdi-account-clock:before{content:"\FB32"}.mdi-account-clock-outline:before{content:"\FB33"}.mdi-account-convert:before{content:"\F00A"}.mdi-account-details:before{content:"\F631"}.mdi-account-edit:before{content:"\F6BB"}.mdi-account-group:before{content:"\F848"}.mdi-account-group-outline:before{content:"\FB34"}.mdi-account-heart:before{content:"\F898"}.mdi-account-heart-outline:before{content:"\FBBF"}.mdi-account-key:before{content:"\F00B"}.mdi-account-key-outline:before{content:"\FBC0"}.mdi-account-minus:before{content:"\F00D"}.mdi-account-minus-outline:before{content:"\FAEB"}.mdi-account-multiple:before{content:"\F00E"}.mdi-account-multiple-check:before{content:"\F8C4"}.mdi-account-multiple-minus:before{content:"\F5D3"}.mdi-account-multiple-minus-outline:before{content:"\FBC1"}.mdi-account-multiple-outline:before{content:"\F00F"}.mdi-account-multiple-plus:before{content:"\F010"}.mdi-account-multiple-plus-outline:before{content:"\F7FF"}.mdi-account-network:before{content:"\F011"}.mdi-account-network-outline:before{content:"\FBC2"}.mdi-account-off:before{content:"\F012"}.mdi-account-off-outline:before{content:"\FBC3"}.mdi-account-outline:before{content:"\F013"}.mdi-account-plus:before{content:"\F014"}.mdi-account-plus-outline:before{content:"\F800"}.mdi-account-question:before{content:"\FB35"}.mdi-account-question-outline:before{content:"\FB36"}.mdi-account-remove:before{content:"\F015"}.mdi-account-remove-outline:before{content:"\FAEC"}.mdi-account-search:before{content:"\F016"}.mdi-account-search-outline:before{content:"\F934"}.mdi-account-settings:before{content:"\F630"}.mdi-account-star:before{content:"\F017"}.mdi-account-star-outline:before{content:"\FBC4"}.mdi-account-supervisor:before{content:"\FA8A"}.mdi-account-supervisor-circle:before{content:"\FA8B"}.mdi-account-switch:before{content:"\F019"}.mdi-account-tie:before{content:"\FCBF"}.mdi-accusoft:before{content:"\F849"}.mdi-adchoices:before{content:"\FD1E"}.mdi-adjust:before{content:"\F01A"}.mdi-adobe:before{content:"\F935"}.mdi-air-conditioner:before{content:"\F01B"}.mdi-air-filter:before{content:"\FD1F"}.mdi-air-horn:before{content:"\FD88"}.mdi-air-purifier:before{content:"\FD20"}.mdi-airbag:before{content:"\FBC5"}.mdi-airballoon:before{content:"\F01C"}.mdi-airplane:before{content:"\F01D"}.mdi-airplane-landing:before{content:"\F5D4"}.mdi-airplane-off:before{content:"\F01E"}.mdi-airplane-takeoff:before{content:"\F5D5"}.mdi-airplay:before{content:"\F01F"}.mdi-airport:before{content:"\F84A"}.mdi-alarm:before{content:"\F020"}.mdi-alarm-bell:before{content:"\F78D"}.mdi-alarm-check:before{content:"\F021"}.mdi-alarm-light:before{content:"\F78E"}.mdi-alarm-light-outline:before{content:"\FBC6"}.mdi-alarm-multiple:before{content:"\F022"}.mdi-alarm-off:before{content:"\F023"}.mdi-alarm-plus:before{content:"\F024"}.mdi-alarm-snooze:before{content:"\F68D"}.mdi-album:before{content:"\F025"}.mdi-alert:before{content:"\F026"}.mdi-alert-box:before{content:"\F027"}.mdi-alert-box-outline:before{content:"\FCC0"}.mdi-alert-circle:before{content:"\F028"}.mdi-alert-circle-outline:before{content:"\F5D6"}.mdi-alert-decagram:before{content:"\F6BC"}.mdi-alert-decagram-outline:before{content:"\FCC1"}.mdi-alert-octagon:before{content:"\F029"}.mdi-alert-octagon-outline:before{content:"\FCC2"}.mdi-alert-octagram:before{content:"\F766"}.mdi-alert-octagram-outline:before{content:"\FCC3"}.mdi-alert-outline:before{content:"\F02A"}.mdi-alien:before{content:"\F899"}.mdi-all-inclusive:before{content:"\F6BD"}.mdi-alpha:before{content:"\F02B"}.mdi-alpha-a:before{content:"\41"}.mdi-alpha-a-box:before{content:"\FAED"}.mdi-alpha-a-box-outline:before{content:"\FBC7"}.mdi-alpha-a-circle:before{content:"\FBC8"}.mdi-alpha-a-circle-outline:before{content:"\FBC9"}.mdi-alpha-b:before{content:"\42"}.mdi-alpha-b-box:before{content:"\FAEE"}.mdi-alpha-b-box-outline:before{content:"\FBCA"}.mdi-alpha-b-circle:before{content:"\FBCB"}.mdi-alpha-b-circle-outline:before{content:"\FBCC"}.mdi-alpha-c:before{content:"\43"}.mdi-alpha-c-box:before{content:"\FAEF"}.mdi-alpha-c-box-outline:before{content:"\FBCD"}.mdi-alpha-c-circle:before{content:"\FBCE"}.mdi-alpha-c-circle-outline:before{content:"\FBCF"}.mdi-alpha-d:before{content:"\44"}.mdi-alpha-d-box:before{content:"\FAF0"}.mdi-alpha-d-box-outline:before{content:"\FBD0"}.mdi-alpha-d-circle:before{content:"\FBD1"}.mdi-alpha-d-circle-outline:before{content:"\FBD2"}.mdi-alpha-e:before{content:"\45"}.mdi-alpha-e-box:before{content:"\FAF1"}.mdi-alpha-e-box-outline:before{content:"\FBD3"}.mdi-alpha-e-circle:before{content:"\FBD4"}.mdi-alpha-e-circle-outline:before{content:"\FBD5"}.mdi-alpha-f:before{content:"\46"}.mdi-alpha-f-box:before{content:"\FAF2"}.mdi-alpha-f-box-outline:before{content:"\FBD6"}.mdi-alpha-f-circle:before{content:"\FBD7"}.mdi-alpha-f-circle-outline:before{content:"\FBD8"}.mdi-alpha-g:before{content:"\47"}.mdi-alpha-g-box:before{content:"\FAF3"}.mdi-alpha-g-box-outline:before{content:"\FBD9"}.mdi-alpha-g-circle:before{content:"\FBDA"}.mdi-alpha-g-circle-outline:before{content:"\FBDB"}.mdi-alpha-h:before{content:"\48"}.mdi-alpha-h-box:before{content:"\FAF4"}.mdi-alpha-h-box-outline:before{content:"\FBDC"}.mdi-alpha-h-circle:before{content:"\FBDD"}.mdi-alpha-h-circle-outline:before{content:"\FBDE"}.mdi-alpha-i:before{content:"\49"}.mdi-alpha-i-box:before{content:"\FAF5"}.mdi-alpha-i-box-outline:before{content:"\FBDF"}.mdi-alpha-i-circle:before{content:"\FBE0"}.mdi-alpha-i-circle-outline:before{content:"\FBE1"}.mdi-alpha-j:before{content:"\4A"}.mdi-alpha-j-box:before{content:"\FAF6"}.mdi-alpha-j-box-outline:before{content:"\FBE2"}.mdi-alpha-j-circle:before{content:"\FBE3"}.mdi-alpha-j-circle-outline:before{content:"\FBE4"}.mdi-alpha-k:before{content:"\4B"}.mdi-alpha-k-box:before{content:"\FAF7"}.mdi-alpha-k-box-outline:before{content:"\FBE5"}.mdi-alpha-k-circle:before{content:"\FBE6"}.mdi-alpha-k-circle-outline:before{content:"\FBE7"}.mdi-alpha-l:before{content:"\4C"}.mdi-alpha-l-box:before{content:"\FAF8"}.mdi-alpha-l-box-outline:before{content:"\FBE8"}.mdi-alpha-l-circle:before{content:"\FBE9"}.mdi-alpha-l-circle-outline:before{content:"\FBEA"}.mdi-alpha-m:before{content:"\4D"}.mdi-alpha-m-box:before{content:"\FAF9"}.mdi-alpha-m-box-outline:before{content:"\FBEB"}.mdi-alpha-m-circle:before{content:"\FBEC"}.mdi-alpha-m-circle-outline:before{content:"\FBED"}.mdi-alpha-n:before{content:"\4E"}.mdi-alpha-n-box:before{content:"\FAFA"}.mdi-alpha-n-box-outline:before{content:"\FBEE"}.mdi-alpha-n-circle:before{content:"\FBEF"}.mdi-alpha-n-circle-outline:before{content:"\FBF0"}.mdi-alpha-o:before{content:"\4F"}.mdi-alpha-o-box:before{content:"\FAFB"}.mdi-alpha-o-box-outline:before{content:"\FBF1"}.mdi-alpha-o-circle:before{content:"\FBF2"}.mdi-alpha-o-circle-outline:before{content:"\FBF3"}.mdi-alpha-p:before{content:"\50"}.mdi-alpha-p-box:before{content:"\FAFC"}.mdi-alpha-p-box-outline:before{content:"\FBF4"}.mdi-alpha-p-circle:before{content:"\FBF5"}.mdi-alpha-p-circle-outline:before{content:"\FBF6"}.mdi-alpha-q:before{content:"\51"}.mdi-alpha-q-box:before{content:"\FAFD"}.mdi-alpha-q-box-outline:before{content:"\FBF7"}.mdi-alpha-q-circle:before{content:"\FBF8"}.mdi-alpha-q-circle-outline:before{content:"\FBF9"}.mdi-alpha-r:before{content:"\52"}.mdi-alpha-r-box:before{content:"\FAFE"}.mdi-alpha-r-box-outline:before{content:"\FBFA"}.mdi-alpha-r-circle:before{content:"\FBFB"}.mdi-alpha-r-circle-outline:before{content:"\FBFC"}.mdi-alpha-s:before{content:"\53"}.mdi-alpha-s-box:before{content:"\FAFF"}.mdi-alpha-s-box-outline:before{content:"\FBFD"}.mdi-alpha-s-circle:before{content:"\FBFE"}.mdi-alpha-s-circle-outline:before{content:"\FBFF"}.mdi-alpha-t:before{content:"\54"}.mdi-alpha-t-box:before{content:"\FB00"}.mdi-alpha-t-box-outline:before{content:"\FC00"}.mdi-alpha-t-circle:before{content:"\FC01"}.mdi-alpha-t-circle-outline:before{content:"\FC02"}.mdi-alpha-u:before{content:"\55"}.mdi-alpha-u-box:before{content:"\FB01"}.mdi-alpha-u-box-outline:before{content:"\FC03"}.mdi-alpha-u-circle:before{content:"\FC04"}.mdi-alpha-u-circle-outline:before{content:"\FC05"}.mdi-alpha-v:before{content:"\56"}.mdi-alpha-v-box:before{content:"\FB02"}.mdi-alpha-v-box-outline:before{content:"\FC06"}.mdi-alpha-v-circle:before{content:"\FC07"}.mdi-alpha-v-circle-outline:before{content:"\FC08"}.mdi-alpha-w:before{content:"\57"}.mdi-alpha-w-box:before{content:"\FB03"}.mdi-alpha-w-box-outline:before{content:"\FC09"}.mdi-alpha-w-circle:before{content:"\FC0A"}.mdi-alpha-w-circle-outline:before{content:"\FC0B"}.mdi-alpha-x:before{content:"\58"}.mdi-alpha-x-box:before{content:"\FB04"}.mdi-alpha-x-box-outline:before{content:"\FC0C"}.mdi-alpha-x-circle:before{content:"\FC0D"}.mdi-alpha-x-circle-outline:before{content:"\FC0E"}.mdi-alpha-y:before{content:"\59"}.mdi-alpha-y-box:before{content:"\FB05"}.mdi-alpha-y-box-outline:before{content:"\FC0F"}.mdi-alpha-y-circle:before{content:"\FC10"}.mdi-alpha-y-circle-outline:before{content:"\FC11"}.mdi-alpha-z:before{content:"\5A"}.mdi-alpha-z-box:before{content:"\FB06"}.mdi-alpha-z-box-outline:before{content:"\FC12"}.mdi-alpha-z-circle:before{content:"\FC13"}.mdi-alpha-z-circle-outline:before{content:"\FC14"}.mdi-alphabetical:before{content:"\F02C"}.mdi-altimeter:before{content:"\F5D7"}.mdi-amazon:before{content:"\F02D"}.mdi-amazon-alexa:before{content:"\F8C5"}.mdi-amazon-drive:before{content:"\F02E"}.mdi-ambulance:before{content:"\F02F"}.mdi-ammunition:before{content:"\FCC4"}.mdi-ampersand:before{content:"\FA8C"}.mdi-amplifier:before{content:"\F030"}.mdi-anchor:before{content:"\F031"}.mdi-android:before{content:"\F032"}.mdi-android-auto:before{content:"\FA8D"}.mdi-android-debug-bridge:before{content:"\F033"}.mdi-android-head:before{content:"\F78F"}.mdi-android-messages:before{content:"\FD21"}.mdi-android-studio:before{content:"\F034"}.mdi-angle-acute:before{content:"\F936"}.mdi-angle-obtuse:before{content:"\F937"}.mdi-angle-right:before{content:"\F938"}.mdi-angular:before{content:"\F6B1"}.mdi-angularjs:before{content:"\F6BE"}.mdi-animation:before{content:"\F5D8"}.mdi-animation-outline:before{content:"\FA8E"}.mdi-animation-play:before{content:"\F939"}.mdi-animation-play-outline:before{content:"\FA8F"}.mdi-anvil:before{content:"\F89A"}.mdi-apple:before{content:"\F035"}.mdi-apple-finder:before{content:"\F036"}.mdi-apple-icloud:before{content:"\F038"}.mdi-apple-ios:before{content:"\F037"}.mdi-apple-keyboard-caps:before{content:"\F632"}.mdi-apple-keyboard-command:before{content:"\F633"}.mdi-apple-keyboard-control:before{content:"\F634"}.mdi-apple-keyboard-option:before{content:"\F635"}.mdi-apple-keyboard-shift:before{content:"\F636"}.mdi-apple-safari:before{content:"\F039"}.mdi-application:before{content:"\F614"}.mdi-application-export:before{content:"\FD89"}.mdi-application-import:before{content:"\FD8A"}.mdi-apps:before{content:"\F03B"}.mdi-apps-box:before{content:"\FD22"}.mdi-arch:before{content:"\F8C6"}.mdi-archive:before{content:"\F03C"}.mdi-arrange-bring-forward:before{content:"\F03D"}.mdi-arrange-bring-to-front:before{content:"\F03E"}.mdi-arrange-send-backward:before{content:"\F03F"}.mdi-arrange-send-to-back:before{content:"\F040"}.mdi-arrow-all:before{content:"\F041"}.mdi-arrow-bottom-left:before{content:"\F042"}.mdi-arrow-bottom-left-bold-outline:before{content:"\F9B6"}.mdi-arrow-bottom-left-thick:before{content:"\F9B7"}.mdi-arrow-bottom-right:before{content:"\F043"}.mdi-arrow-bottom-right-bold-outline:before{content:"\F9B8"}.mdi-arrow-bottom-right-thick:before{content:"\F9B9"}.mdi-arrow-collapse:before{content:"\F615"}.mdi-arrow-collapse-all:before{content:"\F044"}.mdi-arrow-collapse-down:before{content:"\F791"}.mdi-arrow-collapse-horizontal:before{content:"\F84B"}.mdi-arrow-collapse-left:before{content:"\F792"}.mdi-arrow-collapse-right:before{content:"\F793"}.mdi-arrow-collapse-up:before{content:"\F794"}.mdi-arrow-collapse-vertical:before{content:"\F84C"}.mdi-arrow-decision:before{content:"\F9BA"}.mdi-arrow-decision-auto:before{content:"\F9BB"}.mdi-arrow-decision-auto-outline:before{content:"\F9BC"}.mdi-arrow-decision-outline:before{content:"\F9BD"}.mdi-arrow-down:before{content:"\F045"}.mdi-arrow-down-bold:before{content:"\F72D"}.mdi-arrow-down-bold-box:before{content:"\F72E"}.mdi-arrow-down-bold-box-outline:before{content:"\F72F"}.mdi-arrow-down-bold-circle:before{content:"\F047"}.mdi-arrow-down-bold-circle-outline:before{content:"\F048"}.mdi-arrow-down-bold-hexagon-outline:before{content:"\F049"}.mdi-arrow-down-bold-outline:before{content:"\F9BE"}.mdi-arrow-down-box:before{content:"\F6BF"}.mdi-arrow-down-circle:before{content:"\FCB7"}.mdi-arrow-down-circle-outline:before{content:"\FCB8"}.mdi-arrow-down-drop-circle:before{content:"\F04A"}.mdi-arrow-down-drop-circle-outline:before{content:"\F04B"}.mdi-arrow-down-thick:before{content:"\F046"}.mdi-arrow-expand:before{content:"\F616"}.mdi-arrow-expand-all:before{content:"\F04C"}.mdi-arrow-expand-down:before{content:"\F795"}.mdi-arrow-expand-horizontal:before{content:"\F84D"}.mdi-arrow-expand-left:before{content:"\F796"}.mdi-arrow-expand-right:before{content:"\F797"}.mdi-arrow-expand-up:before{content:"\F798"}.mdi-arrow-expand-vertical:before{content:"\F84E"}.mdi-arrow-left:before{content:"\F04D"}.mdi-arrow-left-bold:before{content:"\F730"}.mdi-arrow-left-bold-box:before{content:"\F731"}.mdi-arrow-left-bold-box-outline:before{content:"\F732"}.mdi-arrow-left-bold-circle:before{content:"\F04F"}.mdi-arrow-left-bold-circle-outline:before{content:"\F050"}.mdi-arrow-left-bold-hexagon-outline:before{content:"\F051"}.mdi-arrow-left-bold-outline:before{content:"\F9BF"}.mdi-arrow-left-box:before{content:"\F6C0"}.mdi-arrow-left-circle:before{content:"\FCB9"}.mdi-arrow-left-circle-outline:before{content:"\FCBA"}.mdi-arrow-left-drop-circle:before{content:"\F052"}.mdi-arrow-left-drop-circle-outline:before{content:"\F053"}.mdi-arrow-left-right-bold-outline:before{content:"\F9C0"}.mdi-arrow-left-thick:before{content:"\F04E"}.mdi-arrow-right:before{content:"\F054"}.mdi-arrow-right-bold:before{content:"\F733"}.mdi-arrow-right-bold-box:before{content:"\F734"}.mdi-arrow-right-bold-box-outline:before{content:"\F735"}.mdi-arrow-right-bold-circle:before{content:"\F056"}.mdi-arrow-right-bold-circle-outline:before{content:"\F057"}.mdi-arrow-right-bold-hexagon-outline:before{content:"\F058"}.mdi-arrow-right-bold-outline:before{content:"\F9C1"}.mdi-arrow-right-box:before{content:"\F6C1"}.mdi-arrow-right-circle:before{content:"\FCBB"}.mdi-arrow-right-circle-outline:before{content:"\FCBC"}.mdi-arrow-right-drop-circle:before{content:"\F059"}.mdi-arrow-right-drop-circle-outline:before{content:"\F05A"}.mdi-arrow-right-thick:before{content:"\F055"}.mdi-arrow-split-horizontal:before{content:"\F93A"}.mdi-arrow-split-vertical:before{content:"\F93B"}.mdi-arrow-top-left:before{content:"\F05B"}.mdi-arrow-top-left-bold-outline:before{content:"\F9C2"}.mdi-arrow-top-left-thick:before{content:"\F9C3"}.mdi-arrow-top-right:before{content:"\F05C"}.mdi-arrow-top-right-bold-outline:before{content:"\F9C4"}.mdi-arrow-top-right-thick:before{content:"\F9C5"}.mdi-arrow-up:before{content:"\F05D"}.mdi-arrow-up-bold:before{content:"\F736"}.mdi-arrow-up-bold-box:before{content:"\F737"}.mdi-arrow-up-bold-box-outline:before{content:"\F738"}.mdi-arrow-up-bold-circle:before{content:"\F05F"}.mdi-arrow-up-bold-circle-outline:before{content:"\F060"}.mdi-arrow-up-bold-hexagon-outline:before{content:"\F061"}.mdi-arrow-up-bold-outline:before{content:"\F9C6"}.mdi-arrow-up-box:before{content:"\F6C2"}.mdi-arrow-up-circle:before{content:"\FCBD"}.mdi-arrow-up-circle-outline:before{content:"\FCBE"}.mdi-arrow-up-down-bold-outline:before{content:"\F9C7"}.mdi-arrow-up-drop-circle:before{content:"\F062"}.mdi-arrow-up-drop-circle-outline:before{content:"\F063"}.mdi-arrow-up-thick:before{content:"\F05E"}.mdi-artist:before{content:"\F802"}.mdi-artist-outline:before{content:"\FCC5"}.mdi-artstation:before{content:"\FB37"}.mdi-aspect-ratio:before{content:"\FA23"}.mdi-assistant:before{content:"\F064"}.mdi-asterisk:before{content:"\F6C3"}.mdi-at:before{content:"\F065"}.mdi-atlassian:before{content:"\F803"}.mdi-atm:before{content:"\FD23"}.mdi-atom:before{content:"\F767"}.mdi-attachment:before{content:"\F066"}.mdi-audio-video:before{content:"\F93C"}.mdi-audiobook:before{content:"\F067"}.mdi-augmented-reality:before{content:"\F84F"}.mdi-auto-fix:before{content:"\F068"}.mdi-auto-upload:before{content:"\F069"}.mdi-autorenew:before{content:"\F06A"}.mdi-av-timer:before{content:"\F06B"}.mdi-axe:before{content:"\F8C7"}.mdi-axis:before{content:"\FD24"}.mdi-axis-arrow:before{content:"\FD25"}.mdi-axis-arrow-lock:before{content:"\FD26"}.mdi-axis-lock:before{content:"\FD27"}.mdi-axis-x-arrow:before{content:"\FD28"}.mdi-axis-x-arrow-lock:before{content:"\FD29"}.mdi-axis-x-rotate-clockwise:before{content:"\FD2A"}.mdi-axis-x-rotate-counterclockwise:before{content:"\FD2B"}.mdi-axis-x-y-arrow-lock:before{content:"\FD2C"}.mdi-axis-y-arrow:before{content:"\FD2D"}.mdi-axis-y-arrow-lock:before{content:"\FD2E"}.mdi-axis-y-rotate-clockwise:before{content:"\FD2F"}.mdi-axis-y-rotate-counterclockwise:before{content:"\FD30"}.mdi-axis-z-arrow:before{content:"\FD31"}.mdi-axis-z-arrow-lock:before{content:"\FD32"}.mdi-axis-z-rotate-clockwise:before{content:"\FD33"}.mdi-axis-z-rotate-counterclockwise:before{content:"\FD34"}.mdi-azure:before{content:"\F804"}.mdi-babel:before{content:"\FA24"}.mdi-baby:before{content:"\F06C"}.mdi-baby-buggy:before{content:"\F68E"}.mdi-backburger:before{content:"\F06D"}.mdi-backspace:before{content:"\F06E"}.mdi-backspace-outline:before{content:"\FB38"}.mdi-backup-restore:before{content:"\F06F"}.mdi-badminton:before{content:"\F850"}.mdi-balloon:before{content:"\FA25"}.mdi-ballot:before{content:"\F9C8"}.mdi-ballot-outline:before{content:"\F9C9"}.mdi-ballot-recount:before{content:"\FC15"}.mdi-ballot-recount-outline:before{content:"\FC16"}.mdi-bandage:before{content:"\FD8B"}.mdi-bandcamp:before{content:"\F674"}.mdi-bank:before{content:"\F070"}.mdi-bank-minus:before{content:"\FD8C"}.mdi-bank-plus:before{content:"\FD8D"}.mdi-bank-remove:before{content:"\FD8E"}.mdi-bank-transfer:before{content:"\FA26"}.mdi-bank-transfer-in:before{content:"\FA27"}.mdi-bank-transfer-out:before{content:"\FA28"}.mdi-barcode:before{content:"\F071"}.mdi-barcode-scan:before{content:"\F072"}.mdi-barley:before{content:"\F073"}.mdi-barley-off:before{content:"\FB39"}.mdi-barn:before{content:"\FB3A"}.mdi-barrel:before{content:"\F074"}.mdi-baseball:before{content:"\F851"}.mdi-baseball-bat:before{content:"\F852"}.mdi-basecamp:before{content:"\F075"}.mdi-basket:before{content:"\F076"}.mdi-basket-fill:before{content:"\F077"}.mdi-basket-unfill:before{content:"\F078"}.mdi-basketball:before{content:"\F805"}.mdi-basketball-hoop:before{content:"\FC17"}.mdi-basketball-hoop-outline:before{content:"\FC18"}.mdi-bat:before{content:"\FB3B"}.mdi-battery:before{content:"\F079"}.mdi-battery-10:before{content:"\F07A"}.mdi-battery-10-bluetooth:before{content:"\F93D"}.mdi-battery-20:before{content:"\F07B"}.mdi-battery-20-bluetooth:before{content:"\F93E"}.mdi-battery-30:before{content:"\F07C"}.mdi-battery-30-bluetooth:before{content:"\F93F"}.mdi-battery-40:before{content:"\F07D"}.mdi-battery-40-bluetooth:before{content:"\F940"}.mdi-battery-50:before{content:"\F07E"}.mdi-battery-50-bluetooth:before{content:"\F941"}.mdi-battery-60:before{content:"\F07F"}.mdi-battery-60-bluetooth:before{content:"\F942"}.mdi-battery-70:before{content:"\F080"}.mdi-battery-70-bluetooth:before{content:"\F943"}.mdi-battery-80:before{content:"\F081"}.mdi-battery-80-bluetooth:before{content:"\F944"}.mdi-battery-90:before{content:"\F082"}.mdi-battery-90-bluetooth:before{content:"\F945"}.mdi-battery-alert:before{content:"\F083"}.mdi-battery-alert-bluetooth:before{content:"\F946"}.mdi-battery-bluetooth:before{content:"\F947"}.mdi-battery-bluetooth-variant:before{content:"\F948"}.mdi-battery-charging:before{content:"\F084"}.mdi-battery-charging-10:before{content:"\F89B"}.mdi-battery-charging-100:before{content:"\F085"}.mdi-battery-charging-20:before{content:"\F086"}.mdi-battery-charging-30:before{content:"\F087"}.mdi-battery-charging-40:before{content:"\F088"}.mdi-battery-charging-50:before{content:"\F89C"}.mdi-battery-charging-60:before{content:"\F089"}.mdi-battery-charging-70:before{content:"\F89D"}.mdi-battery-charging-80:before{content:"\F08A"}.mdi-battery-charging-90:before{content:"\F08B"}.mdi-battery-charging-outline:before{content:"\F89E"}.mdi-battery-charging-wireless:before{content:"\F806"}.mdi-battery-charging-wireless-10:before{content:"\F807"}.mdi-battery-charging-wireless-20:before{content:"\F808"}.mdi-battery-charging-wireless-30:before{content:"\F809"}.mdi-battery-charging-wireless-40:before{content:"\F80A"}.mdi-battery-charging-wireless-50:before{content:"\F80B"}.mdi-battery-charging-wireless-60:before{content:"\F80C"}.mdi-battery-charging-wireless-70:before{content:"\F80D"}.mdi-battery-charging-wireless-80:before{content:"\F80E"}.mdi-battery-charging-wireless-90:before{content:"\F80F"}.mdi-battery-charging-wireless-alert:before{content:"\F810"}.mdi-battery-charging-wireless-outline:before{content:"\F811"}.mdi-battery-minus:before{content:"\F08C"}.mdi-battery-negative:before{content:"\F08D"}.mdi-battery-outline:before{content:"\F08E"}.mdi-battery-plus:before{content:"\F08F"}.mdi-battery-positive:before{content:"\F090"}.mdi-battery-unknown:before{content:"\F091"}.mdi-battery-unknown-bluetooth:before{content:"\F949"}.mdi-battlenet:before{content:"\FB3C"}.mdi-beach:before{content:"\F092"}.mdi-beaker:before{content:"\FCC6"}.mdi-beaker-outline:before{content:"\F68F"}.mdi-beats:before{content:"\F097"}.mdi-bed-empty:before{content:"\F89F"}.mdi-beer:before{content:"\F098"}.mdi-behance:before{content:"\F099"}.mdi-bell:before{content:"\F09A"}.mdi-bell-alert:before{content:"\FD35"}.mdi-bell-circle:before{content:"\FD36"}.mdi-bell-circle-outline:before{content:"\FD37"}.mdi-bell-off:before{content:"\F09B"}.mdi-bell-off-outline:before{content:"\FA90"}.mdi-bell-outline:before{content:"\F09C"}.mdi-bell-plus:before{content:"\F09D"}.mdi-bell-plus-outline:before{content:"\FA91"}.mdi-bell-ring:before{content:"\F09E"}.mdi-bell-ring-outline:before{content:"\F09F"}.mdi-bell-sleep:before{content:"\F0A0"}.mdi-bell-sleep-outline:before{content:"\FA92"}.mdi-beta:before{content:"\F0A1"}.mdi-betamax:before{content:"\F9CA"}.mdi-bible:before{content:"\F0A2"}.mdi-bike:before{content:"\F0A3"}.mdi-billiards:before{content:"\FB3D"}.mdi-billiards-rack:before{content:"\FB3E"}.mdi-bing:before{content:"\F0A4"}.mdi-binoculars:before{content:"\F0A5"}.mdi-bio:before{content:"\F0A6"}.mdi-biohazard:before{content:"\F0A7"}.mdi-bitbucket:before{content:"\F0A8"}.mdi-bitcoin:before{content:"\F812"}.mdi-black-mesa:before{content:"\F0A9"}.mdi-blackberry:before{content:"\F0AA"}.mdi-blender:before{content:"\FCC7"}.mdi-blender-software:before{content:"\F0AB"}.mdi-blinds:before{content:"\F0AC"}.mdi-block-helper:before{content:"\F0AD"}.mdi-blogger:before{content:"\F0AE"}.mdi-blood-bag:before{content:"\FCC8"}.mdi-bluetooth:before{content:"\F0AF"}.mdi-bluetooth-audio:before{content:"\F0B0"}.mdi-bluetooth-connect:before{content:"\F0B1"}.mdi-bluetooth-off:before{content:"\F0B2"}.mdi-bluetooth-settings:before{content:"\F0B3"}.mdi-bluetooth-transfer:before{content:"\F0B4"}.mdi-blur:before{content:"\F0B5"}.mdi-blur-linear:before{content:"\F0B6"}.mdi-blur-off:before{content:"\F0B7"}.mdi-blur-radial:before{content:"\F0B8"}.mdi-bolnisi-cross:before{content:"\FCC9"}.mdi-bolt:before{content:"\FD8F"}.mdi-bomb:before{content:"\F690"}.mdi-bomb-off:before{content:"\F6C4"}.mdi-bone:before{content:"\F0B9"}.mdi-book:before{content:"\F0BA"}.mdi-book-lock:before{content:"\F799"}.mdi-book-lock-open:before{content:"\F79A"}.mdi-book-minus:before{content:"\F5D9"}.mdi-book-multiple:before{content:"\F0BB"}.mdi-book-multiple-minus:before{content:"\FA93"}.mdi-book-multiple-plus:before{content:"\FA94"}.mdi-book-multiple-remove:before{content:"\FA95"}.mdi-book-multiple-variant:before{content:"\F0BC"}.mdi-book-open:before{content:"\F0BD"}.mdi-book-open-outline:before{content:"\FB3F"}.mdi-book-open-page-variant:before{content:"\F5DA"}.mdi-book-open-variant:before{content:"\F0BE"}.mdi-book-outline:before{content:"\FB40"}.mdi-book-plus:before{content:"\F5DB"}.mdi-book-remove:before{content:"\FA96"}.mdi-book-variant:before{content:"\F0BF"}.mdi-bookmark:before{content:"\F0C0"}.mdi-bookmark-check:before{content:"\F0C1"}.mdi-bookmark-minus:before{content:"\F9CB"}.mdi-bookmark-minus-outline:before{content:"\F9CC"}.mdi-bookmark-music:before{content:"\F0C2"}.mdi-bookmark-off:before{content:"\F9CD"}.mdi-bookmark-off-outline:before{content:"\F9CE"}.mdi-bookmark-outline:before{content:"\F0C3"}.mdi-bookmark-plus:before{content:"\F0C5"}.mdi-bookmark-plus-outline:before{content:"\F0C4"}.mdi-bookmark-remove:before{content:"\F0C6"}.mdi-boombox:before{content:"\F5DC"}.mdi-bootstrap:before{content:"\F6C5"}.mdi-border-all:before{content:"\F0C7"}.mdi-border-all-variant:before{content:"\F8A0"}.mdi-border-bottom:before{content:"\F0C8"}.mdi-border-bottom-variant:before{content:"\F8A1"}.mdi-border-color:before{content:"\F0C9"}.mdi-border-horizontal:before{content:"\F0CA"}.mdi-border-inside:before{content:"\F0CB"}.mdi-border-left:before{content:"\F0CC"}.mdi-border-left-variant:before{content:"\F8A2"}.mdi-border-none:before{content:"\F0CD"}.mdi-border-none-variant:before{content:"\F8A3"}.mdi-border-outside:before{content:"\F0CE"}.mdi-border-right:before{content:"\F0CF"}.mdi-border-right-variant:before{content:"\F8A4"}.mdi-border-style:before{content:"\F0D0"}.mdi-border-top:before{content:"\F0D1"}.mdi-border-top-variant:before{content:"\F8A5"}.mdi-border-vertical:before{content:"\F0D2"}.mdi-bottle-wine:before{content:"\F853"}.mdi-bow-tie:before{content:"\F677"}.mdi-bowl:before{content:"\F617"}.mdi-bowling:before{content:"\F0D3"}.mdi-box:before{content:"\F0D4"}.mdi-box-cutter:before{content:"\F0D5"}.mdi-box-shadow:before{content:"\F637"}.mdi-boxing-glove:before{content:"\FB41"}.mdi-braille:before{content:"\F9CF"}.mdi-brain:before{content:"\F9D0"}.mdi-bread-slice:before{content:"\FCCA"}.mdi-bread-slice-outline:before{content:"\FCCB"}.mdi-bridge:before{content:"\F618"}.mdi-briefcase:before{content:"\F0D6"}.mdi-briefcase-account:before{content:"\FCCC"}.mdi-briefcase-account-outline:before{content:"\FCCD"}.mdi-briefcase-check:before{content:"\F0D7"}.mdi-briefcase-download:before{content:"\F0D8"}.mdi-briefcase-download-outline:before{content:"\FC19"}.mdi-briefcase-edit:before{content:"\FA97"}.mdi-briefcase-edit-outline:before{content:"\FC1A"}.mdi-briefcase-minus:before{content:"\FA29"}.mdi-briefcase-minus-outline:before{content:"\FC1B"}.mdi-briefcase-outline:before{content:"\F813"}.mdi-briefcase-plus:before{content:"\FA2A"}.mdi-briefcase-plus-outline:before{content:"\FC1C"}.mdi-briefcase-remove:before{content:"\FA2B"}.mdi-briefcase-remove-outline:before{content:"\FC1D"}.mdi-briefcase-search:before{content:"\FA2C"}.mdi-briefcase-search-outline:before{content:"\FC1E"}.mdi-briefcase-upload:before{content:"\F0D9"}.mdi-briefcase-upload-outline:before{content:"\FC1F"}.mdi-brightness-1:before{content:"\F0DA"}.mdi-brightness-2:before{content:"\F0DB"}.mdi-brightness-3:before{content:"\F0DC"}.mdi-brightness-4:before{content:"\F0DD"}.mdi-brightness-5:before{content:"\F0DE"}.mdi-brightness-6:before{content:"\F0DF"}.mdi-brightness-7:before{content:"\F0E0"}.mdi-brightness-auto:before{content:"\F0E1"}.mdi-brightness-percent:before{content:"\FCCE"}.mdi-broom:before{content:"\F0E2"}.mdi-brush:before{content:"\F0E3"}.mdi-buddhism:before{content:"\F94A"}.mdi-buffer:before{content:"\F619"}.mdi-bug:before{content:"\F0E4"}.mdi-bug-check:before{content:"\FA2D"}.mdi-bug-check-outline:before{content:"\FA2E"}.mdi-bug-outline:before{content:"\FA2F"}.mdi-bugle:before{content:"\FD90"}.mdi-bulldozer:before{content:"\FB07"}.mdi-bullet:before{content:"\FCCF"}.mdi-bulletin-board:before{content:"\F0E5"}.mdi-bullhorn:before{content:"\F0E6"}.mdi-bullhorn-outline:before{content:"\FB08"}.mdi-bullseye:before{content:"\F5DD"}.mdi-bullseye-arrow:before{content:"\F8C8"}.mdi-bus:before{content:"\F0E7"}.mdi-bus-alert:before{content:"\FA98"}.mdi-bus-articulated-end:before{content:"\F79B"}.mdi-bus-articulated-front:before{content:"\F79C"}.mdi-bus-clock:before{content:"\F8C9"}.mdi-bus-double-decker:before{content:"\F79D"}.mdi-bus-school:before{content:"\F79E"}.mdi-bus-side:before{content:"\F79F"}.mdi-cached:before{content:"\F0E8"}.mdi-cactus:before{content:"\FD91"}.mdi-cake:before{content:"\F0E9"}.mdi-cake-layered:before{content:"\F0EA"}.mdi-cake-variant:before{content:"\F0EB"}.mdi-calculator:before{content:"\F0EC"}.mdi-calculator-variant:before{content:"\FA99"}.mdi-calendar:before{content:"\F0ED"}.mdi-calendar-alert:before{content:"\FA30"}.mdi-calendar-blank:before{content:"\F0EE"}.mdi-calendar-blank-outline:before{content:"\FB42"}.mdi-calendar-check:before{content:"\F0EF"}.mdi-calendar-check-outline:before{content:"\FC20"}.mdi-calendar-clock:before{content:"\F0F0"}.mdi-calendar-edit:before{content:"\F8A6"}.mdi-calendar-export:before{content:"\FB09"}.mdi-calendar-heart:before{content:"\F9D1"}.mdi-calendar-import:before{content:"\FB0A"}.mdi-calendar-minus:before{content:"\FD38"}.mdi-calendar-multiple:before{content:"\F0F1"}.mdi-calendar-multiple-check:before{content:"\F0F2"}.mdi-calendar-multiselect:before{content:"\FA31"}.mdi-calendar-outline:before{content:"\FB43"}.mdi-calendar-plus:before{content:"\F0F3"}.mdi-calendar-question:before{content:"\F691"}.mdi-calendar-range:before{content:"\F678"}.mdi-calendar-range-outline:before{content:"\FB44"}.mdi-calendar-remove:before{content:"\F0F4"}.mdi-calendar-remove-outline:before{content:"\FC21"}.mdi-calendar-search:before{content:"\F94B"}.mdi-calendar-star:before{content:"\F9D2"}.mdi-calendar-text:before{content:"\F0F5"}.mdi-calendar-text-outline:before{content:"\FC22"}.mdi-calendar-today:before{content:"\F0F6"}.mdi-calendar-week:before{content:"\FA32"}.mdi-calendar-week-begin:before{content:"\FA33"}.mdi-call-made:before{content:"\F0F7"}.mdi-call-merge:before{content:"\F0F8"}.mdi-call-missed:before{content:"\F0F9"}.mdi-call-received:before{content:"\F0FA"}.mdi-call-split:before{content:"\F0FB"}.mdi-camcorder:before{content:"\F0FC"}.mdi-camcorder-box:before{content:"\F0FD"}.mdi-camcorder-box-off:before{content:"\F0FE"}.mdi-camcorder-off:before{content:"\F0FF"}.mdi-camera:before{content:"\F100"}.mdi-camera-account:before{content:"\F8CA"}.mdi-camera-burst:before{content:"\F692"}.mdi-camera-control:before{content:"\FB45"}.mdi-camera-enhance:before{content:"\F101"}.mdi-camera-enhance-outline:before{content:"\FB46"}.mdi-camera-front:before{content:"\F102"}.mdi-camera-front-variant:before{content:"\F103"}.mdi-camera-gopro:before{content:"\F7A0"}.mdi-camera-image:before{content:"\F8CB"}.mdi-camera-iris:before{content:"\F104"}.mdi-camera-metering-center:before{content:"\F7A1"}.mdi-camera-metering-matrix:before{content:"\F7A2"}.mdi-camera-metering-partial:before{content:"\F7A3"}.mdi-camera-metering-spot:before{content:"\F7A4"}.mdi-camera-off:before{content:"\F5DF"}.mdi-camera-outline:before{content:"\FD39"}.mdi-camera-party-mode:before{content:"\F105"}.mdi-camera-rear:before{content:"\F106"}.mdi-camera-rear-variant:before{content:"\F107"}.mdi-camera-switch:before{content:"\F108"}.mdi-camera-timer:before{content:"\F109"}.mdi-camera-wireless:before{content:"\FD92"}.mdi-camera-wireless-outline:before{content:"\FD93"}.mdi-cancel:before{content:"\F739"}.mdi-candle:before{content:"\F5E2"}.mdi-candycane:before{content:"\F10A"}.mdi-cannabis:before{content:"\F7A5"}.mdi-caps-lock:before{content:"\FA9A"}.mdi-car:before{content:"\F10B"}.mdi-car-battery:before{content:"\F10C"}.mdi-car-brake-abs:before{content:"\FC23"}.mdi-car-brake-alert:before{content:"\FC24"}.mdi-car-brake-hold:before{content:"\FD3A"}.mdi-car-brake-parking:before{content:"\FD3B"}.mdi-car-connected:before{content:"\F10D"}.mdi-car-convertible:before{content:"\F7A6"}.mdi-car-cruise-control:before{content:"\FD3C"}.mdi-car-defrost-front:before{content:"\FD3D"}.mdi-car-defrost-rear:before{content:"\FD3E"}.mdi-car-door:before{content:"\FB47"}.mdi-car-electric:before{content:"\FB48"}.mdi-car-esp:before{content:"\FC25"}.mdi-car-estate:before{content:"\F7A7"}.mdi-car-hatchback:before{content:"\F7A8"}.mdi-car-key:before{content:"\FB49"}.mdi-car-light-dimmed:before{content:"\FC26"}.mdi-car-light-fog:before{content:"\FC27"}.mdi-car-light-high:before{content:"\FC28"}.mdi-car-limousine:before{content:"\F8CC"}.mdi-car-multiple:before{content:"\FB4A"}.mdi-car-parking-lights:before{content:"\FD3F"}.mdi-car-pickup:before{content:"\F7A9"}.mdi-car-side:before{content:"\F7AA"}.mdi-car-sports:before{content:"\F7AB"}.mdi-car-tire-alert:before{content:"\FC29"}.mdi-car-traction-control:before{content:"\FD40"}.mdi-car-wash:before{content:"\F10E"}.mdi-caravan:before{content:"\F7AC"}.mdi-card:before{content:"\FB4B"}.mdi-card-bulleted:before{content:"\FB4C"}.mdi-card-bulleted-off:before{content:"\FB4D"}.mdi-card-bulleted-off-outline:before{content:"\FB4E"}.mdi-card-bulleted-outline:before{content:"\FB4F"}.mdi-card-bulleted-settings:before{content:"\FB50"}.mdi-card-bulleted-settings-outline:before{content:"\FB51"}.mdi-card-outline:before{content:"\FB52"}.mdi-card-text:before{content:"\FB53"}.mdi-card-text-outline:before{content:"\FB54"}.mdi-cards:before{content:"\F638"}.mdi-cards-club:before{content:"\F8CD"}.mdi-cards-diamond:before{content:"\F8CE"}.mdi-cards-heart:before{content:"\F8CF"}.mdi-cards-outline:before{content:"\F639"}.mdi-cards-playing-outline:before{content:"\F63A"}.mdi-cards-spade:before{content:"\F8D0"}.mdi-cards-variant:before{content:"\F6C6"}.mdi-carrot:before{content:"\F10F"}.mdi-carry-on-bag-check:before{content:"\FD41"}.mdi-cart:before{content:"\F110"}.mdi-cart-arrow-down:before{content:"\FD42"}.mdi-cart-arrow-right:before{content:"\FC2A"}.mdi-cart-arrow-up:before{content:"\FD43"}.mdi-cart-minus:before{content:"\FD44"}.mdi-cart-off:before{content:"\F66B"}.mdi-cart-outline:before{content:"\F111"}.mdi-cart-plus:before{content:"\F112"}.mdi-cart-remove:before{content:"\FD45"}.mdi-case-sensitive-alt:before{content:"\F113"}.mdi-cash:before{content:"\F114"}.mdi-cash-100:before{content:"\F115"}.mdi-cash-marker:before{content:"\FD94"}.mdi-cash-multiple:before{content:"\F116"}.mdi-cash-refund:before{content:"\FA9B"}.mdi-cash-register:before{content:"\FCD0"}.mdi-cash-usd:before{content:"\F117"}.mdi-cassette:before{content:"\F9D3"}.mdi-cast:before{content:"\F118"}.mdi-cast-connected:before{content:"\F119"}.mdi-cast-off:before{content:"\F789"}.mdi-castle:before{content:"\F11A"}.mdi-cat:before{content:"\F11B"}.mdi-cctv:before{content:"\F7AD"}.mdi-ceiling-light:before{content:"\F768"}.mdi-cellphone:before{content:"\F11C"}.mdi-cellphone-android:before{content:"\F11D"}.mdi-cellphone-arrow-down:before{content:"\F9D4"}.mdi-cellphone-basic:before{content:"\F11E"}.mdi-cellphone-dock:before{content:"\F11F"}.mdi-cellphone-erase:before{content:"\F94C"}.mdi-cellphone-iphone:before{content:"\F120"}.mdi-cellphone-key:before{content:"\F94D"}.mdi-cellphone-link:before{content:"\F121"}.mdi-cellphone-link-off:before{content:"\F122"}.mdi-cellphone-lock:before{content:"\F94E"}.mdi-cellphone-message:before{content:"\F8D2"}.mdi-cellphone-off:before{content:"\F94F"}.mdi-cellphone-screenshot:before{content:"\FA34"}.mdi-cellphone-settings:before{content:"\F123"}.mdi-cellphone-settings-variant:before{content:"\F950"}.mdi-cellphone-sound:before{content:"\F951"}.mdi-cellphone-text:before{content:"\F8D1"}.mdi-cellphone-wireless:before{content:"\F814"}.mdi-celtic-cross:before{content:"\FCD1"}.mdi-certificate:before{content:"\F124"}.mdi-chair-school:before{content:"\F125"}.mdi-charity:before{content:"\FC2B"}.mdi-chart-arc:before{content:"\F126"}.mdi-chart-areaspline:before{content:"\F127"}.mdi-chart-bar:before{content:"\F128"}.mdi-chart-bar-stacked:before{content:"\F769"}.mdi-chart-bell-curve:before{content:"\FC2C"}.mdi-chart-bubble:before{content:"\F5E3"}.mdi-chart-donut:before{content:"\F7AE"}.mdi-chart-donut-variant:before{content:"\F7AF"}.mdi-chart-gantt:before{content:"\F66C"}.mdi-chart-histogram:before{content:"\F129"}.mdi-chart-line:before{content:"\F12A"}.mdi-chart-line-stacked:before{content:"\F76A"}.mdi-chart-line-variant:before{content:"\F7B0"}.mdi-chart-multiline:before{content:"\F8D3"}.mdi-chart-pie:before{content:"\F12B"}.mdi-chart-scatterplot-hexbin:before{content:"\F66D"}.mdi-chart-timeline:before{content:"\F66E"}.mdi-chat:before{content:"\FB55"}.mdi-chat-alert:before{content:"\FB56"}.mdi-chat-processing:before{content:"\FB57"}.mdi-check:before{content:"\F12C"}.mdi-check-all:before{content:"\F12D"}.mdi-check-box-multiple-outline:before{content:"\FC2D"}.mdi-check-box-outline:before{content:"\FC2E"}.mdi-check-circle:before{content:"\F5E0"}.mdi-check-circle-outline:before{content:"\F5E1"}.mdi-check-decagram:before{content:"\F790"}.mdi-check-network:before{content:"\FC2F"}.mdi-check-network-outline:before{content:"\FC30"}.mdi-check-outline:before{content:"\F854"}.mdi-checkbook:before{content:"\FA9C"}.mdi-checkbox-blank:before{content:"\F12E"}.mdi-checkbox-blank-circle:before{content:"\F12F"}.mdi-checkbox-blank-circle-outline:before{content:"\F130"}.mdi-checkbox-blank-outline:before{content:"\F131"}.mdi-checkbox-intermediate:before{content:"\F855"}.mdi-checkbox-marked:before{content:"\F132"}.mdi-checkbox-marked-circle:before{content:"\F133"}.mdi-checkbox-marked-circle-outline:before{content:"\F134"}.mdi-checkbox-marked-outline:before{content:"\F135"}.mdi-checkbox-multiple-blank:before{content:"\F136"}.mdi-checkbox-multiple-blank-circle:before{content:"\F63B"}.mdi-checkbox-multiple-blank-circle-outline:before{content:"\F63C"}.mdi-checkbox-multiple-blank-outline:before{content:"\F137"}.mdi-checkbox-multiple-marked:before{content:"\F138"}.mdi-checkbox-multiple-marked-circle:before{content:"\F63D"}.mdi-checkbox-multiple-marked-circle-outline:before{content:"\F63E"}.mdi-checkbox-multiple-marked-outline:before{content:"\F139"}.mdi-checkerboard:before{content:"\F13A"}.mdi-chef-hat:before{content:"\FB58"}.mdi-chemical-weapon:before{content:"\F13B"}.mdi-chess-bishop:before{content:"\F85B"}.mdi-chess-king:before{content:"\F856"}.mdi-chess-knight:before{content:"\F857"}.mdi-chess-pawn:before{content:"\F858"}.mdi-chess-queen:before{content:"\F859"}.mdi-chess-rook:before{content:"\F85A"}.mdi-chevron-double-down:before{content:"\F13C"}.mdi-chevron-double-left:before{content:"\F13D"}.mdi-chevron-double-right:before{content:"\F13E"}.mdi-chevron-double-up:before{content:"\F13F"}.mdi-chevron-down:before{content:"\F140"}.mdi-chevron-down-box:before{content:"\F9D5"}.mdi-chevron-down-box-outline:before{content:"\F9D6"}.mdi-chevron-down-circle:before{content:"\FB0B"}.mdi-chevron-down-circle-outline:before{content:"\FB0C"}.mdi-chevron-left:before{content:"\F141"}.mdi-chevron-left-box:before{content:"\F9D7"}.mdi-chevron-left-box-outline:before{content:"\F9D8"}.mdi-chevron-left-circle:before{content:"\FB0D"}.mdi-chevron-left-circle-outline:before{content:"\FB0E"}.mdi-chevron-right:before{content:"\F142"}.mdi-chevron-right-box:before{content:"\F9D9"}.mdi-chevron-right-box-outline:before{content:"\F9DA"}.mdi-chevron-right-circle:before{content:"\FB0F"}.mdi-chevron-right-circle-outline:before{content:"\FB10"}.mdi-chevron-triple-down:before{content:"\FD95"}.mdi-chevron-triple-left:before{content:"\FD96"}.mdi-chevron-triple-right:before{content:"\FD97"}.mdi-chevron-triple-up:before{content:"\FD98"}.mdi-chevron-up:before{content:"\F143"}.mdi-chevron-up-box:before{content:"\F9DB"}.mdi-chevron-up-box-outline:before{content:"\F9DC"}.mdi-chevron-up-circle:before{content:"\FB11"}.mdi-chevron-up-circle-outline:before{content:"\FB12"}.mdi-chili-hot:before{content:"\F7B1"}.mdi-chili-medium:before{content:"\F7B2"}.mdi-chili-mild:before{content:"\F7B3"}.mdi-chip:before{content:"\F61A"}.mdi-christianity:before{content:"\F952"}.mdi-christianity-outline:before{content:"\FCD2"}.mdi-church:before{content:"\F144"}.mdi-circle:before{content:"\F764"}.mdi-circle-edit-outline:before{content:"\F8D4"}.mdi-circle-medium:before{content:"\F9DD"}.mdi-circle-outline:before{content:"\F765"}.mdi-circle-slice-1:before{content:"\FA9D"}.mdi-circle-slice-2:before{content:"\FA9E"}.mdi-circle-slice-3:before{content:"\FA9F"}.mdi-circle-slice-4:before{content:"\FAA0"}.mdi-circle-slice-5:before{content:"\FAA1"}.mdi-circle-slice-6:before{content:"\FAA2"}.mdi-circle-slice-7:before{content:"\FAA3"}.mdi-circle-slice-8:before{content:"\FAA4"}.mdi-circle-small:before{content:"\F9DE"}.mdi-cisco-webex:before{content:"\F145"}.mdi-city:before{content:"\F146"}.mdi-city-variant:before{content:"\FA35"}.mdi-city-variant-outline:before{content:"\FA36"}.mdi-clipboard:before{content:"\F147"}.mdi-clipboard-account:before{content:"\F148"}.mdi-clipboard-account-outline:before{content:"\FC31"}.mdi-clipboard-alert:before{content:"\F149"}.mdi-clipboard-alert-outline:before{content:"\FCD3"}.mdi-clipboard-arrow-down:before{content:"\F14A"}.mdi-clipboard-arrow-down-outline:before{content:"\FC32"}.mdi-clipboard-arrow-left:before{content:"\F14B"}.mdi-clipboard-arrow-left-outline:before{content:"\FCD4"}.mdi-clipboard-arrow-right:before{content:"\FCD5"}.mdi-clipboard-arrow-right-outline:before{content:"\FCD6"}.mdi-clipboard-arrow-up:before{content:"\FC33"}.mdi-clipboard-arrow-up-outline:before{content:"\FC34"}.mdi-clipboard-check:before{content:"\F14C"}.mdi-clipboard-check-outline:before{content:"\F8A7"}.mdi-clipboard-flow:before{content:"\F6C7"}.mdi-clipboard-outline:before{content:"\F14D"}.mdi-clipboard-play:before{content:"\FC35"}.mdi-clipboard-play-outline:before{content:"\FC36"}.mdi-clipboard-plus:before{content:"\F750"}.mdi-clipboard-pulse:before{content:"\F85C"}.mdi-clipboard-pulse-outline:before{content:"\F85D"}.mdi-clipboard-text:before{content:"\F14E"}.mdi-clipboard-text-outline:before{content:"\FA37"}.mdi-clipboard-text-play:before{content:"\FC37"}.mdi-clipboard-text-play-outline:before{content:"\FC38"}.mdi-clippy:before{content:"\F14F"}.mdi-clock:before{content:"\F953"}.mdi-clock-alert:before{content:"\F954"}.mdi-clock-alert-outline:before{content:"\F5CE"}.mdi-clock-end:before{content:"\F151"}.mdi-clock-fast:before{content:"\F152"}.mdi-clock-in:before{content:"\F153"}.mdi-clock-out:before{content:"\F154"}.mdi-clock-outline:before{content:"\F150"}.mdi-clock-start:before{content:"\F155"}.mdi-close:before{content:"\F156"}.mdi-close-box:before{content:"\F157"}.mdi-close-box-multiple:before{content:"\FC39"}.mdi-close-box-multiple-outline:before{content:"\FC3A"}.mdi-close-box-outline:before{content:"\F158"}.mdi-close-circle:before{content:"\F159"}.mdi-close-circle-outline:before{content:"\F15A"}.mdi-close-network:before{content:"\F15B"}.mdi-close-network-outline:before{content:"\FC3B"}.mdi-close-octagon:before{content:"\F15C"}.mdi-close-octagon-outline:before{content:"\F15D"}.mdi-close-outline:before{content:"\F6C8"}.mdi-closed-caption:before{content:"\F15E"}.mdi-closed-caption-outline:before{content:"\FD99"}.mdi-cloud:before{content:"\F15F"}.mdi-cloud-alert:before{content:"\F9DF"}.mdi-cloud-braces:before{content:"\F7B4"}.mdi-cloud-check:before{content:"\F160"}.mdi-cloud-circle:before{content:"\F161"}.mdi-cloud-download:before{content:"\F162"}.mdi-cloud-download-outline:before{content:"\FB59"}.mdi-cloud-off-outline:before{content:"\F164"}.mdi-cloud-outline:before{content:"\F163"}.mdi-cloud-print:before{content:"\F165"}.mdi-cloud-print-outline:before{content:"\F166"}.mdi-cloud-question:before{content:"\FA38"}.mdi-cloud-search:before{content:"\F955"}.mdi-cloud-search-outline:before{content:"\F956"}.mdi-cloud-sync:before{content:"\F63F"}.mdi-cloud-tags:before{content:"\F7B5"}.mdi-cloud-upload:before{content:"\F167"}.mdi-cloud-upload-outline:before{content:"\FB5A"}.mdi-clover:before{content:"\F815"}.mdi-code-array:before{content:"\F168"}.mdi-code-braces:before{content:"\F169"}.mdi-code-brackets:before{content:"\F16A"}.mdi-code-equal:before{content:"\F16B"}.mdi-code-greater-than:before{content:"\F16C"}.mdi-code-greater-than-or-equal:before{content:"\F16D"}.mdi-code-less-than:before{content:"\F16E"}.mdi-code-less-than-or-equal:before{content:"\F16F"}.mdi-code-not-equal:before{content:"\F170"}.mdi-code-not-equal-variant:before{content:"\F171"}.mdi-code-parentheses:before{content:"\F172"}.mdi-code-string:before{content:"\F173"}.mdi-code-tags:before{content:"\F174"}.mdi-code-tags-check:before{content:"\F693"}.mdi-codepen:before{content:"\F175"}.mdi-coffee:before{content:"\F176"}.mdi-coffee-outline:before{content:"\F6C9"}.mdi-coffee-to-go:before{content:"\F177"}.mdi-coffin:before{content:"\FB5B"}.mdi-cogs:before{content:"\F8D5"}.mdi-coin:before{content:"\F178"}.mdi-coins:before{content:"\F694"}.mdi-collage:before{content:"\F640"}.mdi-collapse-all:before{content:"\FAA5"}.mdi-collapse-all-outline:before{content:"\FAA6"}.mdi-color-helper:before{content:"\F179"}.mdi-comment:before{content:"\F17A"}.mdi-comment-account:before{content:"\F17B"}.mdi-comment-account-outline:before{content:"\F17C"}.mdi-comment-alert:before{content:"\F17D"}.mdi-comment-alert-outline:before{content:"\F17E"}.mdi-comment-arrow-left:before{content:"\F9E0"}.mdi-comment-arrow-left-outline:before{content:"\F9E1"}.mdi-comment-arrow-right:before{content:"\F9E2"}.mdi-comment-arrow-right-outline:before{content:"\F9E3"}.mdi-comment-check:before{content:"\F17F"}.mdi-comment-check-outline:before{content:"\F180"}.mdi-comment-eye:before{content:"\FA39"}.mdi-comment-eye-outline:before{content:"\FA3A"}.mdi-comment-multiple:before{content:"\F85E"}.mdi-comment-multiple-outline:before{content:"\F181"}.mdi-comment-outline:before{content:"\F182"}.mdi-comment-plus:before{content:"\F9E4"}.mdi-comment-plus-outline:before{content:"\F183"}.mdi-comment-processing:before{content:"\F184"}.mdi-comment-processing-outline:before{content:"\F185"}.mdi-comment-question:before{content:"\F816"}.mdi-comment-question-outline:before{content:"\F186"}.mdi-comment-remove:before{content:"\F5DE"}.mdi-comment-remove-outline:before{content:"\F187"}.mdi-comment-search:before{content:"\FA3B"}.mdi-comment-search-outline:before{content:"\FA3C"}.mdi-comment-text:before{content:"\F188"}.mdi-comment-text-multiple:before{content:"\F85F"}.mdi-comment-text-multiple-outline:before{content:"\F860"}.mdi-comment-text-outline:before{content:"\F189"}.mdi-compare:before{content:"\F18A"}.mdi-compass:before{content:"\F18B"}.mdi-compass-off:before{content:"\FB5C"}.mdi-compass-off-outline:before{content:"\FB5D"}.mdi-compass-outline:before{content:"\F18C"}.mdi-console:before{content:"\F18D"}.mdi-console-line:before{content:"\F7B6"}.mdi-console-network:before{content:"\F8A8"}.mdi-console-network-outline:before{content:"\FC3C"}.mdi-contact-mail:before{content:"\F18E"}.mdi-contactless-payment:before{content:"\FD46"}.mdi-contacts:before{content:"\F6CA"}.mdi-contain:before{content:"\FA3D"}.mdi-contain-end:before{content:"\FA3E"}.mdi-contain-start:before{content:"\FA3F"}.mdi-content-copy:before{content:"\F18F"}.mdi-content-cut:before{content:"\F190"}.mdi-content-duplicate:before{content:"\F191"}.mdi-content-paste:before{content:"\F192"}.mdi-content-save:before{content:"\F193"}.mdi-content-save-all:before{content:"\F194"}.mdi-content-save-edit:before{content:"\FCD7"}.mdi-content-save-edit-outline:before{content:"\FCD8"}.mdi-content-save-outline:before{content:"\F817"}.mdi-content-save-settings:before{content:"\F61B"}.mdi-content-save-settings-outline:before{content:"\FB13"}.mdi-contrast:before{content:"\F195"}.mdi-contrast-box:before{content:"\F196"}.mdi-contrast-circle:before{content:"\F197"}.mdi-controller-classic:before{content:"\FB5E"}.mdi-controller-classic-outline:before{content:"\FB5F"}.mdi-cookie:before{content:"\F198"}.mdi-copyright:before{content:"\F5E6"}.mdi-cordova:before{content:"\F957"}.mdi-corn:before{content:"\F7B7"}.mdi-counter:before{content:"\F199"}.mdi-cow:before{content:"\F19A"}.mdi-crane:before{content:"\F861"}.mdi-creation:before{content:"\F1C9"}.mdi-creative-commons:before{content:"\FD47"}.mdi-credit-card:before{content:"\F19B"}.mdi-credit-card-marker:before{content:"\FD9A"}.mdi-credit-card-multiple:before{content:"\F19C"}.mdi-credit-card-off:before{content:"\F5E4"}.mdi-credit-card-plus:before{content:"\F675"}.mdi-credit-card-refund:before{content:"\FAA7"}.mdi-credit-card-scan:before{content:"\F19D"}.mdi-credit-card-settings:before{content:"\F8D6"}.mdi-credit-card-wireless:before{content:"\FD48"}.mdi-cricket:before{content:"\FD49"}.mdi-crop:before{content:"\F19E"}.mdi-crop-free:before{content:"\F19F"}.mdi-crop-landscape:before{content:"\F1A0"}.mdi-crop-portrait:before{content:"\F1A1"}.mdi-crop-rotate:before{content:"\F695"}.mdi-crop-square:before{content:"\F1A2"}.mdi-crosshairs:before{content:"\F1A3"}.mdi-crosshairs-gps:before{content:"\F1A4"}.mdi-crown:before{content:"\F1A5"}.mdi-cryengine:before{content:"\F958"}.mdi-crystal-ball:before{content:"\FB14"}.mdi-cube:before{content:"\F1A6"}.mdi-cube-outline:before{content:"\F1A7"}.mdi-cube-scan:before{content:"\FB60"}.mdi-cube-send:before{content:"\F1A8"}.mdi-cube-unfolded:before{content:"\F1A9"}.mdi-cup:before{content:"\F1AA"}.mdi-cup-off:before{content:"\F5E5"}.mdi-cup-water:before{content:"\F1AB"}.mdi-cupcake:before{content:"\F959"}.mdi-curling:before{content:"\F862"}.mdi-currency-bdt:before{content:"\F863"}.mdi-currency-brl:before{content:"\FB61"}.mdi-currency-btc:before{content:"\F1AC"}.mdi-currency-chf:before{content:"\F7B8"}.mdi-currency-cny:before{content:"\F7B9"}.mdi-currency-eth:before{content:"\F7BA"}.mdi-currency-eur:before{content:"\F1AD"}.mdi-currency-gbp:before{content:"\F1AE"}.mdi-currency-ils:before{content:"\FC3D"}.mdi-currency-inr:before{content:"\F1AF"}.mdi-currency-jpy:before{content:"\F7BB"}.mdi-currency-krw:before{content:"\F7BC"}.mdi-currency-kzt:before{content:"\F864"}.mdi-currency-ngn:before{content:"\F1B0"}.mdi-currency-php:before{content:"\F9E5"}.mdi-currency-rub:before{content:"\F1B1"}.mdi-currency-sign:before{content:"\F7BD"}.mdi-currency-try:before{content:"\F1B2"}.mdi-currency-twd:before{content:"\F7BE"}.mdi-currency-usd:before{content:"\F1B3"}.mdi-currency-usd-off:before{content:"\F679"}.mdi-current-ac:before{content:"\F95A"}.mdi-current-dc:before{content:"\F95B"}.mdi-cursor-default:before{content:"\F1B4"}.mdi-cursor-default-click:before{content:"\FCD9"}.mdi-cursor-default-click-outline:before{content:"\FCDA"}.mdi-cursor-default-outline:before{content:"\F1B5"}.mdi-cursor-move:before{content:"\F1B6"}.mdi-cursor-pointer:before{content:"\F1B7"}.mdi-cursor-text:before{content:"\F5E7"}.mdi-database:before{content:"\F1B8"}.mdi-database-check:before{content:"\FAA8"}.mdi-database-edit:before{content:"\FB62"}.mdi-database-export:before{content:"\F95D"}.mdi-database-import:before{content:"\F95C"}.mdi-database-lock:before{content:"\FAA9"}.mdi-database-minus:before{content:"\F1B9"}.mdi-database-plus:before{content:"\F1BA"}.mdi-database-refresh:before{content:"\FCDB"}.mdi-database-remove:before{content:"\FCDC"}.mdi-database-search:before{content:"\F865"}.mdi-database-settings:before{content:"\FCDD"}.mdi-death-star:before{content:"\F8D7"}.mdi-death-star-variant:before{content:"\F8D8"}.mdi-deathly-hallows:before{content:"\FB63"}.mdi-debian:before{content:"\F8D9"}.mdi-debug-step-into:before{content:"\F1BB"}.mdi-debug-step-out:before{content:"\F1BC"}.mdi-debug-step-over:before{content:"\F1BD"}.mdi-decagram:before{content:"\F76B"}.mdi-decagram-outline:before{content:"\F76C"}.mdi-decimal-decrease:before{content:"\F1BE"}.mdi-decimal-increase:before{content:"\F1BF"}.mdi-delete:before{content:"\F1C0"}.mdi-delete-circle:before{content:"\F682"}.mdi-delete-circle-outline:before{content:"\FB64"}.mdi-delete-empty:before{content:"\F6CB"}.mdi-delete-forever:before{content:"\F5E8"}.mdi-delete-forever-outline:before{content:"\FB65"}.mdi-delete-outline:before{content:"\F9E6"}.mdi-delete-restore:before{content:"\F818"}.mdi-delete-sweep:before{content:"\F5E9"}.mdi-delete-sweep-outline:before{content:"\FC3E"}.mdi-delete-variant:before{content:"\F1C1"}.mdi-delta:before{content:"\F1C2"}.mdi-desk-lamp:before{content:"\F95E"}.mdi-deskphone:before{content:"\F1C3"}.mdi-desktop-classic:before{content:"\F7BF"}.mdi-desktop-mac:before{content:"\F1C4"}.mdi-desktop-mac-dashboard:before{content:"\F9E7"}.mdi-desktop-tower:before{content:"\F1C5"}.mdi-desktop-tower-monitor:before{content:"\FAAA"}.mdi-details:before{content:"\F1C6"}.mdi-dev-to:before{content:"\FD4A"}.mdi-developer-board:before{content:"\F696"}.mdi-deviantart:before{content:"\F1C7"}.mdi-dialpad:before{content:"\F61C"}.mdi-diameter:before{content:"\FC3F"}.mdi-diameter-outline:before{content:"\FC40"}.mdi-diameter-variant:before{content:"\FC41"}.mdi-diamond:before{content:"\FB66"}.mdi-diamond-outline:before{content:"\FB67"}.mdi-diamond-stone:before{content:"\F1C8"}.mdi-dice-1:before{content:"\F1CA"}.mdi-dice-2:before{content:"\F1CB"}.mdi-dice-3:before{content:"\F1CC"}.mdi-dice-4:before{content:"\F1CD"}.mdi-dice-5:before{content:"\F1CE"}.mdi-dice-6:before{content:"\F1CF"}.mdi-dice-d10:before{content:"\F76E"}.mdi-dice-d12:before{content:"\F866"}.mdi-dice-d20:before{content:"\F5EA"}.mdi-dice-d4:before{content:"\F5EB"}.mdi-dice-d6:before{content:"\F5EC"}.mdi-dice-d8:before{content:"\F5ED"}.mdi-dice-multiple:before{content:"\F76D"}.mdi-dictionary:before{content:"\F61D"}.mdi-dip-switch:before{content:"\F7C0"}.mdi-directions:before{content:"\F1D0"}.mdi-directions-fork:before{content:"\F641"}.mdi-disc:before{content:"\F5EE"}.mdi-disc-alert:before{content:"\F1D1"}.mdi-disc-player:before{content:"\F95F"}.mdi-discord:before{content:"\F66F"}.mdi-dishwasher:before{content:"\FAAB"}.mdi-disqus:before{content:"\F1D2"}.mdi-disqus-outline:before{content:"\F1D3"}.mdi-diving-flippers:before{content:"\FD9B"}.mdi-diving-helmet:before{content:"\FD9C"}.mdi-diving-scuba:before{content:"\FD9D"}.mdi-diving-scuba-flag:before{content:"\FD9E"}.mdi-diving-scuba-tank:before{content:"\FD9F"}.mdi-diving-scuba-tank-multiple:before{content:"\FDA0"}.mdi-diving-snorkel:before{content:"\FDA1"}.mdi-division:before{content:"\F1D4"}.mdi-division-box:before{content:"\F1D5"}.mdi-dlna:before{content:"\FA40"}.mdi-dna:before{content:"\F683"}.mdi-dns:before{content:"\F1D6"}.mdi-dns-outline:before{content:"\FB68"}.mdi-do-not-disturb:before{content:"\F697"}.mdi-do-not-disturb-off:before{content:"\F698"}.mdi-docker:before{content:"\F867"}.mdi-doctor:before{content:"\FA41"}.mdi-dog:before{content:"\FA42"}.mdi-dog-service:before{content:"\FAAC"}.mdi-dog-side:before{content:"\FA43"}.mdi-dolby:before{content:"\F6B2"}.mdi-domain:before{content:"\F1D7"}.mdi-domain-off:before{content:"\FD4B"}.mdi-donkey:before{content:"\F7C1"}.mdi-door:before{content:"\F819"}.mdi-door-closed:before{content:"\F81A"}.mdi-door-open:before{content:"\F81B"}.mdi-doorbell-video:before{content:"\F868"}.mdi-dot-net:before{content:"\FAAD"}.mdi-dots-horizontal:before{content:"\F1D8"}.mdi-dots-horizontal-circle:before{content:"\F7C2"}.mdi-dots-horizontal-circle-outline:before{content:"\FB69"}.mdi-dots-vertical:before{content:"\F1D9"}.mdi-dots-vertical-circle:before{content:"\F7C3"}.mdi-dots-vertical-circle-outline:before{content:"\FB6A"}.mdi-douban:before{content:"\F699"}.mdi-download:before{content:"\F1DA"}.mdi-download-multiple:before{content:"\F9E8"}.mdi-download-network:before{content:"\F6F3"}.mdi-download-network-outline:before{content:"\FC42"}.mdi-download-outline:before{content:"\FB6B"}.mdi-drag:before{content:"\F1DB"}.mdi-drag-horizontal:before{content:"\F1DC"}.mdi-drag-variant:before{content:"\FB6C"}.mdi-drag-vertical:before{content:"\F1DD"}.mdi-drama-masks:before{content:"\FCDE"}.mdi-drawing:before{content:"\F1DE"}.mdi-drawing-box:before{content:"\F1DF"}.mdi-dribbble:before{content:"\F1E0"}.mdi-dribbble-box:before{content:"\F1E1"}.mdi-drone:before{content:"\F1E2"}.mdi-dropbox:before{content:"\F1E3"}.mdi-drupal:before{content:"\F1E4"}.mdi-duck:before{content:"\F1E5"}.mdi-dumbbell:before{content:"\F1E6"}.mdi-dump-truck:before{content:"\FC43"}.mdi-ear-hearing:before{content:"\F7C4"}.mdi-ear-hearing-off:before{content:"\FA44"}.mdi-earth:before{content:"\F1E7"}.mdi-earth-box:before{content:"\F6CC"}.mdi-earth-box-off:before{content:"\F6CD"}.mdi-earth-off:before{content:"\F1E8"}.mdi-edge:before{content:"\F1E9"}.mdi-egg:before{content:"\FAAE"}.mdi-egg-easter:before{content:"\FAAF"}.mdi-eight-track:before{content:"\F9E9"}.mdi-eject:before{content:"\F1EA"}.mdi-eject-outline:before{content:"\FB6D"}.mdi-elephant:before{content:"\F7C5"}.mdi-elevation-decline:before{content:"\F1EB"}.mdi-elevation-rise:before{content:"\F1EC"}.mdi-elevator:before{content:"\F1ED"}.mdi-email:before{content:"\F1EE"}.mdi-email-alert:before{content:"\F6CE"}.mdi-email-box:before{content:"\FCDF"}.mdi-email-check:before{content:"\FAB0"}.mdi-email-check-outline:before{content:"\FAB1"}.mdi-email-lock:before{content:"\F1F1"}.mdi-email-mark-as-unread:before{content:"\FB6E"}.mdi-email-open:before{content:"\F1EF"}.mdi-email-open-outline:before{content:"\F5EF"}.mdi-email-outline:before{content:"\F1F0"}.mdi-email-plus:before{content:"\F9EA"}.mdi-email-plus-outline:before{content:"\F9EB"}.mdi-email-search:before{content:"\F960"}.mdi-email-search-outline:before{content:"\F961"}.mdi-email-variant:before{content:"\F5F0"}.mdi-ember:before{content:"\FB15"}.mdi-emby:before{content:"\F6B3"}.mdi-emoticon:before{content:"\FC44"}.mdi-emoticon-angry:before{content:"\FC45"}.mdi-emoticon-angry-outline:before{content:"\FC46"}.mdi-emoticon-cool:before{content:"\FC47"}.mdi-emoticon-cool-outline:before{content:"\F1F3"}.mdi-emoticon-cry:before{content:"\FC48"}.mdi-emoticon-cry-outline:before{content:"\FC49"}.mdi-emoticon-dead:before{content:"\FC4A"}.mdi-emoticon-dead-outline:before{content:"\F69A"}.mdi-emoticon-devil:before{content:"\FC4B"}.mdi-emoticon-devil-outline:before{content:"\F1F4"}.mdi-emoticon-excited:before{content:"\FC4C"}.mdi-emoticon-excited-outline:before{content:"\F69B"}.mdi-emoticon-happy:before{content:"\FC4D"}.mdi-emoticon-happy-outline:before{content:"\F1F5"}.mdi-emoticon-kiss:before{content:"\FC4E"}.mdi-emoticon-kiss-outline:before{content:"\FC4F"}.mdi-emoticon-neutral:before{content:"\FC50"}.mdi-emoticon-neutral-outline:before{content:"\F1F6"}.mdi-emoticon-outline:before{content:"\F1F2"}.mdi-emoticon-poop:before{content:"\F1F7"}.mdi-emoticon-poop-outline:before{content:"\FC51"}.mdi-emoticon-sad:before{content:"\FC52"}.mdi-emoticon-sad-outline:before{content:"\F1F8"}.mdi-emoticon-tongue:before{content:"\F1F9"}.mdi-emoticon-tongue-outline:before{content:"\FC53"}.mdi-emoticon-wink:before{content:"\FC54"}.mdi-emoticon-wink-outline:before{content:"\FC55"}.mdi-engine:before{content:"\F1FA"}.mdi-engine-off:before{content:"\FA45"}.mdi-engine-off-outline:before{content:"\FA46"}.mdi-engine-outline:before{content:"\F1FB"}.mdi-equal:before{content:"\F1FC"}.mdi-equal-box:before{content:"\F1FD"}.mdi-eraser:before{content:"\F1FE"}.mdi-eraser-variant:before{content:"\F642"}.mdi-escalator:before{content:"\F1FF"}.mdi-eslint:before{content:"\FC56"}.mdi-et:before{content:"\FAB2"}.mdi-ethereum:before{content:"\F869"}.mdi-ethernet:before{content:"\F200"}.mdi-ethernet-cable:before{content:"\F201"}.mdi-ethernet-cable-off:before{content:"\F202"}.mdi-etsy:before{content:"\F203"}.mdi-ev-station:before{content:"\F5F1"}.mdi-eventbrite:before{content:"\F7C6"}.mdi-evernote:before{content:"\F204"}.mdi-exclamation:before{content:"\F205"}.mdi-exit-run:before{content:"\FA47"}.mdi-exit-to-app:before{content:"\F206"}.mdi-expand-all:before{content:"\FAB3"}.mdi-expand-all-outline:before{content:"\FAB4"}.mdi-exponent:before{content:"\F962"}.mdi-exponent-box:before{content:"\F963"}.mdi-export:before{content:"\F207"}.mdi-export-variant:before{content:"\FB6F"}.mdi-eye:before{content:"\F208"}.mdi-eye-check:before{content:"\FCE0"}.mdi-eye-check-outline:before{content:"\FCE1"}.mdi-eye-circle:before{content:"\FB70"}.mdi-eye-circle-outline:before{content:"\FB71"}.mdi-eye-off:before{content:"\F209"}.mdi-eye-off-outline:before{content:"\F6D0"}.mdi-eye-outline:before{content:"\F6CF"}.mdi-eye-plus:before{content:"\F86A"}.mdi-eye-plus-outline:before{content:"\F86B"}.mdi-eye-settings:before{content:"\F86C"}.mdi-eye-settings-outline:before{content:"\F86D"}.mdi-eyedropper:before{content:"\F20A"}.mdi-eyedropper-variant:before{content:"\F20B"}.mdi-face:before{content:"\F643"}.mdi-face-agent:before{content:"\FD4C"}.mdi-face-outline:before{content:"\FB72"}.mdi-face-profile:before{content:"\F644"}.mdi-face-recognition:before{content:"\FC57"}.mdi-facebook:before{content:"\F20C"}.mdi-facebook-box:before{content:"\F20D"}.mdi-facebook-messenger:before{content:"\F20E"}.mdi-facebook-workplace:before{content:"\FB16"}.mdi-factory:before{content:"\F20F"}.mdi-fan:before{content:"\F210"}.mdi-fan-off:before{content:"\F81C"}.mdi-fast-forward:before{content:"\F211"}.mdi-fast-forward-10:before{content:"\FD4D"}.mdi-fast-forward-30:before{content:"\FCE2"}.mdi-fast-forward-outline:before{content:"\F6D1"}.mdi-fax:before{content:"\F212"}.mdi-feather:before{content:"\F6D2"}.mdi-feature-search:before{content:"\FA48"}.mdi-feature-search-outline:before{content:"\FA49"}.mdi-fedora:before{content:"\F8DA"}.mdi-ferry:before{content:"\F213"}.mdi-file:before{content:"\F214"}.mdi-file-account:before{content:"\F73A"}.mdi-file-alert:before{content:"\FA4A"}.mdi-file-alert-outline:before{content:"\FA4B"}.mdi-file-cabinet:before{content:"\FAB5"}.mdi-file-cancel:before{content:"\FDA2"}.mdi-file-cancel-outline:before{content:"\FDA3"}.mdi-file-chart:before{content:"\F215"}.mdi-file-check:before{content:"\F216"}.mdi-file-cloud:before{content:"\F217"}.mdi-file-compare:before{content:"\F8A9"}.mdi-file-delimited:before{content:"\F218"}.mdi-file-document:before{content:"\F219"}.mdi-file-document-box:before{content:"\F21A"}.mdi-file-document-box-multiple:before{content:"\FAB6"}.mdi-file-document-box-multiple-outline:before{content:"\FAB7"}.mdi-file-document-box-outline:before{content:"\F9EC"}.mdi-file-document-edit:before{content:"\FDA4"}.mdi-file-document-edit-outline:before{content:"\FDA5"}.mdi-file-document-outline:before{content:"\F9ED"}.mdi-file-download:before{content:"\F964"}.mdi-file-download-outline:before{content:"\F965"}.mdi-file-excel:before{content:"\F21B"}.mdi-file-excel-box:before{content:"\F21C"}.mdi-file-export:before{content:"\F21D"}.mdi-file-eye:before{content:"\FDA6"}.mdi-file-eye-outline:before{content:"\FDA7"}.mdi-file-find:before{content:"\F21E"}.mdi-file-find-outline:before{content:"\FB73"}.mdi-file-hidden:before{content:"\F613"}.mdi-file-image:before{content:"\F21F"}.mdi-file-import:before{content:"\F220"}.mdi-file-lock:before{content:"\F221"}.mdi-file-move:before{content:"\FAB8"}.mdi-file-multiple:before{content:"\F222"}.mdi-file-music:before{content:"\F223"}.mdi-file-outline:before{content:"\F224"}.mdi-file-pdf:before{content:"\F225"}.mdi-file-pdf-box:before{content:"\F226"}.mdi-file-percent:before{content:"\F81D"}.mdi-file-plus:before{content:"\F751"}.mdi-file-powerpoint:before{content:"\F227"}.mdi-file-powerpoint-box:before{content:"\F228"}.mdi-file-presentation-box:before{content:"\F229"}.mdi-file-question:before{content:"\F86E"}.mdi-file-remove:before{content:"\FB74"}.mdi-file-replace:before{content:"\FB17"}.mdi-file-replace-outline:before{content:"\FB18"}.mdi-file-restore:before{content:"\F670"}.mdi-file-search:before{content:"\FC58"}.mdi-file-search-outline:before{content:"\FC59"}.mdi-file-send:before{content:"\F22A"}.mdi-file-table:before{content:"\FC5A"}.mdi-file-table-outline:before{content:"\FC5B"}.mdi-file-tree:before{content:"\F645"}.mdi-file-undo:before{content:"\F8DB"}.mdi-file-upload:before{content:"\FA4C"}.mdi-file-upload-outline:before{content:"\FA4D"}.mdi-file-video:before{content:"\F22B"}.mdi-file-word:before{content:"\F22C"}.mdi-file-word-box:before{content:"\F22D"}.mdi-file-xml:before{content:"\F22E"}.mdi-film:before{content:"\F22F"}.mdi-filmstrip:before{content:"\F230"}.mdi-filmstrip-off:before{content:"\F231"}.mdi-filter:before{content:"\F232"}.mdi-filter-outline:before{content:"\F233"}.mdi-filter-remove:before{content:"\F234"}.mdi-filter-remove-outline:before{content:"\F235"}.mdi-filter-variant:before{content:"\F236"}.mdi-finance:before{content:"\F81E"}.mdi-find-replace:before{content:"\F6D3"}.mdi-fingerprint:before{content:"\F237"}.mdi-fire:before{content:"\F238"}.mdi-fire-truck:before{content:"\F8AA"}.mdi-firebase:before{content:"\F966"}.mdi-firefox:before{content:"\F239"}.mdi-fish:before{content:"\F23A"}.mdi-flag:before{content:"\F23B"}.mdi-flag-checkered:before{content:"\F23C"}.mdi-flag-minus:before{content:"\FB75"}.mdi-flag-outline:before{content:"\F23D"}.mdi-flag-plus:before{content:"\FB76"}.mdi-flag-remove:before{content:"\FB77"}.mdi-flag-triangle:before{content:"\F23F"}.mdi-flag-variant:before{content:"\F240"}.mdi-flag-variant-outline:before{content:"\F23E"}.mdi-flare:before{content:"\FD4E"}.mdi-flash:before{content:"\F241"}.mdi-flash-auto:before{content:"\F242"}.mdi-flash-circle:before{content:"\F81F"}.mdi-flash-off:before{content:"\F243"}.mdi-flash-outline:before{content:"\F6D4"}.mdi-flash-red-eye:before{content:"\F67A"}.mdi-flashlight:before{content:"\F244"}.mdi-flashlight-off:before{content:"\F245"}.mdi-flask:before{content:"\F093"}.mdi-flask-empty:before{content:"\F094"}.mdi-flask-empty-outline:before{content:"\F095"}.mdi-flask-outline:before{content:"\F096"}.mdi-flattr:before{content:"\F246"}.mdi-flickr:before{content:"\FCE3"}.mdi-flip-to-back:before{content:"\F247"}.mdi-flip-to-front:before{content:"\F248"}.mdi-floor-lamp:before{content:"\F8DC"}.mdi-floor-plan:before{content:"\F820"}.mdi-floppy:before{content:"\F249"}.mdi-floppy-variant:before{content:"\F9EE"}.mdi-flower:before{content:"\F24A"}.mdi-flower-outline:before{content:"\F9EF"}.mdi-flower-poppy:before{content:"\FCE4"}.mdi-flower-tulip:before{content:"\F9F0"}.mdi-flower-tulip-outline:before{content:"\F9F1"}.mdi-folder:before{content:"\F24B"}.mdi-folder-account:before{content:"\F24C"}.mdi-folder-account-outline:before{content:"\FB78"}.mdi-folder-alert:before{content:"\FDA8"}.mdi-folder-alert-outline:before{content:"\FDA9"}.mdi-folder-clock:before{content:"\FAB9"}.mdi-folder-clock-outline:before{content:"\FABA"}.mdi-folder-download:before{content:"\F24D"}.mdi-folder-edit:before{content:"\F8DD"}.mdi-folder-edit-outline:before{content:"\FDAA"}.mdi-folder-google-drive:before{content:"\F24E"}.mdi-folder-image:before{content:"\F24F"}.mdi-folder-key:before{content:"\F8AB"}.mdi-folder-key-network:before{content:"\F8AC"}.mdi-folder-key-network-outline:before{content:"\FC5C"}.mdi-folder-lock:before{content:"\F250"}.mdi-folder-lock-open:before{content:"\F251"}.mdi-folder-move:before{content:"\F252"}.mdi-folder-multiple:before{content:"\F253"}.mdi-folder-multiple-image:before{content:"\F254"}.mdi-folder-multiple-outline:before{content:"\F255"}.mdi-folder-network:before{content:"\F86F"}.mdi-folder-network-outline:before{content:"\FC5D"}.mdi-folder-open:before{content:"\F76F"}.mdi-folder-open-outline:before{content:"\FDAB"}.mdi-folder-outline:before{content:"\F256"}.mdi-folder-plus:before{content:"\F257"}.mdi-folder-plus-outline:before{content:"\FB79"}.mdi-folder-pound:before{content:"\FCE5"}.mdi-folder-pound-outline:before{content:"\FCE6"}.mdi-folder-remove:before{content:"\F258"}.mdi-folder-remove-outline:before{content:"\FB7A"}.mdi-folder-search:before{content:"\F967"}.mdi-folder-search-outline:before{content:"\F968"}.mdi-folder-star:before{content:"\F69C"}.mdi-folder-star-outline:before{content:"\FB7B"}.mdi-folder-sync:before{content:"\FCE7"}.mdi-folder-sync-outline:before{content:"\FCE8"}.mdi-folder-text:before{content:"\FC5E"}.mdi-folder-text-outline:before{content:"\FC5F"}.mdi-folder-upload:before{content:"\F259"}.mdi-font-awesome:before{content:"\F03A"}.mdi-food:before{content:"\F25A"}.mdi-food-apple:before{content:"\F25B"}.mdi-food-apple-outline:before{content:"\FC60"}.mdi-food-croissant:before{content:"\F7C7"}.mdi-food-fork-drink:before{content:"\F5F2"}.mdi-food-off:before{content:"\F5F3"}.mdi-food-variant:before{content:"\F25C"}.mdi-football:before{content:"\F25D"}.mdi-football-australian:before{content:"\F25E"}.mdi-football-helmet:before{content:"\F25F"}.mdi-forklift:before{content:"\F7C8"}.mdi-format-align-bottom:before{content:"\F752"}.mdi-format-align-center:before{content:"\F260"}.mdi-format-align-justify:before{content:"\F261"}.mdi-format-align-left:before{content:"\F262"}.mdi-format-align-middle:before{content:"\F753"}.mdi-format-align-right:before{content:"\F263"}.mdi-format-align-top:before{content:"\F754"}.mdi-format-annotation-minus:before{content:"\FABB"}.mdi-format-annotation-plus:before{content:"\F646"}.mdi-format-bold:before{content:"\F264"}.mdi-format-clear:before{content:"\F265"}.mdi-format-color-fill:before{content:"\F266"}.mdi-format-color-text:before{content:"\F69D"}.mdi-format-columns:before{content:"\F8DE"}.mdi-format-float-center:before{content:"\F267"}.mdi-format-float-left:before{content:"\F268"}.mdi-format-float-none:before{content:"\F269"}.mdi-format-float-right:before{content:"\F26A"}.mdi-format-font:before{content:"\F6D5"}.mdi-format-font-size-decrease:before{content:"\F9F2"}.mdi-format-font-size-increase:before{content:"\F9F3"}.mdi-format-header-1:before{content:"\F26B"}.mdi-format-header-2:before{content:"\F26C"}.mdi-format-header-3:before{content:"\F26D"}.mdi-format-header-4:before{content:"\F26E"}.mdi-format-header-5:before{content:"\F26F"}.mdi-format-header-6:before{content:"\F270"}.mdi-format-header-decrease:before{content:"\F271"}.mdi-format-header-equal:before{content:"\F272"}.mdi-format-header-increase:before{content:"\F273"}.mdi-format-header-pound:before{content:"\F274"}.mdi-format-horizontal-align-center:before{content:"\F61E"}.mdi-format-horizontal-align-left:before{content:"\F61F"}.mdi-format-horizontal-align-right:before{content:"\F620"}.mdi-format-indent-decrease:before{content:"\F275"}.mdi-format-indent-increase:before{content:"\F276"}.mdi-format-italic:before{content:"\F277"}.mdi-format-letter-case:before{content:"\FB19"}.mdi-format-letter-case-lower:before{content:"\FB1A"}.mdi-format-letter-case-upper:before{content:"\FB1B"}.mdi-format-line-spacing:before{content:"\F278"}.mdi-format-line-style:before{content:"\F5C8"}.mdi-format-line-weight:before{content:"\F5C9"}.mdi-format-list-bulleted:before{content:"\F279"}.mdi-format-list-bulleted-square:before{content:"\FDAC"}.mdi-format-list-bulleted-type:before{content:"\F27A"}.mdi-format-list-checkbox:before{content:"\F969"}.mdi-format-list-checks:before{content:"\F755"}.mdi-format-list-numbered:before{content:"\F27B"}.mdi-format-list-numbered-rtl:before{content:"\FCE9"}.mdi-format-page-break:before{content:"\F6D6"}.mdi-format-paint:before{content:"\F27C"}.mdi-format-paragraph:before{content:"\F27D"}.mdi-format-pilcrow:before{content:"\F6D7"}.mdi-format-quote-close:before{content:"\F27E"}.mdi-format-quote-open:before{content:"\F756"}.mdi-format-rotate-90:before{content:"\F6A9"}.mdi-format-section:before{content:"\F69E"}.mdi-format-size:before{content:"\F27F"}.mdi-format-strikethrough:before{content:"\F280"}.mdi-format-strikethrough-variant:before{content:"\F281"}.mdi-format-subscript:before{content:"\F282"}.mdi-format-superscript:before{content:"\F283"}.mdi-format-text:before{content:"\F284"}.mdi-format-text-rotation-down:before{content:"\FD4F"}.mdi-format-text-rotation-none:before{content:"\FD50"}.mdi-format-text-wrapping-clip:before{content:"\FCEA"}.mdi-format-text-wrapping-overflow:before{content:"\FCEB"}.mdi-format-text-wrapping-wrap:before{content:"\FCEC"}.mdi-format-textbox:before{content:"\FCED"}.mdi-format-textdirection-l-to-r:before{content:"\F285"}.mdi-format-textdirection-r-to-l:before{content:"\F286"}.mdi-format-title:before{content:"\F5F4"}.mdi-format-underline:before{content:"\F287"}.mdi-format-vertical-align-bottom:before{content:"\F621"}.mdi-format-vertical-align-center:before{content:"\F622"}.mdi-format-vertical-align-top:before{content:"\F623"}.mdi-format-wrap-inline:before{content:"\F288"}.mdi-format-wrap-square:before{content:"\F289"}.mdi-format-wrap-tight:before{content:"\F28A"}.mdi-format-wrap-top-bottom:before{content:"\F28B"}.mdi-forum:before{content:"\F28C"}.mdi-forum-outline:before{content:"\F821"}.mdi-forward:before{content:"\F28D"}.mdi-forwardburger:before{content:"\FD51"}.mdi-fountain:before{content:"\F96A"}.mdi-fountain-pen:before{content:"\FCEE"}.mdi-fountain-pen-tip:before{content:"\FCEF"}.mdi-foursquare:before{content:"\F28E"}.mdi-freebsd:before{content:"\F8DF"}.mdi-fridge:before{content:"\F290"}.mdi-fridge-bottom:before{content:"\F292"}.mdi-fridge-outline:before{content:"\F28F"}.mdi-fridge-top:before{content:"\F291"}.mdi-fuel:before{content:"\F7C9"}.mdi-fullscreen:before{content:"\F293"}.mdi-fullscreen-exit:before{content:"\F294"}.mdi-function:before{content:"\F295"}.mdi-function-variant:before{content:"\F870"}.mdi-fuse:before{content:"\FC61"}.mdi-fuse-blade:before{content:"\FC62"}.mdi-gamepad:before{content:"\F296"}.mdi-gamepad-variant:before{content:"\F297"}.mdi-gantry-crane:before{content:"\FDAD"}.mdi-garage:before{content:"\F6D8"}.mdi-garage-alert:before{content:"\F871"}.mdi-garage-open:before{content:"\F6D9"}.mdi-gas-cylinder:before{content:"\F647"}.mdi-gas-station:before{content:"\F298"}.mdi-gate:before{content:"\F299"}.mdi-gate-and:before{content:"\F8E0"}.mdi-gate-nand:before{content:"\F8E1"}.mdi-gate-nor:before{content:"\F8E2"}.mdi-gate-not:before{content:"\F8E3"}.mdi-gate-or:before{content:"\F8E4"}.mdi-gate-xnor:before{content:"\F8E5"}.mdi-gate-xor:before{content:"\F8E6"}.mdi-gauge:before{content:"\F29A"}.mdi-gauge-empty:before{content:"\F872"}.mdi-gauge-full:before{content:"\F873"}.mdi-gauge-low:before{content:"\F874"}.mdi-gavel:before{content:"\F29B"}.mdi-gender-female:before{content:"\F29C"}.mdi-gender-male:before{content:"\F29D"}.mdi-gender-male-female:before{content:"\F29E"}.mdi-gender-transgender:before{content:"\F29F"}.mdi-gentoo:before{content:"\F8E7"}.mdi-gesture:before{content:"\F7CA"}.mdi-gesture-double-tap:before{content:"\F73B"}.mdi-gesture-pinch:before{content:"\FABC"}.mdi-gesture-spread:before{content:"\FABD"}.mdi-gesture-swipe:before{content:"\FD52"}.mdi-gesture-swipe-down:before{content:"\F73C"}.mdi-gesture-swipe-horizontal:before{content:"\FABE"}.mdi-gesture-swipe-left:before{content:"\F73D"}.mdi-gesture-swipe-right:before{content:"\F73E"}.mdi-gesture-swipe-up:before{content:"\F73F"}.mdi-gesture-swipe-vertical:before{content:"\FABF"}.mdi-gesture-tap:before{content:"\F740"}.mdi-gesture-tap-hold:before{content:"\FD53"}.mdi-gesture-two-double-tap:before{content:"\F741"}.mdi-gesture-two-tap:before{content:"\F742"}.mdi-ghost:before{content:"\F2A0"}.mdi-ghost-off:before{content:"\F9F4"}.mdi-gif:before{content:"\FD54"}.mdi-gift:before{content:"\F2A1"}.mdi-git:before{content:"\F2A2"}.mdi-github-box:before{content:"\F2A3"}.mdi-github-circle:before{content:"\F2A4"}.mdi-github-face:before{content:"\F6DA"}.mdi-gitlab:before{content:"\FB7C"}.mdi-glass-cocktail:before{content:"\F356"}.mdi-glass-flute:before{content:"\F2A5"}.mdi-glass-mug:before{content:"\F2A6"}.mdi-glass-stange:before{content:"\F2A7"}.mdi-glass-tulip:before{content:"\F2A8"}.mdi-glass-wine:before{content:"\F875"}.mdi-glassdoor:before{content:"\F2A9"}.mdi-glasses:before{content:"\F2AA"}.mdi-globe-model:before{content:"\F8E8"}.mdi-gmail:before{content:"\F2AB"}.mdi-gnome:before{content:"\F2AC"}.mdi-go-kart:before{content:"\FD55"}.mdi-go-kart-track:before{content:"\FD56"}.mdi-gog:before{content:"\FB7D"}.mdi-golf:before{content:"\F822"}.mdi-gondola:before{content:"\F685"}.mdi-goodreads:before{content:"\FD57"}.mdi-google:before{content:"\F2AD"}.mdi-google-adwords:before{content:"\FC63"}.mdi-google-allo:before{content:"\F801"}.mdi-google-analytics:before{content:"\F7CB"}.mdi-google-assistant:before{content:"\F7CC"}.mdi-google-cardboard:before{content:"\F2AE"}.mdi-google-chrome:before{content:"\F2AF"}.mdi-google-circles:before{content:"\F2B0"}.mdi-google-circles-communities:before{content:"\F2B1"}.mdi-google-circles-extended:before{content:"\F2B2"}.mdi-google-circles-group:before{content:"\F2B3"}.mdi-google-classroom:before{content:"\F2C0"}.mdi-google-controller:before{content:"\F2B4"}.mdi-google-controller-off:before{content:"\F2B5"}.mdi-google-drive:before{content:"\F2B6"}.mdi-google-earth:before{content:"\F2B7"}.mdi-google-fit:before{content:"\F96B"}.mdi-google-glass:before{content:"\F2B8"}.mdi-google-hangouts:before{content:"\F2C9"}.mdi-google-home:before{content:"\F823"}.mdi-google-keep:before{content:"\F6DB"}.mdi-google-lens:before{content:"\F9F5"}.mdi-google-maps:before{content:"\F5F5"}.mdi-google-nearby:before{content:"\F2B9"}.mdi-google-pages:before{content:"\F2BA"}.mdi-google-photos:before{content:"\F6DC"}.mdi-google-physical-web:before{content:"\F2BB"}.mdi-google-play:before{content:"\F2BC"}.mdi-google-plus:before{content:"\F2BD"}.mdi-google-plus-box:before{content:"\F2BE"}.mdi-google-spreadsheet:before{content:"\F9F6"}.mdi-google-street-view:before{content:"\FC64"}.mdi-google-translate:before{content:"\F2BF"}.mdi-gpu:before{content:"\F8AD"}.mdi-gradient:before{content:"\F69F"}.mdi-grain:before{content:"\FD58"}.mdi-graphql:before{content:"\F876"}.mdi-grave-stone:before{content:"\FB7E"}.mdi-grease-pencil:before{content:"\F648"}.mdi-greater-than:before{content:"\F96C"}.mdi-greater-than-or-equal:before{content:"\F96D"}.mdi-grid:before{content:"\F2C1"}.mdi-grid-large:before{content:"\F757"}.mdi-grid-off:before{content:"\F2C2"}.mdi-group:before{content:"\F2C3"}.mdi-guitar-acoustic:before{content:"\F770"}.mdi-guitar-electric:before{content:"\F2C4"}.mdi-guitar-pick:before{content:"\F2C5"}.mdi-guitar-pick-outline:before{content:"\F2C6"}.mdi-guy-fawkes-mask:before{content:"\F824"}.mdi-hackernews:before{content:"\F624"}.mdi-hail:before{content:"\FAC0"}.mdi-halloween:before{content:"\FB7F"}.mdi-hamburger:before{content:"\F684"}.mdi-hammer:before{content:"\F8E9"}.mdi-hand:before{content:"\FA4E"}.mdi-hand-okay:before{content:"\FA4F"}.mdi-hand-peace:before{content:"\FA50"}.mdi-hand-peace-variant:before{content:"\FA51"}.mdi-hand-pointing-down:before{content:"\FA52"}.mdi-hand-pointing-left:before{content:"\FA53"}.mdi-hand-pointing-right:before{content:"\F2C7"}.mdi-hand-pointing-up:before{content:"\FA54"}.mdi-hanger:before{content:"\F2C8"}.mdi-hard-hat:before{content:"\F96E"}.mdi-harddisk:before{content:"\F2CA"}.mdi-hat-fedora:before{content:"\FB80"}.mdi-hazard-lights:before{content:"\FC65"}.mdi-hdr:before{content:"\FD59"}.mdi-hdr-off:before{content:"\FD5A"}.mdi-headphones:before{content:"\F2CB"}.mdi-headphones-bluetooth:before{content:"\F96F"}.mdi-headphones-box:before{content:"\F2CC"}.mdi-headphones-off:before{content:"\F7CD"}.mdi-headphones-settings:before{content:"\F2CD"}.mdi-headset:before{content:"\F2CE"}.mdi-headset-dock:before{content:"\F2CF"}.mdi-headset-off:before{content:"\F2D0"}.mdi-heart:before{content:"\F2D1"}.mdi-heart-box:before{content:"\F2D2"}.mdi-heart-box-outline:before{content:"\F2D3"}.mdi-heart-broken:before{content:"\F2D4"}.mdi-heart-broken-outline:before{content:"\FCF0"}.mdi-heart-circle:before{content:"\F970"}.mdi-heart-circle-outline:before{content:"\F971"}.mdi-heart-half:before{content:"\F6DE"}.mdi-heart-half-full:before{content:"\F6DD"}.mdi-heart-half-outline:before{content:"\F6DF"}.mdi-heart-multiple:before{content:"\FA55"}.mdi-heart-multiple-outline:before{content:"\FA56"}.mdi-heart-off:before{content:"\F758"}.mdi-heart-outline:before{content:"\F2D5"}.mdi-heart-pulse:before{content:"\F5F6"}.mdi-helicopter:before{content:"\FAC1"}.mdi-help:before{content:"\F2D6"}.mdi-help-box:before{content:"\F78A"}.mdi-help-circle:before{content:"\F2D7"}.mdi-help-circle-outline:before{content:"\F625"}.mdi-help-network:before{content:"\F6F4"}.mdi-help-network-outline:before{content:"\FC66"}.mdi-help-rhombus:before{content:"\FB81"}.mdi-help-rhombus-outline:before{content:"\FB82"}.mdi-hexagon:before{content:"\F2D8"}.mdi-hexagon-multiple:before{content:"\F6E0"}.mdi-hexagon-outline:before{content:"\F2D9"}.mdi-hexagon-slice-1:before{content:"\FAC2"}.mdi-hexagon-slice-2:before{content:"\FAC3"}.mdi-hexagon-slice-3:before{content:"\FAC4"}.mdi-hexagon-slice-4:before{content:"\FAC5"}.mdi-hexagon-slice-5:before{content:"\FAC6"}.mdi-hexagon-slice-6:before{content:"\FAC7"}.mdi-hexagram:before{content:"\FAC8"}.mdi-hexagram-outline:before{content:"\FAC9"}.mdi-high-definition:before{content:"\F7CE"}.mdi-high-definition-box:before{content:"\F877"}.mdi-highway:before{content:"\F5F7"}.mdi-hiking:before{content:"\FD5B"}.mdi-hinduism:before{content:"\F972"}.mdi-history:before{content:"\F2DA"}.mdi-hockey-puck:before{content:"\F878"}.mdi-hockey-sticks:before{content:"\F879"}.mdi-hololens:before{content:"\F2DB"}.mdi-home:before{content:"\F2DC"}.mdi-home-account:before{content:"\F825"}.mdi-home-alert:before{content:"\F87A"}.mdi-home-assistant:before{content:"\F7CF"}.mdi-home-automation:before{content:"\F7D0"}.mdi-home-circle:before{content:"\F7D1"}.mdi-home-city:before{content:"\FCF1"}.mdi-home-city-outline:before{content:"\FCF2"}.mdi-home-currency-usd:before{content:"\F8AE"}.mdi-home-floor-0:before{content:"\FDAE"}.mdi-home-floor-1:before{content:"\FD5C"}.mdi-home-floor-2:before{content:"\FD5D"}.mdi-home-floor-3:before{content:"\FD5E"}.mdi-home-floor-a:before{content:"\FD5F"}.mdi-home-floor-b:before{content:"\FD60"}.mdi-home-floor-g:before{content:"\FD61"}.mdi-home-floor-l:before{content:"\FD62"}.mdi-home-floor-negative-1:before{content:"\FDAF"}.mdi-home-group:before{content:"\FDB0"}.mdi-home-heart:before{content:"\F826"}.mdi-home-lock:before{content:"\F8EA"}.mdi-home-lock-open:before{content:"\F8EB"}.mdi-home-map-marker:before{content:"\F5F8"}.mdi-home-minus:before{content:"\F973"}.mdi-home-modern:before{content:"\F2DD"}.mdi-home-outline:before{content:"\F6A0"}.mdi-home-plus:before{content:"\F974"}.mdi-home-variant:before{content:"\F2DE"}.mdi-home-variant-outline:before{content:"\FB83"}.mdi-hook:before{content:"\F6E1"}.mdi-hook-off:before{content:"\F6E2"}.mdi-hops:before{content:"\F2DF"}.mdi-horseshoe:before{content:"\FA57"}.mdi-hospital:before{content:"\F2E0"}.mdi-hospital-building:before{content:"\F2E1"}.mdi-hospital-marker:before{content:"\F2E2"}.mdi-hot-tub:before{content:"\F827"}.mdi-hotel:before{content:"\F2E3"}.mdi-houzz:before{content:"\F2E4"}.mdi-houzz-box:before{content:"\F2E5"}.mdi-hubspot:before{content:"\FCF3"}.mdi-hulu:before{content:"\F828"}.mdi-human:before{content:"\F2E6"}.mdi-human-child:before{content:"\F2E7"}.mdi-human-female:before{content:"\F649"}.mdi-human-female-boy:before{content:"\FA58"}.mdi-human-female-female:before{content:"\FA59"}.mdi-human-female-girl:before{content:"\FA5A"}.mdi-human-greeting:before{content:"\F64A"}.mdi-human-handsdown:before{content:"\F64B"}.mdi-human-handsup:before{content:"\F64C"}.mdi-human-male:before{content:"\F64D"}.mdi-human-male-boy:before{content:"\FA5B"}.mdi-human-male-female:before{content:"\F2E8"}.mdi-human-male-girl:before{content:"\FA5C"}.mdi-human-male-male:before{content:"\FA5D"}.mdi-human-pregnant:before{content:"\F5CF"}.mdi-humble-bundle:before{content:"\F743"}.mdi-ice-cream:before{content:"\F829"}.mdi-iframe:before{content:"\FC67"}.mdi-iframe-outline:before{content:"\FC68"}.mdi-image:before{content:"\F2E9"}.mdi-image-album:before{content:"\F2EA"}.mdi-image-area:before{content:"\F2EB"}.mdi-image-area-close:before{content:"\F2EC"}.mdi-image-broken:before{content:"\F2ED"}.mdi-image-broken-variant:before{content:"\F2EE"}.mdi-image-filter:before{content:"\F2EF"}.mdi-image-filter-black-white:before{content:"\F2F0"}.mdi-image-filter-center-focus:before{content:"\F2F1"}.mdi-image-filter-center-focus-weak:before{content:"\F2F2"}.mdi-image-filter-drama:before{content:"\F2F3"}.mdi-image-filter-frames:before{content:"\F2F4"}.mdi-image-filter-hdr:before{content:"\F2F5"}.mdi-image-filter-none:before{content:"\F2F6"}.mdi-image-filter-tilt-shift:before{content:"\F2F7"}.mdi-image-filter-vintage:before{content:"\F2F8"}.mdi-image-move:before{content:"\F9F7"}.mdi-image-multiple:before{content:"\F2F9"}.mdi-image-off:before{content:"\F82A"}.mdi-image-outline:before{content:"\F975"}.mdi-image-plus:before{content:"\F87B"}.mdi-image-search:before{content:"\F976"}.mdi-image-search-outline:before{content:"\F977"}.mdi-image-size-select-actual:before{content:"\FC69"}.mdi-image-size-select-large:before{content:"\FC6A"}.mdi-image-size-select-small:before{content:"\FC6B"}.mdi-import:before{content:"\F2FA"}.mdi-inbox:before{content:"\F686"}.mdi-inbox-arrow-down:before{content:"\F2FB"}.mdi-inbox-arrow-up:before{content:"\F3D1"}.mdi-inbox-multiple:before{content:"\F8AF"}.mdi-inbox-multiple-outline:before{content:"\FB84"}.mdi-incognito:before{content:"\F5F9"}.mdi-infinity:before{content:"\F6E3"}.mdi-information:before{content:"\F2FC"}.mdi-information-outline:before{content:"\F2FD"}.mdi-information-variant:before{content:"\F64E"}.mdi-instagram:before{content:"\F2FE"}.mdi-instapaper:before{content:"\F2FF"}.mdi-internet-explorer:before{content:"\F300"}.mdi-invert-colors:before{content:"\F301"}.mdi-ip:before{content:"\FA5E"}.mdi-ip-network:before{content:"\FA5F"}.mdi-ip-network-outline:before{content:"\FC6C"}.mdi-ipod:before{content:"\FC6D"}.mdi-islam:before{content:"\F978"}.mdi-itunes:before{content:"\F676"}.mdi-jabber:before{content:"\FDB1"}.mdi-jeepney:before{content:"\F302"}.mdi-jira:before{content:"\F303"}.mdi-jquery:before{content:"\F87C"}.mdi-jsfiddle:before{content:"\F304"}.mdi-json:before{content:"\F626"}.mdi-judaism:before{content:"\F979"}.mdi-kabaddi:before{content:"\FD63"}.mdi-karate:before{content:"\F82B"}.mdi-keg:before{content:"\F305"}.mdi-kettle:before{content:"\F5FA"}.mdi-key:before{content:"\F306"}.mdi-key-change:before{content:"\F307"}.mdi-key-minus:before{content:"\F308"}.mdi-key-outline:before{content:"\FDB2"}.mdi-key-plus:before{content:"\F309"}.mdi-key-remove:before{content:"\F30A"}.mdi-key-variant:before{content:"\F30B"}.mdi-keyboard:before{content:"\F30C"}.mdi-keyboard-backspace:before{content:"\F30D"}.mdi-keyboard-caps:before{content:"\F30E"}.mdi-keyboard-close:before{content:"\F30F"}.mdi-keyboard-off:before{content:"\F310"}.mdi-keyboard-outline:before{content:"\F97A"}.mdi-keyboard-return:before{content:"\F311"}.mdi-keyboard-settings:before{content:"\F9F8"}.mdi-keyboard-settings-outline:before{content:"\F9F9"}.mdi-keyboard-tab:before{content:"\F312"}.mdi-keyboard-variant:before{content:"\F313"}.mdi-kickstarter:before{content:"\F744"}.mdi-knife:before{content:"\F9FA"}.mdi-knife-military:before{content:"\F9FB"}.mdi-kodi:before{content:"\F314"}.mdi-label:before{content:"\F315"}.mdi-label-off:before{content:"\FACA"}.mdi-label-off-outline:before{content:"\FACB"}.mdi-label-outline:before{content:"\F316"}.mdi-label-variant:before{content:"\FACC"}.mdi-label-variant-outline:before{content:"\FACD"}.mdi-ladybug:before{content:"\F82C"}.mdi-lambda:before{content:"\F627"}.mdi-lamp:before{content:"\F6B4"}.mdi-lan:before{content:"\F317"}.mdi-lan-connect:before{content:"\F318"}.mdi-lan-disconnect:before{content:"\F319"}.mdi-lan-pending:before{content:"\F31A"}.mdi-language-c:before{content:"\F671"}.mdi-language-cpp:before{content:"\F672"}.mdi-language-csharp:before{content:"\F31B"}.mdi-language-css3:before{content:"\F31C"}.mdi-language-go:before{content:"\F7D2"}.mdi-language-haskell:before{content:"\FC6E"}.mdi-language-html5:before{content:"\F31D"}.mdi-language-java:before{content:"\FB1C"}.mdi-language-javascript:before{content:"\F31E"}.mdi-language-lua:before{content:"\F8B0"}.mdi-language-php:before{content:"\F31F"}.mdi-language-python:before{content:"\F320"}.mdi-language-python-text:before{content:"\F321"}.mdi-language-r:before{content:"\F7D3"}.mdi-language-ruby-on-rails:before{content:"\FACE"}.mdi-language-swift:before{content:"\F6E4"}.mdi-language-typescript:before{content:"\F6E5"}.mdi-laptop:before{content:"\F322"}.mdi-laptop-chromebook:before{content:"\F323"}.mdi-laptop-mac:before{content:"\F324"}.mdi-laptop-off:before{content:"\F6E6"}.mdi-laptop-windows:before{content:"\F325"}.mdi-laravel:before{content:"\FACF"}.mdi-lastfm:before{content:"\F326"}.mdi-lastpass:before{content:"\F446"}.mdi-launch:before{content:"\F327"}.mdi-lava-lamp:before{content:"\F7D4"}.mdi-layers:before{content:"\F328"}.mdi-layers-off:before{content:"\F329"}.mdi-layers-off-outline:before{content:"\F9FC"}.mdi-layers-outline:before{content:"\F9FD"}.mdi-lead-pencil:before{content:"\F64F"}.mdi-leaf:before{content:"\F32A"}.mdi-leaf-maple:before{content:"\FC6F"}.mdi-leak:before{content:"\FDB3"}.mdi-leak-off:before{content:"\FDB4"}.mdi-led-off:before{content:"\F32B"}.mdi-led-on:before{content:"\F32C"}.mdi-led-outline:before{content:"\F32D"}.mdi-led-strip:before{content:"\F7D5"}.mdi-led-variant-off:before{content:"\F32E"}.mdi-led-variant-on:before{content:"\F32F"}.mdi-led-variant-outline:before{content:"\F330"}.mdi-less-than:before{content:"\F97B"}.mdi-less-than-or-equal:before{content:"\F97C"}.mdi-library:before{content:"\F331"}.mdi-library-books:before{content:"\F332"}.mdi-library-movie:before{content:"\FCF4"}.mdi-library-music:before{content:"\F333"}.mdi-library-plus:before{content:"\F334"}.mdi-library-shelves:before{content:"\FB85"}.mdi-library-video:before{content:"\FCF5"}.mdi-lifebuoy:before{content:"\F87D"}.mdi-light-switch:before{content:"\F97D"}.mdi-lightbulb:before{content:"\F335"}.mdi-lightbulb-on:before{content:"\F6E7"}.mdi-lightbulb-on-outline:before{content:"\F6E8"}.mdi-lightbulb-outline:before{content:"\F336"}.mdi-lighthouse:before{content:"\F9FE"}.mdi-lighthouse-on:before{content:"\F9FF"}.mdi-link:before{content:"\F337"}.mdi-link-box:before{content:"\FCF6"}.mdi-link-box-outline:before{content:"\FCF7"}.mdi-link-box-variant:before{content:"\FCF8"}.mdi-link-box-variant-outline:before{content:"\FCF9"}.mdi-link-off:before{content:"\F338"}.mdi-link-plus:before{content:"\FC70"}.mdi-link-variant:before{content:"\F339"}.mdi-link-variant-off:before{content:"\F33A"}.mdi-linkedin:before{content:"\F33B"}.mdi-linkedin-box:before{content:"\F33C"}.mdi-linux:before{content:"\F33D"}.mdi-linux-mint:before{content:"\F8EC"}.mdi-litecoin:before{content:"\FA60"}.mdi-loading:before{content:"\F771"}.mdi-lock:before{content:"\F33E"}.mdi-lock-alert:before{content:"\F8ED"}.mdi-lock-clock:before{content:"\F97E"}.mdi-lock-open:before{content:"\F33F"}.mdi-lock-open-outline:before{content:"\F340"}.mdi-lock-outline:before{content:"\F341"}.mdi-lock-pattern:before{content:"\F6E9"}.mdi-lock-plus:before{content:"\F5FB"}.mdi-lock-question:before{content:"\F8EE"}.mdi-lock-reset:before{content:"\F772"}.mdi-lock-smart:before{content:"\F8B1"}.mdi-locker:before{content:"\F7D6"}.mdi-locker-multiple:before{content:"\F7D7"}.mdi-login:before{content:"\F342"}.mdi-login-variant:before{content:"\F5FC"}.mdi-logout:before{content:"\F343"}.mdi-logout-variant:before{content:"\F5FD"}.mdi-looks:before{content:"\F344"}.mdi-loop:before{content:"\F6EA"}.mdi-loupe:before{content:"\F345"}.mdi-lumx:before{content:"\F346"}.mdi-lyft:before{content:"\FB1D"}.mdi-magnet:before{content:"\F347"}.mdi-magnet-on:before{content:"\F348"}.mdi-magnify:before{content:"\F349"}.mdi-magnify-close:before{content:"\F97F"}.mdi-magnify-minus:before{content:"\F34A"}.mdi-magnify-minus-cursor:before{content:"\FA61"}.mdi-magnify-minus-outline:before{content:"\F6EB"}.mdi-magnify-plus:before{content:"\F34B"}.mdi-magnify-plus-cursor:before{content:"\FA62"}.mdi-magnify-plus-outline:before{content:"\F6EC"}.mdi-mail-ru:before{content:"\F34C"}.mdi-mailbox:before{content:"\F6ED"}.mdi-mailbox-open:before{content:"\FD64"}.mdi-mailbox-open-outline:before{content:"\FD65"}.mdi-mailbox-open-up:before{content:"\FD66"}.mdi-mailbox-open-up-outline:before{content:"\FD67"}.mdi-mailbox-outline:before{content:"\FD68"}.mdi-mailbox-up:before{content:"\FD69"}.mdi-mailbox-up-outline:before{content:"\FD6A"}.mdi-map:before{content:"\F34D"}.mdi-map-clock:before{content:"\FCFA"}.mdi-map-clock-outline:before{content:"\FCFB"}.mdi-map-legend:before{content:"\FA00"}.mdi-map-marker:before{content:"\F34E"}.mdi-map-marker-check:before{content:"\FC71"}.mdi-map-marker-circle:before{content:"\F34F"}.mdi-map-marker-distance:before{content:"\F8EF"}.mdi-map-marker-minus:before{content:"\F650"}.mdi-map-marker-multiple:before{content:"\F350"}.mdi-map-marker-off:before{content:"\F351"}.mdi-map-marker-outline:before{content:"\F7D8"}.mdi-map-marker-path:before{content:"\FCFC"}.mdi-map-marker-plus:before{content:"\F651"}.mdi-map-marker-radius:before{content:"\F352"}.mdi-map-minus:before{content:"\F980"}.mdi-map-outline:before{content:"\F981"}.mdi-map-plus:before{content:"\F982"}.mdi-map-search:before{content:"\F983"}.mdi-map-search-outline:before{content:"\F984"}.mdi-mapbox:before{content:"\FB86"}.mdi-margin:before{content:"\F353"}.mdi-markdown:before{content:"\F354"}.mdi-marker:before{content:"\F652"}.mdi-marker-cancel:before{content:"\FDB5"}.mdi-marker-check:before{content:"\F355"}.mdi-mastodon:before{content:"\FAD0"}.mdi-mastodon-variant:before{content:"\FAD1"}.mdi-material-design:before{content:"\F985"}.mdi-material-ui:before{content:"\F357"}.mdi-math-compass:before{content:"\F358"}.mdi-math-cos:before{content:"\FC72"}.mdi-math-sin:before{content:"\FC73"}.mdi-math-tan:before{content:"\FC74"}.mdi-matrix:before{content:"\F628"}.mdi-maxcdn:before{content:"\F359"}.mdi-medal:before{content:"\F986"}.mdi-medical-bag:before{content:"\F6EE"}.mdi-medium:before{content:"\F35A"}.mdi-meetup:before{content:"\FAD2"}.mdi-memory:before{content:"\F35B"}.mdi-menu:before{content:"\F35C"}.mdi-menu-down:before{content:"\F35D"}.mdi-menu-down-outline:before{content:"\F6B5"}.mdi-menu-left:before{content:"\F35E"}.mdi-menu-left-outline:before{content:"\FA01"}.mdi-menu-open:before{content:"\FB87"}.mdi-menu-right:before{content:"\F35F"}.mdi-menu-right-outline:before{content:"\FA02"}.mdi-menu-swap:before{content:"\FA63"}.mdi-menu-swap-outline:before{content:"\FA64"}.mdi-menu-up:before{content:"\F360"}.mdi-menu-up-outline:before{content:"\F6B6"}.mdi-message:before{content:"\F361"}.mdi-message-alert:before{content:"\F362"}.mdi-message-alert-outline:before{content:"\FA03"}.mdi-message-bulleted:before{content:"\F6A1"}.mdi-message-bulleted-off:before{content:"\F6A2"}.mdi-message-draw:before{content:"\F363"}.mdi-message-image:before{content:"\F364"}.mdi-message-outline:before{content:"\F365"}.mdi-message-plus:before{content:"\F653"}.mdi-message-processing:before{content:"\F366"}.mdi-message-reply:before{content:"\F367"}.mdi-message-reply-text:before{content:"\F368"}.mdi-message-settings:before{content:"\F6EF"}.mdi-message-settings-variant:before{content:"\F6F0"}.mdi-message-text:before{content:"\F369"}.mdi-message-text-outline:before{content:"\F36A"}.mdi-message-video:before{content:"\F36B"}.mdi-meteor:before{content:"\F629"}.mdi-metronome:before{content:"\F7D9"}.mdi-metronome-tick:before{content:"\F7DA"}.mdi-micro-sd:before{content:"\F7DB"}.mdi-microphone:before{content:"\F36C"}.mdi-microphone-minus:before{content:"\F8B2"}.mdi-microphone-off:before{content:"\F36D"}.mdi-microphone-outline:before{content:"\F36E"}.mdi-microphone-plus:before{content:"\F8B3"}.mdi-microphone-settings:before{content:"\F36F"}.mdi-microphone-variant:before{content:"\F370"}.mdi-microphone-variant-off:before{content:"\F371"}.mdi-microscope:before{content:"\F654"}.mdi-microsoft:before{content:"\F372"}.mdi-microsoft-dynamics:before{content:"\F987"}.mdi-microwave:before{content:"\FC75"}.mdi-midi:before{content:"\F8F0"}.mdi-midi-port:before{content:"\F8F1"}.mdi-mine:before{content:"\FDB6"}.mdi-minecraft:before{content:"\F373"}.mdi-mini-sd:before{content:"\FA04"}.mdi-minidisc:before{content:"\FA05"}.mdi-minus:before{content:"\F374"}.mdi-minus-box:before{content:"\F375"}.mdi-minus-box-outline:before{content:"\F6F1"}.mdi-minus-circle:before{content:"\F376"}.mdi-minus-circle-outline:before{content:"\F377"}.mdi-minus-network:before{content:"\F378"}.mdi-minus-network-outline:before{content:"\FC76"}.mdi-mixcloud:before{content:"\F62A"}.mdi-mixed-martial-arts:before{content:"\FD6B"}.mdi-mixed-reality:before{content:"\F87E"}.mdi-mixer:before{content:"\F7DC"}.mdi-molecule:before{content:"\FB88"}.mdi-monitor:before{content:"\F379"}.mdi-monitor-cellphone:before{content:"\F988"}.mdi-monitor-cellphone-star:before{content:"\F989"}.mdi-monitor-dashboard:before{content:"\FA06"}.mdi-monitor-lock:before{content:"\FDB7"}.mdi-monitor-multiple:before{content:"\F37A"}.mdi-monitor-off:before{content:"\FD6C"}.mdi-monitor-star:before{content:"\FDB8"}.mdi-more:before{content:"\F37B"}.mdi-mother-nurse:before{content:"\FCFD"}.mdi-motion-sensor:before{content:"\FD6D"}.mdi-motorbike:before{content:"\F37C"}.mdi-mouse:before{content:"\F37D"}.mdi-mouse-bluetooth:before{content:"\F98A"}.mdi-mouse-off:before{content:"\F37E"}.mdi-mouse-variant:before{content:"\F37F"}.mdi-mouse-variant-off:before{content:"\F380"}.mdi-move-resize:before{content:"\F655"}.mdi-move-resize-variant:before{content:"\F656"}.mdi-movie:before{content:"\F381"}.mdi-movie-outline:before{content:"\FDB9"}.mdi-movie-roll:before{content:"\F7DD"}.mdi-muffin:before{content:"\F98B"}.mdi-multiplication:before{content:"\F382"}.mdi-multiplication-box:before{content:"\F383"}.mdi-mushroom:before{content:"\F7DE"}.mdi-mushroom-outline:before{content:"\F7DF"}.mdi-music:before{content:"\F759"}.mdi-music-box:before{content:"\F384"}.mdi-music-box-outline:before{content:"\F385"}.mdi-music-circle:before{content:"\F386"}.mdi-music-circle-outline:before{content:"\FAD3"}.mdi-music-note:before{content:"\F387"}.mdi-music-note-bluetooth:before{content:"\F5FE"}.mdi-music-note-bluetooth-off:before{content:"\F5FF"}.mdi-music-note-eighth:before{content:"\F388"}.mdi-music-note-half:before{content:"\F389"}.mdi-music-note-off:before{content:"\F38A"}.mdi-music-note-plus:before{content:"\FDBA"}.mdi-music-note-quarter:before{content:"\F38B"}.mdi-music-note-sixteenth:before{content:"\F38C"}.mdi-music-note-whole:before{content:"\F38D"}.mdi-music-off:before{content:"\F75A"}.mdi-nail:before{content:"\FDBB"}.mdi-nas:before{content:"\F8F2"}.mdi-nativescript:before{content:"\F87F"}.mdi-nature:before{content:"\F38E"}.mdi-nature-people:before{content:"\F38F"}.mdi-navigation:before{content:"\F390"}.mdi-near-me:before{content:"\F5CD"}.mdi-needle:before{content:"\F391"}.mdi-netflix:before{content:"\F745"}.mdi-network:before{content:"\F6F2"}.mdi-network-off:before{content:"\FC77"}.mdi-network-off-outline:before{content:"\FC78"}.mdi-network-outline:before{content:"\FC79"}.mdi-network-strength-1:before{content:"\F8F3"}.mdi-network-strength-1-alert:before{content:"\F8F4"}.mdi-network-strength-2:before{content:"\F8F5"}.mdi-network-strength-2-alert:before{content:"\F8F6"}.mdi-network-strength-3:before{content:"\F8F7"}.mdi-network-strength-3-alert:before{content:"\F8F8"}.mdi-network-strength-4:before{content:"\F8F9"}.mdi-network-strength-4-alert:before{content:"\F8FA"}.mdi-network-strength-off:before{content:"\F8FB"}.mdi-network-strength-off-outline:before{content:"\F8FC"}.mdi-network-strength-outline:before{content:"\F8FD"}.mdi-new-box:before{content:"\F394"}.mdi-newspaper:before{content:"\F395"}.mdi-nfc:before{content:"\F396"}.mdi-nfc-tap:before{content:"\F397"}.mdi-nfc-variant:before{content:"\F398"}.mdi-ninja:before{content:"\F773"}.mdi-nintendo-switch:before{content:"\F7E0"}.mdi-nodejs:before{content:"\F399"}.mdi-not-equal:before{content:"\F98C"}.mdi-not-equal-variant:before{content:"\F98D"}.mdi-note:before{content:"\F39A"}.mdi-note-multiple:before{content:"\F6B7"}.mdi-note-multiple-outline:before{content:"\F6B8"}.mdi-note-outline:before{content:"\F39B"}.mdi-note-plus:before{content:"\F39C"}.mdi-note-plus-outline:before{content:"\F39D"}.mdi-note-text:before{content:"\F39E"}.mdi-notebook:before{content:"\F82D"}.mdi-notification-clear-all:before{content:"\F39F"}.mdi-npm:before{content:"\F6F6"}.mdi-npm-variant:before{content:"\F98E"}.mdi-npm-variant-outline:before{content:"\F98F"}.mdi-nuke:before{content:"\F6A3"}.mdi-null:before{content:"\F7E1"}.mdi-numeric:before{content:"\F3A0"}.mdi-numeric-0:before{content:"\30"}.mdi-numeric-0-box:before{content:"\F3A1"}.mdi-numeric-0-box-multiple-outline:before{content:"\F3A2"}.mdi-numeric-0-box-outline:before{content:"\F3A3"}.mdi-numeric-0-circle:before{content:"\FC7A"}.mdi-numeric-0-circle-outline:before{content:"\FC7B"}.mdi-numeric-1:before{content:"\31"}.mdi-numeric-1-box:before{content:"\F3A4"}.mdi-numeric-1-box-multiple-outline:before{content:"\F3A5"}.mdi-numeric-1-box-outline:before{content:"\F3A6"}.mdi-numeric-1-circle:before{content:"\FC7C"}.mdi-numeric-1-circle-outline:before{content:"\FC7D"}.mdi-numeric-2:before{content:"\32"}.mdi-numeric-2-box:before{content:"\F3A7"}.mdi-numeric-2-box-multiple-outline:before{content:"\F3A8"}.mdi-numeric-2-box-outline:before{content:"\F3A9"}.mdi-numeric-2-circle:before{content:"\FC7E"}.mdi-numeric-2-circle-outline:before{content:"\FC7F"}.mdi-numeric-3:before{content:"\33"}.mdi-numeric-3-box:before{content:"\F3AA"}.mdi-numeric-3-box-multiple-outline:before{content:"\F3AB"}.mdi-numeric-3-box-outline:before{content:"\F3AC"}.mdi-numeric-3-circle:before{content:"\FC80"}.mdi-numeric-3-circle-outline:before{content:"\FC81"}.mdi-numeric-4:before{content:"\34"}.mdi-numeric-4-box:before{content:"\F3AD"}.mdi-numeric-4-box-multiple-outline:before{content:"\F3AE"}.mdi-numeric-4-box-outline:before{content:"\F3AF"}.mdi-numeric-4-circle:before{content:"\FC82"}.mdi-numeric-4-circle-outline:before{content:"\FC83"}.mdi-numeric-5:before{content:"\35"}.mdi-numeric-5-box:before{content:"\F3B0"}.mdi-numeric-5-box-multiple-outline:before{content:"\F3B1"}.mdi-numeric-5-box-outline:before{content:"\F3B2"}.mdi-numeric-5-circle:before{content:"\FC84"}.mdi-numeric-5-circle-outline:before{content:"\FC85"}.mdi-numeric-6:before{content:"\36"}.mdi-numeric-6-box:before{content:"\F3B3"}.mdi-numeric-6-box-multiple-outline:before{content:"\F3B4"}.mdi-numeric-6-box-outline:before{content:"\F3B5"}.mdi-numeric-6-circle:before{content:"\FC86"}.mdi-numeric-6-circle-outline:before{content:"\FC87"}.mdi-numeric-7:before{content:"\37"}.mdi-numeric-7-box:before{content:"\F3B6"}.mdi-numeric-7-box-multiple-outline:before{content:"\F3B7"}.mdi-numeric-7-box-outline:before{content:"\F3B8"}.mdi-numeric-7-circle:before{content:"\FC88"}.mdi-numeric-7-circle-outline:before{content:"\FC89"}.mdi-numeric-8:before{content:"\38"}.mdi-numeric-8-box:before{content:"\F3B9"}.mdi-numeric-8-box-multiple-outline:before{content:"\F3BA"}.mdi-numeric-8-box-outline:before{content:"\F3BB"}.mdi-numeric-8-circle:before{content:"\FC8A"}.mdi-numeric-8-circle-outline:before{content:"\FC8B"}.mdi-numeric-9:before{content:"\39"}.mdi-numeric-9-box:before{content:"\F3BC"}.mdi-numeric-9-box-multiple-outline:before{content:"\F3BD"}.mdi-numeric-9-box-outline:before{content:"\F3BE"}.mdi-numeric-9-circle:before{content:"\FC8C"}.mdi-numeric-9-circle-outline:before{content:"\FC8D"}.mdi-numeric-9-plus-box:before{content:"\F3BF"}.mdi-numeric-9-plus-box-multiple-outline:before{content:"\F3C0"}.mdi-numeric-9-plus-box-outline:before{content:"\F3C1"}.mdi-numeric-9-plus-circle:before{content:"\FC8E"}.mdi-numeric-9-plus-circle-outline:before{content:"\FC8F"}.mdi-nut:before{content:"\F6F7"}.mdi-nutrition:before{content:"\F3C2"}.mdi-oar:before{content:"\F67B"}.mdi-ocarina:before{content:"\FDBC"}.mdi-octagon:before{content:"\F3C3"}.mdi-octagon-outline:before{content:"\F3C4"}.mdi-octagram:before{content:"\F6F8"}.mdi-octagram-outline:before{content:"\F774"}.mdi-odnoklassniki:before{content:"\F3C5"}.mdi-office:before{content:"\F3C6"}.mdi-office-building:before{content:"\F990"}.mdi-oil:before{content:"\F3C7"}.mdi-oil-temperature:before{content:"\F3C8"}.mdi-omega:before{content:"\F3C9"}.mdi-one-up:before{content:"\FB89"}.mdi-onedrive:before{content:"\F3CA"}.mdi-onenote:before{content:"\F746"}.mdi-onepassword:before{content:"\F880"}.mdi-opacity:before{content:"\F5CC"}.mdi-open-in-app:before{content:"\F3CB"}.mdi-open-in-new:before{content:"\F3CC"}.mdi-open-source-initiative:before{content:"\FB8A"}.mdi-openid:before{content:"\F3CD"}.mdi-opera:before{content:"\F3CE"}.mdi-orbit:before{content:"\F018"}.mdi-origin:before{content:"\FB2B"}.mdi-ornament:before{content:"\F3CF"}.mdi-ornament-variant:before{content:"\F3D0"}.mdi-outlook:before{content:"\FCFE"}.mdi-owl:before{content:"\F3D2"}.mdi-pac-man:before{content:"\FB8B"}.mdi-package:before{content:"\F3D3"}.mdi-package-down:before{content:"\F3D4"}.mdi-package-up:before{content:"\F3D5"}.mdi-package-variant:before{content:"\F3D6"}.mdi-package-variant-closed:before{content:"\F3D7"}.mdi-page-first:before{content:"\F600"}.mdi-page-last:before{content:"\F601"}.mdi-page-layout-body:before{content:"\F6F9"}.mdi-page-layout-footer:before{content:"\F6FA"}.mdi-page-layout-header:before{content:"\F6FB"}.mdi-page-layout-sidebar-left:before{content:"\F6FC"}.mdi-page-layout-sidebar-right:before{content:"\F6FD"}.mdi-page-next:before{content:"\FB8C"}.mdi-page-next-outline:before{content:"\FB8D"}.mdi-page-previous:before{content:"\FB8E"}.mdi-page-previous-outline:before{content:"\FB8F"}.mdi-palette:before{content:"\F3D8"}.mdi-palette-advanced:before{content:"\F3D9"}.mdi-palette-outline:before{content:"\FDE8"}.mdi-palette-swatch:before{content:"\F8B4"}.mdi-pan:before{content:"\FB90"}.mdi-pan-bottom-left:before{content:"\FB91"}.mdi-pan-bottom-right:before{content:"\FB92"}.mdi-pan-down:before{content:"\FB93"}.mdi-pan-horizontal:before{content:"\FB94"}.mdi-pan-left:before{content:"\FB95"}.mdi-pan-right:before{content:"\FB96"}.mdi-pan-top-left:before{content:"\FB97"}.mdi-pan-top-right:before{content:"\FB98"}.mdi-pan-up:before{content:"\FB99"}.mdi-pan-vertical:before{content:"\FB9A"}.mdi-panda:before{content:"\F3DA"}.mdi-pandora:before{content:"\F3DB"}.mdi-panorama:before{content:"\F3DC"}.mdi-panorama-fisheye:before{content:"\F3DD"}.mdi-panorama-horizontal:before{content:"\F3DE"}.mdi-panorama-vertical:before{content:"\F3DF"}.mdi-panorama-wide-angle:before{content:"\F3E0"}.mdi-paper-cut-vertical:before{content:"\F3E1"}.mdi-paperclip:before{content:"\F3E2"}.mdi-parachute:before{content:"\FC90"}.mdi-parachute-outline:before{content:"\FC91"}.mdi-parking:before{content:"\F3E3"}.mdi-passport:before{content:"\F7E2"}.mdi-passport-biometric:before{content:"\FDBD"}.mdi-patreon:before{content:"\F881"}.mdi-pause:before{content:"\F3E4"}.mdi-pause-circle:before{content:"\F3E5"}.mdi-pause-circle-outline:before{content:"\F3E6"}.mdi-pause-octagon:before{content:"\F3E7"}.mdi-pause-octagon-outline:before{content:"\F3E8"}.mdi-paw:before{content:"\F3E9"}.mdi-paw-off:before{content:"\F657"}.mdi-paypal:before{content:"\F882"}.mdi-peace:before{content:"\F883"}.mdi-pen:before{content:"\F3EA"}.mdi-pen-lock:before{content:"\FDBE"}.mdi-pen-minus:before{content:"\FDBF"}.mdi-pen-off:before{content:"\FDC0"}.mdi-pen-plus:before{content:"\FDC1"}.mdi-pen-remove:before{content:"\FDC2"}.mdi-pencil:before{content:"\F3EB"}.mdi-pencil-box:before{content:"\F3EC"}.mdi-pencil-box-outline:before{content:"\F3ED"}.mdi-pencil-circle:before{content:"\F6FE"}.mdi-pencil-circle-outline:before{content:"\F775"}.mdi-pencil-lock:before{content:"\F3EE"}.mdi-pencil-lock-outline:before{content:"\FDC3"}.mdi-pencil-minus:before{content:"\FDC4"}.mdi-pencil-minus-outline:before{content:"\FDC5"}.mdi-pencil-off:before{content:"\F3EF"}.mdi-pencil-off-outline:before{content:"\FDC6"}.mdi-pencil-outline:before{content:"\FC92"}.mdi-pencil-plus:before{content:"\FDC7"}.mdi-pencil-plus-outline:before{content:"\FDC8"}.mdi-pencil-remove:before{content:"\FDC9"}.mdi-pencil-remove-outline:before{content:"\FDCA"}.mdi-pentagon:before{content:"\F6FF"}.mdi-pentagon-outline:before{content:"\F700"}.mdi-percent:before{content:"\F3F0"}.mdi-periodic-table:before{content:"\F8B5"}.mdi-periodic-table-co2:before{content:"\F7E3"}.mdi-periscope:before{content:"\F747"}.mdi-perspective-less:before{content:"\FCFF"}.mdi-perspective-more:before{content:"\FD00"}.mdi-pharmacy:before{content:"\F3F1"}.mdi-phone:before{content:"\F3F2"}.mdi-phone-bluetooth:before{content:"\F3F3"}.mdi-phone-classic:before{content:"\F602"}.mdi-phone-forward:before{content:"\F3F4"}.mdi-phone-hangup:before{content:"\F3F5"}.mdi-phone-in-talk:before{content:"\F3F6"}.mdi-phone-incoming:before{content:"\F3F7"}.mdi-phone-lock:before{content:"\F3F8"}.mdi-phone-log:before{content:"\F3F9"}.mdi-phone-minus:before{content:"\F658"}.mdi-phone-missed:before{content:"\F3FA"}.mdi-phone-off:before{content:"\FDCB"}.mdi-phone-outgoing:before{content:"\F3FB"}.mdi-phone-outline:before{content:"\FDCC"}.mdi-phone-paused:before{content:"\F3FC"}.mdi-phone-plus:before{content:"\F659"}.mdi-phone-return:before{content:"\F82E"}.mdi-phone-rotate-landscape:before{content:"\F884"}.mdi-phone-rotate-portrait:before{content:"\F885"}.mdi-phone-settings:before{content:"\F3FD"}.mdi-phone-voip:before{content:"\F3FE"}.mdi-pi:before{content:"\F3FF"}.mdi-pi-box:before{content:"\F400"}.mdi-pi-hole:before{content:"\FDCD"}.mdi-piano:before{content:"\F67C"}.mdi-pickaxe:before{content:"\F8B6"}.mdi-pier:before{content:"\F886"}.mdi-pier-crane:before{content:"\F887"}.mdi-pig:before{content:"\F401"}.mdi-pill:before{content:"\F402"}.mdi-pillar:before{content:"\F701"}.mdi-pin:before{content:"\F403"}.mdi-pin-off:before{content:"\F404"}.mdi-pin-off-outline:before{content:"\F92F"}.mdi-pin-outline:before{content:"\F930"}.mdi-pine-tree:before{content:"\F405"}.mdi-pine-tree-box:before{content:"\F406"}.mdi-pinterest:before{content:"\F407"}.mdi-pinterest-box:before{content:"\F408"}.mdi-pinwheel:before{content:"\FAD4"}.mdi-pinwheel-outline:before{content:"\FAD5"}.mdi-pipe:before{content:"\F7E4"}.mdi-pipe-disconnected:before{content:"\F7E5"}.mdi-pipe-leak:before{content:"\F888"}.mdi-pirate:before{content:"\FA07"}.mdi-pistol:before{content:"\F702"}.mdi-piston:before{content:"\F889"}.mdi-pizza:before{content:"\F409"}.mdi-play:before{content:"\F40A"}.mdi-play-box-outline:before{content:"\F40B"}.mdi-play-circle:before{content:"\F40C"}.mdi-play-circle-outline:before{content:"\F40D"}.mdi-play-network:before{content:"\F88A"}.mdi-play-network-outline:before{content:"\FC93"}.mdi-play-pause:before{content:"\F40E"}.mdi-play-protected-content:before{content:"\F40F"}.mdi-play-speed:before{content:"\F8FE"}.mdi-playlist-check:before{content:"\F5C7"}.mdi-playlist-edit:before{content:"\F8FF"}.mdi-playlist-minus:before{content:"\F410"}.mdi-playlist-music:before{content:"\FC94"}.mdi-playlist-music-outline:before{content:"\FC95"}.mdi-playlist-play:before{content:"\F411"}.mdi-playlist-plus:before{content:"\F412"}.mdi-playlist-remove:before{content:"\F413"}.mdi-playlist-star:before{content:"\FDCE"}.mdi-playstation:before{content:"\F414"}.mdi-plex:before{content:"\F6B9"}.mdi-plus:before{content:"\F415"}.mdi-plus-box:before{content:"\F416"}.mdi-plus-box-outline:before{content:"\F703"}.mdi-plus-circle:before{content:"\F417"}.mdi-plus-circle-multiple-outline:before{content:"\F418"}.mdi-plus-circle-outline:before{content:"\F419"}.mdi-plus-minus:before{content:"\F991"}.mdi-plus-minus-box:before{content:"\F992"}.mdi-plus-network:before{content:"\F41A"}.mdi-plus-network-outline:before{content:"\FC96"}.mdi-plus-one:before{content:"\F41B"}.mdi-plus-outline:before{content:"\F704"}.mdi-pocket:before{content:"\F41C"}.mdi-podcast:before{content:"\F993"}.mdi-podium:before{content:"\FD01"}.mdi-podium-bronze:before{content:"\FD02"}.mdi-podium-gold:before{content:"\FD03"}.mdi-podium-silver:before{content:"\FD04"}.mdi-point-of-sale:before{content:"\FD6E"}.mdi-pokeball:before{content:"\F41D"}.mdi-pokemon-go:before{content:"\FA08"}.mdi-poker-chip:before{content:"\F82F"}.mdi-polaroid:before{content:"\F41E"}.mdi-poll:before{content:"\F41F"}.mdi-poll-box:before{content:"\F420"}.mdi-polymer:before{content:"\F421"}.mdi-pool:before{content:"\F606"}.mdi-popcorn:before{content:"\F422"}.mdi-postage-stamp:before{content:"\FC97"}.mdi-pot:before{content:"\F65A"}.mdi-pot-mix:before{content:"\F65B"}.mdi-pound:before{content:"\F423"}.mdi-pound-box:before{content:"\F424"}.mdi-power:before{content:"\F425"}.mdi-power-cycle:before{content:"\F900"}.mdi-power-off:before{content:"\F901"}.mdi-power-on:before{content:"\F902"}.mdi-power-plug:before{content:"\F6A4"}.mdi-power-plug-off:before{content:"\F6A5"}.mdi-power-settings:before{content:"\F426"}.mdi-power-sleep:before{content:"\F903"}.mdi-power-socket:before{content:"\F427"}.mdi-power-socket-au:before{content:"\F904"}.mdi-power-socket-eu:before{content:"\F7E6"}.mdi-power-socket-uk:before{content:"\F7E7"}.mdi-power-socket-us:before{content:"\F7E8"}.mdi-power-standby:before{content:"\F905"}.mdi-powershell:before{content:"\FA09"}.mdi-prescription:before{content:"\F705"}.mdi-presentation:before{content:"\F428"}.mdi-presentation-play:before{content:"\F429"}.mdi-printer:before{content:"\F42A"}.mdi-printer-3d:before{content:"\F42B"}.mdi-printer-alert:before{content:"\F42C"}.mdi-printer-settings:before{content:"\F706"}.mdi-printer-wireless:before{content:"\FA0A"}.mdi-priority-high:before{content:"\F603"}.mdi-priority-low:before{content:"\F604"}.mdi-professional-hexagon:before{content:"\F42D"}.mdi-progress-alert:before{content:"\FC98"}.mdi-progress-check:before{content:"\F994"}.mdi-progress-clock:before{content:"\F995"}.mdi-progress-download:before{content:"\F996"}.mdi-progress-upload:before{content:"\F997"}.mdi-progress-wrench:before{content:"\FC99"}.mdi-projector:before{content:"\F42E"}.mdi-projector-screen:before{content:"\F42F"}.mdi-publish:before{content:"\F6A6"}.mdi-pulse:before{content:"\F430"}.mdi-pumpkin:before{content:"\FB9B"}.mdi-puzzle:before{content:"\F431"}.mdi-puzzle-outline:before{content:"\FA65"}.mdi-qi:before{content:"\F998"}.mdi-qqchat:before{content:"\F605"}.mdi-qrcode:before{content:"\F432"}.mdi-qrcode-edit:before{content:"\F8B7"}.mdi-qrcode-scan:before{content:"\F433"}.mdi-quadcopter:before{content:"\F434"}.mdi-quality-high:before{content:"\F435"}.mdi-quality-low:before{content:"\FA0B"}.mdi-quality-medium:before{content:"\FA0C"}.mdi-quicktime:before{content:"\F436"}.mdi-quora:before{content:"\FD05"}.mdi-rabbit:before{content:"\F906"}.mdi-racing-helmet:before{content:"\FD6F"}.mdi-racquetball:before{content:"\FD70"}.mdi-radar:before{content:"\F437"}.mdi-radiator:before{content:"\F438"}.mdi-radiator-disabled:before{content:"\FAD6"}.mdi-radiator-off:before{content:"\FAD7"}.mdi-radio:before{content:"\F439"}.mdi-radio-am:before{content:"\FC9A"}.mdi-radio-fm:before{content:"\FC9B"}.mdi-radio-handheld:before{content:"\F43A"}.mdi-radio-tower:before{content:"\F43B"}.mdi-radioactive:before{content:"\F43C"}.mdi-radiobox-blank:before{content:"\F43D"}.mdi-radiobox-marked:before{content:"\F43E"}.mdi-radius:before{content:"\FC9C"}.mdi-radius-outline:before{content:"\FC9D"}.mdi-raspberry-pi:before{content:"\F43F"}.mdi-ray-end:before{content:"\F440"}.mdi-ray-end-arrow:before{content:"\F441"}.mdi-ray-start:before{content:"\F442"}.mdi-ray-start-arrow:before{content:"\F443"}.mdi-ray-start-end:before{content:"\F444"}.mdi-ray-vertex:before{content:"\F445"}.mdi-react:before{content:"\F707"}.mdi-read:before{content:"\F447"}.mdi-receipt:before{content:"\F449"}.mdi-record:before{content:"\F44A"}.mdi-record-player:before{content:"\F999"}.mdi-record-rec:before{content:"\F44B"}.mdi-recycle:before{content:"\F44C"}.mdi-reddit:before{content:"\F44D"}.mdi-redo:before{content:"\F44E"}.mdi-redo-variant:before{content:"\F44F"}.mdi-reflect-horizontal:before{content:"\FA0D"}.mdi-reflect-vertical:before{content:"\FA0E"}.mdi-refresh:before{content:"\F450"}.mdi-regex:before{content:"\F451"}.mdi-registered-trademark:before{content:"\FA66"}.mdi-relative-scale:before{content:"\F452"}.mdi-reload:before{content:"\F453"}.mdi-reminder:before{content:"\F88B"}.mdi-remote:before{content:"\F454"}.mdi-remote-desktop:before{content:"\F8B8"}.mdi-rename-box:before{content:"\F455"}.mdi-reorder-horizontal:before{content:"\F687"}.mdi-reorder-vertical:before{content:"\F688"}.mdi-repeat:before{content:"\F456"}.mdi-repeat-off:before{content:"\F457"}.mdi-repeat-once:before{content:"\F458"}.mdi-replay:before{content:"\F459"}.mdi-reply:before{content:"\F45A"}.mdi-reply-all:before{content:"\F45B"}.mdi-reproduction:before{content:"\F45C"}.mdi-resistor:before{content:"\FB1F"}.mdi-resistor-nodes:before{content:"\FB20"}.mdi-resize:before{content:"\FA67"}.mdi-resize-bottom-right:before{content:"\F45D"}.mdi-responsive:before{content:"\F45E"}.mdi-restart:before{content:"\F708"}.mdi-restart-off:before{content:"\FD71"}.mdi-restore:before{content:"\F99A"}.mdi-restore-clock:before{content:"\F6A7"}.mdi-rewind:before{content:"\F45F"}.mdi-rewind-10:before{content:"\FD06"}.mdi-rewind-30:before{content:"\FD72"}.mdi-rewind-outline:before{content:"\F709"}.mdi-rhombus:before{content:"\F70A"}.mdi-rhombus-medium:before{content:"\FA0F"}.mdi-rhombus-outline:before{content:"\F70B"}.mdi-rhombus-split:before{content:"\FA10"}.mdi-ribbon:before{content:"\F460"}.mdi-rice:before{content:"\F7E9"}.mdi-ring:before{content:"\F7EA"}.mdi-road:before{content:"\F461"}.mdi-road-variant:before{content:"\F462"}.mdi-robot:before{content:"\F6A8"}.mdi-robot-industrial:before{content:"\FB21"}.mdi-robot-vacuum:before{content:"\F70C"}.mdi-robot-vacuum-variant:before{content:"\F907"}.mdi-rocket:before{content:"\F463"}.mdi-roller-skate:before{content:"\FD07"}.mdi-rollerblade:before{content:"\FD08"}.mdi-rollupjs:before{content:"\FB9C"}.mdi-room-service:before{content:"\F88C"}.mdi-room-service-outline:before{content:"\FD73"}.mdi-rotate-3d:before{content:"\F464"}.mdi-rotate-left:before{content:"\F465"}.mdi-rotate-left-variant:before{content:"\F466"}.mdi-rotate-orbit:before{content:"\FD74"}.mdi-rotate-right:before{content:"\F467"}.mdi-rotate-right-variant:before{content:"\F468"}.mdi-rounded-corner:before{content:"\F607"}.mdi-router-wireless:before{content:"\F469"}.mdi-router-wireless-settings:before{content:"\FA68"}.mdi-routes:before{content:"\F46A"}.mdi-rowing:before{content:"\F608"}.mdi-rss:before{content:"\F46B"}.mdi-rss-box:before{content:"\F46C"}.mdi-ruby:before{content:"\FD09"}.mdi-rugby:before{content:"\FD75"}.mdi-ruler:before{content:"\F46D"}.mdi-ruler-square:before{content:"\FC9E"}.mdi-run:before{content:"\F70D"}.mdi-run-fast:before{content:"\F46E"}.mdi-sack:before{content:"\FD0A"}.mdi-sack-percent:before{content:"\FD0B"}.mdi-safe:before{content:"\FA69"}.mdi-safety-goggles:before{content:"\FD0C"}.mdi-sale:before{content:"\F46F"}.mdi-salesforce:before{content:"\F88D"}.mdi-sass:before{content:"\F7EB"}.mdi-satellite:before{content:"\F470"}.mdi-satellite-uplink:before{content:"\F908"}.mdi-satellite-variant:before{content:"\F471"}.mdi-sausage:before{content:"\F8B9"}.mdi-saxophone:before{content:"\F609"}.mdi-scale:before{content:"\F472"}.mdi-scale-balance:before{content:"\F5D1"}.mdi-scale-bathroom:before{content:"\F473"}.mdi-scanner:before{content:"\F6AA"}.mdi-scanner-off:before{content:"\F909"}.mdi-school:before{content:"\F474"}.mdi-scissors-cutting:before{content:"\FA6A"}.mdi-screen-rotation:before{content:"\F475"}.mdi-screen-rotation-lock:before{content:"\F476"}.mdi-screw-flat-top:before{content:"\FDCF"}.mdi-screw-lag:before{content:"\FDD0"}.mdi-screw-machine-flat-top:before{content:"\FDD1"}.mdi-screw-machine-round-top:before{content:"\FDD2"}.mdi-screw-round-top:before{content:"\FDD3"}.mdi-screwdriver:before{content:"\F477"}.mdi-script:before{content:"\FB9D"}.mdi-script-outline:before{content:"\F478"}.mdi-script-text:before{content:"\FB9E"}.mdi-script-text-outline:before{content:"\FB9F"}.mdi-sd:before{content:"\F479"}.mdi-seal:before{content:"\F47A"}.mdi-search-web:before{content:"\F70E"}.mdi-seat:before{content:"\FC9F"}.mdi-seat-flat:before{content:"\F47B"}.mdi-seat-flat-angled:before{content:"\F47C"}.mdi-seat-individual-suite:before{content:"\F47D"}.mdi-seat-legroom-extra:before{content:"\F47E"}.mdi-seat-legroom-normal:before{content:"\F47F"}.mdi-seat-legroom-reduced:before{content:"\F480"}.mdi-seat-outline:before{content:"\FCA0"}.mdi-seat-recline-extra:before{content:"\F481"}.mdi-seat-recline-normal:before{content:"\F482"}.mdi-seatbelt:before{content:"\FCA1"}.mdi-security:before{content:"\F483"}.mdi-security-network:before{content:"\F484"}.mdi-select:before{content:"\F485"}.mdi-select-all:before{content:"\F486"}.mdi-select-color:before{content:"\FD0D"}.mdi-select-compare:before{content:"\FAD8"}.mdi-select-drag:before{content:"\FA6B"}.mdi-select-inverse:before{content:"\F487"}.mdi-select-off:before{content:"\F488"}.mdi-selection:before{content:"\F489"}.mdi-selection-drag:before{content:"\FA6C"}.mdi-selection-ellipse:before{content:"\FD0E"}.mdi-selection-off:before{content:"\F776"}.mdi-send:before{content:"\F48A"}.mdi-send-circle:before{content:"\FDD4"}.mdi-send-circle-outline:before{content:"\FDD5"}.mdi-send-lock:before{content:"\F7EC"}.mdi-serial-port:before{content:"\F65C"}.mdi-server:before{content:"\F48B"}.mdi-server-minus:before{content:"\F48C"}.mdi-server-network:before{content:"\F48D"}.mdi-server-network-off:before{content:"\F48E"}.mdi-server-off:before{content:"\F48F"}.mdi-server-plus:before{content:"\F490"}.mdi-server-remove:before{content:"\F491"}.mdi-server-security:before{content:"\F492"}.mdi-set-all:before{content:"\F777"}.mdi-set-center:before{content:"\F778"}.mdi-set-center-right:before{content:"\F779"}.mdi-set-left:before{content:"\F77A"}.mdi-set-left-center:before{content:"\F77B"}.mdi-set-left-right:before{content:"\F77C"}.mdi-set-none:before{content:"\F77D"}.mdi-set-right:before{content:"\F77E"}.mdi-set-top-box:before{content:"\F99E"}.mdi-settings:before{content:"\F493"}.mdi-settings-box:before{content:"\F494"}.mdi-settings-helper:before{content:"\FA6D"}.mdi-settings-outline:before{content:"\F8BA"}.mdi-shape:before{content:"\F830"}.mdi-shape-circle-plus:before{content:"\F65D"}.mdi-shape-outline:before{content:"\F831"}.mdi-shape-plus:before{content:"\F495"}.mdi-shape-polygon-plus:before{content:"\F65E"}.mdi-shape-rectangle-plus:before{content:"\F65F"}.mdi-shape-square-plus:before{content:"\F660"}.mdi-share:before{content:"\F496"}.mdi-share-outline:before{content:"\F931"}.mdi-share-variant:before{content:"\F497"}.mdi-sheep:before{content:"\FCA2"}.mdi-shield:before{content:"\F498"}.mdi-shield-account:before{content:"\F88E"}.mdi-shield-account-outline:before{content:"\FA11"}.mdi-shield-airplane:before{content:"\F6BA"}.mdi-shield-airplane-outline:before{content:"\FCA3"}.mdi-shield-check:before{content:"\F565"}.mdi-shield-check-outline:before{content:"\FCA4"}.mdi-shield-cross:before{content:"\FCA5"}.mdi-shield-cross-outline:before{content:"\FCA6"}.mdi-shield-half-full:before{content:"\F77F"}.mdi-shield-home:before{content:"\F689"}.mdi-shield-home-outline:before{content:"\FCA7"}.mdi-shield-key:before{content:"\FBA0"}.mdi-shield-key-outline:before{content:"\FBA1"}.mdi-shield-link-variant:before{content:"\FD0F"}.mdi-shield-link-variant-outline:before{content:"\FD10"}.mdi-shield-lock:before{content:"\F99C"}.mdi-shield-lock-outline:before{content:"\FCA8"}.mdi-shield-off:before{content:"\F99D"}.mdi-shield-off-outline:before{content:"\F99B"}.mdi-shield-outline:before{content:"\F499"}.mdi-shield-plus:before{content:"\FAD9"}.mdi-shield-plus-outline:before{content:"\FADA"}.mdi-shield-remove:before{content:"\FADB"}.mdi-shield-remove-outline:before{content:"\FADC"}.mdi-shield-search:before{content:"\FD76"}.mdi-ship-wheel:before{content:"\F832"}.mdi-shoe-formal:before{content:"\FB22"}.mdi-shoe-heel:before{content:"\FB23"}.mdi-shoe-print:before{content:"\FDD6"}.mdi-shopify:before{content:"\FADD"}.mdi-shopping:before{content:"\F49A"}.mdi-shopping-music:before{content:"\F49B"}.mdi-shovel:before{content:"\F70F"}.mdi-shovel-off:before{content:"\F710"}.mdi-shower:before{content:"\F99F"}.mdi-shower-head:before{content:"\F9A0"}.mdi-shredder:before{content:"\F49C"}.mdi-shuffle:before{content:"\F49D"}.mdi-shuffle-disabled:before{content:"\F49E"}.mdi-shuffle-variant:before{content:"\F49F"}.mdi-sigma:before{content:"\F4A0"}.mdi-sigma-lower:before{content:"\F62B"}.mdi-sign-caution:before{content:"\F4A1"}.mdi-sign-direction:before{content:"\F780"}.mdi-sign-text:before{content:"\F781"}.mdi-signal:before{content:"\F4A2"}.mdi-signal-2g:before{content:"\F711"}.mdi-signal-3g:before{content:"\F712"}.mdi-signal-4g:before{content:"\F713"}.mdi-signal-5g:before{content:"\FA6E"}.mdi-signal-cellular-1:before{content:"\F8BB"}.mdi-signal-cellular-2:before{content:"\F8BC"}.mdi-signal-cellular-3:before{content:"\F8BD"}.mdi-signal-cellular-outline:before{content:"\F8BE"}.mdi-signal-hspa:before{content:"\F714"}.mdi-signal-hspa-plus:before{content:"\F715"}.mdi-signal-off:before{content:"\F782"}.mdi-signal-variant:before{content:"\F60A"}.mdi-signature:before{content:"\FDD7"}.mdi-signature-freehand:before{content:"\FDD8"}.mdi-signature-image:before{content:"\FDD9"}.mdi-signature-text:before{content:"\FDDA"}.mdi-silo:before{content:"\FB24"}.mdi-silverware:before{content:"\F4A3"}.mdi-silverware-fork:before{content:"\F4A4"}.mdi-silverware-fork-knife:before{content:"\FA6F"}.mdi-silverware-spoon:before{content:"\F4A5"}.mdi-silverware-variant:before{content:"\F4A6"}.mdi-sim:before{content:"\F4A7"}.mdi-sim-alert:before{content:"\F4A8"}.mdi-sim-off:before{content:"\F4A9"}.mdi-sina-weibo:before{content:"\FADE"}.mdi-sitemap:before{content:"\F4AA"}.mdi-skate:before{content:"\FD11"}.mdi-skew-less:before{content:"\FD12"}.mdi-skew-more:before{content:"\FD13"}.mdi-skip-backward:before{content:"\F4AB"}.mdi-skip-forward:before{content:"\F4AC"}.mdi-skip-next:before{content:"\F4AD"}.mdi-skip-next-circle:before{content:"\F661"}.mdi-skip-next-circle-outline:before{content:"\F662"}.mdi-skip-previous:before{content:"\F4AE"}.mdi-skip-previous-circle:before{content:"\F663"}.mdi-skip-previous-circle-outline:before{content:"\F664"}.mdi-skull:before{content:"\F68B"}.mdi-skull-crossbones:before{content:"\FBA2"}.mdi-skull-crossbones-outline:before{content:"\FBA3"}.mdi-skull-outline:before{content:"\FBA4"}.mdi-skype:before{content:"\F4AF"}.mdi-skype-business:before{content:"\F4B0"}.mdi-slack:before{content:"\F4B1"}.mdi-slackware:before{content:"\F90A"}.mdi-sleep:before{content:"\F4B2"}.mdi-sleep-off:before{content:"\F4B3"}.mdi-slope-downhill:before{content:"\FDDB"}.mdi-slope-uphill:before{content:"\FDDC"}.mdi-smog:before{content:"\FA70"}.mdi-smoke-detector:before{content:"\F392"}.mdi-smoking:before{content:"\F4B4"}.mdi-smoking-off:before{content:"\F4B5"}.mdi-snapchat:before{content:"\F4B6"}.mdi-snowflake:before{content:"\F716"}.mdi-snowman:before{content:"\F4B7"}.mdi-soccer:before{content:"\F4B8"}.mdi-soccer-field:before{content:"\F833"}.mdi-sofa:before{content:"\F4B9"}.mdi-solar-panel:before{content:"\FD77"}.mdi-solar-panel-large:before{content:"\FD78"}.mdi-solar-power:before{content:"\FA71"}.mdi-solid:before{content:"\F68C"}.mdi-sort:before{content:"\F4BA"}.mdi-sort-alphabetical:before{content:"\F4BB"}.mdi-sort-ascending:before{content:"\F4BC"}.mdi-sort-descending:before{content:"\F4BD"}.mdi-sort-numeric:before{content:"\F4BE"}.mdi-sort-variant:before{content:"\F4BF"}.mdi-sort-variant-lock:before{content:"\FCA9"}.mdi-sort-variant-lock-open:before{content:"\FCAA"}.mdi-soundcloud:before{content:"\F4C0"}.mdi-source-branch:before{content:"\F62C"}.mdi-source-commit:before{content:"\F717"}.mdi-source-commit-end:before{content:"\F718"}.mdi-source-commit-end-local:before{content:"\F719"}.mdi-source-commit-local:before{content:"\F71A"}.mdi-source-commit-next-local:before{content:"\F71B"}.mdi-source-commit-start:before{content:"\F71C"}.mdi-source-commit-start-next-local:before{content:"\F71D"}.mdi-source-fork:before{content:"\F4C1"}.mdi-source-merge:before{content:"\F62D"}.mdi-source-pull:before{content:"\F4C2"}.mdi-source-repository:before{content:"\FCAB"}.mdi-source-repository-multiple:before{content:"\FCAC"}.mdi-soy-sauce:before{content:"\F7ED"}.mdi-spa:before{content:"\FCAD"}.mdi-spa-outline:before{content:"\FCAE"}.mdi-space-invaders:before{content:"\FBA5"}.mdi-speaker:before{content:"\F4C3"}.mdi-speaker-bluetooth:before{content:"\F9A1"}.mdi-speaker-multiple:before{content:"\FD14"}.mdi-speaker-off:before{content:"\F4C4"}.mdi-speaker-wireless:before{content:"\F71E"}.mdi-speedometer:before{content:"\F4C5"}.mdi-spellcheck:before{content:"\F4C6"}.mdi-spider-web:before{content:"\FBA6"}.mdi-spotify:before{content:"\F4C7"}.mdi-spotlight:before{content:"\F4C8"}.mdi-spotlight-beam:before{content:"\F4C9"}.mdi-spray:before{content:"\F665"}.mdi-spray-bottle:before{content:"\FADF"}.mdi-square:before{content:"\F763"}.mdi-square-edit-outline:before{content:"\F90B"}.mdi-square-inc:before{content:"\F4CA"}.mdi-square-inc-cash:before{content:"\F4CB"}.mdi-square-medium:before{content:"\FA12"}.mdi-square-medium-outline:before{content:"\FA13"}.mdi-square-outline:before{content:"\F762"}.mdi-square-root:before{content:"\F783"}.mdi-square-root-box:before{content:"\F9A2"}.mdi-square-small:before{content:"\FA14"}.mdi-squeegee:before{content:"\FAE0"}.mdi-ssh:before{content:"\F8BF"}.mdi-stack-exchange:before{content:"\F60B"}.mdi-stack-overflow:before{content:"\F4CC"}.mdi-stadium:before{content:"\F71F"}.mdi-stairs:before{content:"\F4CD"}.mdi-stamper:before{content:"\FD15"}.mdi-standard-definition:before{content:"\F7EE"}.mdi-star:before{content:"\F4CE"}.mdi-star-box:before{content:"\FA72"}.mdi-star-box-outline:before{content:"\FA73"}.mdi-star-circle:before{content:"\F4CF"}.mdi-star-circle-outline:before{content:"\F9A3"}.mdi-star-face:before{content:"\F9A4"}.mdi-star-four-points:before{content:"\FAE1"}.mdi-star-four-points-outline:before{content:"\FAE2"}.mdi-star-half:before{content:"\F4D0"}.mdi-star-off:before{content:"\F4D1"}.mdi-star-outline:before{content:"\F4D2"}.mdi-star-three-points:before{content:"\FAE3"}.mdi-star-three-points-outline:before{content:"\FAE4"}.mdi-steam:before{content:"\F4D3"}.mdi-steam-box:before{content:"\F90C"}.mdi-steering:before{content:"\F4D4"}.mdi-steering-off:before{content:"\F90D"}.mdi-step-backward:before{content:"\F4D5"}.mdi-step-backward-2:before{content:"\F4D6"}.mdi-step-forward:before{content:"\F4D7"}.mdi-step-forward-2:before{content:"\F4D8"}.mdi-stethoscope:before{content:"\F4D9"}.mdi-sticker:before{content:"\F5D0"}.mdi-sticker-emoji:before{content:"\F784"}.mdi-stocking:before{content:"\F4DA"}.mdi-stop:before{content:"\F4DB"}.mdi-stop-circle:before{content:"\F666"}.mdi-stop-circle-outline:before{content:"\F667"}.mdi-store:before{content:"\F4DC"}.mdi-store-24-hour:before{content:"\F4DD"}.mdi-stove:before{content:"\F4DE"}.mdi-strava:before{content:"\FB25"}.mdi-subdirectory-arrow-left:before{content:"\F60C"}.mdi-subdirectory-arrow-right:before{content:"\F60D"}.mdi-subtitles:before{content:"\FA15"}.mdi-subtitles-outline:before{content:"\FA16"}.mdi-subway:before{content:"\F6AB"}.mdi-subway-alert-variant:before{content:"\FD79"}.mdi-subway-variant:before{content:"\F4DF"}.mdi-summit:before{content:"\F785"}.mdi-sunglasses:before{content:"\F4E0"}.mdi-surround-sound:before{content:"\F5C5"}.mdi-surround-sound-2-0:before{content:"\F7EF"}.mdi-surround-sound-3-1:before{content:"\F7F0"}.mdi-surround-sound-5-1:before{content:"\F7F1"}.mdi-surround-sound-7-1:before{content:"\F7F2"}.mdi-svg:before{content:"\F720"}.mdi-swap-horizontal:before{content:"\F4E1"}.mdi-swap-horizontal-bold:before{content:"\FBA9"}.mdi-swap-horizontal-variant:before{content:"\F8C0"}.mdi-swap-vertical:before{content:"\F4E2"}.mdi-swap-vertical-bold:before{content:"\FBAA"}.mdi-swap-vertical-variant:before{content:"\F8C1"}.mdi-swim:before{content:"\F4E3"}.mdi-switch:before{content:"\F4E4"}.mdi-sword:before{content:"\F4E5"}.mdi-sword-cross:before{content:"\F786"}.mdi-symfony:before{content:"\FAE5"}.mdi-sync:before{content:"\F4E6"}.mdi-sync-alert:before{content:"\F4E7"}.mdi-sync-off:before{content:"\F4E8"}.mdi-tab:before{content:"\F4E9"}.mdi-tab-minus:before{content:"\FB26"}.mdi-tab-plus:before{content:"\F75B"}.mdi-tab-remove:before{content:"\FB27"}.mdi-tab-unselected:before{content:"\F4EA"}.mdi-table:before{content:"\F4EB"}.mdi-table-border:before{content:"\FA17"}.mdi-table-column:before{content:"\F834"}.mdi-table-column-plus-after:before{content:"\F4EC"}.mdi-table-column-plus-before:before{content:"\F4ED"}.mdi-table-column-remove:before{content:"\F4EE"}.mdi-table-column-width:before{content:"\F4EF"}.mdi-table-edit:before{content:"\F4F0"}.mdi-table-large:before{content:"\F4F1"}.mdi-table-merge-cells:before{content:"\F9A5"}.mdi-table-of-contents:before{content:"\F835"}.mdi-table-plus:before{content:"\FA74"}.mdi-table-remove:before{content:"\FA75"}.mdi-table-row:before{content:"\F836"}.mdi-table-row-height:before{content:"\F4F2"}.mdi-table-row-plus-after:before{content:"\F4F3"}.mdi-table-row-plus-before:before{content:"\F4F4"}.mdi-table-row-remove:before{content:"\F4F5"}.mdi-table-search:before{content:"\F90E"}.mdi-table-settings:before{content:"\F837"}.mdi-tablet:before{content:"\F4F6"}.mdi-tablet-android:before{content:"\F4F7"}.mdi-tablet-cellphone:before{content:"\F9A6"}.mdi-tablet-ipad:before{content:"\F4F8"}.mdi-taco:before{content:"\F761"}.mdi-tag:before{content:"\F4F9"}.mdi-tag-faces:before{content:"\F4FA"}.mdi-tag-heart:before{content:"\F68A"}.mdi-tag-heart-outline:before{content:"\FBAB"}.mdi-tag-minus:before{content:"\F90F"}.mdi-tag-multiple:before{content:"\F4FB"}.mdi-tag-outline:before{content:"\F4FC"}.mdi-tag-plus:before{content:"\F721"}.mdi-tag-remove:before{content:"\F722"}.mdi-tag-text-outline:before{content:"\F4FD"}.mdi-tank:before{content:"\FD16"}.mdi-tape-measure:before{content:"\FB28"}.mdi-target:before{content:"\F4FE"}.mdi-target-account:before{content:"\FBAC"}.mdi-target-variant:before{content:"\FA76"}.mdi-taxi:before{content:"\F4FF"}.mdi-tea:before{content:"\FD7A"}.mdi-tea-outline:before{content:"\FD7B"}.mdi-teach:before{content:"\F88F"}.mdi-teamviewer:before{content:"\F500"}.mdi-telegram:before{content:"\F501"}.mdi-telescope:before{content:"\FB29"}.mdi-television:before{content:"\F502"}.mdi-television-box:before{content:"\F838"}.mdi-television-classic:before{content:"\F7F3"}.mdi-television-classic-off:before{content:"\F839"}.mdi-television-guide:before{content:"\F503"}.mdi-television-off:before{content:"\F83A"}.mdi-temperature-celsius:before{content:"\F504"}.mdi-temperature-fahrenheit:before{content:"\F505"}.mdi-temperature-kelvin:before{content:"\F506"}.mdi-tennis:before{content:"\FD7C"}.mdi-tennis-ball:before{content:"\F507"}.mdi-tent:before{content:"\F508"}.mdi-terrain:before{content:"\F509"}.mdi-test-tube:before{content:"\F668"}.mdi-test-tube-empty:before{content:"\F910"}.mdi-test-tube-off:before{content:"\F911"}.mdi-text:before{content:"\F9A7"}.mdi-text-shadow:before{content:"\F669"}.mdi-text-short:before{content:"\F9A8"}.mdi-text-subject:before{content:"\F9A9"}.mdi-text-to-speech:before{content:"\F50A"}.mdi-text-to-speech-off:before{content:"\F50B"}.mdi-textbox:before{content:"\F60E"}.mdi-textbox-password:before{content:"\F7F4"}.mdi-texture:before{content:"\F50C"}.mdi-theater:before{content:"\F50D"}.mdi-theme-light-dark:before{content:"\F50E"}.mdi-thermometer:before{content:"\F50F"}.mdi-thermometer-alert:before{content:"\FDDD"}.mdi-thermometer-chevron-down:before{content:"\FDDE"}.mdi-thermometer-chevron-up:before{content:"\FDDF"}.mdi-thermometer-lines:before{content:"\F510"}.mdi-thermometer-minus:before{content:"\FDE0"}.mdi-thermometer-plus:before{content:"\FDE1"}.mdi-thermostat:before{content:"\F393"}.mdi-thermostat-box:before{content:"\F890"}.mdi-thought-bubble:before{content:"\F7F5"}.mdi-thought-bubble-outline:before{content:"\F7F6"}.mdi-thumb-down:before{content:"\F511"}.mdi-thumb-down-outline:before{content:"\F512"}.mdi-thumb-up:before{content:"\F513"}.mdi-thumb-up-outline:before{content:"\F514"}.mdi-thumbs-up-down:before{content:"\F515"}.mdi-ticket:before{content:"\F516"}.mdi-ticket-account:before{content:"\F517"}.mdi-ticket-confirmation:before{content:"\F518"}.mdi-ticket-outline:before{content:"\F912"}.mdi-ticket-percent:before{content:"\F723"}.mdi-tie:before{content:"\F519"}.mdi-tilde:before{content:"\F724"}.mdi-timelapse:before{content:"\F51A"}.mdi-timeline:before{content:"\FBAD"}.mdi-timeline-outline:before{content:"\FBAE"}.mdi-timeline-text:before{content:"\FBAF"}.mdi-timeline-text-outline:before{content:"\FBB0"}.mdi-timer:before{content:"\F51B"}.mdi-timer-10:before{content:"\F51C"}.mdi-timer-3:before{content:"\F51D"}.mdi-timer-off:before{content:"\F51E"}.mdi-timer-sand:before{content:"\F51F"}.mdi-timer-sand-empty:before{content:"\F6AC"}.mdi-timer-sand-full:before{content:"\F78B"}.mdi-timetable:before{content:"\F520"}.mdi-toaster-oven:before{content:"\FCAF"}.mdi-toggle-switch:before{content:"\F521"}.mdi-toggle-switch-off:before{content:"\F522"}.mdi-toggle-switch-off-outline:before{content:"\FA18"}.mdi-toggle-switch-outline:before{content:"\FA19"}.mdi-toilet:before{content:"\F9AA"}.mdi-toolbox:before{content:"\F9AB"}.mdi-toolbox-outline:before{content:"\F9AC"}.mdi-tooltip:before{content:"\F523"}.mdi-tooltip-account:before{content:"\F00C"}.mdi-tooltip-edit:before{content:"\F524"}.mdi-tooltip-image:before{content:"\F525"}.mdi-tooltip-image-outline:before{content:"\FBB1"}.mdi-tooltip-outline:before{content:"\F526"}.mdi-tooltip-plus:before{content:"\FBB2"}.mdi-tooltip-plus-outline:before{content:"\F527"}.mdi-tooltip-text:before{content:"\F528"}.mdi-tooltip-text-outline:before{content:"\FBB3"}.mdi-tooth:before{content:"\F8C2"}.mdi-tooth-outline:before{content:"\F529"}.mdi-tor:before{content:"\F52A"}.mdi-tortoise:before{content:"\FD17"}.mdi-tournament:before{content:"\F9AD"}.mdi-tower-beach:before{content:"\F680"}.mdi-tower-fire:before{content:"\F681"}.mdi-towing:before{content:"\F83B"}.mdi-track-light:before{content:"\F913"}.mdi-trackpad:before{content:"\F7F7"}.mdi-trackpad-lock:before{content:"\F932"}.mdi-tractor:before{content:"\F891"}.mdi-trademark:before{content:"\FA77"}.mdi-traffic-light:before{content:"\F52B"}.mdi-train:before{content:"\F52C"}.mdi-train-car:before{content:"\FBB4"}.mdi-train-variant:before{content:"\F8C3"}.mdi-tram:before{content:"\F52D"}.mdi-transcribe:before{content:"\F52E"}.mdi-transcribe-close:before{content:"\F52F"}.mdi-transfer-down:before{content:"\FD7D"}.mdi-transfer-left:before{content:"\FD7E"}.mdi-transfer-right:before{content:"\F530"}.mdi-transfer-up:before{content:"\FD7F"}.mdi-transit-connection:before{content:"\FD18"}.mdi-transit-connection-variant:before{content:"\FD19"}.mdi-transit-transfer:before{content:"\F6AD"}.mdi-transition:before{content:"\F914"}.mdi-transition-masked:before{content:"\F915"}.mdi-translate:before{content:"\F5CA"}.mdi-translate-off:before{content:"\FDE2"}.mdi-transmission-tower:before{content:"\FD1A"}.mdi-trash-can:before{content:"\FA78"}.mdi-trash-can-outline:before{content:"\FA79"}.mdi-treasure-chest:before{content:"\F725"}.mdi-tree:before{content:"\F531"}.mdi-trello:before{content:"\F532"}.mdi-trending-down:before{content:"\F533"}.mdi-trending-neutral:before{content:"\F534"}.mdi-trending-up:before{content:"\F535"}.mdi-triangle:before{content:"\F536"}.mdi-triangle-outline:before{content:"\F537"}.mdi-triforce:before{content:"\FBB5"}.mdi-trophy:before{content:"\F538"}.mdi-trophy-award:before{content:"\F539"}.mdi-trophy-broken:before{content:"\FD80"}.mdi-trophy-outline:before{content:"\F53A"}.mdi-trophy-variant:before{content:"\F53B"}.mdi-trophy-variant-outline:before{content:"\F53C"}.mdi-truck:before{content:"\F53D"}.mdi-truck-check:before{content:"\FCB0"}.mdi-truck-delivery:before{content:"\F53E"}.mdi-truck-fast:before{content:"\F787"}.mdi-truck-trailer:before{content:"\F726"}.mdi-tshirt-crew:before{content:"\FA7A"}.mdi-tshirt-crew-outline:before{content:"\F53F"}.mdi-tshirt-v:before{content:"\FA7B"}.mdi-tshirt-v-outline:before{content:"\F540"}.mdi-tumble-dryer:before{content:"\F916"}.mdi-tumblr:before{content:"\F541"}.mdi-tumblr-box:before{content:"\F917"}.mdi-tumblr-reblog:before{content:"\F542"}.mdi-tune:before{content:"\F62E"}.mdi-tune-vertical:before{content:"\F66A"}.mdi-turnstile:before{content:"\FCB1"}.mdi-turnstile-outline:before{content:"\FCB2"}.mdi-turtle:before{content:"\FCB3"}.mdi-twitch:before{content:"\F543"}.mdi-twitter:before{content:"\F544"}.mdi-twitter-box:before{content:"\F545"}.mdi-twitter-circle:before{content:"\F546"}.mdi-twitter-retweet:before{content:"\F547"}.mdi-two-factor-authentication:before{content:"\F9AE"}.mdi-uber:before{content:"\F748"}.mdi-ubisoft:before{content:"\FBB6"}.mdi-ubuntu:before{content:"\F548"}.mdi-ultra-high-definition:before{content:"\F7F8"}.mdi-umbraco:before{content:"\F549"}.mdi-umbrella:before{content:"\F54A"}.mdi-umbrella-closed:before{content:"\F9AF"}.mdi-umbrella-outline:before{content:"\F54B"}.mdi-undo:before{content:"\F54C"}.mdi-undo-variant:before{content:"\F54D"}.mdi-unfold-less-horizontal:before{content:"\F54E"}.mdi-unfold-less-vertical:before{content:"\F75F"}.mdi-unfold-more-horizontal:before{content:"\F54F"}.mdi-unfold-more-vertical:before{content:"\F760"}.mdi-ungroup:before{content:"\F550"}.mdi-unity:before{content:"\F6AE"}.mdi-unreal:before{content:"\F9B0"}.mdi-untappd:before{content:"\F551"}.mdi-update:before{content:"\F6AF"}.mdi-upload:before{content:"\F552"}.mdi-upload-multiple:before{content:"\F83C"}.mdi-upload-network:before{content:"\F6F5"}.mdi-upload-network-outline:before{content:"\FCB4"}.mdi-upload-outline:before{content:"\FDE3"}.mdi-usb:before{content:"\F553"}.mdi-van-passenger:before{content:"\F7F9"}.mdi-van-utility:before{content:"\F7FA"}.mdi-vanish:before{content:"\F7FB"}.mdi-variable:before{content:"\FAE6"}.mdi-vector-arrange-above:before{content:"\F554"}.mdi-vector-arrange-below:before{content:"\F555"}.mdi-vector-bezier:before{content:"\FAE7"}.mdi-vector-circle:before{content:"\F556"}.mdi-vector-circle-variant:before{content:"\F557"}.mdi-vector-combine:before{content:"\F558"}.mdi-vector-curve:before{content:"\F559"}.mdi-vector-difference:before{content:"\F55A"}.mdi-vector-difference-ab:before{content:"\F55B"}.mdi-vector-difference-ba:before{content:"\F55C"}.mdi-vector-ellipse:before{content:"\F892"}.mdi-vector-intersection:before{content:"\F55D"}.mdi-vector-line:before{content:"\F55E"}.mdi-vector-point:before{content:"\F55F"}.mdi-vector-polygon:before{content:"\F560"}.mdi-vector-polyline:before{content:"\F561"}.mdi-vector-radius:before{content:"\F749"}.mdi-vector-rectangle:before{content:"\F5C6"}.mdi-vector-selection:before{content:"\F562"}.mdi-vector-square:before{content:"\F001"}.mdi-vector-triangle:before{content:"\F563"}.mdi-vector-union:before{content:"\F564"}.mdi-venmo:before{content:"\F578"}.mdi-vhs:before{content:"\FA1A"}.mdi-vibrate:before{content:"\F566"}.mdi-vibrate-off:before{content:"\FCB5"}.mdi-video:before{content:"\F567"}.mdi-video-3d:before{content:"\F7FC"}.mdi-video-4k-box:before{content:"\F83D"}.mdi-video-account:before{content:"\F918"}.mdi-video-image:before{content:"\F919"}.mdi-video-input-antenna:before{content:"\F83E"}.mdi-video-input-component:before{content:"\F83F"}.mdi-video-input-hdmi:before{content:"\F840"}.mdi-video-input-svideo:before{content:"\F841"}.mdi-video-minus:before{content:"\F9B1"}.mdi-video-off:before{content:"\F568"}.mdi-video-off-outline:before{content:"\FBB7"}.mdi-video-outline:before{content:"\FBB8"}.mdi-video-plus:before{content:"\F9B2"}.mdi-video-stabilization:before{content:"\F91A"}.mdi-video-switch:before{content:"\F569"}.mdi-video-vintage:before{content:"\FA1B"}.mdi-view-agenda:before{content:"\F56A"}.mdi-view-array:before{content:"\F56B"}.mdi-view-carousel:before{content:"\F56C"}.mdi-view-column:before{content:"\F56D"}.mdi-view-dashboard:before{content:"\F56E"}.mdi-view-dashboard-outline:before{content:"\FA1C"}.mdi-view-dashboard-variant:before{content:"\F842"}.mdi-view-day:before{content:"\F56F"}.mdi-view-grid:before{content:"\F570"}.mdi-view-headline:before{content:"\F571"}.mdi-view-list:before{content:"\F572"}.mdi-view-module:before{content:"\F573"}.mdi-view-parallel:before{content:"\F727"}.mdi-view-quilt:before{content:"\F574"}.mdi-view-sequential:before{content:"\F728"}.mdi-view-split-horizontal:before{content:"\FBA7"}.mdi-view-split-vertical:before{content:"\FBA8"}.mdi-view-stream:before{content:"\F575"}.mdi-view-week:before{content:"\F576"}.mdi-vimeo:before{content:"\F577"}.mdi-violin:before{content:"\F60F"}.mdi-virtual-reality:before{content:"\F893"}.mdi-visual-studio:before{content:"\F610"}.mdi-visual-studio-code:before{content:"\FA1D"}.mdi-vk:before{content:"\F579"}.mdi-vk-box:before{content:"\F57A"}.mdi-vk-circle:before{content:"\F57B"}.mdi-vlc:before{content:"\F57C"}.mdi-voice:before{content:"\F5CB"}.mdi-voicemail:before{content:"\F57D"}.mdi-volleyball:before{content:"\F9B3"}.mdi-volume-high:before{content:"\F57E"}.mdi-volume-low:before{content:"\F57F"}.mdi-volume-medium:before{content:"\F580"}.mdi-volume-minus:before{content:"\F75D"}.mdi-volume-mute:before{content:"\F75E"}.mdi-volume-off:before{content:"\F581"}.mdi-volume-plus:before{content:"\F75C"}.mdi-volume-variant-off:before{content:"\FDE4"}.mdi-vote:before{content:"\FA1E"}.mdi-vote-outline:before{content:"\FA1F"}.mdi-vpn:before{content:"\F582"}.mdi-vuejs:before{content:"\F843"}.mdi-walk:before{content:"\F583"}.mdi-wall:before{content:"\F7FD"}.mdi-wall-sconce:before{content:"\F91B"}.mdi-wall-sconce-flat:before{content:"\F91C"}.mdi-wall-sconce-variant:before{content:"\F91D"}.mdi-wallet:before{content:"\F584"}.mdi-wallet-giftcard:before{content:"\F585"}.mdi-wallet-membership:before{content:"\F586"}.mdi-wallet-outline:before{content:"\FBB9"}.mdi-wallet-travel:before{content:"\F587"}.mdi-wallpaper:before{content:"\FDE5"}.mdi-wan:before{content:"\F588"}.mdi-washing-machine:before{content:"\F729"}.mdi-watch:before{content:"\F589"}.mdi-watch-export:before{content:"\F58A"}.mdi-watch-export-variant:before{content:"\F894"}.mdi-watch-import:before{content:"\F58B"}.mdi-watch-import-variant:before{content:"\F895"}.mdi-watch-variant:before{content:"\F896"}.mdi-watch-vibrate:before{content:"\F6B0"}.mdi-watch-vibrate-off:before{content:"\FCB6"}.mdi-water:before{content:"\F58C"}.mdi-water-off:before{content:"\F58D"}.mdi-water-outline:before{content:"\FDE6"}.mdi-water-percent:before{content:"\F58E"}.mdi-water-pump:before{content:"\F58F"}.mdi-watermark:before{content:"\F612"}.mdi-waves:before{content:"\F78C"}.mdi-waze:before{content:"\FBBA"}.mdi-weather-cloudy:before{content:"\F590"}.mdi-weather-fog:before{content:"\F591"}.mdi-weather-hail:before{content:"\F592"}.mdi-weather-hurricane:before{content:"\F897"}.mdi-weather-lightning:before{content:"\F593"}.mdi-weather-lightning-rainy:before{content:"\F67D"}.mdi-weather-night:before{content:"\F594"}.mdi-weather-partlycloudy:before{content:"\F595"}.mdi-weather-pouring:before{content:"\F596"}.mdi-weather-rainy:before{content:"\F597"}.mdi-weather-snowy:before{content:"\F598"}.mdi-weather-snowy-rainy:before{content:"\F67E"}.mdi-weather-sunny:before{content:"\F599"}.mdi-weather-sunset:before{content:"\F59A"}.mdi-weather-sunset-down:before{content:"\F59B"}.mdi-weather-sunset-up:before{content:"\F59C"}.mdi-weather-windy:before{content:"\F59D"}.mdi-weather-windy-variant:before{content:"\F59E"}.mdi-web:before{content:"\F59F"}.mdi-webcam:before{content:"\F5A0"}.mdi-webhook:before{content:"\F62F"}.mdi-webpack:before{content:"\F72A"}.mdi-wechat:before{content:"\F611"}.mdi-weight:before{content:"\F5A1"}.mdi-weight-gram:before{content:"\FD1B"}.mdi-weight-kilogram:before{content:"\F5A2"}.mdi-weight-pound:before{content:"\F9B4"}.mdi-whatsapp:before{content:"\F5A3"}.mdi-wheelchair-accessibility:before{content:"\F5A4"}.mdi-whistle:before{content:"\F9B5"}.mdi-white-balance-auto:before{content:"\F5A5"}.mdi-white-balance-incandescent:before{content:"\F5A6"}.mdi-white-balance-iridescent:before{content:"\F5A7"}.mdi-white-balance-sunny:before{content:"\F5A8"}.mdi-widgets:before{content:"\F72B"}.mdi-wifi:before{content:"\F5A9"}.mdi-wifi-off:before{content:"\F5AA"}.mdi-wifi-star:before{content:"\FDE7"}.mdi-wifi-strength-1:before{content:"\F91E"}.mdi-wifi-strength-1-alert:before{content:"\F91F"}.mdi-wifi-strength-1-lock:before{content:"\F920"}.mdi-wifi-strength-2:before{content:"\F921"}.mdi-wifi-strength-2-alert:before{content:"\F922"}.mdi-wifi-strength-2-lock:before{content:"\F923"}.mdi-wifi-strength-3:before{content:"\F924"}.mdi-wifi-strength-3-alert:before{content:"\F925"}.mdi-wifi-strength-3-lock:before{content:"\F926"}.mdi-wifi-strength-4:before{content:"\F927"}.mdi-wifi-strength-4-alert:before{content:"\F928"}.mdi-wifi-strength-4-lock:before{content:"\F929"}.mdi-wifi-strength-alert-outline:before{content:"\F92A"}.mdi-wifi-strength-lock-outline:before{content:"\F92B"}.mdi-wifi-strength-off:before{content:"\F92C"}.mdi-wifi-strength-off-outline:before{content:"\F92D"}.mdi-wifi-strength-outline:before{content:"\F92E"}.mdi-wii:before{content:"\F5AB"}.mdi-wiiu:before{content:"\F72C"}.mdi-wikipedia:before{content:"\F5AC"}.mdi-wind-turbine:before{content:"\FD81"}.mdi-window-close:before{content:"\F5AD"}.mdi-window-closed:before{content:"\F5AE"}.mdi-window-maximize:before{content:"\F5AF"}.mdi-window-minimize:before{content:"\F5B0"}.mdi-window-open:before{content:"\F5B1"}.mdi-window-restore:before{content:"\F5B2"}.mdi-windows:before{content:"\F5B3"}.mdi-windows-classic:before{content:"\FA20"}.mdi-wiper:before{content:"\FAE8"}.mdi-wiper-wash:before{content:"\FD82"}.mdi-wordpress:before{content:"\F5B4"}.mdi-worker:before{content:"\F5B5"}.mdi-wrap:before{content:"\F5B6"}.mdi-wrap-disabled:before{content:"\FBBB"}.mdi-wrench:before{content:"\F5B7"}.mdi-wrench-outline:before{content:"\FBBC"}.mdi-wunderlist:before{content:"\F5B8"}.mdi-xamarin:before{content:"\F844"}.mdi-xamarin-outline:before{content:"\F845"}.mdi-xaml:before{content:"\F673"}.mdi-xbox:before{content:"\F5B9"}.mdi-xbox-controller:before{content:"\F5BA"}.mdi-xbox-controller-battery-alert:before{content:"\F74A"}.mdi-xbox-controller-battery-charging:before{content:"\FA21"}.mdi-xbox-controller-battery-empty:before{content:"\F74B"}.mdi-xbox-controller-battery-full:before{content:"\F74C"}.mdi-xbox-controller-battery-low:before{content:"\F74D"}.mdi-xbox-controller-battery-medium:before{content:"\F74E"}.mdi-xbox-controller-battery-unknown:before{content:"\F74F"}.mdi-xbox-controller-off:before{content:"\F5BB"}.mdi-xda:before{content:"\F5BC"}.mdi-xing:before{content:"\F5BD"}.mdi-xing-box:before{content:"\F5BE"}.mdi-xing-circle:before{content:"\F5BF"}.mdi-xml:before{content:"\F5C0"}.mdi-xmpp:before{content:"\F7FE"}.mdi-yahoo:before{content:"\FB2A"}.mdi-yammer:before{content:"\F788"}.mdi-yeast:before{content:"\F5C1"}.mdi-yelp:before{content:"\F5C2"}.mdi-yin-yang:before{content:"\F67F"}.mdi-youtube:before{content:"\F5C3"}.mdi-youtube-creator-studio:before{content:"\F846"}.mdi-youtube-gaming:before{content:"\F847"}.mdi-youtube-subscription:before{content:"\FD1C"}.mdi-youtube-tv:before{content:"\F448"}.mdi-z-wave:before{content:"\FAE9"}.mdi-zend:before{content:"\FAEA"}.mdi-zigbee:before{content:"\FD1D"}.mdi-zip-box:before{content:"\F5C4"}.mdi-zip-disk:before{content:"\FA22"}.mdi-zodiac-aquarius:before{content:"\FA7C"}.mdi-zodiac-aries:before{content:"\FA7D"}.mdi-zodiac-cancer:before{content:"\FA7E"}.mdi-zodiac-capricorn:before{content:"\FA7F"}.mdi-zodiac-gemini:before{content:"\FA80"}.mdi-zodiac-leo:before{content:"\FA81"}.mdi-zodiac-libra:before{content:"\FA82"}.mdi-zodiac-pisces:before{content:"\FA83"}.mdi-zodiac-sagittarius:before{content:"\FA84"}.mdi-zodiac-scorpio:before{content:"\FA85"}.mdi-zodiac-taurus:before{content:"\FA86"}.mdi-zodiac-virgo:before{content:"\FA87"}.mdi-blank:before{content:"\F68C";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,0.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,0.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:rgba(255,255,255,0.3)}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} -/*# sourceMappingURL=materialdesignicons.min.css.map */ diff --git a/community_server/webroot/css/normalize.css b/community_server/webroot/css/normalize.css deleted file mode 100644 index b0c1902dc..000000000 --- a/community_server/webroot/css/normalize.css +++ /dev/null @@ -1,349 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ - -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - -img { - border-style: none; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - -button, -[type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ - -[hidden] { - display: none; -} \ No newline at end of file diff --git a/community_server/webroot/css/rippleUI/style.css b/community_server/webroot/css/rippleUI/style.css deleted file mode 100644 index 8ba93da24..000000000 --- a/community_server/webroot/css/rippleUI/style.css +++ /dev/null @@ -1,14705 +0,0 @@ -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite -} - -@-webkit-keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -@keyframes fadeIn { - from { - opacity: 0 - } - - to { - opacity: 1 - } - -} - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn -} - -@-webkit-keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0) - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none - } - -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown -} - -@-webkit-keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -@keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0) - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) - } - -} - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp -} - -@-webkit-keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -@keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 50% { - opacity: 1 - } - -} - -.zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn -} - -@keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@keyframes rotate360 { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - -webkit-transform-origin: center; - transform-origin: center - } - -} - -@-webkit-keyframes bounceIn { - 20%, - 40%, - 60%, - 80%, - from, - to { - -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); - animation-timing-function: cubic-bezier(.215, .61, .355, 1) - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3) - } - - 20% { - -webkit-transform: scale3d(1.4, 1.4, 1.4); - transform: scale3d(1.4, 1.4, 1.4) - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9) - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03) - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97) - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1) - } - -} - -@-webkit-keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -@keyframes ripple { - 0%, - 35% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 1 - } - - 50% { - -webkit-transform: scale(.6); - transform: scale(.6); - opacity: .8 - } - - 100% { - opacity: 0; - -webkit-transform: scale(1.2); - transform: scale(1.2) - } - -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Thin.ttf); - font-weight: 100 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Light.ttf); - font-weight: 300 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Regular.ttf); - font-weight: 400 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Medium.ttf); - font-weight: 500 -} - -@font-face { - font-family: Roboto; - src: url(../../fonts/Roboto/Roboto-Bold.ttf); - font-weight: 700 -} - -.bg-inverse-primary { - background: rgba(4, 112, 6, .2) -} - -.bg-inverse-secondary { - background: rgba(128, 128, 128, .2) -} - -.bg-inverse-success { - background: rgba(0, 224, 147, .2) -} - -.bg-inverse-info { - background: rgba(108, 97, 246, .2) -} - -.bg-inverse-warning { - background: rgba(240, 130, 95, .2) -} - -.bg-inverse-danger { - background: rgba(255, 95, 102, .2) -} - -.bg-inverse-light { - background: rgba(223, 223, 223, .2) -} - -.bg-inverse-dark { - background: rgba(116, 118, 123, .2) -} - -.bg-inverse-white { - background: rgba(255, 255, 255, .2) -} - -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #047006; - --secondary: grey; - --success: #047006; - --info: #6c61f6; - --warning: #f0825f; - --danger: #ff5f66; - --light: #dfdfdf; - --dark: #74767b; - --white: #fff; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace -} - -*, -::after, -::before { - box-sizing: border-box -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0) -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.7; - color: #212529; - text-align: left; - background-color: #fff -} - -[tabindex="-1"]:focus { - outline: 0 !important -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: .5rem -} - -p { - margin-top: 0; - margin-bottom: 1rem -} - -abbr[data-original-title], -abbr[title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - text-decoration-skip-ink: none -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit -} - -dl, -ol, -ul { - margin-top: 0; - margin-bottom: 1rem -} - -ol ol, -ol ul, -ul ol, -ul ul { - margin-bottom: 0 -} - -dt { - font-weight: 700 -} - -dd { - margin-bottom: .5rem; - margin-left: 0 -} - -blockquote { - margin: 0 0 1rem -} - -b, -strong { - font-weight: bolder -} - -small { - font-size: 80% -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline -} - -sub { - bottom: -.25em -} - -sup { - top: -.5em -} - -a { - color: #047006; - text-decoration: none; - background-color: transparent -} - -a:hover { - color: #012602; - text-decoration: underline -} - -a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus, -a:not([href]):not([tabindex]):hover { - color: inherit; - text-decoration: none -} - -a:not([href]):not([tabindex]):focus { - outline: 0 -} - -code, -kbd, -pre, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto -} - -figure { - margin: 0 0 1rem -} - -img { - vertical-align: middle; - border-style: none -} - -svg { - overflow: hidden; - vertical-align: middle -} - -table { - border-collapse: collapse -} - -caption { - padding-top: 10px 15px; - padding-bottom: 10px 15px; - color: #6c757d; - text-align: left; - caption-side: bottom -} - -th { - text-align: inherit -} - -label { - display: inline-block; - margin-bottom: .5rem -} - -button { - border-radius: 0 -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color -} - -button, -input, -optgroup, -select, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit -} - -button, -input { - overflow: visible -} - -button, -select { - text-transform: none -} - -select { - word-wrap: normal -} - -[type=button], -[type=reset], -[type=submit], -button { - -webkit-appearance: button -} - -[type=button]:not(:disabled), -[type=reset]:not(:disabled), -[type=submit]:not(:disabled), -button:not(:disabled) { - cursor: pointer -} - -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner, -button::-moz-focus-inner { - padding: 0; - border-style: none -} - -input[type=checkbox], -input[type=radio] { - box-sizing: border-box; - padding: 0 -} - -input[type=date], -input[type=datetime-local], -input[type=month], -input[type=time] { - -webkit-appearance: listbox -} - -textarea { - overflow: auto; - resize: vertical -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0 -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal -} - -progress { - vertical-align: baseline -} - -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { - height: auto -} - -[type=search] { - outline-offset: -2px; - -webkit-appearance: none -} - -[type=search]::-webkit-search-decoration { - -webkit-appearance: none -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button -} - -output { - display: inline-block -} - -summary { - display: list-item; - cursor: pointer -} - -template { - display: none -} - -[hidden] { - display: none !important -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - margin-bottom: .5rem; - font-weight: 500; - line-height: 1.2 -} - -.h1, -h1 { - font-size: 2.5rem -} - -.h2, -h2 { - font-size: 2rem -} - -.h3, -h3 { - font-size: 1.75rem -} - -.h4, -h4 { - font-size: 1.5rem -} - -.h5, -h5 { - font-size: 1.25rem -} - -.h6, -h6 { - font-size: 1rem -} - -.lead { - font-size: 1.25rem; - font-weight: 300 -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2 -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2 -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2 -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.small, -small { - font-size: 80%; - font-weight: 400 -} - -.mark, -mark { - padding: .2em; - background-color: #fcf8e3 -} - -.list-unstyled { - padding-left: 0; - list-style: none -} - -.list-inline { - padding-left: 0; - list-style: none -} - -.list-inline-item { - display: inline-block -} - -.list-inline-item:not(:last-child) { - margin-right: .5rem -} - -.initialism { - font-size: 90%; - text-transform: uppercase -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d -} - -.blockquote-footer::before { - content: "\2014\00A0" -} - -.img-fluid { - max-width: 100%; - height: auto -} - -.img-thumbnail { - padding: .25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: .25rem; - max-width: 100%; - height: auto -} - -.figure { - display: inline-block -} - -.figure-img { - margin-bottom: .5rem; - line-height: 1 -} - -.figure-caption { - font-size: 90%; - color: #6c757d -} - -code { - font-size: 90%; - color: #bd4147; - word-break: break-word -} - -a>code { - color: inherit -} - -kbd { - padding: .2rem .4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: .2rem -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700 -} - -pre { - display: block; - font-size: 90%; - color: #212529 -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll -} - -.container { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -@media (min-width:576px) { - .container { - max-width: 540px - } - -} - -@media (min-width:768px) { - .container { - max-width: 720px - } - -} - -@media (min-width:992px) { - .container { - max-width: 960px - } - -} - -@media (min-width:1200px) { - .container { - max-width: 1140px - } - -} - -.container-fluid { - width: 100%; - padding-right: 10px; - padding-left: 10px; - margin-right: auto; - margin-left: auto -} - -.row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -10px; - margin-left: -10px -} - -.no-gutters { - margin-right: 0; - margin-left: 0 -} - -.no-gutters>.col, -.no-gutters>[class*=col-] { - padding-right: 0; - padding-left: 0 -} - -.col, -.col-1, -.col-10, -.col-11, -.col-12, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-auto, -.col-lg, -.col-lg-1, -.col-lg-10, -.col-lg-11, -.col-lg-12, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-auto, -.col-md, -.col-md-1, -.col-md-10, -.col-md-11, -.col-md-12, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-auto, -.col-sm, -.col-sm-1, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-auto, -.col-xl, -.col-xl-1, -.col-xl-10, -.col-xl-11, -.col-xl-12, -.col-xl-2, -.col-xl-3, -.col-xl-4, -.col-xl-5, -.col-xl-6, -.col-xl-7, -.col-xl-8, -.col-xl-9, -.col-xl-auto { - position: relative; - width: 100%; - padding-right: 10px; - padding-left: 10px -} - -.col { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% -} - -.col-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% -} - -.col-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% -} - -.col-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% -} - -.col-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% -} - -.col-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% -} - -.col-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% -} - -.col-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% -} - -.col-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% -} - -.col-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% -} - -.col-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% -} - -.col-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% -} - -.col-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% -} - -.col-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% -} - -.order-first { - -webkit-box-ordinal-group: 0; - order: -1 -} - -.order-last { - -webkit-box-ordinal-group: 14; - order: 13 -} - -.order-0 { - -webkit-box-ordinal-group: 1; - order: 0 -} - -.order-1 { - -webkit-box-ordinal-group: 2; - order: 1 -} - -.order-2 { - -webkit-box-ordinal-group: 3; - order: 2 -} - -.order-3 { - -webkit-box-ordinal-group: 4; - order: 3 -} - -.order-4 { - -webkit-box-ordinal-group: 5; - order: 4 -} - -.order-5 { - -webkit-box-ordinal-group: 6; - order: 5 -} - -.order-6 { - -webkit-box-ordinal-group: 7; - order: 6 -} - -.order-7 { - -webkit-box-ordinal-group: 8; - order: 7 -} - -.order-8 { - -webkit-box-ordinal-group: 9; - order: 8 -} - -.order-9 { - -webkit-box-ordinal-group: 10; - order: 9 -} - -.order-10 { - -webkit-box-ordinal-group: 11; - order: 10 -} - -.order-11 { - -webkit-box-ordinal-group: 12; - order: 11 -} - -.order-12 { - -webkit-box-ordinal-group: 13; - order: 12 -} - -.offset-1 { - margin-left: 8.33333% -} - -.offset-2 { - margin-left: 16.66667% -} - -.offset-3 { - margin-left: 25% -} - -.offset-4 { - margin-left: 33.33333% -} - -.offset-5 { - margin-left: 41.66667% -} - -.offset-6 { - margin-left: 50% -} - -.offset-7 { - margin-left: 58.33333% -} - -.offset-8 { - margin-left: 66.66667% -} - -.offset-9 { - margin-left: 75% -} - -.offset-10 { - margin-left: 83.33333% -} - -.offset-11 { - margin-left: 91.66667% -} - -@media (min-width:576px) { - .col-sm { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-sm-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-sm-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-sm-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-sm-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-sm-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-sm-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-sm-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-sm-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-sm-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-sm-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-sm-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-sm-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-sm-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-sm-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-sm-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-sm-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-sm-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-sm-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-sm-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-sm-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-sm-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-sm-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-sm-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-sm-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-sm-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-sm-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-sm-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-sm-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-sm-0 { - margin-left: 0 - } - - .offset-sm-1 { - margin-left: 8.33333% - } - - .offset-sm-2 { - margin-left: 16.66667% - } - - .offset-sm-3 { - margin-left: 25% - } - - .offset-sm-4 { - margin-left: 33.33333% - } - - .offset-sm-5 { - margin-left: 41.66667% - } - - .offset-sm-6 { - margin-left: 50% - } - - .offset-sm-7 { - margin-left: 58.33333% - } - - .offset-sm-8 { - margin-left: 66.66667% - } - - .offset-sm-9 { - margin-left: 75% - } - - .offset-sm-10 { - margin-left: 83.33333% - } - - .offset-sm-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:768px) { - .col-md { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-md-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-md-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-md-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-md-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-md-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-md-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-md-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-md-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-md-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-md-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-md-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-md-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-md-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-md-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-md-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-md-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-md-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-md-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-md-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-md-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-md-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-md-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-md-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-md-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-md-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-md-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-md-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-md-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-md-0 { - margin-left: 0 - } - - .offset-md-1 { - margin-left: 8.33333% - } - - .offset-md-2 { - margin-left: 16.66667% - } - - .offset-md-3 { - margin-left: 25% - } - - .offset-md-4 { - margin-left: 33.33333% - } - - .offset-md-5 { - margin-left: 41.66667% - } - - .offset-md-6 { - margin-left: 50% - } - - .offset-md-7 { - margin-left: 58.33333% - } - - .offset-md-8 { - margin-left: 66.66667% - } - - .offset-md-9 { - margin-left: 75% - } - - .offset-md-10 { - margin-left: 83.33333% - } - - .offset-md-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:992px) { - .col-lg { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-lg-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-lg-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-lg-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-lg-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-lg-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-lg-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-lg-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-lg-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-lg-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-lg-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-lg-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-lg-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-lg-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-lg-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-lg-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-lg-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-lg-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-lg-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-lg-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-lg-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-lg-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-lg-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-lg-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-lg-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-lg-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-lg-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-lg-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-lg-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-lg-0 { - margin-left: 0 - } - - .offset-lg-1 { - margin-left: 8.33333% - } - - .offset-lg-2 { - margin-left: 16.66667% - } - - .offset-lg-3 { - margin-left: 25% - } - - .offset-lg-4 { - margin-left: 33.33333% - } - - .offset-lg-5 { - margin-left: 41.66667% - } - - .offset-lg-6 { - margin-left: 50% - } - - .offset-lg-7 { - margin-left: 58.33333% - } - - .offset-lg-8 { - margin-left: 66.66667% - } - - .offset-lg-9 { - margin-left: 75% - } - - .offset-lg-10 { - margin-left: 83.33333% - } - - .offset-lg-11 { - margin-left: 91.66667% - } - -} - -@media (min-width:1200px) { - .col-xl { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - max-width: 100% - } - - .col-xl-auto { - -webkit-box-flex: 0; - flex: 0 0 auto; - width: auto; - max-width: 100% - } - - .col-xl-1 { - -webkit-box-flex: 0; - flex: 0 0 8.33333%; - max-width: 8.33333% - } - - .col-xl-2 { - -webkit-box-flex: 0; - flex: 0 0 16.66667%; - max-width: 16.66667% - } - - .col-xl-3 { - -webkit-box-flex: 0; - flex: 0 0 25%; - max-width: 25% - } - - .col-xl-4 { - -webkit-box-flex: 0; - flex: 0 0 33.33333%; - max-width: 33.33333% - } - - .col-xl-5 { - -webkit-box-flex: 0; - flex: 0 0 41.66667%; - max-width: 41.66667% - } - - .col-xl-6 { - -webkit-box-flex: 0; - flex: 0 0 50%; - max-width: 50% - } - - .col-xl-7 { - -webkit-box-flex: 0; - flex: 0 0 58.33333%; - max-width: 58.33333% - } - - .col-xl-8 { - -webkit-box-flex: 0; - flex: 0 0 66.66667%; - max-width: 66.66667% - } - - .col-xl-9 { - -webkit-box-flex: 0; - flex: 0 0 75%; - max-width: 75% - } - - .col-xl-10 { - -webkit-box-flex: 0; - flex: 0 0 83.33333%; - max-width: 83.33333% - } - - .col-xl-11 { - -webkit-box-flex: 0; - flex: 0 0 91.66667%; - max-width: 91.66667% - } - - .col-xl-12 { - -webkit-box-flex: 0; - flex: 0 0 100%; - max-width: 100% - } - - .order-xl-first { - -webkit-box-ordinal-group: 0; - order: -1 - } - - .order-xl-last { - -webkit-box-ordinal-group: 14; - order: 13 - } - - .order-xl-0 { - -webkit-box-ordinal-group: 1; - order: 0 - } - - .order-xl-1 { - -webkit-box-ordinal-group: 2; - order: 1 - } - - .order-xl-2 { - -webkit-box-ordinal-group: 3; - order: 2 - } - - .order-xl-3 { - -webkit-box-ordinal-group: 4; - order: 3 - } - - .order-xl-4 { - -webkit-box-ordinal-group: 5; - order: 4 - } - - .order-xl-5 { - -webkit-box-ordinal-group: 6; - order: 5 - } - - .order-xl-6 { - -webkit-box-ordinal-group: 7; - order: 6 - } - - .order-xl-7 { - -webkit-box-ordinal-group: 8; - order: 7 - } - - .order-xl-8 { - -webkit-box-ordinal-group: 9; - order: 8 - } - - .order-xl-9 { - -webkit-box-ordinal-group: 10; - order: 9 - } - - .order-xl-10 { - -webkit-box-ordinal-group: 11; - order: 10 - } - - .order-xl-11 { - -webkit-box-ordinal-group: 12; - order: 11 - } - - .order-xl-12 { - -webkit-box-ordinal-group: 13; - order: 12 - } - - .offset-xl-0 { - margin-left: 0 - } - - .offset-xl-1 { - margin-left: 8.33333% - } - - .offset-xl-2 { - margin-left: 16.66667% - } - - .offset-xl-3 { - margin-left: 25% - } - - .offset-xl-4 { - margin-left: 33.33333% - } - - .offset-xl-5 { - margin-left: 41.66667% - } - - .offset-xl-6 { - margin-left: 50% - } - - .offset-xl-7 { - margin-left: 58.33333% - } - - .offset-xl-8 { - margin-left: 66.66667% - } - - .offset-xl-9 { - margin-left: 75% - } - - .offset-xl-10 { - margin-left: 83.33333% - } - - .offset-xl-11 { - margin-left: 91.66667% - } - -} - -.table { - width: 100%; - margin-bottom: 1rem; - color: #212529 -} - -.table td, -.table th { - padding: 10px 15px; - vertical-align: top; - border-top: 1px solid #f2f4f9 -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #f2f4f9 -} - -.table tbody+tbody { - border-top: 2px solid #f2f4f9 -} - -.table-sm td, -.table-sm th { - padding: 10px 15px -} - -.table-bordered { - border: 1px solid #f2f4f9 -} - -.table-bordered td, -.table-bordered th { - border: 1px solid #f2f4f9 -} - -.table-bordered thead td, -.table-bordered thead th { - border-bottom-width: 2px -} - -.table-borderless tbody+tbody, -.table-borderless td, -.table-borderless th, -.table-borderless thead th { - border: 0 -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: #f6f7f9 -} - -.table-hover tbody tr:hover { - color: #212529; - background-color: #f6f7f9 -} - -.table-primary, -.table-primary>td, -.table-primary>th { - background-color: #b9d7b9 -} - -.table-primary tbody+tbody, -.table-primary td, -.table-primary th, -.table-primary thead th { - border-color: #7cb57e -} - -.table-hover .table-primary:hover { - background-color: #a9cea9 -} - -.table-hover .table-primary:hover>td, -.table-hover .table-primary:hover>th { - background-color: #a9cea9 -} - -.table-secondary, -.table-secondary>td, -.table-secondary>th { - background-color: #dbdbdb -} - -.table-secondary tbody+tbody, -.table-secondary td, -.table-secondary th, -.table-secondary thead th { - border-color: #bdbdbd -} - -.table-hover .table-secondary:hover { - background-color: #cecece -} - -.table-hover .table-secondary:hover>td, -.table-hover .table-secondary:hover>th { - background-color: #cecece -} - -.table-success, -.table-success>td, -.table-success>th { - background-color: #b8f6e1 -} - -.table-success tbody+tbody, -.table-success td, -.table-success th, -.table-success thead th { - border-color: #7aefc7 -} - -.table-hover .table-success:hover { - background-color: #a1f3d7 -} - -.table-hover .table-success:hover>td, -.table-hover .table-success:hover>th { - background-color: #a1f3d7 -} - -.table-info, -.table-info>td, -.table-info>th { - background-color: #d6d3fc -} - -.table-info tbody+tbody, -.table-info td, -.table-info th, -.table-info thead th { - border-color: #b3adfa -} - -.table-hover .table-info:hover { - background-color: #c0bbfa -} - -.table-hover .table-info:hover>td, -.table-hover .table-info:hover>th { - background-color: #c0bbfa -} - -.table-warning, -.table-warning>td, -.table-warning>th { - background-color: #fbdcd2 -} - -.table-warning tbody+tbody, -.table-warning td, -.table-warning th, -.table-warning thead th { - border-color: #f7beac -} - -.table-hover .table-warning:hover { - background-color: #f9cabb -} - -.table-hover .table-warning:hover>td, -.table-hover .table-warning:hover>th { - background-color: #f9cabb -} - -.table-danger, -.table-danger>td, -.table-danger>th { - background-color: #ffd2d4 -} - -.table-danger tbody+tbody, -.table-danger td, -.table-danger th, -.table-danger thead th { - border-color: #ffacaf -} - -.table-hover .table-danger:hover { - background-color: #ffb9bc -} - -.table-hover .table-danger:hover>td, -.table-hover .table-danger:hover>th { - background-color: #ffb9bc -} - -.table-light, -.table-light>td, -.table-light>th { - background-color: #f6f6f6 -} - -.table-light tbody+tbody, -.table-light td, -.table-light th, -.table-light thead th { - border-color: #eee -} - -.table-hover .table-light:hover { - background-color: #e9e9e9 -} - -.table-hover .table-light:hover>td, -.table-hover .table-light:hover>th { - background-color: #e9e9e9 -} - -.table-dark, -.table-dark>td, -.table-dark>th { - background-color: #d8d9da -} - -.table-dark tbody+tbody, -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #b7b8ba -} - -.table-hover .table-dark:hover { - background-color: #cbccce -} - -.table-hover .table-dark:hover>td, -.table-hover .table-dark:hover>th { - background-color: #cbccce -} - -.table-white, -.table-white>td, -.table-white>th { - background-color: #fff -} - -.table-white tbody+tbody, -.table-white td, -.table-white th, -.table-white thead th { - border-color: #fff -} - -.table-hover .table-white:hover { - background-color: #f2f2f2 -} - -.table-hover .table-white:hover>td, -.table-hover .table-white:hover>th { - background-color: #f2f2f2 -} - -.table-active, -.table-active>td, -.table-active>th { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, .075) -} - -.table-hover .table-active:hover>td, -.table-hover .table-active:hover>th { - background-color: rgba(0, 0, 0, .075) -} - -.table .thead-dark th { - color: #fff; - background-color: #343a40; - border-color: #454d55 -} - -.table .thead-light th { - color: #495057; - background-color: #e1e4e6; - border-color: #f2f4f9 -} - -.table-dark { - color: #fff; - background-color: #343a40 -} - -.table-dark td, -.table-dark th, -.table-dark thead th { - border-color: #454d55 -} - -.table-dark.table-bordered { - border: 0 -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, .05) -} - -.table-dark.table-hover tbody tr:hover { - color: #fff; - background-color: rgba(255, 255, 255, .075) -} - -@media (max-width:575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-sm>.table-bordered { - border: 0 - } - -} - -@media (max-width:767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-md>.table-bordered { - border: 0 - } - -} - -@media (max-width:991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-lg>.table-bordered { - border: 0 - } - -} - -@media (max-width:1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch - } - - .table-responsive-xl>.table-bordered { - border: 0 - } - -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch -} - -.table-responsive>.table-bordered { - border: 0 -} - -.form-control { - display: block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: .25rem; - -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .form-control { - -webkit-transition: none; - transition: none - } - -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0 -} - -.form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control:disabled, -.form-control[readonly] { - background-color: #f8f9fa; - opacity: 1 -} - -select.form-control:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.form-control-file, -.form-control-range { - display: block; - width: 100% -} - -.col-form-label { - padding-top: calc(.375rem + 1px); - padding-bottom: calc(.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5 -} - -.col-form-label-lg { - padding-top: calc(.5rem + 1px); - padding-bottom: calc(.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5 -} - -.col-form-label-sm { - padding-top: calc(.25rem + 1px); - padding-bottom: calc(.25rem + 1px); - font-size: .875rem; - line-height: 1.5 -} - -.form-control-plaintext { - display: block; - width: 100%; - padding-top: .375rem; - padding-bottom: .375rem; - margin-bottom: 0; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0 -} - -.form-control-plaintext.form-control-lg, -.form-control-plaintext.form-control-sm { - padding-right: 0; - padding-left: 0 -} - -.form-control-sm { - height: calc(1.5em + .5rem + 2px); - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.form-control-lg { - height: calc(1.5em + 1rem + 2px); - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -select.form-control[multiple], -select.form-control[size] { - height: auto -} - -textarea.form-control { - height: auto -} - -.form-group { - margin-bottom: 1rem -} - -.form-text { - display: block; - margin-top: .25rem -} - -.form-row { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px -} - -.form-row>.col, -.form-row>[class*=col-] { - padding-right: 5px; - padding-left: 5px -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem -} - -.form-check-input { - position: absolute; - margin-top: .3rem; - margin-left: -1.25rem -} - -.form-check-input:disabled~.form-check-label { - color: #adb5bd -} - -.form-check-label { - margin-bottom: 0 -} - -.form-check-inline { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-align: center; - align-items: center; - padding-left: 0; - margin-right: .75rem -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: .3125rem; - margin-left: 0 -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #28a745 -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(40, 167, 69, .9); - border-radius: .25rem -} - -.form-control.is-valid, -.was-validated .form-control:valid { - border-color: #28a745; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-valid:focus, -.was-validated .form-control:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.form-control.is-valid~.valid-feedback, -.form-control.is-valid~.valid-tooltip, -.was-validated .form-control:valid~.valid-feedback, -.was-validated .form-control:valid~.valid-tooltip { - display: block -} - -.was-validated textarea.form-control:valid, -textarea.form-control.is-valid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-valid, -.was-validated .custom-select:valid { - border-color: #28a745; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-valid:focus, -.was-validated .custom-select:valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-select.is-valid~.valid-feedback, -.custom-select.is-valid~.valid-tooltip, -.was-validated .custom-select:valid~.valid-feedback, -.was-validated .custom-select:valid~.valid-tooltip { - display: block -} - -.form-control-file.is-valid~.valid-feedback, -.form-control-file.is-valid~.valid-tooltip, -.was-validated .form-control-file:valid~.valid-feedback, -.was-validated .form-control-file:valid~.valid-tooltip { - display: block -} - -.form-check-input.is-valid~.form-check-label, -.was-validated .form-check-input:valid~.form-check-label { - color: #28a745 -} - -.form-check-input.is-valid~.valid-feedback, -.form-check-input.is-valid~.valid-tooltip, -.was-validated .form-check-input:valid~.valid-feedback, -.was-validated .form-check-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid~.custom-control-label, -.was-validated .custom-control-input:valid~.custom-control-label { - color: #28a745 -} - -.custom-control-input.is-valid~.custom-control-label::before, -.was-validated .custom-control-input:valid~.custom-control-label::before { - border-color: #28a745 -} - -.custom-control-input.is-valid~.valid-feedback, -.custom-control-input.is-valid~.valid-tooltip, -.was-validated .custom-control-input:valid~.valid-feedback, -.was-validated .custom-control-input:valid~.valid-tooltip { - display: block -} - -.custom-control-input.is-valid:checked~.custom-control-label::before, -.was-validated .custom-control-input:valid:checked~.custom-control-label::before { - border-color: #34ce57; - background-color: #34ce57 -} - -.custom-control-input.is-valid:focus~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before { - border-color: #28a745 -} - -.custom-file-input.is-valid~.custom-file-label, -.was-validated .custom-file-input:valid~.custom-file-label { - border-color: #28a745 -} - -.custom-file-input.is-valid~.valid-feedback, -.custom-file-input.is-valid~.valid-tooltip, -.was-validated .custom-file-input:valid~.valid-feedback, -.was-validated .custom-file-input:valid~.valid-tooltip { - display: block -} - -.custom-file-input.is-valid:focus~.custom-file-label, -.was-validated .custom-file-input:valid:focus~.custom-file-label { - border-color: #28a745; - box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: 80%; - color: #dc3545 -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(220, 53, 69, .9); - border-radius: .25rem -} - -.form-control.is-invalid, -.was-validated .form-control:invalid { - border-color: #dc3545; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} - -.form-control.is-invalid:focus, -.was-validated .form-control:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-control.is-invalid~.invalid-feedback, -.form-control.is-invalid~.invalid-tooltip, -.was-validated .form-control:invalid~.invalid-feedback, -.was-validated .form-control:invalid~.invalid-tooltip { - display: block -} - -.was-validated textarea.form-control:invalid, -textarea.form-control.is-invalid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} - -.custom-select.is-invalid, -.was-validated .custom-select:invalid { - border-color: #dc3545; - padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem); - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) -} - -.custom-select.is-invalid:focus, -.was-validated .custom-select:invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-select.is-invalid~.invalid-feedback, -.custom-select.is-invalid~.invalid-tooltip, -.was-validated .custom-select:invalid~.invalid-feedback, -.was-validated .custom-select:invalid~.invalid-tooltip { - display: block -} - -.form-control-file.is-invalid~.invalid-feedback, -.form-control-file.is-invalid~.invalid-tooltip, -.was-validated .form-control-file:invalid~.invalid-feedback, -.was-validated .form-control-file:invalid~.invalid-tooltip { - display: block -} - -.form-check-input.is-invalid~.form-check-label, -.was-validated .form-check-input:invalid~.form-check-label { - color: #dc3545 -} - -.form-check-input.is-invalid~.invalid-feedback, -.form-check-input.is-invalid~.invalid-tooltip, -.was-validated .form-check-input:invalid~.invalid-feedback, -.was-validated .form-check-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid~.custom-control-label, -.was-validated .custom-control-input:invalid~.custom-control-label { - color: #dc3545 -} - -.custom-control-input.is-invalid~.custom-control-label::before, -.was-validated .custom-control-input:invalid~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-control-input.is-invalid~.invalid-feedback, -.custom-control-input.is-invalid~.invalid-tooltip, -.was-validated .custom-control-input:invalid~.invalid-feedback, -.was-validated .custom-control-input:invalid~.invalid-tooltip { - display: block -} - -.custom-control-input.is-invalid:checked~.custom-control-label::before, -.was-validated .custom-control-input:invalid:checked~.custom-control-label::before { - border-color: #e4606d; - background-color: #e4606d -} - -.custom-control-input.is-invalid:focus~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before, -.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.custom-file-label, -.was-validated .custom-file-input:invalid~.custom-file-label { - border-color: #dc3545 -} - -.custom-file-input.is-invalid~.invalid-feedback, -.custom-file-input.is-invalid~.invalid-tooltip, -.was-validated .custom-file-input:invalid~.invalid-feedback, -.was-validated .custom-file-input:invalid~.invalid-tooltip { - display: block -} - -.custom-file-input.is-invalid:focus~.custom-file-label, -.was-validated .custom-file-input:invalid:focus~.custom-file-label { - border-color: #dc3545; - box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) -} - -.form-inline { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center -} - -.form-inline .form-check { - width: 100% -} - -@media (min-width:576px) { - .form-inline label { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - margin-bottom: 0 - } - - .form-inline .form-group { - display: -webkit-box; - display: flex; - -webkit-box-flex: 0; - flex: 0 0 auto; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - -webkit-box-align: center; - align-items: center; - margin-bottom: 0 - } - - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - - .form-inline .form-control-plaintext { - display: inline-block - } - - .form-inline .custom-select, - .form-inline .input-group { - width: auto - } - - .form-inline .form-check { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: auto; - padding-left: 0 - } - - .form-inline .form-check-input { - position: relative; - flex-shrink: 0; - margin-top: 0; - margin-right: .25rem; - margin-left: 0 - } - - .form-inline .custom-control { - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center - } - - .form-inline .custom-control-label { - margin-bottom: 0 - } - -} - -.btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .btn { - -webkit-transition: none; - transition: none - } - -} - -.btn:hover { - color: #212529; - text-decoration: none -} - -.btn.focus, -.btn:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.btn.disabled, -.btn:disabled { - opacity: .65 -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none -} - -.btn-primary { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:hover { - color: #fff; - background-color: #034b04; - border-color: #023f03 -} - -.btn-primary.focus, -.btn-primary:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-primary.disabled, -.btn-primary:disabled { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-primary:not(:disabled):not(.disabled).active, -.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle { - color: #fff; - background-color: #023f03; - border-color: #023203 -} - -.btn-primary:not(:disabled):not(.disabled).active:focus, -.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5) -} - -.btn-secondary { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:hover { - color: #fff; - background-color: #6d6d6d; - border-color: #676767 -} - -.btn-secondary.focus, -.btn-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-secondary.disabled, -.btn-secondary:disabled { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-secondary:not(:disabled):not(.disabled).active, -.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle { - color: #fff; - background-color: #676767; - border-color: #606060 -} - -.btn-secondary:not(:disabled):not(.disabled).active:focus, -.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5) -} - -.btn-success { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-success:hover { - color: #fff; - background-color: #00ba7a; - border-color: #00ad72 -} - -.btn-success.focus, -.btn-success:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-success.disabled, -.btn-success:disabled { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-success:not(:disabled):not(.disabled).active, -.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle { - color: #fff; - background-color: #00ad72; - border-color: #00a069 -} - -.btn-success:not(:disabled):not(.disabled).active:focus, -.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5) -} - -.btn-info { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:hover { - color: #fff; - background-color: #4a3df4; - border-color: #3f31f3 -} - -.btn-info.focus, -.btn-info:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-info.disabled, -.btn-info:disabled { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-info:not(:disabled):not(.disabled).active, -.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle { - color: #fff; - background-color: #3f31f3; - border-color: #3425f3 -} - -.btn-info:not(:disabled):not(.disabled).active:focus, -.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5) -} - -.btn-warning { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:hover { - color: #fff; - background-color: #ed673c; - border-color: #ec5e30 -} - -.btn-warning.focus, -.btn-warning:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-warning.disabled, -.btn-warning:disabled { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-warning:not(:disabled):not(.disabled).active, -.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle { - color: #fff; - background-color: #ec5e30; - border-color: #eb5425 -} - -.btn-warning:not(:disabled):not(.disabled).active:focus, -.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5) -} - -.btn-danger { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:hover { - color: #fff; - background-color: #ff3941; - border-color: #ff2c35 -} - -.btn-danger.focus, -.btn-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-danger.disabled, -.btn-danger:disabled { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-danger:not(:disabled):not(.disabled).active, -.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle { - color: #fff; - background-color: #ff2c35; - border-color: #ff1f29 -} - -.btn-danger:not(:disabled):not(.disabled).active:focus, -.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5) -} - -.btn-light { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:hover { - color: #212529; - background-color: #ccc; - border-color: #c6c6c6 -} - -.btn-light.focus, -.btn-light:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-light.disabled, -.btn-light:disabled { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-light:not(:disabled):not(.disabled).active, -.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle { - color: #212529; - background-color: #c6c6c6; - border-color: #bfbfbf -} - -.btn-light:not(:disabled):not(.disabled).active:focus, -.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5) -} - -.btn-dark { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:hover { - color: #fff; - background-color: #616367; - border-color: #5b5d61 -} - -.btn-dark.focus, -.btn-dark:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-dark.disabled, -.btn-dark:disabled { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-dark:not(:disabled):not(.disabled).active, -.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle { - color: #fff; - background-color: #5b5d61; - border-color: #55575a -} - -.btn-dark:not(:disabled):not(.disabled).active:focus, -.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5) -} - -.btn-white { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:hover { - color: #212529; - background-color: #ececec; - border-color: #e6e6e6 -} - -.btn-white.focus, -.btn-white:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-white.disabled, -.btn-white:disabled { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-white:not(:disabled):not(.disabled).active, -.btn-white:not(:disabled):not(.disabled):active,.show>.btn-white.dropdown-toggle { - color: #212529; - background-color: #e6e6e6; - border-color: #dfdfdf -} - -.btn-white:not(:disabled):not(.disabled).active:focus, -.btn-white:not(:disabled):not(.disabled):active:focus,.show>.btn-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5) -} - -.btn-outline-primary { - color: #047006; - border-color: #047006 -} - -.btn-outline-primary:hover { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary.focus, -.btn-outline-primary:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-primary.disabled, -.btn-outline-primary:disabled { - color: #047006; - background-color: transparent -} - -.btn-outline-primary:not(:disabled):not(.disabled).active, -.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.btn-outline-secondary { - color: grey; - border-color: grey -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary.focus, -.btn-outline-secondary:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-secondary.disabled, -.btn-outline-secondary:disabled { - color: grey; - background-color: transparent -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active, -.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: grey; - border-color: grey -} - -.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.btn-outline-success { - color: #047006; - border-color: #047006 -} - -.btn-outline-success:hover { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-success.focus, -.btn-outline-success:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-success.disabled, -.btn-outline-success:disabled { - color: #047006; - background-color: transparent -} - -.btn-outline-success:not(:disabled):not(.disabled).active, -.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #047006; - border-color: #047006 -} - -.btn-outline-success:not(:disabled):not(.disabled).active:focus, -.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.btn-outline-info { - color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:hover { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info.focus, -.btn-outline-info:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-info.disabled, -.btn-outline-info:disabled { - color: #6c61f6; - background-color: transparent -} - -.btn-outline-info:not(:disabled):not(.disabled).active, -.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #6c61f6; - border-color: #6c61f6 -} - -.btn-outline-info:not(:disabled):not(.disabled).active:focus, -.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.btn-outline-warning { - color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning.focus, -.btn-outline-warning:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-warning.disabled, -.btn-outline-warning:disabled { - color: #f0825f; - background-color: transparent -} - -.btn-outline-warning:not(:disabled):not(.disabled).active, -.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #f0825f; - border-color: #f0825f -} - -.btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.btn-outline-danger { - color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger.focus, -.btn-outline-danger:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-danger.disabled, -.btn-outline-danger:disabled { - color: #ff5f66; - background-color: transparent -} - -.btn-outline-danger:not(:disabled):not(.disabled).active, -.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #ff5f66; - border-color: #ff5f66 -} - -.btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.btn-outline-light { - color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:hover { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light.focus, -.btn-outline-light:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-light.disabled, -.btn-outline-light:disabled { - color: #dfdfdf; - background-color: transparent -} - -.btn-outline-light:not(:disabled):not(.disabled).active, -.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #dfdfdf; - border-color: #dfdfdf -} - -.btn-outline-light:not(:disabled):not(.disabled).active:focus, -.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.btn-outline-dark { - color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark.focus, -.btn-outline-dark:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-dark.disabled, -.btn-outline-dark:disabled { - color: #74767b; - background-color: transparent -} - -.btn-outline-dark:not(:disabled):not(.disabled).active, -.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #74767b; - border-color: #74767b -} - -.btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.btn-outline-white { - color: #fff; - border-color: #fff -} - -.btn-outline-white:hover { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white.focus, -.btn-outline-white:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-outline-white.disabled, -.btn-outline-white:disabled { - color: #fff; - background-color: transparent -} - -.btn-outline-white:not(:disabled):not(.disabled).active, -.btn-outline-white:not(:disabled):not(.disabled):active,.show>.btn-outline-white.dropdown-toggle { - color: #212529; - background-color: #fff; - border-color: #fff -} - -.btn-outline-white:not(:disabled):not(.disabled).active:focus, -.btn-outline-white:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-white.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.btn-link { - font-weight: 400; - color: #047006; - text-decoration: none -} - -.btn-link:hover { - color: #012602; - text-decoration: underline -} - -.btn-link.focus, -.btn-link:focus { - text-decoration: underline; - box-shadow: none -} - -.btn-link.disabled, -.btn-link:disabled { - color: #6c757d; - pointer-events: none -} - -.btn-group-lg>.btn, -.btn-lg { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.btn-group-sm>.btn, -.btn-sm { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.btn-block { - display: block; - width: 100% -} - -.btn-block+.btn-block { - margin-top: .5rem -} - -input[type=button].btn-block, -input[type=reset].btn-block, -input[type=submit].btn-block { - width: 100% -} - -.fade { - -webkit-transition: opacity .15s linear; - transition: opacity .15s linear -} - -@media (prefers-reduced-motion:reduce) { - .fade { - -webkit-transition: none; - transition: none - } - -} - -.fade:not(.show) { - opacity: 0 -} - -.collapse:not(.show) { - display: none -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height .35s ease; - transition: height .35s ease -} - -@media (prefers-reduced-motion:reduce) { - .collapsing { - -webkit-transition: none; - transition: none - } - -} - -.dropdown, -.dropleft, -.dropright, -.dropup { - position: relative -} - -.dropdown-toggle { - white-space: nowrap -} - -.dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid; - border-right: .3em solid transparent; - border-bottom: 0; - border-left: .3em solid transparent -} - -.dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: .5rem 0; - margin: .125rem 0 0; - font-size: 1rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: .25rem -} - -.dropdown-menu-left { - right: auto; - left: 0 -} - -.dropdown-menu-right { - right: 0; - left: auto -} - -@media (min-width:576px) { - .dropdown-menu-sm-left { - right: auto; - left: 0 - } - - .dropdown-menu-sm-right { - right: 0; - left: auto - } - -} - -@media (min-width:768px) { - .dropdown-menu-md-left { - right: auto; - left: 0 - } - - .dropdown-menu-md-right { - right: 0; - left: auto - } - -} - -@media (min-width:992px) { - .dropdown-menu-lg-left { - right: auto; - left: 0 - } - - .dropdown-menu-lg-right { - right: 0; - left: auto - } - -} - -@media (min-width:1200px) { - .dropdown-menu-xl-left { - right: auto; - left: 0 - } - - .dropdown-menu-xl-right { - right: 0; - left: auto - } - -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: .125rem -} - -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '0 0 8 8'; - border-top: 0; - border-right: .3em solid transparent; - border-bottom: .3em solid; - border-left: .3em solid transparent -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: .125rem -} - -.dropright .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: '%2328a745'; - border-top: .3em solid transparent; - border-right: 0; - border-bottom: .3em solid transparent; - border-left: .3em solid -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropright .dropdown-toggle::after { - vertical-align: 0 -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: .125rem -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.dropleft .dropdown-toggle::after { - display: none -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - margin-right: .255em; - vertical-align: .255em; - content: 'http://www.w3.org/2000/svg'; - border-top: .3em solid transparent; - border-right: .3em solid; - border-bottom: .3em solid transparent -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0 -} - -.dropdown-menu[x-placement^=bottom], -.dropdown-menu[x-placement^=left], -.dropdown-menu[x-placement^=right], -.dropdown-menu[x-placement^=top] { - right: auto; - bottom: auto -} - -.dropdown-divider { - height: 0; - margin: .5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef -} - -.dropdown-item { - display: block; - width: 100%; - padding: .25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0 -} - -.dropdown-item:focus, -.dropdown-item:hover { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa -} - -.dropdown-item.active, -.dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #007bff -} - -.dropdown-item.disabled, -.dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent -} - -.dropdown-menu.show { - display: block -} - -.dropdown-header { - display: block; - padding: .5rem 1.5rem; - margin-bottom: 0; - font-size: .875rem; - color: #6c757d; - white-space: nowrap -} - -.dropdown-item-text { - display: block; - padding: .25rem 1.5rem; - color: #212529 -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: -webkit-inline-box; - display: inline-flex; - vertical-align: middle -} - -.btn-group-vertical>.btn, -.btn-group>.btn { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto -} - -.btn-group-vertical>.btn:hover, -.btn-group>.btn:hover { - z-index: 1 -} - -.btn-group-vertical>.btn.active, -.btn-group-vertical>.btn:active, -.btn-group-vertical>.btn:focus, -.btn-group>.btn.active, -.btn-group>.btn:active, -.btn-group>.btn:focus { - z-index: 1 -} - -.btn-toolbar { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.btn-toolbar .input-group { - width: auto -} - -.btn-group>.btn-group:not(:first-child), -.btn-group>.btn:not(:first-child) { - margin-left: -1px -} - -.btn-group>.btn-group:not(:last-child)>.btn, -.btn-group>.btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.btn-group>.btn-group:not(:first-child)>.btn, -.btn-group>.btn:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.dropdown-toggle-split { - padding-right: .5625rem; - padding-left: .5625rem -} - -.dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after { - margin-left: 0 -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0 -} - -.btn-group-sm>.btn+.dropdown-toggle-split, -.btn-sm+.dropdown-toggle-split { - padding-right: .375rem; - padding-left: .375rem -} - -.btn-group-lg>.btn+.dropdown-toggle-split, -.btn-lg+.dropdown-toggle-split { - padding-right: .75rem; - padding-left: .75rem -} - -.btn-group-vertical { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: center; - justify-content: center -} - -.btn-group-vertical>.btn, -.btn-group-vertical>.btn-group { - width: 100% -} - -.btn-group-vertical>.btn-group:not(:first-child), -.btn-group-vertical>.btn:not(:first-child) { - margin-top: -1px -} - -.btn-group-vertical>.btn-group:not(:last-child)>.btn, -.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn-group:not(:first-child)>.btn, -.btn-group-vertical>.btn:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.btn-group-toggle>.btn, -.btn-group-toggle>.btn-group>.btn { - margin-bottom: 0 -} - -.btn-group-toggle>.btn input[type=checkbox], -.btn-group-toggle>.btn input[type=radio], -.btn-group-toggle>.btn-group>.btn input[type=checkbox], -.btn-group-toggle>.btn-group>.btn input[type=radio] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none -} - -.input-group { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: stretch; - align-items: stretch; - width: 100% -} - -.input-group>.custom-file, -.input-group>.custom-select, -.input-group>.form-control, -.input-group>.form-control-plaintext { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0 -} - -.input-group>.custom-file+.custom-file, -.input-group>.custom-file+.custom-select, -.input-group>.custom-file+.form-control, -.input-group>.custom-select+.custom-file, -.input-group>.custom-select+.custom-select, -.input-group>.custom-select+.form-control, -.input-group>.form-control+.custom-file, -.input-group>.form-control+.custom-select, -.input-group>.form-control+.form-control, -.input-group>.form-control-plaintext+.custom-file, -.input-group>.form-control-plaintext+.custom-select, -.input-group>.form-control-plaintext+.form-control { - margin-left: -1px -} - -.input-group>.custom-file .custom-file-input:focus~.custom-file-label, -.input-group>.custom-select:focus, -.input-group>.form-control:focus { - z-index: 3 -} - -.input-group>.custom-file .custom-file-input:focus { - z-index: 4 -} - -.input-group>.custom-select:not(:last-child), -.input-group>.form-control:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-select:not(:first-child), -.input-group>.form-control:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group>.custom-file { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center -} - -.input-group>.custom-file:not(:last-child) .custom-file-label, -.input-group>.custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group-append, -.input-group-prepend { - display: -webkit-box; - display: flex -} - -.input-group-append .btn, -.input-group-prepend .btn { - position: relative; - z-index: 2 -} - -.input-group-append .btn:focus, -.input-group-prepend .btn:focus { - z-index: 3 -} - -.input-group-append .btn+.btn, -.input-group-append .btn+.input-group-text, -.input-group-append .input-group-text+.btn, -.input-group-append .input-group-text+.input-group-text, -.input-group-prepend .btn+.btn, -.input-group-prepend .btn+.input-group-text, -.input-group-prepend .input-group-text+.btn, -.input-group-prepend .input-group-text+.input-group-text { - margin-left: -1px -} - -.input-group-prepend { - margin-right: -1px -} - -.input-group-append { - margin-left: -1px -} - -.input-group-text { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .375rem .75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.input-group-text input[type=checkbox], -.input-group-text input[type=radio] { - margin-top: 0 -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control:not(textarea) { - height: calc(1.5em + 1rem + 2px) -} - -.input-group-lg>.custom-select, -.input-group-lg>.form-control, -.input-group-lg>.input-group-append>.btn, -.input-group-lg>.input-group-append>.input-group-text, -.input-group-lg>.input-group-prepend>.btn, -.input-group-lg>.input-group-prepend>.input-group-text { - padding: .5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: .3rem -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control:not(textarea) { - height: calc(1.5em + .5rem + 2px) -} - -.input-group-sm>.custom-select, -.input-group-sm>.form-control, -.input-group-sm>.input-group-append>.btn, -.input-group-sm>.input-group-append>.input-group-text, -.input-group-sm>.input-group-prepend>.btn, -.input-group-sm>.input-group-prepend>.input-group-text { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem -} - -.input-group-lg>.custom-select, -.input-group-sm>.custom-select { - padding-right: 1.75rem -} - -.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle), -.input-group>.input-group-append:last-child>.input-group-text:not(:last-child), -.input-group>.input-group-append:not(:last-child)>.btn, -.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group>.input-group-append>.btn, -.input-group>.input-group-append>.input-group-text, -.input-group>.input-group-prepend:first-child>.btn:not(:first-child), -.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child), -.input-group>.input-group-prepend:not(:first-child)>.btn, -.input-group>.input-group-prepend:not(:first-child)>.input-group-text { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.custom-control { - position: relative; - display: block; - min-height: 1.7rem; - padding-left: 1.9rem -} - -.custom-control-inline { - display: -webkit-inline-box; - display: inline-flex; - margin-right: 1rem -} - -.custom-control-input { - position: absolute; - z-index: -1; - opacity: 0 -} - -.custom-control-input:checked~.custom-control-label::before { - color: #fff; - border-color: #047006; - background-color: #047006 -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-control-input:focus:not(:checked)~.custom-control-label::before { - border-color: #80bdff -} - -.custom-control-input:not(:disabled):active~.custom-control-label::before { - color: #fff; - background-color: #b3d7ff; - border-color: #b3d7ff -} - -.custom-control-input:disabled~.custom-control-label { - color: #6c757d -} - -.custom-control-input:disabled~.custom-control-label::before { - background-color: #e9ecef -} - -.custom-control-label { - position: relative; - margin-bottom: 0; - vertical-align: top -} - -.custom-control-label::before { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - pointer-events: none; - content: '0 0 4 5'; - background-color: #fff; - border: #e1e5f1 solid 1px -} - -.custom-control-label::after { - position: absolute; - top: .15rem; - left: -1.9rem; - display: block; - width: 1.4rem; - height: 1.4rem; - content: '%23343a40'; - background: no-repeat 50%/50% 50% -} - -.custom-checkbox .custom-control-label::before { - border-radius: .25rem -} - -.custom-checkbox .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before { - border-color: #007bff; - background-color: #007bff -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3c/svg%3e") -} - -.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-radio .custom-control-label::before { - border-radius: 50% -} - -.custom-radio .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3ccircle r=!string!fill=!string!/%3e%3c/svg%3e") -} - -.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-switch { - padding-left: 2.8rem -} - -.custom-switch .custom-control-label::before { - left: -2.8rem; - width: 2.3rem; - pointer-events: all; - border-radius: 25px -} - -.custom-switch .custom-control-label::after { - top: calc(.15rem + 2px); - left: calc(-2.8rem + 2px); - width: 1.1rem; - height: 1.1rem; - background-color: #e1e5f1; - border-radius: 25px; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-switch .custom-control-label::after { - -webkit-transition: none; - transition: none - } - -} - -.custom-switch .custom-control-input:checked~.custom-control-label::after { - background-color: #fff; - -webkit-transform: translateX(.9rem); - transform: translateX(.9rem) -} - -.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, .5) -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - padding: .375rem 1.75rem .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: .25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-select:focus::-ms-value { - color: #6c757d; - background-color: #f6f7f9 -} - -.custom-select[multiple], -.custom-select[size]:not([size='M2 0L0 2h4zm0 5L0 3h4z']) { - height: auto; - padding-right: .75rem; - background-image: none -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef -} - -.custom-select::-ms-expand { - display: none -} - -.custom-select-sm { - height: calc(1.5em + .5rem + 2px); - padding-top: .25rem; - padding-bottom: .25rem; - padding-left: .5rem; - font-size: .875rem -} - -.custom-select-lg { - height: calc(1.5em + 1rem + 2px); - padding-top: .5rem; - padding-bottom: .5rem; - padding-left: 1rem; - font-size: 1.25rem -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin-bottom: 0 -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(1.5em + .75rem + 2px); - margin: 0; - opacity: 0 -} - -.custom-file-input:focus~.custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-file-input:disabled~.custom-file-label { - background-color: #e9ecef -} - -.custom-file-input:lang(en)~.custom-file-label::after { - content: 'http://www.w3.org/2000/svg' -} - -.custom-file-input~.custom-file-label[data-browse]::after { - content: attr(data-browse) -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(1.5em + .75rem + 2px); - padding: .375rem .75rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - border: 1px solid #f0f2f5; - border-radius: .25rem -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(1.5em + .75rem); - padding: .375rem .75rem; - line-height: 1.5; - color: #495057; - content: '0 0 8 8'; - background-color: #e9ecef; - border-left: inherit; - border-radius: 0 .25rem .25rem 0 -} - -.custom-range { - width: 100%; - height: calc(1rem + .4rem); - padding: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.custom-range:focus { - outline: 0 -} - -.custom-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range:focus::-ms-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.custom-range::-moz-focus-outer { - border: 0 -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -webkit-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -moz-appearance: none; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-moz-range-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-moz-range-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - margin-top: 0; - margin-right: .2rem; - margin-left: .2rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - appearance: none -} - -@media (prefers-reduced-motion:reduce) { - .custom-range::-ms-thumb { - -webkit-transition: none; - transition: none - } - -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff -} - -.custom-range::-ms-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: .5rem -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem -} - -.custom-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-webkit-slider-runnable-track { - cursor: default -} - -.custom-range:disabled::-moz-range-thumb { - background-color: #adb5bd -} - -.custom-range:disabled::-moz-range-track { - cursor: default -} - -.custom-range:disabled::-ms-thumb { - background-color: #adb5bd -} - -.custom-control-label::before, -.custom-file-label, -.custom-select { - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .custom-control-label::before, - .custom-file-label, - .custom-select { - -webkit-transition: none; - transition: none - } - -} - -.nav { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.nav-link { - display: block; - padding: .5rem 1rem -} - -.nav-link:focus, -.nav-link:hover { - text-decoration: none -} - -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6 -} - -.nav-tabs .nav-item { - margin-bottom: -1px -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 2px; - border-top-right-radius: 2px -} - -.nav-tabs .nav-link:focus, -.nav-tabs .nav-link:hover { - border-color: #e9ecef #e9ecef #dee2e6 -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent -} - -.nav-tabs .nav-item.show .nav-link, -.nav-tabs .nav-link.active { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.nav-pills .nav-link { - border-radius: 2px -} - -.nav-pills .nav-link.active, -.nav-pills .show>.nav-link { - color: #fff; - background-color: #007bff -} - -.nav-fill .nav-item { - -webkit-box-flex: 1; - flex: 1 1 auto; - text-align: center -} - -.nav-justified .nav-item { - flex-basis: 0; - -webkit-box-flex: 1; - flex-grow: 1; - text-align: center -} - -.tab-content>.tab-pane { - display: none -} - -.tab-content>.active { - display: block -} - -.navbar { - position: relative; - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between; - padding: .5rem 1rem -} - -.navbar>.container, -.navbar>.container-fluid { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: justify; - justify-content: space-between -} - -.navbar-brand { - display: inline-block; - padding-top: .3125rem; - padding-bottom: .3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap -} - -.navbar-brand:focus, -.navbar-brand:hover { - text-decoration: none -} - -.navbar-nav { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0 -} - -.navbar-nav .dropdown-menu { - position: static; - float: none -} - -.navbar-text { - display: inline-block; - padding-top: .5rem; - padding-bottom: .5rem -} - -.navbar-collapse { - flex-basis: 100%; - -webkit-box-flex: 1; - flex-grow: 1; - -webkit-box-align: center; - align-items: center -} - -.navbar-toggler { - padding: .25rem .75rem; - font-size: 1.25rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: .25rem -} - -.navbar-toggler:focus, -.navbar-toggler:hover { - text-decoration: none -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: '%2328a745'; - background: no-repeat center center; - background-size: 100% 100% -} - -@media (max-width:575.98px) { - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:576px) { - .navbar-expand-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-sm .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-sm .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-sm .navbar-toggler { - display: none - } - -} - -@media (max-width:767.98px) { - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:768px) { - .navbar-expand-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-md .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-md .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-md .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-md .navbar-toggler { - display: none - } - -} - -@media (max-width:991.98px) { - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:992px) { - .navbar-expand-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-lg .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-lg .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-lg .navbar-toggler { - display: none - } - -} - -@media (max-width:1199.98px) { - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - padding-right: 0; - padding-left: 0 - } - -} - -@media (min-width:1200px) { - .navbar-expand-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start - } - - .navbar-expand-xl .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute - } - - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem - } - - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid { - flex-wrap: nowrap - } - - .navbar-expand-xl .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto - } - - .navbar-expand-xl .navbar-toggler { - display: none - } - -} - -.navbar-expand { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row nowrap; - -webkit-box-pack: start; - justify-content: flex-start -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - padding-right: 0; - padding-left: 0 -} - -.navbar-expand .navbar-nav { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid { - flex-wrap: nowrap -} - -.navbar-expand .navbar-collapse { - display: -webkit-box !important; - display: flex !important; - flex-basis: auto -} - -.navbar-expand .navbar-toggler { - display: none -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-brand:focus, -.navbar-light .navbar-brand:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-nav .nav-link:focus, -.navbar-light .navbar-nav .nav-link:hover { - color: rgba(0, 0, 0, .7) -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, .3) -} - -.navbar-light .navbar-nav .active>.nav-link, -.navbar-light .navbar-nav .nav-link.active, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .show>.nav-link { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, .5); - border-color: rgba(0, 0, 0, .1) -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, .5) -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, .9) -} - -.navbar-light .navbar-text a:focus, -.navbar-light .navbar-text a:hover { - color: rgba(0, 0, 0, .9) -} - -.navbar-dark .navbar-brand { - color: #fff -} - -.navbar-dark .navbar-brand:focus, -.navbar-dark .navbar-brand:hover { - color: #fff -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-nav .nav-link:focus, -.navbar-dark .navbar-nav .nav-link:hover { - color: rgba(255, 255, 255, .75) -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, .25) -} - -.navbar-dark .navbar-nav .active>.nav-link, -.navbar-dark .navbar-nav .nav-link.active, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .show>.nav-link { - color: #fff -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, .5); - border-color: rgba(255, 255, 255, .1) -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e") -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, .5) -} - -.navbar-dark .navbar-text a { - color: #fff -} - -.navbar-dark .navbar-text a:focus, -.navbar-dark .navbar-text a:hover { - color: #fff -} - -.card { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(238, 238, 238, .75); - border-radius: .25rem -} - -.card>hr { - margin-right: 0; - margin-left: 0 -} - -.card>.list-group:first-child .list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.card>.list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.card-body { - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1.25rem -} - -.card-title { - margin-bottom: .75rem -} - -.card-subtitle { - margin-top: -.375rem; - margin-bottom: 0 -} - -.card-text:last-child { - margin-bottom: 0 -} - -.card-link:hover { - text-decoration: none -} - -.card-link+.card-link { - margin-left: 1.25rem -} - -.card-header { - padding: .75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, .03); - border-bottom: 1px solid rgba(238, 238, 238, .75) -} - -.card-header:first-child { - border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 -} - -.card-header+.list-group .list-group-item:first-child { - border-top: 0 -} - -.card-footer { - padding: .75rem 1.25rem; - background-color: rgba(0, 0, 0, .03); - border-top: 1px solid rgba(238, 238, 238, .75) -} - -.card-footer:last-child { - border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px) -} - -.card-header-tabs { - margin-right: -.625rem; - margin-bottom: -.75rem; - margin-left: -.625rem; - border-bottom: 0 -} - -.card-header-pills { - margin-right: -.625rem; - margin-left: -.625rem -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem -} - -.card-img { - width: 100%; - border-radius: calc(.25rem - 1px) -} - -.card-img-top { - width: 100%; - border-top-left-radius: calc(.25rem - 1px); - border-top-right-radius: calc(.25rem - 1px) -} - -.card-img-bottom { - width: 100%; - border-bottom-right-radius: calc(.25rem - 1px); - border-bottom-left-radius: calc(.25rem - 1px) -} - -.card-deck { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-deck .card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-deck { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px - } - - .card-deck .card { - display: -webkit-box; - display: flex; - -webkit-box-flex: 1; - flex: 1 0 0%; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px - } - -} - -.card-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.card-group>.card { - margin-bottom: 15px -} - -@media (min-width:576px) { - .card-group { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-flow: row wrap - } - - .card-group>.card { - -webkit-box-flex: 1; - flex: 1 0 0%; - margin-bottom: 0 - } - - .card-group>.card+.card { - margin-left: 0; - border-left: 0 - } - - .card-group>.card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-header, - .card-group>.card:not(:last-child) .card-img-top { - border-top-right-radius: 0 - } - - .card-group>.card:not(:last-child) .card-footer, - .card-group>.card:not(:last-child) .card-img-bottom { - border-bottom-right-radius: 0 - } - - .card-group>.card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-header, - .card-group>.card:not(:first-child) .card-img-top { - border-top-left-radius: 0 - } - - .card-group>.card:not(:first-child) .card-footer, - .card-group>.card:not(:first-child) .card-img-bottom { - border-bottom-left-radius: 0 - } - -} - -.card-columns .card { - margin-bottom: .75rem -} - -@media (min-width:576px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1 - } - - .card-columns .card { - display: inline-block; - width: 100% - } - -} - -.accordion>.card { - overflow: hidden -} - -.accordion>.card:not(:first-of-type) .card-header:first-child { - border-radius: 0 -} - -.accordion>.card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0 -} - -.accordion>.card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.accordion>.card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.accordion>.card .card-header { - margin-bottom: -1px -} - -.breadcrumb { - display: -webkit-box; - display: flex; - flex-wrap: wrap; - padding: .75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #f7f9fa; - border-radius: .25rem -} - -.breadcrumb-item+.breadcrumb-item { - padding-left: .5rem -} - -.breadcrumb-item+.breadcrumb-item::before { - display: inline-block; - padding-right: .5rem; - color: #a8a9ad; - content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z' -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: underline -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: none -} - -.breadcrumb-item.active { - color: #6c757d -} - -.pagination { - display: -webkit-box; - display: flex; - padding-left: 0; - list-style: none; - border-radius: 2px -} - -.page-link { - position: relative; - display: block; - padding: .5rem .75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #fff; - border: 1px solid #dee2e6 -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6 -} - -.page-link:focus { - z-index: 2; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 2px; - border-bottom-left-radius: 2px -} - -.page-item:last-child .page-link { - border-top-right-radius: 2px; - border-bottom-right-radius: 2px -} - -.page-item.active .page-link { - z-index: 1; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6 -} - -.pagination-lg .page-link { - padding: .75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5 -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px -} - -.pagination-sm .page-link { - padding: .25rem .5rem; - font-size: .875rem; - line-height: 1.5 -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: .2rem; - border-bottom-left-radius: .2rem -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: .2rem; - border-bottom-right-radius: .2rem -} - -.badge { - display: inline-block; - padding: .45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .badge { - -webkit-transition: none; - transition: none - } - -} - -a.badge:focus, -a.badge:hover { - text-decoration: none -} - -.badge:empty { - display: none -} - -.btn .badge { - position: relative; - top: -1px -} - -.badge-pill { - padding-right: .5rem; - padding-left: .5rem; - border-radius: 10rem -} - -.badge-primary { - color: #fff; - background-color: #047006 -} - -a.badge-primary:focus, -a.badge-primary:hover { - color: #fff; - background-color: #023f03 -} - -a.badge-primary.focus, -a.badge-primary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5) -} - -.badge-secondary { - color: #fff; - background-color: grey -} - -a.badge-secondary:focus, -a.badge-secondary:hover { - color: #fff; - background-color: #676767 -} - -a.badge-secondary.focus, -a.badge-secondary:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5) -} - -.badge-success { - color: #fff; - background-color: #047006 -} - -a.badge-success:focus, -a.badge-success:hover { - color: #fff; - background-color: #00ad72 -} - -a.badge-success.focus, -a.badge-success:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5) -} - -.badge-info { - color: #fff; - background-color: #6c61f6 -} - -a.badge-info:focus, -a.badge-info:hover { - color: #fff; - background-color: #3f31f3 -} - -a.badge-info.focus, -a.badge-info:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5) -} - -.badge-warning { - color: #212529; - background-color: #f0825f -} - -a.badge-warning:focus, -a.badge-warning:hover { - color: #212529; - background-color: #ec5e30 -} - -a.badge-warning.focus, -a.badge-warning:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5) -} - -.badge-danger { - color: #fff; - background-color: #ff5f66 -} - -a.badge-danger:focus, -a.badge-danger:hover { - color: #fff; - background-color: #ff2c35 -} - -a.badge-danger.focus, -a.badge-danger:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5) -} - -.badge-light { - color: #212529; - background-color: #dfdfdf -} - -a.badge-light:focus, -a.badge-light:hover { - color: #212529; - background-color: #c6c6c6 -} - -a.badge-light.focus, -a.badge-light:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5) -} - -.badge-dark { - color: #fff; - background-color: #74767b -} - -a.badge-dark:focus, -a.badge-dark:hover { - color: #fff; - background-color: #5b5d61 -} - -a.badge-dark.focus, -a.badge-dark:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5) -} - -.badge-white { - color: #212529; - background-color: #fff -} - -a.badge-white:focus, -a.badge-white:hover { - color: #212529; - background-color: #e6e6e6 -} - -a.badge-white.focus, -a.badge-white:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5) -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 6px -} - -@media (min-width:576px) { - .jumbotron { - padding: 4rem 2rem - } - -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0 -} - -.alert { - position: relative; - padding: 1.15rem 1.15rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 2px -} - -.alert-heading { - color: inherit -} - -.alert-link { - font-weight: 700 -} - -.alert-dismissible { - padding-right: 3.8rem -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 1.15rem 1.15rem; - color: inherit -} - -.alert-primary { - color: #023a03; - background-color: #cde2cd; - border-color: #b9d7b9 -} - -.alert-primary hr { - border-top-color: #a9cea9 -} - -.alert-primary .alert-link { - color: #000900 -} - -.alert-secondary { - color: #434343; - background-color: #e6e6e6; - border-color: #dbdbdb -} - -.alert-secondary hr { - border-top-color: #cecece -} - -.alert-secondary .alert-link { - color: #2a2a2a -} - -.alert-success { - color: #00744c; - background-color: #ccf9e9; - border-color: #b8f6e1 -} - -.alert-success hr { - border-top-color: #a1f3d7 -} - -.alert-success .alert-link { - color: #00412b -} - -.alert-info { - color: #383280; - background-color: #e2dffd; - border-color: #d6d3fc -} - -.alert-info hr { - border-top-color: #c0bbfa -} - -.alert-info .alert-link { - color: #28245b -} - -.alert-warning { - color: #7d4431; - background-color: #fce6df; - border-color: #fbdcd2 -} - -.alert-warning hr { - border-top-color: #f9cabb -} - -.alert-warning .alert-link { - color: #583023 -} - -.alert-danger { - color: #853135; - background-color: #ffdfe0; - border-color: #ffd2d4 -} - -.alert-danger hr { - border-top-color: #ffb9bc -} - -.alert-danger .alert-link { - color: #602326 -} - -.alert-light { - color: #747474; - background-color: #f9f9f9; - border-color: #f6f6f6 -} - -.alert-light hr { - border-top-color: #e9e9e9 -} - -.alert-light .alert-link { - color: #5b5b5b -} - -.alert-dark { - color: #3c3d40; - background-color: #e3e4e5; - border-color: #d8d9da -} - -.alert-dark hr { - border-top-color: #cbccce -} - -.alert-dark .alert-link { - color: #232426 -} - -.alert-white { - color: #858585; - background-color: #fff; - border-color: #fff -} - -.alert-white hr { - border-top-color: #f2f2f2 -} - -.alert-white .alert-link { - color: #6c6c6c -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0 - } - - to { - background-position: 0 0 - } - -} - -.progress { - display: -webkit-box; - display: flex; - height: 1rem; - overflow: hidden; - font-size: .75rem; - background-color: #f3f5f7; - border-radius: 2px -} - -.progress-bar { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - -webkit-transition: width .6s ease; - transition: width .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar { - -webkit-transition: none; - transition: none - } - -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite -} - -@media (prefers-reduced-motion:reduce) { - .progress-bar-animated { - -webkit-animation: none; - animation: none - } - -} - -.media { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start -} - -.media-body { - -webkit-box-flex: 1; - flex: 1 -} - -.list-group { - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - padding-left: 0; - margin-bottom: 0 -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit -} - -.list-group-item-action:focus, -.list-group-item-action:hover { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef -} - -.list-group-item { - position: relative; - display: block; - padding: .75rem 1.25rem; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, .125) -} - -.list-group-item:first-child { - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: .25rem -} - -.list-group-item.disabled, -.list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #007bff; - border-color: #007bff -} - -.list-group-horizontal { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row -} - -.list-group-horizontal .list-group-item { - margin-right: -1px; - margin-bottom: 0 -} - -.list-group-horizontal .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 -} - -.list-group-horizontal .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 -} - -@media (min-width:576px) { - .list-group-horizontal-sm { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-sm .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-sm .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-sm .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:768px) { - .list-group-horizontal-md { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-md .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-md .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-md .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:992px) { - .list-group-horizontal-lg { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-lg .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-lg .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-lg .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -@media (min-width:1200px) { - .list-group-horizontal-xl { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row - } - - .list-group-horizontal-xl .list-group-item { - margin-right: -1px; - margin-bottom: 0 - } - - .list-group-horizontal-xl .list-group-item:first-child { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - border-top-right-radius: 0 - } - - .list-group-horizontal-xl .list-group-item:last-child { - margin-right: 0; - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - border-bottom-left-radius: 0 - } - -} - -.list-group-flush .list-group-item { - border-right: 0; - border-left: 0; - border-radius: 0 -} - -.list-group-flush .list-group-item:last-child { - margin-bottom: -1px -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0 -} - -.list-group-flush:last-child .list-group-item:last-child { - margin-bottom: 0; - border-bottom: 0 -} - -.list-group-item-primary { - color: #023a03; - background-color: #b9d7b9 -} - -.list-group-item-primary.list-group-item-action:focus, -.list-group-item-primary.list-group-item-action:hover { - color: #023a03; - background-color: #a9cea9 -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #023a03; - border-color: #023a03 -} - -.list-group-item-secondary { - color: #434343; - background-color: #dbdbdb -} - -.list-group-item-secondary.list-group-item-action:focus, -.list-group-item-secondary.list-group-item-action:hover { - color: #434343; - background-color: #cecece -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #434343; - border-color: #434343 -} - -.list-group-item-success { - color: #00744c; - background-color: #b8f6e1 -} - -.list-group-item-success.list-group-item-action:focus, -.list-group-item-success.list-group-item-action:hover { - color: #00744c; - background-color: #a1f3d7 -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #00744c; - border-color: #00744c -} - -.list-group-item-info { - color: #383280; - background-color: #d6d3fc -} - -.list-group-item-info.list-group-item-action:focus, -.list-group-item-info.list-group-item-action:hover { - color: #383280; - background-color: #c0bbfa -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #383280; - border-color: #383280 -} - -.list-group-item-warning { - color: #7d4431; - background-color: #fbdcd2 -} - -.list-group-item-warning.list-group-item-action:focus, -.list-group-item-warning.list-group-item-action:hover { - color: #7d4431; - background-color: #f9cabb -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #7d4431; - border-color: #7d4431 -} - -.list-group-item-danger { - color: #853135; - background-color: #ffd2d4 -} - -.list-group-item-danger.list-group-item-action:focus, -.list-group-item-danger.list-group-item-action:hover { - color: #853135; - background-color: #ffb9bc -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #853135; - border-color: #853135 -} - -.list-group-item-light { - color: #747474; - background-color: #f6f6f6 -} - -.list-group-item-light.list-group-item-action:focus, -.list-group-item-light.list-group-item-action:hover { - color: #747474; - background-color: #e9e9e9 -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #747474; - border-color: #747474 -} - -.list-group-item-dark { - color: #3c3d40; - background-color: #d8d9da -} - -.list-group-item-dark.list-group-item-action:focus, -.list-group-item-dark.list-group-item-action:hover { - color: #3c3d40; - background-color: #cbccce -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #3c3d40; - border-color: #3c3d40 -} - -.list-group-item-white { - color: #858585; - background-color: #fff -} - -.list-group-item-white.list-group-item-action:focus, -.list-group-item-white.list-group-item-action:hover { - color: #858585; - background-color: #f2f2f2 -} - -.list-group-item-white.list-group-item-action.active { - color: #fff; - background-color: #858585; - border-color: #858585 -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5 -} - -.close:hover { - color: #000; - text-decoration: none -} - -.close:not(:disabled):not(.disabled):focus, -.close:not(:disabled):not(.disabled):hover { - opacity: .75 -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -a.close.disabled { - pointer-events: none -} - -.toast { - max-width: 350px; - overflow: hidden; - font-size: .875rem; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .1); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - opacity: 0; - border-radius: .25rem -} - -.toast:not(:last-child) { - margin-bottom: .75rem -} - -.toast.showing { - opacity: 1 -} - -.toast.show { - display: block; - opacity: 1 -} - -.toast.hide { - display: none -} - -.toast-header { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - padding: .25rem .75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, .85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, .05) -} - -.toast-body { - padding: .75rem -} - -.modal-open { - overflow: hidden -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - display: none; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0 -} - -.modal-dialog { - position: relative; - width: auto; - margin: .5rem; - pointer-events: none -} - -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - transition: -webkit-transform .3s ease-out; - transition: transform .3s ease-out; - transition: transform .3s ease-out, -webkit-transform .3s ease-out; - -webkit-transform: translate(0, -50px); - transform: translate(0, -50px) -} - -@media (prefers-reduced-motion:reduce) { - .modal.fade .modal-dialog { - -webkit-transition: none; - transition: none - } - -} - -.modal.show .modal-dialog { - -webkit-transform: none; - transform: none -} - -.modal-dialog-scrollable { - display: -webkit-box; - display: flex; - max-height: calc(100% - 1rem) -} - -.modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 1rem); - overflow: hidden -} - -.modal-dialog-scrollable .modal-footer, -.modal-dialog-scrollable .modal-header { - flex-shrink: 0 -} - -.modal-dialog-scrollable .modal-body { - overflow-y: auto -} - -.modal-dialog-centered { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - min-height: calc(100% - 1rem) -} - -.modal-dialog-centered::before { - display: block; - height: calc(100vh - 1rem); - content: 'http://www.w3.org/2000/svg' -} - -.modal-dialog-centered.modal-dialog-scrollable { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-pack: center; - justify-content: center; - height: 100% -} - -.modal-dialog-centered.modal-dialog-scrollable .modal-content { - max-height: none -} - -.modal-dialog-centered.modal-dialog-scrollable::before { - content: none -} - -.modal-content { - position: relative; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem; - outline: 0 -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000 -} - -.modal-backdrop.fade { - opacity: 0 -} - -.modal-backdrop.show { - opacity: .8 -} - -.modal-header { - display: -webkit-box; - display: flex; - -webkit-box-align: start; - align-items: flex-start; - -webkit-box-pack: justify; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: .3rem; - border-top-right-radius: .3rem -} - -.modal-header .close { - padding: 1rem 1rem; - margin: -1rem -1rem -1rem auto -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5 -} - -.modal-body { - position: relative; - -webkit-box-flex: 1; - flex: 1 1 auto; - padding: 1rem -} - -.modal-footer { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: end; - justify-content: flex-end; - padding: 1rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: .3rem; - border-bottom-left-radius: .3rem -} - -.modal-footer>:not(:first-child) { - margin-left: .25rem -} - -.modal-footer>:not(:last-child) { - margin-right: .25rem -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll -} - -@media (min-width:576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto - } - - .modal-dialog-scrollable { - max-height: calc(100% - 3.5rem) - } - - .modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 3.5rem) - } - - .modal-dialog-centered { - min-height: calc(100% - 3.5rem) - } - - .modal-dialog-centered::before { - height: calc(100vh - 3.5rem) - } - - .modal-sm { - max-width: 300px - } - -} - -@media (min-width:992px) { - .modal-lg, - .modal-xl { - max-width: 800px - } - -} - -@media (min-width:1200px) { - .modal-xl { - max-width: 1140px - } - -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - opacity: 0 -} - -.tooltip.show { - opacity: .9 -} - -.tooltip .arrow { - position: absolute; - display: block; - width: .8rem; - height: .4rem -} - -.tooltip .arrow::before { - position: absolute; - content: '%23dc3545'; - border-color: transparent; - border-style: solid -} - -.bs-tooltip-auto[x-placement^=top], -.bs-tooltip-top { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow, -.bs-tooltip-top .arrow { - bottom: 0 -} - -.bs-tooltip-auto[x-placement^=top] .arrow::before, -.bs-tooltip-top .arrow::before { - top: 0; - border-width: .4rem .4rem 0; - border-top-color: #000 -} - -.bs-tooltip-auto[x-placement^=right], -.bs-tooltip-right { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow, -.bs-tooltip-right .arrow { - left: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=right] .arrow::before, -.bs-tooltip-right .arrow::before { - right: 0; - border-width: .4rem .4rem .4rem 0; - border-right-color: #000 -} - -.bs-tooltip-auto[x-placement^=bottom], -.bs-tooltip-bottom { - padding: .4rem 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow, -.bs-tooltip-bottom .arrow { - top: 0 -} - -.bs-tooltip-auto[x-placement^=bottom] .arrow::before, -.bs-tooltip-bottom .arrow::before { - bottom: 0; - border-width: 0 .4rem .4rem; - border-bottom-color: #000 -} - -.bs-tooltip-auto[x-placement^=left], -.bs-tooltip-left { - padding: 0 .4rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow, -.bs-tooltip-left .arrow { - right: 0; - width: .4rem; - height: .8rem -} - -.bs-tooltip-auto[x-placement^=left] .arrow::before, -.bs-tooltip-left .arrow::before { - left: 0; - border-width: .4rem 0 .4rem .4rem; - border-left-color: #000 -} - -.tooltip-inner { - max-width: 200px; - padding: .25rem .5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: .25rem -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.7; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: .875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: .5rem; - margin: 0 6px -} - -.popover .arrow::after, -.popover .arrow::before { - position: absolute; - display: block; - content: '-2 -2 7 7'; - border-color: transparent; - border-style: solid -} - -.bs-popover-auto[x-placement^=top], -.bs-popover-top { - margin-bottom: .5rem -} - -.bs-popover-auto[x-placement^=top]>.arrow, -.bs-popover-top>.arrow { - bottom: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=top]>.arrow::before, -.bs-popover-top>.arrow::before { - bottom: 0; - border-width: .5rem .5rem 0; - border-top-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=top]>.arrow::after, -.bs-popover-top>.arrow::after { - bottom: 1px; - border-width: .5rem .5rem 0; - border-top-color: #fff -} - -.bs-popover-auto[x-placement^=right], -.bs-popover-right { - margin-left: .5rem -} - -.bs-popover-auto[x-placement^=right]>.arrow, -.bs-popover-right>.arrow { - left: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=right]>.arrow::before, -.bs-popover-right>.arrow::before { - left: 0; - border-width: .5rem .5rem .5rem 0; - border-right-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=right]>.arrow::after, -.bs-popover-right>.arrow::after { - left: 1px; - border-width: .5rem .5rem .5rem 0; - border-right-color: #fff -} - -.bs-popover-auto[x-placement^=bottom], -.bs-popover-bottom { - margin-top: .5rem -} - -.bs-popover-auto[x-placement^=bottom]>.arrow, -.bs-popover-bottom>.arrow { - top: calc((.5rem + 1px) * -1) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::before, -.bs-popover-bottom>.arrow::before { - top: 0; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=bottom]>.arrow::after, -.bs-popover-bottom>.arrow::after { - top: 1px; - border-width: 0 .5rem .5rem .5rem; - border-bottom-color: #fff -} - -.bs-popover-auto[x-placement^=bottom] .popover-header::before, -.bs-popover-bottom .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -.5rem; - content: '%23dc3545'; - border-bottom: 1px solid #f7f7f7 -} - -.bs-popover-auto[x-placement^=left], -.bs-popover-left { - margin-right: .5rem -} - -.bs-popover-auto[x-placement^=left]>.arrow, -.bs-popover-left>.arrow { - right: calc((.5rem + 1px) * -1); - width: .5rem; - height: 1rem; - margin: 6px 0 -} - -.bs-popover-auto[x-placement^=left]>.arrow::before, -.bs-popover-left>.arrow::before { - right: 0; - border-width: .5rem 0 .5rem .5rem; - border-left-color: rgba(0, 0, 0, .25) -} - -.bs-popover-auto[x-placement^=left]>.arrow::after, -.bs-popover-left>.arrow::after { - right: 1px; - border-width: .5rem 0 .5rem .5rem; - border-left-color: #fff -} - -.popover-header { - padding: .5rem .75rem; - margin-bottom: 0; - font-size: 1rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(6px - 1px); - border-top-right-radius: calc(6px - 1px) -} - -.popover-header:empty { - display: none -} - -.popover-body { - padding: .5rem .75rem; - color: #212529 -} - -.carousel { - position: relative -} - -.carousel.pointer-event { - touch-action: pan-y -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden -} - -.carousel-inner::after { - display: block; - clear: both; - content: 'M0 0l3 3m0-3L0 3' -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transition: -webkit-transform .6s ease-in-out; - transition: -webkit-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out -} - -@media (prefers-reduced-motion:reduce) { - .carousel-item { - -webkit-transition: none; - transition: none - } - -} - -.carousel-item-next, -.carousel-item-prev, -.carousel-item.active { - display: block -} - -.active.carousel-item-right, -.carousel-item-next:not(.carousel-item-left) { - -webkit-transform: translateX(100%); - transform: translateX(100%) -} - -.active.carousel-item-left, -.carousel-item-prev:not(.carousel-item-right) { - -webkit-transform: translateX(-100%); - transform: translateX(-100%) -} - -.carousel-fade .carousel-item { - opacity: 0; - -webkit-transition-property: opacity; - transition-property: opacity; - -webkit-transform: none; - transform: none -} - -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right, -.carousel-fade .carousel-item.active { - z-index: 1; - opacity: 1 -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - z-index: 0; - opacity: 0; - -webkit-transition: 0s .6s opacity; - transition: 0s .6s opacity -} - -@media (prefers-reduced-motion:reduce) { - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next, -.carousel-control-prev { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: .5; - -webkit-transition: opacity .15s ease; - transition: opacity .15s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-control-next, - .carousel-control-prev { - -webkit-transition: none; - transition: none - } - -} - -.carousel-control-next:focus, -.carousel-control-next:hover, -.carousel-control-prev:focus, -.carousel-control-prev:hover { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9 -} - -.carousel-control-prev { - left: 0 -} - -.carousel-control-next { - right: 0 -} - -.carousel-control-next-icon, -.carousel-control-prev-icon { - display: inline-block; - width: 20px; - height: 20px; - background: no-repeat 50%/100% 100% -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e") -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 15; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none -} - -.carousel-indicators li { - box-sizing: content-box; - -webkit-box-flex: 0; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: .5; - -webkit-transition: opacity .6s ease; - transition: opacity .6s ease -} - -@media (prefers-reduced-motion:reduce) { - .carousel-indicators li { - -webkit-transition: none; - transition: none - } - -} - -.carousel-indicators .active { - opacity: 1 -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center -} - -@-webkit-keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -@keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg) - } - -} - -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - border: .25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: .2em -} - -@-webkit-keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -@keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0) - } - - 50% { - opacity: 1 - } - -} - -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem -} - -.align-baseline { - vertical-align: baseline !important -} - -.align-top { - vertical-align: top !important -} - -.align-middle { - vertical-align: middle !important -} - -.align-bottom { - vertical-align: bottom !important -} - -.align-text-bottom { - vertical-align: text-bottom !important -} - -.align-text-top { - vertical-align: text-top !important -} - -.bg-primary { - background-color: #047006 !important -} - -a.bg-primary:focus, -a.bg-primary:hover, -button.bg-primary:focus, -button.bg-primary:hover { - background-color: #023f03 !important -} - -.bg-secondary { - background-color: grey !important -} - -a.bg-secondary:focus, -a.bg-secondary:hover, -button.bg-secondary:focus, -button.bg-secondary:hover { - background-color: #676767 !important -} - -.bg-success { - background-color: #047006 !important -} - -a.bg-success:focus, -a.bg-success:hover, -button.bg-success:focus, -button.bg-success:hover { - background-color: #00ad72 !important -} - -.bg-info { - background-color: #6c61f6 !important -} - -a.bg-info:focus, -a.bg-info:hover, -button.bg-info:focus, -button.bg-info:hover { - background-color: #3f31f3 !important -} - -.bg-warning { - background-color: #f0825f !important -} - -a.bg-warning:focus, -a.bg-warning:hover, -button.bg-warning:focus, -button.bg-warning:hover { - background-color: #ec5e30 !important -} - -.bg-danger { - background-color: #ff5f66 !important -} - -a.bg-danger:focus, -a.bg-danger:hover, -button.bg-danger:focus, -button.bg-danger:hover { - background-color: #ff2c35 !important -} - -.bg-light { - background-color: #dfdfdf !important -} - -a.bg-light:focus, -a.bg-light:hover, -button.bg-light:focus, -button.bg-light:hover { - background-color: #c6c6c6 !important -} - -.bg-dark { - background-color: #74767b !important -} - -a.bg-dark:focus, -a.bg-dark:hover, -button.bg-dark:focus, -button.bg-dark:hover { - background-color: #5b5d61 !important -} - -.bg-white { - background-color: #fff !important -} - -a.bg-white:focus, -a.bg-white:hover, -button.bg-white:focus, -button.bg-white:hover { - background-color: #e6e6e6 !important -} - -.bg-white { - background-color: #fff !important -} - -.bg-transparent { - background-color: transparent !important -} - -.border { - border: 1px solid #f2f4f9 !important -} - -.border-top { - border-top: 1px solid #f2f4f9 !important -} - -.border-right { - border-right: 1px solid #f2f4f9 !important -} - -.border-bottom { - border-bottom: 1px solid #f2f4f9 !important -} - -.border-left { - border-left: 1px solid #f2f4f9 !important -} - -.border-0 { - border: 0 !important -} - -.border-top-0 { - border-top: 0 !important -} - -.border-right-0 { - border-right: 0 !important -} - -.border-bottom-0 { - border-bottom: 0 !important -} - -.border-left-0 { - border-left: 0 !important -} - -.border-primary { - border-color: #047006 !important -} - -.border-secondary { - border-color: grey !important -} - -.border-success { - border-color: #047006 !important -} - -.border-info { - border-color: #6c61f6 !important -} - -.border-warning { - border-color: #f0825f !important -} - -.border-danger { - border-color: #ff5f66 !important -} - -.border-light { - border-color: #dfdfdf !important -} - -.border-dark { - border-color: #74767b !important -} - -.border-white { - border-color: #fff !important -} - -.border-white { - border-color: #fff !important -} - -.rounded-sm { - border-radius: .2rem !important -} - -.rounded { - border-radius: 2px !important -} - -.rounded-top { - border-top-left-radius: 2px !important; - border-top-right-radius: 2px !important -} - -.rounded-right { - border-top-right-radius: 2px !important; - border-bottom-right-radius: 2px !important -} - -.rounded-bottom { - border-bottom-right-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-left { - border-top-left-radius: 2px !important; - border-bottom-left-radius: 2px !important -} - -.rounded-lg { - border-radius: 6px !important -} - -.rounded-circle { - border-radius: 50% !important -} - -.rounded-pill { - border-radius: 50rem !important -} - -.rounded-0 { - border-radius: 0 !important -} - -.clearfix::after { - display: block; - clear: both; - content: '.5' -} - -.d-none { - display: none !important -} - -.d-inline { - display: inline !important -} - -.d-inline-block { - display: inline-block !important -} - -.d-block { - display: block !important -} - -.d-table { - display: table !important -} - -.d-table-row { - display: table-row !important -} - -.d-table-cell { - display: table-cell !important -} - -.d-flex { - display: -webkit-box !important; - display: flex !important -} - -.d-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important -} - -@media (min-width:576px) { - .d-sm-none { - display: none !important - } - - .d-sm-inline { - display: inline !important - } - - .d-sm-inline-block { - display: inline-block !important - } - - .d-sm-block { - display: block !important - } - - .d-sm-table { - display: table !important - } - - .d-sm-table-row { - display: table-row !important - } - - .d-sm-table-cell { - display: table-cell !important - } - - .d-sm-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-sm-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:768px) { - .d-md-none { - display: none !important - } - - .d-md-inline { - display: inline !important - } - - .d-md-inline-block { - display: inline-block !important - } - - .d-md-block { - display: block !important - } - - .d-md-table { - display: table !important - } - - .d-md-table-row { - display: table-row !important - } - - .d-md-table-cell { - display: table-cell !important - } - - .d-md-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-md-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:992px) { - .d-lg-none { - display: none !important - } - - .d-lg-inline { - display: inline !important - } - - .d-lg-inline-block { - display: inline-block !important - } - - .d-lg-block { - display: block !important - } - - .d-lg-table { - display: table !important - } - - .d-lg-table-row { - display: table-row !important - } - - .d-lg-table-cell { - display: table-cell !important - } - - .d-lg-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-lg-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media (min-width:1200px) { - .d-xl-none { - display: none !important - } - - .d-xl-inline { - display: inline !important - } - - .d-xl-inline-block { - display: inline-block !important - } - - .d-xl-block { - display: block !important - } - - .d-xl-table { - display: table !important - } - - .d-xl-table-row { - display: table-row !important - } - - .d-xl-table-cell { - display: table-cell !important - } - - .d-xl-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-xl-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -@media print { - .d-print-none { - display: none !important - } - - .d-print-inline { - display: inline !important - } - - .d-print-inline-block { - display: inline-block !important - } - - .d-print-block { - display: block !important - } - - .d-print-table { - display: table !important - } - - .d-print-table-row { - display: table-row !important - } - - .d-print-table-cell { - display: table-cell !important - } - - .d-print-flex { - display: -webkit-box !important; - display: flex !important - } - - .d-print-inline-flex { - display: -webkit-inline-box !important; - display: inline-flex !important - } - -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden -} - -.embed-responsive::before { - display: block; - content: '3' -} - -.embed-responsive .embed-responsive-item, -.embed-responsive embed, -.embed-responsive iframe, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0 -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.embed-responsive-21by9::before { - padding-top: 42.85714% -} - -.embed-responsive-16by9::before { - padding-top: 56.25% -} - -.embed-responsive-4by3::before { - padding-top: 75% -} - -.embed-responsive-1by1::before { - padding-top: 100% -} - -.flex-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important -} - -.flex-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important -} - -.flex-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important -} - -.flex-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important -} - -.flex-wrap { - flex-wrap: wrap !important -} - -.flex-nowrap { - flex-wrap: nowrap !important -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important -} - -.flex-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important -} - -.flex-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important -} - -.flex-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important -} - -.flex-shrink-0 { - flex-shrink: 0 !important -} - -.flex-shrink-1 { - flex-shrink: 1 !important -} - -.justify-content-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important -} - -.justify-content-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important -} - -.justify-content-center { - -webkit-box-pack: center !important; - justify-content: center !important -} - -.justify-content-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important -} - -.justify-content-around { - justify-content: space-around !important -} - -.align-items-start { - -webkit-box-align: start !important; - align-items: flex-start !important -} - -.align-items-end { - -webkit-box-align: end !important; - align-items: flex-end !important -} - -.align-items-center { - -webkit-box-align: center !important; - align-items: center !important -} - -.align-items-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important -} - -.align-items-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important -} - -.align-content-start { - align-content: flex-start !important -} - -.align-content-end { - align-content: flex-end !important -} - -.align-content-center { - align-content: center !important -} - -.align-content-between { - align-content: space-between !important -} - -.align-content-around { - align-content: space-around !important -} - -.align-content-stretch { - align-content: stretch !important -} - -.align-self-auto { - align-self: auto !important -} - -.align-self-start { - align-self: flex-start !important -} - -.align-self-end { - align-self: flex-end !important -} - -.align-self-center { - align-self: center !important -} - -.align-self-baseline { - align-self: baseline !important -} - -.align-self-stretch { - align-self: stretch !important -} - -@media (min-width:576px) { - .flex-sm-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-sm-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-sm-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-sm-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-sm-wrap { - flex-wrap: wrap !important - } - - .flex-sm-nowrap { - flex-wrap: nowrap !important - } - - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-sm-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-sm-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-sm-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-sm-shrink-0 { - flex-shrink: 0 !important - } - - .flex-sm-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-sm-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-sm-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-sm-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-sm-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-sm-around { - justify-content: space-around !important - } - - .align-items-sm-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-sm-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-sm-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-sm-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-sm-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-sm-start { - align-content: flex-start !important - } - - .align-content-sm-end { - align-content: flex-end !important - } - - .align-content-sm-center { - align-content: center !important - } - - .align-content-sm-between { - align-content: space-between !important - } - - .align-content-sm-around { - align-content: space-around !important - } - - .align-content-sm-stretch { - align-content: stretch !important - } - - .align-self-sm-auto { - align-self: auto !important - } - - .align-self-sm-start { - align-self: flex-start !important - } - - .align-self-sm-end { - align-self: flex-end !important - } - - .align-self-sm-center { - align-self: center !important - } - - .align-self-sm-baseline { - align-self: baseline !important - } - - .align-self-sm-stretch { - align-self: stretch !important - } - -} - -@media (min-width:768px) { - .flex-md-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-md-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-md-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-md-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-md-wrap { - flex-wrap: wrap !important - } - - .flex-md-nowrap { - flex-wrap: nowrap !important - } - - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-md-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-md-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-md-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-md-shrink-0 { - flex-shrink: 0 !important - } - - .flex-md-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-md-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-md-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-md-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-md-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-md-around { - justify-content: space-around !important - } - - .align-items-md-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-md-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-md-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-md-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-md-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-md-start { - align-content: flex-start !important - } - - .align-content-md-end { - align-content: flex-end !important - } - - .align-content-md-center { - align-content: center !important - } - - .align-content-md-between { - align-content: space-between !important - } - - .align-content-md-around { - align-content: space-around !important - } - - .align-content-md-stretch { - align-content: stretch !important - } - - .align-self-md-auto { - align-self: auto !important - } - - .align-self-md-start { - align-self: flex-start !important - } - - .align-self-md-end { - align-self: flex-end !important - } - - .align-self-md-center { - align-self: center !important - } - - .align-self-md-baseline { - align-self: baseline !important - } - - .align-self-md-stretch { - align-self: stretch !important - } - -} - -@media (min-width:992px) { - .flex-lg-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-lg-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-lg-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-lg-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-lg-wrap { - flex-wrap: wrap !important - } - - .flex-lg-nowrap { - flex-wrap: nowrap !important - } - - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-lg-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-lg-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-lg-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-lg-shrink-0 { - flex-shrink: 0 !important - } - - .flex-lg-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-lg-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-lg-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-lg-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-lg-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-lg-around { - justify-content: space-around !important - } - - .align-items-lg-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-lg-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-lg-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-lg-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-lg-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-lg-start { - align-content: flex-start !important - } - - .align-content-lg-end { - align-content: flex-end !important - } - - .align-content-lg-center { - align-content: center !important - } - - .align-content-lg-between { - align-content: space-between !important - } - - .align-content-lg-around { - align-content: space-around !important - } - - .align-content-lg-stretch { - align-content: stretch !important - } - - .align-self-lg-auto { - align-self: auto !important - } - - .align-self-lg-start { - align-self: flex-start !important - } - - .align-self-lg-end { - align-self: flex-end !important - } - - .align-self-lg-center { - align-self: center !important - } - - .align-self-lg-baseline { - align-self: baseline !important - } - - .align-self-lg-stretch { - align-self: stretch !important - } - -} - -@media (min-width:1200px) { - .flex-xl-row { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: normal !important; - flex-direction: row !important - } - - .flex-xl-column { - -webkit-box-orient: vertical !important; - -webkit-box-direction: normal !important; - flex-direction: column !important - } - - .flex-xl-row-reverse { - -webkit-box-orient: horizontal !important; - -webkit-box-direction: reverse !important; - flex-direction: row-reverse !important - } - - .flex-xl-column-reverse { - -webkit-box-orient: vertical !important; - -webkit-box-direction: reverse !important; - flex-direction: column-reverse !important - } - - .flex-xl-wrap { - flex-wrap: wrap !important - } - - .flex-xl-nowrap { - flex-wrap: nowrap !important - } - - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important - } - - .flex-xl-fill { - -webkit-box-flex: 1 !important; - flex: 1 1 auto !important - } - - .flex-xl-grow-0 { - -webkit-box-flex: 0 !important; - flex-grow: 0 !important - } - - .flex-xl-grow-1 { - -webkit-box-flex: 1 !important; - flex-grow: 1 !important - } - - .flex-xl-shrink-0 { - flex-shrink: 0 !important - } - - .flex-xl-shrink-1 { - flex-shrink: 1 !important - } - - .justify-content-xl-start { - -webkit-box-pack: start !important; - justify-content: flex-start !important - } - - .justify-content-xl-end { - -webkit-box-pack: end !important; - justify-content: flex-end !important - } - - .justify-content-xl-center { - -webkit-box-pack: center !important; - justify-content: center !important - } - - .justify-content-xl-between { - -webkit-box-pack: justify !important; - justify-content: space-between !important - } - - .justify-content-xl-around { - justify-content: space-around !important - } - - .align-items-xl-start { - -webkit-box-align: start !important; - align-items: flex-start !important - } - - .align-items-xl-end { - -webkit-box-align: end !important; - align-items: flex-end !important - } - - .align-items-xl-center { - -webkit-box-align: center !important; - align-items: center !important - } - - .align-items-xl-baseline { - -webkit-box-align: baseline !important; - align-items: baseline !important - } - - .align-items-xl-stretch { - -webkit-box-align: stretch !important; - align-items: stretch !important - } - - .align-content-xl-start { - align-content: flex-start !important - } - - .align-content-xl-end { - align-content: flex-end !important - } - - .align-content-xl-center { - align-content: center !important - } - - .align-content-xl-between { - align-content: space-between !important - } - - .align-content-xl-around { - align-content: space-around !important - } - - .align-content-xl-stretch { - align-content: stretch !important - } - - .align-self-xl-auto { - align-self: auto !important - } - - .align-self-xl-start { - align-self: flex-start !important - } - - .align-self-xl-end { - align-self: flex-end !important - } - - .align-self-xl-center { - align-self: center !important - } - - .align-self-xl-baseline { - align-self: baseline !important - } - - .align-self-xl-stretch { - align-self: stretch !important - } - -} - -.float-left { - float: left !important -} - -.float-right { - float: right !important -} - -.float-none { - float: none !important -} - -@media (min-width:576px) { - .float-sm-left { - float: left !important - } - - .float-sm-right { - float: right !important - } - - .float-sm-none { - float: none !important - } - -} - -@media (min-width:768px) { - .float-md-left { - float: left !important - } - - .float-md-right { - float: right !important - } - - .float-md-none { - float: none !important - } - -} - -@media (min-width:992px) { - .float-lg-left { - float: left !important - } - - .float-lg-right { - float: right !important - } - - .float-lg-none { - float: none !important - } - -} - -@media (min-width:1200px) { - .float-xl-left { - float: left !important - } - - .float-xl-right { - float: right !important - } - - .float-xl-none { - float: none !important - } - -} - -.overflow-auto { - overflow: auto !important -} - -.overflow-hidden { - overflow: hidden !important -} - -.position-static { - position: static !important -} - -.position-relative { - position: relative !important -} - -.position-absolute { - position: absolute !important -} - -.position-fixed { - position: fixed !important -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030 -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030 -} - -@supports ((position:-webkit-sticky) or (position:sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0 -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal -} - -.shadow-sm { - box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important -} - -.shadow { - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important -} - -.shadow-none { - box-shadow: none !important -} - -.w-25 { - width: 25% !important -} - -.w-50 { - width: 50% !important -} - -.w-75 { - width: 75% !important -} - -.w-100 { - width: 100% !important -} - -.w-auto { - width: auto !important -} - -.h-25 { - height: 25% !important -} - -.h-50 { - height: 50% !important -} - -.h-75 { - height: 75% !important -} - -.h-100 { - height: 100% !important -} - -.h-auto { - height: auto !important -} - -.mw-100 { - max-width: 100% !important -} - -.mh-100 { - max-height: 100% !important -} - -.min-vw-100 { - min-width: 100vw !important -} - -.min-vh-100 { - min-height: 100vh !important -} - -.vw-100 { - width: 100vw !important -} - -.vh-100 { - height: 100vh !important -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - pointer-events: auto; - content: '.5'; - background-color: rgba(0, 0, 0, 0) -} - -.m-0 { - margin: 0 !important -} - -.mt-0, -.my-0 { - margin-top: 0 !important -} - -.mr-0, -.mx-0 { - margin-right: 0 !important -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important -} - -.ml-0, -.mx-0 { - margin-left: 0 !important -} - -.m-1 { - margin: .25rem !important -} - -.mt-1, -.my-1 { - margin-top: .25rem !important -} - -.mr-1, -.mx-1 { - margin-right: .25rem !important -} - -.mb-1, -.my-1 { - margin-bottom: .25rem !important -} - -.ml-1, -.mx-1 { - margin-left: .25rem !important -} - -.m-2 { - margin: .5rem !important -} - -.mt-2, -.my-2 { - margin-top: .5rem !important -} - -.mr-2, -.mx-2 { - margin-right: .5rem !important -} - -.mb-2, -.my-2 { - margin-bottom: .5rem !important -} - -.ml-2, -.mx-2 { - margin-left: .5rem !important -} - -.m-3 { - margin: 1rem !important -} - -.mt-3, -.my-3 { - margin-top: 1rem !important -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important -} - -.m-4 { - margin: 1.5rem !important -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important -} - -.m-5 { - margin: 3rem !important -} - -.mt-5, -.my-5 { - margin-top: 3rem !important -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important -} - -.p-0 { - padding: 0 !important -} - -.pt-0, -.py-0 { - padding-top: 0 !important -} - -.pr-0, -.px-0 { - padding-right: 0 !important -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important -} - -.pl-0, -.px-0 { - padding-left: 0 !important -} - -.p-1 { - padding: .25rem !important -} - -.pt-1, -.py-1 { - padding-top: .25rem !important -} - -.pr-1, -.px-1 { - padding-right: .25rem !important -} - -.pb-1, -.py-1 { - padding-bottom: .25rem !important -} - -.pl-1, -.px-1 { - padding-left: .25rem !important -} - -.p-2 { - padding: .5rem !important -} - -.pt-2, -.py-2 { - padding-top: .5rem !important -} - -.pr-2, -.px-2 { - padding-right: .5rem !important -} - -.pb-2, -.py-2 { - padding-bottom: .5rem !important -} - -.pl-2, -.px-2 { - padding-left: .5rem !important -} - -.p-3 { - padding: 1rem !important -} - -.pt-3, -.py-3 { - padding-top: 1rem !important -} - -.pr-3, -.px-3 { - padding-right: 1rem !important -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important -} - -.pl-3, -.px-3 { - padding-left: 1rem !important -} - -.p-4 { - padding: 1.5rem !important -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important -} - -.p-5 { - padding: 3rem !important -} - -.pt-5, -.py-5 { - padding-top: 3rem !important -} - -.pr-5, -.px-5 { - padding-right: 3rem !important -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important -} - -.pl-5, -.px-5 { - padding-left: 3rem !important -} - -.m-n1 { - margin: -.25rem !important -} - -.mt-n1, -.my-n1 { - margin-top: -.25rem !important -} - -.mr-n1, -.mx-n1 { - margin-right: -.25rem !important -} - -.mb-n1, -.my-n1 { - margin-bottom: -.25rem !important -} - -.ml-n1, -.mx-n1 { - margin-left: -.25rem !important -} - -.m-n2 { - margin: -.5rem !important -} - -.mt-n2, -.my-n2 { - margin-top: -.5rem !important -} - -.mr-n2, -.mx-n2 { - margin-right: -.5rem !important -} - -.mb-n2, -.my-n2 { - margin-bottom: -.5rem !important -} - -.ml-n2, -.mx-n2 { - margin-left: -.5rem !important -} - -.m-n3 { - margin: -1rem !important -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important -} - -.m-n4 { - margin: -1.5rem !important -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important -} - -.m-n5 { - margin: -3rem !important -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important -} - -.m-auto { - margin: auto !important -} - -.mt-auto, -.my-auto { - margin-top: auto !important -} - -.mr-auto, -.mx-auto { - margin-right: auto !important -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important -} - -.ml-auto, -.mx-auto { - margin-left: auto !important -} - -@media (min-width:576px) { - .m-sm-0 { - margin: 0 !important - } - - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important - } - - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important - } - - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important - } - - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important - } - - .m-sm-1 { - margin: .25rem !important - } - - .mt-sm-1, - .my-sm-1 { - margin-top: .25rem !important - } - - .mr-sm-1, - .mx-sm-1 { - margin-right: .25rem !important - } - - .mb-sm-1, - .my-sm-1 { - margin-bottom: .25rem !important - } - - .ml-sm-1, - .mx-sm-1 { - margin-left: .25rem !important - } - - .m-sm-2 { - margin: .5rem !important - } - - .mt-sm-2, - .my-sm-2 { - margin-top: .5rem !important - } - - .mr-sm-2, - .mx-sm-2 { - margin-right: .5rem !important - } - - .mb-sm-2, - .my-sm-2 { - margin-bottom: .5rem !important - } - - .ml-sm-2, - .mx-sm-2 { - margin-left: .5rem !important - } - - .m-sm-3 { - margin: 1rem !important - } - - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important - } - - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important - } - - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important - } - - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important - } - - .m-sm-4 { - margin: 1.5rem !important - } - - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important - } - - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important - } - - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important - } - - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important - } - - .m-sm-5 { - margin: 3rem !important - } - - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important - } - - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important - } - - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important - } - - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important - } - - .p-sm-0 { - padding: 0 !important - } - - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important - } - - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important - } - - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important - } - - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important - } - - .p-sm-1 { - padding: .25rem !important - } - - .pt-sm-1, - .py-sm-1 { - padding-top: .25rem !important - } - - .pr-sm-1, - .px-sm-1 { - padding-right: .25rem !important - } - - .pb-sm-1, - .py-sm-1 { - padding-bottom: .25rem !important - } - - .pl-sm-1, - .px-sm-1 { - padding-left: .25rem !important - } - - .p-sm-2 { - padding: .5rem !important - } - - .pt-sm-2, - .py-sm-2 { - padding-top: .5rem !important - } - - .pr-sm-2, - .px-sm-2 { - padding-right: .5rem !important - } - - .pb-sm-2, - .py-sm-2 { - padding-bottom: .5rem !important - } - - .pl-sm-2, - .px-sm-2 { - padding-left: .5rem !important - } - - .p-sm-3 { - padding: 1rem !important - } - - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important - } - - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important - } - - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important - } - - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important - } - - .p-sm-4 { - padding: 1.5rem !important - } - - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important - } - - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important - } - - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important - } - - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important - } - - .p-sm-5 { - padding: 3rem !important - } - - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important - } - - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important - } - - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important - } - - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important - } - - .m-sm-n1 { - margin: -.25rem !important - } - - .mt-sm-n1, - .my-sm-n1 { - margin-top: -.25rem !important - } - - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -.25rem !important - } - - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -.25rem !important - } - - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -.25rem !important - } - - .m-sm-n2 { - margin: -.5rem !important - } - - .mt-sm-n2, - .my-sm-n2 { - margin-top: -.5rem !important - } - - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -.5rem !important - } - - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -.5rem !important - } - - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -.5rem !important - } - - .m-sm-n3 { - margin: -1rem !important - } - - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important - } - - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important - } - - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important - } - - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important - } - - .m-sm-n4 { - margin: -1.5rem !important - } - - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important - } - - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important - } - - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important - } - - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important - } - - .m-sm-n5 { - margin: -3rem !important - } - - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important - } - - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important - } - - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important - } - - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important - } - - .m-sm-auto { - margin: auto !important - } - - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important - } - - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important - } - - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important - } - - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important - } - -} - -@media (min-width:768px) { - .m-md-0 { - margin: 0 !important - } - - .mt-md-0, - .my-md-0 { - margin-top: 0 !important - } - - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important - } - - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important - } - - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important - } - - .m-md-1 { - margin: .25rem !important - } - - .mt-md-1, - .my-md-1 { - margin-top: .25rem !important - } - - .mr-md-1, - .mx-md-1 { - margin-right: .25rem !important - } - - .mb-md-1, - .my-md-1 { - margin-bottom: .25rem !important - } - - .ml-md-1, - .mx-md-1 { - margin-left: .25rem !important - } - - .m-md-2 { - margin: .5rem !important - } - - .mt-md-2, - .my-md-2 { - margin-top: .5rem !important - } - - .mr-md-2, - .mx-md-2 { - margin-right: .5rem !important - } - - .mb-md-2, - .my-md-2 { - margin-bottom: .5rem !important - } - - .ml-md-2, - .mx-md-2 { - margin-left: .5rem !important - } - - .m-md-3 { - margin: 1rem !important - } - - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important - } - - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important - } - - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important - } - - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important - } - - .m-md-4 { - margin: 1.5rem !important - } - - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important - } - - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important - } - - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important - } - - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important - } - - .m-md-5 { - margin: 3rem !important - } - - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important - } - - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important - } - - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important - } - - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important - } - - .p-md-0 { - padding: 0 !important - } - - .pt-md-0, - .py-md-0 { - padding-top: 0 !important - } - - .pr-md-0, - .px-md-0 { - padding-right: 0 !important - } - - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important - } - - .pl-md-0, - .px-md-0 { - padding-left: 0 !important - } - - .p-md-1 { - padding: .25rem !important - } - - .pt-md-1, - .py-md-1 { - padding-top: .25rem !important - } - - .pr-md-1, - .px-md-1 { - padding-right: .25rem !important - } - - .pb-md-1, - .py-md-1 { - padding-bottom: .25rem !important - } - - .pl-md-1, - .px-md-1 { - padding-left: .25rem !important - } - - .p-md-2 { - padding: .5rem !important - } - - .pt-md-2, - .py-md-2 { - padding-top: .5rem !important - } - - .pr-md-2, - .px-md-2 { - padding-right: .5rem !important - } - - .pb-md-2, - .py-md-2 { - padding-bottom: .5rem !important - } - - .pl-md-2, - .px-md-2 { - padding-left: .5rem !important - } - - .p-md-3 { - padding: 1rem !important - } - - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important - } - - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important - } - - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important - } - - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important - } - - .p-md-4 { - padding: 1.5rem !important - } - - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important - } - - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important - } - - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important - } - - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important - } - - .p-md-5 { - padding: 3rem !important - } - - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important - } - - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important - } - - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important - } - - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important - } - - .m-md-n1 { - margin: -.25rem !important - } - - .mt-md-n1, - .my-md-n1 { - margin-top: -.25rem !important - } - - .mr-md-n1, - .mx-md-n1 { - margin-right: -.25rem !important - } - - .mb-md-n1, - .my-md-n1 { - margin-bottom: -.25rem !important - } - - .ml-md-n1, - .mx-md-n1 { - margin-left: -.25rem !important - } - - .m-md-n2 { - margin: -.5rem !important - } - - .mt-md-n2, - .my-md-n2 { - margin-top: -.5rem !important - } - - .mr-md-n2, - .mx-md-n2 { - margin-right: -.5rem !important - } - - .mb-md-n2, - .my-md-n2 { - margin-bottom: -.5rem !important - } - - .ml-md-n2, - .mx-md-n2 { - margin-left: -.5rem !important - } - - .m-md-n3 { - margin: -1rem !important - } - - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important - } - - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important - } - - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important - } - - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important - } - - .m-md-n4 { - margin: -1.5rem !important - } - - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important - } - - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important - } - - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important - } - - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important - } - - .m-md-n5 { - margin: -3rem !important - } - - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important - } - - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important - } - - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important - } - - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important - } - - .m-md-auto { - margin: auto !important - } - - .mt-md-auto, - .my-md-auto { - margin-top: auto !important - } - - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important - } - - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important - } - - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important - } - -} - -@media (min-width:992px) { - .m-lg-0 { - margin: 0 !important - } - - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important - } - - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important - } - - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important - } - - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important - } - - .m-lg-1 { - margin: .25rem !important - } - - .mt-lg-1, - .my-lg-1 { - margin-top: .25rem !important - } - - .mr-lg-1, - .mx-lg-1 { - margin-right: .25rem !important - } - - .mb-lg-1, - .my-lg-1 { - margin-bottom: .25rem !important - } - - .ml-lg-1, - .mx-lg-1 { - margin-left: .25rem !important - } - - .m-lg-2 { - margin: .5rem !important - } - - .mt-lg-2, - .my-lg-2 { - margin-top: .5rem !important - } - - .mr-lg-2, - .mx-lg-2 { - margin-right: .5rem !important - } - - .mb-lg-2, - .my-lg-2 { - margin-bottom: .5rem !important - } - - .ml-lg-2, - .mx-lg-2 { - margin-left: .5rem !important - } - - .m-lg-3 { - margin: 1rem !important - } - - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important - } - - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important - } - - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important - } - - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important - } - - .m-lg-4 { - margin: 1.5rem !important - } - - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important - } - - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important - } - - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important - } - - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important - } - - .m-lg-5 { - margin: 3rem !important - } - - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important - } - - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important - } - - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important - } - - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important - } - - .p-lg-0 { - padding: 0 !important - } - - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important - } - - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important - } - - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important - } - - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important - } - - .p-lg-1 { - padding: .25rem !important - } - - .pt-lg-1, - .py-lg-1 { - padding-top: .25rem !important - } - - .pr-lg-1, - .px-lg-1 { - padding-right: .25rem !important - } - - .pb-lg-1, - .py-lg-1 { - padding-bottom: .25rem !important - } - - .pl-lg-1, - .px-lg-1 { - padding-left: .25rem !important - } - - .p-lg-2 { - padding: .5rem !important - } - - .pt-lg-2, - .py-lg-2 { - padding-top: .5rem !important - } - - .pr-lg-2, - .px-lg-2 { - padding-right: .5rem !important - } - - .pb-lg-2, - .py-lg-2 { - padding-bottom: .5rem !important - } - - .pl-lg-2, - .px-lg-2 { - padding-left: .5rem !important - } - - .p-lg-3 { - padding: 1rem !important - } - - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important - } - - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important - } - - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important - } - - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important - } - - .p-lg-4 { - padding: 1.5rem !important - } - - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important - } - - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important - } - - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important - } - - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important - } - - .p-lg-5 { - padding: 3rem !important - } - - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important - } - - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important - } - - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important - } - - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important - } - - .m-lg-n1 { - margin: -.25rem !important - } - - .mt-lg-n1, - .my-lg-n1 { - margin-top: -.25rem !important - } - - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -.25rem !important - } - - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -.25rem !important - } - - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -.25rem !important - } - - .m-lg-n2 { - margin: -.5rem !important - } - - .mt-lg-n2, - .my-lg-n2 { - margin-top: -.5rem !important - } - - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -.5rem !important - } - - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -.5rem !important - } - - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -.5rem !important - } - - .m-lg-n3 { - margin: -1rem !important - } - - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important - } - - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important - } - - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important - } - - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important - } - - .m-lg-n4 { - margin: -1.5rem !important - } - - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important - } - - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important - } - - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important - } - - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important - } - - .m-lg-n5 { - margin: -3rem !important - } - - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important - } - - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important - } - - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important - } - - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important - } - - .m-lg-auto { - margin: auto !important - } - - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important - } - - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important - } - - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important - } - - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important - } - -} - -@media (min-width:1200px) { - .m-xl-0 { - margin: 0 !important - } - - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important - } - - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important - } - - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important - } - - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important - } - - .m-xl-1 { - margin: .25rem !important - } - - .mt-xl-1, - .my-xl-1 { - margin-top: .25rem !important - } - - .mr-xl-1, - .mx-xl-1 { - margin-right: .25rem !important - } - - .mb-xl-1, - .my-xl-1 { - margin-bottom: .25rem !important - } - - .ml-xl-1, - .mx-xl-1 { - margin-left: .25rem !important - } - - .m-xl-2 { - margin: .5rem !important - } - - .mt-xl-2, - .my-xl-2 { - margin-top: .5rem !important - } - - .mr-xl-2, - .mx-xl-2 { - margin-right: .5rem !important - } - - .mb-xl-2, - .my-xl-2 { - margin-bottom: .5rem !important - } - - .ml-xl-2, - .mx-xl-2 { - margin-left: .5rem !important - } - - .m-xl-3 { - margin: 1rem !important - } - - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important - } - - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important - } - - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important - } - - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important - } - - .m-xl-4 { - margin: 1.5rem !important - } - - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important - } - - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important - } - - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important - } - - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important - } - - .m-xl-5 { - margin: 3rem !important - } - - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important - } - - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important - } - - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important - } - - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important - } - - .p-xl-0 { - padding: 0 !important - } - - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important - } - - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important - } - - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important - } - - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important - } - - .p-xl-1 { - padding: .25rem !important - } - - .pt-xl-1, - .py-xl-1 { - padding-top: .25rem !important - } - - .pr-xl-1, - .px-xl-1 { - padding-right: .25rem !important - } - - .pb-xl-1, - .py-xl-1 { - padding-bottom: .25rem !important - } - - .pl-xl-1, - .px-xl-1 { - padding-left: .25rem !important - } - - .p-xl-2 { - padding: .5rem !important - } - - .pt-xl-2, - .py-xl-2 { - padding-top: .5rem !important - } - - .pr-xl-2, - .px-xl-2 { - padding-right: .5rem !important - } - - .pb-xl-2, - .py-xl-2 { - padding-bottom: .5rem !important - } - - .pl-xl-2, - .px-xl-2 { - padding-left: .5rem !important - } - - .p-xl-3 { - padding: 1rem !important - } - - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important - } - - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important - } - - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important - } - - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important - } - - .p-xl-4 { - padding: 1.5rem !important - } - - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important - } - - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important - } - - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important - } - - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important - } - - .p-xl-5 { - padding: 3rem !important - } - - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important - } - - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important - } - - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important - } - - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important - } - - .m-xl-n1 { - margin: -.25rem !important - } - - .mt-xl-n1, - .my-xl-n1 { - margin-top: -.25rem !important - } - - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -.25rem !important - } - - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -.25rem !important - } - - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -.25rem !important - } - - .m-xl-n2 { - margin: -.5rem !important - } - - .mt-xl-n2, - .my-xl-n2 { - margin-top: -.5rem !important - } - - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -.5rem !important - } - - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -.5rem !important - } - - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -.5rem !important - } - - .m-xl-n3 { - margin: -1rem !important - } - - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important - } - - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important - } - - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important - } - - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important - } - - .m-xl-n4 { - margin: -1.5rem !important - } - - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important - } - - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important - } - - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important - } - - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important - } - - .m-xl-n5 { - margin: -3rem !important - } - - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important - } - - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important - } - - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important - } - - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important - } - - .m-xl-auto { - margin: auto !important - } - - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important - } - - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important - } - - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important - } - - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important - } - -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important -} - -.text-justify { - text-align: justify !important -} - -.text-wrap { - white-space: normal !important -} - -.text-nowrap { - white-space: nowrap !important -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap -} - -.text-left { - text-align: left !important -} - -.text-right { - text-align: right !important -} - -.text-center { - text-align: center !important -} - -@media (min-width:576px) { - .text-sm-left { - text-align: left !important - } - - .text-sm-right { - text-align: right !important - } - - .text-sm-center { - text-align: center !important - } - -} - -@media (min-width:768px) { - .text-md-left { - text-align: left !important - } - - .text-md-right { - text-align: right !important - } - - .text-md-center { - text-align: center !important - } - -} - -@media (min-width:992px) { - .text-lg-left { - text-align: left !important - } - - .text-lg-right { - text-align: right !important - } - - .text-lg-center { - text-align: center !important - } - -} - -@media (min-width:1200px) { - .text-xl-left { - text-align: left !important - } - - .text-xl-right { - text-align: right !important - } - - .text-xl-center { - text-align: center !important - } - -} - -.text-lowercase { - text-transform: lowercase !important -} - -.text-uppercase { - text-transform: uppercase !important -} - -.text-capitalize { - text-transform: capitalize !important -} - -.font-weight-light { - font-weight: 300 !important -} - -.font-weight-lighter { - font-weight: lighter !important -} - -.font-weight-normal { - font-weight: 400 !important -} - -.font-weight-bold { - font-weight: 700 !important -} - -.font-weight-bolder { - font-weight: bolder !important -} - -.font-italic { - font-style: italic !important -} - -.text-white { - color: #fff !important -} - -.text-primary { - color: #047006 !important -} - -a.text-primary:focus, -a.text-primary:hover { - color: #012602 !important -} - -.text-secondary { - color: grey !important -} - -a.text-secondary:focus, -a.text-secondary:hover { - color: #5a5a5a !important -} - -.text-success { - color: #047006 !important -} - -a.text-success:focus, -a.text-success:hover { - color: #009461 !important -} - -.text-info { - color: #6c61f6 !important -} - -a.text-info:focus, -a.text-info:hover { - color: #2919f2 !important -} - -.text-warning { - color: #f0825f !important -} - -a.text-warning:focus, -a.text-warning:hover { - color: #e94b19 !important -} - -.text-danger { - color: #ff5f66 !important -} - -a.text-danger:focus, -a.text-danger:hover { - color: #ff131d !important -} - -.text-light { - color: #dfdfdf !important -} - -a.text-light:focus, -a.text-light:hover { - color: #b9b9b9 !important -} - -.text-dark { - color: #74767b !important -} - -a.text-dark:focus, -a.text-dark:hover { - color: #4f5054 !important -} - -.text-white { - color: #fff !important -} - -a.text-white:focus, -a.text-white:hover { - color: #d9d9d9 !important -} - -.text-body { - color: #212529 !important -} - -.text-muted { - color: #adb5bd !important -} - -.text-black-50 { - color: rgba(0, 0, 0, .5) !important -} - -.text-white-50 { - color: rgba(255, 255, 255, .5) !important -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0 -} - -.text-decoration-none { - text-decoration: none !important -} - -.text-break { - word-break: break-word !important; - overflow-wrap: break-word !important -} - -.text-reset { - color: inherit !important -} - -.visible { - visibility: visible !important -} - -.invisible { - visibility: hidden !important -} - -@media print { - *, - ::after, - ::before { - text-shadow: none !important; - box-shadow: none !important - } - - a:not(.btn) { - text-decoration: underline - } - - abbr[title]::after { - content: '3'attr(title) ")" - } - - pre { - white-space: pre-wrap !important - } - - blockquote, - pre { - border: 1px solid #adb5bd; - page-break-inside: avoid - } - - thead { - display: table-header-group - } - - img, - tr { - page-break-inside: avoid - } - - h2, - h3, - p { - orphans: 3; - widows: 3 - } - - h2, - h3 { - page-break-after: avoid - } - - @page { - size: a3 - } - - body { - min-width: 992px !important - } - - .container { - min-width: 992px !important - } - - .navbar { - display: none - } - - .badge { - border: 1px solid #000 - } - - .table { - border-collapse: collapse !important - } - - .table td, - .table th { - background-color: #fff !important - } - - .table-bordered td, - .table-bordered th { - border: 1px solid #dee2e6 !important - } - - .table-dark { - color: inherit - } - - .table-dark tbody+tbody, - .table-dark td, - .table-dark th, - .table-dark thead th { - border-color: #f2f4f9 - } - - .table .thead-dark th { - color: inherit; - border-color: #f2f4f9 - } - -} - -.dev-info { - position: fixed; - color: grey; - font-size: smaller; - left: 8px; - z-index: 120 -} - -.versionstring { - top: 70px; - right: 8px; - left: auto -} - -.grd-time-used { - bottom: 0 -} - -.t-header { - display: -webkit-box; - display: flex; - height: 70px; - background: #f9fafb; - z-index: 100 -} - -@media (max-width:991.98px) { - .t-header { - padding-left: 5px; - padding-right: 5px - } - -} - -.t-header .t-header-brand-wrapper { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - height: 70px; - width: 17rem; - min-width: 17rem; - max-width: 17rem; - background: #fff; - z-index: 100; - padding-left: 18px -} - -.t-header .t-header-brand-wrapper a { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - color: #dfdfdf; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 1.25rem -} - -.t-header .t-header-brand-wrapper a .logo { - max-width: 100%; - width: 110px -} - -.t-header .t-header-brand-wrapper a .logo-mini { - display: none; - max-width: 100%; - width: 35px -} - -.t-header .t-header-brand-wrapper a p { - color: inherit; - font-size: inherit; - font-weight: inherit; - margin-bottom: 0 -} - -@media (max-width:991.98px) { - .t-header .t-header-brand-wrapper { - padding-left: 0; - -webkit-box-pack: center; - justify-content: center - } - - .t-header .t-header-brand-wrapper a .logo-mini { - width: 25px - } - -} - -.t-header .t-header-content-wrapper { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - width: 100%; - max-width: 100%; - padding: 0 2.5rem -} - -@media (max-width:991.98px) { - .t-header .t-header-content-wrapper { - padding: 0 1rem - } - -} - -.t-header .t-header-content-wrapper .t-header-search-box { - display: -webkit-box; - display: flex; - width: 40%; - height: 45px; - border: none; - background: #edf0f3; - border-radius: 4px; - -webkit-transition: .3s ease-in-out; - transition: .3s ease-in-out; - -webkit-transition-property: background; - transition-property: background -} - -@media (max-width:580px) { - .t-header .t-header-content-wrapper .t-header-search-box { - display: none - } - -} - -.t-header .t-header-content-wrapper .t-header-search-box .input-group-prepend .input-group-text { - border: none; - background: 0 0; - font-size: 1.5rem; - padding-left: 15px; - line-height: 23px -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control { - height: inherit; - border: none; - background: 0 0; - font-size: .875rem; - font-family: Roboto, sans-serif; - font-weight: 500; - padding-left: 0 -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control.placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control:-moz-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control::-moz-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control:-ms-input-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box .form-control::-webkit-input-placeholder { - font-size: inherit; - font-family: inherit; - font-weight: inherit -} - -.t-header .t-header-content-wrapper .t-header-search-box:hover { - background: #e4e8ed -} - -.t-header .t-header-content-wrapper .t-header-content { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - width: 100%; - max-width: 100% -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link { - position: relative; - font-family: Roboto, sans-serif -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link i { - color: #525c5d -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link .notification-indicator { - position: absolute; - top: 12px; - right: 12px -} - -.t-header .t-header-content-wrapper .t-header-content .nav .nav-item:last-child .nav-link { - padding-right: 0 -} - -.t-header .t-header-toggler { - background: 0 0; - border: none; - margin-left: auto -} - -.t-header .t-header-toggler svg.logo { - width: 50px; - height: 50px; - cursor: pointer; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) -} - -.t-header .t-header-toggler svg.logo path { - fill: none; - -webkit-transition: stroke-dashoffset .35s cubic-bezier(.25, -.25, .75, 1.25), stroke-dasharray .35s cubic-bezier(.25, -.25, .75, 1.25); - transition: stroke-dashoffset .35s cubic-bezier(.25, -.25, .75, 1.25), stroke-dasharray .35s cubic-bezier(.25, -.25, .75, 1.25); - stroke-width: 8px; - stroke-linecap: round; - stroke: #adb5bd; - stroke-dashoffset: -20px -} - -.t-header .t-header-toggler svg.logo .bottom, -.t-header .t-header-toggler svg.logo .middle, -.t-header .t-header-toggler svg.logo .top { - stroke-dasharray: 60px 300px -} - -.t-header .t-header-toggler.arrow path.bottom, -.t-header .t-header-toggler.arrow path.top { - stroke-dasharray: 25px 300px; - stroke-dashoffset: -230px -} - -.t-header .t-header-toggler i { - font-size: 1.375rem -} - -.t-header .t-header-toggler.t-header-mobile-toggler { - margin-left: 0; - margin-right: 15px -} - -.t-header.fixed-top { - position: fixed -} - -.header-fixed .t-header { - position: fixed; - top: 0; - right: 0; - left: 0; - width: 100%; - z-index: 100 -} - -.header-fixed .sidebar { - padding-top: 70px -} - -.header-fixed .sidebar .t-header-brand-wrapper { - position: fixed; - left: 0; - top: 0; - z-index: 100; - width: 17rem; - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, .05) -} - -.header-fixed .sidebar .navigation-menu { - z-index: 1 -} - -.sidebar { - position: relative; - display: block; - height: 100%; - min-height: 100vh; - width: 17rem; - min-width: 17rem; - max-width: 17rem; - background: #fff -} - -.sidebar .sidebar-header { - border-bottom: 1px solid #2c3744 -} - -.sidebar .navigation-menu { - padding-left: 0; - padding-bottom: 80px; - margin-bottom: 0; - margin-top: 18px -} - -.sidebar .navigation-menu li { - display: block; - margin: 0; - -webkit-transition-duration: .25s; - transition-duration: .25s; - -webkit-transition-timing-function: cubic-bezier(.26, .66, .45, .78); - transition-timing-function: cubic-bezier(.26, .66, .45, .78); - -webkit-transition-property: background; - transition-property: background -} - -.sidebar .navigation-menu li.nav-category-divider { - position: -webkit-sticky; - position: sticky; - top: 64px; - display: block; - background: #fff; - margin: 15px 0 0 0; - padding: 20px 30px 10px 30px; - font-size: 10px; - color: #047006; - z-index: 1; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -.sidebar .navigation-menu li.nav-category-divider:first-child { - margin-top: 0 -} - -.sidebar .navigation-menu li a { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - flex-direction: row-reverse; - -webkit-box-pack: end; - justify-content: flex-end; - padding: 12px 30px 12px 30px; - font-size: 13px; - line-height: 1; - color: #525c5d; - letter-spacing: .03rem; - font-weight: 500; - max-width: 100%; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden -} - -.sidebar .navigation-menu li a .link-icon { - margin-right: 15px; - line-height: 1; - color: #525c5d; - font-size: 1.1875rem -} - -.sidebar .navigation-menu li:last-child a { - border-bottom: none -} - -.sidebar .navigation-menu li .navigation-submenu { - background: #fafafa; - padding: 0 0 10px 30px -} - -.sidebar .navigation-menu li .navigation-submenu.collapsing { - -webkit-transition: .2s ease-in; - transition: .2s ease-in -} - -.sidebar .navigation-menu li .navigation-submenu li { - display: inherit -} - -.sidebar .navigation-menu li .navigation-submenu li a { - display: block; - padding: calc(9px) 30px calc(9px) calc(30px + 2px); - opacity: .8; - letter-spacing: .03rem; - font-weight: 400; - font-size: calc(13px - 1px); - -webkit-transition: .3s ease-in-out; - transition: .3s ease-in-out; - -webkit-transition-property: color; - transition-property: color -} - -.sidebar .navigation-menu li .navigation-submenu li a[data-toggle=collapse] { - position: relative -} - -.sidebar .navigation-menu li .navigation-submenu li a[data-toggle=collapse]:after { - content: '.5'; - height: 7px; - width: 7px; - border-radius: 25px; - position: absolute; - right: calc(30px + 4px); - top: 14px -} - -.sidebar .navigation-menu li .navigation-submenu li a.active { - color: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li a:hover { - color: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li:first-child a { - padding-top: 10px -} - -.sidebar .navigation-menu li .navigation-submenu li:first-child a:after { - top: 15px -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+1) a:after { - background: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+2) a:after { - background: #047006 -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+3) a:after { - background: #ff5f66 -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+4) a:after { - background: #f0825f -} - -.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+5) a:after { - background: #6c61f6 -} - -.sidebar .navigation-menu li .navigation-submenu li .navigation-submenu { - padding-left: 0 -} - -.sidebar .navigation-menu li .navigation-submenu li .navigation-submenu li a { - opacity: .5 -} - -.sidebar .navigation-menu li.active a .link-title { - color: #047006 -} - -.sidebar .navigation-menu li.active a .link-icon { - color: #047006 -} - -.sidebar .navigation-menu>li:not(.nav-category-divider):hover { - background: #fafafa -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse] { - position: relative -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse]:after { - content: '3'; - font-family: "Material Design Icons"; - font-size: 15px; - text-rendering: auto; - line-height: inherit; - font-weight: bolder; - position: absolute; - top: 13px; - right: 30px; - display: block; - -webkit-transition: .3s; - transition: .3s; - -webkit-transition-property: -webkit-transform; - transition-property: -webkit-transform; - transition-property: transform; - transition-property: transform, -webkit-transform; - color: #839092 -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse][aria-expanded=true] { - background: #fafafa -} - -.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse][aria-expanded=true]:after { - -webkit-transform: rotate(90deg); - transform: rotate(90deg) -} - -.sidebar .sidebar_footer { - display: block; - position: fixed; - bottom: 0; - left: 0; - margin-top: auto; - width: inherit; - z-index: 2; - background: #fff -} - -.sidebar .sidebar_footer .admin-access-level { - position: absolute; - bottom: 0; - display: -webkit-box; - display: flex; - -webkit-box-pack: start; - justify-content: flex-start; - -webkit-box-align: center; - align-items: center; - z-index: 9999; - height: auto; - width: 100%; - background: #fff; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - padding: 10px 20px; - box-shadow: -7px -2px 25px -5px rgba(0, 0, 0, .12) -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper { - padding: 0 0 0 10px -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .user_name { - color: #525c5d; - margin-bottom: 8px; - line-height: 1; - max-width: 100%; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - max-width: 95px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .user_access_level { - color: #74767b; - line-height: 1 -} - -.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .status-indicator { - margin-right: 5px -} - -.sidebar .sidebar_footer .admin-access-level .arrow { - color: #525c5d; - margin-left: auto; - font-size: 20px; - line-height: 1; - -webkit-transition: .3s; - transition: .3s -} - -.sidebar .sidebar_footer .user-account { - display: block; - width: 100%; - border-radius: 0; - border: none; - margin-bottom: -100vh; - opacity: 0; - -webkit-transition: .3s; - transition: .3s; - border-right: 1px solid #f2f4f9; - box-shadow: -7px -2px 25px -5px rgba(0, 0, 0, .12) -} - -.sidebar .sidebar_footer .user-account:before { - display: none -} - -.sidebar .sidebar_footer .user-account .user-profile-item-tittle { - background: 0 0; - padding: 20px 18px 10px 18px; - z-index: 1; - color: #adb5bd; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -.sidebar .sidebar_footer .user-account .user-profile-itemcategory { - background: 0 0; - margin-bottom: 10px; - border-bottom: 1px solid #f2f4f9; - padding-bottom: 10px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem -} - -.sidebar .sidebar_footer .user-account .user-profile-item { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - background: inherit; - padding: 10px 18px; - -webkit-transition: .3s; - transition: .3s; - z-index: 1; - background: 0 0; - color: #525c5d; - font-size: 13px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem -} - -.sidebar .sidebar_footer .user-account .user-profile-item:hover { - background: #f5f5f5 -} - -.sidebar .sidebar_footer .user-account .user-profile-item i { - margin-right: 10px; - font-size: 18px; - line-height: 1; - color: inherit -} - -.sidebar .sidebar_footer .user-account .user-profile-item img { - margin-right: 10px -} - -.sidebar .sidebar_footer .user-account .btn-logout { - width: 91%; - max-width: 91%; - margin: 15px 10px 30px 10px; - border-radius: 4px -} - -.sidebar .sidebar_footer.opened { - background: #fff -} - -.sidebar .sidebar_footer.opened .admin-access-level { - background: #fff -} - -.sidebar .sidebar_footer.opened .admin-access-level .arrow { - -webkit-transform: rotate(-90deg); - transform: rotate(-90deg) -} - -.sidebar .sidebar_footer.opened .user-account { - margin-bottom: 60px; - opacity: 1; - background: #fff -} - -footer { - position: absolute; - bottom: 0; - left: 0; - right: 0; - padding: 2rem 2.5rem; - max-width: 1140px; - margin-left: auto; - margin-right: auto -} - -@media (max-width:991.98px) { - footer { - padding: 20px 0 30px 0 - } - -} - -footer ul { - margin-left: 0; - padding-left: 0 -} - -footer ul li { - display: inline-block; - padding: 0 10px 0 0; - line-height: 1 -} - -footer ul li:not(:last-child) { - margin-right: 10px; - border-right: 1px solid #f2f4f9 -} - -footer ul li a { - font-family: Roboto, sans-serif; - font-weight: 400; - letter-spacing: .03rem; - color: #565656 -} - -pre.cake-error { - z-index: 220; - position: absolute; - background-color: #fff -} - -.alert-notification-wrapper { - position: fixed; - left: 17rem; - right: 0; - z-index: 999 -} - -@media (max-width:991.98px) { - .alert-notification-wrapper { - left: 0 - } - -} - -.alert-notification-wrapper.top { - top: 70px -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter { - border: 2px solid #55acee; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter i { - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook { - border: 2px solid #0084ff; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook i { - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google { - border: 2px solid #dd4b39; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google i { - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin { - border: 2px solid #0077b5; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin i { - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest { - border: 2px solid #bd081c; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest i { - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube { - border: 2px solid #cd201f; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube i { - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github { - border: 2px solid #333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github i { - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance { - border: 2px solid #0454f6; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance i { - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble { - border: 2px solid #ea4c89; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble i { - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit { - border: 2px solid #ed4333; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit i { - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram { - border: 2px solid #ff759b; - color: #101010 -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram i { - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-inverse-primary { - background: rgba(4, 112, 6, .15); - color: #047006 -} - -.btn-inverse-primary i { - color: inherit -} - -.btn-inverse-primary:hover { - background: rgba(4, 112, 6, .8); - color: #fff -} - -.btn-inverse-secondary { - background: rgba(128, 128, 128, .15); - color: grey -} - -.btn-inverse-secondary i { - color: inherit -} - -.btn-inverse-secondary:hover { - background: rgba(128, 128, 128, .8); - color: #fff -} - -.btn-inverse-success { - background: rgba(0, 224, 147, .15); - color: #047006 -} - -.btn-inverse-success i { - color: inherit -} - -.btn-inverse-success:hover { - background: rgba(0, 224, 147, .8); - color: #fff -} - -.btn-inverse-info { - background: rgba(108, 97, 246, .15); - color: #6c61f6 -} - -.btn-inverse-info i { - color: inherit -} - -.btn-inverse-info:hover { - background: rgba(108, 97, 246, .8); - color: #fff -} - -.btn-inverse-warning { - background: rgba(240, 130, 95, .15); - color: #f0825f -} - -.btn-inverse-warning i { - color: inherit -} - -.btn-inverse-warning:hover { - background: rgba(240, 130, 95, .8); - color: #fff -} - -.btn-inverse-danger { - background: rgba(255, 95, 102, .15); - color: #ff5f66 -} - -.btn-inverse-danger i { - color: inherit -} - -.btn-inverse-danger:hover { - background: rgba(255, 95, 102, .8); - color: #fff -} - -.btn-inverse-light { - background: rgba(223, 223, 223, .15); - color: #dfdfdf -} - -.btn-inverse-light i { - color: inherit -} - -.btn-inverse-light:hover { - background: rgba(223, 223, 223, .8); - color: #fff -} - -.btn-inverse-dark { - background: rgba(116, 118, 123, .15); - color: #74767b -} - -.btn-inverse-dark i { - color: inherit -} - -.btn-inverse-dark:hover { - background: rgba(116, 118, 123, .8); - color: #fff -} - -.btn-inverse-white { - background: rgba(255, 255, 255, .15); - color: #fff -} - -.btn-inverse-white i { - color: inherit -} - -.btn-inverse-white:hover { - background: rgba(255, 255, 255, .8); - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter { - background: #55acee; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-twitter:hover { - background: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link { - background: 0 0; - color: #55acee -} - -.btn:not(.social-btn-outlined).btn-twitter.btn-link:hover { - color: #2795e9 -} - -.btn:not(.social-btn-outlined).btn-facebook { - background: #0084ff; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-facebook:hover { - background: #006acc -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link { - background: 0 0; - color: #0084ff -} - -.btn:not(.social-btn-outlined).btn-facebook.btn-link:hover { - color: #006acc -} - -.btn:not(.social-btn-outlined).btn-google { - background: #dd4b39; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-google:hover { - background: #c23321 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link { - background: 0 0; - color: #dd4b39 -} - -.btn:not(.social-btn-outlined).btn-google.btn-link:hover { - color: #c23321 -} - -.btn:not(.social-btn-outlined).btn-linkedin { - background: #0077b5; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-linkedin:hover { - background: #005582 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link { - background: 0 0; - color: #0077b5 -} - -.btn:not(.social-btn-outlined).btn-linkedin.btn-link:hover { - color: #005582 -} - -.btn:not(.social-btn-outlined).btn-pinterest { - background: #bd081c; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-pinterest:hover { - background: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link { - background: 0 0; - color: #bd081c -} - -.btn:not(.social-btn-outlined).btn-pinterest.btn-link:hover { - color: #8c0615 -} - -.btn:not(.social-btn-outlined).btn-youtube { - background: #cd201f; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-youtube:hover { - background: #a11918 -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link { - background: 0 0; - color: #cd201f -} - -.btn:not(.social-btn-outlined).btn-youtube.btn-link:hover { - color: #a11918 -} - -.btn:not(.social-btn-outlined).btn-github { - background: #333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-github:hover { - background: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-github.btn-link { - background: 0 0; - color: #333 -} - -.btn:not(.social-btn-outlined).btn-github.btn-link:hover { - color: #1a1a1a -} - -.btn:not(.social-btn-outlined).btn-behance { - background: #0454f6; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-behance:hover { - background: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link { - background: 0 0; - color: #0454f6 -} - -.btn:not(.social-btn-outlined).btn-behance.btn-link:hover { - color: #0343c4 -} - -.btn:not(.social-btn-outlined).btn-dribbble { - background: #ea4c89; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-dribbble:hover { - background: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link { - background: 0 0; - color: #ea4c89 -} - -.btn:not(.social-btn-outlined).btn-dribbble.btn-link:hover { - color: #e51e6b -} - -.btn:not(.social-btn-outlined).btn-reddit { - background: #ed4333; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-reddit:hover { - background: #da2413 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link { - background: 0 0; - color: #ed4333 -} - -.btn:not(.social-btn-outlined).btn-reddit.btn-link:hover { - color: #da2413 -} - -.btn:not(.social-btn-outlined).btn-instagram { - background: #ff759b; - border: none; - color: #fff -} - -.btn:not(.social-btn-outlined).btn-instagram:hover { - background: #ff4276 -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link { - background: 0 0; - color: #ff759b -} - -.btn:not(.social-btn-outlined).btn-instagram.btn-link:hover { - color: #ff4276 -} - -.btn-group label.btn.btn-primary:not(:disabled):not(.disabled).active { - background: #000e01 -} - -.btn-group label.btn.btn-secondary:not(:disabled):not(.disabled).active { - background: #4d4d4d -} - -.btn-group label.btn.btn-success:not(:disabled):not(.disabled).active { - background: #007a50 -} - -.btn-group label.btn.btn-info:not(:disabled):not(.disabled).active { - background: #1d0de4 -} - -.btn-group label.btn.btn-warning:not(:disabled):not(.disabled).active { - background: #d54314 -} - -.btn-group label.btn.btn-danger:not(:disabled):not(.disabled).active { - background: #f8000b -} - -.btn-group label.btn.btn-light:not(:disabled):not(.disabled).active { - background: #acacac -} - -.btn-group label.btn.btn-dark:not(:disabled):not(.disabled).active { - background: #424447 -} - -.btn-group label.btn.btn-white:not(:disabled):not(.disabled).active { - background: #ccc -} - -.btn-outline-primary { - border: 2px solid #047006 -} - -.btn-outline-secondary { - border: 2px solid grey -} - -.btn-outline-success { - border: 2px solid #047006 -} - -.btn-outline-info { - border: 2px solid #6c61f6 -} - -.btn-outline-warning { - border: 2px solid #f0825f -} - -.btn-outline-danger { - border: 2px solid #ff5f66 -} - -.btn-outline-light { - border: 2px solid #dfdfdf -} - -.btn-outline-dark { - border: 2px solid #74767b -} - -.btn-outline-white { - border: 2px solid #fff -} - -.btn-group label.btn input { - display: none -} - -.btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - -webkit-transition: .3s ease; - transition: .3s ease; - -webkit-transition-property: background, color; - transition-property: background, color; - font-size: .875rem; - font-family: Roboto, sans-serif; - font-weight: 600; - letter-spacing: .03rem -} - -.btn:not([class*=btn-inverse]):not(.component-flat) { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.btn i { - font-size: 1.25rem -} - -.btn-group-lg>.btn, -.btn.btn-lg { - height: 55px; - max-height: 55px; - padding: 15px 30px; - font-size: 1.125rem -} - -.btn-group-sm>.btn, -.btn.btn-sm { - height: 35px; - max-height: 35px; - padding: 4px 15px; - font-size: .875rem -} - -.btn.btn-xs { - height: 25px; - max-height: 25px; - padding: 0 10px; - line-height: 1; - font-size: .75rem -} - -.btn.btn-xs.has-icon i, -.btn.btn-xs.has-icon span { - font-size: .8125rem; - margin-right: 5px -} - -.btn { - height: 40px; - max-height: 40px; - padding: 5px 20px -} - -.btn.active { - box-shadow: none -} - -.btn.social-icon-btn { - height: 40px; - width: 40px -} - -.btn.social-btn i { - margin-right: 10px -} - -.btn.social-btn-outlined i { - margin-right: 10px -} - -.btn.has-icon i, -.btn.has-icon span { - font-size: 1.25rem; - margin-right: 10px; - line-height: 1 -} - -.btn.btn-outline-secondary { - color: #1a1a1a; - border-color: #676767 -} - -.btn.btn-info, -.btn.btn-warning { - color: #fff -} - -.btn.btn-light { - background: #fff; - color: #000 -} - -.btn.dropdown-dotted-list { - background: #fff -} - -.btn.dropdown-toggle-split { - padding: 0 8px -} - -.btn.action-btn { - display: -webkit-inline-box; - display: inline-flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - padding: 0; - height: 40px; - width: 40px -} - -.btn.action-btn i { - font-size: 1.25rem; - width: 26px; - display: -webkit-box; - display: flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; - line-height: 23px; - vertical-align: middle; - font-size: 1.25rem -} - -.btn.action-btn i:before { - width: inherit; - height: inherit; - line-height: inherit; - font-size: inherit -} - -.btn.action-btn.btn-xs { - height: 30px; - width: 30px -} - -.btn-group-sm>.btn.action-btn, -.btn.action-btn.btn-sm { - height: 35px; - width: 35px -} - -.btn-group-lg>.btn.action-btn, -.btn.action-btn.btn-lg { - height: 50px; - width: 50px -} - -.btn-group-lg>.btn.action-btn i, -.btn.action-btn.btn-lg i { - font-size: 1.875rem; - line-height: 24px -} - -.btn.action-btn.btn-refresh.clicked i { - color: #047006; - -webkit-animation: rotate360 .8s linear infinite; - animation: rotate360 .8s linear infinite -} - -.btn.action-btn.btn-like.clicked i { - color: #ff5f66; - -webkit-animation: bounceIn .8s linear 1; - animation: bounceIn .8s linear 1 -} - -.btn.action-btn.btn-like.clicked:hover i { - color: #fff -} - -.btn.btn-rounded { - border-radius: 50px -} - -.flag-germany { - width: 40px; - height: 28px; - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - display: block -} - -.flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - display: block -} - -.language-active { - background-color: #f9fafb; - padding: 2px -} - -.language-inactive { - padding: 2px; - background-color: transparent -} - -.is-invalid .form-control { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.is-invalid .invalid-feedback { - display: block -} - -.is-valid .form-control { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.form-control { - padding-left: 20px; - padding-right: 20px; - color: rgba(16, 16, 16, .8) -} - -.form-control.placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-moz-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control:-ms-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control::-webkit-input-placeholder { - font-weight: inherit; - color: inherit; - font-size: inherit -} - -.form-control.is-invalid { - background-color: rgba(240, 130, 95, .2); - border: none -} - -.form-control.is-valid { - background-color: rgba(4, 112, 6, .2); - border: none -} - -.input-group-text { - background-color: #f6f7f9; - color: #101010; - border-color: #f2f4f9; - padding: 0 10px; - font-size: 17px -} - -.is-valid .input-group-text { - background-color: rgba(4, 112, 6, .2); - color: #047006 -} - -.is-invalid .input-group-text { - background-color: rgba(240, 130, 95, .2); - color: #f0825f -} - -.form-group { - margin-bottom: 20px -} - -.form-group.input-rounded .form-control { - border-radius: 25px -} - -.custom-file .custom-file-label { - padding: 8px .75rem; - height: 41px -} - -.custom-file .custom-file-label:after { - padding: 1.45rem .8rem; - line-height: 0 -} - -.custom-select, -.custom-select[multiple] { - background: #f6f7f9; - border-color: #f0f2f5; - color: rgba(16, 16, 16, .8) -} - -.custom-select option, -.custom-select[multiple] option { - background: #f6f7f9; - color: rgba(16, 16, 16, .8); - display: block; - border-bottom: 1px solid #f2f4f9; - padding: 5px 10px -} - -.custom-select option:checked, -.custom-select[multiple] option:checked { - background: #f6f7f9 -} - -.custom-select option[selected], -.custom-select[multiple] option[selected] { - background: #f6f7f9; - display: block -} - -.custom-select[multiple] { - padding: 0; - border-radius: 2px -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: none -} - -.custom-switch .custom-control-label::after { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - background: #047006 -} - -.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link { - color: #047006 -} - -.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link.active { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-primary .tab-content { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link { - color: grey -} - -.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link.active { - background: grey; - color: #fff -} - -.tab-container.tab-bg-secondary .tab-content { - background: grey; - color: #fff -} - -.tab-container.tab-bg-success .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link { - color: #047006 -} - -.tab-container.tab-bg-success .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-success .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link.active { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-success .tab-content { - background: #047006; - color: #fff -} - -.tab-container.tab-bg-info .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link { - color: #6c61f6 -} - -.tab-container.tab-bg-info .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-info .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link.active { - background: #6c61f6; - color: #fff -} - -.tab-container.tab-bg-info .tab-content { - background: #6c61f6; - color: #fff -} - -.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link { - color: #f0825f -} - -.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link.active { - background: #f0825f; - color: #fff -} - -.tab-container.tab-bg-warning .tab-content { - background: #f0825f; - color: #fff -} - -.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link { - color: #ff5f66 -} - -.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link.active { - background: #ff5f66; - color: #fff -} - -.tab-container.tab-bg-danger .tab-content { - background: #ff5f66; - color: #fff -} - -.tab-container.tab-bg-light .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link { - color: #dfdfdf -} - -.tab-container.tab-bg-light .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-light .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link.active { - background: #dfdfdf; - color: #fff -} - -.tab-container.tab-bg-light .tab-content { - background: #dfdfdf; - color: #fff -} - -.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link { - color: #74767b -} - -.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link.active { - background: #74767b; - color: #fff -} - -.tab-container.tab-bg-dark .tab-content { - background: #74767b; - color: #fff -} - -.tab-container.tab-bg-white .nav-pills .nav-item .nav-link, -.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link { - color: #fff -} - -.tab-container.tab-bg-white .nav-pills .nav-item .nav-link i, -.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link i { - color: inherit -} - -.tab-container.tab-bg-white .nav-pills .nav-item .nav-link.active, -.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link.active { - background: #fff; - color: #fff -} - -.tab-container.tab-bg-white .tab-content { - background: #fff; - color: #fff -} - -.nav-tabs { - border-bottom: 1px solid #f2f4f9 -} - -.tab-container .nav-pills, -.tab-container .nav-tabs { - border-bottom: none -} - -.tab-container .nav-pills .nav-item .nav-link, -.tab-container .nav-tabs .nav-item .nav-link { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: start; - justify-content: start; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: 1; - padding: 7px 13px; - border: none; - -webkit-transition-duration: .3s; - transition-duration: .3s; - -webkit-transition-property: background, color; - transition-property: background, color -} - -.tab-container .nav-pills .nav-item .nav-link i, -.tab-container .nav-tabs .nav-item .nav-link i { - font-size: 20px; - line-height: 1 -} - -.tab-container .nav-pills .nav-item .nav-link .tab-tittle, -.tab-container .nav-tabs .nav-item .nav-link .tab-tittle { - display: inline-block -} - -.tab-container .nav-pills .nav-item .nav-link .tab-tittle.prepend, -.tab-container .nav-tabs .nav-item .nav-link .tab-tittle.prepend { - margin-left: 10px -} - -.tab-container .nav-pills .nav-item .nav-link .tab-tittle.append, -.tab-container .nav-tabs .nav-item .nav-link .tab-tittle.append { - margin-right: 10px -} - -.tab-container .tab-content { - padding: 30px 20px 20px 20px; - width: 100%; - background: #f0f2f5 -} - -.tab-container .nav-tabs .nav-link { - color: #101010 -} - -.tab-container .nav-tabs .nav-link i { - color: #101010 -} - -.tab-container .nav-tabs .nav-link.active { - background: #f7f7f7; - color: #047006 -} - -.tab-container .nav-tabs .nav-link.active i { - color: inherit -} - -.tab-container .nav-pills { - margin: 10px -} - -.tab-container .nav-pills .nav-link.active { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - color: #fff -} - -.tab-container.vertical-tabs { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - -webkit-box-flex: 1; - flex-grow: 1 -} - -.tab-container.vertical-tabs .nav-pills, -.tab-container.vertical-tabs .nav-tabs { - float: left; - display: -webkit-box; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column -} - -.table, -table { - margin-bottom: 0 -} - -.table tfoot tr th, -.table thead tr th, -table tfoot tr th, -table thead tr th { - border-bottom-width: 1px; - font-family: Roboto, sans-serif; - font-weight: 500 -} - -.table tbody tr, -table tbody tr { - -webkit-transition-duration: .5s; - transition-duration: .5s -} - -.table tbody tr td, -table tbody tr td { - font-family: Roboto, sans-serif; - font-weight: 400; - vertical-align: middle -} - -.table tbody tr td .input-frame:after, -table tbody tr td .input-frame:after { - top: 5px -} - -.table tbody tr td span, -table tbody tr td span { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center -} - -.table tbody tr td span .status-indicator, -table tbody tr td span .status-indicator { - margin-right: 5px -} - -.table tbody tr td .image, -table tbody tr td .image { - max-width: 75px; - width: 100% -} - -.table tbody tr.text-align-edge td:first-child, -table tbody tr.text-align-edge td:first-child { - padding-left: 0; - text-align: left -} - -.table tbody tr.text-align-edge td:last-child, -table tbody tr.text-align-edge td:last-child { - padding-right: 0; - text-align: right -} - -.table td, -.table th, -table td, -table th { - white-space: nowrap -} - -.table:not(.table-dark) thead tr.solid-header th, -table:not(.table-dark) thead tr.solid-header th { - background: #fafafa; - border-top: 1px solid #f2f4f9 -} - -.table:not(.table-dark) tfoot, -.table:not(.table-dark) thead, -table:not(.table-dark) tfoot, -table:not(.table-dark) thead { - background: #e1e4e6 -} - -.table:not(.table-dark) tfoot tr th, -.table:not(.table-dark) thead tr th, -table:not(.table-dark) tfoot tr th, -table:not(.table-dark) thead tr th { - background: #fff; - color: #101010 -} - -.table:not(.table-dark) tbody tr[class*=bg], -table:not(.table-dark) tbody tr[class*=bg] { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.table:not(.table-dark) tbody tr[class*=bg] td, -table:not(.table-dark) tbody tr[class*=bg] td { - color: #fff; - border: none -} - -.table:not(.table-dark) tbody tr td, -table:not(.table-dark) tbody tr td { - color: #101010 -} - -.table:not(.table-bordered) tfoot tr th, -.table:not(.table-bordered) thead tr th, -table:not(.table-bordered) tfoot tr th, -table:not(.table-bordered) thead tr th { - border-top: none -} - -.table.info-table tr td, -.table.info-table tr th, -table.info-table tr td, -table.info-table tr th { - text-align: right -} - -.table.info-table tr td:first-child, -.table.info-table tr th:first-child, -table.info-table tr td:first-child, -table.info-table tr th:first-child { - text-align: left -} - -.table.info-table tr td.actions, -.table.info-table tr th.actions, -table.info-table tr td.actions, -table.info-table tr th.actions { - padding-left: 0 -} - -.tippy-tooltip[data-animation=fade][data-state=hidden] { - opacity: 0 -} - -.tippy-iOS { - cursor: pointer !important; - -webkit-tap-highlight-color: transparent -} - -.tippy-popper { - pointer-events: none; - max-width: calc(100vw - 10px); - -webkit-transition-timing-function: cubic-bezier(.165, .84, .44, 1); - transition-timing-function: cubic-bezier(.165, .84, .44, 1); - -webkit-transition-property: -webkit-transform; - transition-property: -webkit-transform; - transition-property: transform; - transition-property: transform, -webkit-transform -} - -.tippy-tooltip { - position: relative; - color: #fff; - border-radius: 4px; - font-size: 14px; - line-height: 1.4; - background-color: #333; - -webkit-transition-property: visibility, opacity, -webkit-transform; - transition-property: visibility, opacity, -webkit-transform; - transition-property: visibility, opacity, transform; - transition-property: visibility, opacity, transform, -webkit-transform; - outline: 0 -} - -.tippy-tooltip[data-placement^=top]>.tippy-arrow { - border-width: 8px 8px 0; - border-top-color: #333; - margin: 0 3px; - -webkit-transform-origin: 50% 0; - transform-origin: 50% 0; - bottom: -7px -} - -.tippy-tooltip[data-placement^=bottom]>.tippy-arrow { - border-width: 0 8px 8px; - border-bottom-color: #333; - margin: 0 3px; - -webkit-transform-origin: 50% 7px; - transform-origin: 50% 7px; - top: -7px -} - -.tippy-tooltip[data-placement^=left]>.tippy-arrow { - border-width: 8px 0 8px 8px; - border-left-color: #333; - margin: 3px 0; - -webkit-transform-origin: 0 50%; - transform-origin: 0 50%; - right: -7px -} - -.tippy-tooltip[data-placement^=right]>.tippy-arrow { - border-width: 8px 8px 8px 0; - border-right-color: #333; - margin: 3px 0; - -webkit-transform-origin: 7px 50%; - transform-origin: 7px 50%; - left: -7px -} - -.tippy-tooltip[data-interactive][data-state=visible] { - pointer-events: auto -} - -.tippy-tooltip[data-inertia][data-state=visible] { - -webkit-transition-timing-function: cubic-bezier(.54, 1.5, .38, 1.11); - transition-timing-function: cubic-bezier(.54, 1.5, .38, 1.11) -} - -.tippy-arrow { - position: absolute; - border-color: transparent; - border-style: solid -} - -.tippy-content { - padding: 5px 9px -} - -.tippy-tooltip { - color: #101010; - background-color: #f9fafb; - border-radius: 0; - font-size: 12px -} - -.tippy-tooltip .tippy-content b { - color: #047006 -} - -.tippy-tooltip .tippy-content ul { - list-style-type: none; - padding-left: 4px -} - -.tippy-tooltip .tippy-content .mdi { - font-size: 16px -} - -.tippy-tooltip .tippy-content .grid-header { - padding: 5px 10px; - margin-bottom: 5px -} - -.page-body { - background: #fff -} - -.page-content-wrapper { - background: #f9fafb; - border-left: 1px solid #f2f4f9 -} - -@media (min-width:992px) { - .t-header .t-header-content-wrapper { - border-left: 1px solid #f2f4f9 - } - -} - -@media (min-width:768px) { - .page-body { - position: relative; - display: grid; - max-width: 100%; - grid-template-columns: 17rem calc(100vw - 17rem); - -webkit-transition: .3s; - transition: .3s - } - - .page-body .page-content-wrapper { - position: relative; - width: 100%; - min-height: 100vh; - padding: 1.5rem 2.5rem calc(90px + 1.5rem); - margin-top: 70px - } - - .page-body .page-content-wrapper .page-content-wrapper-inner { - max-width: 1140px; - margin-left: auto; - margin-right: auto - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header { - position: -webkit-sticky; - position: sticky; - top: 70px; - background: #f9fafb; - z-index: 99 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb { - padding: 1rem 1rem 1rem 21px; - margin-left: -20px; - margin-right: -20px; - background: #f9fafb - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item { - color: #565656; - letter-spacing: .03rem; - font-family: Roboto, sans-serif; - font-weight: 500 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item a { - color: inherit - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item.active { - color: #047006 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-title-heading { - color: #565656; - font-size: 1.5rem; - font-family: Roboto, sans-serif; - font-weight: 500; - margin-bottom: 0 - } - - .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-description { - opacity: .7; - margin-top: 15px - } - - body.sidebar-minimized .t-header .t-header-brand-wrapper { - background: #f9fafb - } - - body.sidebar-minimized .t-header .t-header-content-wrapper { - border-left: #f9fafb - } - - body.sidebar-minimized .page-body { - grid-template-columns: 0 100% - } - - body.sidebar-minimized .page-body .sidebar .sidebar_footer { - left: -17rem - } - - body.sidebar-minimized .page-body .sidebar .nav-category-divider { - position: initial - } - -} - -@media (max-width:991.98px) { - .t-header { - width: 100vw - } - - .t-header .t-header-brand-wrapper { - background: #f9fafb; - width: 4rem; - min-width: 4rem; - max-width: 4rem - } - - .t-header .t-header-brand-wrapper a .logo { - -webkit-animation-name: menuItemFadeIn; - animation-name: menuItemFadeIn; - -webkit-animation-duration: .25s; - animation-duration: .25s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: none - } - - @-webkit-keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - @keyframes menuItemFadeIn { - from { - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - display: none; - opacity: 0 - } - - to { - display: block; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - } - - .t-header .t-header-brand-wrapper a .logo-mini { - display: block - } - - .page-body { - display: -webkit-box; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; - overflow: hidden; - max-width: 100% - } - - .page-body .sidebar { - position: relative; - left: 0; - z-index: 99; - width: 15rem; - min-width: 15rem; - max-width: 15rem; - margin-left: -15rem; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left, width; - transition-property: margin-left, width - } - - .page-body .sidebar .sidebar_footer { - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: left; - transition-property: left; - left: -15rem - } - - .page-body .page-content-wrapper { - padding: 20px 20px; - min-width: 100vw; - margin-left: 0; - -webkit-transition-duration: .2s; - transition-duration: .2s; - -webkit-transition-timing-function: ease-in-out; - transition-timing-function: ease-in-out; - -webkit-transition-property: margin-left; - transition-property: margin-left - } - - .page-body .page-content-wrapper .viewport-header .breadcrumb { - background: 0 0; - padding-left: 0 - } - - .page-body .page-content-wrapper footer { - position: relative - } - - .page-body.sidebar-collpased .sidebar { - margin-left: 0; - min-width: 15rem - } - - .page-body.sidebar-collpased .sidebar .sidebar_footer { - left: 0 - } - -} - -@media (max-width:767.98px) { - .page-body .page-content-wrapper { - padding: 80px 20px 0 20px - } - -} - -.profile-img.bg-inverse-primary { - color: #047006 -} - -.profile-img.bg-inverse-secondary { - color: grey -} - -.profile-img.bg-inverse-success { - color: #047006 -} - -.profile-img.bg-inverse-info { - color: #6c61f6 -} - -.profile-img.bg-inverse-warning { - color: #f0825f -} - -.profile-img.bg-inverse-danger { - color: #ff5f66 -} - -.profile-img.bg-inverse-light { - color: #dfdfdf -} - -.profile-img.bg-inverse-dark { - color: #74767b -} - -.profile-img.bg-inverse-white { - color: #fff -} - -.notification-indicator-primary { - background: #047006 -} - -.notification-indicator-primary:before { - content: '3'; - background: rgba(4, 112, 6, .5) -} - -.notification-indicator-secondary { - background: grey -} - -.notification-indicator-secondary:before { - content: '.5'; - background: rgba(128, 128, 128, .5) -} - -.notification-indicator-success { - background: #047006 -} - -.notification-indicator-success:before { - content: 'http://www.w3.org/2000/svg'; - background: rgba(0, 224, 147, .5) -} - -.notification-indicator-info { - background: #6c61f6 -} - -.notification-indicator-info:before { - content: '0 0 4 5'; - background: rgba(108, 97, 246, .5) -} - -.notification-indicator-warning { - background: #f0825f -} - -.notification-indicator-warning:before { - content: '%23343a40'; - background: rgba(240, 130, 95, .5) -} - -.notification-indicator-danger { - background: #ff5f66 -} - -.notification-indicator-danger:before { - content: 'M2 0L0 2h4zm0 5L0 3h4z'; - background: rgba(255, 95, 102, .5) -} - -.notification-indicator-light { - background: #dfdfdf -} - -.notification-indicator-light:before { - content: 'http://www.w3.org/2000/svg'; - background: rgba(223, 223, 223, .5) -} - -.notification-indicator-dark { - background: #74767b -} - -.notification-indicator-dark:before { - content: '%23dc3545'; - background: rgba(116, 118, 123, .5) -} - -.notification-indicator-white { - background: #fff -} - -.notification-indicator-white:before { - content: '-2 -2 7 7'; - background: rgba(255, 255, 255, .5) -} - -.border-top { - border-top-style: solid; - border-top-color: #f2f4f9; - border-top-width: 1px -} - -.border-right { - border-right-style: solid; - border-right-color: #f2f4f9; - border-right-width: 1px -} - -.border-bottom { - border-bottom-style: solid; - border-bottom-color: #f2f4f9; - border-bottom-width: 1px -} - -.border-left { - border-left-style: solid; - border-left-color: #f2f4f9; - border-left-width: 1px -} - -.ellipsor { - max-width: 100%; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden -} - -.text-gray { - color: #565656 -} - -.overflow-hidden { - overflow: hidden -} - -.pos-relative { - position: relative -} - -.profile-img { - width: 40px; - height: 40px; - overflow: hidden -} - -.profile-img:not(.component-flat) { - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2) -} - -.profile-img:not(.img-sm):not(.img-lg):not(.img-xl) img { - width: 40px; - height: 40px -} - -.profile-img:not(.img-rounded) { - border-radius: 6px -} - -.profile-img.no-avatar { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - text-align: center; - text-transform: uppercase; - font-family: Roboto, sans-serif; - font-weight: 600 -} - -.profile-img.img-rounded { - border-radius: 100% -} - -.grouped-images { - display: -webkit-box; - display: flex -} - -.grouped-images .plus-text, -.grouped-images img { - display: -webkit-box; - display: flex; - -webkit-box-align: center; - align-items: center; - -webkit-box-pack: center; - justify-content: center; - text-align: center; - border-radius: 100%; - overflow: hidden; - margin-right: -10px; - margin-right: -10px; - border: 3px solid #fff; - background: #f0f2f5; - color: #565656; - font-family: Roboto, sans-serif; - font-weight: 700; - letter-spacing: .03rem -} - -.grouped-images .plus-text:not(.img-sm):not(.img-lg):not(.img-xl), -.grouped-images img:not(.img-sm):not(.img-lg):not(.img-xl) { - width: 40px; - height: 40px -} - -.img-sm { - width: 30px; - height: 30px -} - -.img-lg { - width: 80px; - height: 80px -} - -.img-xl { - width: 100px; - height: 100px -} - -.mdi.mdi-1x:before { - font-size: 1.25rem -} - -.mdi.mdi-2x:before { - font-size: 1.5625rem -} - -.mdi.mdi-3x:before { - font-size: 1.875rem -} - -.mdi.mdi-4x:before { - font-size: 2.1875rem -} - -.mdi.mdi-5x:before { - font-size: 2.5rem -} - -.mdi.mdi-6x:before { - font-size: 3.125rem -} - -.mdi.mdi-7x:before { - font-size: 3.75rem -} - -.status-indicator { - display: inline-block; - width: 12px; - min-width: 12px; - height: 12px; - border-radius: 4px -} - -.status-indicator.rounded-indicator { - border-radius: 50px -} - -.status-indicator.small { - width: 7px; - min-width: 7px; - height: 7px -} - -.text-black { - color: #101010 -} - -.notification-indicator { - display: block; - width: 7px; - height: 7px; - border-radius: 100%; - z-index: 0 -} - -.notification-indicator.notification-indicator-ripple:before { - content: '%23dc3545'; - display: block; - width: 26px; - height: 26px; - z-index: -1; - position: absolute; - top: -9px; - left: -9px; - border-radius: 100%; - opacity: 0; - -webkit-transform-origin: 50% 50%; - transform-origin: 50% 50%; - mix-blend-mode: screen; - -webkit-animation: ripple 1.2s ease-out; - animation: ripple 1.2s ease-out; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite -} - -.logo { - display: block; - margin: 0 auto; - width: 280px -} - -.logo img { - width: 100% -} - -.grid { - background: #fff; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, .75) -} - -.grid-header { - padding: 15px 20px; - margin-bottom: 15px; - font-family: Roboto, sans-serif; - font-weight: 500; - letter-spacing: .03rem; - background: #f9fafb; - border-left: 3px solid #047006; - border-radius: 0 6px 0 0 -} - -.grid-title { - opacity: .9; - margin-bottom: 25px -} - -.close { - color: #101010 -} - -.split-header { - display: -webkit-box; - display: flex; - -webkit-box-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper { - display: -webkit-box; - display: flex -} - -.split-header .content-wrapper a i, -.split-header .content-wrapper span i { - font-size: 20px; - color: #adb5bd; - -webkit-transition: .3s ease color; - transition: .3s ease color -} - -.split-header .content-wrapper a i:hover, -.split-header .content-wrapper span i:hover { - color: #047006 -} - -.split-header .content-wrapper.v-centered { - -webkit-box-align: center; - align-items: center -} - -.split-header .content-wrapper.h-centered { - -webkit-box-pack: center; - justify-content: center -} - -.grid-body { - padding: 20px 25px 20px -} - -.card-title { - font-family: Roboto, sans-serif; - font-weight: 500; - color: #313131; - margin-bottom: 0 -} - -.equel-grid { - display: -webkit-box; - display: flex; - -webkit-box-align: stretch; - align-items: stretch -} - -.equel-grid .grid { - width: 100%; - min-width: 100% -} - -.showcase_row_area { - margin-bottom: 20px -} - -.showcase_row_area .showcase_text_area { - text-align: right -} - -@media (max-width:767.98px) { - .showcase_row_area .showcase_text_area { - text-align: left - } - -} - -.showcase_row_area .showcase_content_area { - margin-bottom: -10px -} - -.showcase_row_area .showcase_content_area .btn { - margin-right: 5px; - margin-bottom: 10px -} - -.showcase_row_area:last-child { - margin-bottom: 0 -} - -.content-preview { - width: 45px; - height: 45px -} - -.content-preview.rounded { - border-radius: 100% -} - -.btn:not(.disabled),.cursor_pointer,a { - cursor: pointer -} - -.grd-positive-currency { - color: #047006 -} - -.grd-negative-currency { - color: red -} - -.color-success { - color: var(--success) -} - -.color-danger { - color: var(--danger) -} - -.color-warning { - color: var(--warning) -} - -.color-primary { - color: var(--primary) -} - -.btn-gradido-orange { - color: #fff; - background-color: #ffa600; - border-color: #ffa600 -} - -.visible-modal { - display: block -} - -.margin-top-10 { - margin-top: 10px -} - -.pull-right { - float: right -} - -.pull-right-row { - display: block; - margin-right: 10px -} - -.display-block { - display: block -} - -p.grd_small { - margin-top: 2px; - margin-bottom: 2px -} - -ul.grd-no-style { - list-style-type: none -} - -.center-ul-container ul { - padding-left: 0; - margin-bottom: 0; - text-align: center -} - -.center-ul-container ul .grd-error { - margin-top: 5px; - color: #8b0000 -} - -.grd-alert-color { - color: #ff5f66 !important -} - -.grd-success-color { - color: #047006 !important -} - -.grd-orange-color { - color: #ffa600 -} - -.hidden { - display: none -} - -.alert { - cursor: pointer -} - -.table.table-auto-break td, -.table.table-auto-break th { - white-space: pre-line -} diff --git a/community_server/webroot/css/styles.css b/community_server/webroot/css/styles.css deleted file mode 100644 index 143cbdc08..000000000 --- a/community_server/webroot/css/styles.css +++ /dev/null @@ -1,347 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 09:26:42 - Author : einhornimmond -*/ -.dev-info { - position: fixed; - color: grey; - font-size: smaller; - left: 8px; -} -.grd-time-used { - bottom: 0; -} -.versionstring { - top: 0; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 12.07.2019, 07:59:32 - Author : einhornimmond -*/ -div[role='grd_dialog'] { - position: fixed; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); - top: 0; - left: 0; -} -div.grd_modal-dialog { - margin-top: 100px; - min-height: 200px; - max-width: 1000px; - margin-left: auto; - margin-right: auto; - background-color: white; - color: black; - border: 1px solid grey; -} -div.grd_modal-dialog.grd_dialog-large { - margin-top: 5px; - width: 90%; -} -div.grd_modal-body { - padding: 25px; -} -div.grd_modal-header { - background-color: rgba(0, 0, 0, 0.1); - padding: 5px; - padding-left: 15px; - border: 1px solid grey; - color: black; -} -div.grd_modal-footer { - background-color: rgba(0, 0, 0, 0.1); - height: 40px; -} -.grd_modal-footer a, -.grd_modal-footer button { - float: right; - padding: 9px; - margin-right: 10px; - border: 1px solid grey; -} -.grd_modal-footer a:hover, -.grd_modal-footer button:hover { - background-color: rgba(255, 255, 255, 0.5); -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 14:41:57 - Author : einhornimmond -*/ -/* Button */ -/*a.grd_bn,a.grd_bn:visited { - color:black; - text-decoration: none; -} -*/ -.grd-form-bn:hover, -.grd-active { - background-color: lightgray; - border-color: black; -} -.grd-form-bn { - padding: 5px; - border: 1px solid grey; - display: table-cell; - text-align: center; - vertical-align: middle; - color: #444; -} -a.grd-form-bn, -a.grd-form-bn:visited { - color: black; - text-decoration: none; -} -.grd-form-bn-succeed { - background-color: lightcyan; - color: green; - margin-top: 3px; - margin-bottom: 3px; -} -.grd-form-bn-succeed:not([disabled]):hover { - background-color: lightgreen; -} -.grd-form-bn-discard { - margin-left: 5px; - border: 1px solid red; - color: red; - cursor: pointer; -} -/* -.grd_large-bn { - width:100vw; - height:25vh; - font-size: 8vh; -} - -.grd_bg-bn { - width:50vw; - height:25vh; - font-size: 7vh; -} - -.gr_md-bn { - width:50vw; - height:25vh; - font-size: 6vh; -} -*/ -/* form elements */ -.grd_textarea { - border: 1px solid grey; - background-color: rgba(0, 0, 0, 0.05); - padding: 5px; - font-style: italic; -} -.grd-input label { - display: block; -} -input.grd-privkey { - width: 465px; -} -input.grd-pubkey { - width: 465px; -} -input.grd-non-der-keys { - width: 900px; -} -input:not([type='radio']) { - width: 200px; -} -label:not(.grd_radio_label) { - width: 80px; - display: inline-block; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 13.10.2019, 15:43:58 - Author : einhornimmond -*/ -.grd-time-used { - position: fixed; - bottom: 0; - left: 0; - color: grey; - font-size: smaller; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 16:04:16 - Author : einhornimmond -*/ -/* messages, update flash */ -.grd-error { - color: red; - border: 1px solid rgba(255, 0, 0, 0.5); - padding: 5px; -} -.grd-info { - border: 1px dotted gray; - padding: 5px; -} -.grd-success { - padding: 5px; - color: green; -} -.flash-messages .message { - padding: 5px; -} -.flash-messages .success { - color: green; -} -.flash-messages .error { - color: red; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 30.10.2019, 14:16:16 - Author : einhornimmond -*/ -/* navbar */ -nav.grd-left-bar { - position: fixed; - top: 80.5px; -} -nav .grd-nav-bn { - width: 120px; -} -nav ul { - margin-top: 0; - padding-left: 0; -} -/* buttons */ -.grd-nav-bn:hover, -.grd-active { - background-color: lightgray; - border-color: black; -} -.grd-nav-bn { - padding: 10px; - border: 1px solid grey; - display: table-cell; - text-align: center; - vertical-align: middle; - color: grey; -} -.grd-nav-without-border { - border: none; -} -.grd-nav-bn-large { - width: 40vw; - height: 18vh; - font-size: 35px; -} -a.grd-nav-bn, -a.grd-nav-bn:visited { - color: black; - text-decoration: none; -} -.grd-nav-bn-discard { - color: darkred !important; -} -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 07.07.2019, 16:20:15 - Author : einhornimmond -*/ -/* content container */ -.grd_container { - max-width: 820px; - margin-left: auto; - margin-right: auto; -} -.grd_container_small { - max-width: 500px; -} -.grd_text { - max-width: 550px; - margin-bottom: 5px; -} -.grd_text-max-width { - max-width: 550px; -} -/* layout helper */ -.grd_margin_5 { - margin: 5px; -} -.grd-margin-top-10 { - margin-top: 10px; -} -.grd-width-200 { - width: 200px; -} -.grd-padding-top-bottom-5 { - padding-top: 5px; - padding-bottom: 5px; -} -.grd-padding-top-bottom-10 { - padding-top: 10px; - padding-bottom: 10px; -} -.grd_margin-bottom { - margin-bottom: 5px; -} -.grd_right { - float: right; -} -a.grd_invisible_link { - color: black; - text-decoration: none; -} -a.grd_invisible_link:hover { - color: grey; -} -.grd_clickable { - cursor: pointer; -} -ul.grd-no-style { - list-style: none; -} -p.grd_small { - margin-top: 2px; - margin-bottom: 2px; -} -.grd-default-currency { - color: grey; -} -.grd-positive-currency { - color: green; -} -.grd-negative-currency { - color: red; -} -.admin-border { - border-color: #ffa600; -} diff --git a/community_server/webroot/favicon.ico b/community_server/webroot/favicon.ico deleted file mode 100644 index 5b44f2027..000000000 Binary files a/community_server/webroot/favicon.ico and /dev/null differ diff --git a/community_server/webroot/favicon.png b/community_server/webroot/favicon.png deleted file mode 100644 index 5c437973e..000000000 Binary files a/community_server/webroot/favicon.png and /dev/null differ diff --git a/community_server/webroot/font/cakedingbats-webfont.eot b/community_server/webroot/font/cakedingbats-webfont.eot deleted file mode 100644 index e8605d926..000000000 Binary files a/community_server/webroot/font/cakedingbats-webfont.eot and /dev/null differ diff --git a/community_server/webroot/font/cakedingbats-webfont.svg b/community_server/webroot/font/cakedingbats-webfont.svg deleted file mode 100644 index d1e0c98f7..000000000 --- a/community_server/webroot/font/cakedingbats-webfont.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/community_server/webroot/font/cakedingbats-webfont.ttf b/community_server/webroot/font/cakedingbats-webfont.ttf deleted file mode 100644 index 13d54454e..000000000 Binary files a/community_server/webroot/font/cakedingbats-webfont.ttf and /dev/null differ diff --git a/community_server/webroot/font/cakedingbats-webfont.woff b/community_server/webroot/font/cakedingbats-webfont.woff deleted file mode 100644 index 073baab11..000000000 Binary files a/community_server/webroot/font/cakedingbats-webfont.woff and /dev/null differ diff --git a/community_server/webroot/font/cakedingbats-webfont.woff2 b/community_server/webroot/font/cakedingbats-webfont.woff2 deleted file mode 100644 index 6e71eaf53..000000000 Binary files a/community_server/webroot/font/cakedingbats-webfont.woff2 and /dev/null differ diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot deleted file mode 100644 index 3e035411c..000000000 Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot and /dev/null differ diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf deleted file mode 100644 index db76e5796..000000000 Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff deleted file mode 100644 index 5f10918f0..000000000 Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff and /dev/null differ diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 deleted file mode 100644 index 34df5fe02..000000000 Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 and /dev/null differ diff --git a/community_server/webroot/fonts/Roboto/Roboto-Black.ttf b/community_server/webroot/fonts/Roboto/Roboto-Black.ttf deleted file mode 100644 index 689fe5cb3..000000000 Binary files a/community_server/webroot/fonts/Roboto/Roboto-Black.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf b/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf deleted file mode 100644 index d3f01ad24..000000000 Binary files a/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/Roboto/Roboto-Light.ttf b/community_server/webroot/fonts/Roboto/Roboto-Light.ttf deleted file mode 100644 index 219063a57..000000000 Binary files a/community_server/webroot/fonts/Roboto/Roboto-Light.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/Roboto/Roboto-Medium.ttf b/community_server/webroot/fonts/Roboto/Roboto-Medium.ttf deleted file mode 100644 index 1a7f3b0bb..000000000 Binary files a/community_server/webroot/fonts/Roboto/Roboto-Medium.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/Roboto/Roboto-Regular.ttf b/community_server/webroot/fonts/Roboto/Roboto-Regular.ttf deleted file mode 100644 index 2c97eeadf..000000000 Binary files a/community_server/webroot/fonts/Roboto/Roboto-Regular.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/Roboto/Roboto-Thin.ttf b/community_server/webroot/fonts/Roboto/Roboto-Thin.ttf deleted file mode 100644 index b74a4fd1a..000000000 Binary files a/community_server/webroot/fonts/Roboto/Roboto-Thin.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.eot b/community_server/webroot/fonts/materialdesignicons-webfont.eot deleted file mode 100644 index fe283ac48..000000000 Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.eot and /dev/null differ diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.svg b/community_server/webroot/fonts/materialdesignicons-webfont.svg deleted file mode 100644 index b356c2977..000000000 --- a/community_server/webroot/fonts/materialdesignicons-webfont.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.ttf b/community_server/webroot/fonts/materialdesignicons-webfont.ttf deleted file mode 100644 index 3219fca04..000000000 Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.woff b/community_server/webroot/fonts/materialdesignicons-webfont.woff deleted file mode 100644 index abe1e47ef..000000000 Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.woff and /dev/null differ diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.woff2 b/community_server/webroot/fonts/materialdesignicons-webfont.woff2 deleted file mode 100644 index 47e8a2c3e..000000000 Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.woff2 and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.eot b/community_server/webroot/fonts/open-sans-v18-latin-300.eot deleted file mode 100644 index 1c0f100ba..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.eot and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.svg b/community_server/webroot/fonts/open-sans-v18-latin-300.svg deleted file mode 100644 index c0a1c8cd7..000000000 --- a/community_server/webroot/fonts/open-sans-v18-latin-300.svg +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.ttf b/community_server/webroot/fonts/open-sans-v18-latin-300.ttf deleted file mode 100644 index dcce1bb7d..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.woff b/community_server/webroot/fonts/open-sans-v18-latin-300.woff deleted file mode 100644 index 26567ff25..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.woff and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-300.woff2 deleted file mode 100644 index 7bf901c28..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.woff2 and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.eot b/community_server/webroot/fonts/open-sans-v18-latin-600.eot deleted file mode 100644 index b0d46a4ce..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.eot and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.svg b/community_server/webroot/fonts/open-sans-v18-latin-600.svg deleted file mode 100644 index 410561e78..000000000 --- a/community_server/webroot/fonts/open-sans-v18-latin-600.svg +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.ttf b/community_server/webroot/fonts/open-sans-v18-latin-600.ttf deleted file mode 100644 index 25fdf1eb3..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.woff b/community_server/webroot/fonts/open-sans-v18-latin-600.woff deleted file mode 100644 index 9d0eb42db..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.woff and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-600.woff2 deleted file mode 100644 index 5c5d54e2f..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.woff2 and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.eot b/community_server/webroot/fonts/open-sans-v18-latin-700.eot deleted file mode 100644 index 5b9ddb4eb..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.eot and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.svg b/community_server/webroot/fonts/open-sans-v18-latin-700.svg deleted file mode 100644 index 8e6b61ade..000000000 --- a/community_server/webroot/fonts/open-sans-v18-latin-700.svg +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.ttf b/community_server/webroot/fonts/open-sans-v18-latin-700.ttf deleted file mode 100644 index c9a3c7a48..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.woff b/community_server/webroot/fonts/open-sans-v18-latin-700.woff deleted file mode 100644 index b8b46d0b4..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.woff and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-700.woff2 deleted file mode 100644 index 3a38286c6..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.woff2 and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.eot b/community_server/webroot/fonts/open-sans-v18-latin-800.eot deleted file mode 100644 index b9d7b260c..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.eot and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.svg b/community_server/webroot/fonts/open-sans-v18-latin-800.svg deleted file mode 100644 index f2a2d9f6e..000000000 --- a/community_server/webroot/fonts/open-sans-v18-latin-800.svg +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.ttf b/community_server/webroot/fonts/open-sans-v18-latin-800.ttf deleted file mode 100644 index a62af861f..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.woff b/community_server/webroot/fonts/open-sans-v18-latin-800.woff deleted file mode 100644 index bdac80d5c..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.woff and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-800.woff2 deleted file mode 100644 index 86a8a8757..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.woff2 and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.eot b/community_server/webroot/fonts/open-sans-v18-latin-regular.eot deleted file mode 100644 index 8f3becf66..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.eot and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.svg b/community_server/webroot/fonts/open-sans-v18-latin-regular.svg deleted file mode 100644 index 78eb653a7..000000000 --- a/community_server/webroot/fonts/open-sans-v18-latin-regular.svg +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.ttf b/community_server/webroot/fonts/open-sans-v18-latin-regular.ttf deleted file mode 100644 index fb23764c1..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.ttf and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff b/community_server/webroot/fonts/open-sans-v18-latin-regular.woff deleted file mode 100644 index 39e88ed92..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff and /dev/null differ diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-regular.woff2 deleted file mode 100644 index e9f58b775..000000000 Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff2 and /dev/null differ diff --git a/community_server/webroot/img/50x50.png b/community_server/webroot/img/50x50.png deleted file mode 100644 index 7eb2b9ad8..000000000 Binary files a/community_server/webroot/img/50x50.png and /dev/null differ diff --git a/community_server/webroot/img/cake-logo.png b/community_server/webroot/img/cake-logo.png deleted file mode 100644 index 41939ef5a..000000000 Binary files a/community_server/webroot/img/cake-logo.png and /dev/null differ diff --git a/community_server/webroot/img/cake.icon.png b/community_server/webroot/img/cake.icon.png deleted file mode 100644 index 394fa42d5..000000000 Binary files a/community_server/webroot/img/cake.icon.png and /dev/null differ diff --git a/community_server/webroot/img/cake.logo.svg b/community_server/webroot/img/cake.logo.svg deleted file mode 100644 index e73abb54b..000000000 --- a/community_server/webroot/img/cake.logo.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/community_server/webroot/img/cake.power.gif b/community_server/webroot/img/cake.power.gif deleted file mode 100644 index 8f8d570a2..000000000 Binary files a/community_server/webroot/img/cake.power.gif and /dev/null differ diff --git a/community_server/webroot/img/gradido_logo_web.png b/community_server/webroot/img/gradido_logo_web.png deleted file mode 100644 index 062997764..000000000 Binary files a/community_server/webroot/img/gradido_logo_web.png and /dev/null differ diff --git a/community_server/webroot/img/gradido_logo_web.webp b/community_server/webroot/img/gradido_logo_web.webp deleted file mode 100644 index bff8a245d..000000000 Binary files a/community_server/webroot/img/gradido_logo_web.webp and /dev/null differ diff --git a/community_server/webroot/img/logo_half.png b/community_server/webroot/img/logo_half.png deleted file mode 100644 index d6852eab8..000000000 Binary files a/community_server/webroot/img/logo_half.png and /dev/null differ diff --git a/community_server/webroot/img/logo_half.webp b/community_server/webroot/img/logo_half.webp deleted file mode 100644 index d0e6c245b..000000000 Binary files a/community_server/webroot/img/logo_half.webp and /dev/null differ diff --git a/community_server/webroot/img/logo_schrift.png b/community_server/webroot/img/logo_schrift.png deleted file mode 100644 index 062997764..000000000 Binary files a/community_server/webroot/img/logo_schrift.png and /dev/null differ diff --git a/community_server/webroot/img/logo_schrift.webp b/community_server/webroot/img/logo_schrift.webp deleted file mode 100644 index bff8a245d..000000000 Binary files a/community_server/webroot/img/logo_schrift.webp and /dev/null differ diff --git a/community_server/webroot/index.php b/community_server/webroot/index.php deleted file mode 100644 index 2e697aedc..000000000 --- a/community_server/webroot/index.php +++ /dev/null @@ -1,41 +0,0 @@ -emit($server->run()); - diff --git a/community_server/webroot/js/basic.js b/community_server/webroot/js/basic.js deleted file mode 100644 index df53065fe..000000000 --- a/community_server/webroot/js/basic.js +++ /dev/null @@ -1,116 +0,0 @@ -// cross browser dom is ready module from: -// https://www.competa.com/blog/cross-browser-document-ready-with-vanilla-javascript/ -var domIsReady = (function(domIsReady) { - var isBrowserIeOrNot = function() { - return (!document.attachEvent || typeof document.attachEvent === "undefined" ? 'not-ie' : 'ie'); - } - - domIsReady = function(callback) { - if (callback && typeof callback === 'function') { - if (isBrowserIeOrNot() !== 'ie') { - document.addEventListener("DOMContentLoaded", function() { - return callback(); - }); - } else { - document.attachEvent("onreadystatechange", function() { - if (document.readyState === "complete") { - return callback(); - } - }); - } - } else { - console.error('The callback is not a function!'); - } - } - - return domIsReady; -})(domIsReady || {}); - - -// vanilla ajax request, json get -function getJson(basisUrl, method, successFunction, errorFunction, timeoutFunction) { - var xhr = new XMLHttpRequest(); - - xhr.onload = function(e) { - var xhr = e.target; - //console.log(xhr); - var jsonReturn = []; - if (xhr.responseType === 'json') { - jsonReturn = xhr.response; - } else { - jsonReturn = JSON.parse(xhr.responseText); - } - successFunction(jsonReturn); - } - xhr.onerror = function(e) { - errorFunction(e); - } - xhr.ontimeout = function(e) { - timeoutFunction(e); - } - - var bustCache = '&' + new Date().getTime(); - //oReq.open('GET', e.target.dataset.url + bustCache, true); - xhr.open('GET', basisUrl + '?method=' + method + bustCache, true); - xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - xhr.responseType = 'json'; - xhr.send(); -} - -// cross browser dom is ready -(function(document, window, domIsReady, undefined) { - domIsReady(function() { - var DesktopToggler = document.querySelector('#nav-action'); - var MobileToggler = document.querySelector('#nav-action-mobile'); - var HeaderToggle = document.querySelector('.t-header-toggler'); - - // SIDEBAR TOGGLE FUNCTION FOR LARGE SCREENS (SCREEN "LG" AND UP) - if (DesktopToggler) { - DesktopToggler.addEventListener('click', function() { - console.log('toggler clicked / Desktop'); - if (document.querySelector('.nav-menu').classList.contains('initial')) { - document.querySelector('.nav-menu').classList.remove('initial'); - document.querySelector('.nav-menu').classList.add('nav-menu-minimized'); - } else { - document.querySelector('.nav-menu').classList.toggle('nav-menu-minimized'); - document.querySelector('.nav-menu').classList.toggle('nav-menu-maximized'); - } - let big = document.querySelectorAll('.logo.big'); - big.forEach(function(el) { - el.classList.toggle('visible'); - }); - let small = document.querySelectorAll('.logo.small'); - small.forEach(function(el) { - el.classList.toggle('visible'); - }); - }); - } - - // SIDEBAR TOGGLE FUNCTION FOR MOBILE (SCREEN "MD" AND DOWN) - if (MobileToggler) { - MobileToggler.addEventListener('click', function() { - console.log('toggler clicked / Desktop'); - if (document.querySelector('.nav-menu').classList.contains('initial')) { - document.querySelector('.nav-menu').classList.remove('initial'); - document.querySelector('.nav-menu').classList.toggle('nav-menu-maximized'); - } else { - document.querySelector('.nav-menu').classList.toggle('nav-menu-minimized'); - document.querySelector('.nav-menu').classList.toggle('nav-menu-maximized'); - } - let big = document.querySelectorAll('.logo.big'); - big.forEach(function(el) { - el.classList.toggle('visible'); - }); - let small = document.querySelectorAll('.logo.small'); - small.forEach(function(el) { - el.classList.toggle('visible'); - }); - }); - } - if (HeaderToggle) { - HeaderToggle.addEventListener('click', function() { - HeaderToggle.classList.toggle('arrow'); - }); - } - }); -})(document, window, domIsReady); \ No newline at end of file diff --git a/community_server/webroot/js/core.js b/community_server/webroot/js/core.js deleted file mode 100644 index 9678001c2..000000000 --- a/community_server/webroot/js/core.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(T,e){"use strict";var t=[],x=T.document,i=Object.getPrototypeOf,a=t.slice,g=t.concat,l=t.push,r=t.indexOf,n={},o=n.toString,m=n.hasOwnProperty,s=m.toString,u=s.call(Object),v={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},_=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,noModule:!0};function b(e,t,n){var i,r=(t=t||x).createElement("script");if(r.text=e,n)for(i in c)n[i]&&(r[i]=n[i]);t.head.appendChild(r).parentNode.removeChild(r)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var C=function(e,t){return new C.fn.init(e,t)},f=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function h(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!y(e)&&!_(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+P+")"+P+"*"),K=new RegExp("="+P+"*([^\\]'\"]*?)"+P+"*\\]","g"),$=new RegExp(F),Q=new RegExp("^"+q+"$"),V={ID:new RegExp("^#("+q+")"),CLASS:new RegExp("^\\.("+q+")"),TAG:new RegExp("^("+q+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},z=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,X=/^[^{]+\{\s*\[native \w/,G=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,J=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),ee=function(e,t,n){var i="0x"+t-65536;return i!=i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){E()},re=ye(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{O.apply(t=j.call(y.childNodes),y.childNodes),t[y.childNodes.length].nodeType}catch(n){O={apply:t.length?function(e,t){k.apply(e,j.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function oe(e,t,n,i){var r,o,s,a,l,u,c,f=t&&t.ownerDocument,h=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==h&&9!==h&&11!==h)return n;if(!i&&((t?t.ownerDocument||t:y)!==T&&E(t),t=t||T,x)){if(11!==h&&(l=G.exec(e)))if(r=l[1]){if(9===h){if(!(s=t.getElementById(r)))return n;if(s.id===r)return n.push(s),n}else if(f&&(s=f.getElementById(r))&&v(t,s)&&s.id===r)return n.push(s),n}else{if(l[2])return O.apply(n,t.getElementsByTagName(e)),n;if((r=l[3])&&d.getElementsByClassName&&t.getElementsByClassName)return O.apply(n,t.getElementsByClassName(r)),n}if(d.qsa&&!D[e+" "]&&(!m||!m.test(e))){if(1!==h)f=t,c=e;else if("object"!==t.nodeName.toLowerCase()){for((a=t.getAttribute("id"))?a=a.replace(te,ne):t.setAttribute("id",a=C),o=(u=p(e)).length;o--;)u[o]="#"+a+" "+ve(u[o]);c=u.join(","),f=J.test(e)&&ge(t.parentNode)||t}if(c)try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){}finally{a===C&&t.removeAttribute("id")}}}return g(e.replace(W,"$1"),t,n,i)}function se(){var i=[];return function e(t,n){return i.push(t+" ")>b.cacheLength&&delete e[i.shift()],e[t+" "]=n}}function ae(e){return e[C]=!0,e}function le(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ue(e,t){for(var n=e.split("|"),i=n.length;i--;)b.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function fe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function de(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&re(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function pe(s){return ae(function(o){return o=+o,ae(function(e,t){for(var n,i=s([],e.length,o),r=i.length;r--;)e[n=i[r]]&&(e[n]=!(t[n]=e[n]))})})}function ge(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=oe.support={},r=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},E=oe.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:y;return i!==T&&9===i.nodeType&&i.documentElement&&(s=(T=i).documentElement,x=!r(T),y!==T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",ie,!1):n.attachEvent&&n.attachEvent("onunload",ie)),d.attributes=le(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=le(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=X.test(T.getElementsByClassName),d.getById=le(function(e){return s.appendChild(e).id=C,!T.getElementsByName||!T.getElementsByName(C).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&x){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(Z,ee);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&x){var n,i,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[r++];)1===n.nodeType&&i.push(n);return i},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&x)return t.getElementsByClassName(e)},a=[],m=[],(d.qsa=X.test(T.querySelectorAll))&&(le(function(e){s.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\["+P+"*(?:value|"+H+")"),e.querySelectorAll("[id~="+C+"-]").length||m.push("~="),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+C+"+*").length||m.push(".#.+[+~]")}),le(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name"+P+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&m.push(":enabled",":disabled"),s.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")})),(d.matchesSelector=X.test(c=s.matches||s.webkitMatchesSelector||s.mozMatchesSelector||s.oMatchesSelector||s.msMatchesSelector))&&le(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),a.push("!=",F)}),m=m.length&&new RegExp(m.join("|")),a=a.length&&new RegExp(a.join("|")),t=X.test(s.compareDocumentPosition),v=t||X.test(s.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},A=t?function(e,t){if(e===t)return u=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument===y&&v(y,e)?-1:t===T||t.ownerDocument===y&&v(y,t)?1:l?L(l,e)-L(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e===T?-1:t===T?1:r?-1:o?1:l?L(l,e)-L(l,t):0;if(r===o)return ce(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?ce(s[i],a[i]):s[i]===y?-1:a[i]===y?1:0}),T},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==T&&E(e),t=t.replace(K,"='$1']"),d.matchesSelector&&x&&!D[t+" "]&&(!a||!a.test(t))&&(!m||!m.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&$.test(n)&&(t=p(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=h[e+" "];return t||(t=new RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&h(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,i,r){return function(e){var t=oe.attr(e,n);return null==t?"!="===i:!i||(t+="","="===i?t===r:"!="===i?t!==r:"^="===i?r&&0===t.indexOf(r):"*="===i?r&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function N(e,n,i){return y(n)?C.grep(e,function(e,t){return!!n.call(e,t,e)!==i}):n.nodeType?C.grep(e,function(e){return e===n!==i}):"string"!=typeof n?C.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(C.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||I,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this);if(!(i="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:k.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:x,!0)),A.test(i[1])&&C.isPlainObject(t))for(i in t)y(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=x.getElementById(i[2]))&&(this[0]=r,this.length=1),this}).prototype=C.fn,I=C(x);var O=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function L(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]+)/i,ce=/^$|^module$|\/(?:java|ecma)script/i,fe={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function he(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&D(e,t)?C.merge([e],n):n}function de(e,t){for(var n=0,i=e.length;nx",v.noCloneChecked=!!pe.cloneNode(!0).lastChild.defaultValue;var ye=x.documentElement,_e=/^key/,be=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,we=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function Te(){return!1}function xe(){try{return x.activeElement}catch(e){}}function Ce(e,t,n,i,r,o){var s,a;if("object"==typeof t){for(a in"string"!=typeof n&&(i=i||n,n=void 0),t)Ce(e,a,n,i,t[a],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=Te;else if(!r)return e;return 1===o&&(s=r,(r=function(e){return C().off(e),s.apply(this,arguments)}).guid=s.guid||(s.guid=C.guid++)),e.each(function(){C.event.add(this,t,r,i,n)})}C.event={global:{},add:function(t,e,n,i,r){var o,s,a,l,u,c,f,h,d,p,g,m=Y.get(t);if(m)for(n.handler&&(n=(o=n).handler,r=o.selector),r&&C.find.matchesSelector(ye,r),n.guid||(n.guid=C.guid++),(l=m.events)||(l=m.events={}),(s=m.handle)||(s=m.handle=function(e){return void 0!==C&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(H)||[""]).length;u--;)d=g=(a=we.exec(e[u])||[])[1],p=(a[2]||"").split(".").sort(),d&&(f=C.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,f=C.event.special[d]||{},c=C.extend({type:d,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&C.expr.match.needsContext.test(r),namespace:p.join(".")},o),(h=l[d])||((h=l[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,i,p,s)||t.addEventListener&&t.addEventListener(d,s)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),r?h.splice(h.delegateCount++,0,c):h.push(c),C.event.global[d]=!0)},remove:function(e,t,n,i,r){var o,s,a,l,u,c,f,h,d,p,g,m=Y.hasData(e)&&Y.get(e);if(m&&(l=m.events)){for(u=(t=(t||"").match(H)||[""]).length;u--;)if(d=g=(a=we.exec(t[u])||[])[1],p=(a[2]||"").split(".").sort(),d){for(f=C.event.special[d]||{},h=l[d=(i?f.delegateType:f.bindType)||d]||[],a=a[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=h.length;o--;)c=h[o],!r&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(h.splice(o,1),c.selector&&h.delegateCount--,f.remove&&f.remove.call(e,c));s&&!h.length&&(f.teardown&&!1!==f.teardown.call(e,p,m.handle)||C.removeEvent(e,d,m.handle),delete l[d])}else for(d in l)C.event.remove(e,d+t[u],n,i,!0);C.isEmptyObject(l)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,s,a=C.event.fix(e),l=new Array(arguments.length),u=(Y.get(this,"events")||{})[a.type]||[],c=C.event.special[a.type]||{};for(l[0]=a,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,De=/\s*$/g;function Ie(e,t){return D(e,"table")&&D(11!==t.nodeType?t:t.firstChild,"tr")&&C(e).children("tbody")[0]||e}function ke(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function je(e,t){var n,i,r,o,s,a,l,u;if(1===t.nodeType){if(Y.hasData(e)&&(o=Y.access(e),s=Y.set(t,o),u=o.events))for(r in delete s.handle,s.events={},u)for(n=0,i=u[r].length;n")},clone:function(e,t,n){var i,r,o,s,a,l,u,c=e.cloneNode(!0),f=C.contains(e.ownerDocument,e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||C.isXMLDoc(e)))for(s=he(c),i=0,r=(o=he(e)).length;i").prop({charset:n.scriptCharset,src:n.url}).on("load error",r=function(e){i.remove(),r=null,e&&t("error"===e.type?404:200,e.type)}),x.head.appendChild(i[0])},abort:function(){r&&r()}}});var Bt,Ut=[],Kt=/(=)\?(?=&|$)|\?\?/;C.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ut.pop()||C.expando+"_"+bt++;return this[e]=!0,e}}),C.ajaxPrefilter("json jsonp",function(e,t,n){var i,r,o,s=!1!==e.jsonp&&(Kt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Kt.test(e.data)&&"data");if(s||"jsonp"===e.dataTypes[0])return i=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Kt,"$1"+i):!1!==e.jsonp&&(e.url+=(wt.test(e.url)?"&":"?")+e.jsonp+"="+i),e.converters["script json"]=function(){return o||C.error(i+" was not called"),o[0]},e.dataTypes[0]="json",r=T[i],T[i]=function(){o=arguments},n.always(function(){void 0===r?C(T).removeProp(i):T[i]=r,e[i]&&(e.jsonpCallback=t.jsonpCallback,Ut.push(i)),o&&y(r)&&r(o[0]),o=r=void 0}),"script"}),v.createHTMLDocument=((Bt=x.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Bt.childNodes.length),C.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((i=(t=x.implementation.createHTMLDocument("")).createElement("base")).href=x.location.href,t.head.appendChild(i)):t=x),o=!n&&[],(r=A.exec(e))?[t.createElement(r[1])]:(r=ve([e],t,o),o&&o.length&&C(o).remove(),C.merge([],r.childNodes)));var i,r,o},C.fn.load=function(e,t,n){var i,r,o,s=this,a=e.indexOf(" ");return-1").append(C.parseHTML(e)).find(i):e)}).always(n&&function(e,t){s.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},C.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){C.fn[t]=function(e){return this.on(t,e)}}),C.expr.pseudos.animated=function(t){return C.grep(C.timers,function(e){return t===e.elem}).length},C.offset={setOffset:function(e,t,n){var i,r,o,s,a,l,u=C.css(e,"position"),c=C(e),f={};"static"===u&&(e.style.position="relative"),a=c.offset(),o=C.css(e,"top"),l=C.css(e,"left"),r=("absolute"===u||"fixed"===u)&&-1<(o+l).indexOf("auto")?(s=(i=c.position()).top,i.left):(s=parseFloat(o)||0,parseFloat(l)||0),y(t)&&(t=t.call(e,n,C.extend({},a))),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+r),"using"in t?t.using.call(e,f):c.css(f)}},C.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){C.offset.setOffset(this,t,e)});var e,n,i=this[0];return i?i.getClientRects().length?(e=i.getBoundingClientRect(),n=i.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,i=this[0],r={top:0,left:0};if("fixed"===C.css(i,"position"))t=i.getBoundingClientRect();else{for(t=this.offset(),n=i.ownerDocument,e=i.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===C.css(e,"position");)e=e.parentNode;e&&e!==i&&1===e.nodeType&&((r=C(e).offset()).top+=C.css(e,"borderTopWidth",!0),r.left+=C.css(e,"borderLeftWidth",!0))}return{top:t.top-r.top-C.css(i,"marginTop",!0),left:t.left-r.left-C.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===C.css(e,"position");)e=e.offsetParent;return e||ye})}}),C.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,r){var o="pageYOffset"===r;C.fn[t]=function(e){return B(this,function(e,t,n){var i;if(_(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===n)return i?i[r]:e[t];i?i.scrollTo(o?i.pageXOffset:n,o?n:i.pageYOffset):e[t]=n},t,e,arguments.length)}}),C.each(["top","left"],function(e,n){C.cssHooks[n]=Me(v.pixelPosition,function(e,t){if(t)return t=Fe(e,n),Pe.test(t)?C(e).position()[n]+"px":t})}),C.each({Height:"height",Width:"width"},function(s,a){C.each({padding:"inner"+s,content:a,"":"outer"+s},function(i,o){C.fn[o]=function(e,t){var n=arguments.length&&(i||"boolean"!=typeof e),r=i||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var i;return _(e)?0===o.indexOf("outer")?e["inner"+s]:e.document.documentElement["client"+s]:9===e.nodeType?(i=e.documentElement,Math.max(e.body["scroll"+s],i["scroll"+s],e.body["offset"+s],i["offset"+s],i["client"+s])):void 0===n?C.css(e,t,r):C.style(e,t,n,r)},a,n?e:void 0,n)}})}),C.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){C.fn[n]=function(e,t){return 0=i.clientWidth&&n>=i.clientHeight}),c=0l[e]&&!i.escapeWithReference&&(n=I(c[t],l[e]-("right"===e?c.width:c.height))),Q({},t,n)}};return u.forEach(function(e){var t=-1===["left","top"].indexOf(e)?"secondary":"primary";c=V({},c,f[t](e))}),e.offsets.popper=c,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,r=e.placement.split("-")[0],o=P,s=-1!==["top","bottom"].indexOf(r),a=s?"right":"bottom",l=s?"left":"top",u=s?"width":"height";return n[a]o(i[a])&&(e.offsets.popper[l]=o(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!A(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"==typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],o=e.offsets,s=o.popper,a=o.reference,l=-1!==["left","right"].indexOf(r),u=l?"height":"width",c=l?"Top":"Left",f=c.toLowerCase(),h=l?"left":"top",d=l?"bottom":"right",p=T(i)[u];a[d]-ps[d]&&(e.offsets.popper[f]+=a[f]+p-s[d]),e.offsets.popper=w(e.offsets.popper);var g=a[f]+a[u]/2-p/2,m=b(e.instance.popper),v=parseFloat(m["margin"+c],10),y=parseFloat(m["border"+c+"Width"],10),_=g-e.offsets.popper[f]-v-y;return _=k(I(s[u]-p,_),0),e.arrowElement=i,e.offsets.arrow=(Q(n={},f,q(_)),Q(n,h,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(p,g){if(e(p.instance.modifiers,"inner"))return p;if(p.flipped&&p.placement===p.originalPlacement)return p;var m=h(p.instance.popper,p.instance.reference,g.padding,g.boundariesElement,p.positionFixed),v=p.placement.split("-")[0],y=x(v),_=p.placement.split("-")[1]||"",b=[];switch(g.behavior){case G:b=[v,y];break;case J:b=i(v);break;case Z:b=i(v,!0);break;default:b=g.behavior}return b.forEach(function(e,t){if(v!==e||b.length===t+1)return p;v=p.placement.split("-")[0],y=x(v);var n,i=p.offsets.popper,r=p.offsets.reference,o=P,s="left"===v&&o(i.right)>o(r.left)||"right"===v&&o(i.left)o(r.top)||"bottom"===v&&o(i.top)o(m.right),u=o(i.top)o(m.bottom),f="left"===v&&a||"right"===v&&l||"top"===v&&u||"bottom"===v&&c,h=-1!==["top","bottom"].indexOf(v),d=!!g.flipVariations&&(h&&"start"===_&&a||h&&"end"===_&&l||!h&&"start"===_&&u||!h&&"end"===_&&c);(s||f||d)&&(p.flipped=!0,(s||f)&&(v=b[t+1]),d&&(_="end"===(n=_)?"start":"start"===n?"end":n),p.placement=v+(_?"-"+_:""),p.offsets.popper=V({},p.offsets.popper,C(p.instance.popper,p.offsets.reference,p.placement)),p=S(p.instance.modifiers,p,"flip"))}),p},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,r=i.popper,o=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return r[s?"left":"top"]=o[n]-(a?r[s?"width":"height"]:0),e.placement=x(t),e.offsets.popper=w(r),e}},hide:{order:800,enabled:!0,fn:function(e){if(!A(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=L(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.rightthis._items.length-1||e<0))if(this._isSliding)p(this._element).one(O.SLID,function(){return t.to(e)});else{if(n===e)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right
    ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]}},Re="show",Fe={HIDE:"hide"+Ie,HIDDEN:"hidden"+Ie,SHOW:"show"+Ie,SHOWN:"shown"+Ie,INSERTED:"inserted"+Ie,CLICK:"click"+Ie,FOCUSIN:"focusin"+Ie,FOCUSOUT:"focusout"+Ie,MOUSEENTER:"mouseenter"+Ie,MOUSELEAVE:"mouseleave"+Ie},Me="fade",We="show",Be="hover",Ue="focus",Ke=function(){function i(e,t){if(void 0===f)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=p(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(We))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var e=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(e);var n=g.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var r=this.getTipElement(),o=g.getUID(this.constructor.NAME);r.setAttribute("id",o),this.element.setAttribute("aria-describedby",o),this.setContent(),this.config.animation&&p(r).addClass(Me);var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(r).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(r).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new f(this.element,r,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){return t._handlePopperPlacementChange(e)}}),p(r).addClass(We),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var u=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,p(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(p(this.tip).hasClass(Me)){var c=g.getTransitionDurationFromElement(this.tip);p(this.tip).one(g.TRANSITION_END,u).emulateTransitionEnd(c)}else u()}},e.hide=function(e){var t=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),r=function(){t._hoverState!==Re&&n.parentNode&&n.parentNode.removeChild(n),t._cleanTipClass(),t.element.removeAttribute("aria-describedby"),p(t.element).trigger(t.constructor.Event.HIDDEN),null!==t._popper&&t._popper.destroy(),e&&e()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(We),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger.click=!1,this._activeTrigger[Ue]=!1,this._activeTrigger[Be]=!1,p(this.tip).hasClass(Me)){var o=g.getTransitionDurationFromElement(n);p(n).one(g.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){p(this.getTipElement()).addClass(Oe+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(p(e.querySelectorAll(".tooltip-inner")),this.getTitle()),p(e).removeClass(Me+" "+We)},e.setElementContent=function(e,t){"object"!=typeof t||!t.nodeType&&!t.jquery?this.config.html?(this.config.sanitize&&(t=De(t,this.config.whiteList,this.config.sanitizeFn)),e.html(t)):e.text(t):this.config.html?p(t).parent().is(e)||e.empty().append(t):e.text(p(t).text())},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e||(e="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),e},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:g.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},e._getAttachment=function(e){return Pe[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if("manual"!==e){var t=e===Be?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Be?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==e)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Ue:Be]=!0),p(t.getTipElement()).hasClass(We)||t._hoverState===Re?t._hoverState=Re:(clearTimeout(t._timeout),t._hoverState=Re,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===Re&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Ue:Be]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState="out",t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){"out"===t._hoverState&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){var t=p(this.element).data();return Object.keys(t).forEach(function(e){-1!==Le.indexOf(e)&&delete t[e]}),"number"==typeof(e=l({},this.constructor.Default,t,"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),g.typeCheckConfig(Ae,e,this.constructor.DefaultType),e.sanitize&&(e.template=De(e.template,e.whiteList,e.sanitizeFn)),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(je);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(p(e).removeClass(Me),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data(Ne),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data(Ne,e)),"string"==typeof n)){if(void 0===e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return qe}},{key:"NAME",get:function(){return Ae}},{key:"DATA_KEY",get:function(){return Ne}},{key:"Event",get:function(){return Fe}},{key:"EVENT_KEY",get:function(){return Ie}},{key:"DefaultType",get:function(){return He}}]),i}();p.fn[Ae]=Ke._jQueryInterface,p.fn[Ae].Constructor=Ke,p.fn[Ae].noConflict=function(){return p.fn[Ae]=ke,Ke._jQueryInterface};var $e="popover",Qe="bs.popover",Ve="."+Qe,ze=p.fn[$e],Ye="bs-popover",Xe=new RegExp("(^|\\s)"+Ye+"\\S+","g"),Ge=l({},Ke.Default,{placement:"right",trigger:"click",content:"",template:''}),Je=l({},Ke.DefaultType,{content:"(string|element|function)"}),Ze={HIDE:"hide"+Ve,HIDDEN:"hidden"+Ve,SHOW:"show"+Ve,SHOWN:"shown"+Ve,INSERTED:"inserted"+Ve,CLICK:"click"+Ve,FOCUSIN:"focusin"+Ve,FOCUSOUT:"focusout"+Ve,MOUSEENTER:"mouseenter"+Ve,MOUSELEAVE:"mouseleave"+Ve},et=function(e){var t,n;function i(){return e.apply(this,arguments)||this}n=e,(t=i).prototype=Object.create(n.prototype),(t.prototype.constructor=t).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(e){p(this.getTipElement()).addClass(Ye+"-"+e)},r.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},r.setContent=function(){var e=p(this.getTipElement());this.setElementContent(e.find(".popover-header"),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find(".popover-body"),t),e.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(Xe);null!==t&&0=this._offsets[r]&&(void 0===this._offsets[r+1]||e li > .active",wt=function(){function i(e){this._element=e}var e=i.prototype;return e.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p(this._element).hasClass(yt)||p(this._element).hasClass("disabled"))){var e,i,t=p(this._element).closest(".nav, .list-group")[0],r=g.getSelectorFromElement(this._element);if(t){var o="UL"===t.nodeName||"OL"===t.nodeName?bt:_t;i=(i=p.makeArray(p(t).find(o)))[i.length-1]}var s=p.Event(vt.HIDE,{relatedTarget:this._element}),a=p.Event(vt.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,t);var l=function(){var e=p.Event(vt.HIDDEN,{relatedTarget:n._element}),t=p.Event(vt.SHOWN,{relatedTarget:i});p(i).trigger(e),p(n._element).trigger(t)};e?this._activate(e,e.parentNode,l):l()}}},e.dispose=function(){p.removeData(this._element,pt),this._element=null},e._activate=function(e,t,n){var i=this,r=(!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?p(t).children(_t):p(t).find(bt))[0],o=n&&r&&p(r).hasClass("fade"),s=function(){return i._transitionComplete(e,r,n)};if(r&&o){var a=g.getTransitionDurationFromElement(r);p(r).removeClass("show").one(g.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},e._transitionComplete=function(e,t,n){if(t){p(t).removeClass(yt);var i=p(t.parentNode).find("> .dropdown-menu .active")[0];i&&p(i).removeClass(yt),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(p(e).addClass(yt),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),g.reflow(e),e.classList.contains("fade")&&e.classList.add("show"),e.parentNode&&p(e.parentNode).hasClass("dropdown-menu")){var r=p(e).closest(".dropdown")[0];if(r){var o=[].slice.call(r.querySelectorAll(".dropdown-toggle"));p(o).addClass(yt)}e.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(pt);if(t||(t=new i(this),e.data(pt,t)),"string"==typeof n){if(void 0===t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();p(document).on(vt.CLICK_DATA_API,'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',function(e){e.preventDefault(),wt._jQueryInterface.call(p(this),"show")}),p.fn.tab=wt._jQueryInterface,p.fn.tab.Constructor=wt,p.fn.tab.noConflict=function(){return p.fn.tab=mt,wt._jQueryInterface};var Et="toast",Tt="bs.toast",xt="."+Tt,Ct=p.fn[Et],St={CLICK_DISMISS:"click.dismiss"+xt,HIDE:"hide"+xt,HIDDEN:"hidden"+xt,SHOW:"show"+xt,SHOWN:"shown"+xt},Dt="show",At="showing",Nt={animation:"boolean",autohide:"boolean",delay:"number"},It={animation:!0,autohide:!0,delay:500},kt=function(){function i(e,t){this._element=e,this._config=this._getConfig(t),this._timeout=null,this._setListeners()}var e=i.prototype;return e.show=function(){var e=this;p(this._element).trigger(St.SHOW),this._config.animation&&this._element.classList.add("fade");var t=function(){e._element.classList.remove(At),e._element.classList.add(Dt),p(e._element).trigger(St.SHOWN),e._config.autohide&&e.hide()};if(this._element.classList.remove("hide"),this._element.classList.add(At),this._config.animation){var n=g.getTransitionDurationFromElement(this._element);p(this._element).one(g.TRANSITION_END,t).emulateTransitionEnd(n)}else t()},e.hide=function(e){var t=this;this._element.classList.contains(Dt)&&(p(this._element).trigger(St.HIDE),e?this._close():this._timeout=setTimeout(function(){t._close()},this._config.delay))},e.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(Dt)&&this._element.classList.remove(Dt),p(this._element).off(St.CLICK_DISMISS),p.removeData(this._element,Tt),this._element=null,this._config=null},e._getConfig=function(e){return e=l({},It,p(this._element).data(),"object"==typeof e&&e?e:{}),g.typeCheckConfig(Et,e,this.constructor.DefaultType),e},e._setListeners=function(){var e=this;p(this._element).on(St.CLICK_DISMISS,'[data-dismiss="toast"]',function(){return e.hide(!0)})},e._close=function(){var e=this,t=function(){e._element.classList.add("hide"),p(e._element).trigger(St.HIDDEN)};if(this._element.classList.remove(Dt),this._config.animation){var n=g.getTransitionDurationFromElement(this._element);p(this._element).one(g.TRANSITION_END,t).emulateTransitionEnd(n)}else t()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(Tt);if(t||(t=new i(this,"object"==typeof n&&n),e.data(Tt,t)),"string"==typeof n){if(void 0===t[n])throw new TypeError('No method named "'+n+'"');t[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"DefaultType",get:function(){return Nt}},{key:"Default",get:function(){return It}}]),i}();p.fn[Et]=kt._jQueryInterface,p.fn[Et].Constructor=kt,p.fn[Et].noConflict=function(){return p.fn[Et]=Ct,kt._jQueryInterface},function(){if(void 0===p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=p.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),e.Util=g,e.Alert=c,e.Button=E,e.Carousel=P,e.Collapse=Y,e.Dropdown=ce,e.Modal=Te,e.Popover=et,e.Scrollspy=dt,e.Tab=wt,e.Toast=kt,e.Tooltip=Ke,Object.defineProperty(e,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/community_server/webroot/js/ensurePassphrase.js b/community_server/webroot/js/ensurePassphrase.js deleted file mode 100644 index e2f7a98bb..000000000 --- a/community_server/webroot/js/ensurePassphrase.js +++ /dev/null @@ -1,1927 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],2:[function(require,module,exports){ -(function (setImmediate,clearImmediate){ -var nextTick = require('process/browser.js').nextTick; -var apply = Function.prototype.apply; -var slice = Array.prototype.slice; -var immediateIds = {}; -var nextImmediateId = 0; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { timeout.close(); }; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// That's not how node.js implements it but the exposed api is the same. -exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; -}; - -exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; -}; -}).call(this,require("timers").setImmediate,require("timers").clearImmediate) -},{"process/browser.js":1,"timers":2}],3:[function(require,module,exports){ -(function (global,setImmediate){ -new function() { - -function Vnode(tag, key, attrs0, children, text, dom) { - return {tag: tag, key: key, attrs: attrs0, children: children, text: text, dom: dom, domSize: undefined, state: {}, events: undefined, instance: undefined, skip: false} -} -Vnode.normalize = function(node) { - if (Array.isArray(node)) return Vnode("[", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined) - if (node != null && typeof node !== "object") return Vnode("#", undefined, undefined, node === false ? "" : node, undefined, undefined) - return node -} -Vnode.normalizeChildren = function normalizeChildren(children) { - for (var i = 0; i < children.length; i++) { - children[i] = Vnode.normalize(children[i]) - } - return children -} -var selectorParser = /(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g -var selectorCache = {} -function hyperscript(selector) { - if (selector == null || typeof selector !== "string" && typeof selector.view !== "function") { - throw Error("The selector must be either a string or a component."); - } - if (typeof selector === "string" && selectorCache[selector] === undefined) { - var match, tag, classes = [], attributes = {} - while (match = selectorParser.exec(selector)) { - var type = match[1], value = match[2] - if (type === "" && value !== "") tag = value - else if (type === "#") attributes.id = value - else if (type === ".") classes.push(value) - else if (match[3][0] === "[") { - var attrValue = match[6] - if (attrValue) attrValue = attrValue.replace(/\\(["'])/g, "$1").replace(/\\\\/g, "\\") - if (match[4] === "class") classes.push(attrValue) - else attributes[match[4]] = attrValue || true - } - } - if (classes.length > 0) attributes.className = classes.join(" ") - selectorCache[selector] = function(attrs, children) { - var hasAttrs = false, childList, text - var className = attrs.className || attrs.class - for (var key in attributes) attrs[key] = attributes[key] - if (className !== undefined) { - if (attrs.class !== undefined) { - attrs.class = undefined - attrs.className = className - } - if (attributes.className !== undefined) attrs.className = attributes.className + " " + className - } - for (var key in attrs) { - if (key !== "key") { - hasAttrs = true - break - } - } - if (Array.isArray(children) && children.length == 1 && children[0] != null && children[0].tag === "#") text = children[0].children - else childList = children - return Vnode(tag || "div", attrs.key, hasAttrs ? attrs : undefined, childList, text, undefined) - } - } - var attrs, children, childrenIndex - if (arguments[1] == null || typeof arguments[1] === "object" && arguments[1].tag === undefined && !Array.isArray(arguments[1])) { - attrs = arguments[1] - childrenIndex = 2 - } - else childrenIndex = 1 - if (arguments.length === childrenIndex + 1) { - children = Array.isArray(arguments[childrenIndex]) ? arguments[childrenIndex] : [arguments[childrenIndex]] - } - else { - children = [] - for (var i = childrenIndex; i < arguments.length; i++) children.push(arguments[i]) - } - if (typeof selector === "string") return selectorCache[selector](attrs || {}, Vnode.normalizeChildren(children)) - return Vnode(selector, attrs && attrs.key, attrs || {}, Vnode.normalizeChildren(children), undefined, undefined) -} -hyperscript.trust = function(html) { - if (html == null) html = "" - return Vnode("<", undefined, undefined, html, undefined, undefined) -} -hyperscript.fragment = function(attrs1, children) { - return Vnode("[", attrs1.key, attrs1, Vnode.normalizeChildren(children), undefined, undefined) -} -var m = hyperscript -/** @constructor */ -var PromisePolyfill = function(executor) { - if (!(this instanceof PromisePolyfill)) throw new Error("Promise must be called with `new`") - if (typeof executor !== "function") throw new TypeError("executor must be a function") - var self = this, resolvers = [], rejectors = [], resolveCurrent = handler(resolvers, true), rejectCurrent = handler(rejectors, false) - var instance = self._instance = {resolvers: resolvers, rejectors: rejectors} - var callAsync = typeof setImmediate === "function" ? setImmediate : setTimeout - function handler(list, shouldAbsorb) { - return function execute(value) { - var then - try { - if (shouldAbsorb && value != null && (typeof value === "object" || typeof value === "function") && typeof (then = value.then) === "function") { - if (value === self) throw new TypeError("Promise can't be resolved w/ itself") - executeOnce(then.bind(value)) - } - else { - callAsync(function() { - if (!shouldAbsorb && list.length === 0) console.error("Possible unhandled promise rejection:", value) - for (var i = 0; i < list.length; i++) list[i](value) - resolvers.length = 0, rejectors.length = 0 - instance.state = shouldAbsorb - instance.retry = function() {execute(value)} - }) - } - } - catch (e) { - rejectCurrent(e) - } - } - } - function executeOnce(then) { - var runs = 0 - function run(fn) { - return function(value) { - if (runs++ > 0) return - fn(value) - } - } - var onerror = run(rejectCurrent) - try {then(run(resolveCurrent), onerror)} catch (e) {onerror(e)} - } - executeOnce(executor) -} -PromisePolyfill.prototype.then = function(onFulfilled, onRejection) { - var self = this, instance = self._instance - function handle(callback, list, next, state) { - list.push(function(value) { - if (typeof callback !== "function") next(value) - else try {resolveNext(callback(value))} catch (e) {if (rejectNext) rejectNext(e)} - }) - if (typeof instance.retry === "function" && state === instance.state) instance.retry() - } - var resolveNext, rejectNext - var promise = new PromisePolyfill(function(resolve, reject) {resolveNext = resolve, rejectNext = reject}) - handle(onFulfilled, instance.resolvers, resolveNext, true), handle(onRejection, instance.rejectors, rejectNext, false) - return promise -} -PromisePolyfill.prototype.catch = function(onRejection) { - return this.then(null, onRejection) -} -PromisePolyfill.resolve = function(value) { - if (value instanceof PromisePolyfill) return value - return new PromisePolyfill(function(resolve) {resolve(value)}) -} -PromisePolyfill.reject = function(value) { - return new PromisePolyfill(function(resolve, reject) {reject(value)}) -} -PromisePolyfill.all = function(list) { - return new PromisePolyfill(function(resolve, reject) { - var total = list.length, count = 0, values = [] - if (list.length === 0) resolve([]) - else for (var i = 0; i < list.length; i++) { - (function(i) { - function consume(value) { - count++ - values[i] = value - if (count === total) resolve(values) - } - if (list[i] != null && (typeof list[i] === "object" || typeof list[i] === "function") && typeof list[i].then === "function") { - list[i].then(consume, reject) - } - else consume(list[i]) - })(i) - } - }) -} -PromisePolyfill.race = function(list) { - return new PromisePolyfill(function(resolve, reject) { - for (var i = 0; i < list.length; i++) { - list[i].then(resolve, reject) - } - }) -} -if (typeof window !== "undefined") { - if (typeof window.Promise === "undefined") window.Promise = PromisePolyfill - var PromisePolyfill = window.Promise -} else if (typeof global !== "undefined") { - if (typeof global.Promise === "undefined") global.Promise = PromisePolyfill - var PromisePolyfill = global.Promise -} else { -} -var buildQueryString = function(object) { - if (Object.prototype.toString.call(object) !== "[object Object]") return "" - var args = [] - for (var key0 in object) { - destructure(key0, object[key0]) - } - return args.join("&") - function destructure(key0, value) { - if (Array.isArray(value)) { - for (var i = 0; i < value.length; i++) { - destructure(key0 + "[" + i + "]", value[i]) - } - } - else if (Object.prototype.toString.call(value) === "[object Object]") { - for (var i in value) { - destructure(key0 + "[" + i + "]", value[i]) - } - } - else args.push(encodeURIComponent(key0) + (value != null && value !== "" ? "=" + encodeURIComponent(value) : "")) - } -} -var _8 = function($window, Promise) { - var callbackCount = 0 - var oncompletion - function setCompletionCallback(callback) {oncompletion = callback} - function finalizer() { - var count = 0 - function complete() {if (--count === 0 && typeof oncompletion === "function") oncompletion()} - return function finalize(promise0) { - var then0 = promise0.then - promise0.then = function() { - count++ - var next = then0.apply(promise0, arguments) - next.then(complete, function(e) { - complete() - if (count === 0) throw e - }) - return finalize(next) - } - return promise0 - } - } - function normalize(args, extra) { - if (typeof args === "string") { - var url = args - args = extra || {} - if (args.url == null) args.url = url - } - return args - } - function request(args, extra) { - var finalize = finalizer() - args = normalize(args, extra) - var promise0 = new Promise(function(resolve, reject) { - if (args.method == null) args.method = "GET" - args.method = args.method.toUpperCase() - var useBody = typeof args.useBody === "boolean" ? args.useBody : args.method !== "GET" && args.method !== "TRACE" - if (typeof args.serialize !== "function") args.serialize = typeof FormData !== "undefined" && args.data instanceof FormData ? function(value) {return value} : JSON.stringify - if (typeof args.deserialize !== "function") args.deserialize = deserialize - if (typeof args.extract !== "function") args.extract = extract - args.url = interpolate(args.url, args.data) - if (useBody) args.data = args.serialize(args.data) - else args.url = assemble(args.url, args.data) - var xhr = new $window.XMLHttpRequest() - xhr.open(args.method, args.url, typeof args.async === "boolean" ? args.async : true, typeof args.user === "string" ? args.user : undefined, typeof args.password === "string" ? args.password : undefined) - if (args.serialize === JSON.stringify && useBody) { - xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8") - } - if (args.deserialize === deserialize) { - xhr.setRequestHeader("Accept", "application/json, text/*") - } - if (args.withCredentials) xhr.withCredentials = args.withCredentials - for (var key in args.headers) if ({}.hasOwnProperty.call(args.headers, key)) { - xhr.setRequestHeader(key, args.headers[key]) - } - if (typeof args.config === "function") xhr = args.config(xhr, args) || xhr - xhr.onreadystatechange = function() { - // Don't throw errors on xhr.abort(). XMLHttpRequests ends up in a state of - // xhr.status == 0 and xhr.readyState == 4 if aborted after open, but before completion. - if (xhr.status && xhr.readyState === 4) { - try { - var response = (args.extract !== extract) ? args.extract(xhr, args) : args.deserialize(args.extract(xhr, args)) - if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { - resolve(cast(args.type, response)) - } - else { - var error = new Error(xhr.responseText) - for (var key in response) error[key] = response[key] - reject(error) - } - } - catch (e) { - reject(e) - } - } - } - if (useBody && (args.data != null)) xhr.send(args.data) - else xhr.send() - }) - return args.background === true ? promise0 : finalize(promise0) - } - function jsonp(args, extra) { - var finalize = finalizer() - args = normalize(args, extra) - var promise0 = new Promise(function(resolve, reject) { - var callbackName = args.callbackName || "_mithril_" + Math.round(Math.random() * 1e16) + "_" + callbackCount++ - var script = $window.document.createElement("script") - $window[callbackName] = function(data) { - script.parentNode.removeChild(script) - resolve(cast(args.type, data)) - delete $window[callbackName] - } - script.onerror = function() { - script.parentNode.removeChild(script) - reject(new Error("JSONP request failed")) - delete $window[callbackName] - } - if (args.data == null) args.data = {} - args.url = interpolate(args.url, args.data) - args.data[args.callbackKey || "callback"] = callbackName - script.src = assemble(args.url, args.data) - $window.document.documentElement.appendChild(script) - }) - return args.background === true? promise0 : finalize(promise0) - } - function interpolate(url, data) { - if (data == null) return url - var tokens = url.match(/:[^\/]+/gi) || [] - for (var i = 0; i < tokens.length; i++) { - var key = tokens[i].slice(1) - if (data[key] != null) { - url = url.replace(tokens[i], data[key]) - } - } - return url - } - function assemble(url, data) { - var querystring = buildQueryString(data) - if (querystring !== "") { - var prefix = url.indexOf("?") < 0 ? "?" : "&" - url += prefix + querystring - } - return url - } - function deserialize(data) { - try {return data !== "" ? JSON.parse(data) : null} - catch (e) {throw new Error(data)} - } - function extract(xhr) {return xhr.responseText} - function cast(type0, data) { - if (typeof type0 === "function") { - if (Array.isArray(data)) { - for (var i = 0; i < data.length; i++) { - data[i] = new type0(data[i]) - } - } - else return new type0(data) - } - return data - } - return {request: request, jsonp: jsonp, setCompletionCallback: setCompletionCallback} -} -var requestService = _8(window, PromisePolyfill) -var coreRenderer = function($window) { - var $doc = $window.document - var $emptyFragment = $doc.createDocumentFragment() - var onevent - function setEventCallback(callback) {return onevent = callback} - //create - function createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) { - for (var i = start; i < end; i++) { - var vnode = vnodes[i] - if (vnode != null) { - insertNode(parent, createNode(vnode, hooks, ns), nextSibling) - } - } - } - function createNode(vnode, hooks, ns) { - var tag = vnode.tag - if (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks) - if (typeof tag === "string") { - switch (tag) { - case "#": return createText(vnode) - case "<": return createHTML(vnode) - case "[": return createFragment(vnode, hooks, ns) - default: return createElement(vnode, hooks, ns) - } - } - else return createComponent(vnode, hooks, ns) - } - function createText(vnode) { - return vnode.dom = $doc.createTextNode(vnode.children) - } - function createHTML(vnode) { - var match1 = vnode.children.match(/^\s*?<(\w+)/im) || [] - var parent = {caption: "table", thead: "table", tbody: "table", tfoot: "table", tr: "tbody", th: "tr", td: "tr", colgroup: "table", col: "colgroup"}[match1[1]] || "div" - var temp = $doc.createElement(parent) - temp.innerHTML = vnode.children - vnode.dom = temp.firstChild - vnode.domSize = temp.childNodes.length - var fragment = $doc.createDocumentFragment() - var child - while (child = temp.firstChild) { - fragment.appendChild(child) - } - return fragment - } - function createFragment(vnode, hooks, ns) { - var fragment = $doc.createDocumentFragment() - if (vnode.children != null) { - var children = vnode.children - createNodes(fragment, children, 0, children.length, hooks, null, ns) - } - vnode.dom = fragment.firstChild - vnode.domSize = fragment.childNodes.length - return fragment - } - function createElement(vnode, hooks, ns) { - var tag = vnode.tag - switch (vnode.tag) { - case "svg": ns = "http://www.w3.org/2000/svg"; break - case "math": ns = "http://www.w3.org/1998/Math/MathML"; break - } - var attrs2 = vnode.attrs - var is = attrs2 && attrs2.is - var element = ns ? - is ? $doc.createElementNS(ns, tag, {is: is}) : $doc.createElementNS(ns, tag) : - is ? $doc.createElement(tag, {is: is}) : $doc.createElement(tag) - vnode.dom = element - if (attrs2 != null) { - setAttrs(vnode, attrs2, ns) - } - if (vnode.attrs != null && vnode.attrs.contenteditable != null) { - setContentEditable(vnode) - } - else { - if (vnode.text != null) { - if (vnode.text !== "") element.textContent = vnode.text - else vnode.children = [Vnode("#", undefined, undefined, vnode.text, undefined, undefined)] - } - if (vnode.children != null) { - var children = vnode.children - createNodes(element, children, 0, children.length, hooks, null, ns) - setLateAttrs(vnode) - } - } - return element - } - function createComponent(vnode, hooks, ns) { - vnode.state = Object.create(vnode.tag) - var view = vnode.tag.view - if (view.reentrantLock != null) return $emptyFragment - view.reentrantLock = true - initLifecycle(vnode.tag, vnode, hooks) - vnode.instance = Vnode.normalize(view.call(vnode.state, vnode)) - view.reentrantLock = null - if (vnode.instance != null) { - if (vnode.instance === vnode) throw Error("A view cannot return the vnode it received as arguments") - var element = createNode(vnode.instance, hooks, ns) - vnode.dom = vnode.instance.dom - vnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0 - return element - } - else { - vnode.domSize = 0 - return $emptyFragment - } - } - //update - function updateNodes(parent, old, vnodes, hooks, nextSibling, ns) { - if (old === vnodes || old == null && vnodes == null) return - else if (old == null) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, undefined) - else if (vnodes == null) removeNodes(old, 0, old.length, vnodes) - else { - if (old.length === vnodes.length) { - var isUnkeyed = false - for (var i = 0; i < vnodes.length; i++) { - if (vnodes[i] != null && old[i] != null) { - isUnkeyed = vnodes[i].key == null && old[i].key == null - break - } - } - if (isUnkeyed) { - for (var i = 0; i < old.length; i++) { - if (old[i] === vnodes[i]) continue - else if (old[i] == null && vnodes[i] != null) insertNode(parent, createNode(vnodes[i], hooks, ns), getNextSibling(old, i + 1, nextSibling)) - else if (vnodes[i] == null) removeNodes(old, i, i + 1, vnodes) - else updateNode(parent, old[i], vnodes[i], hooks, getNextSibling(old, i + 1, nextSibling), false, ns) - } - return - } - } - var recycling = isRecyclable(old, vnodes) - if (recycling) old = old.concat(old.pool) - var oldStart = 0, start = 0, oldEnd = old.length - 1, end = vnodes.length - 1, map - while (oldEnd >= oldStart && end >= start) { - var o = old[oldStart], v = vnodes[start] - if (o === v && !recycling) oldStart++, start++ - else if (o == null) oldStart++ - else if (v == null) start++ - else if (o.key === v.key) { - oldStart++, start++ - updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), recycling, ns) - if (recycling && o.tag === v.tag) insertNode(parent, toFragment(o), nextSibling) - } - else { - var o = old[oldEnd] - if (o === v && !recycling) oldEnd--, start++ - else if (o == null) oldEnd-- - else if (v == null) start++ - else if (o.key === v.key) { - updateNode(parent, o, v, hooks, getNextSibling(old, oldEnd + 1, nextSibling), recycling, ns) - if (recycling || start < end) insertNode(parent, toFragment(o), getNextSibling(old, oldStart, nextSibling)) - oldEnd--, start++ - } - else break - } - } - while (oldEnd >= oldStart && end >= start) { - var o = old[oldEnd], v = vnodes[end] - if (o === v && !recycling) oldEnd--, end-- - else if (o == null) oldEnd-- - else if (v == null) end-- - else if (o.key === v.key) { - updateNode(parent, o, v, hooks, getNextSibling(old, oldEnd + 1, nextSibling), recycling, ns) - if (recycling && o.tag === v.tag) insertNode(parent, toFragment(o), nextSibling) - if (o.dom != null) nextSibling = o.dom - oldEnd--, end-- - } - else { - if (!map) map = getKeyMap(old, oldEnd) - if (v != null) { - var oldIndex = map[v.key] - if (oldIndex != null) { - var movable = old[oldIndex] - updateNode(parent, movable, v, hooks, getNextSibling(old, oldEnd + 1, nextSibling), recycling, ns) - insertNode(parent, toFragment(movable), nextSibling) - old[oldIndex].skip = true - if (movable.dom != null) nextSibling = movable.dom - } - else { - var dom = createNode(v, hooks, undefined) - insertNode(parent, dom, nextSibling) - nextSibling = dom - } - } - end-- - } - if (end < start) break - } - createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns) - removeNodes(old, oldStart, oldEnd + 1, vnodes) - } - } - function updateNode(parent, old, vnode, hooks, nextSibling, recycling, ns) { - var oldTag = old.tag, tag = vnode.tag - if (oldTag === tag) { - vnode.state = old.state - vnode.events = old.events - if (shouldUpdate(vnode, old)) return - if (vnode.attrs != null) { - updateLifecycle(vnode.attrs, vnode, hooks, recycling) - } - if (typeof oldTag === "string") { - switch (oldTag) { - case "#": updateText(old, vnode); break - case "<": updateHTML(parent, old, vnode, nextSibling); break - case "[": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break - default: updateElement(old, vnode, hooks, ns) - } - } - else updateComponent(parent, old, vnode, hooks, nextSibling, recycling, ns) - } - else { - removeNode(old, null) - insertNode(parent, createNode(vnode, hooks, ns), nextSibling) - } - } - function updateText(old, vnode) { - if (old.children.toString() !== vnode.children.toString()) { - old.dom.nodeValue = vnode.children - } - vnode.dom = old.dom - } - function updateHTML(parent, old, vnode, nextSibling) { - if (old.children !== vnode.children) { - toFragment(old) - insertNode(parent, createHTML(vnode), nextSibling) - } - else vnode.dom = old.dom, vnode.domSize = old.domSize - } - function updateFragment(parent, old, vnode, hooks, nextSibling, ns) { - updateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns) - var domSize = 0, children = vnode.children - vnode.dom = null - if (children != null) { - for (var i = 0; i < children.length; i++) { - var child = children[i] - if (child != null && child.dom != null) { - if (vnode.dom == null) vnode.dom = child.dom - domSize += child.domSize || 1 - } - } - if (domSize !== 1) vnode.domSize = domSize - } - } - function updateElement(old, vnode, hooks, ns) { - var element = vnode.dom = old.dom - switch (vnode.tag) { - case "svg": ns = "http://www.w3.org/2000/svg"; break - case "math": ns = "http://www.w3.org/1998/Math/MathML"; break - } - if (vnode.tag === "textarea") { - if (vnode.attrs == null) vnode.attrs = {} - if (vnode.text != null) { - vnode.attrs.value = vnode.text //FIXME handle0 multiple children - vnode.text = undefined - } - } - updateAttrs(vnode, old.attrs, vnode.attrs, ns) - if (vnode.attrs != null && vnode.attrs.contenteditable != null) { - setContentEditable(vnode) - } - else if (old.text != null && vnode.text != null && vnode.text !== "") { - if (old.text.toString() !== vnode.text.toString()) old.dom.firstChild.nodeValue = vnode.text - } - else { - if (old.text != null) old.children = [Vnode("#", undefined, undefined, old.text, undefined, old.dom.firstChild)] - if (vnode.text != null) vnode.children = [Vnode("#", undefined, undefined, vnode.text, undefined, undefined)] - updateNodes(element, old.children, vnode.children, hooks, null, ns) - } - } - function updateComponent(parent, old, vnode, hooks, nextSibling, recycling, ns) { - vnode.instance = Vnode.normalize(vnode.tag.view.call(vnode.state, vnode)) - updateLifecycle(vnode.tag, vnode, hooks, recycling) - if (vnode.instance != null) { - if (old.instance == null) insertNode(parent, createNode(vnode.instance, hooks, ns), nextSibling) - else updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, recycling, ns) - vnode.dom = vnode.instance.dom - vnode.domSize = vnode.instance.domSize - } - else if (old.instance != null) { - removeNode(old.instance, null) - vnode.dom = undefined - vnode.domSize = 0 - } - else { - vnode.dom = old.dom - vnode.domSize = old.domSize - } - } - function isRecyclable(old, vnodes) { - if (old.pool != null && Math.abs(old.pool.length - vnodes.length) <= Math.abs(old.length - vnodes.length)) { - var oldChildrenLength = old[0] && old[0].children && old[0].children.length || 0 - var poolChildrenLength = old.pool[0] && old.pool[0].children && old.pool[0].children.length || 0 - var vnodesChildrenLength = vnodes[0] && vnodes[0].children && vnodes[0].children.length || 0 - if (Math.abs(poolChildrenLength - vnodesChildrenLength) <= Math.abs(oldChildrenLength - vnodesChildrenLength)) { - return true - } - } - return false - } - function getKeyMap(vnodes, end) { - var map = {}, i = 0 - for (var i = 0; i < end; i++) { - var vnode = vnodes[i] - if (vnode != null) { - var key2 = vnode.key - if (key2 != null) map[key2] = i - } - } - return map - } - function toFragment(vnode) { - var count0 = vnode.domSize - if (count0 != null || vnode.dom == null) { - var fragment = $doc.createDocumentFragment() - if (count0 > 0) { - var dom = vnode.dom - while (--count0) fragment.appendChild(dom.nextSibling) - fragment.insertBefore(dom, fragment.firstChild) - } - return fragment - } - else return vnode.dom - } - function getNextSibling(vnodes, i, nextSibling) { - for (; i < vnodes.length; i++) { - if (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom - } - return nextSibling - } - function insertNode(parent, dom, nextSibling) { - if (nextSibling && nextSibling.parentNode) parent.insertBefore(dom, nextSibling) - else parent.appendChild(dom) - } - function setContentEditable(vnode) { - var children = vnode.children - if (children != null && children.length === 1 && children[0].tag === "<") { - var content = children[0].children - if (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content - } - else if (vnode.text != null || children != null && children.length !== 0) throw new Error("Child node of a contenteditable must be trusted") - } - //remove - function removeNodes(vnodes, start, end, context) { - for (var i = start; i < end; i++) { - var vnode = vnodes[i] - if (vnode != null) { - if (vnode.skip) vnode.skip = false - else removeNode(vnode, context) - } - } - } - function removeNode(vnode, context) { - var expected = 1, called = 0 - if (vnode.attrs && vnode.attrs.onbeforeremove) { - var result = vnode.attrs.onbeforeremove.call(vnode.state, vnode) - if (result != null && typeof result.then === "function") { - expected++ - result.then(continuation, continuation) - } - } - if (typeof vnode.tag !== "string" && vnode.tag.onbeforeremove) { - var result = vnode.tag.onbeforeremove.call(vnode.state, vnode) - if (result != null && typeof result.then === "function") { - expected++ - result.then(continuation, continuation) - } - } - continuation() - function continuation() { - if (++called === expected) { - onremove(vnode) - if (vnode.dom) { - var count0 = vnode.domSize || 1 - if (count0 > 1) { - var dom = vnode.dom - while (--count0) { - removeNodeFromDOM(dom.nextSibling) - } - } - removeNodeFromDOM(vnode.dom) - if (context != null && vnode.domSize == null && !hasIntegrationMethods(vnode.attrs) && typeof vnode.tag === "string") { //TODO test custom elements - if (!context.pool) context.pool = [vnode] - else context.pool.push(vnode) - } - } - } - } - } - function removeNodeFromDOM(node) { - var parent = node.parentNode - if (parent != null) parent.removeChild(node) - } - function onremove(vnode) { - if (vnode.attrs && vnode.attrs.onremove) vnode.attrs.onremove.call(vnode.state, vnode) - if (typeof vnode.tag !== "string" && vnode.tag.onremove) vnode.tag.onremove.call(vnode.state, vnode) - if (vnode.instance != null) onremove(vnode.instance) - else { - var children = vnode.children - if (Array.isArray(children)) { - for (var i = 0; i < children.length; i++) { - var child = children[i] - if (child != null) onremove(child) - } - } - } - } - //attrs2 - function setAttrs(vnode, attrs2, ns) { - for (var key2 in attrs2) { - setAttr(vnode, key2, null, attrs2[key2], ns) - } - } - function setAttr(vnode, key2, old, value, ns) { - var element = vnode.dom - if (key2 === "key" || key2 === "is" || (old === value && !isFormAttribute(vnode, key2)) && typeof value !== "object" || typeof value === "undefined" || isLifecycleMethod(key2)) return - var nsLastIndex = key2.indexOf(":") - if (nsLastIndex > -1 && key2.substr(0, nsLastIndex) === "xlink") { - element.setAttributeNS("http://www.w3.org/1999/xlink", key2.slice(nsLastIndex + 1), value) - } - else if (key2[0] === "o" && key2[1] === "n" && typeof value === "function") updateEvent(vnode, key2, value) - else if (key2 === "style") updateStyle(element, old, value) - else if (key2 in element && !isAttribute(key2) && ns === undefined && !isCustomElement(vnode)) { - //setting input[value] to same value by typing on focused element moves cursor to end in Chrome - if (vnode.tag === "input" && key2 === "value" && vnode.dom.value === value && vnode.dom === $doc.activeElement) return - //setting select[value] to same value while having select open blinks select dropdown in Chrome - if (vnode.tag === "select" && key2 === "value" && vnode.dom.value === value && vnode.dom === $doc.activeElement) return - //setting option[value] to same value while having select open blinks select dropdown in Chrome - if (vnode.tag === "option" && key2 === "value" && vnode.dom.value === value) return - element[key2] = value - } - else { - if (typeof value === "boolean") { - if (value) element.setAttribute(key2, "") - else element.removeAttribute(key2) - } - else element.setAttribute(key2 === "className" ? "class" : key2, value) - } - } - function setLateAttrs(vnode) { - var attrs2 = vnode.attrs - if (vnode.tag === "select" && attrs2 != null) { - if ("value" in attrs2) setAttr(vnode, "value", null, attrs2.value, undefined) - if ("selectedIndex" in attrs2) setAttr(vnode, "selectedIndex", null, attrs2.selectedIndex, undefined) - } - } - function updateAttrs(vnode, old, attrs2, ns) { - if (attrs2 != null) { - for (var key2 in attrs2) { - setAttr(vnode, key2, old && old[key2], attrs2[key2], ns) - } - } - if (old != null) { - for (var key2 in old) { - if (attrs2 == null || !(key2 in attrs2)) { - if (key2 === "className") key2 = "class" - if (key2[0] === "o" && key2[1] === "n" && !isLifecycleMethod(key2)) updateEvent(vnode, key2, undefined) - else if (key2 !== "key") vnode.dom.removeAttribute(key2) - } - } - } - } - function isFormAttribute(vnode, attr) { - return attr === "value" || attr === "checked" || attr === "selectedIndex" || attr === "selected" && vnode.dom === $doc.activeElement - } - function isLifecycleMethod(attr) { - return attr === "oninit" || attr === "oncreate" || attr === "onupdate" || attr === "onremove" || attr === "onbeforeremove" || attr === "onbeforeupdate" - } - function isAttribute(attr) { - return attr === "href" || attr === "list" || attr === "form" || attr === "width" || attr === "height"// || attr === "type" - } - function isCustomElement(vnode){ - return vnode.attrs.is || vnode.tag.indexOf("-") > -1 - } - function hasIntegrationMethods(source) { - return source != null && (source.oncreate || source.onupdate || source.onbeforeremove || source.onremove) - } - //style - function updateStyle(element, old, style) { - if (old === style) element.style.cssText = "", old = null - if (style == null) element.style.cssText = "" - else if (typeof style === "string") element.style.cssText = style - else { - if (typeof old === "string") element.style.cssText = "" - for (var key2 in style) { - element.style[key2] = style[key2] - } - if (old != null && typeof old !== "string") { - for (var key2 in old) { - if (!(key2 in style)) element.style[key2] = "" - } - } - } - } - //event - function updateEvent(vnode, key2, value) { - var element = vnode.dom - var callback = typeof onevent !== "function" ? value : function(e) { - var result = value.call(element, e) - onevent.call(element, e) - return result - } - if (key2 in element) element[key2] = typeof value === "function" ? callback : null - else { - var eventName = key2.slice(2) - if (vnode.events === undefined) vnode.events = {} - if (vnode.events[key2] === callback) return - if (vnode.events[key2] != null) element.removeEventListener(eventName, vnode.events[key2], false) - if (typeof value === "function") { - vnode.events[key2] = callback - element.addEventListener(eventName, vnode.events[key2], false) - } - } - } - //lifecycle - function initLifecycle(source, vnode, hooks) { - if (typeof source.oninit === "function") source.oninit.call(vnode.state, vnode) - if (typeof source.oncreate === "function") hooks.push(source.oncreate.bind(vnode.state, vnode)) - } - function updateLifecycle(source, vnode, hooks, recycling) { - if (recycling) initLifecycle(source, vnode, hooks) - else if (typeof source.onupdate === "function") hooks.push(source.onupdate.bind(vnode.state, vnode)) - } - function shouldUpdate(vnode, old) { - var forceVnodeUpdate, forceComponentUpdate - if (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === "function") forceVnodeUpdate = vnode.attrs.onbeforeupdate.call(vnode.state, vnode, old) - if (typeof vnode.tag !== "string" && typeof vnode.tag.onbeforeupdate === "function") forceComponentUpdate = vnode.tag.onbeforeupdate.call(vnode.state, vnode, old) - if (!(forceVnodeUpdate === undefined && forceComponentUpdate === undefined) && !forceVnodeUpdate && !forceComponentUpdate) { - vnode.dom = old.dom - vnode.domSize = old.domSize - vnode.instance = old.instance - return true - } - return false - } - function render(dom, vnodes) { - if (!dom) throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.") - var hooks = [] - var active = $doc.activeElement - // First time0 rendering into a node clears it out - if (dom.vnodes == null) dom.textContent = "" - if (!Array.isArray(vnodes)) vnodes = [vnodes] - updateNodes(dom, dom.vnodes, Vnode.normalizeChildren(vnodes), hooks, null, undefined) - dom.vnodes = vnodes - for (var i = 0; i < hooks.length; i++) hooks[i]() - if ($doc.activeElement !== active) active.focus() - } - return {render: render, setEventCallback: setEventCallback} -} -function throttle(callback) { - //60fps translates to 16.6ms, round it down since setTimeout requires int - var time = 16 - var last = 0, pending = null - var timeout = typeof requestAnimationFrame === "function" ? requestAnimationFrame : setTimeout - return function() { - var now = Date.now() - if (last === 0 || now - last >= time) { - last = now - callback() - } - else if (pending === null) { - pending = timeout(function() { - pending = null - callback() - last = Date.now() - }, time - (now - last)) - } - } -} -var _11 = function($window) { - var renderService = coreRenderer($window) - renderService.setEventCallback(function(e) { - if (e.redraw !== false) redraw() - }) - - var callbacks = [] - function subscribe(key1, callback) { - unsubscribe(key1) - callbacks.push(key1, throttle(callback)) - } - function unsubscribe(key1) { - var index = callbacks.indexOf(key1) - if (index > -1) callbacks.splice(index, 2) - } - function redraw() { - for (var i = 1; i < callbacks.length; i += 2) { - callbacks[i]() - } - } - return {subscribe: subscribe, unsubscribe: unsubscribe, redraw: redraw, render: renderService.render} -} -var redrawService = _11(window) -requestService.setCompletionCallback(redrawService.redraw) -var _16 = function(redrawService0) { - return function(root, component) { - if (component === null) { - redrawService0.render(root, []) - redrawService0.unsubscribe(root) - return - } - - if (component.view == null) throw new Error("m.mount(element, component) expects a component, not a vnode") - - var run0 = function() { - redrawService0.render(root, Vnode(component)) - } - redrawService0.subscribe(root, run0) - redrawService0.redraw() - } -} -m.mount = _16(redrawService) -var Promise = PromisePolyfill -var parseQueryString = function(string) { - if (string === "" || string == null) return {} - if (string.charAt(0) === "?") string = string.slice(1) - var entries = string.split("&"), data0 = {}, counters = {} - for (var i = 0; i < entries.length; i++) { - var entry = entries[i].split("=") - var key5 = decodeURIComponent(entry[0]) - var value = entry.length === 2 ? decodeURIComponent(entry[1]) : "" - if (value === "true") value = true - else if (value === "false") value = false - var levels = key5.split(/\]\[?|\[/) - var cursor = data0 - if (key5.indexOf("[") > -1) levels.pop() - for (var j = 0; j < levels.length; j++) { - var level = levels[j], nextLevel = levels[j + 1] - var isNumber = nextLevel == "" || !isNaN(parseInt(nextLevel, 10)) - var isValue = j === levels.length - 1 - if (level === "") { - var key5 = levels.slice(0, j).join() - if (counters[key5] == null) counters[key5] = 0 - level = counters[key5]++ - } - if (cursor[level] == null) { - cursor[level] = isValue ? value : isNumber ? [] : {} - } - cursor = cursor[level] - } - } - return data0 -} -var coreRouter = function($window) { - var supportsPushState = typeof $window.history.pushState === "function" - var callAsync0 = typeof setImmediate === "function" ? setImmediate : setTimeout - function normalize1(fragment0) { - var data = $window.location[fragment0].replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponent) - if (fragment0 === "pathname" && data[0] !== "/") data = "/" + data - return data - } - var asyncId - function debounceAsync(callback0) { - return function() { - if (asyncId != null) return - asyncId = callAsync0(function() { - asyncId = null - callback0() - }) - } - } - function parsePath(path, queryData, hashData) { - var queryIndex = path.indexOf("?") - var hashIndex = path.indexOf("#") - var pathEnd = queryIndex > -1 ? queryIndex : hashIndex > -1 ? hashIndex : path.length - if (queryIndex > -1) { - var queryEnd = hashIndex > -1 ? hashIndex : path.length - var queryParams = parseQueryString(path.slice(queryIndex + 1, queryEnd)) - for (var key4 in queryParams) queryData[key4] = queryParams[key4] - } - if (hashIndex > -1) { - var hashParams = parseQueryString(path.slice(hashIndex + 1)) - for (var key4 in hashParams) hashData[key4] = hashParams[key4] - } - return path.slice(0, pathEnd) - } - var router = {prefix: "#!"} - router.getPath = function() { - var type2 = router.prefix.charAt(0) - switch (type2) { - case "#": return normalize1("hash").slice(router.prefix.length) - case "?": return normalize1("search").slice(router.prefix.length) + normalize1("hash") - default: return normalize1("pathname").slice(router.prefix.length) + normalize1("search") + normalize1("hash") - } - } - router.setPath = function(path, data, options) { - var queryData = {}, hashData = {} - path = parsePath(path, queryData, hashData) - if (data != null) { - for (var key4 in data) queryData[key4] = data[key4] - path = path.replace(/:([^\/]+)/g, function(match2, token) { - delete queryData[token] - return data[token] - }) - } - var query = buildQueryString(queryData) - if (query) path += "?" + query - var hash = buildQueryString(hashData) - if (hash) path += "#" + hash - if (supportsPushState) { - var state = options ? options.state : null - var title = options ? options.title : null - $window.onpopstate() - if (options && options.replace) $window.history.replaceState(state, title, router.prefix + path) - else $window.history.pushState(state, title, router.prefix + path) - } - else $window.location.href = router.prefix + path - } - router.defineRoutes = function(routes, resolve, reject) { - function resolveRoute() { - var path = router.getPath() - var params = {} - var pathname = parsePath(path, params, params) - - var state = $window.history.state - if (state != null) { - for (var k in state) params[k] = state[k] - } - for (var route0 in routes) { - var matcher = new RegExp("^" + route0.replace(/:[^\/]+?\.{3}/g, "(.*?)").replace(/:[^\/]+/g, "([^\\/]+)") + "\/?$") - if (matcher.test(pathname)) { - pathname.replace(matcher, function() { - var keys = route0.match(/:[^\/]+/g) || [] - var values = [].slice.call(arguments, 1, -2) - for (var i = 0; i < keys.length; i++) { - params[keys[i].replace(/:|\./g, "")] = decodeURIComponent(values[i]) - } - resolve(routes[route0], params, path, route0) - }) - return - } - } - reject(path, params) - } - - if (supportsPushState) $window.onpopstate = debounceAsync(resolveRoute) - else if (router.prefix.charAt(0) === "#") $window.onhashchange = resolveRoute - resolveRoute() - } - - return router -} -var _20 = function($window, redrawService0) { - var routeService = coreRouter($window) - var identity = function(v) {return v} - var render1, component, attrs3, currentPath, lastUpdate - var route = function(root, defaultRoute, routes) { - if (root == null) throw new Error("Ensure the DOM element that was passed to `m.route` is not undefined") - var run1 = function() { - if (render1 != null) redrawService0.render(root, render1(Vnode(component, attrs3.key, attrs3))) - } - var bail = function() { - routeService.setPath(defaultRoute, null, {replace: true}) - } - routeService.defineRoutes(routes, function(payload, params, path) { - var update = lastUpdate = function(routeResolver, comp) { - if (update !== lastUpdate) return - component = comp != null && typeof comp.view === "function" ? comp : "div", attrs3 = params, currentPath = path, lastUpdate = null - render1 = (routeResolver.render || identity).bind(routeResolver) - run1() - } - if (payload.view) update({}, payload) - else { - if (payload.onmatch) { - Promise.resolve(payload.onmatch(params, path)).then(function(resolved) { - update(payload, resolved) - }, bail) - } - else update(payload, "div") - } - }, bail) - redrawService0.subscribe(root, run1) - } - route.set = function(path, data, options) { - if (lastUpdate != null) options = {replace: true} - lastUpdate = null - routeService.setPath(path, data, options) - } - route.get = function() {return currentPath} - route.prefix = function(prefix0) {routeService.prefix = prefix0} - route.link = function(vnode1) { - vnode1.dom.setAttribute("href", routeService.prefix + vnode1.attrs.href) - vnode1.dom.onclick = function(e) { - if (e.ctrlKey || e.metaKey || e.shiftKey || e.which === 2) return - e.preventDefault() - e.redraw = false - var href = this.getAttribute("href") - if (href.indexOf(routeService.prefix) === 0) href = href.slice(routeService.prefix.length) - route.set(href, undefined, undefined) - } - } - route.param = function(key3) { - if(typeof attrs3 !== "undefined" && typeof key3 !== "undefined") return attrs3[key3] - return attrs3 - } - return route -} -m.route = _20(window, redrawService) -m.withAttr = function(attrName, callback1, context) { - return function(e) { - callback1.call(context || this, attrName in e.currentTarget ? e.currentTarget[attrName] : e.currentTarget.getAttribute(attrName)) - } -} -var _28 = coreRenderer(window) -m.render = _28.render -m.redraw = redrawService.redraw -m.request = requestService.request -m.jsonp = requestService.jsonp -m.parseQueryString = parseQueryString -m.buildQueryString = buildQueryString -m.version = "1.0.0" -m.vnode = Vnode -if (typeof module !== "undefined") module["exports"] = m -else window.m = m -} -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) -},{"timers":2}],4:[function(require,module,exports){ -'use strict'; - -var _mithril = _interopRequireDefault(require("mithril")); - -var _view = _interopRequireDefault(require("./view")); - -var _de = _interopRequireDefault(require("./texte/de")); - -var _en = _interopRequireDefault(require("./texte/en")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function launch() { - //m.mount(window.document.getElementById('canvas'), view) - if (window.language === 'en') { - window.texte = _en["default"]; - } else { - window.texte = _de["default"]; - } - - _mithril["default"].mount(window.document.getElementById('gradido-mithril-passphrase'), _view["default"]); -} // cross browser dom is ready module from: -// https://www.competa.com/blog/cross-browser-document-ready-with-vanilla-javascript/ - - -var domIsReady = function (domIsReady) { - var isBrowserIeOrNot = function isBrowserIeOrNot() { - return !document.attachEvent || typeof document.attachEvent === "undefined" ? 'not-ie' : 'ie'; - }; - - domIsReady = function domIsReady(callback) { - if (callback && typeof callback === 'function') { - if (isBrowserIeOrNot() !== 'ie') { - document.addEventListener("DOMContentLoaded", function () { - return callback(); - }); - } else { - document.attachEvent("onreadystatechange", function () { - if (document.readyState === "complete") { - return callback(); - } - }); - } - } else { - console.error('The callback is not a function!'); - } - }; - - return domIsReady; -}(domIsReady || {}); // DOM ready without jquery, loaded from basic.js -// cross browser dom is ready - - -(function (document, window, domIsReady, undefined) { - domIsReady(function () { - launch(); - }); -})(document, window, domIsReady); - -},{"./texte/de":7,"./texte/en":8,"./view":10,"mithril":3}],5:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _mithril = _interopRequireDefault(require("mithril")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function oninit(vnode) {} - -function view(vnode) { - return (0, _mithril["default"])('div.modal.visible-modal', { - tabindex: '-1', - role: 'dialog' - }, (0, _mithril["default"])('div.modal-dialog', { - role: 'document' - }, (0, _mithril["default"])('div.modal-content', [(0, _mithril["default"])('p.grid-header', vnode.attrs.title), (0, _mithril["default"])('div.modal-body', vnode.attrs.body), (0, _mithril["default"])('div.modal-footer', [(0, _mithril["default"])('button.btn.btn-primary', { - type: 'button', - 'data-dismiss': 'modal', - onclick: vnode.attrs.dismiss - }, 'Ok')])]))); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"mithril":3}],6:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -function getEntities() { - return [['auml', 'ä'], ['ouml', 'ö'], ['uuml', 'ü'], ['Auml', 'Ä'], ['Ouml', 'Ö'], ['Uuml', 'Ü'], ['szlig', 'ß']]; -} - -function decodeHTMLEntities(text) { - var entities = getEntities(); - - for (var i = 0, max = entities.length; i < max; ++i) { - text = text.replace(new RegExp('&' + entities[i][0] + ';', 'g'), entities[i][1]); - } - - return text; -} - -function encodeHTMLEntities(text) { - var entities = getEntities(); - - for (var i = 0, max = entities.length; i < max; ++i) { - //text = text.replace(new RegExp('&'+entities[i][0]+';', 'g'), entities[i][1]); - text = text.replace(new RegExp(entities[i][1], 'g'), '&' + entities[i][0] + ';'); - } - - return text; -} - -var _default = { - decodeHTMLEntities: decodeHTMLEntities, - encodeHTMLEntities: encodeHTMLEntities -}; -exports["default"] = _default; - -},{}],7:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -var _default = { - INVALID_PASSPHRASE: 'Das ist nicht deine Passphrase, Möchtest du nochmal schauen wie sie hieß?', - SHOW_PASSPHRASE: 'Passphrase nochmal anzeigen', - DIALOG_SHOW_PASSPHRASE_TITLE: 'Passphrase', - YES: 'Ja', - NEXT: 'Weiter' -}; -exports["default"] = _default; - -},{}],8:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -var _default = { - INVALID_PASSPHRASE: 'This is not the correct passphrase. This is not your passphrase, would you like to see what its name was again?', - SHOW_PASSPHRASE: 'Show Passphrase again', - DIALOG_SHOW_PASSPHRASE_TITLE: 'Passphrase', - YES: 'Yes', - NEXT: 'Next' -}; -exports["default"] = _default; - -},{}],9:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _mithril = _interopRequireDefault(require("mithril")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -function oninit(vnode) {//vnode.state.disabled = false -} - -function clickHandler(vnode) { - vnode.attrs.addWordCallback(vnode.attrs.word); //vnode.state.disabled = true -} - -function view(vnode) { - var classes = '.btn.btn-sm'; - - if (vnode.attrs.disabled) { - classes += '.disabled'; - return (0, _mithril["default"])('span'); - } else { - if (vnode.attrs.btnColor !== undefined) { - classes += '.' + vnode.attrs.btnColor; - } - } - - return (0, _mithril["default"])('button' + classes, { - type: 'button', - disabled: vnode.attrs.disabled, - onclick: function onclick(e) { - clickHandler(vnode); - } - }, vnode.attrs.word); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"mithril":3}],10:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _mithril = _interopRequireDefault(require("mithril")); - -var _button = _interopRequireDefault(require("./button")); - -var _dialog = _interopRequireDefault(require("../lib/dialog")); - -var _htmlEntities = _interopRequireDefault(require("../lib/htmlEntities")); - -var _passphrase = _interopRequireDefault(require("./passphrase")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function oninit(vnode) { - vnode.state.passphraseIndices = []; - vnode.state.passphraseIndicesSorted = []; - vnode.state.textboxContent = ''; - vnode.state.btnDisableArray = []; - vnode.state.countValidWords = 0; - var passphraseArray = passphrase.split(' '); - - for (var i in passphraseArray) { - var word = passphraseArray[i]; - var index = mnemonicWords.indexOf(word); - - if (-1 === index) { - if (65533 !== word.charCodeAt(0)) { - console.error("invalid index: %o for word: %o", index, word); - } - } else { - vnode.state.passphraseIndices[i] = index; - } - } - - passphraseArray.sort(); - - for (var _i in passphraseArray) { - var _word = passphraseArray[_i]; - - var _index = mnemonicWords.indexOf(_word); - - if (-1 === _index) { - if (65533 !== _word.charCodeAt(0)) { - console.error("invalid index: %o for word: %o", _index, _word); - } - } else { - vnode.state.passphraseIndicesSorted[_i] = _index; - vnode.state.btnDisableArray[_i] = false; - } - } //console.log("Passphrase: %s", passphrase) - //console.log("Passphrase indices: %o", vnode.state.passphraseIndices) - //console.log("Passphrase sorted indices: %o", vnode.state.passphraseIndicesSorted) - - - vnode.state.valid = true; - vnode.state.complete = false; - vnode.state.showPassphrase = false; -} -/* - *
    - - - - - - -
    -
    -
    - -
    -
    - - Weiter - */ - - -function addWordToTextbox(vnode, word) { - if (vnode.state.textboxContent.length > 1 && vnode.state.textboxContent.slice(-1) != ' ') { - vnode.state.textboxContent += ' '; - } - - vnode.state.textboxContent += word; - checkValidationTextbox(vnode); -} - -function onUpdateText(vnode, newContent) { - //console.log("e: %o", newContent.target.value) - vnode.state.textboxContent = newContent.replace(/[^\S ]+/g, ''); - - if (newContent === '') { - vnode.state.valid = true; - } else { - //if(newContent.slice(-1) === ' ') { - //const words = newContent.split(' ') - checkValidationTextbox(vnode); - } //} - -} - -function checkValidationTextbox(vnode) { - //console.log('checkValidationTextbox') - var words = vnode.state.textboxContent.split(' '); - var countValidWords = 0; - vnode.state.valid = true; //console.log("words: %o", words) - - for (var i in vnode.state.btnDisableArray) { - vnode.state.btnDisableArray[i] = false; - } - - for (var _i2 in words) { - var word = _htmlEntities["default"].encodeHTMLEntities(words[_i2]); - - if (word === "") continue; - var index = mnemonicWords.indexOf(word); //console.log("index of word: %o = %o", word, index) - - if (index !== -1) { - if (vnode.state.passphraseIndices[countValidWords] !== index) { - vnode.state.valid = false; - break; - } else { - countValidWords++; - } - - var sortedIndex = vnode.state.passphraseIndicesSorted.indexOf(index); //console.log("sortedIndex: %o", sortedIndex) - - if (-1 !== sortedIndex) { - vnode.state.btnDisableArray[sortedIndex] = true; - } - } - } - - if (countValidWords === vnode.state.passphraseIndices.length) { - vnode.state.complete = true; - } else { - vnode.state.complete = false; - } - - vnode.state.countValidWords = countValidWords; //console.log("count valid words: %o / %o", countValidWords, vnode.state.passphraseIndices.length) -} - -function view(vnode) { - var classes = '.form-control'; - - if (vnode.state.valid === false) { - classes += '.is-invalid'; - } else if (vnode.state.complete) { - classes += '.is-valid'; - } - - var choosenWords = []; - - for (var i = 0; i < vnode.state.countValidWords; i++) { - choosenWords.push(vnode.state.passphraseIndices[i]); - } - - return (0, _mithril["default"])('div', [(0, _mithril["default"])('div.col-md-12.showcase_content_area.mb-0', [vnode.state.passphraseIndicesSorted.map(function (val, i) { - return (0, _mithril["default"])(_button["default"], { - btnColor: 'btn-outline-warning', - word: _htmlEntities["default"].decodeHTMLEntities(mnemonicWords[val]), - addWordCallback: function addWordCallback(word) { - addWordToTextbox(vnode, word); - }, - disabled: vnode.state.btnDisableArray[i] - }); - }), choosenWords.map(function (val) { - return (0, _mithril["default"])('button.btn.btn-sm.btn-outline-success.disabled', { - disabled: true - }, _htmlEntities["default"].decodeHTMLEntities(mnemonicWords[val])); - })]), (0, _mithril["default"])('div.form-group.row-showcase_row_area', (0, _mithril["default"])('div.col-lg-8.col-md-9.mx-auto', [(0, _mithril["default"])('textarea' + classes + '#inputPassphrase', { - name: 'inputPassphrase', - cols: 10, - rows: 5, - value: vnode.state.textboxContent, - onchange: function onchange(e) { - onUpdateText(vnode, e.target.value); - }, - onkeyup: function onkeyup(e) { - onUpdateText(vnode, e.target.value); - }, - onpaste: function onpaste(e) { - onUpdateText(vnode, e.target.value); - } - }), vnode.state.valid === false ? (0, _mithril["default"])('.invalid-feedback', [window.texte.INVALID_PASSPHRASE, (0, _mithril["default"])('button.btn.btn-primary', { - onclick: function onclick() { - vnode.state.showPassphrase = true; - return false; - } - }, [(0, _mithril["default"])('i.mdi.mdi-eye'), (0, _mithril["default"])('span', _mithril["default"].trust(' ')), (0, _mithril["default"])('span', window.texte.SHOW_PASSPHRASE)])]) : null])), //Weiter - //<%= gettext("Ja") %> - vnode.state.complete ? (0, _mithril["default"])('input.btn.btn-sm.btn-success.pull-right', { - name: 'btnChecked', - type: 'submit', - value: window.texte.NEXT - }) : null], vnode.state.showPassphrase === true ? (0, _mithril["default"])(_dialog["default"], { - title: window.texte.DIALOG_SHOW_PASSPHRASE_TITLE, - body: (0, _mithril["default"])(_passphrase["default"]), - dismiss: function dismiss() { - vnode.state.showPassphrase = false; - } - }) : null); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"../lib/dialog":5,"../lib/htmlEntities":6,"./button":9,"./passphrase":11,"mithril":3}],11:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _mithril = _interopRequireDefault(require("mithril")); - -var _htmlEntities = _interopRequireDefault(require("../lib/htmlEntities")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -/* - *
    -
    Passphrase
    -

    Hallo Miau Das sind Wörter einer Passphrase Miau Hilfe Ich mag dich nicht Abenteuer Haus Zoo Garten Ziegel Tisch Auto Husten Hüpfburg Teezeit

    -
    - * - */ -function oninit(vnode) {//vnode.state.disabled = false -} - -function view(vnode) { - var passphraseString = passphrase; - - if (passphrase.slice(-1).charCodeAt(0) === 65533) { - passphraseString = passphrase.substring(0, passphrase.length - 1); - } - - return (0, _mithril["default"])('.col-lg-8.col-md-10.mx-auto.alert.alert-primary', { - style: { - 'text-align': 'center' - } - }, _htmlEntities["default"].decodeHTMLEntities(passphraseString)); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"../lib/htmlEntities":6,"mithril":3}]},{},[4]); diff --git a/community_server/webroot/js/ensurePassphrase.min.js b/community_server/webroot/js/ensurePassphrase.min.js deleted file mode 100644 index 37ae8461f..000000000 --- a/community_server/webroot/js/ensurePassphrase.min.js +++ /dev/null @@ -1 +0,0 @@ -!function i(a,l,u){function s(t,e){if(!l[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=l[t]={exports:{}};a[t][0].call(o.exports,function(e){return s(a[t][1][e]||e)},o,o.exports,i,a,l,u)}return l[t].exports}for(var c="function"==typeof require&&require,e=0;e(g.devicePixelRatio||1)?"translate("+e+"px, "+u+"px)":"translate3d("+e+"px, "+u+"px, 0)",l)):Object.assign({},r,((t={})[h]=a?u+"px":"",t[m]=d?e+"px":"",t.transform="",t))}function E(e){return e.replace(/left|right|bottom|top/g,(function(e){return _[e]}))}function D(e){return e.replace(/start|end/g,(function(e){return U[e]}))}function P(e,t){var n=!(!t.getRootNode||!t.getRootNode().host);if(e.contains(t))return!0;if(n)do{if(t&&e.isSameNode(t))return!0;t=t.parentNode||t.host}while(t);return!1}function L(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function k(e,o){if("viewport"===o){var a=n(e);e=a.visualViewport,o=a.innerWidth,a=a.innerHeight,e&&/iPhone|iPod|iPad/.test(navigator.platform)&&(o=e.width,a=e.height),e=L({width:o,height:a,x:0,y:0})}else i(o)?e=t(o):(e=n(a=s(e)),o=r(a),(a=u(s(a),e)).height=Math.max(a.height,e.innerHeight),a.width=Math.max(a.width,e.innerWidth),a.x=-o.scrollLeft,a.y=-o.scrollTop,e=L(a));return e}function B(e,t,r){return t="clippingParents"===t?function(e){var t=m(e),n=0<=["absolute","fixed"].indexOf(p(e).position)&&i(e)?v(e):e;return o(n)?t.filter((function(e){return o(e)&&P(e,n)})):[]}(e):[].concat(t),(r=(r=[].concat(t,[r])).reduce((function(t,r){var o=k(e,r),c=n(r=i(r)?r:s(e)),u=i(r)?p(r):{};parseFloat(u.borderTopWidth);var d=parseFloat(u.borderRightWidth)||0,l=parseFloat(u.borderBottomWidth)||0,m=parseFloat(u.borderLeftWidth)||0;u="html"===a(r);var h=f(r),v=r.clientWidth+d,g=r.clientHeight+l;return u&&50m?d:u?c.innerWidth-v-h:r.offsetWidth-v,c=u?c.innerHeight-g:r.offsetHeight-g,r=u?h:r.clientLeft,t.top=Math.max(o.top+l,t.top),t.right=Math.min(o.right-d,t.right),t.bottom=Math.min(o.bottom-c,t.bottom),t.left=Math.max(o.left+r,t.left),t}),k(e,r[0]))).width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}function W(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},{},e)}function A(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function H(e,n){void 0===n&&(n={});var r=n;n=void 0===(n=r.placement)?e.placement:n;var i=r.boundary,a=void 0===i?"clippingParents":i,f=void 0===(i=r.rootBoundary)?"viewport":i;i=void 0===(i=r.elementContext)?"popper":i;var p=r.altBoundary,c=void 0!==p&&p;r=W("number"!=typeof(r=void 0===(r=r.padding)?0:r)?r:A(r,q));var u=e.elements.reference;p=e.rects.popper,a=B(o(c=e.elements[c?"popper"===i?"reference":"popper":i])?c:c.contextElement||s(e.elements.popper),a,f),c=M({reference:f=t(u),element:p,strategy:"absolute",placement:n}),p=L(Object.assign({},p,{},c)),f="popper"===i?p:f;var d={top:a.top-f.top+r.top,bottom:f.bottom-a.bottom+r.bottom,left:a.left-f.left+r.left,right:f.right-a.right+r.right};if(e=e.modifiersData.offset,"popper"===i&&e){var l=e[n];Object.keys(d).forEach((function(e){var t=0<=["right","bottom"].indexOf(e)?1:-1,n=0<=["top","bottom"].indexOf(e)?"y":"x";d[e]+=l[n]*t}))}return d}function T(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function R(e){return["top","right","bottom","left"].some((function(t){return 0<=e[t]}))}var q=["top","bottom","right","left"],S=q.reduce((function(e,t){return e.concat([t+"-start",t+"-end"])}),[]),C=[].concat(q,["auto"]).reduce((function(e,t){return e.concat([t,t+"-start",t+"-end"])}),[]),F="beforeRead read afterRead beforeMain main afterMain beforeWrite write afterWrite".split(" "),N={placement:"bottom",modifiers:[],strategy:"absolute"},V={passive:!0},I={top:"auto",right:"auto",bottom:"auto",left:"auto"},_={left:"right",right:"left",bottom:"top",top:"bottom"},U={start:"end",end:"start"},z=[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,r=e.instance,o=(e=e.options).scroll,i=void 0===o||o,a=void 0===(e=e.resize)||e,s=n(t.elements.popper),f=[].concat(t.scrollParents.reference,t.scrollParents.popper);return i&&f.forEach((function(e){e.addEventListener("scroll",r.update,V)})),a&&s.addEventListener("resize",r.update,V),function(){i&&f.forEach((function(e){e.removeEventListener("scroll",r.update,V)})),a&&s.removeEventListener("resize",r.update,V)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state;t.modifiersData[e.name]=M({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options;e=void 0===(e=n.gpuAcceleration)||e,n=void 0===(n=n.adaptive)||n,e={placement:y(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:e},null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,{},j(Object.assign({},e,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:n})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,{},j(Object.assign({},e,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},o=t.elements[e];i(o)&&a(o)&&(Object.assign(o.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],o=t.attributes[e]||{};e=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{}),i(r)&&a(r)&&(Object.assign(r.style,e),Object.keys(o).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.name,r=void 0===(e=e.options.offset)?[0,0]:e,o=(e=C.reduce((function(e,n){var o=t.rects,i=y(n),a=0<=["left","top"].indexOf(i)?-1:1,s="function"==typeof r?r(Object.assign({},o,{placement:n})):r;return o=(o=s[0])||0,s=((s=s[1])||0)*a,i=0<=["left","right"].indexOf(i)?{x:s,y:o}:{x:o,y:s},e[n]=i,e}),{}))[t.placement],i=o.x;o=o.y,null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=i,t.modifiersData.popperOffsets.y+=o),t.modifiersData[n]=e}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options;if(e=e.name,!t.modifiersData[e]._skip){var r=n.mainAxis;r=void 0===r||r;var o=n.altAxis;o=void 0===o||o;var i=n.fallbackPlacements,a=n.padding,s=n.boundary,f=n.rootBoundary,p=n.altBoundary,c=n.flipVariations,u=void 0===c||c,d=n.allowedAutoPlacements;c=y(n=t.options.placement),i=i||(c!==n&&u?function(e){if("auto"===y(e))return[];var t=E(e);return[D(e),t,D(t)]}(n):[E(n)]);var l=[n].concat(i).reduce((function(e,n){return e.concat("auto"===y(n)?function(e,t){void 0===t&&(t={});var n=t.boundary,r=t.rootBoundary,o=t.padding,i=t.flipVariations,a=t.allowedAutoPlacements,s=void 0===a?C:a,f=t.placement.split("-")[1],p=(f?i?S:S.filter((function(e){return e.split("-")[1]===f})):q).filter((function(e){return 0<=s.indexOf(e)})).reduce((function(t,i){return t[i]=H(e,{placement:i,boundary:n,rootBoundary:r,padding:o})[y(i)],t}),{});return Object.keys(p).sort((function(e,t){return p[e]-p[t]}))}(t,{placement:n,boundary:s,rootBoundary:f,padding:a,flipVariations:u,allowedAutoPlacements:d}):n)}),[]);n=t.rects.reference,i=t.rects.popper;var m=new Map;c=!0;for(var h=l[0],v=0;vi[O]&&(x=E(x)),O=E(x),w=[],r&&w.push(0>=M[b]),o&&w.push(0>=M[x],0>=M[O]),w.every((function(e){return e}))){h=g,c=!1;break}m.set(g,w)}if(c)for(r=function(e){var t=l.find((function(t){if(t=m.get(t))return t.slice(0,e).every((function(e){return e}))}));if(t)return h=t,"break"},o=u?3:1;0 SECONDS_TO[i]) { - var partIndexName = i.toLowerCase() + 's'; - parts[partIndexName] = Math.floor(parts.seconds / SECONDS_TO[i]); - parts.seconds -= parts[partIndexName] * SECONDS_TO[i]; - if(durationString.length > 0) { - durationString += ', '; - } - var unitName = partIndexName; - if(parts[partIndexName] === 1) { - unitName = partIndexName.substring(0, partIndexName.length-1); - } - durationString += parts[partIndexName] + ' ' + unitName; - break; - } - - } - return durationString; - -} \ No newline at end of file diff --git a/community_server/webroot/js/tippy-bundle.umd.min.js b/community_server/webroot/js/tippy-bundle.umd.min.js deleted file mode 100644 index e0c7b943a..000000000 --- a/community_server/webroot/js/tippy-bundle.umd.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t=t||self).tippy=e(t.Popper)}(this,(function(t){"use strict";var e="undefined"!=typeof window&&"undefined"!=typeof document,n=e?navigator.userAgent:"",i=/MSIE |Trident\//.test(n),r={passive:!0,capture:!0};function o(t,e,n){if(Array.isArray(t)){var i=t[e];return null==i?Array.isArray(n)?n[e]:n:i}return t}function a(t,e){var n={}.toString.call(t);return 0===n.indexOf("[object")&&n.indexOf(e+"]")>-1}function s(t,e){return"function"==typeof t?t.apply(void 0,e):t}function p(t,e){return 0===e?t:function(i){clearTimeout(n),n=setTimeout((function(){t(i)}),e)};var n}function u(t,e){var n=Object.assign({},t);return e.forEach((function(t){delete n[t]})),n}function c(t){return[].concat(t)}function f(t,e){-1===t.indexOf(e)&&t.push(e)}function l(t){return t.split("-")[0]}function d(t){return[].slice.call(t)}function v(){return document.createElement("div")}function m(t){return["Element","Fragment"].some((function(e){return a(t,e)}))}function g(t){return a(t,"MouseEvent")}function h(t){return!(!t||!t._tippy||t._tippy.reference!==t)}function b(t){return m(t)?[t]:function(t){return a(t,"NodeList")}(t)?d(t):Array.isArray(t)?t:d(document.querySelectorAll(t))}function y(t,e){t.forEach((function(t){t&&(t.style.transitionDuration=e+"ms")}))}function x(t,e){t.forEach((function(t){t&&t.setAttribute("data-state",e)}))}function w(t){var e=c(t)[0];return e&&e.ownerDocument||document}function E(t,e,n){var i=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(e){t[i](e,n)}))}var T={isTouch:!1},A=0;function C(){T.isTouch||(T.isTouch=!0,window.performance&&document.addEventListener("mousemove",O))}function O(){var t=performance.now();t-A<20&&(T.isTouch=!1,document.removeEventListener("mousemove",O)),A=t}function L(){var t=document.activeElement;if(h(t)){var e=t._tippy;t.blur&&!e.state.isVisible&&t.blur()}}var D=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(D);function M(t){var e=(t.plugins||[]).reduce((function(e,n){var i=n.name,r=n.defaultValue;return i&&(e[i]=void 0!==t[i]?t[i]:r),e}),{});return Object.assign({},t,{},e)}function V(t,e){var n=Object.assign({},e,{content:s(e.content,[t])},e.ignoreAttributes?{}:function(t,e){return(e?Object.keys(M(Object.assign({},D,{plugins:e}))):k).reduce((function(e,n){var i=(t.getAttribute("data-tippy-"+n)||"").trim();if(!i)return e;if("content"===n)e[n]=i;else try{e[n]=JSON.parse(i)}catch(t){e[n]=i}return e}),{})}(t,e.plugins));return n.aria=Object.assign({},D.aria,{},n.aria),n.aria={expanded:"auto"===n.aria.expanded?e.interactive:n.aria.expanded,content:"auto"===n.aria.content?e.interactive?null:"describedby":n.aria.content},n}function R(t,e){t.innerHTML=e}function j(t){var e=v();return!0===t?e.className="tippy-arrow":(e.className="tippy-svg-arrow",m(t)?e.appendChild(t):R(e,t)),e}function P(t,e){m(e.content)?(R(t,""),t.appendChild(e.content)):"function"!=typeof e.content&&(e.allowHTML?R(t,e.content):t.textContent=e.content)}function I(t){var e=t.firstElementChild,n=d(e.children);return{box:e,content:n.find((function(t){return t.classList.contains("tippy-content")})),arrow:n.find((function(t){return t.classList.contains("tippy-arrow")||t.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(t){return t.classList.contains("tippy-backdrop")}))}}function S(t){var e=v(),n=v();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var i=v();function r(n,i){var r=I(e),o=r.box,a=r.content,s=r.arrow;i.theme?o.setAttribute("data-theme",i.theme):o.removeAttribute("data-theme"),"string"==typeof i.animation?o.setAttribute("data-animation",i.animation):o.removeAttribute("data-animation"),i.inertia?o.setAttribute("data-inertia",""):o.removeAttribute("data-inertia"),o.style.maxWidth="number"==typeof i.maxWidth?i.maxWidth+"px":i.maxWidth,i.role?o.setAttribute("role",i.role):o.removeAttribute("role"),n.content===i.content&&n.allowHTML===i.allowHTML||P(a,t.props),i.arrow?s?n.arrow!==i.arrow&&(o.removeChild(s),o.appendChild(j(i.arrow))):o.appendChild(j(i.arrow)):s&&o.removeChild(s)}return i.className="tippy-content",i.setAttribute("data-state","hidden"),P(i,t.props),e.appendChild(n),n.appendChild(i),r(t.props,t.props),{popper:e,onUpdate:r}}S.$$tippy=!0;var B=1,H=[],U=[];function N(e,n){var a,u,m,h,b,A,C,O,L=V(e,Object.assign({},D,{},M(n))),k=!1,R=!1,j=!1,P=!1,S=[],N=p(ht,L.interactiveDebounce),X=w(L.triggerTarget||e),Y=B++,_=(O=L.plugins).filter((function(t,e){return O.indexOf(t)===e})),z={id:Y,reference:e,popper:v(),popperInstance:null,props:L,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:_,clearDelayTimeouts:function(){clearTimeout(a),clearTimeout(u),cancelAnimationFrame(m)},setProps:function(t){if(z.state.isDestroyed)return;it("onBeforeUpdate",[z,t]),mt();var n=z.props,i=V(e,Object.assign({},z.props,{},t,{ignoreAttributes:!0}));z.props=i,vt(),n.interactiveDebounce!==i.interactiveDebounce&&(at(),N=p(ht,i.interactiveDebounce));n.triggerTarget&&!i.triggerTarget?c(n.triggerTarget).forEach((function(t){t.removeAttribute("aria-expanded")})):i.triggerTarget&&e.removeAttribute("aria-expanded");ot(),nt(),q&&q(n,i);z.popperInstance&&(wt(),Tt().forEach((function(t){requestAnimationFrame(t._tippy.popperInstance.forceUpdate)})));it("onAfterUpdate",[z,t])},setContent:function(t){z.setProps({content:t})},show:function(){var t=z.state.isVisible,e=z.state.isDestroyed,n=!z.state.isEnabled,i=T.isTouch&&!z.props.touch,r=o(z.props.duration,0,D.duration);if(t||e||n||i)return;if(Z().hasAttribute("disabled"))return;if(it("onShow",[z],!1),!1===z.props.onShow(z))return;z.state.isVisible=!0,Q()&&(W.style.visibility="visible");nt(),ct(),z.state.isMounted||(W.style.transition="none");if(Q()){var a=tt(),p=a.box,u=a.content;y([p,u],0)}A=function(){if(z.state.isVisible&&!P){if(P=!0,W.offsetHeight,W.style.transition=z.props.moveTransition,Q()&&z.props.animation){var t=tt(),e=t.box,n=t.content;y([e,n],r),x([e,n],"visible")}rt(),ot(),f(U,z),z.state.isMounted=!0,it("onMount",[z]),z.props.animation&&Q()&&function(t,e){lt(t,e)}(r,(function(){z.state.isShown=!0,it("onShown",[z])}))}},function(){var t,e=z.props.appendTo,n=Z();t=z.props.interactive&&e===D.appendTo||"parent"===e?n.parentNode:s(e,[n]);t.contains(W)||t.appendChild(W);wt()}()},hide:function(){var t=!z.state.isVisible,e=z.state.isDestroyed,n=!z.state.isEnabled,i=o(z.props.duration,1,D.duration);if(t||e||n)return;if(it("onHide",[z],!1),!1===z.props.onHide(z))return;z.state.isVisible=!1,z.state.isShown=!1,P=!1,Q()&&(W.style.visibility="hidden");if(at(),ft(),nt(),Q()){var r=tt(),a=r.box,s=r.content;z.props.animation&&(y([a,s],i),x([a,s],"hidden"))}rt(),ot(),z.props.animation?Q()&&function(t,e){lt(t,(function(){!z.state.isVisible&&W.parentNode&&W.parentNode.contains(W)&&e()}))}(i,z.unmount):z.unmount()},hideWithInteractivity:function(t){X.body.addEventListener("mouseleave",Ct),X.addEventListener("mousemove",N),f(H,N),N(t)},enable:function(){z.state.isEnabled=!0},disable:function(){z.hide(),z.state.isEnabled=!1},unmount:function(){z.state.isVisible&&z.hide();if(!z.state.isMounted)return;Et(),Tt().forEach((function(t){t._tippy.unmount()})),W.parentNode&&W.parentNode.removeChild(W);U=U.filter((function(t){return t!==z})),z.state.isMounted=!1,it("onHidden",[z])},destroy:function(){if(z.state.isDestroyed)return;z.clearDelayTimeouts(),z.unmount(),mt(),delete e._tippy,z.state.isDestroyed=!0,it("onDestroy",[z])}};if(!L.render)return z;var F=L.render(z),W=F.popper,q=F.onUpdate;W.setAttribute("data-tippy-root",""),W.id="tippy-"+z.id,z.popper=W,e._tippy=z,W._tippy=z;var $=_.map((function(t){return t.fn(z)})),J=e.hasAttribute("aria-expanded");return vt(),ot(),nt(),it("onCreate",[z]),L.showOnCreate&&At(),W.addEventListener("mouseenter",(function(){z.props.interactive&&z.state.isVisible&&z.clearDelayTimeouts()})),W.addEventListener("mouseleave",(function(t){z.props.interactive&&z.props.trigger.indexOf("mouseenter")>=0&&(X.addEventListener("mousemove",N),N(t))})),z;function G(){var t=z.props.touch;return Array.isArray(t)?t:[t,0]}function K(){return"hold"===G()[0]}function Q(){var t;return!!(null==(t=z.props.render)?void 0:t.$$tippy)}function Z(){return C||e}function tt(){return I(W)}function et(t){return z.state.isMounted&&!z.state.isVisible||T.isTouch||h&&"focus"===h.type?0:o(z.props.delay,t?0:1,D.delay)}function nt(){W.style.pointerEvents=z.props.interactive&&z.state.isVisible?"":"none",W.style.zIndex=""+z.props.zIndex}function it(t,e,n){var i;(void 0===n&&(n=!0),$.forEach((function(n){n[t]&&n[t].apply(void 0,e)})),n)&&(i=z.props)[t].apply(i,e)}function rt(){var t=z.props.aria;if(t.content){var n="aria-"+t.content,i=W.id;c(z.props.triggerTarget||e).forEach((function(t){var e=t.getAttribute(n);if(z.state.isVisible)t.setAttribute(n,e?e+" "+i:i);else{var r=e&&e.replace(i,"").trim();r?t.setAttribute(n,r):t.removeAttribute(n)}}))}}function ot(){!J&&z.props.aria.expanded&&c(z.props.triggerTarget||e).forEach((function(t){z.props.interactive?t.setAttribute("aria-expanded",z.state.isVisible&&t===Z()?"true":"false"):t.removeAttribute("aria-expanded")}))}function at(){X.body.removeEventListener("mouseleave",Ct),X.removeEventListener("mousemove",N),H=H.filter((function(t){return t!==N}))}function st(t){if(!(T.isTouch&&(j||"mousedown"===t.type)||z.props.interactive&&W.contains(t.target))){if(Z().contains(t.target)){if(T.isTouch)return;if(z.state.isVisible&&z.props.trigger.indexOf("click")>=0)return}else it("onClickOutside",[z,t]);!0===z.props.hideOnClick&&(k=!1,z.clearDelayTimeouts(),z.hide(),R=!0,setTimeout((function(){R=!1})),z.state.isMounted||ft())}}function pt(){j=!0}function ut(){j=!1}function ct(){X.addEventListener("mousedown",st,!0),X.addEventListener("touchend",st,r),X.addEventListener("touchstart",ut,r),X.addEventListener("touchmove",pt,r)}function ft(){X.removeEventListener("mousedown",st,!0),X.removeEventListener("touchend",st,r),X.removeEventListener("touchstart",ut,r),X.removeEventListener("touchmove",pt,r)}function lt(t,e){var n=tt().box;function i(t){t.target===n&&(E(n,"remove",i),e())}if(0===t)return e();E(n,"remove",b),E(n,"add",i),b=i}function dt(t,n,i){void 0===i&&(i=!1),c(z.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,i),S.push({node:e,eventType:t,handler:n,options:i})}))}function vt(){var t;K()&&(dt("touchstart",gt,{passive:!0}),dt("touchend",bt,{passive:!0})),(t=z.props.trigger,t.split(/\s+/).filter(Boolean)).forEach((function(t){if("manual"!==t)switch(dt(t,gt),t){case"mouseenter":dt("mouseleave",bt);break;case"focus":dt(i?"focusout":"blur",yt);break;case"focusin":dt("focusout",yt)}}))}function mt(){S.forEach((function(t){var e=t.node,n=t.eventType,i=t.handler,r=t.options;e.removeEventListener(n,i,r)})),S=[]}function gt(t){var e,n=!1;if(z.state.isEnabled&&!xt(t)&&!R){var i="focus"===(null==(e=h)?void 0:e.type);h=t,C=t.currentTarget,ot(),!z.state.isVisible&&g(t)&&H.forEach((function(e){return e(t)})),"click"===t.type&&(z.props.trigger.indexOf("mouseenter")<0||k)&&!1!==z.props.hideOnClick&&z.state.isVisible?n=!0:At(t),"click"===t.type&&(k=!n),n&&!i&&Ct(t)}}function ht(t){var n=t.target,i=e.contains(n)||W.contains(n);"mousemove"===t.type&&i||function(t,e){var n=e.clientX,i=e.clientY;return t.every((function(t){var e=t.popperRect,r=t.popperState,o=t.props.interactiveBorder,a=l(r.placement),s=r.modifiersData.offset;if(!s)return!0;var p="bottom"===a?s.top.y:0,u="top"===a?s.bottom.y:0,c="right"===a?s.left.x:0,f="left"===a?s.right.x:0,d=e.top-i+p>o,v=i-e.bottom-u>o,m=e.left-n+c>o,g=n-e.right-f>o;return d||v||m||g}))}(Tt().concat(W).map((function(t){var e,n=null==(e=t._tippy.popperInstance)?void 0:e.state;return n?{popperRect:t.getBoundingClientRect(),popperState:n,props:L}:null})).filter(Boolean),t)&&(at(),Ct(t))}function bt(t){xt(t)||z.props.trigger.indexOf("click")>=0&&k||(z.props.interactive?z.hideWithInteractivity(t):Ct(t))}function yt(t){z.props.trigger.indexOf("focusin")<0&&t.target!==Z()||z.props.interactive&&t.relatedTarget&&W.contains(t.relatedTarget)||Ct(t)}function xt(t){return!!T.isTouch&&K()!==t.type.indexOf("touch")>=0}function wt(){Et();var n=z.props,i=n.popperOptions,r=n.placement,o=n.offset,a=n.getReferenceClientRect,s=n.moveTransition,p=Q()?I(W).arrow:null,u=a?{getBoundingClientRect:a,contextElement:a.contextElement||Z()}:e,c=[{name:"offset",options:{offset:o}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(t){var e=t.state;if(Q()){var n=tt().box;["placement","reference-hidden","escaped"].forEach((function(t){"placement"===t?n.setAttribute("data-placement",e.placement):e.attributes.popper["data-popper-"+t]?n.setAttribute("data-"+t,""):n.removeAttribute("data-"+t)})),e.attributes.popper={}}}}];Q()&&p&&c.push({name:"arrow",options:{element:p,padding:3}}),c.push.apply(c,(null==i?void 0:i.modifiers)||[]),z.popperInstance=t.createPopper(u,W,Object.assign({},i,{placement:r,onFirstUpdate:A,modifiers:c}))}function Et(){z.popperInstance&&(z.popperInstance.destroy(),z.popperInstance=null)}function Tt(){return d(W.querySelectorAll("[data-tippy-root]"))}function At(t){z.clearDelayTimeouts(),t&&it("onTrigger",[z,t]),ct();var e=et(!0),n=G(),i=n[0],r=n[1];T.isTouch&&"hold"===i&&r&&(e=r),e?a=setTimeout((function(){z.show()}),e):z.show()}function Ct(t){if(z.clearDelayTimeouts(),it("onUntrigger",[z,t]),z.state.isVisible){if(!(z.props.trigger.indexOf("mouseenter")>=0&&z.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(t.type)>=0&&k)){var e=et(!1);e?u=setTimeout((function(){z.state.isVisible&&z.hide()}),e):m=requestAnimationFrame((function(){z.hide()}))}}else ft()}}function X(t,e){void 0===e&&(e={});var n=D.plugins.concat(e.plugins||[]);document.addEventListener("touchstart",C,r),window.addEventListener("blur",L);var i=Object.assign({},e,{plugins:n}),o=b(t).reduce((function(t,e){var n=e&&N(e,i);return n&&t.push(n),t}),[]);return m(t)?o[0]:o}X.defaultProps=D,X.setDefaultProps=function(t){Object.keys(t).forEach((function(e){D[e]=t[e]}))},X.currentInput=T;var Y={mouseover:"mouseenter",focusin:"focus",click:"click"};var _={name:"animateFill",defaultValue:!1,fn:function(t){var e;if(!(null==(e=t.props.render)?void 0:e.$$tippy))return{};var n=I(t.popper),i=n.box,r=n.content,o=t.props.animateFill?function(){var t=v();return t.className="tippy-backdrop",x([t],"hidden"),t}():null;return{onCreate:function(){o&&(i.insertBefore(o,i.firstElementChild),i.setAttribute("data-animatefill",""),i.style.overflow="hidden",t.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(o){var t=i.style.transitionDuration,e=Number(t.replace("ms",""));r.style.transitionDelay=Math.round(e/10)+"ms",o.style.transitionDuration=t,x([o],"visible")}},onShow:function(){o&&(o.style.transitionDuration="0ms")},onHide:function(){o&&x([o],"hidden")}}}};var z={name:"followCursor",defaultValue:!1,fn:function(t){var e=t.reference,n=w(t.props.triggerTarget||e),i=null;function r(){return"manual"===t.props.trigger.trim()}function o(){var e=!!r()||null!==i&&!(0===i.clientX&&0===i.clientY);return t.props.followCursor&&e}function a(e){e&&t.setProps({getReferenceClientRect:null})}function s(){o()?n.addEventListener("mousemove",u):a(t.props.followCursor)}function p(){n.removeEventListener("mousemove",u)}function u(n){i={clientX:n.clientX,clientY:n.clientY};var r=!n.target||e.contains(n.target),o=t.props.followCursor,a=n.clientX,s=n.clientY,u=e.getBoundingClientRect(),c=a-u.left,f=s-u.top;!r&&t.props.interactive||t.setProps({getReferenceClientRect:function(){var t=e.getBoundingClientRect(),n=a,i=s;"initial"===o&&(n=t.left+c,i=t.top+f);var r="horizontal"===o?t.top:i,p="vertical"===o?t.right:n,u="horizontal"===o?t.bottom:i,l="vertical"===o?t.left:n;return{width:p-l,height:u-r,top:r,right:p,bottom:u,left:l}}}),(T.isTouch||"initial"===t.props.followCursor&&t.state.isVisible)&&p()}return{onAfterUpdate:function(t,e){var n=e.followCursor;void 0===n||n||a(!0)},onMount:function(){o()&&u(i)},onShow:function(){r()&&(i={clientX:0,clientY:0},s())},onTrigger:function(t,e){i||(g(e)&&(i={clientX:e.clientX,clientY:e.clientY}),s())},onUntrigger:function(){t.state.isVisible||(p(),i=null)},onHidden:function(){p(),i=null}}}};var F={name:"inlinePositioning",defaultValue:!1,fn:function(t){var e,n=t.reference;var i=-1,r=!1,o={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(r){var o=r.state;t.props.inlinePositioning&&(e!==o.placement&&t.setProps({getReferenceClientRect:function(){return function(t){return function(t,e,n,i){if(n.length<2||null===t)return e;if(2===n.length&&i>=0&&n[0].left>n[1].right)return n[i]||e;switch(t){case"top":case"bottom":var r=n[0],o=n[n.length-1],a="top"===t,s=r.top,p=o.bottom,u=a?r.left:o.left,c=a?r.right:o.right;return{top:s,bottom:p,left:u,right:c,width:c-u,height:p-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(t){return t.left}))),l=Math.max.apply(Math,n.map((function(t){return t.right}))),d=n.filter((function(e){return"left"===t?e.left===f:e.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return e}}(l(t),n.getBoundingClientRect(),d(n.getClientRects()),i)}(o.placement)}}),e=o.placement)}};function a(){var e;r||(e=function(t,e){var n;return{popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat(((null==(n=t.popperOptions)?void 0:n.modifiers)||[]).filter((function(t){return t.name!==e.name})),[e])})}}(t.props,o),r=!0,t.setProps(e),r=!1)}return{onCreate:a,onAfterUpdate:a,onTrigger:function(e,n){if(g(n)){var r=d(t.reference.getClientRects()),o=r.find((function(t){return t.left-2<=n.clientX&&t.right+2>=n.clientX&&t.top-2<=n.clientY&&t.bottom+2>=n.clientY}));i=r.indexOf(o)}},onUntrigger:function(){i=-1}}}};var W={name:"sticky",defaultValue:!1,fn:function(t){var e=t.reference,n=t.popper;function i(e){return!0===t.props.sticky||t.props.sticky===e}var r=null,o=null;function a(){var s=i("reference")?(t.popperInstance?t.popperInstance.state.elements.reference:e).getBoundingClientRect():null,p=i("popper")?n.getBoundingClientRect():null;(s&&q(r,s)||p&&q(o,p))&&t.popperInstance&&t.popperInstance.update(),r=s,o=p,t.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){t.props.sticky&&a()}}}};function q(t,e){return!t||!e||(t.top!==e.top||t.right!==e.right||t.bottom!==e.bottom||t.left!==e.left)}return e&&function(t){var e=document.createElement("style");e.textContent=t,e.setAttribute("data-tippy-stylesheet","");var n=document.head,i=document.querySelector("head>style,head>link");i?n.insertBefore(e,i):n.appendChild(e)}('.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}'),X.setDefaultProps({plugins:[_,z,F,W],render:S}),X.createSingleton=function(t,e){void 0===e&&(e={});var n,i=t,r=[],o=e.overrides;function a(){r=i.map((function(t){return t.reference}))}function s(t){i.forEach((function(e){t?e.enable():e.disable()}))}s(!1),a();var p={fn:function(){return{onDestroy:function(){s(!0)},onTrigger:function(t,e){var a=e.currentTarget,s=r.indexOf(a);if(a!==n){n=a;var p=(o||[]).concat("content").reduce((function(t,e){return t[e]=i[s].props[e],t}),{});t.setProps(Object.assign({},p,{getReferenceClientRect:function(){return a.getBoundingClientRect()}}))}}}}},c=X(v(),Object.assign({},u(e,["overrides"]),{plugins:[p].concat(e.plugins||[]),triggerTarget:r})),f=c.setProps;return c.setProps=function(t){o=t.overrides||o,f(t)},c.setInstances=function(t){s(!0),i=t,s(!1),a(),c.setProps({triggerTarget:r})},c},X.delegate=function(t,e){var n=[],i=[],r=e.target,o=u(e,["target"]),a=Object.assign({},o,{trigger:"manual",touch:!1}),s=Object.assign({},o,{showOnCreate:!0}),p=X(t,a);function f(t){if(t.target){var n=t.target.closest(r);if(n){var o=n.getAttribute("data-tippy-trigger")||e.trigger||D.trigger;if(!n._tippy&&!("touchstart"===t.type&&"boolean"==typeof s.touch||"touchstart"!==t.type&&o.indexOf(Y[t.type]))){var a=X(n,s);a&&(i=i.concat(a))}}}}function l(t,e,i,r){void 0===r&&(r=!1),t.addEventListener(e,i,r),n.push({node:t,eventType:e,handler:i,options:r})}return c(p).forEach((function(t){var e=t.destroy;t.destroy=function(t){void 0===t&&(t=!0),t&&i.forEach((function(t){t.destroy()})),i=[],n.forEach((function(t){var e=t.node,n=t.eventType,i=t.handler,r=t.options;e.removeEventListener(n,i,r)})),n=[],e()},function(t){var e=t.reference;l(e,"touchstart",f),l(e,"mouseover",f),l(e,"focusin",f),l(e,"click",f)}(t)})),p},X.hideAll=function(t){var e=void 0===t?{}:t,n=e.exclude,i=e.duration;U.forEach((function(t){var e=!1;if(n&&(e=h(n)?t.reference===n:t.popper===n.popper),!e){var r=t.props.duration;t.setProps({duration:i}),t.hide(),t.state.isDestroyed||t.setProps({duration:r})}}))},X.roundArrow='',X})); -//# sourceMappingURL=tippy-bundle.umd.min.js.map diff --git a/community_server/webroot/js/userSearch.js b/community_server/webroot/js/userSearch.js deleted file mode 100644 index 993c05ab0..000000000 --- a/community_server/webroot/js/userSearch.js +++ /dev/null @@ -1,9185 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],2:[function(require,module,exports){ -(function (setImmediate,clearImmediate){(function (){ -var nextTick = require('process/browser.js').nextTick; -var apply = Function.prototype.apply; -var slice = Array.prototype.slice; -var immediateIds = {}; -var nextImmediateId = 0; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { timeout.close(); }; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// That's not how node.js implements it but the exposed api is the same. -exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; -}; - -exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; -}; -}).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate) -},{"process/browser.js":1,"timers":2}],3:[function(require,module,exports){ -(function (global,setImmediate){(function (){ -new function() { - -function Vnode(tag, key, attrs0, children, text, dom) { - return {tag: tag, key: key, attrs: attrs0, children: children, text: text, dom: dom, domSize: undefined, state: {}, events: undefined, instance: undefined, skip: false} -} -Vnode.normalize = function(node) { - if (Array.isArray(node)) return Vnode("[", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined) - if (node != null && typeof node !== "object") return Vnode("#", undefined, undefined, node === false ? "" : node, undefined, undefined) - return node -} -Vnode.normalizeChildren = function normalizeChildren(children) { - for (var i = 0; i < children.length; i++) { - children[i] = Vnode.normalize(children[i]) - } - return children -} -var selectorParser = /(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g -var selectorCache = {} -function hyperscript(selector) { - if (selector == null || typeof selector !== "string" && typeof selector.view !== "function") { - throw Error("The selector must be either a string or a component."); - } - if (typeof selector === "string" && selectorCache[selector] === undefined) { - var match, tag, classes = [], attributes = {} - while (match = selectorParser.exec(selector)) { - var type = match[1], value = match[2] - if (type === "" && value !== "") tag = value - else if (type === "#") attributes.id = value - else if (type === ".") classes.push(value) - else if (match[3][0] === "[") { - var attrValue = match[6] - if (attrValue) attrValue = attrValue.replace(/\\(["'])/g, "$1").replace(/\\\\/g, "\\") - if (match[4] === "class") classes.push(attrValue) - else attributes[match[4]] = attrValue || true - } - } - if (classes.length > 0) attributes.className = classes.join(" ") - selectorCache[selector] = function(attrs, children) { - var hasAttrs = false, childList, text - var className = attrs.className || attrs.class - for (var key in attributes) attrs[key] = attributes[key] - if (className !== undefined) { - if (attrs.class !== undefined) { - attrs.class = undefined - attrs.className = className - } - if (attributes.className !== undefined) attrs.className = attributes.className + " " + className - } - for (var key in attrs) { - if (key !== "key") { - hasAttrs = true - break - } - } - if (Array.isArray(children) && children.length == 1 && children[0] != null && children[0].tag === "#") text = children[0].children - else childList = children - return Vnode(tag || "div", attrs.key, hasAttrs ? attrs : undefined, childList, text, undefined) - } - } - var attrs, children, childrenIndex - if (arguments[1] == null || typeof arguments[1] === "object" && arguments[1].tag === undefined && !Array.isArray(arguments[1])) { - attrs = arguments[1] - childrenIndex = 2 - } - else childrenIndex = 1 - if (arguments.length === childrenIndex + 1) { - children = Array.isArray(arguments[childrenIndex]) ? arguments[childrenIndex] : [arguments[childrenIndex]] - } - else { - children = [] - for (var i = childrenIndex; i < arguments.length; i++) children.push(arguments[i]) - } - if (typeof selector === "string") return selectorCache[selector](attrs || {}, Vnode.normalizeChildren(children)) - return Vnode(selector, attrs && attrs.key, attrs || {}, Vnode.normalizeChildren(children), undefined, undefined) -} -hyperscript.trust = function(html) { - if (html == null) html = "" - return Vnode("<", undefined, undefined, html, undefined, undefined) -} -hyperscript.fragment = function(attrs1, children) { - return Vnode("[", attrs1.key, attrs1, Vnode.normalizeChildren(children), undefined, undefined) -} -var m = hyperscript -/** @constructor */ -var PromisePolyfill = function(executor) { - if (!(this instanceof PromisePolyfill)) throw new Error("Promise must be called with `new`") - if (typeof executor !== "function") throw new TypeError("executor must be a function") - var self = this, resolvers = [], rejectors = [], resolveCurrent = handler(resolvers, true), rejectCurrent = handler(rejectors, false) - var instance = self._instance = {resolvers: resolvers, rejectors: rejectors} - var callAsync = typeof setImmediate === "function" ? setImmediate : setTimeout - function handler(list, shouldAbsorb) { - return function execute(value) { - var then - try { - if (shouldAbsorb && value != null && (typeof value === "object" || typeof value === "function") && typeof (then = value.then) === "function") { - if (value === self) throw new TypeError("Promise can't be resolved w/ itself") - executeOnce(then.bind(value)) - } - else { - callAsync(function() { - if (!shouldAbsorb && list.length === 0) console.error("Possible unhandled promise rejection:", value) - for (var i = 0; i < list.length; i++) list[i](value) - resolvers.length = 0, rejectors.length = 0 - instance.state = shouldAbsorb - instance.retry = function() {execute(value)} - }) - } - } - catch (e) { - rejectCurrent(e) - } - } - } - function executeOnce(then) { - var runs = 0 - function run(fn) { - return function(value) { - if (runs++ > 0) return - fn(value) - } - } - var onerror = run(rejectCurrent) - try {then(run(resolveCurrent), onerror)} catch (e) {onerror(e)} - } - executeOnce(executor) -} -PromisePolyfill.prototype.then = function(onFulfilled, onRejection) { - var self = this, instance = self._instance - function handle(callback, list, next, state) { - list.push(function(value) { - if (typeof callback !== "function") next(value) - else try {resolveNext(callback(value))} catch (e) {if (rejectNext) rejectNext(e)} - }) - if (typeof instance.retry === "function" && state === instance.state) instance.retry() - } - var resolveNext, rejectNext - var promise = new PromisePolyfill(function(resolve, reject) {resolveNext = resolve, rejectNext = reject}) - handle(onFulfilled, instance.resolvers, resolveNext, true), handle(onRejection, instance.rejectors, rejectNext, false) - return promise -} -PromisePolyfill.prototype.catch = function(onRejection) { - return this.then(null, onRejection) -} -PromisePolyfill.resolve = function(value) { - if (value instanceof PromisePolyfill) return value - return new PromisePolyfill(function(resolve) {resolve(value)}) -} -PromisePolyfill.reject = function(value) { - return new PromisePolyfill(function(resolve, reject) {reject(value)}) -} -PromisePolyfill.all = function(list) { - return new PromisePolyfill(function(resolve, reject) { - var total = list.length, count = 0, values = [] - if (list.length === 0) resolve([]) - else for (var i = 0; i < list.length; i++) { - (function(i) { - function consume(value) { - count++ - values[i] = value - if (count === total) resolve(values) - } - if (list[i] != null && (typeof list[i] === "object" || typeof list[i] === "function") && typeof list[i].then === "function") { - list[i].then(consume, reject) - } - else consume(list[i]) - })(i) - } - }) -} -PromisePolyfill.race = function(list) { - return new PromisePolyfill(function(resolve, reject) { - for (var i = 0; i < list.length; i++) { - list[i].then(resolve, reject) - } - }) -} -if (typeof window !== "undefined") { - if (typeof window.Promise === "undefined") window.Promise = PromisePolyfill - var PromisePolyfill = window.Promise -} else if (typeof global !== "undefined") { - if (typeof global.Promise === "undefined") global.Promise = PromisePolyfill - var PromisePolyfill = global.Promise -} else { -} -var buildQueryString = function(object) { - if (Object.prototype.toString.call(object) !== "[object Object]") return "" - var args = [] - for (var key0 in object) { - destructure(key0, object[key0]) - } - return args.join("&") - function destructure(key0, value) { - if (Array.isArray(value)) { - for (var i = 0; i < value.length; i++) { - destructure(key0 + "[" + i + "]", value[i]) - } - } - else if (Object.prototype.toString.call(value) === "[object Object]") { - for (var i in value) { - destructure(key0 + "[" + i + "]", value[i]) - } - } - else args.push(encodeURIComponent(key0) + (value != null && value !== "" ? "=" + encodeURIComponent(value) : "")) - } -} -var _8 = function($window, Promise) { - var callbackCount = 0 - var oncompletion - function setCompletionCallback(callback) {oncompletion = callback} - function finalizer() { - var count = 0 - function complete() {if (--count === 0 && typeof oncompletion === "function") oncompletion()} - return function finalize(promise0) { - var then0 = promise0.then - promise0.then = function() { - count++ - var next = then0.apply(promise0, arguments) - next.then(complete, function(e) { - complete() - if (count === 0) throw e - }) - return finalize(next) - } - return promise0 - } - } - function normalize(args, extra) { - if (typeof args === "string") { - var url = args - args = extra || {} - if (args.url == null) args.url = url - } - return args - } - function request(args, extra) { - var finalize = finalizer() - args = normalize(args, extra) - var promise0 = new Promise(function(resolve, reject) { - if (args.method == null) args.method = "GET" - args.method = args.method.toUpperCase() - var useBody = typeof args.useBody === "boolean" ? args.useBody : args.method !== "GET" && args.method !== "TRACE" - if (typeof args.serialize !== "function") args.serialize = typeof FormData !== "undefined" && args.data instanceof FormData ? function(value) {return value} : JSON.stringify - if (typeof args.deserialize !== "function") args.deserialize = deserialize - if (typeof args.extract !== "function") args.extract = extract - args.url = interpolate(args.url, args.data) - if (useBody) args.data = args.serialize(args.data) - else args.url = assemble(args.url, args.data) - var xhr = new $window.XMLHttpRequest() - xhr.open(args.method, args.url, typeof args.async === "boolean" ? args.async : true, typeof args.user === "string" ? args.user : undefined, typeof args.password === "string" ? args.password : undefined) - if (args.serialize === JSON.stringify && useBody) { - xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8") - } - if (args.deserialize === deserialize) { - xhr.setRequestHeader("Accept", "application/json, text/*") - } - if (args.withCredentials) xhr.withCredentials = args.withCredentials - for (var key in args.headers) if ({}.hasOwnProperty.call(args.headers, key)) { - xhr.setRequestHeader(key, args.headers[key]) - } - if (typeof args.config === "function") xhr = args.config(xhr, args) || xhr - xhr.onreadystatechange = function() { - // Don't throw errors on xhr.abort(). XMLHttpRequests ends up in a state of - // xhr.status == 0 and xhr.readyState == 4 if aborted after open, but before completion. - if (xhr.status && xhr.readyState === 4) { - try { - var response = (args.extract !== extract) ? args.extract(xhr, args) : args.deserialize(args.extract(xhr, args)) - if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { - resolve(cast(args.type, response)) - } - else { - var error = new Error(xhr.responseText) - for (var key in response) error[key] = response[key] - reject(error) - } - } - catch (e) { - reject(e) - } - } - } - if (useBody && (args.data != null)) xhr.send(args.data) - else xhr.send() - }) - return args.background === true ? promise0 : finalize(promise0) - } - function jsonp(args, extra) { - var finalize = finalizer() - args = normalize(args, extra) - var promise0 = new Promise(function(resolve, reject) { - var callbackName = args.callbackName || "_mithril_" + Math.round(Math.random() * 1e16) + "_" + callbackCount++ - var script = $window.document.createElement("script") - $window[callbackName] = function(data) { - script.parentNode.removeChild(script) - resolve(cast(args.type, data)) - delete $window[callbackName] - } - script.onerror = function() { - script.parentNode.removeChild(script) - reject(new Error("JSONP request failed")) - delete $window[callbackName] - } - if (args.data == null) args.data = {} - args.url = interpolate(args.url, args.data) - args.data[args.callbackKey || "callback"] = callbackName - script.src = assemble(args.url, args.data) - $window.document.documentElement.appendChild(script) - }) - return args.background === true? promise0 : finalize(promise0) - } - function interpolate(url, data) { - if (data == null) return url - var tokens = url.match(/:[^\/]+/gi) || [] - for (var i = 0; i < tokens.length; i++) { - var key = tokens[i].slice(1) - if (data[key] != null) { - url = url.replace(tokens[i], data[key]) - } - } - return url - } - function assemble(url, data) { - var querystring = buildQueryString(data) - if (querystring !== "") { - var prefix = url.indexOf("?") < 0 ? "?" : "&" - url += prefix + querystring - } - return url - } - function deserialize(data) { - try {return data !== "" ? JSON.parse(data) : null} - catch (e) {throw new Error(data)} - } - function extract(xhr) {return xhr.responseText} - function cast(type0, data) { - if (typeof type0 === "function") { - if (Array.isArray(data)) { - for (var i = 0; i < data.length; i++) { - data[i] = new type0(data[i]) - } - } - else return new type0(data) - } - return data - } - return {request: request, jsonp: jsonp, setCompletionCallback: setCompletionCallback} -} -var requestService = _8(window, PromisePolyfill) -var coreRenderer = function($window) { - var $doc = $window.document - var $emptyFragment = $doc.createDocumentFragment() - var onevent - function setEventCallback(callback) {return onevent = callback} - //create - function createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) { - for (var i = start; i < end; i++) { - var vnode = vnodes[i] - if (vnode != null) { - insertNode(parent, createNode(vnode, hooks, ns), nextSibling) - } - } - } - function createNode(vnode, hooks, ns) { - var tag = vnode.tag - if (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks) - if (typeof tag === "string") { - switch (tag) { - case "#": return createText(vnode) - case "<": return createHTML(vnode) - case "[": return createFragment(vnode, hooks, ns) - default: return createElement(vnode, hooks, ns) - } - } - else return createComponent(vnode, hooks, ns) - } - function createText(vnode) { - return vnode.dom = $doc.createTextNode(vnode.children) - } - function createHTML(vnode) { - var match1 = vnode.children.match(/^\s*?<(\w+)/im) || [] - var parent = {caption: "table", thead: "table", tbody: "table", tfoot: "table", tr: "tbody", th: "tr", td: "tr", colgroup: "table", col: "colgroup"}[match1[1]] || "div" - var temp = $doc.createElement(parent) - temp.innerHTML = vnode.children - vnode.dom = temp.firstChild - vnode.domSize = temp.childNodes.length - var fragment = $doc.createDocumentFragment() - var child - while (child = temp.firstChild) { - fragment.appendChild(child) - } - return fragment - } - function createFragment(vnode, hooks, ns) { - var fragment = $doc.createDocumentFragment() - if (vnode.children != null) { - var children = vnode.children - createNodes(fragment, children, 0, children.length, hooks, null, ns) - } - vnode.dom = fragment.firstChild - vnode.domSize = fragment.childNodes.length - return fragment - } - function createElement(vnode, hooks, ns) { - var tag = vnode.tag - switch (vnode.tag) { - case "svg": ns = "http://www.w3.org/2000/svg"; break - case "math": ns = "http://www.w3.org/1998/Math/MathML"; break - } - var attrs2 = vnode.attrs - var is = attrs2 && attrs2.is - var element = ns ? - is ? $doc.createElementNS(ns, tag, {is: is}) : $doc.createElementNS(ns, tag) : - is ? $doc.createElement(tag, {is: is}) : $doc.createElement(tag) - vnode.dom = element - if (attrs2 != null) { - setAttrs(vnode, attrs2, ns) - } - if (vnode.attrs != null && vnode.attrs.contenteditable != null) { - setContentEditable(vnode) - } - else { - if (vnode.text != null) { - if (vnode.text !== "") element.textContent = vnode.text - else vnode.children = [Vnode("#", undefined, undefined, vnode.text, undefined, undefined)] - } - if (vnode.children != null) { - var children = vnode.children - createNodes(element, children, 0, children.length, hooks, null, ns) - setLateAttrs(vnode) - } - } - return element - } - function createComponent(vnode, hooks, ns) { - vnode.state = Object.create(vnode.tag) - var view = vnode.tag.view - if (view.reentrantLock != null) return $emptyFragment - view.reentrantLock = true - initLifecycle(vnode.tag, vnode, hooks) - vnode.instance = Vnode.normalize(view.call(vnode.state, vnode)) - view.reentrantLock = null - if (vnode.instance != null) { - if (vnode.instance === vnode) throw Error("A view cannot return the vnode it received as arguments") - var element = createNode(vnode.instance, hooks, ns) - vnode.dom = vnode.instance.dom - vnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0 - return element - } - else { - vnode.domSize = 0 - return $emptyFragment - } - } - //update - function updateNodes(parent, old, vnodes, hooks, nextSibling, ns) { - if (old === vnodes || old == null && vnodes == null) return - else if (old == null) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, undefined) - else if (vnodes == null) removeNodes(old, 0, old.length, vnodes) - else { - if (old.length === vnodes.length) { - var isUnkeyed = false - for (var i = 0; i < vnodes.length; i++) { - if (vnodes[i] != null && old[i] != null) { - isUnkeyed = vnodes[i].key == null && old[i].key == null - break - } - } - if (isUnkeyed) { - for (var i = 0; i < old.length; i++) { - if (old[i] === vnodes[i]) continue - else if (old[i] == null && vnodes[i] != null) insertNode(parent, createNode(vnodes[i], hooks, ns), getNextSibling(old, i + 1, nextSibling)) - else if (vnodes[i] == null) removeNodes(old, i, i + 1, vnodes) - else updateNode(parent, old[i], vnodes[i], hooks, getNextSibling(old, i + 1, nextSibling), false, ns) - } - return - } - } - var recycling = isRecyclable(old, vnodes) - if (recycling) old = old.concat(old.pool) - var oldStart = 0, start = 0, oldEnd = old.length - 1, end = vnodes.length - 1, map - while (oldEnd >= oldStart && end >= start) { - var o = old[oldStart], v = vnodes[start] - if (o === v && !recycling) oldStart++, start++ - else if (o == null) oldStart++ - else if (v == null) start++ - else if (o.key === v.key) { - oldStart++, start++ - updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), recycling, ns) - if (recycling && o.tag === v.tag) insertNode(parent, toFragment(o), nextSibling) - } - else { - var o = old[oldEnd] - if (o === v && !recycling) oldEnd--, start++ - else if (o == null) oldEnd-- - else if (v == null) start++ - else if (o.key === v.key) { - updateNode(parent, o, v, hooks, getNextSibling(old, oldEnd + 1, nextSibling), recycling, ns) - if (recycling || start < end) insertNode(parent, toFragment(o), getNextSibling(old, oldStart, nextSibling)) - oldEnd--, start++ - } - else break - } - } - while (oldEnd >= oldStart && end >= start) { - var o = old[oldEnd], v = vnodes[end] - if (o === v && !recycling) oldEnd--, end-- - else if (o == null) oldEnd-- - else if (v == null) end-- - else if (o.key === v.key) { - updateNode(parent, o, v, hooks, getNextSibling(old, oldEnd + 1, nextSibling), recycling, ns) - if (recycling && o.tag === v.tag) insertNode(parent, toFragment(o), nextSibling) - if (o.dom != null) nextSibling = o.dom - oldEnd--, end-- - } - else { - if (!map) map = getKeyMap(old, oldEnd) - if (v != null) { - var oldIndex = map[v.key] - if (oldIndex != null) { - var movable = old[oldIndex] - updateNode(parent, movable, v, hooks, getNextSibling(old, oldEnd + 1, nextSibling), recycling, ns) - insertNode(parent, toFragment(movable), nextSibling) - old[oldIndex].skip = true - if (movable.dom != null) nextSibling = movable.dom - } - else { - var dom = createNode(v, hooks, undefined) - insertNode(parent, dom, nextSibling) - nextSibling = dom - } - } - end-- - } - if (end < start) break - } - createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns) - removeNodes(old, oldStart, oldEnd + 1, vnodes) - } - } - function updateNode(parent, old, vnode, hooks, nextSibling, recycling, ns) { - var oldTag = old.tag, tag = vnode.tag - if (oldTag === tag) { - vnode.state = old.state - vnode.events = old.events - if (shouldUpdate(vnode, old)) return - if (vnode.attrs != null) { - updateLifecycle(vnode.attrs, vnode, hooks, recycling) - } - if (typeof oldTag === "string") { - switch (oldTag) { - case "#": updateText(old, vnode); break - case "<": updateHTML(parent, old, vnode, nextSibling); break - case "[": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break - default: updateElement(old, vnode, hooks, ns) - } - } - else updateComponent(parent, old, vnode, hooks, nextSibling, recycling, ns) - } - else { - removeNode(old, null) - insertNode(parent, createNode(vnode, hooks, ns), nextSibling) - } - } - function updateText(old, vnode) { - if (old.children.toString() !== vnode.children.toString()) { - old.dom.nodeValue = vnode.children - } - vnode.dom = old.dom - } - function updateHTML(parent, old, vnode, nextSibling) { - if (old.children !== vnode.children) { - toFragment(old) - insertNode(parent, createHTML(vnode), nextSibling) - } - else vnode.dom = old.dom, vnode.domSize = old.domSize - } - function updateFragment(parent, old, vnode, hooks, nextSibling, ns) { - updateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns) - var domSize = 0, children = vnode.children - vnode.dom = null - if (children != null) { - for (var i = 0; i < children.length; i++) { - var child = children[i] - if (child != null && child.dom != null) { - if (vnode.dom == null) vnode.dom = child.dom - domSize += child.domSize || 1 - } - } - if (domSize !== 1) vnode.domSize = domSize - } - } - function updateElement(old, vnode, hooks, ns) { - var element = vnode.dom = old.dom - switch (vnode.tag) { - case "svg": ns = "http://www.w3.org/2000/svg"; break - case "math": ns = "http://www.w3.org/1998/Math/MathML"; break - } - if (vnode.tag === "textarea") { - if (vnode.attrs == null) vnode.attrs = {} - if (vnode.text != null) { - vnode.attrs.value = vnode.text //FIXME handle0 multiple children - vnode.text = undefined - } - } - updateAttrs(vnode, old.attrs, vnode.attrs, ns) - if (vnode.attrs != null && vnode.attrs.contenteditable != null) { - setContentEditable(vnode) - } - else if (old.text != null && vnode.text != null && vnode.text !== "") { - if (old.text.toString() !== vnode.text.toString()) old.dom.firstChild.nodeValue = vnode.text - } - else { - if (old.text != null) old.children = [Vnode("#", undefined, undefined, old.text, undefined, old.dom.firstChild)] - if (vnode.text != null) vnode.children = [Vnode("#", undefined, undefined, vnode.text, undefined, undefined)] - updateNodes(element, old.children, vnode.children, hooks, null, ns) - } - } - function updateComponent(parent, old, vnode, hooks, nextSibling, recycling, ns) { - vnode.instance = Vnode.normalize(vnode.tag.view.call(vnode.state, vnode)) - updateLifecycle(vnode.tag, vnode, hooks, recycling) - if (vnode.instance != null) { - if (old.instance == null) insertNode(parent, createNode(vnode.instance, hooks, ns), nextSibling) - else updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, recycling, ns) - vnode.dom = vnode.instance.dom - vnode.domSize = vnode.instance.domSize - } - else if (old.instance != null) { - removeNode(old.instance, null) - vnode.dom = undefined - vnode.domSize = 0 - } - else { - vnode.dom = old.dom - vnode.domSize = old.domSize - } - } - function isRecyclable(old, vnodes) { - if (old.pool != null && Math.abs(old.pool.length - vnodes.length) <= Math.abs(old.length - vnodes.length)) { - var oldChildrenLength = old[0] && old[0].children && old[0].children.length || 0 - var poolChildrenLength = old.pool[0] && old.pool[0].children && old.pool[0].children.length || 0 - var vnodesChildrenLength = vnodes[0] && vnodes[0].children && vnodes[0].children.length || 0 - if (Math.abs(poolChildrenLength - vnodesChildrenLength) <= Math.abs(oldChildrenLength - vnodesChildrenLength)) { - return true - } - } - return false - } - function getKeyMap(vnodes, end) { - var map = {}, i = 0 - for (var i = 0; i < end; i++) { - var vnode = vnodes[i] - if (vnode != null) { - var key2 = vnode.key - if (key2 != null) map[key2] = i - } - } - return map - } - function toFragment(vnode) { - var count0 = vnode.domSize - if (count0 != null || vnode.dom == null) { - var fragment = $doc.createDocumentFragment() - if (count0 > 0) { - var dom = vnode.dom - while (--count0) fragment.appendChild(dom.nextSibling) - fragment.insertBefore(dom, fragment.firstChild) - } - return fragment - } - else return vnode.dom - } - function getNextSibling(vnodes, i, nextSibling) { - for (; i < vnodes.length; i++) { - if (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom - } - return nextSibling - } - function insertNode(parent, dom, nextSibling) { - if (nextSibling && nextSibling.parentNode) parent.insertBefore(dom, nextSibling) - else parent.appendChild(dom) - } - function setContentEditable(vnode) { - var children = vnode.children - if (children != null && children.length === 1 && children[0].tag === "<") { - var content = children[0].children - if (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content - } - else if (vnode.text != null || children != null && children.length !== 0) throw new Error("Child node of a contenteditable must be trusted") - } - //remove - function removeNodes(vnodes, start, end, context) { - for (var i = start; i < end; i++) { - var vnode = vnodes[i] - if (vnode != null) { - if (vnode.skip) vnode.skip = false - else removeNode(vnode, context) - } - } - } - function removeNode(vnode, context) { - var expected = 1, called = 0 - if (vnode.attrs && vnode.attrs.onbeforeremove) { - var result = vnode.attrs.onbeforeremove.call(vnode.state, vnode) - if (result != null && typeof result.then === "function") { - expected++ - result.then(continuation, continuation) - } - } - if (typeof vnode.tag !== "string" && vnode.tag.onbeforeremove) { - var result = vnode.tag.onbeforeremove.call(vnode.state, vnode) - if (result != null && typeof result.then === "function") { - expected++ - result.then(continuation, continuation) - } - } - continuation() - function continuation() { - if (++called === expected) { - onremove(vnode) - if (vnode.dom) { - var count0 = vnode.domSize || 1 - if (count0 > 1) { - var dom = vnode.dom - while (--count0) { - removeNodeFromDOM(dom.nextSibling) - } - } - removeNodeFromDOM(vnode.dom) - if (context != null && vnode.domSize == null && !hasIntegrationMethods(vnode.attrs) && typeof vnode.tag === "string") { //TODO test custom elements - if (!context.pool) context.pool = [vnode] - else context.pool.push(vnode) - } - } - } - } - } - function removeNodeFromDOM(node) { - var parent = node.parentNode - if (parent != null) parent.removeChild(node) - } - function onremove(vnode) { - if (vnode.attrs && vnode.attrs.onremove) vnode.attrs.onremove.call(vnode.state, vnode) - if (typeof vnode.tag !== "string" && vnode.tag.onremove) vnode.tag.onremove.call(vnode.state, vnode) - if (vnode.instance != null) onremove(vnode.instance) - else { - var children = vnode.children - if (Array.isArray(children)) { - for (var i = 0; i < children.length; i++) { - var child = children[i] - if (child != null) onremove(child) - } - } - } - } - //attrs2 - function setAttrs(vnode, attrs2, ns) { - for (var key2 in attrs2) { - setAttr(vnode, key2, null, attrs2[key2], ns) - } - } - function setAttr(vnode, key2, old, value, ns) { - var element = vnode.dom - if (key2 === "key" || key2 === "is" || (old === value && !isFormAttribute(vnode, key2)) && typeof value !== "object" || typeof value === "undefined" || isLifecycleMethod(key2)) return - var nsLastIndex = key2.indexOf(":") - if (nsLastIndex > -1 && key2.substr(0, nsLastIndex) === "xlink") { - element.setAttributeNS("http://www.w3.org/1999/xlink", key2.slice(nsLastIndex + 1), value) - } - else if (key2[0] === "o" && key2[1] === "n" && typeof value === "function") updateEvent(vnode, key2, value) - else if (key2 === "style") updateStyle(element, old, value) - else if (key2 in element && !isAttribute(key2) && ns === undefined && !isCustomElement(vnode)) { - //setting input[value] to same value by typing on focused element moves cursor to end in Chrome - if (vnode.tag === "input" && key2 === "value" && vnode.dom.value === value && vnode.dom === $doc.activeElement) return - //setting select[value] to same value while having select open blinks select dropdown in Chrome - if (vnode.tag === "select" && key2 === "value" && vnode.dom.value === value && vnode.dom === $doc.activeElement) return - //setting option[value] to same value while having select open blinks select dropdown in Chrome - if (vnode.tag === "option" && key2 === "value" && vnode.dom.value === value) return - element[key2] = value - } - else { - if (typeof value === "boolean") { - if (value) element.setAttribute(key2, "") - else element.removeAttribute(key2) - } - else element.setAttribute(key2 === "className" ? "class" : key2, value) - } - } - function setLateAttrs(vnode) { - var attrs2 = vnode.attrs - if (vnode.tag === "select" && attrs2 != null) { - if ("value" in attrs2) setAttr(vnode, "value", null, attrs2.value, undefined) - if ("selectedIndex" in attrs2) setAttr(vnode, "selectedIndex", null, attrs2.selectedIndex, undefined) - } - } - function updateAttrs(vnode, old, attrs2, ns) { - if (attrs2 != null) { - for (var key2 in attrs2) { - setAttr(vnode, key2, old && old[key2], attrs2[key2], ns) - } - } - if (old != null) { - for (var key2 in old) { - if (attrs2 == null || !(key2 in attrs2)) { - if (key2 === "className") key2 = "class" - if (key2[0] === "o" && key2[1] === "n" && !isLifecycleMethod(key2)) updateEvent(vnode, key2, undefined) - else if (key2 !== "key") vnode.dom.removeAttribute(key2) - } - } - } - } - function isFormAttribute(vnode, attr) { - return attr === "value" || attr === "checked" || attr === "selectedIndex" || attr === "selected" && vnode.dom === $doc.activeElement - } - function isLifecycleMethod(attr) { - return attr === "oninit" || attr === "oncreate" || attr === "onupdate" || attr === "onremove" || attr === "onbeforeremove" || attr === "onbeforeupdate" - } - function isAttribute(attr) { - return attr === "href" || attr === "list" || attr === "form" || attr === "width" || attr === "height"// || attr === "type" - } - function isCustomElement(vnode){ - return vnode.attrs.is || vnode.tag.indexOf("-") > -1 - } - function hasIntegrationMethods(source) { - return source != null && (source.oncreate || source.onupdate || source.onbeforeremove || source.onremove) - } - //style - function updateStyle(element, old, style) { - if (old === style) element.style.cssText = "", old = null - if (style == null) element.style.cssText = "" - else if (typeof style === "string") element.style.cssText = style - else { - if (typeof old === "string") element.style.cssText = "" - for (var key2 in style) { - element.style[key2] = style[key2] - } - if (old != null && typeof old !== "string") { - for (var key2 in old) { - if (!(key2 in style)) element.style[key2] = "" - } - } - } - } - //event - function updateEvent(vnode, key2, value) { - var element = vnode.dom - var callback = typeof onevent !== "function" ? value : function(e) { - var result = value.call(element, e) - onevent.call(element, e) - return result - } - if (key2 in element) element[key2] = typeof value === "function" ? callback : null - else { - var eventName = key2.slice(2) - if (vnode.events === undefined) vnode.events = {} - if (vnode.events[key2] === callback) return - if (vnode.events[key2] != null) element.removeEventListener(eventName, vnode.events[key2], false) - if (typeof value === "function") { - vnode.events[key2] = callback - element.addEventListener(eventName, vnode.events[key2], false) - } - } - } - //lifecycle - function initLifecycle(source, vnode, hooks) { - if (typeof source.oninit === "function") source.oninit.call(vnode.state, vnode) - if (typeof source.oncreate === "function") hooks.push(source.oncreate.bind(vnode.state, vnode)) - } - function updateLifecycle(source, vnode, hooks, recycling) { - if (recycling) initLifecycle(source, vnode, hooks) - else if (typeof source.onupdate === "function") hooks.push(source.onupdate.bind(vnode.state, vnode)) - } - function shouldUpdate(vnode, old) { - var forceVnodeUpdate, forceComponentUpdate - if (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === "function") forceVnodeUpdate = vnode.attrs.onbeforeupdate.call(vnode.state, vnode, old) - if (typeof vnode.tag !== "string" && typeof vnode.tag.onbeforeupdate === "function") forceComponentUpdate = vnode.tag.onbeforeupdate.call(vnode.state, vnode, old) - if (!(forceVnodeUpdate === undefined && forceComponentUpdate === undefined) && !forceVnodeUpdate && !forceComponentUpdate) { - vnode.dom = old.dom - vnode.domSize = old.domSize - vnode.instance = old.instance - return true - } - return false - } - function render(dom, vnodes) { - if (!dom) throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.") - var hooks = [] - var active = $doc.activeElement - // First time0 rendering into a node clears it out - if (dom.vnodes == null) dom.textContent = "" - if (!Array.isArray(vnodes)) vnodes = [vnodes] - updateNodes(dom, dom.vnodes, Vnode.normalizeChildren(vnodes), hooks, null, undefined) - dom.vnodes = vnodes - for (var i = 0; i < hooks.length; i++) hooks[i]() - if ($doc.activeElement !== active) active.focus() - } - return {render: render, setEventCallback: setEventCallback} -} -function throttle(callback) { - //60fps translates to 16.6ms, round it down since setTimeout requires int - var time = 16 - var last = 0, pending = null - var timeout = typeof requestAnimationFrame === "function" ? requestAnimationFrame : setTimeout - return function() { - var now = Date.now() - if (last === 0 || now - last >= time) { - last = now - callback() - } - else if (pending === null) { - pending = timeout(function() { - pending = null - callback() - last = Date.now() - }, time - (now - last)) - } - } -} -var _11 = function($window) { - var renderService = coreRenderer($window) - renderService.setEventCallback(function(e) { - if (e.redraw !== false) redraw() - }) - - var callbacks = [] - function subscribe(key1, callback) { - unsubscribe(key1) - callbacks.push(key1, throttle(callback)) - } - function unsubscribe(key1) { - var index = callbacks.indexOf(key1) - if (index > -1) callbacks.splice(index, 2) - } - function redraw() { - for (var i = 1; i < callbacks.length; i += 2) { - callbacks[i]() - } - } - return {subscribe: subscribe, unsubscribe: unsubscribe, redraw: redraw, render: renderService.render} -} -var redrawService = _11(window) -requestService.setCompletionCallback(redrawService.redraw) -var _16 = function(redrawService0) { - return function(root, component) { - if (component === null) { - redrawService0.render(root, []) - redrawService0.unsubscribe(root) - return - } - - if (component.view == null) throw new Error("m.mount(element, component) expects a component, not a vnode") - - var run0 = function() { - redrawService0.render(root, Vnode(component)) - } - redrawService0.subscribe(root, run0) - redrawService0.redraw() - } -} -m.mount = _16(redrawService) -var Promise = PromisePolyfill -var parseQueryString = function(string) { - if (string === "" || string == null) return {} - if (string.charAt(0) === "?") string = string.slice(1) - var entries = string.split("&"), data0 = {}, counters = {} - for (var i = 0; i < entries.length; i++) { - var entry = entries[i].split("=") - var key5 = decodeURIComponent(entry[0]) - var value = entry.length === 2 ? decodeURIComponent(entry[1]) : "" - if (value === "true") value = true - else if (value === "false") value = false - var levels = key5.split(/\]\[?|\[/) - var cursor = data0 - if (key5.indexOf("[") > -1) levels.pop() - for (var j = 0; j < levels.length; j++) { - var level = levels[j], nextLevel = levels[j + 1] - var isNumber = nextLevel == "" || !isNaN(parseInt(nextLevel, 10)) - var isValue = j === levels.length - 1 - if (level === "") { - var key5 = levels.slice(0, j).join() - if (counters[key5] == null) counters[key5] = 0 - level = counters[key5]++ - } - if (cursor[level] == null) { - cursor[level] = isValue ? value : isNumber ? [] : {} - } - cursor = cursor[level] - } - } - return data0 -} -var coreRouter = function($window) { - var supportsPushState = typeof $window.history.pushState === "function" - var callAsync0 = typeof setImmediate === "function" ? setImmediate : setTimeout - function normalize1(fragment0) { - var data = $window.location[fragment0].replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponent) - if (fragment0 === "pathname" && data[0] !== "/") data = "/" + data - return data - } - var asyncId - function debounceAsync(callback0) { - return function() { - if (asyncId != null) return - asyncId = callAsync0(function() { - asyncId = null - callback0() - }) - } - } - function parsePath(path, queryData, hashData) { - var queryIndex = path.indexOf("?") - var hashIndex = path.indexOf("#") - var pathEnd = queryIndex > -1 ? queryIndex : hashIndex > -1 ? hashIndex : path.length - if (queryIndex > -1) { - var queryEnd = hashIndex > -1 ? hashIndex : path.length - var queryParams = parseQueryString(path.slice(queryIndex + 1, queryEnd)) - for (var key4 in queryParams) queryData[key4] = queryParams[key4] - } - if (hashIndex > -1) { - var hashParams = parseQueryString(path.slice(hashIndex + 1)) - for (var key4 in hashParams) hashData[key4] = hashParams[key4] - } - return path.slice(0, pathEnd) - } - var router = {prefix: "#!"} - router.getPath = function() { - var type2 = router.prefix.charAt(0) - switch (type2) { - case "#": return normalize1("hash").slice(router.prefix.length) - case "?": return normalize1("search").slice(router.prefix.length) + normalize1("hash") - default: return normalize1("pathname").slice(router.prefix.length) + normalize1("search") + normalize1("hash") - } - } - router.setPath = function(path, data, options) { - var queryData = {}, hashData = {} - path = parsePath(path, queryData, hashData) - if (data != null) { - for (var key4 in data) queryData[key4] = data[key4] - path = path.replace(/:([^\/]+)/g, function(match2, token) { - delete queryData[token] - return data[token] - }) - } - var query = buildQueryString(queryData) - if (query) path += "?" + query - var hash = buildQueryString(hashData) - if (hash) path += "#" + hash - if (supportsPushState) { - var state = options ? options.state : null - var title = options ? options.title : null - $window.onpopstate() - if (options && options.replace) $window.history.replaceState(state, title, router.prefix + path) - else $window.history.pushState(state, title, router.prefix + path) - } - else $window.location.href = router.prefix + path - } - router.defineRoutes = function(routes, resolve, reject) { - function resolveRoute() { - var path = router.getPath() - var params = {} - var pathname = parsePath(path, params, params) - - var state = $window.history.state - if (state != null) { - for (var k in state) params[k] = state[k] - } - for (var route0 in routes) { - var matcher = new RegExp("^" + route0.replace(/:[^\/]+?\.{3}/g, "(.*?)").replace(/:[^\/]+/g, "([^\\/]+)") + "\/?$") - if (matcher.test(pathname)) { - pathname.replace(matcher, function() { - var keys = route0.match(/:[^\/]+/g) || [] - var values = [].slice.call(arguments, 1, -2) - for (var i = 0; i < keys.length; i++) { - params[keys[i].replace(/:|\./g, "")] = decodeURIComponent(values[i]) - } - resolve(routes[route0], params, path, route0) - }) - return - } - } - reject(path, params) - } - - if (supportsPushState) $window.onpopstate = debounceAsync(resolveRoute) - else if (router.prefix.charAt(0) === "#") $window.onhashchange = resolveRoute - resolveRoute() - } - - return router -} -var _20 = function($window, redrawService0) { - var routeService = coreRouter($window) - var identity = function(v) {return v} - var render1, component, attrs3, currentPath, lastUpdate - var route = function(root, defaultRoute, routes) { - if (root == null) throw new Error("Ensure the DOM element that was passed to `m.route` is not undefined") - var run1 = function() { - if (render1 != null) redrawService0.render(root, render1(Vnode(component, attrs3.key, attrs3))) - } - var bail = function() { - routeService.setPath(defaultRoute, null, {replace: true}) - } - routeService.defineRoutes(routes, function(payload, params, path) { - var update = lastUpdate = function(routeResolver, comp) { - if (update !== lastUpdate) return - component = comp != null && typeof comp.view === "function" ? comp : "div", attrs3 = params, currentPath = path, lastUpdate = null - render1 = (routeResolver.render || identity).bind(routeResolver) - run1() - } - if (payload.view) update({}, payload) - else { - if (payload.onmatch) { - Promise.resolve(payload.onmatch(params, path)).then(function(resolved) { - update(payload, resolved) - }, bail) - } - else update(payload, "div") - } - }, bail) - redrawService0.subscribe(root, run1) - } - route.set = function(path, data, options) { - if (lastUpdate != null) options = {replace: true} - lastUpdate = null - routeService.setPath(path, data, options) - } - route.get = function() {return currentPath} - route.prefix = function(prefix0) {routeService.prefix = prefix0} - route.link = function(vnode1) { - vnode1.dom.setAttribute("href", routeService.prefix + vnode1.attrs.href) - vnode1.dom.onclick = function(e) { - if (e.ctrlKey || e.metaKey || e.shiftKey || e.which === 2) return - e.preventDefault() - e.redraw = false - var href = this.getAttribute("href") - if (href.indexOf(routeService.prefix) === 0) href = href.slice(routeService.prefix.length) - route.set(href, undefined, undefined) - } - } - route.param = function(key3) { - if(typeof attrs3 !== "undefined" && typeof key3 !== "undefined") return attrs3[key3] - return attrs3 - } - return route -} -m.route = _20(window, redrawService) -m.withAttr = function(attrName, callback1, context) { - return function(e) { - callback1.call(context || this, attrName in e.currentTarget ? e.currentTarget[attrName] : e.currentTarget.getAttribute(attrName)) - } -} -var _28 = coreRenderer(window) -m.render = _28.render -m.redraw = redrawService.redraw -m.request = requestService.request -m.jsonp = requestService.jsonp -m.parseQueryString = parseQueryString -m.buildQueryString = buildQueryString -m.version = "1.0.0" -m.vnode = Vnode -if (typeof module !== "undefined") module["exports"] = m -else window.m = m -} -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) -},{"timers":2}],4:[function(require,module,exports){ -/*! @preserve - * numeral.js - * version : 2.0.6 - * author : Adam Draper - * license : MIT - * http://adamwdraper.github.com/Numeral-js/ - */ - -(function (global, factory) { - if (typeof define === 'function' && define.amd) { - define(factory); - } else if (typeof module === 'object' && module.exports) { - module.exports = factory(); - } else { - global.numeral = factory(); - } -}(this, function () { - /************************************ - Variables - ************************************/ - - var numeral, - _, - VERSION = '2.0.6', - formats = {}, - locales = {}, - defaults = { - currentLocale: 'en', - zeroFormat: null, - nullFormat: null, - defaultFormat: '0,0', - scalePercentBy100: true - }, - options = { - currentLocale: defaults.currentLocale, - zeroFormat: defaults.zeroFormat, - nullFormat: defaults.nullFormat, - defaultFormat: defaults.defaultFormat, - scalePercentBy100: defaults.scalePercentBy100 - }; - - - /************************************ - Constructors - ************************************/ - - // Numeral prototype object - function Numeral(input, number) { - this._input = input; - - this._value = number; - } - - numeral = function(input) { - var value, - kind, - unformatFunction, - regexp; - - if (numeral.isNumeral(input)) { - value = input.value(); - } else if (input === 0 || typeof input === 'undefined') { - value = 0; - } else if (input === null || _.isNaN(input)) { - value = null; - } else if (typeof input === 'string') { - if (options.zeroFormat && input === options.zeroFormat) { - value = 0; - } else if (options.nullFormat && input === options.nullFormat || !input.replace(/[^0-9]+/g, '').length) { - value = null; - } else { - for (kind in formats) { - regexp = typeof formats[kind].regexps.unformat === 'function' ? formats[kind].regexps.unformat() : formats[kind].regexps.unformat; - - if (regexp && input.match(regexp)) { - unformatFunction = formats[kind].unformat; - - break; - } - } - - unformatFunction = unformatFunction || numeral._.stringToNumber; - - value = unformatFunction(input); - } - } else { - value = Number(input)|| null; - } - - return new Numeral(input, value); - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function(obj) { - return obj instanceof Numeral; - }; - - // helper functions - numeral._ = _ = { - // formats numbers separators, decimals places, signs, abbreviations - numberToFormat: function(value, format, roundingFunction) { - var locale = locales[numeral.options.currentLocale], - negP = false, - optDec = false, - leadingCount = 0, - abbr = '', - trillion = 1000000000000, - billion = 1000000000, - million = 1000000, - thousand = 1000, - decimal = '', - neg = false, - abbrForce, // force abbreviation - abs, - min, - max, - power, - int, - precision, - signed, - thousands, - output; - - // make sure we never format a null value - value = value || 0; - - abs = Math.abs(value); - - // see if we should use parentheses for negative number or if we should prefix with a sign - // if both are present we default to parentheses - if (numeral._.includes(format, '(')) { - negP = true; - format = format.replace(/[\(|\)]/g, ''); - } else if (numeral._.includes(format, '+') || numeral._.includes(format, '-')) { - signed = numeral._.includes(format, '+') ? format.indexOf('+') : value < 0 ? format.indexOf('-') : -1; - format = format.replace(/[\+|\-]/g, ''); - } - - // see if abbreviation is wanted - if (numeral._.includes(format, 'a')) { - abbrForce = format.match(/a(k|m|b|t)?/); - - abbrForce = abbrForce ? abbrForce[1] : false; - - // check for space before abbreviation - if (numeral._.includes(format, ' a')) { - abbr = ' '; - } - - format = format.replace(new RegExp(abbr + 'a[kmbt]?'), ''); - - if (abs >= trillion && !abbrForce || abbrForce === 't') { - // trillion - abbr += locale.abbreviations.trillion; - value = value / trillion; - } else if (abs < trillion && abs >= billion && !abbrForce || abbrForce === 'b') { - // billion - abbr += locale.abbreviations.billion; - value = value / billion; - } else if (abs < billion && abs >= million && !abbrForce || abbrForce === 'm') { - // million - abbr += locale.abbreviations.million; - value = value / million; - } else if (abs < million && abs >= thousand && !abbrForce || abbrForce === 'k') { - // thousand - abbr += locale.abbreviations.thousand; - value = value / thousand; - } - } - - // check for optional decimals - if (numeral._.includes(format, '[.]')) { - optDec = true; - format = format.replace('[.]', '.'); - } - - // break number and format - int = value.toString().split('.')[0]; - precision = format.split('.')[1]; - thousands = format.indexOf(','); - leadingCount = (format.split('.')[0].split(',')[0].match(/0/g) || []).length; - - if (precision) { - if (numeral._.includes(precision, '[')) { - precision = precision.replace(']', ''); - precision = precision.split('['); - decimal = numeral._.toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length); - } else { - decimal = numeral._.toFixed(value, precision.length, roundingFunction); - } - - int = decimal.split('.')[0]; - - if (numeral._.includes(decimal, '.')) { - decimal = locale.delimiters.decimal + decimal.split('.')[1]; - } else { - decimal = ''; - } - - if (optDec && Number(decimal.slice(1)) === 0) { - decimal = ''; - } - } else { - int = numeral._.toFixed(value, 0, roundingFunction); - } - - // check abbreviation again after rounding - if (abbr && !abbrForce && Number(int) >= 1000 && abbr !== locale.abbreviations.trillion) { - int = String(Number(int) / 1000); - - switch (abbr) { - case locale.abbreviations.thousand: - abbr = locale.abbreviations.million; - break; - case locale.abbreviations.million: - abbr = locale.abbreviations.billion; - break; - case locale.abbreviations.billion: - abbr = locale.abbreviations.trillion; - break; - } - } - - - // format number - if (numeral._.includes(int, '-')) { - int = int.slice(1); - neg = true; - } - - if (int.length < leadingCount) { - for (var i = leadingCount - int.length; i > 0; i--) { - int = '0' + int; - } - } - - if (thousands > -1) { - int = int.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + locale.delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - int = ''; - } - - output = int + decimal + (abbr ? abbr : ''); - - if (negP) { - output = (negP && neg ? '(' : '') + output + (negP && neg ? ')' : ''); - } else { - if (signed >= 0) { - output = signed === 0 ? (neg ? '-' : '+') + output : output + (neg ? '-' : '+'); - } else if (neg) { - output = '-' + output; - } - } - - return output; - }, - // unformats numbers separators, decimals places, signs, abbreviations - stringToNumber: function(string) { - var locale = locales[options.currentLocale], - stringOriginal = string, - abbreviations = { - thousand: 3, - million: 6, - billion: 9, - trillion: 12 - }, - abbreviation, - value, - i, - regexp; - - if (options.zeroFormat && string === options.zeroFormat) { - value = 0; - } else if (options.nullFormat && string === options.nullFormat || !string.replace(/[^0-9]+/g, '').length) { - value = null; - } else { - value = 1; - - if (locale.delimiters.decimal !== '.') { - string = string.replace(/\./g, '').replace(locale.delimiters.decimal, '.'); - } - - for (abbreviation in abbreviations) { - regexp = new RegExp('[^a-zA-Z]' + locale.abbreviations[abbreviation] + '(?:\\)|(\\' + locale.currency.symbol + ')?(?:\\))?)?$'); - - if (stringOriginal.match(regexp)) { - value *= Math.pow(10, abbreviations[abbreviation]); - break; - } - } - - // check for negative number - value *= (string.split('-').length + Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2 ? 1 : -1; - - // remove non numbers - string = string.replace(/[^0-9\.]+/g, ''); - - value *= Number(string); - } - - return value; - }, - isNaN: function(value) { - return typeof value === 'number' && isNaN(value); - }, - includes: function(string, search) { - return string.indexOf(search) !== -1; - }, - insert: function(string, subString, start) { - return string.slice(0, start) + subString + string.slice(start); - }, - reduce: function(array, callback /*, initialValue*/) { - if (this === null) { - throw new TypeError('Array.prototype.reduce called on null or undefined'); - } - - if (typeof callback !== 'function') { - throw new TypeError(callback + ' is not a function'); - } - - var t = Object(array), - len = t.length >>> 0, - k = 0, - value; - - if (arguments.length === 3) { - value = arguments[2]; - } else { - while (k < len && !(k in t)) { - k++; - } - - if (k >= len) { - throw new TypeError('Reduce of empty array with no initial value'); - } - - value = t[k++]; - } - for (; k < len; k++) { - if (k in t) { - value = callback(value, t[k], k, t); - } - } - return value; - }, - /** - * Computes the multiplier necessary to make x >= 1, - * effectively eliminating miscalculations caused by - * finite precision. - */ - multiplier: function (x) { - var parts = x.toString().split('.'); - - return parts.length < 2 ? 1 : Math.pow(10, parts[1].length); - }, - /** - * Given a variable number of arguments, returns the maximum - * multiplier that must be used to normalize an operation involving - * all of them. - */ - correctionFactor: function () { - var args = Array.prototype.slice.call(arguments); - - return args.reduce(function(accum, next) { - var mn = _.multiplier(next); - return accum > mn ? accum : mn; - }, 1); - }, - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present - * problems for accounting- and finance-related software. - */ - toFixed: function(value, maxDecimals, roundingFunction, optionals) { - var splitValue = value.toString().split('.'), - minDecimals = maxDecimals - (optionals || 0), - boundedPrecision, - optionalsRegExp, - power, - output; - - // Use the smallest precision value possible to avoid errors from floating point representation - if (splitValue.length === 2) { - boundedPrecision = Math.min(Math.max(splitValue[1].length, minDecimals), maxDecimals); - } else { - boundedPrecision = minDecimals; - } - - power = Math.pow(10, boundedPrecision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - output = (roundingFunction(value + 'e+' + boundedPrecision) / power).toFixed(boundedPrecision); - - if (optionals > maxDecimals - boundedPrecision) { - optionalsRegExp = new RegExp('\\.?0{1,' + (optionals - (maxDecimals - boundedPrecision)) + '}$'); - output = output.replace(optionalsRegExp, ''); - } - - return output; - } - }; - - // avaliable options - numeral.options = options; - - // avaliable formats - numeral.formats = formats; - - // avaliable formats - numeral.locales = locales; - - // This function sets the current locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - numeral.locale = function(key) { - if (key) { - options.currentLocale = key.toLowerCase(); - } - - return options.currentLocale; - }; - - // This function provides access to the loaded locale data. If - // no arguments are passed in, it will simply return the current - // global locale object. - numeral.localeData = function(key) { - if (!key) { - return locales[options.currentLocale]; - } - - key = key.toLowerCase(); - - if (!locales[key]) { - throw new Error('Unknown locale : ' + key); - } - - return locales[key]; - }; - - numeral.reset = function() { - for (var property in defaults) { - options[property] = defaults[property]; - } - }; - - numeral.zeroFormat = function(format) { - options.zeroFormat = typeof(format) === 'string' ? format : null; - }; - - numeral.nullFormat = function (format) { - options.nullFormat = typeof(format) === 'string' ? format : null; - }; - - numeral.defaultFormat = function(format) { - options.defaultFormat = typeof(format) === 'string' ? format : '0.0'; - }; - - numeral.register = function(type, name, format) { - name = name.toLowerCase(); - - if (this[type + 's'][name]) { - throw new TypeError(name + ' ' + type + ' already registered.'); - } - - this[type + 's'][name] = format; - - return format; - }; - - - numeral.validate = function(val, culture) { - var _decimalSep, - _thousandSep, - _currSymbol, - _valArray, - _abbrObj, - _thousandRegEx, - localeData, - temp; - - //coerce val to string - if (typeof val !== 'string') { - val += ''; - - if (console.warn) { - console.warn('Numeral.js: Value is not string. It has been co-erced to: ', val); - } - } - - //trim whitespaces from either sides - val = val.trim(); - - //if val is just digits return true - if (!!val.match(/^\d+$/)) { - return true; - } - - //if val is empty return false - if (val === '') { - return false; - } - - //get the decimal and thousands separator from numeral.localeData - try { - //check if the culture is understood by numeral. if not, default it to current locale - localeData = numeral.localeData(culture); - } catch (e) { - localeData = numeral.localeData(numeral.locale()); - } - - //setup the delimiters and currency symbol based on culture/locale - _currSymbol = localeData.currency.symbol; - _abbrObj = localeData.abbreviations; - _decimalSep = localeData.delimiters.decimal; - if (localeData.delimiters.thousands === '.') { - _thousandSep = '\\.'; - } else { - _thousandSep = localeData.delimiters.thousands; - } - - // validating currency symbol - temp = val.match(/^[^\d]+/); - if (temp !== null) { - val = val.substr(1); - if (temp[0] !== _currSymbol) { - return false; - } - } - - //validating abbreviation symbol - temp = val.match(/[^\d]+$/); - if (temp !== null) { - val = val.slice(0, -1); - if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) { - return false; - } - } - - _thousandRegEx = new RegExp(_thousandSep + '{2}'); - - if (!val.match(/[^\d.,]/g)) { - _valArray = val.split(_decimalSep); - if (_valArray.length > 2) { - return false; - } else { - if (_valArray.length < 2) { - return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx)); - } else { - if (_valArray[0].length === 1) { - return ( !! _valArray[0].match(/^\d+$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\d+$/)); - } else { - return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\d+$/)); - } - } - } - } - - return false; - }; - - - /************************************ - Numeral Prototype - ************************************/ - - numeral.fn = Numeral.prototype = { - clone: function() { - return numeral(this); - }, - format: function(inputString, roundingFunction) { - var value = this._value, - format = inputString || options.defaultFormat, - kind, - output, - formatFunction; - - // make sure we have a roundingFunction - roundingFunction = roundingFunction || Math.round; - - // format based on value - if (value === 0 && options.zeroFormat !== null) { - output = options.zeroFormat; - } else if (value === null && options.nullFormat !== null) { - output = options.nullFormat; - } else { - for (kind in formats) { - if (format.match(formats[kind].regexps.format)) { - formatFunction = formats[kind].format; - - break; - } - } - - formatFunction = formatFunction || numeral._.numberToFormat; - - output = formatFunction(value, format, roundingFunction); - } - - return output; - }, - value: function() { - return this._value; - }, - input: function() { - return this._input; - }, - set: function(value) { - this._value = Number(value); - - return this; - }, - add: function(value) { - var corrFactor = _.correctionFactor.call(null, this._value, value); - - function cback(accum, curr, currI, O) { - return accum + Math.round(corrFactor * curr); - } - - this._value = _.reduce([this._value, value], cback, 0) / corrFactor; - - return this; - }, - subtract: function(value) { - var corrFactor = _.correctionFactor.call(null, this._value, value); - - function cback(accum, curr, currI, O) { - return accum - Math.round(corrFactor * curr); - } - - this._value = _.reduce([value], cback, Math.round(this._value * corrFactor)) / corrFactor; - - return this; - }, - multiply: function(value) { - function cback(accum, curr, currI, O) { - var corrFactor = _.correctionFactor(accum, curr); - return Math.round(accum * corrFactor) * Math.round(curr * corrFactor) / Math.round(corrFactor * corrFactor); - } - - this._value = _.reduce([this._value, value], cback, 1); - - return this; - }, - divide: function(value) { - function cback(accum, curr, currI, O) { - var corrFactor = _.correctionFactor(accum, curr); - return Math.round(accum * corrFactor) / Math.round(curr * corrFactor); - } - - this._value = _.reduce([this._value, value], cback); - - return this; - }, - difference: function(value) { - return Math.abs(numeral(this._value).subtract(value).value()); - } - }; - - /************************************ - Default Locale && Format - ************************************/ - - numeral.register('locale', 'en', { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function(number) { - var b = number % 10; - return (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$' - } - }); - - - -(function() { - numeral.register('format', 'bps', { - regexps: { - format: /(BPS)/, - unformat: /(BPS)/ - }, - format: function(value, format, roundingFunction) { - var space = numeral._.includes(format, ' BPS') ? ' ' : '', - output; - - value = value * 10000; - - // check for space before BPS - format = format.replace(/\s?BPS/, ''); - - output = numeral._.numberToFormat(value, format, roundingFunction); - - if (numeral._.includes(output, ')')) { - output = output.split(''); - - output.splice(-1, 0, space + 'BPS'); - - output = output.join(''); - } else { - output = output + space + 'BPS'; - } - - return output; - }, - unformat: function(string) { - return +(numeral._.stringToNumber(string) * 0.0001).toFixed(15); - } - }); -})(); - - -(function() { - var decimal = { - base: 1000, - suffixes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] - }, - binary = { - base: 1024, - suffixes: ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] - }; - - var allSuffixes = decimal.suffixes.concat(binary.suffixes.filter(function (item) { - return decimal.suffixes.indexOf(item) < 0; - })); - var unformatRegex = allSuffixes.join('|'); - // Allow support for BPS (http://www.investopedia.com/terms/b/basispoint.asp) - unformatRegex = '(' + unformatRegex.replace('B', 'B(?!PS)') + ')'; - - numeral.register('format', 'bytes', { - regexps: { - format: /([0\s]i?b)/, - unformat: new RegExp(unformatRegex) - }, - format: function(value, format, roundingFunction) { - var output, - bytes = numeral._.includes(format, 'ib') ? binary : decimal, - suffix = numeral._.includes(format, ' b') || numeral._.includes(format, ' ib') ? ' ' : '', - power, - min, - max; - - // check for space before - format = format.replace(/\s?i?b/, ''); - - for (power = 0; power <= bytes.suffixes.length; power++) { - min = Math.pow(bytes.base, power); - max = Math.pow(bytes.base, power + 1); - - if (value === null || value === 0 || value >= min && value < max) { - suffix += bytes.suffixes[power]; - - if (min > 0) { - value = value / min; - } - - break; - } - } - - output = numeral._.numberToFormat(value, format, roundingFunction); - - return output + suffix; - }, - unformat: function(string) { - var value = numeral._.stringToNumber(string), - power, - bytesMultiplier; - - if (value) { - for (power = decimal.suffixes.length - 1; power >= 0; power--) { - if (numeral._.includes(string, decimal.suffixes[power])) { - bytesMultiplier = Math.pow(decimal.base, power); - - break; - } - - if (numeral._.includes(string, binary.suffixes[power])) { - bytesMultiplier = Math.pow(binary.base, power); - - break; - } - } - - value *= (bytesMultiplier || 1); - } - - return value; - } - }); -})(); - - -(function() { - numeral.register('format', 'currency', { - regexps: { - format: /(\$)/ - }, - format: function(value, format, roundingFunction) { - var locale = numeral.locales[numeral.options.currentLocale], - symbols = { - before: format.match(/^([\+|\-|\(|\s|\$]*)/)[0], - after: format.match(/([\+|\-|\)|\s|\$]*)$/)[0] - }, - output, - symbol, - i; - - // strip format of spaces and $ - format = format.replace(/\s?\$\s?/, ''); - - // format the number - output = numeral._.numberToFormat(value, format, roundingFunction); - - // update the before and after based on value - if (value >= 0) { - symbols.before = symbols.before.replace(/[\-\(]/, ''); - symbols.after = symbols.after.replace(/[\-\)]/, ''); - } else if (value < 0 && (!numeral._.includes(symbols.before, '-') && !numeral._.includes(symbols.before, '('))) { - symbols.before = '-' + symbols.before; - } - - // loop through each before symbol - for (i = 0; i < symbols.before.length; i++) { - symbol = symbols.before[i]; - - switch (symbol) { - case '$': - output = numeral._.insert(output, locale.currency.symbol, i); - break; - case ' ': - output = numeral._.insert(output, ' ', i + locale.currency.symbol.length - 1); - break; - } - } - - // loop through each after symbol - for (i = symbols.after.length - 1; i >= 0; i--) { - symbol = symbols.after[i]; - - switch (symbol) { - case '$': - output = i === symbols.after.length - 1 ? output + locale.currency.symbol : numeral._.insert(output, locale.currency.symbol, -(symbols.after.length - (1 + i))); - break; - case ' ': - output = i === symbols.after.length - 1 ? output + ' ' : numeral._.insert(output, ' ', -(symbols.after.length - (1 + i) + locale.currency.symbol.length - 1)); - break; - } - } - - - return output; - } - }); -})(); - - -(function() { - numeral.register('format', 'exponential', { - regexps: { - format: /(e\+|e-)/, - unformat: /(e\+|e-)/ - }, - format: function(value, format, roundingFunction) { - var output, - exponential = typeof value === 'number' && !numeral._.isNaN(value) ? value.toExponential() : '0e+0', - parts = exponential.split('e'); - - format = format.replace(/e[\+|\-]{1}0/, ''); - - output = numeral._.numberToFormat(Number(parts[0]), format, roundingFunction); - - return output + 'e' + parts[1]; - }, - unformat: function(string) { - var parts = numeral._.includes(string, 'e+') ? string.split('e+') : string.split('e-'), - value = Number(parts[0]), - power = Number(parts[1]); - - power = numeral._.includes(string, 'e-') ? power *= -1 : power; - - function cback(accum, curr, currI, O) { - var corrFactor = numeral._.correctionFactor(accum, curr), - num = (accum * corrFactor) * (curr * corrFactor) / (corrFactor * corrFactor); - return num; - } - - return numeral._.reduce([value, Math.pow(10, power)], cback, 1); - } - }); -})(); - - -(function() { - numeral.register('format', 'ordinal', { - regexps: { - format: /(o)/ - }, - format: function(value, format, roundingFunction) { - var locale = numeral.locales[numeral.options.currentLocale], - output, - ordinal = numeral._.includes(format, ' o') ? ' ' : ''; - - // check for space before - format = format.replace(/\s?o/, ''); - - ordinal += locale.ordinal(value); - - output = numeral._.numberToFormat(value, format, roundingFunction); - - return output + ordinal; - } - }); -})(); - - -(function() { - numeral.register('format', 'percentage', { - regexps: { - format: /(%)/, - unformat: /(%)/ - }, - format: function(value, format, roundingFunction) { - var space = numeral._.includes(format, ' %') ? ' ' : '', - output; - - if (numeral.options.scalePercentBy100) { - value = value * 100; - } - - // check for space before % - format = format.replace(/\s?\%/, ''); - - output = numeral._.numberToFormat(value, format, roundingFunction); - - if (numeral._.includes(output, ')')) { - output = output.split(''); - - output.splice(-1, 0, space + '%'); - - output = output.join(''); - } else { - output = output + space + '%'; - } - - return output; - }, - unformat: function(string) { - var number = numeral._.stringToNumber(string); - if (numeral.options.scalePercentBy100) { - return number * 0.01; - } - return number; - } - }); -})(); - - -(function() { - numeral.register('format', 'time', { - regexps: { - format: /(:)/, - unformat: /(:)/ - }, - format: function(value, format, roundingFunction) { - var hours = Math.floor(value / 60 / 60), - minutes = Math.floor((value - (hours * 60 * 60)) / 60), - seconds = Math.round(value - (hours * 60 * 60) - (minutes * 60)); - - return hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds); - }, - unformat: function(string) { - var timeArray = string.split(':'), - seconds = 0; - - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.length === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - }); -})(); - -return numeral; -})); - -},{}],5:[function(require,module,exports){ -(function (global){(function (){ -/**! - * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.16.1 - * @license - * Copyright (c) 2016 Federico Zivolo and contributors - * - * 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. - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.Popper = factory()); -}(this, (function () { 'use strict'; - -var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined'; - -var timeoutDuration = function () { - var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; - for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { - if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { - return 1; - } - } - return 0; -}(); - -function microtaskDebounce(fn) { - var called = false; - return function () { - if (called) { - return; - } - called = true; - window.Promise.resolve().then(function () { - called = false; - fn(); - }); - }; -} - -function taskDebounce(fn) { - var scheduled = false; - return function () { - if (!scheduled) { - scheduled = true; - setTimeout(function () { - scheduled = false; - fn(); - }, timeoutDuration); - } - }; -} - -var supportsMicroTasks = isBrowser && window.Promise; - -/** -* Create a debounced version of a method, that's asynchronously deferred -* but called in the minimum time possible. -* -* @method -* @memberof Popper.Utils -* @argument {Function} fn -* @returns {Function} -*/ -var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; - -/** - * Check if the given variable is a function - * @method - * @memberof Popper.Utils - * @argument {Any} functionToCheck - variable to check - * @returns {Boolean} answer to: is a function? - */ -function isFunction(functionToCheck) { - var getType = {}; - return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; -} - -/** - * Get CSS computed property of the given element - * @method - * @memberof Popper.Utils - * @argument {Eement} element - * @argument {String} property - */ -function getStyleComputedProperty(element, property) { - if (element.nodeType !== 1) { - return []; - } - // NOTE: 1 DOM access here - var window = element.ownerDocument.defaultView; - var css = window.getComputedStyle(element, null); - return property ? css[property] : css; -} - -/** - * Returns the parentNode or the host of the element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} parent - */ -function getParentNode(element) { - if (element.nodeName === 'HTML') { - return element; - } - return element.parentNode || element.host; -} - -/** - * Returns the scrolling parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} scroll parent - */ -function getScrollParent(element) { - // Return body, `getScroll` will take care to get the correct `scrollTop` from it - if (!element) { - return document.body; - } - - switch (element.nodeName) { - case 'HTML': - case 'BODY': - return element.ownerDocument.body; - case '#document': - return element.body; - } - - // Firefox want us to check `-x` and `-y` variations as well - - var _getStyleComputedProp = getStyleComputedProperty(element), - overflow = _getStyleComputedProp.overflow, - overflowX = _getStyleComputedProp.overflowX, - overflowY = _getStyleComputedProp.overflowY; - - if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { - return element; - } - - return getScrollParent(getParentNode(element)); -} - -/** - * Returns the reference node of the reference object, or the reference object itself. - * @method - * @memberof Popper.Utils - * @param {Element|Object} reference - the reference element (the popper will be relative to this) - * @returns {Element} parent - */ -function getReferenceNode(reference) { - return reference && reference.referenceNode ? reference.referenceNode : reference; -} - -var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); -var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); - -/** - * Determines if the browser is Internet Explorer - * @method - * @memberof Popper.Utils - * @param {Number} version to check - * @returns {Boolean} isIE - */ -function isIE(version) { - if (version === 11) { - return isIE11; - } - if (version === 10) { - return isIE10; - } - return isIE11 || isIE10; -} - -/** - * Returns the offset parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} offset parent - */ -function getOffsetParent(element) { - if (!element) { - return document.documentElement; - } - - var noOffsetParent = isIE(10) ? document.body : null; - - // NOTE: 1 DOM access here - var offsetParent = element.offsetParent || null; - // Skip hidden elements which don't have an offsetParent - while (offsetParent === noOffsetParent && element.nextElementSibling) { - offsetParent = (element = element.nextElementSibling).offsetParent; - } - - var nodeName = offsetParent && offsetParent.nodeName; - - if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { - return element ? element.ownerDocument.documentElement : document.documentElement; - } - - // .offsetParent will return the closest TH, TD or TABLE in case - // no offsetParent is present, I hate this job... - if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { - return getOffsetParent(offsetParent); - } - - return offsetParent; -} - -function isOffsetContainer(element) { - var nodeName = element.nodeName; - - if (nodeName === 'BODY') { - return false; - } - return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; -} - -/** - * Finds the root node (document, shadowDOM root) of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} node - * @returns {Element} root node - */ -function getRoot(node) { - if (node.parentNode !== null) { - return getRoot(node.parentNode); - } - - return node; -} - -/** - * Finds the offset parent common to the two provided nodes - * @method - * @memberof Popper.Utils - * @argument {Element} element1 - * @argument {Element} element2 - * @returns {Element} common offset parent - */ -function findCommonOffsetParent(element1, element2) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { - return document.documentElement; - } - - // Here we make sure to give as "start" the element that comes first in the DOM - var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; - var start = order ? element1 : element2; - var end = order ? element2 : element1; - - // Get common ancestor container - var range = document.createRange(); - range.setStart(start, 0); - range.setEnd(end, 0); - var commonAncestorContainer = range.commonAncestorContainer; - - // Both nodes are inside #document - - if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { - if (isOffsetContainer(commonAncestorContainer)) { - return commonAncestorContainer; - } - - return getOffsetParent(commonAncestorContainer); - } - - // one of the nodes is inside shadowDOM, find which one - var element1root = getRoot(element1); - if (element1root.host) { - return findCommonOffsetParent(element1root.host, element2); - } else { - return findCommonOffsetParent(element1, getRoot(element2).host); - } -} - -/** - * Gets the scroll value of the given element in the given side (top and left) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {String} side `top` or `left` - * @returns {number} amount of scrolled pixels - */ -function getScroll(element) { - var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; - - var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; - var nodeName = element.nodeName; - - if (nodeName === 'BODY' || nodeName === 'HTML') { - var html = element.ownerDocument.documentElement; - var scrollingElement = element.ownerDocument.scrollingElement || html; - return scrollingElement[upperSide]; - } - - return element[upperSide]; -} - -/* - * Sum or subtract the element scroll values (left and top) from a given rect object - * @method - * @memberof Popper.Utils - * @param {Object} rect - Rect object you want to change - * @param {HTMLElement} element - The element from the function reads the scroll values - * @param {Boolean} subtract - set to true if you want to subtract the scroll values - * @return {Object} rect - The modifier rect object - */ -function includeScroll(rect, element) { - var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - var modifier = subtract ? -1 : 1; - rect.top += scrollTop * modifier; - rect.bottom += scrollTop * modifier; - rect.left += scrollLeft * modifier; - rect.right += scrollLeft * modifier; - return rect; -} - -/* - * Helper to detect borders of a given element - * @method - * @memberof Popper.Utils - * @param {CSSStyleDeclaration} styles - * Result of `getStyleComputedProperty` on the given element - * @param {String} axis - `x` or `y` - * @return {number} borders - The borders size of the given axis - */ - -function getBordersSize(styles, axis) { - var sideA = axis === 'x' ? 'Left' : 'Top'; - var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; - - return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']); -} - -function getSize(axis, body, html, computedStyle) { - return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); -} - -function getWindowSizes(document) { - var body = document.body; - var html = document.documentElement; - var computedStyle = isIE(10) && getComputedStyle(html); - - return { - height: getSize('Height', body, html, computedStyle), - width: getSize('Width', body, html, computedStyle) - }; -} - -var classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -}; - -var createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; -}(); - - - - - -var defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -}; - -var _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; -}; - -/** - * Given element offsets, generate an output similar to getBoundingClientRect - * @method - * @memberof Popper.Utils - * @argument {Object} offsets - * @returns {Object} ClientRect like output - */ -function getClientRect(offsets) { - return _extends({}, offsets, { - right: offsets.left + offsets.width, - bottom: offsets.top + offsets.height - }); -} - -/** - * Get bounding client rect of given element - * @method - * @memberof Popper.Utils - * @param {HTMLElement} element - * @return {Object} client rect - */ -function getBoundingClientRect(element) { - var rect = {}; - - // IE10 10 FIX: Please, don't ask, the element isn't - // considered in DOM in some circumstances... - // This isn't reproducible in IE10 compatibility mode of IE11 - try { - if (isIE(10)) { - rect = element.getBoundingClientRect(); - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - rect.top += scrollTop; - rect.left += scrollLeft; - rect.bottom += scrollTop; - rect.right += scrollLeft; - } else { - rect = element.getBoundingClientRect(); - } - } catch (e) {} - - var result = { - left: rect.left, - top: rect.top, - width: rect.right - rect.left, - height: rect.bottom - rect.top - }; - - // subtract scrollbar size from sizes - var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; - var width = sizes.width || element.clientWidth || result.width; - var height = sizes.height || element.clientHeight || result.height; - - var horizScrollbar = element.offsetWidth - width; - var vertScrollbar = element.offsetHeight - height; - - // if an hypothetical scrollbar is detected, we must be sure it's not a `border` - // we make this check conditional for performance reasons - if (horizScrollbar || vertScrollbar) { - var styles = getStyleComputedProperty(element); - horizScrollbar -= getBordersSize(styles, 'x'); - vertScrollbar -= getBordersSize(styles, 'y'); - - result.width -= horizScrollbar; - result.height -= vertScrollbar; - } - - return getClientRect(result); -} - -function getOffsetRectRelativeToArbitraryNode(children, parent) { - var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var isIE10 = isIE(10); - var isHTML = parent.nodeName === 'HTML'; - var childrenRect = getBoundingClientRect(children); - var parentRect = getBoundingClientRect(parent); - var scrollParent = getScrollParent(children); - - var styles = getStyleComputedProperty(parent); - var borderTopWidth = parseFloat(styles.borderTopWidth); - var borderLeftWidth = parseFloat(styles.borderLeftWidth); - - // In cases where the parent is fixed, we must ignore negative scroll in offset calc - if (fixedPosition && isHTML) { - parentRect.top = Math.max(parentRect.top, 0); - parentRect.left = Math.max(parentRect.left, 0); - } - var offsets = getClientRect({ - top: childrenRect.top - parentRect.top - borderTopWidth, - left: childrenRect.left - parentRect.left - borderLeftWidth, - width: childrenRect.width, - height: childrenRect.height - }); - offsets.marginTop = 0; - offsets.marginLeft = 0; - - // Subtract margins of documentElement in case it's being used as parent - // we do this only on HTML because it's the only element that behaves - // differently when margins are applied to it. The margins are included in - // the box of the documentElement, in the other cases not. - if (!isIE10 && isHTML) { - var marginTop = parseFloat(styles.marginTop); - var marginLeft = parseFloat(styles.marginLeft); - - offsets.top -= borderTopWidth - marginTop; - offsets.bottom -= borderTopWidth - marginTop; - offsets.left -= borderLeftWidth - marginLeft; - offsets.right -= borderLeftWidth - marginLeft; - - // Attach marginTop and marginLeft because in some circumstances we may need them - offsets.marginTop = marginTop; - offsets.marginLeft = marginLeft; - } - - if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { - offsets = includeScroll(offsets, parent); - } - - return offsets; -} - -function getViewportOffsetRectRelativeToArtbitraryNode(element) { - var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var html = element.ownerDocument.documentElement; - var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); - var width = Math.max(html.clientWidth, window.innerWidth || 0); - var height = Math.max(html.clientHeight, window.innerHeight || 0); - - var scrollTop = !excludeScroll ? getScroll(html) : 0; - var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; - - var offset = { - top: scrollTop - relativeOffset.top + relativeOffset.marginTop, - left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, - width: width, - height: height - }; - - return getClientRect(offset); -} - -/** - * Check if the given element is fixed or is inside a fixed parent - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {Element} customContainer - * @returns {Boolean} answer to "isFixed?" - */ -function isFixed(element) { - var nodeName = element.nodeName; - if (nodeName === 'BODY' || nodeName === 'HTML') { - return false; - } - if (getStyleComputedProperty(element, 'position') === 'fixed') { - return true; - } - var parentNode = getParentNode(element); - if (!parentNode) { - return false; - } - return isFixed(parentNode); -} - -/** - * Finds the first parent of an element that has a transformed property defined - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} first transformed parent or documentElement - */ - -function getFixedPositionOffsetParent(element) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element || !element.parentElement || isIE()) { - return document.documentElement; - } - var el = element.parentElement; - while (el && getStyleComputedProperty(el, 'transform') === 'none') { - el = el.parentElement; - } - return el || document.documentElement; -} - -/** - * Computed the boundaries limits and return them - * @method - * @memberof Popper.Utils - * @param {HTMLElement} popper - * @param {HTMLElement} reference - * @param {number} padding - * @param {HTMLElement} boundariesElement - Element used to define the boundaries - * @param {Boolean} fixedPosition - Is in fixed position mode - * @returns {Object} Coordinates of the boundaries - */ -function getBoundaries(popper, reference, padding, boundariesElement) { - var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - - // NOTE: 1 DOM access here - - var boundaries = { top: 0, left: 0 }; - var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); - - // Handle viewport case - if (boundariesElement === 'viewport') { - boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); - } else { - // Handle other cases based on DOM element used as boundaries - var boundariesNode = void 0; - if (boundariesElement === 'scrollParent') { - boundariesNode = getScrollParent(getParentNode(reference)); - if (boundariesNode.nodeName === 'BODY') { - boundariesNode = popper.ownerDocument.documentElement; - } - } else if (boundariesElement === 'window') { - boundariesNode = popper.ownerDocument.documentElement; - } else { - boundariesNode = boundariesElement; - } - - var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); - - // In case of HTML, we need a different computation - if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { - var _getWindowSizes = getWindowSizes(popper.ownerDocument), - height = _getWindowSizes.height, - width = _getWindowSizes.width; - - boundaries.top += offsets.top - offsets.marginTop; - boundaries.bottom = height + offsets.top; - boundaries.left += offsets.left - offsets.marginLeft; - boundaries.right = width + offsets.left; - } else { - // for all the other DOM elements, this one is good - boundaries = offsets; - } - } - - // Add paddings - padding = padding || 0; - var isPaddingNumber = typeof padding === 'number'; - boundaries.left += isPaddingNumber ? padding : padding.left || 0; - boundaries.top += isPaddingNumber ? padding : padding.top || 0; - boundaries.right -= isPaddingNumber ? padding : padding.right || 0; - boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; - - return boundaries; -} - -function getArea(_ref) { - var width = _ref.width, - height = _ref.height; - - return width * height; -} - -/** - * Utility used to transform the `auto` placement to the placement with more - * available space. - * @method - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { - var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - - if (placement.indexOf('auto') === -1) { - return placement; - } - - var boundaries = getBoundaries(popper, reference, padding, boundariesElement); - - var rects = { - top: { - width: boundaries.width, - height: refRect.top - boundaries.top - }, - right: { - width: boundaries.right - refRect.right, - height: boundaries.height - }, - bottom: { - width: boundaries.width, - height: boundaries.bottom - refRect.bottom - }, - left: { - width: refRect.left - boundaries.left, - height: boundaries.height - } - }; - - var sortedAreas = Object.keys(rects).map(function (key) { - return _extends({ - key: key - }, rects[key], { - area: getArea(rects[key]) - }); - }).sort(function (a, b) { - return b.area - a.area; - }); - - var filteredAreas = sortedAreas.filter(function (_ref2) { - var width = _ref2.width, - height = _ref2.height; - return width >= popper.clientWidth && height >= popper.clientHeight; - }); - - var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; - - var variation = placement.split('-')[1]; - - return computedPlacement + (variation ? '-' + variation : ''); -} - -/** - * Get offsets to the reference element - * @method - * @memberof Popper.Utils - * @param {Object} state - * @param {Element} popper - the popper element - * @param {Element} reference - the reference element (the popper will be relative to this) - * @param {Element} fixedPosition - is in fixed position mode - * @returns {Object} An object containing the offsets which will be applied to the popper - */ -function getReferenceOffsets(state, popper, reference) { - var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - - var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); - return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); -} - -/** - * Get the outer sizes of the given element (offset size + margins) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Object} object containing width and height properties - */ -function getOuterSizes(element) { - var window = element.ownerDocument.defaultView; - var styles = window.getComputedStyle(element); - var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); - var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); - var result = { - width: element.offsetWidth + y, - height: element.offsetHeight + x - }; - return result; -} - -/** - * Get the opposite placement of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement - * @returns {String} flipped placement - */ -function getOppositePlacement(placement) { - var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; - return placement.replace(/left|right|bottom|top/g, function (matched) { - return hash[matched]; - }); -} - -/** - * Get offsets to the popper - * @method - * @memberof Popper.Utils - * @param {Object} position - CSS position the Popper will get applied - * @param {HTMLElement} popper - the popper element - * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) - * @param {String} placement - one of the valid placement options - * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper - */ -function getPopperOffsets(popper, referenceOffsets, placement) { - placement = placement.split('-')[0]; - - // Get popper node sizes - var popperRect = getOuterSizes(popper); - - // Add position, width and height to our offsets object - var popperOffsets = { - width: popperRect.width, - height: popperRect.height - }; - - // depending by the popper placement we have to compute its offsets slightly differently - var isHoriz = ['right', 'left'].indexOf(placement) !== -1; - var mainSide = isHoriz ? 'top' : 'left'; - var secondarySide = isHoriz ? 'left' : 'top'; - var measurement = isHoriz ? 'height' : 'width'; - var secondaryMeasurement = !isHoriz ? 'height' : 'width'; - - popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; - if (placement === secondarySide) { - popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; - } else { - popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; - } - - return popperOffsets; -} - -/** - * Mimics the `find` method of Array - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ -function find(arr, check) { - // use native find if supported - if (Array.prototype.find) { - return arr.find(check); - } - - // use `filter` to obtain the same behavior of `find` - return arr.filter(check)[0]; -} - -/** - * Return the index of the matching object - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ -function findIndex(arr, prop, value) { - // use native findIndex if supported - if (Array.prototype.findIndex) { - return arr.findIndex(function (cur) { - return cur[prop] === value; - }); - } - - // use `find` + `indexOf` if `findIndex` isn't supported - var match = find(arr, function (obj) { - return obj[prop] === value; - }); - return arr.indexOf(match); -} - -/** - * Loop trough the list of modifiers and run them in order, - * each of them will then edit the data object. - * @method - * @memberof Popper.Utils - * @param {dataObject} data - * @param {Array} modifiers - * @param {String} ends - Optional modifier name used as stopper - * @returns {dataObject} - */ -function runModifiers(modifiers, data, ends) { - var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); - - modifiersToRun.forEach(function (modifier) { - if (modifier['function']) { - // eslint-disable-line dot-notation - console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); - } - var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation - if (modifier.enabled && isFunction(fn)) { - // Add properties to offsets to make them a complete clientRect object - // we do this before each modifier to make sure the previous one doesn't - // mess with these values - data.offsets.popper = getClientRect(data.offsets.popper); - data.offsets.reference = getClientRect(data.offsets.reference); - - data = fn(data, modifier); - } - }); - - return data; -} - -/** - * Updates the position of the popper, computing the new offsets and applying - * the new style.
    - * Prefer `scheduleUpdate` over `update` because of performance reasons. - * @method - * @memberof Popper - */ -function update() { - // if popper is destroyed, don't perform any further update - if (this.state.isDestroyed) { - return; - } - - var data = { - instance: this, - styles: {}, - arrowStyles: {}, - attributes: {}, - flipped: false, - offsets: {} - }; - - // compute reference element offsets - data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); - - // store the computed placement inside `originalPlacement` - data.originalPlacement = data.placement; - - data.positionFixed = this.options.positionFixed; - - // compute the popper offsets - data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); - - data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; - - // run the modifiers - data = runModifiers(this.modifiers, data); - - // the first `update` will call `onCreate` callback - // the other ones will call `onUpdate` callback - if (!this.state.isCreated) { - this.state.isCreated = true; - this.options.onCreate(data); - } else { - this.options.onUpdate(data); - } -} - -/** - * Helper used to know if the given modifier is enabled. - * @method - * @memberof Popper.Utils - * @returns {Boolean} - */ -function isModifierEnabled(modifiers, modifierName) { - return modifiers.some(function (_ref) { - var name = _ref.name, - enabled = _ref.enabled; - return enabled && name === modifierName; - }); -} - -/** - * Get the prefixed supported property name - * @method - * @memberof Popper.Utils - * @argument {String} property (camelCase) - * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) - */ -function getSupportedPropertyName(property) { - var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; - var upperProp = property.charAt(0).toUpperCase() + property.slice(1); - - for (var i = 0; i < prefixes.length; i++) { - var prefix = prefixes[i]; - var toCheck = prefix ? '' + prefix + upperProp : property; - if (typeof document.body.style[toCheck] !== 'undefined') { - return toCheck; - } - } - return null; -} - -/** - * Destroys the popper. - * @method - * @memberof Popper - */ -function destroy() { - this.state.isDestroyed = true; - - // touch DOM only if `applyStyle` modifier is enabled - if (isModifierEnabled(this.modifiers, 'applyStyle')) { - this.popper.removeAttribute('x-placement'); - this.popper.style.position = ''; - this.popper.style.top = ''; - this.popper.style.left = ''; - this.popper.style.right = ''; - this.popper.style.bottom = ''; - this.popper.style.willChange = ''; - this.popper.style[getSupportedPropertyName('transform')] = ''; - } - - this.disableEventListeners(); - - // remove the popper if user explicitly asked for the deletion on destroy - // do not use `remove` because IE11 doesn't support it - if (this.options.removeOnDestroy) { - this.popper.parentNode.removeChild(this.popper); - } - return this; -} - -/** - * Get the window associated with the element - * @argument {Element} element - * @returns {Window} - */ -function getWindow(element) { - var ownerDocument = element.ownerDocument; - return ownerDocument ? ownerDocument.defaultView : window; -} - -function attachToScrollParents(scrollParent, event, callback, scrollParents) { - var isBody = scrollParent.nodeName === 'BODY'; - var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; - target.addEventListener(event, callback, { passive: true }); - - if (!isBody) { - attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); - } - scrollParents.push(target); -} - -/** - * Setup needed event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ -function setupEventListeners(reference, options, state, updateBound) { - // Resize event listener on window - state.updateBound = updateBound; - getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); - - // Scroll event listener on scroll parents - var scrollElement = getScrollParent(reference); - attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); - state.scrollElement = scrollElement; - state.eventsEnabled = true; - - return state; -} - -/** - * It will add resize/scroll events and start recalculating - * position of the popper element when they are triggered. - * @method - * @memberof Popper - */ -function enableEventListeners() { - if (!this.state.eventsEnabled) { - this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); - } -} - -/** - * Remove event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ -function removeEventListeners(reference, state) { - // Remove resize event listener on window - getWindow(reference).removeEventListener('resize', state.updateBound); - - // Remove scroll event listener on scroll parents - state.scrollParents.forEach(function (target) { - target.removeEventListener('scroll', state.updateBound); - }); - - // Reset state - state.updateBound = null; - state.scrollParents = []; - state.scrollElement = null; - state.eventsEnabled = false; - return state; -} - -/** - * It will remove resize/scroll events and won't recalculate popper position - * when they are triggered. It also won't trigger `onUpdate` callback anymore, - * unless you call `update` method manually. - * @method - * @memberof Popper - */ -function disableEventListeners() { - if (this.state.eventsEnabled) { - cancelAnimationFrame(this.scheduleUpdate); - this.state = removeEventListeners(this.reference, this.state); - } -} - -/** - * Tells if a given input is a number - * @method - * @memberof Popper.Utils - * @param {*} input to check - * @return {Boolean} - */ -function isNumeric(n) { - return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); -} - -/** - * Set the style to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the style to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ -function setStyles(element, styles) { - Object.keys(styles).forEach(function (prop) { - var unit = ''; - // add unit if the value is numeric and is one of the following - if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { - unit = 'px'; - } - element.style[prop] = styles[prop] + unit; - }); -} - -/** - * Set the attributes to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the attributes to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ -function setAttributes(element, attributes) { - Object.keys(attributes).forEach(function (prop) { - var value = attributes[prop]; - if (value !== false) { - element.setAttribute(prop, attributes[prop]); - } else { - element.removeAttribute(prop); - } - }); -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} data.styles - List of style properties - values to apply to popper element - * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The same data object - */ -function applyStyle(data) { - // any property present in `data.styles` will be applied to the popper, - // in this way we can make the 3rd party modifiers add custom styles to it - // Be aware, modifiers could override the properties defined in the previous - // lines of this modifier! - setStyles(data.instance.popper, data.styles); - - // any property present in `data.attributes` will be applied to the popper, - // they will be set as HTML attributes of the element - setAttributes(data.instance.popper, data.attributes); - - // if arrowElement is defined and arrowStyles has some properties - if (data.arrowElement && Object.keys(data.arrowStyles).length) { - setStyles(data.arrowElement, data.arrowStyles); - } - - return data; -} - -/** - * Set the x-placement attribute before everything else because it could be used - * to add margins to the popper margins needs to be calculated to get the - * correct popper offsets. - * @method - * @memberof Popper.modifiers - * @param {HTMLElement} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as popper - * @param {Object} options - Popper.js options - */ -function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { - // compute reference element offsets - var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); - - popper.setAttribute('x-placement', placement); - - // Apply `position` to popper before anything else because - // without the position applied we can't guarantee correct computations - setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); - - return options; -} - -/** - * @function - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by `update` method - * @argument {Boolean} shouldRound - If the offsets should be rounded at all - * @returns {Object} The popper's position offsets rounded - * - * The tale of pixel-perfect positioning. It's still not 100% perfect, but as - * good as it can be within reason. - * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 - * - * Low DPI screens cause a popper to be blurry if not using full pixels (Safari - * as well on High DPI screens). - * - * Firefox prefers no rounding for positioning and does not have blurriness on - * high DPI screens. - * - * Only horizontal placement and left/right values need to be considered. - */ -function getRoundedOffsets(data, shouldRound) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - var round = Math.round, - floor = Math.floor; - - var noRound = function noRound(v) { - return v; - }; - - var referenceWidth = round(reference.width); - var popperWidth = round(popper.width); - - var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; - var isVariation = data.placement.indexOf('-') !== -1; - var sameWidthParity = referenceWidth % 2 === popperWidth % 2; - var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; - - var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; - var verticalToInteger = !shouldRound ? noRound : round; - - return { - left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), - top: verticalToInteger(popper.top), - bottom: verticalToInteger(popper.bottom), - right: horizontalToInteger(popper.right) - }; -} - -var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function computeStyle(data, options) { - var x = options.x, - y = options.y; - var popper = data.offsets.popper; - - // Remove this legacy support in Popper.js v2 - - var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'applyStyle'; - }).gpuAcceleration; - if (legacyGpuAccelerationOption !== undefined) { - console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); - } - var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; - - var offsetParent = getOffsetParent(data.instance.popper); - var offsetParentRect = getBoundingClientRect(offsetParent); - - // Styles - var styles = { - position: popper.position - }; - - var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); - - var sideA = x === 'bottom' ? 'top' : 'bottom'; - var sideB = y === 'right' ? 'left' : 'right'; - - // if gpuAcceleration is set to `true` and transform is supported, - // we use `translate3d` to apply the position to the popper we - // automatically use the supported prefixed version if needed - var prefixedProperty = getSupportedPropertyName('transform'); - - // now, let's make a step back and look at this code closely (wtf?) - // If the content of the popper grows once it's been positioned, it - // may happen that the popper gets misplaced because of the new content - // overflowing its reference element - // To avoid this problem, we provide two options (x and y), which allow - // the consumer to define the offset origin. - // If we position a popper on top of a reference element, we can set - // `x` to `top` to make the popper grow towards its top instead of - // its bottom. - var left = void 0, - top = void 0; - if (sideA === 'bottom') { - // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) - // and not the bottom of the html element - if (offsetParent.nodeName === 'HTML') { - top = -offsetParent.clientHeight + offsets.bottom; - } else { - top = -offsetParentRect.height + offsets.bottom; - } - } else { - top = offsets.top; - } - if (sideB === 'right') { - if (offsetParent.nodeName === 'HTML') { - left = -offsetParent.clientWidth + offsets.right; - } else { - left = -offsetParentRect.width + offsets.right; - } - } else { - left = offsets.left; - } - if (gpuAcceleration && prefixedProperty) { - styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; - styles[sideA] = 0; - styles[sideB] = 0; - styles.willChange = 'transform'; - } else { - // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties - var invertTop = sideA === 'bottom' ? -1 : 1; - var invertLeft = sideB === 'right' ? -1 : 1; - styles[sideA] = top * invertTop; - styles[sideB] = left * invertLeft; - styles.willChange = sideA + ', ' + sideB; - } - - // Attributes - var attributes = { - 'x-placement': data.placement - }; - - // Update `data` attributes, styles and arrowStyles - data.attributes = _extends({}, attributes, data.attributes); - data.styles = _extends({}, styles, data.styles); - data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); - - return data; -} - -/** - * Helper used to know if the given modifier depends from another one.
    - * It checks if the needed modifier is listed and enabled. - * @method - * @memberof Popper.Utils - * @param {Array} modifiers - list of modifiers - * @param {String} requestingName - name of requesting modifier - * @param {String} requestedName - name of requested modifier - * @returns {Boolean} - */ -function isModifierRequired(modifiers, requestingName, requestedName) { - var requesting = find(modifiers, function (_ref) { - var name = _ref.name; - return name === requestingName; - }); - - var isRequired = !!requesting && modifiers.some(function (modifier) { - return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; - }); - - if (!isRequired) { - var _requesting = '`' + requestingName + '`'; - var requested = '`' + requestedName + '`'; - console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); - } - return isRequired; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function arrow(data, options) { - var _data$offsets$arrow; - - // arrow depends on keepTogether in order to work - if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { - return data; - } - - var arrowElement = options.element; - - // if arrowElement is a string, suppose it's a CSS selector - if (typeof arrowElement === 'string') { - arrowElement = data.instance.popper.querySelector(arrowElement); - - // if arrowElement is not found, don't run the modifier - if (!arrowElement) { - return data; - } - } else { - // if the arrowElement isn't a query selector we must check that the - // provided DOM node is child of its popper node - if (!data.instance.popper.contains(arrowElement)) { - console.warn('WARNING: `arrow.element` must be child of its popper element!'); - return data; - } - } - - var placement = data.placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isVertical = ['left', 'right'].indexOf(placement) !== -1; - - var len = isVertical ? 'height' : 'width'; - var sideCapitalized = isVertical ? 'Top' : 'Left'; - var side = sideCapitalized.toLowerCase(); - var altSide = isVertical ? 'left' : 'top'; - var opSide = isVertical ? 'bottom' : 'right'; - var arrowElementSize = getOuterSizes(arrowElement)[len]; - - // - // extends keepTogether behavior making sure the popper and its - // reference have enough pixels in conjunction - // - - // top/left side - if (reference[opSide] - arrowElementSize < popper[side]) { - data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); - } - // bottom/right side - if (reference[side] + arrowElementSize > popper[opSide]) { - data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; - } - data.offsets.popper = getClientRect(data.offsets.popper); - - // compute center of the popper - var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; - - // Compute the sideValue using the updated popper offsets - // take popper margin in account because we don't have this info available - var css = getStyleComputedProperty(data.instance.popper); - var popperMarginSide = parseFloat(css['margin' + sideCapitalized]); - var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']); - var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; - - // prevent arrowElement from being placed not contiguously to its popper - sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); - - data.arrowElement = arrowElement; - data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); - - return data; -} - -/** - * Get the opposite placement variation of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement variation - * @returns {String} flipped placement variation - */ -function getOppositeVariation(variation) { - if (variation === 'end') { - return 'start'; - } else if (variation === 'start') { - return 'end'; - } - return variation; -} - -/** - * List of accepted placements to use as values of the `placement` option.
    - * Valid placements are: - * - `auto` - * - `top` - * - `right` - * - `bottom` - * - `left` - * - * Each placement can have a variation from this list: - * - `-start` - * - `-end` - * - * Variations are interpreted easily if you think of them as the left to right - * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` - * is right.
    - * Vertically (`left` and `right`), `start` is top and `end` is bottom. - * - * Some valid examples are: - * - `top-end` (on top of reference, right aligned) - * - `right-start` (on right of reference, top aligned) - * - `bottom` (on bottom, centered) - * - `auto-end` (on the side with more space available, alignment depends by placement) - * - * @static - * @type {Array} - * @enum {String} - * @readonly - * @method placements - * @memberof Popper - */ -var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; - -// Get rid of `auto` `auto-start` and `auto-end` -var validPlacements = placements.slice(3); - -/** - * Given an initial placement, returns all the subsequent placements - * clockwise (or counter-clockwise). - * - * @method - * @memberof Popper.Utils - * @argument {String} placement - A valid placement (it accepts variations) - * @argument {Boolean} counter - Set to true to walk the placements counterclockwise - * @returns {Array} placements including their variations - */ -function clockwise(placement) { - var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var index = validPlacements.indexOf(placement); - var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); - return counter ? arr.reverse() : arr; -} - -var BEHAVIORS = { - FLIP: 'flip', - CLOCKWISE: 'clockwise', - COUNTERCLOCKWISE: 'counterclockwise' -}; - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function flip(data, options) { - // if `inner` modifier is enabled, we can't use the `flip` modifier - if (isModifierEnabled(data.instance.modifiers, 'inner')) { - return data; - } - - if (data.flipped && data.placement === data.originalPlacement) { - // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides - return data; - } - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); - - var placement = data.placement.split('-')[0]; - var placementOpposite = getOppositePlacement(placement); - var variation = data.placement.split('-')[1] || ''; - - var flipOrder = []; - - switch (options.behavior) { - case BEHAVIORS.FLIP: - flipOrder = [placement, placementOpposite]; - break; - case BEHAVIORS.CLOCKWISE: - flipOrder = clockwise(placement); - break; - case BEHAVIORS.COUNTERCLOCKWISE: - flipOrder = clockwise(placement, true); - break; - default: - flipOrder = options.behavior; - } - - flipOrder.forEach(function (step, index) { - if (placement !== step || flipOrder.length === index + 1) { - return data; - } - - placement = data.placement.split('-')[0]; - placementOpposite = getOppositePlacement(placement); - - var popperOffsets = data.offsets.popper; - var refOffsets = data.offsets.reference; - - // using floor because the reference offsets may contain decimals we are not going to consider here - var floor = Math.floor; - var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); - - var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); - var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); - var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); - var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); - - var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; - - // flip the variation if required - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - - // flips variation if reference element overflows boundaries - var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); - - // flips variation if popper content overflows boundaries - var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop); - - var flippedVariation = flippedVariationByRef || flippedVariationByContent; - - if (overlapsRef || overflowsBoundaries || flippedVariation) { - // this boolean to detect any flip loop - data.flipped = true; - - if (overlapsRef || overflowsBoundaries) { - placement = flipOrder[index + 1]; - } - - if (flippedVariation) { - variation = getOppositeVariation(variation); - } - - data.placement = placement + (variation ? '-' + variation : ''); - - // this object contains `position`, we want to preserve it along with - // any additional property we may add in the future - data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); - - data = runModifiers(data.instance.modifiers, data, 'flip'); - } - }); - return data; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function keepTogether(data) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var placement = data.placement.split('-')[0]; - var floor = Math.floor; - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - var side = isVertical ? 'right' : 'bottom'; - var opSide = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - if (popper[side] < floor(reference[opSide])) { - data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; - } - if (popper[opSide] > floor(reference[side])) { - data.offsets.popper[opSide] = floor(reference[side]); - } - - return data; -} - -/** - * Converts a string containing value + unit into a px value number - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} str - Value + unit string - * @argument {String} measurement - `height` or `width` - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @returns {Number|String} - * Value in pixels, or original string if no values were extracted - */ -function toValue(str, measurement, popperOffsets, referenceOffsets) { - // separate value from unit - var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); - var value = +split[1]; - var unit = split[2]; - - // If it's not a number it's an operator, I guess - if (!value) { - return str; - } - - if (unit.indexOf('%') === 0) { - var element = void 0; - switch (unit) { - case '%p': - element = popperOffsets; - break; - case '%': - case '%r': - default: - element = referenceOffsets; - } - - var rect = getClientRect(element); - return rect[measurement] / 100 * value; - } else if (unit === 'vh' || unit === 'vw') { - // if is a vh or vw, we calculate the size based on the viewport - var size = void 0; - if (unit === 'vh') { - size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); - } else { - size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); - } - return size / 100 * value; - } else { - // if is an explicit pixel unit, we get rid of the unit and keep the value - // if is an implicit unit, it's px, and we return just the value - return value; - } -} - -/** - * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} offset - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @argument {String} basePlacement - * @returns {Array} a two cells array with x and y offsets in numbers - */ -function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { - var offsets = [0, 0]; - - // Use height if placement is left or right and index is 0 otherwise use width - // in this way the first offset will use an axis and the second one - // will use the other one - var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; - - // Split the offset string to obtain a list of values and operands - // The regex addresses values with the plus or minus sign in front (+10, -20, etc) - var fragments = offset.split(/(\+|\-)/).map(function (frag) { - return frag.trim(); - }); - - // Detect if the offset string contains a pair of values or a single one - // they could be separated by comma or space - var divider = fragments.indexOf(find(fragments, function (frag) { - return frag.search(/,|\s/) !== -1; - })); - - if (fragments[divider] && fragments[divider].indexOf(',') === -1) { - console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); - } - - // If divider is found, we divide the list of values and operands to divide - // them by ofset X and Y. - var splitRegex = /\s*,\s*|\s+/; - var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; - - // Convert the values with units to absolute pixels to allow our computations - ops = ops.map(function (op, index) { - // Most of the units rely on the orientation of the popper - var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; - var mergeWithPrevious = false; - return op - // This aggregates any `+` or `-` sign that aren't considered operators - // e.g.: 10 + +5 => [10, +, +5] - .reduce(function (a, b) { - if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { - a[a.length - 1] = b; - mergeWithPrevious = true; - return a; - } else if (mergeWithPrevious) { - a[a.length - 1] += b; - mergeWithPrevious = false; - return a; - } else { - return a.concat(b); - } - }, []) - // Here we convert the string values into number values (in px) - .map(function (str) { - return toValue(str, measurement, popperOffsets, referenceOffsets); - }); - }); - - // Loop trough the offsets arrays and execute the operations - ops.forEach(function (op, index) { - op.forEach(function (frag, index2) { - if (isNumeric(frag)) { - offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); - } - }); - }); - return offsets; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @argument {Number|String} options.offset=0 - * The offset value as described in the modifier description - * @returns {Object} The data object, properly modified - */ -function offset(data, _ref) { - var offset = _ref.offset; - var placement = data.placement, - _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var basePlacement = placement.split('-')[0]; - - var offsets = void 0; - if (isNumeric(+offset)) { - offsets = [+offset, 0]; - } else { - offsets = parseOffset(offset, popper, reference, basePlacement); - } - - if (basePlacement === 'left') { - popper.top += offsets[0]; - popper.left -= offsets[1]; - } else if (basePlacement === 'right') { - popper.top += offsets[0]; - popper.left += offsets[1]; - } else if (basePlacement === 'top') { - popper.left += offsets[0]; - popper.top -= offsets[1]; - } else if (basePlacement === 'bottom') { - popper.left += offsets[0]; - popper.top += offsets[1]; - } - - data.popper = popper; - return data; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function preventOverflow(data, options) { - var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); - - // If offsetParent is the reference element, we really want to - // go one step up and use the next offsetParent as reference to - // avoid to make this modifier completely useless and look like broken - if (data.instance.reference === boundariesElement) { - boundariesElement = getOffsetParent(boundariesElement); - } - - // NOTE: DOM access here - // resets the popper's position so that the document size can be calculated excluding - // the size of the popper element itself - var transformProp = getSupportedPropertyName('transform'); - var popperStyles = data.instance.popper.style; // assignment to help minification - var top = popperStyles.top, - left = popperStyles.left, - transform = popperStyles[transformProp]; - - popperStyles.top = ''; - popperStyles.left = ''; - popperStyles[transformProp] = ''; - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); - - // NOTE: DOM access here - // restores the original style properties after the offsets have been computed - popperStyles.top = top; - popperStyles.left = left; - popperStyles[transformProp] = transform; - - options.boundaries = boundaries; - - var order = options.priority; - var popper = data.offsets.popper; - - var check = { - primary: function primary(placement) { - var value = popper[placement]; - if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { - value = Math.max(popper[placement], boundaries[placement]); - } - return defineProperty({}, placement, value); - }, - secondary: function secondary(placement) { - var mainSide = placement === 'right' ? 'left' : 'top'; - var value = popper[mainSide]; - if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { - value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); - } - return defineProperty({}, mainSide, value); - } - }; - - order.forEach(function (placement) { - var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; - popper = _extends({}, popper, check[side](placement)); - }); - - data.offsets.popper = popper; - - return data; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function shift(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var shiftvariation = placement.split('-')[1]; - - // if shift shiftvariation is specified, run the modifier - if (shiftvariation) { - var _data$offsets = data.offsets, - reference = _data$offsets.reference, - popper = _data$offsets.popper; - - var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; - var side = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - var shiftOffsets = { - start: defineProperty({}, side, reference[side]), - end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) - }; - - data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); - } - - return data; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function hide(data) { - if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { - return data; - } - - var refRect = data.offsets.reference; - var bound = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'preventOverflow'; - }).boundaries; - - if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === true) { - return data; - } - - data.hide = true; - data.attributes['x-out-of-boundaries'] = ''; - } else { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === false) { - return data; - } - - data.hide = false; - data.attributes['x-out-of-boundaries'] = false; - } - - return data; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ -function inner(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; - - var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; - - popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); - - data.placement = getOppositePlacement(placement); - data.offsets.popper = getClientRect(popper); - - return data; -} - -/** - * Modifier function, each modifier can have a function of this type assigned - * to its `fn` property.
    - * These functions will be called on each update, this means that you must - * make sure they are performant enough to avoid performance bottlenecks. - * - * @function ModifierFn - * @argument {dataObject} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {dataObject} The data object, properly modified - */ - -/** - * Modifiers are plugins used to alter the behavior of your poppers.
    - * Popper.js uses a set of 9 modifiers to provide all the basic functionalities - * needed by the library. - * - * Usually you don't want to override the `order`, `fn` and `onLoad` props. - * All the other properties are configurations that could be tweaked. - * @namespace modifiers - */ -var modifiers = { - /** - * Modifier used to shift the popper on the start or end of its reference - * element.
    - * It will read the variation of the `placement` property.
    - * It can be one either `-end` or `-start`. - * @memberof modifiers - * @inner - */ - shift: { - /** @prop {number} order=100 - Index used to define the order of execution */ - order: 100, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: shift - }, - - /** - * The `offset` modifier can shift your popper on both its axis. - * - * It accepts the following units: - * - `px` or unit-less, interpreted as pixels - * - `%` or `%r`, percentage relative to the length of the reference element - * - `%p`, percentage relative to the length of the popper element - * - `vw`, CSS viewport width unit - * - `vh`, CSS viewport height unit - * - * For length is intended the main axis relative to the placement of the popper.
    - * This means that if the placement is `top` or `bottom`, the length will be the - * `width`. In case of `left` or `right`, it will be the `height`. - * - * You can provide a single value (as `Number` or `String`), or a pair of values - * as `String` divided by a comma or one (or more) white spaces.
    - * The latter is a deprecated method because it leads to confusion and will be - * removed in v2.
    - * Additionally, it accepts additions and subtractions between different units. - * Note that multiplications and divisions aren't supported. - * - * Valid examples are: - * ``` - * 10 - * '10%' - * '10, 10' - * '10%, 10' - * '10 + 10%' - * '10 - 5vh + 3%' - * '-10px + 5vh, 5px - 6%' - * ``` - * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap - * > with their reference element, unfortunately, you will have to disable the `flip` modifier. - * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). - * - * @memberof modifiers - * @inner - */ - offset: { - /** @prop {number} order=200 - Index used to define the order of execution */ - order: 200, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: offset, - /** @prop {Number|String} offset=0 - * The offset value as described in the modifier description - */ - offset: 0 - }, - - /** - * Modifier used to prevent the popper from being positioned outside the boundary. - * - * A scenario exists where the reference itself is not within the boundaries.
    - * We can say it has "escaped the boundaries" — or just "escaped".
    - * In this case we need to decide whether the popper should either: - * - * - detach from the reference and remain "trapped" in the boundaries, or - * - if it should ignore the boundary and "escape with its reference" - * - * When `escapeWithReference` is set to`true` and reference is completely - * outside its boundaries, the popper will overflow (or completely leave) - * the boundaries in order to remain attached to the edge of the reference. - * - * @memberof modifiers - * @inner - */ - preventOverflow: { - /** @prop {number} order=300 - Index used to define the order of execution */ - order: 300, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: preventOverflow, - /** - * @prop {Array} [priority=['left','right','top','bottom']] - * Popper will try to prevent overflow following these priorities by default, - * then, it could overflow on the left and on top of the `boundariesElement` - */ - priority: ['left', 'right', 'top', 'bottom'], - /** - * @prop {number} padding=5 - * Amount of pixel used to define a minimum distance between the boundaries - * and the popper. This makes sure the popper always has a little padding - * between the edges of its container - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='scrollParent' - * Boundaries used by the modifier. Can be `scrollParent`, `window`, - * `viewport` or any DOM element. - */ - boundariesElement: 'scrollParent' - }, - - /** - * Modifier used to make sure the reference and its popper stay near each other - * without leaving any gap between the two. Especially useful when the arrow is - * enabled and you want to ensure that it points to its reference element. - * It cares only about the first axis. You can still have poppers with margin - * between the popper and its reference element. - * @memberof modifiers - * @inner - */ - keepTogether: { - /** @prop {number} order=400 - Index used to define the order of execution */ - order: 400, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: keepTogether - }, - - /** - * This modifier is used to move the `arrowElement` of the popper to make - * sure it is positioned between the reference element and its popper element. - * It will read the outer size of the `arrowElement` node to detect how many - * pixels of conjunction are needed. - * - * It has no effect if no `arrowElement` is provided. - * @memberof modifiers - * @inner - */ - arrow: { - /** @prop {number} order=500 - Index used to define the order of execution */ - order: 500, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: arrow, - /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ - element: '[x-arrow]' - }, - - /** - * Modifier used to flip the popper's placement when it starts to overlap its - * reference element. - * - * Requires the `preventOverflow` modifier before it in order to work. - * - * **NOTE:** this modifier will interrupt the current update cycle and will - * restart it if it detects the need to flip the placement. - * @memberof modifiers - * @inner - */ - flip: { - /** @prop {number} order=600 - Index used to define the order of execution */ - order: 600, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: flip, - /** - * @prop {String|Array} behavior='flip' - * The behavior used to change the popper's placement. It can be one of - * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid - * placements (with optional variations) - */ - behavior: 'flip', - /** - * @prop {number} padding=5 - * The popper will flip if it hits the edges of the `boundariesElement` - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='viewport' - * The element which will define the boundaries of the popper position. - * The popper will never be placed outside of the defined boundaries - * (except if `keepTogether` is enabled) - */ - boundariesElement: 'viewport', - /** - * @prop {Boolean} flipVariations=false - * The popper will switch placement variation between `-start` and `-end` when - * the reference element overlaps its boundaries. - * - * The original placement should have a set variation. - */ - flipVariations: false, - /** - * @prop {Boolean} flipVariationsByContent=false - * The popper will switch placement variation between `-start` and `-end` when - * the popper element overlaps its reference boundaries. - * - * The original placement should have a set variation. - */ - flipVariationsByContent: false - }, - - /** - * Modifier used to make the popper flow toward the inner of the reference element. - * By default, when this modifier is disabled, the popper will be placed outside - * the reference element. - * @memberof modifiers - * @inner - */ - inner: { - /** @prop {number} order=700 - Index used to define the order of execution */ - order: 700, - /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ - enabled: false, - /** @prop {ModifierFn} */ - fn: inner - }, - - /** - * Modifier used to hide the popper when its reference element is outside of the - * popper boundaries. It will set a `x-out-of-boundaries` attribute which can - * be used to hide with a CSS selector the popper when its reference is - * out of boundaries. - * - * Requires the `preventOverflow` modifier before it in order to work. - * @memberof modifiers - * @inner - */ - hide: { - /** @prop {number} order=800 - Index used to define the order of execution */ - order: 800, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: hide - }, - - /** - * Computes the style that will be applied to the popper element to gets - * properly positioned. - * - * Note that this modifier will not touch the DOM, it just prepares the styles - * so that `applyStyle` modifier can apply it. This separation is useful - * in case you need to replace `applyStyle` with a custom implementation. - * - * This modifier has `850` as `order` value to maintain backward compatibility - * with previous versions of Popper.js. Expect the modifiers ordering method - * to change in future major versions of the library. - * - * @memberof modifiers - * @inner - */ - computeStyle: { - /** @prop {number} order=850 - Index used to define the order of execution */ - order: 850, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: computeStyle, - /** - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: true, - /** - * @prop {string} [x='bottom'] - * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. - * Change this if your popper should grow in a direction different from `bottom` - */ - x: 'bottom', - /** - * @prop {string} [x='left'] - * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. - * Change this if your popper should grow in a direction different from `right` - */ - y: 'right' - }, - - /** - * Applies the computed styles to the popper element. - * - * All the DOM manipulations are limited to this modifier. This is useful in case - * you want to integrate Popper.js inside a framework or view library and you - * want to delegate all the DOM manipulations to it. - * - * Note that if you disable this modifier, you must make sure the popper element - * has its position set to `absolute` before Popper.js can do its work! - * - * Just disable this modifier and define your own to achieve the desired effect. - * - * @memberof modifiers - * @inner - */ - applyStyle: { - /** @prop {number} order=900 - Index used to define the order of execution */ - order: 900, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: applyStyle, - /** @prop {Function} */ - onLoad: applyStyleOnLoad, - /** - * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: undefined - } -}; - -/** - * The `dataObject` is an object containing all the information used by Popper.js. - * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. - * @name dataObject - * @property {Object} data.instance The Popper.js instance - * @property {String} data.placement Placement applied to popper - * @property {String} data.originalPlacement Placement originally defined on init - * @property {Boolean} data.flipped True if popper has been flipped by flip modifier - * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper - * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier - * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.boundaries Offsets of the popper boundaries - * @property {Object} data.offsets The measurements of popper, reference and arrow elements - * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 - */ - -/** - * Default options provided to Popper.js constructor.
    - * These can be overridden using the `options` argument of Popper.js.
    - * To override an option, simply pass an object with the same - * structure of the `options` object, as the 3rd argument. For example: - * ``` - * new Popper(ref, pop, { - * modifiers: { - * preventOverflow: { enabled: false } - * } - * }) - * ``` - * @type {Object} - * @static - * @memberof Popper - */ -var Defaults = { - /** - * Popper's placement. - * @prop {Popper.placements} placement='bottom' - */ - placement: 'bottom', - - /** - * Set this to true if you want popper to position it self in 'fixed' mode - * @prop {Boolean} positionFixed=false - */ - positionFixed: false, - - /** - * Whether events (resize, scroll) are initially enabled. - * @prop {Boolean} eventsEnabled=true - */ - eventsEnabled: true, - - /** - * Set to true if you want to automatically remove the popper when - * you call the `destroy` method. - * @prop {Boolean} removeOnDestroy=false - */ - removeOnDestroy: false, - - /** - * Callback called when the popper is created.
    - * By default, it is set to no-op.
    - * Access Popper.js instance with `data.instance`. - * @prop {onCreate} - */ - onCreate: function onCreate() {}, - - /** - * Callback called when the popper is updated. This callback is not called - * on the initialization/creation of the popper, but only on subsequent - * updates.
    - * By default, it is set to no-op.
    - * Access Popper.js instance with `data.instance`. - * @prop {onUpdate} - */ - onUpdate: function onUpdate() {}, - - /** - * List of modifiers used to modify the offsets before they are applied to the popper. - * They provide most of the functionalities of Popper.js. - * @prop {modifiers} - */ - modifiers: modifiers -}; - -/** - * @callback onCreate - * @param {dataObject} data - */ - -/** - * @callback onUpdate - * @param {dataObject} data - */ - -// Utils -// Methods -var Popper = function () { - /** - * Creates a new Popper.js instance. - * @class Popper - * @param {Element|referenceObject} reference - The reference element used to position the popper - * @param {Element} popper - The HTML / XML element used as the popper - * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) - * @return {Object} instance - The generated Popper.js instance - */ - function Popper(reference, popper) { - var _this = this; - - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - classCallCheck(this, Popper); - - this.scheduleUpdate = function () { - return requestAnimationFrame(_this.update); - }; - - // make update() debounced, so that it only runs at most once-per-tick - this.update = debounce(this.update.bind(this)); - - // with {} we create a new object with the options inside it - this.options = _extends({}, Popper.Defaults, options); - - // init state - this.state = { - isDestroyed: false, - isCreated: false, - scrollParents: [] - }; - - // get reference and popper elements (allow jQuery wrappers) - this.reference = reference && reference.jquery ? reference[0] : reference; - this.popper = popper && popper.jquery ? popper[0] : popper; - - // Deep merge modifiers options - this.options.modifiers = {}; - Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { - _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); - }); - - // Refactoring modifiers' list (Object => Array) - this.modifiers = Object.keys(this.options.modifiers).map(function (name) { - return _extends({ - name: name - }, _this.options.modifiers[name]); - }) - // sort the modifiers by order - .sort(function (a, b) { - return a.order - b.order; - }); - - // modifiers have the ability to execute arbitrary code when Popper.js get inited - // such code is executed in the same order of its modifier - // they could add new properties to their options configuration - // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! - this.modifiers.forEach(function (modifierOptions) { - if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { - modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); - } - }); - - // fire the first update to position the popper in the right place - this.update(); - - var eventsEnabled = this.options.eventsEnabled; - if (eventsEnabled) { - // setup event listeners, they will take care of update the position in specific situations - this.enableEventListeners(); - } - - this.state.eventsEnabled = eventsEnabled; - } - - // We can't use class properties because they don't get listed in the - // class prototype and break stuff like Sinon stubs - - - createClass(Popper, [{ - key: 'update', - value: function update$$1() { - return update.call(this); - } - }, { - key: 'destroy', - value: function destroy$$1() { - return destroy.call(this); - } - }, { - key: 'enableEventListeners', - value: function enableEventListeners$$1() { - return enableEventListeners.call(this); - } - }, { - key: 'disableEventListeners', - value: function disableEventListeners$$1() { - return disableEventListeners.call(this); - } - - /** - * Schedules an update. It will run on the next UI update available. - * @method scheduleUpdate - * @memberof Popper - */ - - - /** - * Collection of utilities useful when writing custom modifiers. - * Starting from version 1.7, this method is available only if you - * include `popper-utils.js` before `popper.js`. - * - * **DEPRECATION**: This way to access PopperUtils is deprecated - * and will be removed in v2! Use the PopperUtils module directly instead. - * Due to the high instability of the methods contained in Utils, we can't - * guarantee them to follow semver. Use them at your own risk! - * @static - * @private - * @type {Object} - * @deprecated since version 1.8 - * @member Utils - * @memberof Popper - */ - - }]); - return Popper; -}(); - -/** - * The `referenceObject` is an object that provides an interface compatible with Popper.js - * and lets you use it as replacement of a real DOM node.
    - * You can use this method to position a popper relatively to a set of coordinates - * in case you don't have a DOM node to use as reference. - * - * ``` - * new Popper(referenceObject, popperNode); - * ``` - * - * NB: This feature isn't supported in Internet Explorer 10. - * @name referenceObject - * @property {Function} data.getBoundingClientRect - * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. - * @property {number} data.clientWidth - * An ES6 getter that will return the width of the virtual reference element. - * @property {number} data.clientHeight - * An ES6 getter that will return the height of the virtual reference element. - */ - - -Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; -Popper.placements = placements; -Popper.Defaults = Defaults; - -return Popper; - -}))); - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],6:[function(require,module,exports){ -(function (process){(function (){ -/**! -* tippy.js v5.2.1 -* (c) 2017-2020 atomiks -* MIT License -*/ -'use strict'; - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var Popper = _interopDefault(require('popper.js')); - -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -var version = "5.2.1"; - -/** - * Triggers reflow - */ -function reflow(element) { - void element.offsetHeight; -} -/** - * Sets the innerHTML of an element - */ - -function setInnerHTML(element, html) { - element[innerHTML()] = html; -} -/** - * Determines if the value is a reference element - */ - -function isReferenceElement(value) { - return !!(value && value._tippy && value._tippy.reference === value); -} -/** - * Safe .hasOwnProperty check, for prototype-less objects - */ - -function hasOwnProperty(obj, key) { - return {}.hasOwnProperty.call(obj, key); -} -/** - * Returns an array of elements based on the value - */ - -function getArrayOfElements(value) { - if (isElement(value)) { - return [value]; - } - - if (isNodeList(value)) { - return arrayFrom(value); - } - - if (Array.isArray(value)) { - return value; - } - - return arrayFrom(document.querySelectorAll(value)); -} -/** - * Returns a value at a given index depending on if it's an array or number - */ - -function getValueAtIndexOrReturn(value, index, defaultValue) { - if (Array.isArray(value)) { - var v = value[index]; - return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v; - } - - return value; -} -/** - * Prevents errors from being thrown while accessing nested modifier objects - * in `popperOptions` - */ - -function getModifier(obj, key) { - return obj && obj.modifiers && obj.modifiers[key]; -} -/** - * Determines if the value is of type - */ - -function isType(value, type) { - var str = {}.toString.call(value); - return str.indexOf('[object') === 0 && str.indexOf(type + "]") > -1; -} -/** - * Determines if the value is of type Element - */ - -function isElement(value) { - return isType(value, 'Element'); -} -/** - * Determines if the value is of type NodeList - */ - -function isNodeList(value) { - return isType(value, 'NodeList'); -} -/** - * Determines if the value is of type MouseEvent - */ - -function isMouseEvent(value) { - return isType(value, 'MouseEvent'); -} -/** - * Firefox extensions don't allow setting .innerHTML directly, this will trick - * it - */ - -function innerHTML() { - return 'innerHTML'; -} -/** - * Evaluates a function if one, or returns the value - */ - -function invokeWithArgsOrReturn(value, args) { - return typeof value === 'function' ? value.apply(void 0, args) : value; -} -/** - * Sets a popperInstance modifier's property to a value - */ - -function setModifierValue(modifiers, name, property, value) { - modifiers.filter(function (m) { - return m.name === name; - })[0][property] = value; -} -/** - * Returns a new `div` element - */ - -function div() { - return document.createElement('div'); -} -/** - * Applies a transition duration to a list of elements - */ - -function setTransitionDuration(els, value) { - els.forEach(function (el) { - if (el) { - el.style.transitionDuration = value + "ms"; - } - }); -} -/** - * Sets the visibility state to elements so they can begin to transition - */ - -function setVisibilityState(els, state) { - els.forEach(function (el) { - if (el) { - el.setAttribute('data-state', state); - } - }); -} -/** - * Debounce utility. To avoid bloating bundle size, we're only passing 1 - * argument here, a more generic function would pass all arguments. Only - * `onMouseMove` uses this which takes the event object for now. - */ - -function debounce(fn, ms) { - // Avoid wrapping in `setTimeout` if ms is 0 anyway - if (ms === 0) { - return fn; - } - - var timeout; - return function (arg) { - clearTimeout(timeout); - timeout = setTimeout(function () { - fn(arg); - }, ms); - }; -} -/** - * Preserves the original function invocation when another function replaces it - */ - -function preserveInvocation(originalFn, currentFn, args) { - if (originalFn && originalFn !== currentFn) { - originalFn.apply(void 0, args); - } -} -/** - * Deletes properties from an object (pure) - */ - -function removeProperties(obj, keys) { - var clone = _extends({}, obj); - - keys.forEach(function (key) { - delete clone[key]; - }); - return clone; -} -/** - * Ponyfill for Array.from - converts iterable values to an array - */ - -function arrayFrom(value) { - return [].slice.call(value); -} -/** - * Works like Element.prototype.closest, but uses a callback instead - */ - -function closestCallback(element, callback) { - while (element) { - if (callback(element)) { - return element; - } - - element = element.parentElement; - } - - return null; -} -/** - * Determines if an array or string includes a string - */ - -function includes(a, b) { - return a.indexOf(b) > -1; -} -/** - * Creates an array from string of values separated by whitespace - */ - -function splitBySpaces(value) { - return value.split(/\s+/).filter(Boolean); -} -/** - * Returns the `nextValue` if `nextValue` is not `undefined`, otherwise returns - * `currentValue` - */ - -function useIfDefined(nextValue, currentValue) { - return nextValue !== undefined ? nextValue : currentValue; -} -/** - * Converts a value that's an array or single value to an array - */ - -function normalizeToArray(value) { - return [].concat(value); -} -/** - * Returns the ownerDocument of the first available element, otherwise global - * document - */ - -function getOwnerDocument(elementOrElements) { - var _normalizeToArray = normalizeToArray(elementOrElements), - element = _normalizeToArray[0]; - - return element ? element.ownerDocument || document : document; -} -/** - * Adds item to array if array does not contain it - */ - -function pushIfUnique(arr, value) { - if (arr.indexOf(value) === -1) { - arr.push(value); - } -} -/** - * Adds `px` if value is a number, or returns it directly - */ - -function appendPxIfNumber(value) { - return typeof value === 'number' ? value + "px" : value; -} -/** - * Filters out duplicate elements in an array - */ - -function unique(arr) { - return arr.filter(function (item, index) { - return arr.indexOf(item) === index; - }); -} -/** - * Returns number from number or CSS units string - */ - -function getNumber(value) { - return typeof value === 'number' ? value : parseFloat(value); -} -/** - * Gets number or CSS string units in pixels (e.g. `1rem` -> 16) - */ - -function getUnitsInPx(doc, value) { - var isRem = typeof value === 'string' && includes(value, 'rem'); - var html = doc.documentElement; - var rootFontSize = 16; - - if (html && isRem) { - return parseFloat(getComputedStyle(html).fontSize || String(rootFontSize)) * getNumber(value); - } - - return getNumber(value); -} -/** - * Adds the `distancePx` value to the placement of a Popper.Padding object - */ - -function getComputedPadding(basePlacement, padding, distancePx) { - if (padding === void 0) { - padding = 5; - } - - var freshPaddingObject = { - top: 0, - right: 0, - bottom: 0, - left: 0 - }; - var keys = Object.keys(freshPaddingObject); - return keys.reduce(function (obj, key) { - obj[key] = typeof padding === 'number' ? padding : padding[key]; - - if (basePlacement === key) { - obj[key] = typeof padding === 'number' ? padding + distancePx : padding[basePlacement] + distancePx; - } - - return obj; - }, freshPaddingObject); -} - -function createMemoryLeakWarning(method) { - var txt = method === 'destroy' ? 'n already-' : ' '; - return "\n " + method + "() was called on a" + txt + "destroyed instance. This is a no-op but\n indicates a potential memory leak.\n "; -} -function clean(value) { - var spacesAndTabs = /[ \t]{2,}/g; - var lineStartWithSpaces = /^[ \t]*/gm; - return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim(); -} - -function getDevMessage(message) { - return clean("\n %ctippy.js\n\n %c" + clean(message) + "\n\n %c\uD83D\uDC77\u200D This is a development-only message. It will be removed in production.\n "); -} - -function getFormattedMessage(message) { - return [getDevMessage(message), // title - 'color: #00C584; font-size: 1.3em; font-weight: bold;', // message - 'line-height: 1.5', // footer - 'color: #a6a095;']; -} -/** - * Helpful wrapper around `console.warn()`. - * TODO: Should we use a cache so it only warns a single time and not spam the - * console? (Need to consider hot reloading and invalidation though). Chrome - * already batches warnings as well. - */ - -function warnWhen(condition, message) { - if (condition) { - var _console; - - (_console = console).warn.apply(_console, getFormattedMessage(message)); - } -} -/** - * Helpful wrapper around `console.error()` - */ - -function errorWhen(condition, message) { - if (condition) { - var _console2; - - (_console2 = console).error.apply(_console2, getFormattedMessage(message)); - } -} -/** - * Validates the `targets` value passed to `tippy()` - */ - -function validateTargets(targets) { - var didPassFalsyValue = !targets; - var didPassPlainObject = Object.prototype.toString.call(targets) === '[object Object]' && !targets.addEventListener; - errorWhen(didPassFalsyValue, ['tippy() was passed', '`' + String(targets) + '`', 'as its targets (first) argument. Valid types are: String, Element, Element[],', 'or NodeList.'].join(' ')); - errorWhen(didPassPlainObject, ['tippy() was passed a plain object which is no longer supported as an argument.', 'See: https://atomiks.github.io/tippyjs/misc/#custom-position'].join(' ')); -} - -var pluginProps = { - animateFill: false, - followCursor: false, - inlinePositioning: false, - sticky: false -}; -var defaultProps = _extends({ - allowHTML: true, - animation: 'fade', - appendTo: function appendTo() { - return document.body; - }, - aria: 'describedby', - arrow: true, - boundary: 'scrollParent', - content: '', - delay: 0, - distance: 10, - duration: [300, 250], - flip: true, - flipBehavior: 'flip', - flipOnUpdate: false, - hideOnClick: true, - ignoreAttributes: false, - inertia: false, - interactive: false, - interactiveBorder: 2, - interactiveDebounce: 0, - lazy: true, - maxWidth: 350, - multiple: false, - offset: 0, - onAfterUpdate: function onAfterUpdate() {}, - onBeforeUpdate: function onBeforeUpdate() {}, - onCreate: function onCreate() {}, - onDestroy: function onDestroy() {}, - onHidden: function onHidden() {}, - onHide: function onHide() {}, - onMount: function onMount() {}, - onShow: function onShow() {}, - onShown: function onShown() {}, - onTrigger: function onTrigger() {}, - onUntrigger: function onUntrigger() {}, - placement: 'top', - plugins: [], - popperOptions: {}, - role: 'tooltip', - showOnCreate: false, - theme: '', - touch: true, - trigger: 'mouseenter focus', - triggerTarget: null, - updateDuration: 0, - zIndex: 9999 -}, pluginProps); -var defaultKeys = Object.keys(defaultProps); -/** - * If the setProps() method encounters one of these, the popperInstance must be - * recreated - */ - -var POPPER_INSTANCE_DEPENDENCIES = ['arrow', 'boundary', 'distance', 'flip', 'flipBehavior', 'flipOnUpdate', 'offset', 'placement', 'popperOptions']; -/** - * Mutates the defaultProps object by setting the props specified - */ - -var setDefaultProps = function setDefaultProps(partialProps) { - if (process.env.NODE_ENV !== "production") { - validateProps(partialProps, []); - } - - var keys = Object.keys(partialProps); - keys.forEach(function (key) { - defaultProps[key] = partialProps[key]; - }); -}; -/** - * Returns an extended props object including plugin props - */ - -function getExtendedPassedProps(passedProps) { - var plugins = passedProps.plugins || []; - var pluginProps = plugins.reduce(function (acc, plugin) { - var name = plugin.name, - defaultValue = plugin.defaultValue; - - if (name) { - acc[name] = passedProps[name] !== undefined ? passedProps[name] : defaultValue; - } - - return acc; - }, {}); - return _extends({}, passedProps, {}, pluginProps); -} -/** - * Returns an object of optional props from data-tippy-* attributes - */ - -function getDataAttributeProps(reference, plugins) { - var propKeys = plugins ? Object.keys(getExtendedPassedProps(_extends({}, defaultProps, { - plugins: plugins - }))) : defaultKeys; - var props = propKeys.reduce(function (acc, key) { - var valueAsString = (reference.getAttribute("data-tippy-" + key) || '').trim(); - - if (!valueAsString) { - return acc; - } - - if (key === 'content') { - acc[key] = valueAsString; - } else { - try { - acc[key] = JSON.parse(valueAsString); - } catch (e) { - acc[key] = valueAsString; - } - } - - return acc; - }, {}); - return props; -} -/** - * Evaluates the props object by merging data attributes and disabling - * conflicting props where necessary - */ - -function evaluateProps(reference, props) { - var out = _extends({}, props, { - content: invokeWithArgsOrReturn(props.content, [reference]) - }, props.ignoreAttributes ? {} : getDataAttributeProps(reference, props.plugins)); - - if (out.interactive) { - out.aria = null; - } - - return out; -} -/** - * Validates props with the valid `defaultProps` object - */ - -function validateProps(partialProps, plugins) { - if (partialProps === void 0) { - partialProps = {}; - } - - if (plugins === void 0) { - plugins = []; - } - - var keys = Object.keys(partialProps); - keys.forEach(function (prop) { - var value = partialProps[prop]; - var didSpecifyPlacementInPopperOptions = prop === 'popperOptions' && value !== null && typeof value === 'object' && hasOwnProperty(value, 'placement'); - var nonPluginProps = removeProperties(defaultProps, ['animateFill', 'followCursor', 'inlinePositioning', 'sticky']); // These props have custom warnings - - var customWarningProps = ['a11y', 'arrowType', 'showOnInit', 'size', 'target', 'touchHold']; - var didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop) && !includes(customWarningProps, prop); // Check if the prop exists in `plugins` - - if (didPassUnknownProp) { - didPassUnknownProp = plugins.filter(function (plugin) { - return plugin.name === prop; - }).length === 0; - } - - warnWhen(prop === 'target', ['The `target` prop was removed in v5 and replaced with the delegate() addon', 'in order to conserve bundle size.', 'See: https://atomiks.github.io/tippyjs/addons/#event-delegation'].join(' ')); - warnWhen(prop === 'a11y', ['The `a11y` prop was removed in v5. Make sure the element you are giving a', 'tippy to is natively focusable, such as ").text(this.options.lang.next).addClass("btn btn-secondary sw-btn-next").attr("type","button"):null,n=!1!==this.options.toolbarSettings.showPreviousButton?l("").text(this.options.lang.previous).addClass("btn btn-secondary sw-btn-prev").attr("type","button"):null,r=l("
    ").addClass("btn-group mr-2 sw-btn-group").attr("role","group").append(n,i),s=null;switch(this.options.toolbarSettings.toolbarExtraButtons&&0").addClass("btn-group mr-2 sw-btn-group-extra").attr("role","group"),l.each(this.options.toolbarSettings.toolbarExtraButtons,function(t,e){s.append(e.clone(!0))})),this.options.toolbarSettings.toolbarPosition){case"top":(t=l("
    ").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(s):t.append(s),this.container.before(t);break;case"bottom":(e=l("
    ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?e.prepend(s):e.append(s),this.container.after(e);break;case"both":(t=l("
    ").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(s):t.append(s),this.container.before(t),(e=l("
    ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r.clone(!0)),null!==s&&("start"===this.options.toolbarSettings.toolbarButtonPosition?e.prepend(s.clone(!0)):e.append(s.clone(!0))),this.container.after(e);break;default:(e=l("
    ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),this.options.toolbarSettings.toolbarButtonPosition,e.append(s),this.container.after(e)}return!0},_setEvents:function(){var i=this;return l(this.steps).on("click",function(t){if(t.preventDefault(),!1===i.options.anchorSettings.anchorClickable)return!0;var e=i.steps.index(this);if(!1===i.options.anchorSettings.enableAnchorOnDoneStep&&i.steps.eq(e).parent("li").hasClass("done"))return!0;e!==i.current_index&&(!1!==i.options.anchorSettings.enableAllAnchors&&!1!==i.options.anchorSettings.anchorClickable?i._showStep(e):i.steps.eq(e).parent("li").hasClass("done")&&i._showStep(e))}),l(".sw-btn-next",this.main).on("click",function(t){t.preventDefault(),i._showNext()}),l(".sw-btn-prev",this.main).on("click",function(t){t.preventDefault(),i._showPrevious()}),this.options.keyNavigation&&l(t).keyup(function(t){i._keyNav(t)}),this.options.backButtonSupport&&l(r).on("hashchange",function(t){if(!i.options.useURLhash)return!0;if(r.location.hash){var e=l("a[href*='"+r.location.hash+"']",i.nav);e&&0")["prepend"==this.insertMode?"prependTo":"appendTo"](this.el)[0]);var t=this.canvas;if(t.width=this.size,t.height=this.size,this.ctx=t.getContext("2d"),1")[0];t.width=i.size,t.height=i.size,t.getContext("2d").drawImage(e,0,0,s,s),i.arcFill=i.ctx.createPattern(t,"no-repeat"),i.drawFrame(i.lastFrameValue)}var e,i=this,n=this.fill,r=this.ctx,s=this.size;if(!n)throw Error("The fill is not specified!");if("string"==typeof n&&(n={color:n}),n.color&&(this.arcFill=n.color),n.gradient){var a=n.gradient;if(1==a.length)this.arcFill=a[0];else if(1n.oldScroll?n.forward:n.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s];if(null!==a.triggerPoint){var o=n.oldScroll=a.triggerPoint;(o&&l||!o&&!l)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}}for(var h in t)t[h].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?m.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?m.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var n=0,r=t.length;n=s.oldScroll,u=!l&&!h,!g&&l&&h?(c.queueTrigger(s.backward),n[c.group.id]=c.group):!g&&u?(c.queueTrigger(s.forward),n[c.group.id]=c.group):g&&s.oldScroll>=c.triggerPoint&&(c.queueTrigger(s.forward),n[c.group.id]=c.group)}}return m.requestAnimationFrame(function(){for(var t in n)n[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in n)n[t].refresh()},e.findByElement=function(t){return n[t.waypointContextKey]},window.onload=function(){t&&t(),e.refreshAll()},m.requestAnimationFrame=function(t){(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}).call(window,t)},m.Context=e}(),function(){"use strict";function a(t,e){return t.triggerPoint-e.triggerPoint}function o(t,e){return e.triggerPoint-t.triggerPoint}function e(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),i[this.axis][this.name]=this}var i={vertical:{},horizontal:{}},n=window.Waypoint;e.prototype.add=function(t){this.waypoints.push(t)},e.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},e.prototype.flushTriggers=function(){for(var t in this.triggerQueues){var e=this.triggerQueues[t],i="up"===t||"left"===t;e.sort(i?o:a);for(var n=0,r=e.length;n - - - - - - Gradido Login Server: Überprüfe Transaktion - - - - - - - -
    - - -
    - -
    -
    -

    Transaktion unterzeichnen

    -
    -

    Überweisung

    -
    -
    - Konto - Gradido -
    -
    - Normaler User <info@software-labor.de> - -10 GDD -
    -
    - dario frodo <dariofrodo@gmx.de> - 10 GDD -
    -
    -
    -
    - Aktives Konto -
    -
    - Normaler User <info@software-labor.de> -
    -
    -
    -
    - Verwendungszweck -
    -
    -   -
    -
    -
    - - -
    -
    -
    -
    -
    -
    - - -
    - 98.597 ms -
    -
    -

    Community Server in Entwicklung

    -

    Alpha 0.21.KW21.05

    -
    - - - - \ No newline at end of file diff --git a/community_server/websrc/gulpfile.js b/community_server/websrc/gulpfile.js deleted file mode 100644 index a1cd459f7..000000000 --- a/community_server/websrc/gulpfile.js +++ /dev/null @@ -1,58 +0,0 @@ -var gulp = require('gulp'); -var less = require('gulp-less'); -var concat = require('gulp-concat'); -var merge = require('merge-stream'); -var watch = require('gulp-watch'); -//var minify = require('gulp-minify'); -var cleanCSS = require('gulp-clean-css'); - -var bundleStyles = function() { - - var lessStream = gulp.src('src/less/*.less') - .pipe(concat('src/less-files.less')) - .pipe(less()) - .pipe(gulp.dest('./')) - ; - - var mergedStream = merge(lessStream) - .pipe(concat('grd_styles.css')) - //.pipe(minify()) - .pipe(gulp.dest('../webroot/css/')); - - return mergedStream; -}; - -var compressStyles = function() { - var lessStream = gulp.src('src/less/*.less') - .pipe(concat('src/less-files.less')) - .pipe(less()) - .pipe(gulp.dest('./')) - ; - - var mergedStream = merge(lessStream) - .pipe(concat('grd_styles.min.css')) - .pipe(cleanCSS({ - compatibility: 'ie8', - level: { - 1: { - all: true - }, - 2: { - all: true - } - } - })) - .pipe(gulp.dest('../webroot/css/')); - - return mergedStream; -}; - -gulp.task("bundleStyles", bundleStyles); -gulp.task("compressStyles", compressStyles); - -gulp.task('watchStyles', function() { - bundleStyles(); - watch("src/less/*.less", function() { - bundleStyles(); - }); -}); \ No newline at end of file diff --git a/community_server/websrc/package.json b/community_server/websrc/package.json deleted file mode 100644 index 8d456e83b..000000000 --- a/community_server/websrc/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "gradido_mithriljs_client", - "version": "0.0.1", - "description": "Webinterface Client for Gradido Websites written with mithrilJS", - "main": "app.js", - "scripts": { - "watch:js": "watchify ./src/js/app.js -t [ babelify --presets [ @babel/preset-env ] ] -o ../webroot/js/app.js -v", - "watch:css": "gulp watchStyles", - "bundle:css": "gulp bundleStyles", - "prebuild": "browserify ./src/js/app.js -t [ babelify --presets [ @babel/preset-env ] ] -o ./public/app.rl.js -v", - "build": "gulp compressStyles && browserify ./public/app.rl.js -g uglifyify -p bundle-collapser/plugin | uglifyjs --compress --mangle toplevel,eval > ../webroot/js/app.min.js" - }, - "author": "Dario Rekowski", - "license": "ISC", - "dependencies": { - "google-protobuf": "^3.10.0-rc.1", - "mithril": "github:StephanHoyer/mithril.js#rewrite" - }, - "devDependencies": { - "@babel/core": "^7.6.0", - "@babel/preset-env": "^7.6.0", - "babelify": "^10.0.0", - "browserify": "^16.5.0", - "bs58check": "^2.1.2", - "bundle-collapser": "^1.3.0", - "gulp": "^4.0.2", - "gulp-clean-css": "^4.3.0", - "gulp-concat": "^2.6.1", - "gulp-less": "^4.0.1", - "gulp-minify": "^3.1.0", - "gulp-watch": "^5.0.1", - "merge-stream": "^2.0.0", - "uglify-js": "^3.6.0", - "uglifyify": "^5.0.2" - } -} diff --git a/community_server/websrc/src/less/01-layout.less b/community_server/websrc/src/less/01-layout.less deleted file mode 100644 index 2aed60860..000000000 --- a/community_server/websrc/src/less/01-layout.less +++ /dev/null @@ -1,113 +0,0 @@ -/* ============================================================ - - Grid Layout Page - - Datei : layout.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ - -/*==================================== -= BREAK POINTS = -====================================*/ - -/* https://scotch.io/courses/getting-started-with-less/responsive-and-media-queries */ -@wide-screen-down: ~'(max-width:1199px)'; -@desktop-down: ~'(max-width:991px)'; -@tablet-down: ~'(max-width:767px)'; -@phone-down: ~'(max-width:480px)'; -@small-phone-down: ~'(max-width:320px)'; - -/* GRID */ -.layout { - display: grid; - grid-template-rows: [top] 8vh [line2] 86vh [footer1] 3vh [footer2] 5vh [end]; - grid-template-columns: [left1] auto [left2] 1fr [left3] 12fr [right3] 1fr [right2] auto [right1]; - grid-template-areas: "header header header header header" - "left . center center ." - "footer footer footer footer footer" - "bottom bottom bottom bottom bottom"; - margin: 0; - padding: 0; -} - -@media @wide-screen-down { - .layout { - grid-template-areas: "header header header header header" - "left . center center center" - "footer footer footer footer footer" - "bottom bottom bottom bottom bottom"; - } - -} - -@media @tablet-down { - .layout { - position: relative; - display: grid; - grid-template-rows: [top] 12vh [line2] 80vh [footer1] 3vh [footer2] 8vh [end]; - grid-template-columns: [left1] 100vw [right1]; - grid-template-areas: "header" - "center" - "footer" - "bottom"; - margin: 0; - padding: 0; - } - -} - -.header-notify { - grid-area: header; - grid-column-start: right3; - grid-column-end: right2; -} - -.header-user { - grid-area: header; - grid-column-start: right2; - grid-column-end: right1; -} - -.sidebar1 { - grid-area: left; - grid-row-start: top; - grid-row-end: end; -} - -@media @tablet-down { - .sidebar1 { - position: relative; - grid-area: header; - z-index: 2; - top: -300px; - right: 0px; - } - - .header-user, - .header-notify { - grid-area: header; - } - -} - -.center-form-single, -.content { - grid-area: center; - grid-row-start: line2; - grid-row-end: footer1; -} - -.footer { - grid-area: footer; - grid-row-start: footer1; - grid-row-end: footer2; -} - -.nav-bottom { - grid-area: bottom; - grid-row-start: footer2; - grid-row-end: end; -} diff --git a/community_server/websrc/src/less/02-colors.less b/community_server/websrc/src/less/02-colors.less deleted file mode 100644 index 90eff9346..000000000 --- a/community_server/websrc/src/less/02-colors.less +++ /dev/null @@ -1,160 +0,0 @@ -/* ============================================================ - - Generic Color Definitions - - Vars and some generic CSS rules. - - Datei : colors.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ - -/* MAIN */ -@main-background: #f9fafb; -@main-text: #212529; -@main-link-text: #000; - -/* MENU */ -@menu-background: #fff; -@menu-link-text: #4F4F4F; -@menu-link-selected: #047006; -@menu-border-color: #f2f4f5; - -/* CONTENT */ -@container-background: #fff; -@container-text: #212529; -@container-header: #21252969; -@container-shadow: rgba(183, 192, 206, .2); -@container-border: rgba(238, 238, 238, .75); - -/* CONTENT-NAV */ -@content-nav: #565656; - -/* CONTENT-ITEMS */ -@action-button-text: #fff; -@action-button-border: #047006; -@action-button-background1: #047006; -@action-button-background: #f9fafb; -@info-item-border: grey; -@form-header-border: #047006; -@form-header-background: #f9fafb; - -/* CONTENT-TABLE */ -@content-table-title: #313131; -@content-table-header: #101010; -@content-table-header-bg: #fafafa; -@content-table-header-border: #f2f4f9; -@content-row-bg: #f0f2f5; - -/* FORMS */ -@form-label: #212529; -@badge-color-warning: #fff; -@badge-background-warning: #00e093; -@badge-color-error: #fff; -@badge-background-error: #ff5f66; - -/* VARIOUS INDIVIDUAL */ -@orange: #ffa600; - -/* XXX TODO XXX */ -@dialog-background: #fff; - -/*rgba(0, 0, 0, 0.5) ??? */ -@dialog-text: #000; -@dialog-background-extra: rgba(0, 0, 0, 0.1); -@dialog-border: grey; -@form-text-background: rgba(0, 0, 0, 0.05); -@form-button-border: grey; -@form-button-text: #444; -@button-text: #000; -@button-border-color: #000; -@button-background-active: lightgray; -@print-background: #111; -@print-text: #000; -@print-link-text: #06c; -@gdt-text: #a27824; - -/* NOTIFICATION */ -@info: grey; -@info-border: gray; -@info-background: #80808026; -@info-background-icon: #80808026; -@error: red; -@error-border: rgba(255, 0, 0, 0.5); -@success: #047006; -@success-message: #1A1A1A; -@success-message-background: #06c50a; -@success-border: #04700675; -@success-background-icon: rgba(4, 112, 6, 0.2); -@success-background-hover: lightgreen; -@alert: #ff5f66; -@alert-color: #fff; -@alert-background: #ff5f669e; -@alert-background-icon: #ff5f662e; -@alert-blink: #ff5f669e; -@notify: #525c5d; -@notify-blink: #525c5d82; - -/* https://www.w3schools.com/colors/colors_shades.asp */ -@unobtrusive: grey; -@light: #F5F5F5; -@verylight: #fbfbfb; - -.info-color { - color: @info; -} - -.success-color { - color: @success; -} - -.alert-color { - color: @alert; -} - -.orange-color { - color: @orange -} - -.blue-color { - color: blue -} - -.unobtrusive { - color: @unobtrusive; -} - -.info-icon { - color: @info; - background-color: @info-background-icon; -} - -.success-icon { - color: @success; - background-color: @success-background-icon; -} - -.alert-icon { - color: @alert; - background-color: @alert-background-icon; -} - -/* ======================= - Gradido - =======================*/ - -/* Gradido */ -.grd-negative-currency { - color: red; -} - -/* Gradido Transform */ -.gdt-text-color { - color: @gdt-text; -} - -.grd_clickable { - cursor: pointer; -} diff --git a/community_server/websrc/src/less/03-typography.less b/community_server/websrc/src/less/03-typography.less deleted file mode 100644 index 06572c9ff..000000000 --- a/community_server/websrc/src/less/03-typography.less +++ /dev/null @@ -1,32 +0,0 @@ -/* ============================================================ - - Typography Definitions - - Datei : typography.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@body-fs: 100%; -@body-lh: 27px; -@content-lh: 1.75em; -@content-letter-spacing: .03rem; -@nav-fs: .8em; -@nav-bottom-fs: .9em; -@nav-bottom-fs-mobile: .8em; -@nav-btn-large-fs: 35px; -@nav-icon-fs: 1.2em; -@nav-icons-fs: 18px; -@nav-icon-main-fs: 32px; -@footer-fs: 70%; -@sidebar1-header-fs: .75em; -@sidebar1-lh: 2.5em; -@link-title-lh: normal; -@devinfo-fs: smaller; -@devinfo-fs-mobile: .7em; - -.small-font { - font-size: .75em; - font-weight: 300; -} diff --git a/community_server/websrc/src/less/05-screen.less b/community_server/websrc/src/less/05-screen.less deleted file mode 100644 index 975d57dc1..000000000 --- a/community_server/websrc/src/less/05-screen.less +++ /dev/null @@ -1,174 +0,0 @@ -/* ============================================================ - - Basic screen styles. - - Datei : screen.less - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@font-face { - font-family: 'Material Icons Outlined'; - font-style: normal; - font-weight: 400; - src: url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.eot); /* For IE6-8 */ - src: local('Material Icons Outlined'), local('Material-Icons-Outlined'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2) format('woff2'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff) format('woff'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf) format('truetype'); -} - -.material-icons-outlined { - font-family: 'Material Icons Outlined'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - vertical-align: middle; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -webkit-font-feature-settings: 'liga'; - -webkit-font-smoothing: antialiased; -} - -@media screen { - - /* ======================= - Basis - =======================*/ - html, - body { - font-family: 'Roboto', sans-serif; - font-size: @body-fs; - line-height: @body-lh; - color: @main-text; - background-color: @main-background; - margin: 0; - overflow: auto; - } - - div { - border-collapse: collapse; - box-sizing: border-box; - } - - /* ======================= - Kopfbereich - =======================*/ - .header { - display: flex; - justify-content: space-between; - align-items: center; - flex: flex-grow; - width: 100%; - padding: 1em; - background-color: @menu-background; - } - - /* ======================= - Fußbereich - =======================*/ - .footer { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - font-size: @footer-fs; - font-style: italic; - line-height: 0; - } - - .bottomright { - position: fixed; - bottom: 0; - right: 0; - color: @unobtrusive; - font-size: @devinfo-fs; - line-height: .125em; - padding-right: .25em; - text-align: right; - } - - @media @tablet-down { - .bottomright { - font-size: @devinfo-fs-mobile; - font-weight: 300; - line-height: 1em; - width: 100px; - } - - .bottomright p { - margin-block-start: 0; - margin-block-end: 2px; - margin-inline-start: 0; - margin-inline-end: 0; - } - - } - - .bottomleft { - position: fixed; - bottom: 0; - left: 0; - color: @unobtrusive; - font-size: @devinfo-fs; - line-height: 1.125em; - padding-left: 0.25em; - } - - /* ======================= - Sonstige - =======================*/ - - /* Hyperlinks */ - a { - text-decoration: none; - color: inherit; - } - - main a { - text-decoration: underline; - font-style: italic; - } - - a:link, - a:visited { - color: inherit; - } - - a:hover, - a:focus { - text-decoration: underline; - } - - a:active { - background-color: @menu-background; - color: @main-link-text; - } - - a:focus, - a:active { - outline: none; - } - - a.grd_invisible_link { - color: @main-link-text; - text-decoration: none; - } - - a.grd_invisible_link:hover { - color: @unobtrusive; - } - - [type=button]:not(:disabled), - [type=reset]:not(:disabled), - [type=submit]:not(:disabled), - button:not(:disabled) { - cursor: pointer - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/06-messages.less b/community_server/websrc/src/less/06-messages.less deleted file mode 100644 index 4c4d0fcb7..000000000 --- a/community_server/websrc/src/less/06-messages.less +++ /dev/null @@ -1,89 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* ============================================================ - - Screen styles for flash messages. - - Datei : messages.css - Datum : 30.10.2019, 16:04:16 - Autor : einhornimmond, Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .flash-messages { - width: 30%; - position: absolute; - top: 57px; - left: 241px; - text-align: center; - - .alert { - margin: 0; - padding: 1em; - vertical-align: middle; - border-radius: 5px; - } - - .alert-success { - color: @success-message !important; - background-color: @success-message-background; - border: 1px solid @success-border; - } - - .alert-error { - color: @alert-color !important; - background-color: @error; - border: 1px solid @error-border; - } - - .message { - padding: 5px; - } - - .success { - color: @success; - } - - .error { - color: @error; - } - - } - - .flash-messages.hidden { - display: none; - } - - @media @tablet-down { - .flash-messages { - width: 90%; - top: 0; - left: 0; - text-align: center; - } - - } - - /* messages, update flash */ - .grd-error { - color: @error; - border: 1px solid @error-border; - padding: 5px; - } - - .grd-info { - border: 1px dotted @info-border; - padding: 5px; - } - - .grd-success { - padding: 5px; - color: @success; - } - -} diff --git a/community_server/websrc/src/less/07-user.less b/community_server/websrc/src/less/07-user.less deleted file mode 100644 index 50270ff49..000000000 --- a/community_server/websrc/src/less/07-user.less +++ /dev/null @@ -1,134 +0,0 @@ -/* ============================================================ - - User Menu - - Datei : user.less - Datum : 2020-07-03 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-user { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: flex-end; - align-content: flex-end; - position: relative; - width: 100%; - min-width: 12em; - height: 40px; - background-color: @container-background; - border: 1px solid @menu-border-color; - border-radius: 0 0 0 18px; - } - - .user-menu-container { - display: flex; - justify-content: flex-end; - align-items: center; - font-size: .8em; - font-weight: 300; - padding: .25em .5em; - z-index: 20; - height: 40px; - } - - .user-name, - .user-icon { - display: inline-block; - vertical-align: middle; - cursor: pointer; - } - - .user-name { - padding-right: .25em; - } - - .nav-vertical.user-menu { - display: none; - background-color: @container-background; - border-left: 1px solid @menu-border-color; - border-bottom: 1px solid @menu-border-color; - border-radius: 0 0 16px 16px; - z-index: 15; - font-size: .9em; - margin-top: 0 !important; - position: fixed; - top: 39px; - right: 0; - } - - .nav-vertical.user-menu.visible { - display: inherit; - } - - .nav-vertical.user-menu > ul { - padding: 2em; - padding-top: .5em; - padding-bottom: 1em; - margin-block-end: 0; - margin-block-start: 0; - } - - .nav-vertical.user-menu li { - padding: .0125em; - } - - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - - .material-icons-outlined.user-info { - color: @unobtrusive; - } - - .material-icons-outlined.user-info.success { - color: @success; - } - - @media @tablet-down { - .header-user { - position: relative; - min-width: 3em; - background-color: transparent; - justify-content: center; - height: 100%; - margin-top: -13px; - margin-left: -16px; - color: @action-button-background1; - } - - .user-menu-container { - margin: 0; - padding: 0; - } - - .user-icon { - - } - .user-name { - display: none; - } - - .nav-vertical { - margin-top: 55px; - } - - .nav-vertical.user-menu { - position: fixed; - top: 1px; - right: 0; - margin-top: 0; - } - - .nav-vertical.user-menu > ul { - padding: 1em 1em; - padding-top: 3em; - } - - } - -} diff --git a/community_server/websrc/src/less/08-navi.less b/community_server/websrc/src/less/08-navi.less deleted file mode 100644 index e71ce93a2..000000000 --- a/community_server/websrc/src/less/08-navi.less +++ /dev/null @@ -1,451 +0,0 @@ -/* ============================================================ - - Navigation - - Datei : navi.less - Datum : 2020-04-30 - Autor : einhornimmond / Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .logo { - display: none; - vertical-align: middle; - height: 30px; - padding: .5em; - } - - .logo.big.visible, - .logo.small.visible { - display: block !important; - } - - .logo.mobile { - display: none; - } - - .logo.small.visible { - padding-left: 41px; - } - - /* - SIDEBARS - */ - .sidebar1 { - background-color: @menu-background; - font-size: @nav-fs; - font-weight: 500; - line-height: @sidebar1-lh; - padding: 0; - border-right: 1px solid @menu-border-color; - } - - .sidebar2 { - padding: 1em; - background-color: @main-background; - } - - .sidebar1-header { - font-size: @sidebar1-header-fs; - font-style: italic; - color: @unobtrusive; - } - - /* set general icons size here! */ - .nav-icon { - font-size: @nav-icons-fs !important; - color: @menu-link-text; - vertical-align: middle; - padding-right: 1em; - } - - /* important! order matters! we need to overwrite the main button's size here */ - .nav-main-button { - font-size: @nav-icon-main-fs !important; - color: @unobtrusive; - margin: .3em; - } - - /* Hide mobile menu button! */ - .nav-main-button.mobile { - display: none; - } - - .nav-menu.nav-menu-maximized { - width: 280px; - height: 100%; - } - - .nav-menu.nav-menu-minimized { - width: 120px; - height: 100%; - } - - .nav-menu-maximized { - -webkit-animation: slide-out 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-out 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized { - -webkit-animation: slide-in 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-in 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized .link-title { - display: none; - } - - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 72px; - } - - /** - * ---------------------------------------- - * animations slide-in / slide-out - * ---------------------------------------- - */ - - /* slide-in */ - @-webkit-keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - - } - - @keyframes slide-in { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - opacity: 1; - } - - } - - /* slide-out */ - @-webkit-keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - } - - @keyframes slide-out { - 0% { - -webkit-transform: translateX(-74px); - transform: translateX(-74px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - } - - /* - NAVI MOBILE - */ - @media @tablet-down { - .logo.big, - .logo.small { - display: none; - } - - .logo.visible { - padding: 0 !important; - } - - .logo, - .logo.mobile, - .logo.mobile.visible { - display: block; - position: fixed; - top: 12px; - left: 12px; - } - - .logo.big, - .logo.big.visible { - display: none !important; - } - - .nav-main-button { - display: none; - } - - .nav-main-button.mobile { - display: block; - position: fixed; - top: 2px; - right: 46px; - z-index: 3; - } - - .nav-menu.nav-menu-minimized, - .nav-menu.nav-menu-maximized { - width: 280px; - height: 300px; - } - - /* .nav-menu-minimized .link-title { - display: inherit; - } - */ - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 0; - } - - /* Here we "revert' maximized / minimized and change the animation */ - .nav-menu-maximized { - -webkit-animation: slide-down 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-down 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized { - -webkit-animation: slide-up 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-up 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - /** - * ---------------------------------------- - * animations slide-down / slide-up - * ---------------------------------------- - */ - - /* slide-down */ - @-webkit-keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateY(300px); - transform: translateX(300px); - opacity: 1; - } - - } - - @keyframes slide-down { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 0; - } - - 100% { - -webkit-transform: translateY(300px); - transform: translateY(300px); - opacity: 1; - } - - } - - /* slide-up */ - @-webkit-keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - - } - - @keyframes slide-up { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - -webkit-transform: translateY(-300px); - transform: translateY(-300px); - } - - } - - } - - /* END navi mobile base */ - .selected { - color: @menu-link-selected; - } - - .link-title { - vertical-align: middle; - line-height: @link-title-lh; - background-color: transparent; - } - - .nav-horizontal { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - align-items: flex-end; - list-style-type: none; - gap: 5%; - padding: 1em; - } - - .footer .nav-horizontal { - gap: 0; - padding: 0 1em; - padding-inline-start: 0 !important; - } - - .nav-top-smaller { - margin: 0; - padding: 0; - } - - .nav-smaller { - justify-content: left; - align-items: flex-start; - gap: 0; - padding: 0; - } - - .nav-smaller li { - padding: 0 !important; - padding: .2em .5em !important; - border: 1px solid @action-button-border; - margin: .1em .3em; - border-radius: 12px; - } - - .nav-smaller .heading { - font-weight: bold; - } - - .nav-vertical { - margin-top: -2em; - } - - .nav-horizontal li { - padding: .5em; - } - - .nav-vertical > ul { - display: flex; - flex-direction: column; - list-style-type: none; - gap: 5%; - padding: 1em; - } - - .nav-vertical li { - padding: .5em; - } - - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - - @media @tablet-down { - .nav-vertical { - margin-top: 55px; - } - - } - - .nav-bottom { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - list-style-type: none; - margin-bottom: 20px; - } - - .nav-bottom p { - font-size: @nav-bottom-fs; - color: @unobtrusive; - margin: 0; - } - - @media @tablet-down { - .nav-bottom p { - font-size: @nav-bottom-fs-mobile; - margin-top: -10px; - } - - } - - nav { - &.grd-left-bar { - position: fixed; - top: 80.5px; - } - - .grd-nav-bn { - width: 100px; - } - - ul { - margin-top: 0; - padding-left: 0; - } - - } - - /* buttons */ - .grd-nav-bn:hover, - .grd-active { - background-color: @button-background-active; - border-color: @main-link-text; - } - - .grd-nav-bn { - padding: 10px; - border: 1px solid @unobtrusive; - display: table-cell; - text-align: center; - vertical-align: middle; - color: @unobtrusive; - } - - .grd-nav-bn-large { - width: 40vw; - height: 18vh; - font-size: @nav-btn-large-fs; - } - - a.grd-nav-bn, - a.grd-nav-bn:visited { - color: @main-link-text; - text-decoration: none; - } - -} diff --git a/community_server/websrc/src/less/09-notification.less b/community_server/websrc/src/less/09-notification.less deleted file mode 100644 index a9bf74c0a..000000000 --- a/community_server/websrc/src/less/09-notification.less +++ /dev/null @@ -1,160 +0,0 @@ -/* ============================================================ - - Notification - - Datei : notification.css - Datum : 2020-06-10 - Autor : Christine Slotty - Copyright : Gradido - - ============================================================*/ -@media screen { - .header-notify { - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; - z-index: 10; - } - - @media @tablet-down { - .header-notify { - justify-content: flex-end; - margin-right: 93px; - margin-top: 8px; - } - - } - - .notify { - display: block; - padding: .5rem .3rem; - color: @notify; - animation: blinkingNotifySymbol 1.2s infinite; - } - - .notify-alert { - color: @alert; - animation: blinkingAlertSymbol 1.2s infinite; - } - - @keyframes blinkingNotifySymbol { - 0% { - color: @notify; - } - - 49% { - color: @notify; - } - - 60% { - color: @notify-blink; - } - - 99% { - color: @notify-blink; - } - - 100% { - color: @notify; - } - - } - - @keyframes blinkingAlertSymbol { - 0% { - color: @alert; - } - - 49% { - color: @alert; - } - - 60% { - color: @alert-blink; - } - - 99% { - color: @alert-blink; - } - - 100% { - color: @alert; - } - - } - - /* - .notification-indicator-primary { - background: #047006; - } - - .notification-indicator-warning { - background: #f0825f - } - .notification-indicator-secondary { - background: grey - } - - .notification-indicator-secondary:before { - content: ""; - background: rgba(128, 128, 128, .5) - } - - .notification-indicator-success { - background: #00e093 - } - - .notification-indicator-success:before { - content: ""; - background: rgba(0, 224, 147, .5) - } - - .notification-indicator-info { - background: #6c61f6 - } - - .notification-indicator-info:before { - content: ""; - background: rgba(108, 97, 246, .5) - } - - - .notification-indicator-danger { - background: #ff5f66 - } - - .notification-indicator-danger:before { - content: ""; - background: rgba(255, 95, 102, .5) - } - - .notification-indicator-light { - background: #dfdfdf - } - - .notification-indicator-light:before { - content: ""; - background: rgba(223, 223, 223, .5) - } - - .notification-indicator-dark { - background: #74767b - } - - .notification-indicator-dark:before { - content: ""; - background: rgba(116, 118, 123, .5) - } - - .notification-indicator-white { - background: #fff - } - - .notification-indicator-white:before { - content: ""; - background: rgba(255, 255, 255, .5) - } - */ -} diff --git a/community_server/websrc/src/less/10-center.less b/community_server/websrc/src/less/10-center.less deleted file mode 100644 index 3163e566e..000000000 --- a/community_server/websrc/src/less/10-center.less +++ /dev/null @@ -1,224 +0,0 @@ -/* ============================================================ - - Screen styles for the regular center part. - - Datei : center.css - Datum : 2020-04-30 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - - /* ========= - CONTENT - =========*/ - .content-default { - display: flex; - justify-content: center; - max-width: 90%; - } - - .content { - display: flex; - justify-content: flex-start; - flex-direction: column; - overflow: auto; - width: 100%; - background-color: @main-background; - line-height: @content-lh; - letter-spacing: @content-letter-spacing; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 1rem; - padding-right: 5em; - } - - @media @tablet-down { - .content { - padding-right: 0; - } - - } - - /* Center Navigation Top */ - .nav-content { - position: relative; - color: @content-nav; - margin: 0 .25em; - } - - .nav-content-list { - display: flex; - list-style-type: none; - padding: 0; - margin-left: .25em; - } - - .nav-content-separator { - margin: 0 1em; - } - - @media @tablet-down { - .nav-content-list { - display: flex; - font-size: small; - margin-bottom: 0; - justify-content: center; - } - - } - - /* Center Content Container */ - .content-container { - background-color: @container-background; - color: @container-text; - border-radius: .5em; - box-shadow: 0 0 10px 0 @container-shadow; - border: 1px solid @container-border; - margin: 1em .25em; - } - - /* Block Container Above Main */ - .block-container { - width: 100%; - display: flex; - } - - /* Top Info Above Main */ - .info-container { - display: flex; - justify-content: space-between; - align-items: center; - max-width: 70%; - padding: 1em 25px; - } - - @media @wide-screen-down { - .info-container { - flex-direction: column; - max-width: 90%; - line-height: .25em; - } - - } - - /* Main Container */ - .main-container { - width: 100%; - } - - @media @tablet-down { - .main-container { - max-width: 97%; - } - - } - - .default-container { - width: 90%; - margin: auto; - padding: 1em; - } - - /* Content Block */ - .content-block { - width: 170px; - padding: 20px 25px 20px; - border: 1px dashed grey; - border-radius: 16px; - margin: 1em; - display: flex; - flex-direction: column; - justify-content: center; - justify-items: center; - align-items: center; - } - - .block-img { - width: 40px; - height: 40px; - line-height: 20px; - font-size: 24px; - padding: 8px; - border-radius: 20px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - } - - /* Generic Content */ - .content-region h3 { - color: @container-header; - } - - .content-region { - border-bottom: 1px dashed @light; - padding: 0 25px; - padding-bottom: 2em; - margin: 1em .25em; - } - - .content-collection { - display: flex; - } - - .content-item { - margin: .5em 0; - margin-right: 5em; - width: 220px; - padding: 1em 2em; - } - - .action-button { - background: @action-button-background; - border-left: 3px solid @action-button-border; - } - - .info-item { - border-left: 2px solid @info-item-border; - } - - .inline-header { - display: inline; - } - - .show-profile-img { - display: block; - height: 100px; - vertical-align: middle; - border-radius: 10px; - border: 2px dotted @info-background; - } - - @media @tablet-down { - .content-region { - padding-left: 5px; - } - - .content-collection { - flex-direction: column; - align-items: center; - } - - .content-item { - margin: .5em 0; - margin-right: 0; - width: 160px; - padding: 1em 2em; - } - - } - - /* OTHER */ - .info-item i, - .info-item-link, - .action-button i, - .action-button-link { - vertical-align: middle; - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/12-center-form-single.less b/community_server/websrc/src/less/12-center-form-single.less deleted file mode 100644 index 8179da087..000000000 --- a/community_server/websrc/src/less/12-center-form-single.less +++ /dev/null @@ -1,164 +0,0 @@ -/* ============================================================ - - Screen styles for the simple center form. (login etc) - - Datei : center-form-single.css - Datum : 2020-07-10 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .center-form-single { - width: 50%; - margin: auto; - } - - .center-form-header { - margin-bottom: 50px; - } - - .center-logo { - display: block; - margin: 0 auto; - width: 280px; - } - - .center-logo img { - width: 100%; - vertical-align: middle; - border-style: none; - } - - .center-form-container { - display: flex; - flex-direction: column; - padding: 2em 8em; - background-color: @container-background; - border-radius: 6px; - box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2); - margin-bottom: 1.5rem; - border: 1px solid rgba(238, 238, 238, .75); - } - - @media @tablet-down { - .center-form-header { - margin-bottom: 30px; - margin-top: -50px; - } - - .center-form-single { - width: 97%; - margin: auto; - } - - .center-form-container { - padding: 1em .5em; - } - - } - - .center-form-title h1 { - margin-block-start: 0; - } - - .center-form-selectors { - display: flex; - justify-content: flex-end; - align-items: center; - height: 38px; - padding: 5px 0; - margin-bottom: 2em; - } - - .center-form-form, - .center-form-form form { - display: flex; - flex-direction: column; - } - - .center-form-form .form-label { - text-align: left; - } - .center-form-form .form-control { - width: 100%; - margin: auto; - box-sizing: border-box; - margin-bottom: .5em; - } - - .center-form-submit { - width: 100%; - margin: 1em 0; - } - - .reset-pwd-link, - .signup-link { - padding: 0 20px; - - & a { - color: @action-button-background1; - } - - & p { - display: inline-block; - margin-block-start: 0; - margin-block-end: 0; - } - - } - - .center-bottom { - color: @unobtrusive; - text-align: center; - padding-top: 30px; - } - - .flag-btn { - text-align: center; - vertical-align: middle; - padding: 3px 11px; - } - - .flag { - display: block; - } - - .flag-germany { - background: red; - border-top: 9px solid #000; - border-bottom: 9px solid #fc0; - width: 40px; - height: 10px; - } - - .flag-england { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==); - background-size: cover; - width: 40px; - height: 28px; - } - - .group { - padding-left: 10px; - padding-top: 10px; - padding-bottom: 10px; - } - - .group-is-invalid { - background-color: rgba(240, 130, 95, .2); - border-color: #dc3545; - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E"); - background-repeat: no-repeat; - background-position: center right calc(.375em + .1875rem); - background-size: calc(.75em + .375rem) calc(.75em + .375rem) - } - - .group-is-invalid .radio label .input-frame::before { - border-color: red; - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/15-facts.less b/community_server/websrc/src/less/15-facts.less deleted file mode 100644 index 3bac37ff7..000000000 --- a/community_server/websrc/src/less/15-facts.less +++ /dev/null @@ -1,62 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* ============================================================ - - Screen styles for plain facts. - - Datei : facts.css - Datum : 08.07.2020 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - .fact-list { - display: flex; - flex-direction: column; - list-style-type: none; - width: 100%; - padding-inline-start: 0; - font-weight: 300; - } - - .fact { - display: inline-block; - padding-left: 1em; - } - - .label { - width: 150px; - text-align: right; - font-weight: bold; - } - - @media @tablet-down { - .fact-list { - margin-block-start: 0; - margin-block-end: 0; - } - - li.fact { - display: flex; - flex-direction: column; - } - - .fact { - padding-left: .5em; - } - - .label { - width: 250px; - text-align: left; - font-size: .9em; - font-weight: normal; - } - - } - -} diff --git a/community_server/websrc/src/less/20-list.less b/community_server/websrc/src/less/20-list.less deleted file mode 100644 index d09fe0594..000000000 --- a/community_server/websrc/src/less/20-list.less +++ /dev/null @@ -1,239 +0,0 @@ -/* ============================================================ - - Screen styles for lists. - - Datei : list.css - Datum : 2020-06-09 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - - /* ========= - LISTS - =========*/ - - /* List Content */ - .content-list { - width: 100%; - } - - .content-list-title { - font-size: 1rem; - margin: 0; - padding: 20px 25px; - color: @content-table-title; - } - - .content-list-table { - display: flex; - flex-direction: column; - width: 100%; - overflow: auto; - font-size: 16px; - color: #212529; - } - - .row { - display: flex; - width: 100%; - border-top: 1px solid #f2f4f9; - -webkit-transition-duration: .5s; - transition-duration: .5s; - } - - @media @tablet-down { - .row { - flex-direction: column; - } - - } - - .row:hover { - background-color: #f6f7f9; - } - - .cell { - display: flex; - flex-wrap: wrap; - align-items: center; - padding: 1em 1.5em; - } - - .cell-dense { - padding: .1em .5em; - } - - .centered { - justify-content: center; - } - - .c0 { - flex-grow: 5; - min-width: 20%; - } - - .c1 { - min-width: 40px; - flex: 0 0 40px; - } - - .c2 { - min-width: 80px; - flex: 0 0 80px; - } - - .c3 { - min-width: 160px; - flex: 0 0 160px; - } - - .c4 { - min-width: 240px; - flex: 0 0 240px; - } - - .c5 { - min-width: 320px; - flex: 0 0 320px; - } - - .c6 { - min-width: 400px; - flex: 0 0 400px; - } - - @media @tablet-down { - .cell { - padding: .25em 1.5em; - } - - .c1 { - flex-basis: auto; - } - - .c2 { - flex-basis: auto; - } - - .c3 { - flex-basis: auto; - } - - .c4 { - flex-basis: auto; - } - - .c5 { - flex-basis: auto; - } - - .c6 { - flex-basis: auto; - } - - } - - .header-cell { - border-top: 1px solid @content-table-header-border; - background-color: @content-table-header-bg; - color: @content-table-header; - } - - .content-list-table img, - .content-list-table i { - vertical-align: middle; - } - - .content-list-table > span { - font-size: .8em; - padding: .5em 2em; - vertical-align: middle; - } - - /* Individual Tables XXX rm!! */ - .error-list { - grid-template-columns: 2fr 2fr 5fr 1fr; - } - - .transactions { - grid-template-columns: 1fr 4fr 2fr 2fr; - } - - .profile-img { - width: 30px; - height: 30px; - border-radius: 6px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - margin-right: 40px; - } - - .tx-email { - cursor: pointer; - display: block; - color: @content-table-header; - font-weight: 400; - } - - .small { - font-size: 80%; - font-weight: 400; - } - - /*, - .cell-icon .material-icons-outlined */ - .cell-icon { - - /*noch ungeklärt - icon ist nicht aligned */ - - /*font-size: 1.25em;*/ - vertical-align: middle; - } - - /* ===================================== - FORM TOP CONTENT (checkTransaction) - =====================================*/ - .form-content { - padding: 35px; - padding-top: 20px; - max-width: 80%; - margin: auto; - } - - .content-table { - border: 1px solid @content-table-header-border; - border-top: none; - margin-bottom: 1.5rem; - } - - .content-row { - display: flex; - justify-content: space-between; - font-weight: 400; - border-top: 1px solid @content-table-header-border; - } - - .content-row-header { - font-weight: 500; - color: @content-table-header; - } - - .content-row-bg { - background-color: @content-row-bg; - } - - .content-cell { - display: block; - border-collapse: collapse; - padding: 10px 15px; - } - - .form-button .material-icons-outlined { - font-size: 1.25em; - } - -} diff --git a/community_server/websrc/src/less/21-tabs.less b/community_server/websrc/src/less/21-tabs.less deleted file mode 100644 index 694dd1dab..000000000 --- a/community_server/websrc/src/less/21-tabs.less +++ /dev/null @@ -1,45 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : 23.11.2020, 14:04:28 - Author : einhornimmond -*/ - - /* Style the tab */ -.tab { - overflow: hidden; - border: 1px solid #ccc; - background-color: #f1f1f1; -} - -/* Style the buttons that are used to open the tab content */ -.tab button { - background-color: inherit; - float: left; - border: none; - outline: none; - cursor: pointer; - padding: 14px 16px; - transition: 0.3s; -} - -/* Change background color of buttons on hover */ -.tab button:hover { - background-color: #ddd; -} - -/* Create an active/current tablink class */ -.tab button.active { - background-color: #ccc; -} - -/* Style the tab content */ -.tabcontent { - display: none; - padding: 6px 12px; - border: 1px solid #ccc; - border-top: none; -} \ No newline at end of file diff --git a/community_server/websrc/src/less/30-form.less b/community_server/websrc/src/less/30-form.less deleted file mode 100644 index df52a684e..000000000 --- a/community_server/websrc/src/less/30-form.less +++ /dev/null @@ -1,238 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* ============================================================ - - Screen styles for forms. - - Datei : form.css - Datum : 2020-06-07 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@media screen { - - /* ========= - FORMS - =========*/ - - /* Form Content */ - .action-form { - width: 100%; - } - - .form-header { - border-left: 3px solid @form-header-border; - background: @form-header-background; - padding: 15px 20px; - margin: 0; - margin-bottom: 15px; - border-radius: 0 6px 0 0; - } - - .form-label { - grid-column: 1 / 2; - font-weight: 400; - text-align: right; - padding-right: .5em; - } - - .form-control { - grid-column: 2 / 3; - display: block; - padding: .4em .75em; - padding-left: 20px; - padding-right: 20px; - margin: 0; - margin-right: .5em; - color: rgba(16, 16, 16, .8); - display: block; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #6c757d; - background-color: #f6f7f9; - background-clip: padding-box; - border: 1px solid #f0f2f5; - border-radius: .25rem; - -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - } - - .form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25); - } - - textarea { - resize: vertical; - } - - .badge { - display: inline-block; - padding: .45rem 1rem; - font-size: 80%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25rem; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out - } - - .badge-warning { - color: @badge-color-warning; - background-color: @badge-background-warning; - } - - .badge-error { - color: @badge-color-error; - background-color: @badge-background-error; - } - - .form-full-width { - grid-column-start: 1; - grid-column-end: 3; - display: flex; - flex-direction: column; - } - - .form-button { - cursor: pointer; - font: 600 13.3333px Arial; - font-size: .875rem; - line-height: 1.5; - text-align: center; - vertical-align: middle; - color: @action-button-text; - background-color: @action-button-background1; - border-color: @action-button-border; - border: 1px solid transparent; - border-radius: .2rem; - height: 35px; - max-height: 35px; - padding: 4px 15px; - margin-right: .5em; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2); - } - - .form-button:hover { - background-color: #034b04; - border-color: #023f03; - } - - .button-cancel { - color: #fff !important; - background-color: #f0825f; - border-color: #f0825f; - } - - .button-cancel:hover { - background-color: #ec5e30; - border-color: #eb5425; - } - - .link-button { - display: inline-block; - background: @action-button-background; - color: @action-button-text; - height: 17px; - padding: 1em 2em; - line-height: 1em; - border-radius: 6px; - text-align: center; - vertical-align: middle; - } - - .action-link { - color: @action-button-background1 !important; - } - - .action-link-button { - background-color: @action-button-background1 !important; - color: @action-button-text !important; - margin-top: 1em; - padding: .5em 1em; - } - - .edit-profile-img { - width: 100px; - } - - .note-smaller { - font-size: smaller; - } - - .form-row, - .grid-row { - display: flex; - justify-content: flex-start; - align-items: center; - align-content: center; - width: 100%; - -webkit-transition-duration: .5s; - transition-duration: .5s; - } - - .justify-end { - justify-content: flex-end; - } - - @media @tablet-down { - .grid-row { - flex-direction: column; - } - - } - - .form-row { - border-top: 1px solid #f2f4f9; - } - - .form-row:hover { - background-color: #f6f7f9; - } - - /* CENTER FORM SPECIFICS */ - .form-body form { - display: grid; - grid-template-columns: 220px 1fr; - margin: 36px 75px; - grid-gap: 1em; - } - - .center-form { - width: 450px; - } - - .center-form .form-control { - width: 90%; - } - - .center-form fieldset { - margin-bottom: 1em; - } - - @media @tablet-down { - .form-body form { - grid-template-columns: 1fr; - margin: 20px; - grid-gap: .25em; - } - - .form-label { - text-align: left; - } - - } - -} diff --git a/configs/community_server/app.php b/configs/community_server/app.php deleted file mode 100644 index d56a43cc0..000000000 --- a/configs/community_server/app.php +++ /dev/null @@ -1,431 +0,0 @@ - filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN), - - /** - * Configure basic information about the application. - * - * - namespace - The namespace to find app classes under. - * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time. - * - encoding - The encoding used for HTML + database connections. - * - base - The base directory the app resides in. If false this - * will be auto detected. - * - dir - Name of app directory. - * - webroot - The webroot directory. - * - wwwRoot - The file path to webroot. - * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to - * use CakePHP pretty URLs, remove these .htaccess - * files: - * /.htaccess - * /webroot/.htaccess - * And uncomment the baseUrl key below. - * - fullBaseUrl - A base URL to use for absolute links. When set to false (default) - * CakePHP generates required value based on `HTTP_HOST` environment variable. - * However, you can define it manually to optimize performance or if you - * are concerned about people manipulating the `Host` header. - * - imageBaseUrl - Web path to the public images directory under webroot. - * - cssBaseUrl - Web path to the public css directory under webroot. - * - jsBaseUrl - Web path to the public js directory under webroot. - * - paths - Configure paths for non class based resources. Supports the - * `plugins`, `templates`, `locales` subkeys, which allow the definition of - * paths for plugins, view templates and locale files respectively. - */ - 'App' => [ - 'namespace' => 'App', - 'encoding' => env('APP_ENCODING', 'UTF-8'), - 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), - 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'), - 'base' => false, - 'dir' => 'src', - 'webroot' => 'webroot', - 'wwwRoot' => WWW_ROOT, - //'baseUrl' => env('SCRIPT_NAME'), - 'fullBaseUrl' => false, - 'imageBaseUrl' => 'img/', - 'cssBaseUrl' => 'css/', - 'jsBaseUrl' => 'js/', - 'paths' => [ - 'plugins' => [ROOT . DS . 'plugins' . DS], - 'templates' => [APP . 'Template' . DS], - 'locales' => [APP . 'Locale' . DS], - ], - ], - - /** - * Security and encryption configuration - * - * - salt - A random string used in security hashing methods. - * The salt value is also used as the encryption key. - * You should treat it as extremely sensitive data. - */ - 'Security' => [ - 'salt' => env('SECURITY_SALT', '7ddf685a27d997ef36e51bdd626e7fc6b50a3abfb2971e8e59974d421116a150'), - ], - - /** - * Apply timestamps with the last modified time to static assets (js, css, images). - * Will append a querystring parameter containing the time the file was modified. - * This is useful for busting browser caches. - * - * Set to true to apply timestamps when debug is true. Set to 'force' to always - * enable timestamping regardless of debug value. - */ - 'Asset' => [ - //'timestamp' => true, - // 'cacheTime' => '+1 year' - ], - - /** - * Configure the cache adapters. - */ - 'Cache' => [ - 'default' => [ - 'className' => FileEngine::class, - 'path' => CACHE, - 'url' => env('CACHE_DEFAULT_URL', null), - ], - - /** - * Configure the cache used for general framework caching. - * Translation cache files are stored with this configuration. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - * If you set 'className' => 'Null' core cache will be disabled. - */ - '_cake_core_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_core_', - 'path' => CACHE . 'persistent/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKECORE_URL', null), - ], - - /** - * Configure the cache for model and datasource caches. This cache - * configuration is used to store schema descriptions, and table listings - * in connections. - * Duration will be set to '+2 minutes' in bootstrap.php when debug = true - */ - '_cake_model_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_model_', - 'path' => CACHE . 'models/', - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEMODEL_URL', null), - ], - - /** - * Configure the cache for routes. The cached routes collection is built the - * first time the routes are processed via `config/routes.php`. - * Duration will be set to '+2 seconds' in bootstrap.php when debug = true - */ - '_cake_routes_' => [ - 'className' => FileEngine::class, - 'prefix' => 'myapp_cake_routes_', - 'path' => CACHE, - 'serialize' => true, - 'duration' => '+1 years', - 'url' => env('CACHE_CAKEROUTES_URL', null), - ], - ], - - /** - * Configure the Error and Exception handlers used by your application. - * - * By default errors are displayed using Debugger, when debug is true and logged - * by Cake\Log\Log when debug is false. - * - * In CLI environments exceptions will be printed to stderr with a backtrace. - * In web environments an HTML page will be displayed for the exception. - * With debug true, framework errors like Missing Controller will be displayed. - * When debug is false, framework errors will be coerced into generic HTTP errors. - * - * Options: - * - * - `errorLevel` - int - The level of errors you are interested in capturing. - * - `trace` - boolean - Whether or not backtraces should be included in - * logged errors/exceptions. - * - `log` - boolean - Whether or not you want exceptions logged. - * - `exceptionRenderer` - string - The class responsible for rendering - * uncaught exceptions. If you choose a custom class you should place - * the file for that class in src/Error. This class needs to implement a - * render method. - * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that - * extend one of the listed exceptions will also be skipped for logging. - * E.g.: - * `'skipLog' => ['Cake\Http\Exception\NotFoundException', 'Cake\Http\Exception\UnauthorizedException']` - * - `extraFatalErrorMemory` - int - The number of megabytes to increase - * the memory limit by when a fatal error is encountered. This allows - * breathing room to complete logging or error handling. - */ - 'Error' => [ - 'errorLevel' => E_ALL, - 'exceptionRenderer' => ExceptionRenderer::class, - 'skipLog' => [], - 'log' => true, - 'trace' => true, - ], - - /** - * Email configuration. - * - * By defining transports separately from delivery profiles you can easily - * re-use transport configuration across multiple profiles. - * - * You can specify multiple configurations for production, development and - * testing. - * - * Each transport needs a `className`. Valid options are as follows: - * - * Mail - Send using PHP mail function - * Smtp - Send using SMTP - * Debug - Do not send the email, just return the result - * - * You can add custom transports (or override existing transports) by adding the - * appropriate file to src/Mailer/Transport. Transports should be named - * 'YourTransport.php', where 'Your' is the name of the transport. - */ - 'EmailTransport' => [ - 'default' => [ - 'className' => MailTransport::class, - /* - * The following keys are used in SMTP transports: - */ - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'username' => null, - 'password' => null, - 'className' => 'Smtp', - 'tls' => true - ], - ], - - /** - * Email delivery profiles - * - * Delivery profiles allow you to predefine various properties about email - * messages from your application and give the settings a name. This saves - * duplication across your application and makes maintenance and development - * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email` - * for more information. - */ - 'Email' => [ - 'default' => [ - 'transport' => 'default', - 'from' => 'you@localhost', - //'charset' => 'utf-8', - //'headerCharset' => 'utf-8', - ], - ], - - /** - * Connection information used by the ORM to connect - * to your application's datastores. - * - * ### Notes - * - Drivers include Mysql Postgres Sqlite Sqlserver - * See vendor\cakephp\cakephp\src\Database\Driver for complete list - * - Do not use periods in database name - it may lead to error. - * See https://github.com/cakephp/cakephp/issues/6471 for details. - * - 'encoding' is recommended to be set to full UTF-8 4-Byte support. - * E.g set it to 'utf8mb4' in MariaDB and MySQL and 'utf8' for any - * other RDBMS. - */ - 'Datasources' => [ - 'default' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'mariadb', - /* - * CakePHP will use the default DB port based on the driver selected - * MySQL on MAMP uses port 8889, MAMP users will want to uncomment - * the following line and set the port accordingly - */ - //'port' => 'non_standard_port_number', - 'username' => 'root', - 'password' => '', - 'database' => 'gradido_community', - /* - * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6). - */ - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'flags' => [], - 'cacheMetadata' => true, - 'log' => false, - - /** - * Set identifier quoting to true if you are using reserved words or - * special characters in your table or column names. Enabling this - * setting will result in queries built using the Query Builder having - * identifiers quoted when creating SQL. It should be noted that this - * decreases performance because each query needs to be traversed and - * manipulated before being executed. - */ - 'quoteIdentifiers' => false, - - /** - * During development, if using MySQL < 5.6, uncommenting the - * following line could boost the speed at which schema metadata is - * fetched from the database. It can also be set directly with the - * mysql configuration directive 'innodb_stats_on_metadata = 0' - * which is the recommended value in production environments - */ - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - - 'url' => env('DATABASE_URL', null), - ], - - /** - * The test connection is used during the test suite. - */ - 'test' => [ - 'className' => Connection::class, - 'driver' => Mysql::class, - 'persistent' => false, - 'host' => 'mariadb', - //'port' => 'non_standard_port_number', - 'username' => 'root', - 'password' => '', - 'database' => 'gradido_community_test', - //'encoding' => 'utf8mb4', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - 'quoteIdentifiers' => false, - 'log' => false, - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - 'url' => env('DATABASE_TEST_URL', null), - ], - ], - - /** - * Configures logging options - */ - 'Log' => [ - 'debug' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'debug', - 'url' => env('LOG_DEBUG_URL', null), - 'scopes' => false, - 'levels' => ['notice', 'info', 'debug'], - ], - 'error' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'error', - 'url' => env('LOG_ERROR_URL', null), - 'scopes' => false, - 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], - ], - // To enable this dedicated query log, you need set your datasource's log flag to true - 'queries' => [ - 'className' => FileLog::class, - 'path' => LOGS, - 'file' => 'queries', - 'url' => env('LOG_QUERIES_URL', null), - 'scopes' => ['queriesLog'], - ], - ], - - /** - * Session configuration. - * - * Contains an array of settings to use for session configuration. The - * `defaults` key is used to define a default preset to use for sessions, any - * settings declared here will override the settings of the default config. - * - * ## Options - * - * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. Avoid using `.` in cookie names, - * as PHP will drop sessions from cookies with `.` in the name. - * - `cookiePath` - The url path for which session cookie is set. Maps to the - * `session.cookie_path` php.ini config. Defaults to base path of app. - * - `timeout` - The time in minutes the session should be valid for. - * Pass 0 to disable checking timeout. - * Please note that php.ini's session.gc_maxlifetime must be equal to or greater - * than the largest Session['timeout'] in all served websites for it to have the - * desired effect. - * - `defaults` - The default configuration set to use as a basis for your session. - * There are four built-in options: php, cake, cache, database. - * - `handler` - Can be used to enable a custom session handler. Expects an - * array with at least the `engine` key, being the name of the Session engine - * class to use for managing the session. CakePHP bundles the `CacheSession` - * and `DatabaseSession` engines. - * - `ini` - An associative array of additional ini values to set. - * - * The built-in `defaults` options are: - * - * - 'php' - Uses settings defined in your php.ini. - * - 'cake' - Saves session files in CakePHP's /tmp directory. - * - 'database' - Uses CakePHP's database sessions. - * - 'cache' - Use the Cache class to save sessions. - * - * To define a custom session handler, save it at src/Network/Session/.php. - * Make sure the class implements PHP's `SessionHandlerInterface` and set - * Session.handler to - * - * To use database sessions, load the SQL file located at config/schema/sessions.sql - */ - 'Session' => [ - 'defaults' => 'php', - ], - // *************************************************** - // Gradido specific configuration - // *************************************************** - // Login Server ip and port - 'LoginServer' => [ - 'host' => 'http://login-server', - 'port' => 1201, - 'url' => 'http://localhost' - ], - - // login server for look up emails from other groups - // workaround for using multiple groups until every code is finished as planned - // normally node server are responsible for email look up from users from other groups - 'NeighborLoginServers' => [ - ['host' => 'login-server', 'port' => 1201] - ], - 'GradidoBlockchain' => [ - // type: - // - db: centralized blockchain in mysql db, no cross group transactions - // - hedera: send transaction over hedera - 'type' => 'db', - // gradido nodes with blockchain (if type != db) - 'nodes' => [ - ['host' => 'node', 'port' => 13702] - ] - ], - - 'GroupAlias' => 'docker', - 'GDTServer' => [ - 'host' => 'https://gdt.gradido.net' // staging - ], - 'API' => [ - 'allowedCaller' => ['login-server'] - ], - 'ServerAdminEmail' => 'info@gradido.net', - 'noReplyEmail' => 'no-reply@gradido.net', - 'disableEmail' => true - -]; diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 250b392db..3d63da9e3 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -78,23 +78,6 @@ services: # bind the local folder to the docker to allow live reload - ./database:/app - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: community_server - dockerfile: ./community_server/Dockerfile - depends_on: - - mariadb - networks: - - internal-net - - external-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - - ./community_server/src:/var/www/cakephp/src - ######################################################### ## MARIADB ############################################## ######################################################### diff --git a/docker-compose.test.yml b/docker-compose.test.yml index a719f8c36..221ecba20 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -35,24 +35,6 @@ services: volumes: - db_test_vol:/var/lib/mysql - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: test - dockerfile: ./community_server/Dockerfile - depends_on: - - mariadb - networks: - - internal-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - - ./community_server/src:/var/www/cakephp/src - - ./coverage/community:/var/www/cakephp/webroot/coverage - - ######################################################### ## PHPMYADMIN ########################################### ######################################################### diff --git a/docker-compose.yml b/docker-compose.yml index 9c92e19ea..213b200cd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -145,25 +145,6 @@ services: ports: - 80:80 - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: community_server - dockerfile: ./community_server/Dockerfile - environment: - - DB_PASSWORD='' - - DB_USER='root' - - DB_DATABASE='gradido_community' - depends_on: - - mariadb - networks: - - internal-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - networks: external-net: internal-net: diff --git a/docu/create-coins-as-admin.md b/docu/create-coins-as-admin.md index f03da7733..442864cff 100644 --- a/docu/create-coins-as-admin.md +++ b/docu/create-coins-as-admin.md @@ -9,19 +9,7 @@ INSERT INTO user_roles (id, user_id, role_id) VALUES (NULL, '1', '1'); user_id has to be found in users Now when we login in on https://$community_domain/account/ we can create coins but we will be restricted cause we can't sign the creations. -### Signation account -At first we need to enable the server user account creation with uncommenting line: 19 in -community_server/src/Controller/ServerUsersController.php -```php -$this->Auth->allow(['add', 'edit']); -``` -This enable us to use this action without being logged in. -To add a signation account we need to go on the following url: http://$community_domain/server-users/add - ### Coin creation process -The coin creation for work is done in the following url: http://$community_domain/transaction-creations/create-multi -Where we can create coins for a number of as many users as we want excepted for our self. -Furthermore we must sign the transactions we created. Normally after clicking on the left button (Transaktion abschließen) we should be automatically forwarded to http://$community_domain/account/checkTransactions where we can do this. -If not this page can also be reached by clicking on the shield-icon with the hook in it on the Dashboard, which is only shown if at least one transaction is waiting for signing. - -For debug purposes you can check the `pending_tasks` table, which is used to store the transactions which are not signed yet or had errors. \ No newline at end of file +Admin (User needs a certain role) can go through the wallet into the Admin Interface. +Their he has multiple pages, the user search page allows to find user and to create coins for them if their email was verified. He can in the multiple creation page select multiple users for which he want to create a same amount of coins. +After an Admin has proposed a creation every admin has the possibility to validate this creation except for a own creation! Every Admin can also update the proposed creation. \ No newline at end of file diff --git a/php-fpm/Dockerfile b/php-fpm/Dockerfile deleted file mode 100644 index d648fb564..000000000 --- a/php-fpm/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -From phpdockerio/php74-fpm as php-fpm - -# Install selected extensions and other stuff -RUN apt-get update \ - && apt-get -y --no-install-recommends install curl php7.4-curl php7.4-fpm php7.4-mbstring php7.4-intl php7.4-xml php7.4-pdo php7.4-mysql\ - && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* - - -WORKDIR "/var/www/cakephp" \ No newline at end of file