diff --git a/website/.git_origin/FETCH_HEAD b/website/.git_origin/FETCH_HEAD new file mode 100644 index 0000000..7966df4 --- /dev/null +++ b/website/.git_origin/FETCH_HEAD @@ -0,0 +1,4 @@ +f7acfb1ae8d12039e3b7c0b453a60b3ef7f796bb branch 'master' of https://github.com/Rackover/XLabsProject.github.io +09f1d8e3c9d3bec42ee542a197e9f4f0c8f203b7 not-for-merge branch 'patch-1' of https://github.com/Rackover/XLabsProject.github.io +fb9aa4f87fba6f6125e3eddea8527212e9cde6f9 not-for-merge branch 'patch-2' of https://github.com/Rackover/XLabsProject.github.io +c7d9a0b296511aee8e2f5fe279f7a227a8318ded not-for-merge branch 'patch-3' of https://github.com/Rackover/XLabsProject.github.io diff --git a/website/.git_origin/HEAD b/website/.git_origin/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/website/.git_origin/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/website/.git_origin/ORIG_HEAD b/website/.git_origin/ORIG_HEAD new file mode 100644 index 0000000..a4a021f --- /dev/null +++ b/website/.git_origin/ORIG_HEAD @@ -0,0 +1 @@ +f7acfb1ae8d12039e3b7c0b453a60b3ef7f796bb diff --git a/website/.git_origin/config b/website/.git_origin/config new file mode 100644 index 0000000..87e573b --- /dev/null +++ b/website/.git_origin/config @@ -0,0 +1,13 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = https://github.com/Rackover/XLabsProject.github.io.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "main"] + remote = origin + merge = refs/heads/master diff --git a/website/.git_origin/description b/website/.git_origin/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/website/.git_origin/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/website/.git_origin/hooks/applypatch-msg.sample b/website/.git_origin/hooks/applypatch-msg.sample new file mode 100644 index 0000000..a5d7b84 --- /dev/null +++ b/website/.git_origin/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/website/.git_origin/hooks/commit-msg.sample b/website/.git_origin/hooks/commit-msg.sample new file mode 100644 index 0000000..b58d118 --- /dev/null +++ b/website/.git_origin/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/website/.git_origin/hooks/fsmonitor-watchman.sample b/website/.git_origin/hooks/fsmonitor-watchman.sample new file mode 100644 index 0000000..14ed0aa --- /dev/null +++ b/website/.git_origin/hooks/fsmonitor-watchman.sample @@ -0,0 +1,173 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + } + my $query = <<" END"; + ["query", "$git_work_tree", { + "since": $last_update_token, + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/website/.git_origin/hooks/post-update.sample b/website/.git_origin/hooks/post-update.sample new file mode 100644 index 0000000..ec17ec1 --- /dev/null +++ b/website/.git_origin/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/website/.git_origin/hooks/pre-applypatch.sample b/website/.git_origin/hooks/pre-applypatch.sample new file mode 100644 index 0000000..4142082 --- /dev/null +++ b/website/.git_origin/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/website/.git_origin/hooks/pre-commit.sample b/website/.git_origin/hooks/pre-commit.sample new file mode 100644 index 0000000..e144712 --- /dev/null +++ b/website/.git_origin/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/website/.git_origin/hooks/pre-merge-commit.sample b/website/.git_origin/hooks/pre-merge-commit.sample new file mode 100644 index 0000000..399eab1 --- /dev/null +++ b/website/.git_origin/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/website/.git_origin/hooks/pre-push.sample b/website/.git_origin/hooks/pre-push.sample new file mode 100644 index 0000000..4ce688d --- /dev/null +++ b/website/.git_origin/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/website/.git_origin/hooks/pre-rebase.sample b/website/.git_origin/hooks/pre-rebase.sample new file mode 100644 index 0000000..6cbef5c --- /dev/null +++ b/website/.git_origin/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/website/.git_origin/hooks/pre-receive.sample b/website/.git_origin/hooks/pre-receive.sample new file mode 100644 index 0000000..a1fd29e --- /dev/null +++ b/website/.git_origin/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/website/.git_origin/hooks/prepare-commit-msg.sample b/website/.git_origin/hooks/prepare-commit-msg.sample new file mode 100644 index 0000000..10fa14c --- /dev/null +++ b/website/.git_origin/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/website/.git_origin/hooks/push-to-checkout.sample b/website/.git_origin/hooks/push-to-checkout.sample new file mode 100644 index 0000000..af5a0c0 --- /dev/null +++ b/website/.git_origin/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/website/.git_origin/index b/website/.git_origin/index new file mode 100644 index 0000000..e51c7f9 Binary files /dev/null and b/website/.git_origin/index differ diff --git a/website/.git_origin/info/exclude b/website/.git_origin/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/website/.git_origin/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/website/.git_origin/objects/pack/pack-8ca9f532106dd426e5cb6f8b52c246762099af9b.idx b/website/.git_origin/objects/pack/pack-8ca9f532106dd426e5cb6f8b52c246762099af9b.idx new file mode 100644 index 0000000..be46333 Binary files /dev/null and b/website/.git_origin/objects/pack/pack-8ca9f532106dd426e5cb6f8b52c246762099af9b.idx differ diff --git a/website/.git_origin/objects/pack/pack-8ca9f532106dd426e5cb6f8b52c246762099af9b.pack b/website/.git_origin/objects/pack/pack-8ca9f532106dd426e5cb6f8b52c246762099af9b.pack new file mode 100644 index 0000000..dd71441 Binary files /dev/null and b/website/.git_origin/objects/pack/pack-8ca9f532106dd426e5cb6f8b52c246762099af9b.pack differ diff --git a/website/.git_origin/packed-refs b/website/.git_origin/packed-refs new file mode 100644 index 0000000..00b032c --- /dev/null +++ b/website/.git_origin/packed-refs @@ -0,0 +1,5 @@ +# pack-refs with: peeled fully-peeled sorted +f7acfb1ae8d12039e3b7c0b453a60b3ef7f796bb refs/remotes/origin/master +09f1d8e3c9d3bec42ee542a197e9f4f0c8f203b7 refs/remotes/origin/patch-1 +fb9aa4f87fba6f6125e3eddea8527212e9cde6f9 refs/remotes/origin/patch-2 +c7d9a0b296511aee8e2f5fe279f7a227a8318ded refs/remotes/origin/patch-3 diff --git a/website/.git_origin/refs/heads/main b/website/.git_origin/refs/heads/main new file mode 100644 index 0000000..a4a021f --- /dev/null +++ b/website/.git_origin/refs/heads/main @@ -0,0 +1 @@ +f7acfb1ae8d12039e3b7c0b453a60b3ef7f796bb diff --git a/website/.git_origin/refs/remotes/origin/HEAD b/website/.git_origin/refs/remotes/origin/HEAD new file mode 100644 index 0000000..6efe28f --- /dev/null +++ b/website/.git_origin/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff --git a/website/.github/ISSUE_TEMPLATE.md b/website/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..89a93aa --- /dev/null +++ b/website/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,16 @@ +### Subject of the issue +Describe your issue here. + +### Expected behaviour +Tell us what should happen. + +### Actual behaviour +Tell us what happens instead. + +### I'm seeing this behaviour on + + + +- [ ] Chrome +- [ ] Firefox +- [ ] Edge diff --git a/website/.github/PULL_REQUEST_TEMPLATE.md b/website/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..bd1ebbf --- /dev/null +++ b/website/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,26 @@ +## Pull request type + + + +Please check the type of change your PR introduces: + +- [ ] Bugfix +- [ ] Feature +- [ ] Code style update (formatting, renaming) +- [ ] Other (please describe): + + +## What is the current behavior? + + +Issue Number: N/A + + +## What is the new behavior? + + + + +## Other information + + diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 0000000..dfcfd56 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,350 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ diff --git a/website/.nojekyll b/website/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/website/404.html b/website/404.html new file mode 100644 index 0000000..ac03b29 --- /dev/null +++ b/website/404.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/website/CNAME b/website/CNAME new file mode 100644 index 0000000..bc32bd6 --- /dev/null +++ b/website/CNAME @@ -0,0 +1,2 @@ +xlabs.dev + diff --git a/website/LICENSE.md b/website/LICENSE.md new file mode 100644 index 0000000..464df9c --- /dev/null +++ b/website/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 XLabs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/website/README.md b/website/README.md new file mode 100644 index 0000000..bb4d6ad --- /dev/null +++ b/website/README.md @@ -0,0 +1,11 @@ +# [XLabs.dev](https://xlabs.dev) ![Amount of GitHub Stars](https://img.shields.io/github/stars/XLabsProject/XLabsProject.github.io) + +![XLabs Banner](https://xlabs.dev/img/xlabs_social.png) + +Welcome to the repository that holds the [XLabs.dev](https://xlabs.dev) source code. + +**This repo is NOT used for support. Do NOT open an issue about your game client problems.** + + +If you want to point out a correction/sugestion, open an issue. +If you want to fix something, feel free to open a Pull Request. diff --git a/website/console_commands.html b/website/console_commands.html new file mode 100644 index 0000000..39f7eba --- /dev/null +++ b/website/console_commands.html @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + Console Commands | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+

Console Commands

+
+

Frequently asked questions related to console commands for our clients.

+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandsExampleCheat ProtectedIW4xIW6xS1xDescription
namename JohnXChanges your name.
unlockstatsunlockstatsXUnlock everything and rank up.
cg_fovcg_fov 90 (Changes FOV to 90)XManually tweak your desired FOV value.
sensitivitysensitivity 1.25XThe command is useful for fine tuning of your desired sensitivity.
introintro 0XXXEnables/Disables the IW4x intro.
cg_drawfpscg_drawfps 1 (enables) cg_drawfps 0 (disables)XDisplays a FPS counter on-screen.
cl_yawspeedcl_yawspeed 800XAdjusts the yawspeed (Turn Right/Left) sensitivity.
customtitlecustomtitle ^1Hello!XXXAdjusts your title with whatever you want.
com_maxfpscom_maxfps "85"XAdjusts the FPS (this is only useful for doing a specific FPS)
r_fullbrightr_fullbright 1XEnable/Disable fullbright.
r_specularCustomMapsr_specularCustomMaps 1XXXEnable/Disable specular custom maps.
safeArea_horizontalsafeArea_horizontal .5XXXChange the horizontal position of the safe area.
safeArea_verticalsafeArea_vertical .5XXXChange the vertical position of the safe area.
g_playerCollisiong_playerCollision 1XXFlag whether player collision is on or or off.
g_playerEjectiong_playerEjection 1XXFlag whether player ejection is on or or off.
connectconnect 127.0.0.1:27017 (IP:Port)XConnect to specified IP and port.
map mp_mapnamemap mp_afghanXChange the map.
fast_restartfast_restartXQuickly restarts the match.
map_restartmap_restartXXFully restart the map.
statusstatusXXDisplay information about the current game and players.
clientkickclientkick 1XXKicks the player by ID. Use the status command to obtain the client ID.
net_portnet_port 28965XChanges the port your server/game will run on.
camera_thirdPersoncamera_thirdPerson 0Enables third person mode.
cg_chatHeightcg_chatHeight 4XThe size of the chat that can be shown.
cg_draw2Dcg_draw2D 0Enables/disables the HUD.
ui_drawCrosshairui_drawCrosshair 0XEnables/disables the crosshair.
cg_drawGuncg_drawGun 1Enables/disables the showing of your gun.
cg_drawPingcg_drawPing 1XXEnables/Disables the ping counter.
drawLagometerdrawLagometer 0XXXEnables/Disables the lagometer.
cg_fovScalecg_fovScale 1.2XManually tweak your desired FOV value. (affects aim fov)
cg_gun_xcg_gun_xXTweak x value of your gun. (In IW6x the max value is 2)
devmap mp_mapnamedevmap mp_rust-XXChange the map and enables cheats.
sv_cheatssv_cheats 1(enables), sv_cheats 0 (disables)-Enable cheats.
developerdeveloper 1XEnables/Disables developer mode.
g_speedg_speed 300XChange game speed (requires devmap or sv_cheats 1) [Default = 190]
g_gravityg_gravity 300 (gravity is reduced by half)XChange game gravity (requires devmap or sv_cheats 1) [Default = 600]
bg_fallDamageMaxHeight / bg_fallDamageMinHeightbg_fallDamageMaxHeight 300XXChanges amount you need to fall to take damage.
noclipnoclipXEnables/Disables noclip mode.
ufoufoEnables/Disables ufo mode.
godgodEnables/Disables god.
jump_heightjump_height 1000XXSets the jump height.
timescaletimescale 2XXSets the scale of time.
r_znearr_znear 0See through stuff.
r_fogr_fog 0Enable/Disable fog.
sv_hostnamesv_hostname "^2Server ^5Name"XChange the hostname of your server/private match.
g_gametypeg_gametype gtnwXChange the gametype of your server/private match.
rconrcon g_speed 200XXUsed for managing your server in game.
scr_game_high_jumpscr_game_high_jump 0XXXDisable the Exo Suits on a dedicated server.
spawnBotspawnBot 18XSpawns bots into your game.
disconnectdisconnectXDisconnects you from the current game.
reconnectreconnectXAttempts to rejoin the last game you were in.
quitquitXCloses your game.
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/css/animate.css b/website/css/animate.css new file mode 100644 index 0000000..b2d2534 --- /dev/null +++ b/website/css/animate.css @@ -0,0 +1,3111 @@ +@charset "UTF-8"; + +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license + +Copyright (c) 2013 Daniel Eden + +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. +*/ + +.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; +} + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +@-webkit-keyframes bounce { + 0%, + 20%, + 50%, + 80%, + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-30px); + transform: translateY(-30px); + } + 60% { + -webkit-transform: translateY(-15px); + transform: translateY(-15px); + } +} + +@keyframes bounce { + 0%, + 20%, + 50%, + 80%, + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-30px); + -ms-transform: translateY(-30px); + transform: translateY(-30px); + } + 60% { + -webkit-transform: translateY(-15px); + -ms-transform: translateY(-15px); + transform: translateY(-15px); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; +} + +@-webkit-keyframes flash { + 0%, + 50%, + 100% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} + +@keyframes flash { + 0%, + 50%, + 100% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + -webkit-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes pulse { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 50% { + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 30% { + -webkit-transform: scaleX(1.25) scaleY(0.75); + transform: scaleX(1.25) scaleY(0.75); + } + 40% { + -webkit-transform: scaleX(0.75) scaleY(1.25); + transform: scaleX(0.75) scaleY(1.25); + } + 60% { + -webkit-transform: scaleX(1.15) scaleY(0.85); + transform: scaleX(1.15) scaleY(0.85); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes rubberBand { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 30% { + -webkit-transform: scaleX(1.25) scaleY(0.75); + -ms-transform: scaleX(1.25) scaleY(0.75); + transform: scaleX(1.25) scaleY(0.75); + } + 40% { + -webkit-transform: scaleX(0.75) scaleY(1.25); + -ms-transform: scaleX(0.75) scaleY(1.25); + transform: scaleX(0.75) scaleY(1.25); + } + 60% { + -webkit-transform: scaleX(1.15) scaleY(0.85); + -ms-transform: scaleX(1.15) scaleY(0.85); + transform: scaleX(1.15) scaleY(0.85); + } + 100% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + 0%, + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translateX(-10px); + transform: translateX(-10px); + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translateX(10px); + transform: translateX(10px); + } +} + +@keyframes shake { + 0%, + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translateX(-10px); + -ms-transform: translateX(-10px); + transform: translateX(-10px); + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 40% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 60% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); + } + 80% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); + } + 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate(15deg); + -ms-transform: rotate(15deg); + transform: rotate(15deg); + } + 40% { + -webkit-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 60% { + -webkit-transform: rotate(5deg); + -ms-transform: rotate(5deg); + transform: rotate(5deg); + } + 80% { + -webkit-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + transform: rotate(-5deg); + } + 100% { + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 10%, + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 40%, + 60%, + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 100% { + -webkit-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} + +@keyframes tada { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 10%, + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 40%, + 60%, + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 100% { + -webkit-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + transform: translateX(0%); + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + 100% { + -webkit-transform: translateX(0%); + transform: translateX(0%); + } +} + +@keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -ms-transform: translateX(0%); + transform: translateX(0%); + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + 100% { + -webkit-transform: translateX(0%); + -ms-transform: translateX(0%); + transform: translateX(0%); + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05); + transform: scale(1.05); + } + 70% { + -webkit-transform: scale(.9); + transform: scale(.9); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05); + -ms-transform: scale(1.05); + transform: scale(1.05); + } + 70% { + -webkit-transform: scale(.9); + -ms-transform: scale(.9); + transform: scale(.9); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + transform: translateY(30px); + } + 80% { + -webkit-transform: translateY(-10px); + transform: translateY(-10px); + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -ms-transform: translateY(30px); + transform: translateY(30px); + } + 80% { + -webkit-transform: translateY(-10px); + -ms-transform: translateY(-10px); + transform: translateY(-10px); + } + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + transform: translateX(30px); + } + 80% { + -webkit-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -ms-transform: translateX(30px); + transform: translateX(30px); + } + 80% { + -webkit-transform: translateX(-10px); + -ms-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + transform: translateX(-30px); + } + 80% { + -webkit-transform: translateX(10px); + transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -ms-transform: translateX(-30px); + transform: translateX(-30px); + } + 80% { + -webkit-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); + } + 80% { + -webkit-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -ms-transform: translateY(-30px); + transform: translateY(-30px); + } + 80% { + -webkit-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 25% { + -webkit-transform: scale(.95); + transform: scale(.95); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3); + } +} + +@keyframes bounceOut { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 25% { + -webkit-transform: scale(.95); + -ms-transform: scale(.95); + transform: scale(.95); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +@keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +@keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +@keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +@keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(20px); + transform: translateY(20px); + } +} + +@keyframes fadeOutDown { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +@keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + } +} + +@keyframes fadeOutLeft { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +@keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(20px); + transform: translateX(20px); + } +} + +@keyframes fadeOutRight { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +@keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } +} + +@keyframes fadeOutUp { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +@keyframes fadeOutUpBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + 0% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + -ms-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } +} + +@keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } +} + +@keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + opacity: 1; + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + opacity: 1; + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1; + } +} + +@keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + opacity: 1; + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + opacity: 1; + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1; + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1; + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1; + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + 0% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateIn { + 0% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + 0% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(200deg); + -ms-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes slideInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes slideInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes slideInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes slideInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideOutLeft { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +@keyframes slideOutLeft { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +@keyframes slideOutRight { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +@keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} + +@-webkit-keyframes slideInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes slideInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +@keyframes slideOutDown { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, + 60% { + -webkit-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40% { + -webkit-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + 100% { + -webkit-transform: translateY(700px); + transform: translateY(700px); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, + 60% { + -webkit-transform: rotate(80deg); + -ms-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40% { + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + 100% { + -webkit-transform: translateY(700px); + -ms-transform: translateY(700px); + transform: translateY(700px); + opacity: 0; + } +} + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} + +@keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + 0% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + 100% { + opacity: 0; + -webkit-transform: translateX(100%) rotate(120deg); + transform: translateX(100%) rotate(120deg); + } +} + +@keyframes rollOut { + 0% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + 100% { + opacity: 0; + -webkit-transform: translateX(100%) rotate(120deg); + -ms-transform: translateX(100%) rotate(120deg); + transform: translateX(100%) rotate(120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3); + } + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3); + } + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateY(-2000px); + transform: scale(.1) translateY(-2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateY(60px); + transform: scale(.475) translateY(60px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +@keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateY(-2000px); + -ms-transform: scale(.1) translateY(-2000px); + transform: scale(.1) translateY(-2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateY(60px); + -ms-transform: scale(.475) translateY(60px); + transform: scale(.475) translateY(60px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateX(-2000px); + transform: scale(.1) translateX(-2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateX(48px); + transform: scale(.475) translateX(48px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +@keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateX(-2000px); + -ms-transform: scale(.1) translateX(-2000px); + transform: scale(.1) translateX(-2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateX(48px); + -ms-transform: scale(.475) translateX(48px); + transform: scale(.475) translateX(48px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateX(2000px); + transform: scale(.1) translateX(2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateX(-48px); + transform: scale(.475) translateX(-48px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +@keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateX(2000px); + -ms-transform: scale(.1) translateX(2000px); + transform: scale(.1) translateX(2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateX(-48px); + -ms-transform: scale(.475) translateX(-48px); + transform: scale(.475) translateX(-48px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateY(2000px); + transform: scale(.1) translateY(2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateY(-60px); + transform: scale(.475) translateY(-60px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +@keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale(.1) translateY(2000px); + -ms-transform: scale(.1) translateY(2000px); + transform: scale(.1) translateY(2000px); + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 60% { + opacity: 1; + -webkit-transform: scale(.475) translateY(-60px); + -ms-transform: scale(.475) translateY(-60px); + transform: scale(.475) translateY(-60px); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + 0% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3); + } + 100% { + opacity: 0; + } +} + +@keyframes zoomOut { + 0% { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3); + } + 100% { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateY(-60px); + transform: scale(.475) translateY(-60px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateY(2000px); + transform: scale(.1) translateY(2000px); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateY(-60px); + -ms-transform: scale(.475) translateY(-60px); + transform: scale(.475) translateY(-60px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateY(2000px); + -ms-transform: scale(.1) translateY(2000px); + transform: scale(.1) translateY(2000px); + -webkit-transform-origin: center bottom; + -ms-transform-origin: center bottom; + transform-origin: center bottom; + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateX(42px); + transform: scale(.475) translateX(42px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateX(-2000px); + transform: scale(.1) translateX(-2000px); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateX(42px); + -ms-transform: scale(.475) translateX(42px); + transform: scale(.475) translateX(42px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateX(-2000px); + -ms-transform: scale(.1) translateX(-2000px); + transform: scale(.1) translateX(-2000px); + -webkit-transform-origin: left center; + -ms-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateX(-42px); + transform: scale(.475) translateX(-42px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateX(2000px); + transform: scale(.1) translateX(2000px); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateX(-42px); + -ms-transform: scale(.475) translateX(-42px); + transform: scale(.475) translateX(-42px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateX(2000px); + -ms-transform: scale(.1) translateX(2000px); + transform: scale(.1) translateX(2000px); + -webkit-transform-origin: right center; + -ms-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateY(60px); + transform: scale(.475) translateY(60px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateY(-2000px); + transform: scale(.1) translateY(-2000px); + -webkit-transform-origin: center top; + transform-origin: center top; + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale(.475) translateY(60px); + -ms-transform: scale(.475) translateY(60px); + transform: scale(.475) translateY(60px); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translateY(-2000px); + -ms-transform: scale(.1) translateY(-2000px); + transform: scale(.1) translateY(-2000px); + -webkit-transform-origin: center top; + -ms-transform-origin: center top; + transform-origin: center top; + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} \ No newline at end of file diff --git a/website/css/bootstrap.min.css b/website/css/bootstrap.min.css new file mode 100644 index 0000000..a8da074 --- /dev/null +++ b/website/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}@media print{*,::after,::before,blockquote::first-letter,blockquote::first-line,div::first-letter,div::first-line,li::first-letter,li::first-line,p::first-letter,p::first-line{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;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}.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 #ddd!important}}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}html{-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}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]{cursor:help}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}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;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}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle}[role=button]{cursor:pointer}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type=search]{-webkit-appearance:none}output{display:inline-block}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.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.1}.display-2{font-size:5.5rem;font-weight:300;line-height:1.1}.display-3{font-size:4.5rem;font-weight:300;line-height:1.1}.display-4{font-size:3.5rem;font-weight:300;line-height:1.1}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:5px}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.blockquote-footer{display:block;font-size:80%;color:#636c72}.blockquote-footer::before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:.25rem solid #eceeef;border-left:0}.blockquote-reverse .blockquote-footer::before{content:""}.blockquote-reverse .blockquote-footer::after{content:"\00A0 \2014"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#636c72}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}a>code{padding:0;color:inherit;background-color:inherit}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#292b2c;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;margin-top:0;margin-bottom:1rem;font-size:90%;color:#292b2c}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container{padding-right:15px;padding-left:15px}}@media (min-width:576px){.container{width:540px;max-width:100%}}@media (min-width:768px){.container{width:720px;max-width:100%}}@media (min-width:992px){.container{width:960px;max-width:100%}}@media (min-width:1200px){.container{width:1140px;max-width:100%}}.container-fluid{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container-fluid{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container-fluid{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container-fluid{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container-fluid{padding-right:15px;padding-left:15px}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}@media (min-width:576px){.row{margin-right:-15px;margin-left:-15px}}@media (min-width:768px){.row{margin-right:-15px;margin-left:-15px}}@media (min-width:992px){.row{margin-right:-15px;margin-left:-15px}}@media (min-width:1200px){.row{margin-right:-15px;margin-left:-15px}}.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-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-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-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-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{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:576px){.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-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-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-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-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{padding-right:15px;padding-left:15px}}@media (min-width:768px){.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-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-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-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-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{padding-right:15px;padding-left:15px}}@media (min-width:992px){.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-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-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-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-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{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.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-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-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-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-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{padding-right:15px;padding-left:15px}}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-0{right:auto}.pull-1{right:8.333333%}.pull-2{right:16.666667%}.pull-3{right:25%}.pull-4{right:33.333333%}.pull-5{right:41.666667%}.pull-6{right:50%}.pull-7{right:58.333333%}.pull-8{right:66.666667%}.pull-9{right:75%}.pull-10{right:83.333333%}.pull-11{right:91.666667%}.pull-12{right:100%}.push-0{left:auto}.push-1{left:8.333333%}.push-2{left:16.666667%}.push-3{left:25%}.push-4{left:33.333333%}.push-5{left:41.666667%}.push-6{left:50%}.push-7{left:58.333333%}.push-8{left:66.666667%}.push-9{left:75%}.push-10{left:83.333333%}.push-11{left:91.666667%}.push-12{left:100%}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-sm-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-sm-0{right:auto}.pull-sm-1{right:8.333333%}.pull-sm-2{right:16.666667%}.pull-sm-3{right:25%}.pull-sm-4{right:33.333333%}.pull-sm-5{right:41.666667%}.pull-sm-6{right:50%}.pull-sm-7{right:58.333333%}.pull-sm-8{right:66.666667%}.pull-sm-9{right:75%}.pull-sm-10{right:83.333333%}.pull-sm-11{right:91.666667%}.pull-sm-12{right:100%}.push-sm-0{left:auto}.push-sm-1{left:8.333333%}.push-sm-2{left:16.666667%}.push-sm-3{left:25%}.push-sm-4{left:33.333333%}.push-sm-5{left:41.666667%}.push-sm-6{left:50%}.push-sm-7{left:58.333333%}.push-sm-8{left:66.666667%}.push-sm-9{left:75%}.push-sm-10{left:83.333333%}.push-sm-11{left:91.666667%}.push-sm-12{left:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-md-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-md-0{right:auto}.pull-md-1{right:8.333333%}.pull-md-2{right:16.666667%}.pull-md-3{right:25%}.pull-md-4{right:33.333333%}.pull-md-5{right:41.666667%}.pull-md-6{right:50%}.pull-md-7{right:58.333333%}.pull-md-8{right:66.666667%}.pull-md-9{right:75%}.pull-md-10{right:83.333333%}.pull-md-11{right:91.666667%}.pull-md-12{right:100%}.push-md-0{left:auto}.push-md-1{left:8.333333%}.push-md-2{left:16.666667%}.push-md-3{left:25%}.push-md-4{left:33.333333%}.push-md-5{left:41.666667%}.push-md-6{left:50%}.push-md-7{left:58.333333%}.push-md-8{left:66.666667%}.push-md-9{left:75%}.push-md-10{left:83.333333%}.push-md-11{left:91.666667%}.push-md-12{left:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-lg-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-lg-0{right:auto}.pull-lg-1{right:8.333333%}.pull-lg-2{right:16.666667%}.pull-lg-3{right:25%}.pull-lg-4{right:33.333333%}.pull-lg-5{right:41.666667%}.pull-lg-6{right:50%}.pull-lg-7{right:58.333333%}.pull-lg-8{right:66.666667%}.pull-lg-9{right:75%}.pull-lg-10{right:83.333333%}.pull-lg-11{right:91.666667%}.pull-lg-12{right:100%}.push-lg-0{left:auto}.push-lg-1{left:8.333333%}.push-lg-2{left:16.666667%}.push-lg-3{left:25%}.push-lg-4{left:33.333333%}.push-lg-5{left:41.666667%}.push-lg-6{left:50%}.push-lg-7{left:58.333333%}.push-lg-8{left:66.666667%}.push-lg-9{left:75%}.push-lg-10{left:83.333333%}.push-lg-11{left:91.666667%}.push-lg-12{left:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xl-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-xl-0{right:auto}.pull-xl-1{right:8.333333%}.pull-xl-2{right:16.666667%}.pull-xl-3{right:25%}.pull-xl-4{right:33.333333%}.pull-xl-5{right:41.666667%}.pull-xl-6{right:50%}.pull-xl-7{right:58.333333%}.pull-xl-8{right:66.666667%}.pull-xl-9{right:75%}.pull-xl-10{right:83.333333%}.pull-xl-11{right:91.666667%}.pull-xl-12{right:100%}.push-xl-0{left:auto}.push-xl-1{left:8.333333%}.push-xl-2{left:16.666667%}.push-xl-3{left:25%}.push-xl-4{left:33.333333%}.push-xl-5{left:41.666667%}.push-xl-6{left:50%}.push-xl-7{left:58.333333%}.push-xl-8{left:66.666667%}.push-xl-9{left:75%}.push-xl-10{left:83.333333%}.push-xl-11{left:91.666667%}.push-xl-12{left:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody{border-top:2px solid #eceeef}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #eceeef}.table-bordered td,.table-bordered th{border:1px solid #eceeef}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.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-success,.table-success>td,.table-success>th{background-color:#dff0d8}.table-hover .table-success:hover{background-color:#d0e9c6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>td,.table-info>th{background-color:#d9edf7}.table-hover .table-info:hover{background-color:#c4e3f3}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>td,.table-warning>th{background-color:#fcf8e3}.table-hover .table-warning:hover{background-color:#faf2cc}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>td,.table-danger>th{background-color:#f2dede}.table-hover .table-danger:hover{background-color:#ebcccc}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.thead-inverse th{color:#fff;background-color:#292b2c}.thead-default th{color:#464a4c;background-color:#eceeef}.table-inverse{color:#fff;background-color:#292b2c}.table-inverse td,.table-inverse th,.table-inverse thead th{border-color:#fff}.table-inverse.table-bordered{border:0}.table-responsive{display:block;width:100%;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive.table-bordered{border:0}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:#464a4c;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#464a4c;background-color:#fff;border-color:#5cb3fd;outline:0}.form-control::-webkit-input-placeholder{color:#636c72;opacity:1}.form-control::-moz-placeholder{color:#636c72;opacity:1}.form-control:-ms-input-placeholder{color:#636c72;opacity:1}.form-control::placeholder{color:#636c72;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eceeef;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#464a4c;background-color:#fff}.form-control-file,.form-control-range{display:block}.col-form-label{padding-top:calc(.5rem - 1px * 2);padding-bottom:calc(.5rem - 1px * 2);margin-bottom:0}.col-form-label-lg{padding-top:calc(.75rem - 1px * 2);padding-bottom:calc(.75rem - 1px * 2);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem - 1px * 2);padding-bottom:calc(.25rem - 1px * 2);font-size:.875rem}.col-form-legend{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;font-size:1rem}.form-control-static{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;line-height:1.25;border:solid transparent;border-width:1px 0}.form-control-static.form-control-lg,.form-control-static.form-control-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-sm>.input-group-btn>select.btn:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>select.input-group-addon:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:1.8125rem}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.input-group-lg>.input-group-btn>select.btn:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>select.input-group-addon:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:3.166667rem}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-check{position:relative;display:block;margin-bottom:.5rem}.form-check.disabled .form-check-label{color:#636c72;cursor:not-allowed}.form-check-label{padding-left:1.25rem;margin-bottom:0;cursor:pointer}.form-check-input{position:absolute;margin-top:.25rem;margin-left:-1.25rem}.form-check-input:only-child{position:static}.form-check-inline{display:inline-block}.form-check-inline .form-check-label{vertical-align:middle}.form-check-inline+.form-check-inline{margin-left:.75rem}.form-control-feedback{margin-top:.25rem}.form-control-danger,.form-control-success,.form-control-warning{padding-right:2.25rem;background-repeat:no-repeat;background-position:center right .5625rem;-webkit-background-size:1.125rem 1.125rem;background-size:1.125rem 1.125rem}.has-success .col-form-label,.has-success .custom-control,.has-success .form-check-label,.has-success .form-control-feedback,.has-success .form-control-label{color:#5cb85c}.has-success .form-control{border-color:#5cb85c}.has-success .input-group-addon{color:#5cb85c;border-color:#5cb85c;background-color:#eaf6ea}.has-success .form-control-success{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='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'/%3E%3C/svg%3E")}.has-warning .col-form-label,.has-warning .custom-control,.has-warning .form-check-label,.has-warning .form-control-feedback,.has-warning .form-control-label{color:#f0ad4e}.has-warning .form-control{border-color:#f0ad4e}.has-warning .input-group-addon{color:#f0ad4e;border-color:#f0ad4e;background-color:#fff}.has-warning .form-control-warning{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E")}.has-danger .col-form-label,.has-danger .custom-control,.has-danger .form-check-label,.has-danger .form-control-feedback,.has-danger .form-control-label{color:#d9534f}.has-danger .form-control{border-color:#d9534f}.has-danger .input-group-addon{color:#d9534f;border-color:#d9534f;background-color:#fdf7f7}.has-danger .form-control-danger{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E")}.form-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-control-label{margin-bottom:0;vertical-align:middle}.form-inline .form-check{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:auto;margin-top:0;margin-bottom:0}.form-inline .form-check-label{padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:0}.form-inline .custom-control-indicator{position:static;display:inline-block;margin-right:.25rem;vertical-align:text-bottom}.form-inline .has-feedback .form-control-feedback{top:0}}.btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.btn.disabled,.btn:disabled{cursor:not-allowed;opacity:.65}.btn.active,.btn:active{background-image:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}.btn-secondary:hover{color:#292b2c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#fff;border-color:#ccc}.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#292b2c;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#5bc0de;border-color:#5bc0de}.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#5cb85c;border-color:#5cb85c}.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#419641}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#eb9316}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#d9534f;border-color:#d9534f}.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#c12e2a}.btn-outline-primary{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.btn-outline-primary:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0275d8;background-color:transparent}.btn-outline-primary.active,.btn-outline-primary:active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#ccc;background-color:transparent}.btn-outline-secondary.active,.btn-outline-secondary:active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-info{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.btn-outline-info:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.btn-outline-info.active,.btn-outline-info:active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-success{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.btn-outline-success:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#5cb85c;background-color:transparent}.btn-outline-success.active,.btn-outline-success:active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-outline-warning{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.btn-outline-warning:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f0ad4e;background-color:transparent}.btn-outline-warning.active,.btn-outline-warning:active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-outline-danger{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.btn-outline-danger:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#d9534f;background-color:transparent}.btn-outline-danger.active,.btn-outline-danger:active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-link{font-weight:400;color:#0275d8;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link:disabled{background-color:transparent}.btn-link,.btn-link:active,.btn-link:focus{border-color:transparent}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.btn-link:disabled{color:#636c72}.btn-link:disabled:focus,.btn-link:disabled:hover{text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;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{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-toggle:focus{outline:0}.dropup .dropdown-toggle::after{border-top:0;border-bottom:.3em solid}.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:#292b2c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-divider{height:1px;margin:.5rem 0;overflow:hidden;background-color:#eceeef}.dropdown-item{display:block;width:100%;padding:3px 1.5rem;clear:both;font-weight:400;color:#292b2c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1d1e1f;text-decoration:none;background-color:#f7f7f9}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0275d8}.dropdown-item.disabled,.dropdown-item:disabled{color:#636c72;cursor:not-allowed;background-color:transparent}.show>.dropdown-menu{display:block}.show>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#636c72;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.dropup .dropdown-menu{top:auto;bottom:100%;margin-bottom:.125rem}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:2}.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:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn+.dropdown-toggle-split::after{margin-left: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:1.125rem;padding-left:1.125rem}.btn-group-vertical{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.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:-webkit-flex;display:-ms-flexbox;display:flex;width:100%}.input-group .form-control{position:relative;z-index:2;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group .form-control:active,.input-group .form-control:focus,.input-group .form-control:hover{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.25;color:#464a4c;text-align:center;background-color:#eceeef;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.input-group-addon.form-control-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-addon.form-control-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:not(:last-child),.input-group-addon:not(:last-child),.input-group-btn:not(:first-child)>.btn-group:not(:last-child)>.btn,.input-group-btn:not(:first-child)>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group>.btn,.input-group-btn:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:not(:last-child){border-right:0}.input-group .form-control:not(:first-child),.input-group-addon:not(:first-child),.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group>.btn,.input-group-btn:not(:first-child)>.dropdown-toggle,.input-group-btn:not(:last-child)>.btn-group:not(:first-child)>.btn,.input-group-btn:not(:last-child)>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.form-control+.input-group-addon:not(:first-child){border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:3}.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group{margin-right:-1px}.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group{z-index:2;margin-left:-1px}.input-group-btn:not(:first-child)>.btn-group:active,.input-group-btn:not(:first-child)>.btn-group:focus,.input-group-btn:not(:first-child)>.btn-group:hover,.input-group-btn:not(:first-child)>.btn:active,.input-group-btn:not(:first-child)>.btn:focus,.input-group-btn:not(:first-child)>.btn:hover{z-index:3}.custom-control{position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;min-height:1.5rem;padding-left:1.5rem;margin-right:1rem;cursor:pointer}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-indicator{color:#fff;background-color:#0275d8}.custom-control-input:focus~.custom-control-indicator{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #0275d8;box-shadow:0 0 0 1px #fff,0 0 0 3px #0275d8}.custom-control-input:active~.custom-control-indicator{color:#fff;background-color:#8fcafe}.custom-control-input:disabled~.custom-control-indicator{cursor:not-allowed;background-color:#eceeef}.custom-control-input:disabled~.custom-control-description{color:#636c72;cursor:not-allowed}.custom-control-indicator{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#ddd;background-repeat:no-repeat;background-position:center center;-webkit-background-size:50% 50%;background-size:50% 50%}.custom-checkbox .custom-control-indicator{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-indicator{background-color:#0275d8;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-radio .custom-control-indicator{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-controls-stacked{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.custom-controls-stacked .custom-control{margin-bottom:.25rem}.custom-controls-stacked .custom-control+.custom-control{margin-left:0}.custom-select{display:inline-block;max-width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.25;color:#464a4c;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-moz-appearance:none;-webkit-appearance:none}.custom-select:focus{border-color:#5cb3fd;outline:0}.custom-select:focus::-ms-value{color:#464a4c;background-color:#fff}.custom-select:disabled{color:#636c72;cursor:not-allowed;background-color:#eceeef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-file{position:relative;display:inline-block;max-width:100%;height:2.5rem;margin-bottom:0;cursor:pointer}.custom-file-input{min-width:14rem;max-width:100%;height:2.5rem;margin:0;filter:alpha(opacity=0);opacity:0}.custom-file-control{position:absolute;top:0;right:0;left:0;z-index:5;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#464a4c;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.custom-file-control:lang(en)::after{content:"Choose file..."}.custom-file-control::before{position:absolute;top:-1px;right:-1px;bottom:-1px;z-index:6;display:block;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#464a4c;background-color:#eceeef;border:1px solid rgba(0,0,0,.15);border-radius:0 .25rem .25rem 0}.custom-file-control:lang(en)::before{content:"Browse"}.nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5em 1em}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#636c72;cursor:not-allowed}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-right-radius:.25rem;border-top-left-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#eceeef #eceeef #ddd}.nav-tabs .nav-link.disabled{color:#636c72;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#464a4c;background-color:#fff;border-color:#ddd #ddd #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-item.show .nav-link,.nav-pills .nav-link.active{color:#fff;cursor:default;background-color:#0275d8}.nav-fill .nav-item{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-webkit-box-flex:1;-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 1rem}.navbar-brand{display:inline-block;padding-top:.25rem;padding-bottom:.25rem;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:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-text{display:inline-block;padding-top:.425rem;padding-bottom:.425rem}.navbar-toggler{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding:.25rem .75rem;font-size:1.25rem;line-height:1;background:0 0;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:"";background:no-repeat center center;-webkit-background-size:100% 100%;background-size:100% 100%}.navbar-toggler-left{position:absolute;left:1rem}.navbar-toggler-right{position:absolute;right:1rem}@media (max-width:575px){.navbar-toggleable .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable>.container{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-toggleable{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable .navbar-toggler{display:none}}@media (max-width:767px){.navbar-toggleable-sm .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-sm>.container{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-toggleable-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-sm>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-sm .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-sm .navbar-toggler{display:none}}@media (max-width:991px){.navbar-toggleable-md .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-md>.container{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-toggleable-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-md>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-md .navbar-toggler{display:none}}@media (max-width:1199px){.navbar-toggleable-lg .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-lg>.container{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-toggleable-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-lg>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-lg .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-lg .navbar-toggler{display:none}}.navbar-toggleable-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-xl .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-xl>.container{padding-right:0;padding-left:0}.navbar-toggleable-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-xl>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-xl .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-xl .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-toggler{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover,.navbar-light .navbar-toggler:focus,.navbar-light .navbar-toggler: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.open,.navbar-light .navbar-nav .open>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-toggler{color:#fff}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-toggler:focus,.navbar-inverse .navbar-toggler:hover{color:#fff}.navbar-inverse .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-inverse .navbar-nav .nav-link:focus,.navbar-inverse .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-inverse .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-inverse .navbar-nav .active>.nav-link,.navbar-inverse .navbar-nav .nav-link.active,.navbar-inverse .navbar-nav .nav-link.open,.navbar-inverse .navbar-nav .open>.nav-link{color:#fff}.navbar-inverse .navbar-toggler{border-color:rgba(255,255,255,.1)}.navbar-inverse .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.navbar-inverse .navbar-text{color:rgba(255,255,255,.5)}.card{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card-block{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;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>.list-group:first-child .list-group-item:first-child{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#f7f7f9;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:#f7f7f9;border-top:1px solid rgba(0,0,0,.125)}.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-primary{background-color:#0275d8;border-color:#0275d8}.card-primary .card-footer,.card-primary .card-header{background-color:transparent}.card-success{background-color:#5cb85c;border-color:#5cb85c}.card-success .card-footer,.card-success .card-header{background-color:transparent}.card-info{background-color:#5bc0de;border-color:#5bc0de}.card-info .card-footer,.card-info .card-header{background-color:transparent}.card-warning{background-color:#f0ad4e;border-color:#f0ad4e}.card-warning .card-footer,.card-warning .card-header{background-color:transparent}.card-danger{background-color:#d9534f;border-color:#d9534f}.card-danger .card-footer,.card-danger .card-header{background-color:transparent}.card-outline-primary{background-color:transparent;border-color:#0275d8}.card-outline-secondary{background-color:transparent;border-color:#ccc}.card-outline-info{background-color:transparent;border-color:#5bc0de}.card-outline-success{background-color:transparent;border-color:#5cb85c}.card-outline-warning{background-color:transparent;border-color:#f0ad4e}.card-outline-danger{background-color:transparent;border-color:#d9534f}.card-inverse{color:rgba(255,255,255,.65)}.card-inverse .card-footer,.card-inverse .card-header{background-color:transparent;border-color:rgba(255,255,255,.2)}.card-inverse .card-blockquote,.card-inverse .card-footer,.card-inverse .card-header,.card-inverse .card-title{color:#fff}.card-inverse .card-blockquote .blockquote-footer,.card-inverse .card-link,.card-inverse .card-subtitle,.card-inverse .card-text{color:rgba(255,255,255,.65)}.card-inverse .card-link:focus,.card-inverse .card-link:hover{color:#fff}.card-blockquote{padding:0;margin-bottom:0;border-left:0}.card-img{border-radius:calc(.25rem - 1px)}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img-top{border-top-right-radius:calc(.25rem - 1px);border-top-left-radius:calc(.25rem - 1px)}.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}@media (min-width:576px){.card-deck{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-deck .card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.card-deck .card:not(:first-child){margin-left:15px}.card-deck .card:not(:last-child){margin-right:15px}}@media (min-width:576px){.card-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group .card{-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%}.card-group .card+.card{margin-left:0;border-left:0}.card-group .card:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.card-group .card:first-child .card-img-top{border-top-right-radius:0}.card-group .card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group .card:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.card-group .card:last-child .card-img-top{border-top-left-radius:0}.card-group .card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group .card:not(:first-child):not(:last-child){border-radius:0}.card-group .card:not(:first-child):not(:last-child) .card-img-bottom,.card-group .card:not(:first-child):not(:last-child) .card-img-top{border-radius:0}}@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}.card-columns .card{display:inline-block;width:100%;margin-bottom:.75rem}}.breadcrumb{padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eceeef;border-radius:.25rem}.breadcrumb::after{display:block;content:"";clear:both}.breadcrumb-item{float:left}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#636c72;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#636c72}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-item:first-child .page-link{margin-left:0;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link{z-index:2;color:#fff;background-color:#0275d8;border-color:#0275d8}.page-item.disabled .page-link{color:#636c72;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#ddd}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#0275d8;background-color:#fff;border:1px solid #ddd}.page-link:focus,.page-link:hover{color:#014c8c;text-decoration:none;background-color:#eceeef;border-color:#ddd}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.3rem;border-top-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.3rem;border-top-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-default{background-color:#636c72}.badge-default[href]:focus,.badge-default[href]:hover{background-color:#4b5257}.badge-primary{background-color:#0275d8}.badge-primary[href]:focus,.badge-primary[href]:hover{background-color:#025aa5}.badge-success{background-color:#5cb85c}.badge-success[href]:focus,.badge-success[href]:hover{background-color:#449d44}.badge-info{background-color:#5bc0de}.badge-info[href]:focus,.badge-info[href]:hover{background-color:#31b0d5}.badge-warning{background-color:#f0ad4e}.badge-warning[href]:focus,.badge-warning[href]:hover{background-color:#ec971f}.badge-danger{background-color:#d9534f}.badge-danger[href]:focus,.badge-danger[href]:hover{background-color:#c9302c}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eceeef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-hr{border-top-color:#d0d5d8}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible .close{position:relative;top:-.75rem;right:-1.25rem;padding:.75rem 1.25rem;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d0e9c6;color:#3c763d}.alert-success hr{border-top-color:#c1e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bcdff1;color:#31708f}.alert-info hr{border-top-color:#a6d5ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faf2cc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7ecb5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebcccc;color:#a94442}.alert-danger hr{border-top-color:#e4b9b9}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-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:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;font-size:.75rem;line-height:1rem;text-align:center;background-color:#eceeef;border-radius:.25rem}.progress-bar{height:1rem;color:#fff;background-color:#0275d8}.progress-bar-striped{background-image:-webkit-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-image:-o-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-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);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;-o-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%}.list-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#464a4c;text-align:inherit}.list-group-item-action .list-group-item-heading{color:#292b2c}.list-group-item-action:focus,.list-group-item-action:hover{color:#464a4c;text-decoration:none;background-color:#f7f7f9}.list-group-item-action:active{color:#292b2c;background-color:#eceeef}.list-group-item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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-right-radius:.25rem;border-top-left-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#636c72;cursor:not-allowed;background-color:#fff}.list-group-item.disabled .list-group-item-heading,.list-group-item:disabled .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item:disabled .list-group-item-text{color:#636c72}.list-group-item.active{z-index:2;color:#fff;background-color:#0275d8;border-color:#0275d8}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text{color:#daeeff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active{color:#fff;background-color:#a94442;border-color:#a94442}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.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.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.75}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:15px;border-bottom:1px solid #eceeef}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:15px}.modal-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:15px;border-top:1px solid #eceeef}.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:30px auto}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip.bs-tether-element-attached-bottom,.tooltip.tooltip-top{padding:5px 0;margin-top:-3px}.tooltip.bs-tether-element-attached-bottom .tooltip-inner::before,.tooltip.tooltip-top .tooltip-inner::before{bottom:0;left:50%;margin-left:-5px;content:"";border-width:5px 5px 0;border-top-color:#000}.tooltip.bs-tether-element-attached-left,.tooltip.tooltip-right{padding:0 5px;margin-left:3px}.tooltip.bs-tether-element-attached-left .tooltip-inner::before,.tooltip.tooltip-right .tooltip-inner::before{top:50%;left:0;margin-top:-5px;content:"";border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.bs-tether-element-attached-top,.tooltip.tooltip-bottom{padding:5px 0;margin-top:3px}.tooltip.bs-tether-element-attached-top .tooltip-inner::before,.tooltip.tooltip-bottom .tooltip-inner::before{top:0;left:50%;margin-left:-5px;content:"";border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bs-tether-element-attached-right,.tooltip.tooltip-left{padding:0 5px;margin-left:-3px}.tooltip.bs-tether-element-attached-right .tooltip-inner::before,.tooltip.tooltip-left .tooltip-inner::before{top:50%;right:0;margin-top:-5px;content:"";border-width:5px 0 5px 5px;border-left-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.tooltip-inner::before{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;padding:1px;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover.bs-tether-element-attached-bottom,.popover.popover-top{margin-top:-10px}.popover.bs-tether-element-attached-bottom::after,.popover.bs-tether-element-attached-bottom::before,.popover.popover-top::after,.popover.popover-top::before{left:50%;border-bottom-width:0}.popover.bs-tether-element-attached-bottom::before,.popover.popover-top::before{bottom:-11px;margin-left:-11px;border-top-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-bottom::after,.popover.popover-top::after{bottom:-10px;margin-left:-10px;border-top-color:#fff}.popover.bs-tether-element-attached-left,.popover.popover-right{margin-left:10px}.popover.bs-tether-element-attached-left::after,.popover.bs-tether-element-attached-left::before,.popover.popover-right::after,.popover.popover-right::before{top:50%;border-left-width:0}.popover.bs-tether-element-attached-left::before,.popover.popover-right::before{left:-11px;margin-top:-11px;border-right-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-left::after,.popover.popover-right::after{left:-10px;margin-top:-10px;border-right-color:#fff}.popover.bs-tether-element-attached-top,.popover.popover-bottom{margin-top:10px}.popover.bs-tether-element-attached-top::after,.popover.bs-tether-element-attached-top::before,.popover.popover-bottom::after,.popover.popover-bottom::before{left:50%;border-top-width:0}.popover.bs-tether-element-attached-top::before,.popover.popover-bottom::before{top:-11px;margin-left:-11px;border-bottom-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-top::after,.popover.popover-bottom::after{top:-10px;margin-left:-10px;border-bottom-color:#f7f7f7}.popover.bs-tether-element-attached-top .popover-title::before,.popover.popover-bottom .popover-title::before{position:absolute;top:0;left:50%;display:block;width:20px;margin-left:-10px;content:"";border-bottom:1px solid #f7f7f7}.popover.bs-tether-element-attached-right,.popover.popover-left{margin-left:-10px}.popover.bs-tether-element-attached-right::after,.popover.bs-tether-element-attached-right::before,.popover.popover-left::after,.popover.popover-left::before{top:50%;border-right-width:0}.popover.bs-tether-element-attached-right::before,.popover.popover-left::before{right:-11px;margin-top:-11px;border-left-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-right::after,.popover.popover-left::after{right:-10px;margin-top:-10px;border-left-color:#fff}.popover-title{padding:8px 14px;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-right-radius:calc(.3rem - 1px);border-top-left-radius:calc(.3rem - 1px)}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover::after,.popover::before{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover::before{content:"";border-width:11px}.popover::after{content:"";border-width:10px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;width:100%}@media (-webkit-transform-3d){.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}}@supports ((-webkit-transform:translate3d(0,0,0)) or (transform:translate3d(0,0,0))){.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}@media (-webkit-transform-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@supports ((-webkit-transform:translate3d(0,0,0)) or (transform:translate3d(0,0,0))){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.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:transparent no-repeat center center;-webkit-background-size:100% 100%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;max-width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.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-faded{background-color:#f7f7f7}.bg-primary{background-color:#0275d8!important}a.bg-primary:focus,a.bg-primary:hover{background-color:#025aa5!important}.bg-success{background-color:#5cb85c!important}a.bg-success:focus,a.bg-success:hover{background-color:#449d44!important}.bg-info{background-color:#5bc0de!important}a.bg-info:focus,a.bg-info:hover{background-color:#31b0d5!important}.bg-warning{background-color:#f0ad4e!important}a.bg-warning:focus,a.bg-warning:hover{background-color:#ec971f!important}.bg-danger{background-color:#d9534f!important}a.bg-danger:focus,a.bg-danger:hover{background-color:#c9302c!important}.bg-inverse{background-color:#292b2c!important}a.bg-inverse:focus,a.bg-inverse:hover{background-color:#101112!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}.rounded{border-radius:.25rem}.rounded-top{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.rounded-right{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.rounded-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-left{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-circle{border-radius:50%}.rounded-0{border-radius:0}.clearfix::after{display:block;content:"";clear:both}.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-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!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-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!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-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!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-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!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-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-sm-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-sm-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-sm-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-sm-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-md-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-md-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-md-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-md-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-lg-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-lg-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-lg-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-lg-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-xl-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-xl-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-xl-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-xl-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;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}}.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}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1030}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0 0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-right:0!important;margin-left:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem .25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem .5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:1rem 1rem!important}.mt-3{margin-top:1rem!important}.mr-3{margin-right:1rem!important}.mb-3{margin-bottom:1rem!important}.ml-3{margin-left:1rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-4{margin:1.5rem 1.5rem!important}.mt-4{margin-top:1.5rem!important}.mr-4{margin-right:1.5rem!important}.mb-4{margin-bottom:1.5rem!important}.ml-4{margin-left:1.5rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-5{margin:3rem 3rem!important}.mt-5{margin-top:3rem!important}.mr-5{margin-right:3rem!important}.mb-5{margin-bottom:3rem!important}.ml-5{margin-left:3rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0 0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-right:0!important;padding-left:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem .25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem .5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:1rem 1rem!important}.pt-3{padding-top:1rem!important}.pr-3{padding-right:1rem!important}.pb-3{padding-bottom:1rem!important}.pl-3{padding-left:1rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-4{padding:1.5rem 1.5rem!important}.pt-4{padding-top:1.5rem!important}.pr-4{padding-right:1.5rem!important}.pb-4{padding-bottom:1.5rem!important}.pl-4{padding-left:1.5rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-5{padding:3rem 3rem!important}.pt-5{padding-top:3rem!important}.pr-5{padding-right:3rem!important}.pb-5{padding-bottom:3rem!important}.pl-5{padding-left:3rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}@media (min-width:576px){.m-sm-0{margin:0 0!important}.mt-sm-0{margin-top:0!important}.mr-sm-0{margin-right:0!important}.mb-sm-0{margin-bottom:0!important}.ml-sm-0{margin-left:0!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.m-sm-1{margin:.25rem .25rem!important}.mt-sm-1{margin-top:.25rem!important}.mr-sm-1{margin-right:.25rem!important}.mb-sm-1{margin-bottom:.25rem!important}.ml-sm-1{margin-left:.25rem!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-sm-2{margin:.5rem .5rem!important}.mt-sm-2{margin-top:.5rem!important}.mr-sm-2{margin-right:.5rem!important}.mb-sm-2{margin-bottom:.5rem!important}.ml-sm-2{margin-left:.5rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-sm-3{margin:1rem 1rem!important}.mt-sm-3{margin-top:1rem!important}.mr-sm-3{margin-right:1rem!important}.mb-sm-3{margin-bottom:1rem!important}.ml-sm-3{margin-left:1rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-sm-4{margin:1.5rem 1.5rem!important}.mt-sm-4{margin-top:1.5rem!important}.mr-sm-4{margin-right:1.5rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.ml-sm-4{margin-left:1.5rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-sm-5{margin:3rem 3rem!important}.mt-sm-5{margin-top:3rem!important}.mr-sm-5{margin-right:3rem!important}.mb-sm-5{margin-bottom:3rem!important}.ml-sm-5{margin-left:3rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-sm-0{padding:0 0!important}.pt-sm-0{padding-top:0!important}.pr-sm-0{padding-right:0!important}.pb-sm-0{padding-bottom:0!important}.pl-sm-0{padding-left:0!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.p-sm-1{padding:.25rem .25rem!important}.pt-sm-1{padding-top:.25rem!important}.pr-sm-1{padding-right:.25rem!important}.pb-sm-1{padding-bottom:.25rem!important}.pl-sm-1{padding-left:.25rem!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-sm-2{padding:.5rem .5rem!important}.pt-sm-2{padding-top:.5rem!important}.pr-sm-2{padding-right:.5rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pl-sm-2{padding-left:.5rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-sm-3{padding:1rem 1rem!important}.pt-sm-3{padding-top:1rem!important}.pr-sm-3{padding-right:1rem!important}.pb-sm-3{padding-bottom:1rem!important}.pl-sm-3{padding-left:1rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-sm-4{padding:1.5rem 1.5rem!important}.pt-sm-4{padding-top:1.5rem!important}.pr-sm-4{padding-right:1.5rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pl-sm-4{padding-left:1.5rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-sm-5{padding:3rem 3rem!important}.pt-sm-5{padding-top:3rem!important}.pr-sm-5{padding-right:3rem!important}.pb-sm-5{padding-bottom:3rem!important}.pl-sm-5{padding-left:3rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto{margin-top:auto!important}.mr-sm-auto{margin-right:auto!important}.mb-sm-auto{margin-bottom:auto!important}.ml-sm-auto{margin-left:auto!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:768px){.m-md-0{margin:0 0!important}.mt-md-0{margin-top:0!important}.mr-md-0{margin-right:0!important}.mb-md-0{margin-bottom:0!important}.ml-md-0{margin-left:0!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.m-md-1{margin:.25rem .25rem!important}.mt-md-1{margin-top:.25rem!important}.mr-md-1{margin-right:.25rem!important}.mb-md-1{margin-bottom:.25rem!important}.ml-md-1{margin-left:.25rem!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-md-2{margin:.5rem .5rem!important}.mt-md-2{margin-top:.5rem!important}.mr-md-2{margin-right:.5rem!important}.mb-md-2{margin-bottom:.5rem!important}.ml-md-2{margin-left:.5rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-md-3{margin:1rem 1rem!important}.mt-md-3{margin-top:1rem!important}.mr-md-3{margin-right:1rem!important}.mb-md-3{margin-bottom:1rem!important}.ml-md-3{margin-left:1rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-md-4{margin:1.5rem 1.5rem!important}.mt-md-4{margin-top:1.5rem!important}.mr-md-4{margin-right:1.5rem!important}.mb-md-4{margin-bottom:1.5rem!important}.ml-md-4{margin-left:1.5rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-md-5{margin:3rem 3rem!important}.mt-md-5{margin-top:3rem!important}.mr-md-5{margin-right:3rem!important}.mb-md-5{margin-bottom:3rem!important}.ml-md-5{margin-left:3rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-md-0{padding:0 0!important}.pt-md-0{padding-top:0!important}.pr-md-0{padding-right:0!important}.pb-md-0{padding-bottom:0!important}.pl-md-0{padding-left:0!important}.px-md-0{padding-right:0!important;padding-left:0!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.p-md-1{padding:.25rem .25rem!important}.pt-md-1{padding-top:.25rem!important}.pr-md-1{padding-right:.25rem!important}.pb-md-1{padding-bottom:.25rem!important}.pl-md-1{padding-left:.25rem!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-md-2{padding:.5rem .5rem!important}.pt-md-2{padding-top:.5rem!important}.pr-md-2{padding-right:.5rem!important}.pb-md-2{padding-bottom:.5rem!important}.pl-md-2{padding-left:.5rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-md-3{padding:1rem 1rem!important}.pt-md-3{padding-top:1rem!important}.pr-md-3{padding-right:1rem!important}.pb-md-3{padding-bottom:1rem!important}.pl-md-3{padding-left:1rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-md-4{padding:1.5rem 1.5rem!important}.pt-md-4{padding-top:1.5rem!important}.pr-md-4{padding-right:1.5rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pl-md-4{padding-left:1.5rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-md-5{padding:3rem 3rem!important}.pt-md-5{padding-top:3rem!important}.pr-md-5{padding-right:3rem!important}.pb-md-5{padding-bottom:3rem!important}.pl-md-5{padding-left:3rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto{margin-top:auto!important}.mr-md-auto{margin-right:auto!important}.mb-md-auto{margin-bottom:auto!important}.ml-md-auto{margin-left:auto!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:992px){.m-lg-0{margin:0 0!important}.mt-lg-0{margin-top:0!important}.mr-lg-0{margin-right:0!important}.mb-lg-0{margin-bottom:0!important}.ml-lg-0{margin-left:0!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.m-lg-1{margin:.25rem .25rem!important}.mt-lg-1{margin-top:.25rem!important}.mr-lg-1{margin-right:.25rem!important}.mb-lg-1{margin-bottom:.25rem!important}.ml-lg-1{margin-left:.25rem!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-lg-2{margin:.5rem .5rem!important}.mt-lg-2{margin-top:.5rem!important}.mr-lg-2{margin-right:.5rem!important}.mb-lg-2{margin-bottom:.5rem!important}.ml-lg-2{margin-left:.5rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-lg-3{margin:1rem 1rem!important}.mt-lg-3{margin-top:1rem!important}.mr-lg-3{margin-right:1rem!important}.mb-lg-3{margin-bottom:1rem!important}.ml-lg-3{margin-left:1rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-lg-4{margin:1.5rem 1.5rem!important}.mt-lg-4{margin-top:1.5rem!important}.mr-lg-4{margin-right:1.5rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.ml-lg-4{margin-left:1.5rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-lg-5{margin:3rem 3rem!important}.mt-lg-5{margin-top:3rem!important}.mr-lg-5{margin-right:3rem!important}.mb-lg-5{margin-bottom:3rem!important}.ml-lg-5{margin-left:3rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-lg-0{padding:0 0!important}.pt-lg-0{padding-top:0!important}.pr-lg-0{padding-right:0!important}.pb-lg-0{padding-bottom:0!important}.pl-lg-0{padding-left:0!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.p-lg-1{padding:.25rem .25rem!important}.pt-lg-1{padding-top:.25rem!important}.pr-lg-1{padding-right:.25rem!important}.pb-lg-1{padding-bottom:.25rem!important}.pl-lg-1{padding-left:.25rem!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-lg-2{padding:.5rem .5rem!important}.pt-lg-2{padding-top:.5rem!important}.pr-lg-2{padding-right:.5rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pl-lg-2{padding-left:.5rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-lg-3{padding:1rem 1rem!important}.pt-lg-3{padding-top:1rem!important}.pr-lg-3{padding-right:1rem!important}.pb-lg-3{padding-bottom:1rem!important}.pl-lg-3{padding-left:1rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-lg-4{padding:1.5rem 1.5rem!important}.pt-lg-4{padding-top:1.5rem!important}.pr-lg-4{padding-right:1.5rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pl-lg-4{padding-left:1.5rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-lg-5{padding:3rem 3rem!important}.pt-lg-5{padding-top:3rem!important}.pr-lg-5{padding-right:3rem!important}.pb-lg-5{padding-bottom:3rem!important}.pl-lg-5{padding-left:3rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto{margin-top:auto!important}.mr-lg-auto{margin-right:auto!important}.mb-lg-auto{margin-bottom:auto!important}.ml-lg-auto{margin-left:auto!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0 0!important}.mt-xl-0{margin-top:0!important}.mr-xl-0{margin-right:0!important}.mb-xl-0{margin-bottom:0!important}.ml-xl-0{margin-left:0!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.m-xl-1{margin:.25rem .25rem!important}.mt-xl-1{margin-top:.25rem!important}.mr-xl-1{margin-right:.25rem!important}.mb-xl-1{margin-bottom:.25rem!important}.ml-xl-1{margin-left:.25rem!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-xl-2{margin:.5rem .5rem!important}.mt-xl-2{margin-top:.5rem!important}.mr-xl-2{margin-right:.5rem!important}.mb-xl-2{margin-bottom:.5rem!important}.ml-xl-2{margin-left:.5rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-xl-3{margin:1rem 1rem!important}.mt-xl-3{margin-top:1rem!important}.mr-xl-3{margin-right:1rem!important}.mb-xl-3{margin-bottom:1rem!important}.ml-xl-3{margin-left:1rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-xl-4{margin:1.5rem 1.5rem!important}.mt-xl-4{margin-top:1.5rem!important}.mr-xl-4{margin-right:1.5rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.ml-xl-4{margin-left:1.5rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-xl-5{margin:3rem 3rem!important}.mt-xl-5{margin-top:3rem!important}.mr-xl-5{margin-right:3rem!important}.mb-xl-5{margin-bottom:3rem!important}.ml-xl-5{margin-left:3rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-xl-0{padding:0 0!important}.pt-xl-0{padding-top:0!important}.pr-xl-0{padding-right:0!important}.pb-xl-0{padding-bottom:0!important}.pl-xl-0{padding-left:0!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.p-xl-1{padding:.25rem .25rem!important}.pt-xl-1{padding-top:.25rem!important}.pr-xl-1{padding-right:.25rem!important}.pb-xl-1{padding-bottom:.25rem!important}.pl-xl-1{padding-left:.25rem!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-xl-2{padding:.5rem .5rem!important}.pt-xl-2{padding-top:.5rem!important}.pr-xl-2{padding-right:.5rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pl-xl-2{padding-left:.5rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-xl-3{padding:1rem 1rem!important}.pt-xl-3{padding-top:1rem!important}.pr-xl-3{padding-right:1rem!important}.pb-xl-3{padding-bottom:1rem!important}.pl-xl-3{padding-left:1rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-xl-4{padding:1.5rem 1.5rem!important}.pt-xl-4{padding-top:1.5rem!important}.pr-xl-4{padding-right:1.5rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pl-xl-4{padding-left:1.5rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-xl-5{padding:3rem 3rem!important}.pt-xl-5{padding-top:3rem!important}.pr-xl-5{padding-right:3rem!important}.pb-xl-5{padding-bottom:3rem!important}.pl-xl-5{padding-left:3rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto{margin-top:auto!important}.mr-xl-auto{margin-right:auto!important}.mb-xl-auto{margin-bottom:auto!important}.ml-xl-auto{margin-left:auto!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}}.text-justify{text-align:justify!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-normal{font-weight:400}.font-weight-bold{font-weight:700}.font-italic{font-style:italic}.text-white{color:#fff!important}.text-muted{color:#636c72!important}a.text-muted:focus,a.text-muted:hover{color:#4b5257!important}.text-primary{color:#0275d8!important}a.text-primary:focus,a.text-primary:hover{color:#025aa5!important}.text-success{color:#5cb85c!important}a.text-success:focus,a.text-success:hover{color:#449d44!important}.text-info{color:#5bc0de!important}a.text-info:focus,a.text-info:hover{color:#31b0d5!important}.text-warning{color:#f0ad4e!important}a.text-warning:focus,a.text-warning:hover{color:#ec971f!important}.text-danger{color:#d9534f!important}a.text-danger:focus,a.text-danger:hover{color:#c9302c!important}.text-gray-dark{color:#292b2c!important}a.text-gray-dark:focus,a.text-gray-dark:hover{color:#101112!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.invisible{visibility:hidden!important}.hidden-xs-up{display:none!important}@media (max-width:575px){.hidden-xs-down{display:none!important}}@media (min-width:576px){.hidden-sm-up{display:none!important}}@media (max-width:767px){.hidden-sm-down{display:none!important}}@media (min-width:768px){.hidden-md-up{display:none!important}}@media (max-width:991px){.hidden-md-down{display:none!important}}@media (min-width:992px){.hidden-lg-up{display:none!important}}@media (max-width:1199px){.hidden-lg-down{display:none!important}}@media (min-width:1200px){.hidden-xl-up{display:none!important}}.hidden-xl-down{display:none!important}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/website/css/main.css b/website/css/main.css new file mode 100644 index 0000000..1a67f77 --- /dev/null +++ b/website/css/main.css @@ -0,0 +1,1339 @@ +@import url('https://fonts.googleapis.com/css?family=Lato:300'); +@import url('https://fonts.googleapis.com/css?family=Raleway:100,600'); +body { + font-family: 'Lato', sans-serif; + color: #333; + font-size: 14px; + font-weight: 300; + background: #262626; + overflow-x: hidden; +} + +p { + font-size: 16px; + line-height: 26px; + color: #fff; +} + +a:hover, +a:focus { + color: #4676fa; +} + +a { + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + +.btn { + font-size: 14px; + padding: 10px 30px; + border-radius: 0px; + font-weight: 400; + color: #fff; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; + display: inline-block; + font-family: 'Lato', sans-serif; +} + +.btn:focus { + box-shadow: none; + outline: none; +} + +.btn-common { + border: 2px solid #4676fa; + background-color: #4676fa; + position: relative; + z-index: 1; + border-radius: 4px; + margin: 12px; +} + +.btn-common:hover { + color: #4676fa; + background-color: transparent; + border: 2px solid #4676fa; + transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -webkit-transition: all 0.5s ease-in-out; +} + +.btn-border { + color: #fff; + background-color: transparent; + border: 2px solid #fff; + border-radius: 4px; +} + +.btn-border:hover { + border: 2px solid #fff; + color: #fff; + background-color: #4676fa; +} + +.btn-lg { + padding: 14px 33px; + text-transform: uppercase; + font-size: 16px; +} + +.btn-rm { + padding: 7px 10px; + text-transform: capitalize; +} + +.clear { + clear: both; +} + +h1, +h2, +h3, +h4, +h5 { + font-family: 'Anton', sans-serif; + color: #fff; + font-size: 40px; + font-weight: 100; + letter-spacing: 1px; +} + +ul { + margin: 0; + padding: 5; +} + +ul li, +ol li { + color: #fff; + font-size: 16px; + font-weight: 100; + margin-bottom: 5px; + padding-left: 5px; +} + +a:hover, +a:focus { + text-decoration: none; + outline: none; +} + +a:not([href]):not([tabindex]) { + color: #fff; +} + +a:not([href]):not([tabindex]):focus, +a:not([href]):not([tabindex]):hover { + color: #4676fa; +} + +.section { + padding: 80px 0; +} + +.section-header { + color: #fff; + margin-bottom: 40px; + text-align: center; +} + +.section-header .section-title { + font-size: 42px; + margin-top: 0; + font-weight: 100; + color: #fff; + position: relative; +} + +.section-header .section-title span { + color: #4676fa; +} + +.section-header .section-subtitle { + margin-top: 15px; + color: #fff; + font-size: 14px; + font-weight: 400; +} + +.section-header .lines { + margin: auto; + width: 70px; + position: relative; + border-top: 2px solid #346afe; + margin-top: 15px; +} + +.section-header .lines:before { + position: absolute; + content: ""; + display: inline-block; + height: 10px; + width: 10px; + top: -6px; + border: 4px solid #fff; + border-radius: 50%; + background: #4676fa; + left: 31px; +} + +pre { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border: 1px solid #BCBEC0; + background: #F1F3F5; +} + +code { + color: #f2f2f2; + border: 1px solid #BCBEC0; + padding: 2px; +} + +pre code { + border-radius: 0px; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border: 0px; + padding: 2px; +} + +iframe { + border-width: 0px; +} + + +/* ========================================================================== + Accordion Style + ========================================================================== */ + +.accordion-body { + background: #4c4c4c; +} + +.accordion-body h4 { + color: #fff; + font-size: 20px; + font-weight: 600; + text-decoration: underline; + margin-bottom: 10px; + padding-left: 10px; +} + +.accordion-body p { + color: #fff; + font-size: 16px; + font-weight: 400; + padding-left: 20px; + margin-bottom: 10px; +} + +.accordion-btn { + position: relative; +} + +.accordion-btn:before { + position: absolute; + content: "+"; + right: 10px; + top: 5px; +} + +.accordion-btn[aria-expanded="true"]:before { + content: "-"; +} + +#blog .blog-item-img { + position: relative; +} + + +/* ========================================================================== + Blog + ========================================================================== */ + +#blog .blog-item-wrapper { + background: #333; + margin-bottom: 30px; + width: 100% +} + +#blog .blog-item-wrapper:hover { + box-shadow: 0px 0px 40px 0px rgba(0, 0, 0, 0.1); +} + +#blog .blog-item-wrapper:hover .blog-item-img:before { + opacity: 1; + height: 100%; + width: 100%; +} + +#blog .blog-item-img { + position: relative; +} + +#blog .blog-item-img img { + width: 100%; + margin-bottom: 20px; + border-radius: 8px; +} + +#blog .blog-item-img:before { + width: 50%; + height: 50%; + content: ''; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(70, 118, 250, 0.7); + opacity: 0; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} + +#blog .blog-item-text { + padding: 20px; +} + +#blog .blog-item-text .meta-tags { + margin-bottom: 10px; +} + +#blog .blog-item-text .meta-tags span { + color: #999; + margin-right: 10px; +} + +#blog .blog-item-text .meta-tags span i { + margin-right: 5px; +} + +#blog .blog-item-text .meta-tags span a { + color: #999; +} + +#blog .blog-item-text .meta-tags span a:hover { + color: #4676fa; +} + +#blog .blog-item-text h3 { + line-height: 26px; + font-size: 22px; + text-align: center; + font-weight: 600; + margin-bottom: 10px; +} + +#blog .blog-item-text h3 a { + color: #333; +} + +#blog .blog-item-text h3 a:hover { + color: #4676fa; +} + +#blog .blog-item-text p { + line-height: 25px; + margin-bottom: 20px; +} + +#blog .blog-item-text h4 { + line-height: 26px; + font-size: 18px; + font-weight: 600; + text-decoration: underline; + margin-bottom: 10px; +} + +#blog .blog-item-text img.img-fluid { + padding-bottom: 15px; +} + + +/* ========================================================================== + Hero Area Style + ========================================================================== */ + +#hero-area { + background: url(../img/hero-area.jpg) fixed no-repeat; + background-size: cover; + color: #fff; + overflow: hidden; + position: relative; +} + +#hero-area .overlay { + position: absolute; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + background: #4676fa; + opacity: 0.7; + filter: alpha(opacity=70); +} + +#hero-area .contents { + padding: 160px 0 80px; +} + +#hero-area .contents h1 { + color: #fff; + font-size: 50px; + font-weight: 100; + margin-bottom: 25px; +} + +#hero-area .contents p { + font-size: 14px; + color: #fff; + font-weight: 400; + line-height: 30px; + letter-spacing: 0.5px; +} + +#hero-area .contents .btn { + margin: 20px 10px; + text-transform: uppercase; +} + +#hero-area .banner_bottom_btn { + margin-top: 40px; +} + +#hero-area .banner_bottom_btn i { + color: #fff; + font-size: 48px; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + +#hero-area .banner_bottom_btn i:hover { + color: #4676fa; +} + + +/* ========================================================================== + Slider Area + ========================================================================== */ + +#slider-area { + margin-top: -1px; +} + +#slider-area h1 { + font-weight: 100; + font-size: 30px; + line-height: 36px; + text-transform: uppercase; +} + +#slider-area p { + color: #ffffff; + font-size: 14px; + font-weight: 400; +} + +#slider-area .sticky-navigation { + background: transparent; +} + +#slider-area .btn { + margin-right: 15px; +} + +#slider-area .large_white { + color: #fff; +} + + +/* ========================================================================== + Video Background + ========================================================================== */ + +#video-area { + overflow: hidden; + position: relative; + height: 100vh; +} + +#video-area .container { + width: 100%; + max-width: 100%; + height: 100%; + padding: 0; + display: flex; + flex-direction: column; + justify-content: center; +} + +#video-area .contents { + /*padding: 160px 0 80px;*/ + backdrop-filter: blur(30px) saturate(1.5); + width: 100%; + padding: 1vmax; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + background: rgba(0, 0, 0, 0.3); +} + +#video-area .contents h1, +#video-area .contents p { + text-shadow: 0px 2px 2px rgba(0, 0, 0, 0.5); +} + +#video-area .contents h1 { + color: #fff; + font-size: 50px; + font-weight: 600; + /*margin-bottom: 275px;*/ + line-height: 70px; +} + +#video-area .contents p { + font-size: 14px; + color: #fff; + font-weight: 400; + line-height: 30px; + letter-spacing: 0.5px; +} + +#video-area .contents .btn { + margin: 20px 10px; +} + +#video-area .banner_bottom_btn { + margin-top: 40px; +} + +#video-area .banner_bottom_btn i { + color: #fff; + font-size: 48px; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + +#video-area .banner_bottom_btn i:hover { + color: #4676fa; +} + +.overlay-2 { + background: rgba(0, 0, 0, 0.7) !important; +} + + +/* ========================================================================== + Support Section Style + ========================================================================== */ + +#support { + position: relative; + background: #000000; +} + +.item-boxes { + text-align: center; + padding: 15px; + border-radius: 4px; + margin-bottom: 15px; + webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} + +.item-boxes .icon { + width: 60px; + height: 60px; + text-align: center; + border: 1px solid #4676fa; + display: inline-block; + border-radius: 5px; + margin-top: 10px; + margin-bottom: 15px; + webkit-transition: all 0.3s ease-in-out; + -webkit-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} + +.item-boxes .icon i { + font-size: 30px; + line-height: 60px; + color: #4676fa; +} + +.item-boxes h4 { + color: #fff; + font-size: 20px; + font-weight: 600; + margin-bottom: 10px; +} + +.item-boxes p { + color: #fff; + font-size: 18px; + font-weight: 400; + margin-bottom: 10px; +} + +.item-boxes:hover { + background: #4c4c4c; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +#Features { + position: relative; + background: #f2f2f2; +} + +.tutorial ol li{ + margin-bottom: 15px; + margin-top: 15px; + +} + +.tutorial-warning { + border:4px dashed yellow; + padding:20px; + margin-bottom:20px; +} + +.tutorial-warning b, .tutorial ol li b{ + font-weight:bold; +} + + +/* ========================================================================== + Features Section Style + ========================================================================== */ + +#Features { + background: #fff; +} + +#Features .icon { + display: inline-block; + width: 60px; + height: 60px; + border-radius: 4px; + text-align: center; + position: relative; + z-index: 1; +} + +#Features .content-left { + position: relative; + top: 60px; +} + +#Features .content-left span { + float: right; + margin-left: 25px; +} + +#Features .content-right { + position: relative; + top: 60px; +} + +#Features .content-right span { + float: left; + margin-right: 25px; +} + +#Features .box-item { + padding-bottom: 30px; +} + +#Features .box-item .icon { + border: 1px solid #4676fa; + text-align: center; + margin: 12px; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + +#Features .box-item .icon i { + color: #4676fa; + font-size: 24px; + line-height: 60px; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + + +/* Testimonial Section Style + ========================================================= */ + +#testimonial x-item .text p { + font-size: 14px; + line-height: 26px; +} + +#Features .box-item:hover .icon { + background: #4676fa; +} + +#Services .box-item:hover .icon i { + Features: #ffffff; +} + +#Features .show-box { + padding: 80px 0px 0px; +} + +#Features .show-box img { + width: 100%; +} + + +/* ========================================================================== + Testimonial Section Style + ========================================================================== */ + +.testimonial-item { + text-align: center; +} + +.testimonial-item img { + width: 80px; + height: 80px; + border-radius: 50%; +} + +.testimonial-item .testimonial-text h3 { + font-size: 16px; + font-weight: 100; + text-transform: uppercase; +} + +.testimonial-item .testimonial-text span { + font-size: 15px; + color: #999; +} + +.testimonial-item .testimonial-text p { + font-size: 14px; + font-weight: 400; + padding: 20px 10px 20px 10px; + letter-spacing: 1px; + margin: 0; + line-height: 1.5; + color: #fff; +} + +.owl-theme .owl-controls .owl-page span { + background: #4676fa; +} + +.owl-theme .owl-controls { + margin-top: 20px; +} + +#toc_container { + background: 000000 none repeat scroll 0 0; + border: 1px solid #aaa; + display: table; + font-size: 95%; + margin-bottom: 1em; + padding: 20px; + width: 100%; +} + +.toc_title { + font-weight: 600; + text-align: center; +} + +#toc_container li, +#toc_container ul, +#toc_container ul li { + list-style: outside none none !important; +} + + +/* #Navigation +================================================== */ + +.start-header { + opacity: 1; + transform: translateY(0); + padding: 20px 0; + box-shadow: 0 10px 30px 0 rgba(138, 155, 165, 0.15); + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.start-header.scroll-on { + box-shadow: 0 5px 10px 0 rgba(138, 155, 165, 0.15); + padding: 10px 0; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.start-header.scroll-on .navbar-brand img { + height: 24px; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.navigation-wrap { + position: fixed; + width: 100%; + top: 0; + left: 0; + z-index: 1000; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.navbar { + padding: 0; +} + +.fixed-top { + background-color: #333 !important; +} + +.navbar-brand img { + height: 28px; + width: auto; + border-radius: 3px; + display: block; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.navbar-toggler { + float: right; + border: none; + padding-right: 0; +} + +.navbar-toggler:active, +.navbar-toggler:focus { + outline: none; +} + +.navbar-light .navbar-toggler-icon { + width: 24px; + height: 17px; + background-image: none; + position: relative; + border-bottom: 1px solid #FFF; + transition: all 300ms linear; +} + +.navbar-light .navbar-toggler-icon:after, +.navbar-light .navbar-toggler-icon:before { + width: 24px; + position: absolute; + height: 1px; + background-color: #FFF; + top: 0; + left: 0; + content: ''; + z-index: 2; + transition: all 300ms linear; +} + +.navbar-light .navbar-toggler-icon:after { + top: 8px; +} + +.navbar-toggler[aria-expanded="true"] .navbar-toggler-icon:after { + transform: rotate(45deg); +} + +.navbar-toggler[aria-expanded="true"] .navbar-toggler-icon:before { + transform: translateY(8px) rotate(-45deg); +} + +.navbar-toggler[aria-expanded="true"] .navbar-toggler-icon { + border-color: transparent; +} + +.nav-link { + color: #fff !important; + font-weight: 500; + transition: all 200ms linear; +} + +.nav-item:hover .nav-link { + color: #f2f2f2 !important; +} + +.nav-item.active .nav-link { + color: #fff !important; +} + +.nav-link { + position: relative; + padding: 5px 0 !important; + display: inline-block; +} + +.nav-item:after { + position: absolute; + bottom: -5px; + left: 0; + width: 100%; + height: 2px; + content: ''; + opacity: 0; + transition: all 200ms linear; +} + +.nav-item:hover:after { + bottom: 0; + opacity: 1; +} + +.nav-item.active:hover:after { + opacity: 0; +} + +.nav-item { + position: relative; + transition: all 200ms linear; +} + +.nav-item:hover .dropdown-menu { + display: block; + margin: 0; +} + +.dropdown-menu { + background-color: #333; +} + +.dropdown-item { + color: #FFF; +} + +.dropdown-item:hover { + background-color: #6c757d; +} + +.nav-item { + margin-bottom: 0; +} + + +/* ========================================================================== + Footer Style + ========================================================================== */ + +footer { + background: #333; + padding: 60px 0px 30px; + text-align: center; +} + +.site-info p { + line-height: 34px; + color: #fff; +} + +.site-info p a { + color: #fff; +} + +.site-info p a:hover { + color: #4676fa; +} + +.social-icons { + margin-bottom: 20px; +} + +.social-icons ul { + margin: 0; + padding: 0; + list-style: none; +} + +.social-icons ul li { + display: inline; +} + +.social-icons ul li a { + display: inline-block; + margin-left: 5px; + margin-right: 5px; + margin-bottom: 15px; + border-radius: 4px; + border: 1px solid rgba(255, 254, 254, 0.07); + line-height: 40px; + width: 40px; + height: 40px; + text-align: center; + font-size: 16px; +} + +.social-icons ul li a:hover { + color: #ffffff; +} + +.facebook a { + color: #4867aa; +} + +.facebook a:hover { + background: #4867aa; +} + +.twitter a { + color: #1da1f2; +} + +.twitter a:hover { + background: #1da1f2; +} + +.google-plus a { + color: #dd4d42; +} + +.google-plus a:hover { + background: #dd4d42; +} + +.youtube a { + color: #df2926; +} + +.youtube a:hover { + background: #df2926; +} + +.linkedin a { + color: #007bb6; +} + +.linkedin a:hover { + background: #007bb6; +} + +.patreon a { + color: #FF424D; +} + +.patreon a:hover { + background: #FF424D; +} + +.github a { + color: #121212; +} + +.github a:hover { + background: #121212; +} + +.discord a { + color: #7289da; +} + +.discord a:hover { + background: #7289da; +} + +.pinterest a { + color: #bd081c; +} + +.pinterest a:hover { + background: #bd081c; +} + +.dribbble a { + color: #ea4c89; +} + +.dribbble a:hover { + background: #ea4c89; +} + +.behance a { + color: #0b7cff; +} + +.behance a:hover { + background: #0b7cff; +} + +.subscribe-box { + margin-top: 18px; +} + +.btn.patreon-button { + background-color: #FF424D; + border: 2px solid #FF424D; +} + +.btn.patreon-button:hover { + color: #FF424D; + background-color: transparent; + border: 2px solid #FF424D; +} + +.subscribe-box input[type="text"] { + color: #444; + font-size: 12px; + padding: 6px 12px; + border: none; + background: #fff; + border-radius: 0px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -o-border-radius: 0px; + outline: none; +} + +.subscribe-box input[type="submit"] { + display: inline-block; + text-decoration: none; + color: #fff; + font-size: 12px; + background: #4676fa; + text-transform: uppercase; + border: none; + padding: 7px 16px; + border-radius: 0px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -o-border-radius: 0px; + transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + font-family: 'Lato', sans-serif; + cursor: pointer; +} + +.back-to-top { + display: none; + position: fixed; + bottom: 18px; + right: 15px; +} + +.back-to-top i { + display: block; + width: 36px; + height: 36px; + line-height: 36px; + color: #fff; + font-size: 14px; + text-align: center; + border-radius: 4px; + background-color: #4676fa; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + +#loader { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #333; + z-index: 9999999999; +} + +.spinner { + width: 40px; + height: 40px; + top: 45%; + position: relative; + margin: 0px auto; +} + +.double-bounce1, +.double-bounce2 { + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #4676fa; + opacity: 0.6; + position: absolute; + top: 0; + left: 0; + -webkit-animation: sk-bounce 2s infinite ease-in-out; + animation: sk-bounce 2s infinite ease-in-out; +} + +.double-bounce2 { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +@-webkit-keyframes sk-bounce { + 0%, + 100% { + -webkit-transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + } +} + +@keyframes sk-bounce { + 0%, + 100% { + transform: scale(0); + -webkit-transform: scale(0); + } + 50% { + transform: scale(1); + -webkit-transform: scale(1); + } +} + +#panorama { + position: absolute; + z-index: -1; + inset: 0px; + overflow: hidden; +} + + +/* ========================================================================== + Curtain Style + ========================================================================== */ + +#curtain { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + height: 100%; + width: 100%; + overflow: hidden; + background: #262626; + opacity: 1; + transition: opacity 300ms ease-out; + z-index: 999999999999; + margin: auto; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; +} + +#curtain .row { + margin: auto; + text-align: center; +} + +.lds-dual-ring { + display: inline-block; + width: 80px; + height: 80px; +} + +.lds-dual-ring:after { + content: " "; + display: block; + width: 64px; + height: 64px; + margin: 8px; + border-radius: 50%; + border: 4px solid #fff; + border-color: #fff transparent #fff transparent; + animation: lds-dual-ring 1.2s linear infinite; +} + +@keyframes lds-dual-ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.anchor { + padding-top: 90px; +} + +.table-fixed { + width: 100%; +} + + +/* This will work on every browser but Chrome Browser */ + +.table-fixed thead { + position: -webkit-sticky; + position: -moz-sticky; + position: -o-sticky; + position: -ms-sticky; + position: sticky; + top: 35px; + z-index: 5; + background-color: #343a40; + color: #fff; +} + + +/* This will work on every browser */ + +.table-fixed thead th { + position: -webkit-sticky; + position: -moz-sticky; + position: -o-sticky; + position: -ms-sticky; + position: sticky; + top: 35px; + z-index: 5; + background-color: #343a40; + color: #fff; +} + + +/* YT CTAs */ + +.yt { + overflow: hidden; + padding-bottom: 56.25%; + position: relative; + height: 0; +} + +.yt iframe { + left: 0; + top: 0; + height: 100%; + width: 100%; + position: absolute; +} + + +/* Hide certain table values (console_commands) on mobile */ + +@media only screen and (max-width: 999px) { + .table-collapsible { + display: none !important; + } +} \ No newline at end of file diff --git a/website/css/nivo-lightbox.css b/website/css/nivo-lightbox.css new file mode 100644 index 0000000..115c877 --- /dev/null +++ b/website/css/nivo-lightbox.css @@ -0,0 +1,244 @@ +/*! + * Nivo Lightbox v1.3.1 + * http://dev7studios.com/nivo-lightbox + * + * Copyright 2013, Dev7studios + * Free to use and abuse under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + */ + +.nivo-lightbox-overlay { + position: fixed; + top: 0; + left: 0; + z-index: 99999; + width: 100%; + height: 100%; + overflow: hidden; + visibility: hidden; + opacity: 0; + background: rgba(0, 0, 0, 0.8); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.nivo-lightbox-overlay.nivo-lightbox-open { + visibility: visible; + opacity: 1; +} + +.nivo-lightbox-wrap { + position: absolute; + top: 10%; + bottom: 10%; + left: 10%; + right: 10%; +} + +.nivo-lightbox-content { + width: 100%; + height: 100%; +} + +.nivo-lightbox-title-wrap { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 99999; + text-align: center; +} + +.nivo-lightbox-nav { + display: none; +} + +.nivo-lightbox-prev { + position: absolute; + top: 50%; + left: 0; +} + +.nivo-lightbox-next { + position: absolute; + top: 50%; + right: 0; +} + +.nivo-lightbox-close { + position: absolute; + top: 2%; + right: 2%; +} + +.nivo-lightbox-image { + text-align: center; +} + +.nivo-lightbox-image img { + max-width: 100%; + max-height: 100%; + width: auto; + height: auto; + vertical-align: middle; +} + +.nivo-lightbox-content iframe { + width: 100%; + height: 100%; +} + +.nivo-lightbox-inline, +.nivo-lightbox-ajax { + max-height: 100%; + overflow: auto; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + /* https://bugzilla.mozilla.org/show_bug.cgi?id=308801 */ +} + +.nivo-lightbox-error { + display: table; + text-align: center; + width: 100%; + height: 100%; + color: #fff; + text-shadow: 0 1px 1px #000; +} + +.nivo-lightbox-error p { + display: table-cell; + vertical-align: middle; +} + + +/* Effects + **********************************************/ + +.nivo-lightbox-notouch .nivo-lightbox-effect-fade, +.nivo-lightbox-notouch .nivo-lightbox-effect-fadeScale, +.nivo-lightbox-notouch .nivo-lightbox-effect-slideLeft, +.nivo-lightbox-notouch .nivo-lightbox-effect-slideRight, +.nivo-lightbox-notouch .nivo-lightbox-effect-slideUp, +.nivo-lightbox-notouch .nivo-lightbox-effect-slideDown, +.nivo-lightbox-notouch .nivo-lightbox-effect-fall { + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + + +/* fadeScale */ + +.nivo-lightbox-effect-fadeScale .nivo-lightbox-wrap { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -ms-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); +} + +.nivo-lightbox-effect-fadeScale.nivo-lightbox-open .nivo-lightbox-wrap { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + + +/* slideLeft / slideRight / slideUp / slideDown */ + +.nivo-lightbox-effect-slideLeft .nivo-lightbox-wrap, +.nivo-lightbox-effect-slideRight .nivo-lightbox-wrap, +.nivo-lightbox-effect-slideUp .nivo-lightbox-wrap, +.nivo-lightbox-effect-slideDown .nivo-lightbox-wrap { + -webkit-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9); + -moz-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9); + -ms-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9); + -o-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9); + transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9); +} + +.nivo-lightbox-effect-slideLeft .nivo-lightbox-wrap { + -webkit-transform: translateX(-10%); + -moz-transform: translateX(-10%); + -ms-transform: translateX(-10%); + transform: translateX(-10%); +} + +.nivo-lightbox-effect-slideRight .nivo-lightbox-wrap { + -webkit-transform: translateX(10%); + -moz-transform: translateX(10%); + -ms-transform: translateX(10%); + transform: translateX(10%); +} + +.nivo-lightbox-effect-slideLeft.nivo-lightbox-open .nivo-lightbox-wrap, +.nivo-lightbox-effect-slideRight.nivo-lightbox-open .nivo-lightbox-wrap { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); +} + +.nivo-lightbox-effect-slideDown .nivo-lightbox-wrap { + -webkit-transform: translateY(-10%); + -moz-transform: translateY(-10%); + -ms-transform: translateY(-10%); + transform: translateY(-10%); +} + +.nivo-lightbox-effect-slideUp .nivo-lightbox-wrap { + -webkit-transform: translateY(10%); + -moz-transform: translateY(10%); + -ms-transform: translateY(10%); + transform: translateY(10%); +} + +.nivo-lightbox-effect-slideUp.nivo-lightbox-open .nivo-lightbox-wrap, +.nivo-lightbox-effect-slideDown.nivo-lightbox-open .nivo-lightbox-wrap { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} + + +/* fall */ + +.nivo-lightbox-body-effect-fall .nivo-lightbox-effect-fall { + -webkit-perspective: 1000px; + -moz-perspective: 1000px; + perspective: 1000px; +} + +.nivo-lightbox-effect-fall .nivo-lightbox-wrap { + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + -webkit-transform: translateZ(300px); + -moz-transform: translateZ(300px); + -ms-transform: translateZ(300px); + transform: translateZ(300px); +} + +.nivo-lightbox-effect-fall.nivo-lightbox-open .nivo-lightbox-wrap { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} + +.icon-close { + font-size: 24px; +} \ No newline at end of file diff --git a/website/css/normalize.css b/website/css/normalize.css new file mode 100644 index 0000000..3096bdc --- /dev/null +++ b/website/css/normalize.css @@ -0,0 +1,562 @@ +/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ + + +/** + * 1. Change the default font family in all browsers (opinionated). + * 2. Correct the line height in all browsers. + * 3. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + + +/* Document + ========================================================================== */ + +html { + font-family: sans-serif; + /* 1 */ + line-height: 1.15; + /* 2 */ + -ms-text-size-adjust: 100%; + /* 3 */ + -webkit-text-size-adjust: 100%; + /* 3 */ +} + +.selector-for-some-widget { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + + +/* Sections + ========================================================================== */ + + +/** + * Remove the margin in all browsers (opinionated). + */ + +body { + margin: 0; +} + + +/** + * Add the correct display in IE 9-. + */ + +article, +aside, +footer, +header, +nav, +section { + 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 + ========================================================================== */ + + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ + +figcaption, +figure, +main { + /* 1 */ + display: block; +} + + +/** + * Add the correct margin in IE 8. + */ + +figure { + margin: 1em 40px; +} + + +/** + * 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 + ========================================================================== */ + + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; + /* 1 */ + -webkit-text-decoration-skip: objects; + /* 2 */ +} + + +/** + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ + +a:active, +a:hover { + outline-width: 0; +} + + +/** + * 1. Remove the bottom border in Firefox 39-. + * 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 */ +} + + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, +strong { + font-weight: inherit; +} + + +/** + * 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 style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + + +/** + * Add the correct background and color in IE 9-. + */ + +mark { + background-color: #ff0; + color: #000; +} + + +/** + * 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 + ========================================================================== */ + + +/** + * Add the correct display in IE 9-. + */ + +audio, +video { + display: inline-block; +} + + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + + +/** + * Remove the border on images inside links in IE 10-. + */ + +img { + border-style: none; +} + + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + + +/* Forms + ========================================================================== */ + + +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + /* 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; +} + + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, +html [type="button"], + +/* 1 */ + +[type="reset"], +[type="submit"] { + -webkit-appearance: button; + /* 2 */ +} + + +/** + * 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; +} + + +/** + * Change the border, margin, and padding in all browsers (opinionated). + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + + +/** + * 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 */ +} + + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ +} + + +/** + * Remove the default vertical scrollbar in IE. + */ + +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 and cancel buttons in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-cancel-button, +[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 IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ + +details, + +/* 1 */ + +menu { + display: block; +} + + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + + +/* Scripting + ========================================================================== */ + + +/** + * Add the correct display in IE 9-. + */ + +canvas { + display: inline-block; +} + + +/** + * Add the correct display in IE. + */ + +template { + display: none; +} + + +/* Hidden + ========================================================================== */ + + +/** + * Add the correct display in IE 10-. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/website/css/owl.carousel.css b/website/css/owl.carousel.css new file mode 100644 index 0000000..43cb709 --- /dev/null +++ b/website/css/owl.carousel.css @@ -0,0 +1,193 @@ +/* + * Core Owl Carousel CSS File + * v1.3.3 + */ + + +/* clearfix */ + +.owl-carousel .owl-wrapper:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} + + +/* display none until init */ + +.owl-carousel { + display: none; + position: relative; + width: 100%; + -ms-touch-action: pan-y; +} + +.owl-carousel .owl-wrapper { + display: none; + position: relative; + -webkit-transform: translate3d(0px, 0px, 0px); +} + +.owl-carousel .owl-wrapper-outer { + overflow: hidden; + position: relative; + width: 100%; +} + +.owl-carousel .owl-wrapper-outer.autoHeight { + -webkit-transition: height 500ms ease-in-out; + -moz-transition: height 500ms ease-in-out; + -ms-transition: height 500ms ease-in-out; + -o-transition: height 500ms ease-in-out; + transition: height 500ms ease-in-out; +} + +.owl-carousel .owl-item { + float: left; +} + +.owl-controls .owl-page, +.owl-controls .owl-buttons div { + cursor: pointer; +} + +.owl-controls { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + + +/* mouse grab icon */ + +.grabbing { + cursor: url(grabbing.png) 8 8, move; +} + + +/* fix */ + +.owl-carousel .owl-wrapper, +.owl-carousel .owl-item { + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); +} + + +/* Feel free to change duration */ + +.animated { + -webkit-animation-duration: 1000 ms; + animation-duration: 1000 ms; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + + +/* .owl-animated-out - only for current item */ + + +/* This is very important class. Use z-index if you want move Out item above In item */ + +.owl-animated-out { + z-index: 1 +} + + +/* .owl-animated-in - only for upcoming item +/* This is very important class. Use z-index if you want move In item above Out item */ + +.owl-animated-in { + z-index: 0 +} + + +/* .fadeOut is style taken from Animation.css and this is how it looks in owl.carousel.css: */ + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +#owl-demo .item img { + display: block; + width: 100%; + height: auto; +} + +.owl-theme .owl-controls { + position: relative; +} + +.owl-theme .owl-controls .item-link { + position: relative; + display: block; + width: 100px; + height: 70px; + margin: 0 2px; + border-bottom: 4px solid #ccc; + outline: none; +} + +.owl-theme .owl-controls .item-link:focus { + -webkit-box-shadow: 0 0 8px #3498DB; + -moz-box-shadow: 0 0 8px #3498DB; + box-shadow: 0 0 8px #3498DB; + outline: none; +} + +.owl-theme .owl-controls .active .item-link { + border-bottom: 4px solid #3498DB; +} + +.owl-theme .owl-controls .owl-page span { + display: none; +} + +.owl-theme .prev-owl, +.owl-theme .next-owl { + display: none; +} + +.owl-theme .prev-owl:focus, +.owl-theme .next-owl:focus { + -webkit-box-shadow: 0 0 8px #3498DB; + -moz-box-shadow: 0 0 8px #3498DB; + box-shadow: 0 0 8px #3498DB; +} + +.owl-theme .prev-owl { + left: 24px; +} + +.owl-theme .next-owl { + right: 24px; +} \ No newline at end of file diff --git a/website/css/owl.theme.css b/website/css/owl.theme.css new file mode 100644 index 0000000..4960dc4 --- /dev/null +++ b/website/css/owl.theme.css @@ -0,0 +1,96 @@ +/* +* Owl Carousel Owl Demo Theme +* v1.3.3 +*/ + +.owl-theme .owl-controls { + margin-top: 10px; + text-align: center; +} + + +/* Styling Next and Prev buttons */ + +.owl-theme .owl-controls .owl-buttons div { + color: #FFF; + display: inline-block; + zoom: 1; + *display: inline; + /*IE7 life-saver */ + margin: 5px; + padding: 3px 10px; + font-size: 12px; + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px; + background: #869791; + filter: Alpha(Opacity=50); + /*IE7 fix*/ + opacity: 0.5; +} + + +/* Clickable class fix problem with hover on touch devices */ + + +/* Use it for non-touch hover action */ + +.owl-theme .owl-controls.clickable .owl-buttons div:hover { + filter: Alpha(Opacity=100); + /*IE7 fix*/ + opacity: 1; + text-decoration: none; +} + + +/* Styling Pagination*/ + +.owl-theme .owl-controls .owl-page { + display: inline-block; + zoom: 1; + *display: inline; + /*IE7 life-saver */ +} + +.owl-theme .owl-controls .owl-page span { + display: block; + width: 12px; + height: 12px; + margin: 5px 7px; + filter: Alpha(Opacity=50); + /*IE7 fix*/ + opacity: 0.5; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + background: #869791; +} + +.owl-theme .owl-controls .owl-page.active span, +.owl-theme .owl-controls.clickable .owl-page:hover span { + filter: Alpha(Opacity=100); + /*IE7 fix*/ + opacity: 1; +} + + +/* If PaginationNumbers is true */ + +.owl-theme .owl-controls .owl-page span.owl-numbers { + height: auto; + width: auto; + color: #FFF; + padding: 2px 10px; + font-size: 12px; + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px; +} + + +/* preloading images */ + +.owl-item.loading { + min-height: 150px; + background: url(AjaxLoader.gif) no-repeat center center +} \ No newline at end of file diff --git a/website/css/responsive.css b/website/css/responsive.css new file mode 100644 index 0000000..8abb05d --- /dev/null +++ b/website/css/responsive.css @@ -0,0 +1,108 @@ +@media (min-width: 768px) and (max-width: 1024px) { + .section-header .section-title { + font-size: 22px; + } + #video-area .contents h1 { + font-size: 32px; + line-height: 48px; + } + .navbar-light .navbar-nav .nav-link { + padding: 8px 0px; + font-size: 13px; + } + .item-boxes h4 { + font-size: 16px; + } + #features .box-item .text h4 { + font-size: 12px; + } + #features .content-left .text { + margin-right: 85px; + } + #features .content-right .text { + margin-left: 85px; + } + .subscribe-box input[type="text"] { + padding: 6px 10px; + } +} + +@media (max-width: 640px) { + .section-header .section-title { + font-size: 30px; + } + .menu-wrap { + padding: 10px; + } + .icon-list a { + padding: 5px 0; + } + .icon-list a::before { + top: 5px; + } + .bg-faded { + background: #fff!important; + } + #video-area .contents h1 { + font-size: 30px; + line-height: 48px; + } + #features .content-right span { + float: none; + } + #features .content-left span { + float: none; + } + #features .box-item .text h4 { + font-size: 14px; + } + .table-left { + margin: 0px 0px; + } + .counters .facts-item { + margin-bottom: 30px; + } +} + +@media (min-width: 320px) and (max-width: 480px) { + .bg-faded { + background: #fff!important; + } + .section-header .section-title { + font-size: 20px; + line-height: 30px; + } + #video-area .contents { + padding: 80px 0 60px; + } + #video-area .contents h1 { + font-size: 18px; + line-height: 32px; + } + .video-promo .video-promo-content h2 { + font-size: 18px; + } + .pricing-tables .pricing-table { + margin-bottom: 30px; + } + #blog .blog-item-text h3 { + font-size: 18px; + } + #blog .blog-item-text .meta-tags span { + margin-right: 5px; + } + .counters .facts-item { + margin-bottom: 30px; + } + #contact .section-title { + font-size: 22px; + } + #subscribe .sub_btn { + min-width: 120px; + } + .social-icons ul li a { + width: 36px; + height: 36px; + line-height: 36px; + } +} \ No newline at end of file diff --git a/website/develop/CHANGELOG.md b/website/develop/CHANGELOG.md new file mode 100644 index 0000000..a4524d7 --- /dev/null +++ b/website/develop/CHANGELOG.md @@ -0,0 +1,450 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog v0.3.0](http://keepachangelog.com/en/0.3.0/) and this project adheres to [Semantic Versioning](http://semver.org/). + +## [0.6.1] - 2020-12-23 + +### Added + +- Add host information to /info endpoint (request) +- Add fileWrite GSC Function (#36) +- Add fileRead GSC Function (#36) +- Add fileExists GSC Function (#36) +- Add fileRemove GSC Function (#36) +- Add botMovement GSC Function (#46) +- Add botAction GSC Function (#46) +- Add botWeapon GSC Function (#46) +- Add botStop GSC Function (#46) +- Add isBot GSC Function (#46) +- Add setPing GSC Function (#46) +- Add GetSystemTime and GetSystemTimeMilliseconds GSC Functions (#46) +- Add PrintConsole GSC Function (#46) +- Add Exec GSC Function (#46) +- Add getIP GSC Method (#36) +- Add getPing GSC Method (#36) +- Add scr_intermissionTime GSC Function (#25) +- Add g_playerCollision Dvar (#36) +- Add g_playerEjection Dvar (#36) +- Add r_specularCustomMaps Dvar (#36) +- Unlock safeArea_horizontal and safeArea_vertical Dvars (#42) +- Unlock cg_fovscale Dvar (#47) +- Added g_antilag Dvar (#61) + +### Changed + +- Stats are now separate for each mod (#6). Player stats are copied to `fs_game` folder if no stats exist for this mod yet. Keep in mind this also means that level, XP and classes will not be synchronized with the main stats file after this point. +- Reduced duration of toasts (#48) +- Removed old updater functionality (#54) +- Use old bot names if bots.txt is not found (#46) + +### Fixed + +- Fixed a node system related crash (#45) +- Fixed an issue that made dedicated servers crash when info was requested during map rotation (#43) +- Fixed an issue where the game was trying to decrypt gsc files which caused it to crash when loading mods (#35) +- Fixed an issue causing the game to crash when Steam was running in the background (#56) +- Fixed slow download speed when using fast download + +### Known issues + +- HTTPS is not supported for fast downloads at the moment. + +## [0.6.0] - 2018-12-30 + +### Added + +- Implement unbanclient command. +- Implement /serverlist api endpoint on dedicated servers +- Add dvar to control the server query rate (net_serverQueryLimit & net_serverFrames) + +### Changed + +- Update dependencies + +### Fixed + +- Fix mods not working in private matches. +- Fix multiple game structures (map tools) +- Fix multiple vulnerability's +- Fix lag spikes on lower end PCs +- Fix invalid name check +- Fix openLink command crash issue +- Fix lobby server map downloading +- Fix steam integration + +### Known issues + +- HTTPS is not supported for fast downloads at the moment. + +## [0.5.4] - 2017-07-09 + +### Added + +- Integrate IW4MVM by luckyy. + +### Changed + +- Displayed stats for Dragunov have been changed, has no effect on actual game play. + +### Fixed + +- Fix fast download failing when the target host is missing a trailing slash. +- Fix servers not being listed in the server browser. +- Fix some FPS drop issues caused by compression code. + +### Known issues + +- HTTPS is not supported for fast downloads at the moment. + +## [0.5.3] - 2017-07-02 + +### Added + +- Increase webserver security. + +### Fixed + +- Reduce lags introduced by nodes. +- Fix modlist download. + +## [0.5.2] - 2017-07-02 + +### Fixed + +- Fix dedicated server crash. + +## [0.5.1] - 2017-07-02 + +### Added + +- Add fast download option for custom mods/maps based on Call of Duty 4. +- Display a toast when an update is available. +- Use the hourglass cursor while loading assets (with the native cursor feature). +- Show bots in parenthesis after the number of players in the serverlist (request). +- Add GSC event `level waittill("say", string, player);` (request). +- Restrict unauthorized mod download for password protected servers. +- Add OMA support for 15 classes. + +### Changed + +- Show friend avatars when they play IW4x (request). +- Rewrite and optimize the entire node system. +- Remove syncnode command for node system. +- Remove steam start. + +### Fixed + +- Fix lags and frame drops caused by server sorting. +- Fix demos on custom maps. +- Can no longer join a lobby or server with an incorrect password. +- Fix crashes caused by a bug in file/data compression. +- Improve overall stability. + +## [0.5.0] - 2017-06-04 + +### Added + +- Add GSC functionality to download files via HTTP(S) (request). +- Implement preliminary custom map support. + +### Changed + +- Add new nicknames for bots. +- Bumped Fastfile version. If you built fastfiles with the zone builder (e.g. mod.ff) you have to rebuild them! +- Default `sv_network_fps` to `1000` on dedicated game servers. +- Increase maximum FOV to 120. + +### Fixed + +- Fix `iw4x_onelog` dvar. +- Fix server list only showing local servers by default instead of Internet servers. +- Fix some deadlock situations on game shutdown. + +## [0.4.2] - 2017-03-16 + +### Changed + +- Disable unnecessary dvar update in server browser. +- Update bot names. + +### Fixed + +- Fix process permissions. +- Fix classic AK-47 color bleedthrough. +- Re-aligned the MG4's Raffica iron sights. + +## [0.4.1] - 2017-03-10 + +### Fixed + +- Fix command line argument parsing. + +## [0.4.0] - 2017-03-10 + +### Added + +- Set played with status. +- Add support for 15 classes. +- Add `iw4x_onelog` dvar. +- Add show server/playercount in server browser. + +### Changed + +- Do not show friend status notifications with stream friendly UI. +- Reduce loaded modules for dedis. +- Use joystick emblem for friend status. +- Disable XP bar when max level. +- Change fs_game display postition. +- Replace Painkiller with Juiced from IW5. + +### Fixed + +- Fix AK weaponfiles. +- Fix brightness slider. +- Fix text length for column mod in server browser. +- Changed the L86 LSW to use the correct HUD icon. +- Re-aligned the M93 Raffica's iron sights. +- Re-aligned the Desert Eagle's iron sights. + +## [0.3.3] - 2017-02-14 + +### Added + +- Add mapname to friend status (request). +- Add option to toggle notify friend state. +- Add support for mod.ff. + +### Changed + +- Disabled big minidump message box. +- Limit dedicated servers to 15 instances per IP. +- Move build number location. +- Remove news ticker and friends button from theater. + +### Fixed + +- Fix audio bug in options menu. +- Fix crash caused by faulty file download requests to game hosts. +- Fix friend sorting. +- Fix game not starting issue under certain circumstances. +- Fix menu crash. +- Fix typo in security increase popmenu. +- Fix vid_restart crash with connect protocol. +- Fix weapon crash issue. +- Potentially fix no-ammo bug. + +## [0.3.2] - 2017-02-12 + +This is the third public Beta version. + +### Added + +- Add working friend system. +- Add colored pings in the server list. +- Add credits. +- Add first launch menu. +- Add AK-47 (Classic) attachments. +- Add HUD icon for night vision goggles. + +### Changed + +- Join when pressing enter in server list (request). +- Redesign and refactor all fullscreen menus. +- Increase weapon and configstring limit. +- Allow creating full crash dumps if wanted. +- Set default name from steam. + +### Fixed + +- Fix missing models on village. +- Fix custom server motd (request). +- Fix various memory leaks. +- Fix mouse pitch (request). +- Fix compatibility with B3 (request). +- Fix RCon bug (request). +- Fix dedicated server crash on linux. +- Fix crash in mod download. +- Fix peacekeeper reload sound. +- Fix cl_maxpackets 125 in settings (request). +- Fix deserteaglegold_mp icon. + +### Known issues + +- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS. + +## [0.3.1] - 2017-01-21 + +This is the second public Beta version. + +### Added + +- Add classic AK-47 to CAC. +- Add servers to favorites when ingame. +- Add delete favorites button in the serverlist. + +### Changed + +- Change maplist to a dynamic list. + +### Fixed + +- Fix list focus. +- Fix mod restart loop. +- Fix mod download status. +- Fix modelsurf crash. +- Fix floating AK-74u. + +### Known issues + +- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS. + +## [0.3.0] - 2017-01-14 + +This is the first public Beta version. + +### Added + +- Add com_logFilter dvar. +- Add peacekeeper. +- Add support for maps from DLC 8 (Recycled Pack) + + - Chemical Plant (mp_storm_spring) + - Crash: Tropical (mp_crash_tropical) + - Estate: Tropical (mp_estate_tropical) + - Favela: Tropical (mp_fav_tropical) + - Forgotten City (mp_bloc_sh) + +### Changed + +- Improve node synchronization handling. +- Improve security by modifying GUIDs to allow 64-bit certificate fingerprints. +- Optimize fastfiles, they are now a lot smaller. +- Replace intro. + +### Fixed + +- Fix concurrent image loading bug. +- Fix issues when spawning more than one bot. +- Fix no ammo bug. +- Fix server crash on startup. +- Fix splash screen hang. + +### Known issues + +- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS. + +## [0.2.1] - 2016-12-14 + +This is the second public Alpha version. + +### Added + +- Add support for CoD:Online maps. + + - Firing Range (mp_firingrange) + - Rust (mp_rust_long) + - Shipment (mp_shipment/mp_shipment_long) + +- Add `sv_motd` Dvar for server owners to set custom motd (will be visible in the loadscreen). +- Add Zonebuilder support for sounds and fx. +- Add command setviewpos. +- Add high-definition loadscreens. + +### Changed + +- Rename Arctic Wet Work map to it's official name (Freighter). +- Complete redesign of the main menus. +- Allow `cl_maxpackets` to be set up to 125. + +### Fixed + +- Fix crash when using the Harrier killstreak. +- Disable code that downloads news/changelog when in zonebuilder mode. +- Fix freeze on game shutdown. +- Disable unlockstats while ingame to prevent a crash. + +### Known issues + +- IW4x on Linux currently requires gnutls to be installed to access the Tor service via HTTPS. + +## [0.2.0] - 2016-10-09 + +This is the first public Alpha version. + +### Added + +- Support for CoD:Online maps. + + - Arctic Wet Work (mp_cargoship_sh) + - Bloc (mp_bloc) + - Bog (mp_bog_sh) + - Crossfire (mp_cross_fire) + - Killhouse (mp_killhouse) + - Nuketown (mp_nuked) + - Wet Work (mp_cargoship) + +### Fixed + +- Fix techniques in Zonebuilder. +- Fix possible memory leak. +- Fix timeout bug when connecting to server via iw4x link. +- Partially fix deadlock in decentralized networking code. + +### Known issues + +- Running IW4x on Linux currently requires gnutls to be installed additional to Wine as it needs to access the Tor service via HTTPS. + +## [0.1.1] - 2016-09-19 + +This version is an internal Pre-Alpha version. + +### Added + +- Add IW5 material embedding system. + +### Changed + +- Enhance mod download with detailed progress display. + +### Fixed + +- Fix and optimize network logging commands. +- Fix console not displaying command inputs properly. +- Fix crash when running multiple instances of the IW4x client from the same directory. +- Fix crash when the `securityLevel` command is used on a game server. +- Fix possible data corruption in code for decentralized networking. +- Fix possible deadlock during client shutdown. + +## [0.1.0] - 2016-09-03 + +This version is an internal Pre-Alpha version. + +### Added + +- Add `banclient` command which will permanently ban a client from a server. The ban will persist across restarts. +- Add capabilities to save played games and replay them ("Theater"). +- Add code for generating and sending minidumps for debugging purposes. This feature is meant to be used only during the Open Beta and will be removed once the code goes to stable release. +- Add commands that allow forwarding console and games log via UDP to other computers ("network logging"). +- Add D3D9Ex. +- Add filters for server list. +- Add handling for `iw4x://` URLs ("connect protocol"). For example, if IW4x is properly registered in Windows as URL handler for `iw4x://` URLs you can type `iw4x://ip:port`. If possible, this will connect to the server in an already running IW4x client. +- Add lean support through new key bindings. +- Add native cursor as replacement for the sometimes laggy in-game cursor. This change can be reverted in the settings menu. +- Add news ticker. +- Add remote console ("RCon"). +- Add support for BigBrotherBot. +- Add support for hosting game mods in order to allow players to just join modded servers out of the box ("mod download"). +- Add Warfare2 text coloring. +- Add zone builder. For more information see the respective documentation. +- Implement a completely decentralized peering network. +- Implement playlists which can be used for flexible map and gametype rotation. +- Introduce security levels. This ensures that you need to "pay" with CPU power to verify your identity once before being able to join a server which reduces the interval at which people who get banned can circumvent server bans through using new identities. The default security level is 23. +- Move IW4x resource files into their own folder to prevent clogging up the main game directories. +- Reintroduce parties, now also available for dedicated servers ("lobby servers"). + +### Changed + +- Move logs to `userraw` folder. +- Replace main menu background music. diff --git a/website/discord.html b/website/discord.html new file mode 100644 index 0000000..f3269ef --- /dev/null +++ b/website/discord.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/website/favicon.ico b/website/favicon.ico new file mode 100644 index 0000000..273a349 Binary files /dev/null and b/website/favicon.ico differ diff --git a/website/footer.js b/website/footer.js new file mode 100644 index 0000000..4f8616e --- /dev/null +++ b/website/footer.js @@ -0,0 +1,24 @@ +// If you are adding new lines, make sure to escape the line at the end with a \ + +document.write('\ +
\ +
\ +
\ +
\ + \ +
\ +

All copyrights reserved © 2021 - X Labs

\ +
\ +
\ +
\ +
\ +
\ +'); \ No newline at end of file diff --git a/website/header.js b/website/header.js new file mode 100644 index 0000000..fcde0c2 --- /dev/null +++ b/website/header.js @@ -0,0 +1,70 @@ +// If you are adding new lines, make sure to escape the line at the end with a \ + +document.write('\ + \ +'); \ No newline at end of file diff --git a/website/img/iw4x_banner.jpg b/website/img/iw4x_banner.jpg new file mode 100644 index 0000000..bb28b89 Binary files /dev/null and b/website/img/iw4x_banner.jpg differ diff --git a/website/img/iw4x_tutorial_downloads.png b/website/img/iw4x_tutorial_downloads.png new file mode 100644 index 0000000..edd1023 Binary files /dev/null and b/website/img/iw4x_tutorial_downloads.png differ diff --git a/website/img/iw4x_tutorial_extract_all.png b/website/img/iw4x_tutorial_extract_all.png new file mode 100644 index 0000000..77cbb28 Binary files /dev/null and b/website/img/iw4x_tutorial_extract_all.png differ diff --git a/website/img/iw4x_tutorial_extract_path.png b/website/img/iw4x_tutorial_extract_path.png new file mode 100644 index 0000000..cb174e4 Binary files /dev/null and b/website/img/iw4x_tutorial_extract_path.png differ diff --git a/website/img/iw4x_tutorial_final.png b/website/img/iw4x_tutorial_final.png new file mode 100644 index 0000000..02858dd Binary files /dev/null and b/website/img/iw4x_tutorial_final.png differ diff --git a/website/img/iw6x_banner.png b/website/img/iw6x_banner.png new file mode 100644 index 0000000..27a72d3 Binary files /dev/null and b/website/img/iw6x_banner.png differ diff --git a/website/img/s1x_banner.png b/website/img/s1x_banner.png new file mode 100644 index 0000000..a48d5fa Binary files /dev/null and b/website/img/s1x_banner.png differ diff --git a/website/img/xlabs.png b/website/img/xlabs.png new file mode 100644 index 0000000..9dbc3ba Binary files /dev/null and b/website/img/xlabs.png differ diff --git a/website/img/xlabs_logo.png b/website/img/xlabs_logo.png new file mode 100644 index 0000000..1c2682c Binary files /dev/null and b/website/img/xlabs_logo.png differ diff --git a/website/img/xlabs_social.png b/website/img/xlabs_social.png new file mode 100644 index 0000000..68fe4dc Binary files /dev/null and b/website/img/xlabs_social.png differ diff --git a/website/index.html b/website/index.html new file mode 100644 index 0000000..3d20d21 --- /dev/null +++ b/website/index.html @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + Home | X Labs + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + +
+
+ +
+

Official Home of IW4x, IW6x and S1x

+ + IW4x + IW6x + S1x +
+ +
+
+ + + + + + + +
+
+
+

X LABS FEATURES

+
+

X Labs clients restore missing features removed by the developers and further the capabilities of the games.

+
+
+
+
+
+ +
+

Additional Content

+

Clients contain additional weapons and maps ported from other games.

+
+
+
+
+
+ +
+

Improved Security

+

Exploits that exist in the Steam versions of the game have been patched providing a safer gaming environment.

+
+
+
+
+
+ +
+

Mods and Mod Tools

+

Modding capabilities have been added allowing the community to further add new content to the game.

+
+
+
+
+
+ +
+

Dedicated Servers

+

Dedicated servers allow the community to host their own servers to. A server list is available in-game.

+
+
+
+
+
+ +
+

Anti-Cheat

+

Between built in features of the clients and third-party tools, cheaters can be banned from playing the games.

+
+
+
+
+
+ +
+

Support

+

Support is available via the X Labs Discord, the website, and various gaming communities. Be polite.

+
+
+
+
+
+ + +
+
+
+

FAQ | SUPPORT

+
+
+ IW4x Support + IW6x Support + S1x Support +
+
+

Additional support can be obtained on the X Labs Discord

+
+
+
+ + +
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw4/motd.txt b/website/iw4/motd.txt new file mode 100644 index 0000000..b7920fe --- /dev/null +++ b/website/iw4/motd.txt @@ -0,0 +1 @@ +^3S1x/IW6x out now! ^7| Support us on Patreon to get special rewards: ^1patreon.com/XLabsProject ^7| Follow us on Twitter: ^5@XLabsProject ^7| Visit ^2https://xlabs.dev ^7for more info! diff --git a/website/iw4x_controllers.html b/website/iw4x_controllers.html new file mode 100644 index 0000000..471796b --- /dev/null +++ b/website/iw4x_controllers.html @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + IW4x Controller Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW4x +
+

IW4x CONTROLLER GUIDE

+
+

An in-depth guide on how to setup controllers for IW4x.

+
+
+ + +
+
+

+ Video Guide: +

+ +

+ Text Guide: +

+

As MW2 on PC does not natively support controllers, we must use external programs to make a controller emulate keyboard and mouse inputs. This guide will cover using Steam's Big Picture mode, which has this feature built in.

+

Step 1: Adding IW4x to your Steam library.

+
    +
  1. Launch Steam and click the text in the bottom left that says '[+] ADD A GAME'.
  2. +
  3. Select the option 'Add a Non-Steam Game...'.
  4. +
  5. Click the 'Browse' button.
  6. +
  7. In the browse file window, locate your IW4x install and select 'iw4x.exe', then click the 'Open' button.
  8. +
  9. Now there should be a tick in the box next to iw4x, now simply click the button 'ADD SELECTED PROGRAMS'.
  10. +
  11. Then, IW4x has been added to your Steam library and can be launched at any time from within Steam.
  12. +
+

Step 2: Enabling Controller Configuration Support

+
    +
  1. Connect your controller to your PC via USB or Bluetooth.
  2. +
  3. Open steam and select the 'Big Picture Mode' mode icon (It's located at the top right of the steam window next to minimise).
  4. +
  5. Once in Big Picture mode go to Settings (It's the cog icon in the top right).
  6. +
  7. In settings, select the 'Controller Settings' option.
  8. +
  9. Now, depending on the controller you are using, enable the configuration support. (e.g. For an Xbox controller, enable 'Xbox Configuration Support').
  10. +
+

Step 3: Controller Configuration

+
    +
  1. Again, while in Big Picture mode, go to settings then controller settings. Plug in your controller, make sure it is detected, and enable the configuration support for your controller.
  2. +
  3. Go to your library, find IW4x, select 'Manage Shortcut' then the 'Controller Configuration' option. You will now be presented with a image with your controller.
  4. +
  5. Now select the 'BROWSE CONFIGS' button (Xbox Controllers -> X Button) (PS4 Controllers -> SQUARE Button).
  6. +
  7. You should now be on a list screen of configurations, Go to the 'Community' tab and press the 'SHOW OTHER CONTROLLER TYPES' button (Xbox Controllers -> Y Button) (PS4 Controllers -> TRIANGLE Button).
  8. +
  9. Now search the list till you find the 'H3X1C's ELITE IW4x Config V2' Configuration, press the (Xbox Controllers -> A Button ) (PS4 Controllers -> CROSS Button) to 'IMPORT CONFIG'.
  10. +
  11. Then, you just need to apply the configuration. For Xbox, this will be the "X" Button and for PS4 Controllers, this will be the SQUARE button.
  12. +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw4x_download.html b/website/iw4x_download.html new file mode 100644 index 0000000..8317049 --- /dev/null +++ b/website/iw4x_download.html @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + IW4x Download | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW4x +
+
+
+

IW4x Download

+ + + +

+ Follow us on twitter to unlock the download:
+    Twitter +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw4x_errors.html b/website/iw4x_errors.html new file mode 100644 index 0000000..6e718e4 --- /dev/null +++ b/website/iw4x_errors.html @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + IW4x Errors | X Labs + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+ + +
+
+

+ + Q: Black Screen / Not responding on startup +

+ blackscreen +

+ A: To solve this issue, try one of the following solutions +

+
    +
  • If you have a Nvidia GPU, disable the overlay (see picture). Disable any other overlays as well (Discord, FPS Counters, Recorders, Steam, etc.)
  • +
  • Rightclick iw4x.exe, click Properties, go to the Compatibility tab and enable compatibility mode for Windows 8.
  • +
  • Turn off fullscreen mode by editing /players/iw4x_config.cfg and changing the line that says set r_fullscreen "1" to set r_fullscreen "0" and set r_noborder "0" to set r_noborder "1". Alternatively, run this batch file in your + game folder: fullscreen_0.bat
  • +
  • Disable DEP. Run this batch file as admin: dep_disabler.bat
  • +
+
+
+ + + +
+
+

+ + Q: (0xc000005) Fatal Error on Launch +

+

+ A: To solve this issue, please replace your IW4x.dll with this one: here. +

+
+
+ + + +
+
+

+ + Q: (0xc000007b) Fatal Error +

+

+ A: To solve this issue, try one of the following solutions +

+
    +
  • Download and run the following program (Installs/repairs runtimes)
  • +
  • If you downloaded any individual DLL's from Google sesrch results and placed them in your folder then YOU NEED TO REMOVE THEM! They can cause this error and are also used to spread malware
  • +
  • Try disabling your antivirus / Add an exception for IW4x
  • +
  • Make sure Windows is completely updated
  • +
  • Reinstall a clean version of Windows as a last resort
  • +
+
+
+ + + + +
+
+

+ + Q: Failed to download Mod List +

+

+ A: Contact the server owner and inform them of the problem (Suggest a server restart). +

+
+
+ + + + +
+
+

+ + Q: XUID doesn't match the certificate +

+

+ A: Close IW4x, and delete players/guid.dat from your game folder. +

+
+
+ + + + +
+
+

+ + Q: Couldn't load image 'AnyImageNameHere' +

+ could not load image +

+ A: Run our repair guide. +

+
+
+ + + + +
+
+

+ + Q: Low amount of servers +

+

+ A: To see more servers, try the following solutions +

+
    +
  • Open the ingame console and check the values for net_serverQueryLimit and net_serverFrames
  • +
  • Lower them both, step by step, until the amount of servers rise. (Alternatively, set them to their minimum and increase them one by one until your server amount goes up.)
  • +
  • As a last resort you can try entering the following command into the console while at the main menu /addnode 74.91.119.236
  • +
+
+
+ + + + +
+
+

+ + Q: No servers +

+

+ A: Download and place nodes.dat into your players folder, overwriting the existing one. +

+
+
+ + + + +
+
+

+ + Q: Entry Point Not Found - (DirectSound) +

+ entry point not found +

+ A: Review and follow the Repair Guide. +

+
+
+ + + +
+
+

+ + Q: Zone Version is not supported +

+ zone version not supported +

+ A: Review and follow the Repair Guide. +

+
+
+ + + +
+
+

+ + Q: My controller isn't working on IW4x +

+

+ A: Follow the Controller Guide. +

+
+
+ + + +
+
+

+ + Q: Stuck on Increasing Security Level +

+

+ A: Wait patiently, grab yourself a cup of tea while you wait. 🍵 +

+
+
+ + + +
+
+

+ + Q: Menu unresponsive / black screen with music on disconnect +

+

+ A: To solve this issue, try the following solutions +

+
    +
  • Open the in-game console via the tilde key on your keyboard and enter the following command /reloadmenus
  • +
  • Another option is to simply close the game and relaunch it
  • +
+
+
+ + + +
+
+

+ + Q: Error during initialization: Couldn't load fileSysCheck.cfg +

+ file sys check +

+ A: Review and follow the Repair Guide. +

+
+
+ + + +
+
+

+ + Q: System Error: mss32.dll was not found +

+ mss32.dll missing +

+ A: Review and follow the Repair Guide. +

+
+
+ + + +
+
+

+ + Q: System Error: d3dx9_40.dll was not found +

+ d3dx9_40.dll was not found +

+ A: Install DirectX 9.0, you can do so from the pre-packed installer that comes with MW2, It's located at: Call of Duty Modern Warfare 2\Redist\DirectX\DXSETUP.exe, simply run the installer and restart your PC to resolve the error. +

+

+ If you don't have the redist folder you can download the installer manually. (Run directx_mar2009_redist.exe extract to a location of your choice then run DXSETUP.exe): + DirectX End-User Runtime Web Installer +

+
+
+ + + +
+
+

+ + Q: System Error: binkw32.dll was not found +

+

+ A: Review and follow the Repair Guide. +

+
+
+ + + +
+
+

+ + Q: Crosshair is missing +

+

+ A: To restore the crosshair, try the following solutions +

+
    +
  • Open the in-game console via the tilde key on your keyboard and enter the following command /ui_drawcrosshair 1
  • +
  • Alternatively you can manually edit your configuration file (iw4x_config.cfg) located in players folder of your MW2 folder and edit the line /ui_drawcrosshair and set it's value to 1
  • +
+
+
+ + + +
+
+

+ + Q: Minimap is missing +

+

+ A: To restore the minimap, try the following solutions +

+
    +
  • Open the in-game console via the tilde key on your keyboard and enter the following command /hud_enable 1
  • +
  • Alternatively, you can manually edit your configuration file (iw4x_config.cfg) located in players folder of your MW2 folder and edit the line /hud_enable and set it's value to 1
  • +
+
+
+ + + +
+
+

+ + Q: FPS drops, choppy frames and ghosting +

+

+ A: To solve this issue, try one of the following solutions +

+
    +
  • Disable the Nvidia overlay
  • +
  • Disable any recording software / overlays / external fps counters
  • +
  • If you have IW4x set to fullscreen mode try switching it to borderless windowed mode
  • +
  • Restart your PC (The good old turn it off and back on method)
  • +
+
+
+ + + +
+
+

+ + Q: Demo playback - Lost connection to host +

+

+ A: Currently, there is no solution to this issue due the demo code in IW4 being experimental and not compatible with laptop based killstreaks. To read more on this issue see the github issue report The only workaround is to not use laptop based killstreaks if you plan to playback your gameplay without issue +

+
+
+ + + +
+
+

+ + Q: Stuck on awaiting gamestate +

+

+ A: To solve this issue, try the following solutions +

+
    +
  • If you are recieving this issue in a private match, the cause results from your in-game name containing invalid characters. Please make sure to remove any symbols / non english characters.
  • +
  • If you are recieving this issue in a public match, the issue is related to your network. Try restarting your pc and router. Failing that, try switching to a wired connection if you are on WiFi or try another network if one + is available.
  • +
+
+
+ + + +
+
+

+ + Q: Server disconnected +

+

+ A: To solve this issue, try the following solutions +

+
    +
  • If you are recieving this issue in a private match, the cause results from your in-game name containing invalid characters. Please make sure to remove any symbols / non english characters.
  • +
  • If your name does not contain invalid characters, it may be due to you having the same guid as someone else. Delete players/guid.dat
  • +
+
+
+ + + +
+
+

+ + Q: Hours played in Steam shows an excessive amount of time +

+

+ A: To fix this issue, try the following solutions +

+
    +
  • The simplest solution is to exit Steam prior to lauching IW4x. IW4x will see steam is not running and not attempt to launch steam integration. This prevents MW2 hours being recorded.
  • +
  • A second solution is to launch IW4x with the -nosteam parameter. This will disable steam intergration while Steam is open in the background. To add the parameter right click IW4x.exe and select Create Shortcut. + This will create a new file called 'iw4x.exe - Shortcut' right click this new file and select properties. Then in the target field add the -nosteam parameter. Example target field: C:\Games\MW2\iw4x.exe -nosteam
  • +
+
+
+ + + +
+
+

+ + Q: Challenges not unlocking +

+

+ A: In order to start progressing a challenge, you must view it once from within the barracks menu, to remove it's New status. Your challenges should now unlock as normal. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/iw4x_faq.html b/website/iw4x_faq.html new file mode 100644 index 0000000..ace7525 --- /dev/null +++ b/website/iw4x_faq.html @@ -0,0 +1,388 @@ + + + + + + + + + + + + + + + + + + IW4x FAQ | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+ + +
+
+

+ + Q: Can I use my Steam copy of Modern Warfare 2 to play IW4x? +

+

+ A: You certainly can! A Steam copy of MW2 is the prefered way to play IW4x. Read the Install Guide to learn how to use your Steam copy. +

+
+
+ + + +
+
+

+ + Q: On IW4x, can I play with players on Steam or Steam players play with me? +

+

+ A: IW4x is entirely seperate from Steam MW2 services, so it is not possible to play with people playing on the Steam version of MW2. You can, however, invite your steam MW2 friends to install IW4x, and then you'll be able to play together. +

+
+
+ + + +
+
+

+ + Q: How do I play with bots? +

+

+ A: Using the console, you can spawn test clients. These are dumb bots lacking any AI and do not move. The command to spawn these test clients is /spawnbots 17 (The number is the amount you wish to spawn). The alternative + is to use a bot mod such as Bot-Warfare. This will give the bots pathing and AI making them perfect for an offline match. +

+
+
+ + + +
+
+

+ + Q: How do I install mods? +

+

+ A: Please follow the Mod Guide. +

+
+
+ + + +
+
+

+ + Q: Will IW4x get me VAC banned? +

+

+ A: The short answer is no. IW4x is completely external to Steam and Steam Servers (You don't play with Steam users). It's impossible to get VAC banned. IW4x players only play with fellow IW4x players as the servers are completely seperate from Steam. + You are at no risk of recieving a VAC ban. +

+
+
+ + + +
+
+

+ + Q: Is IW4x full of cheaters? +

+

+ A: Absolutely not! In-fact, IW4x has far less cheaters than Steam servers due to it's more advanced anti-cheat system, preventing .dll and process hooking exploits that plague Steam. Futhermore, server owners have full moderation control unlike Steam + as explained below. If cheaters do slip through the net, they can be quickly banned. +

+
+
+ + + +
+
+

+ + Q: Does my Steam rank and stats carry over to IW4x? +

+

+ A: No. When you start IW4x, you will be starting at level 1. As stated above, IW4x is external from Steam, so you will have a separate rank, classes, title etc. When, and if, you go back to Steam MW2 you will still have the same rank you had before. IW4x + does not alter this at all. However, you can always manually set your rank back to the level you were if you wish as this is allowed, or just use the unlock all button in the barracks menu to get 10th prestige level 70 with + everything unlocked. +

+
+
+ + + +
+
+

+ + Q: How do I set a custom prestige and level? +

+

+ A: To set a custom prestige, open the console pressing the tilde key (~) and type the following: \setplayerdata prestige x. You can set your prestige to be 0 through 11. The console command for setting a custom + level is: \setplayerdata experience x. A list of experience for all the levels can be found here. +

+
+
+ + + +
+
+

+ + Q: How do I change my sensitivity? +

+

+ A: You can change your sensitivty either though the options menu in-game or for more precise values use the command /sensitivty 1 (Replace the number with your desired sensitivty). +

+
+
+ + + +
+
+

+ + Q: How can I change my Field of View (FOV)? +

+

+ A: You can change your FOV by using the in-game menu or using the console command /cg_fov 90 (Replace the number with your desired FOV). +

+
+
+ + + +
+
+

+ + Q: How can I use cheat protected commands in private match such as noclip? +

+

+ A: You must use the devmap command to load a map, this enables the use of cheat protected commands as it toggles sv_cheats to 1. Example /devmap mp_highrise. For more information on console commands, see our guide: + Console Commands Guide. +

+
+
+ + + +
+
+

+ + Q: How can I improve my FPS? +

+

+ A: The best way is to go into the graphic options of the game and lower all the settings. The next step you can take is to lower your game's resolution. Keep lowering it until you reach your desired FPS. If your FPS is still too low, there's a good chance + your PC isn't good enough to play MW2. +

+
+
+ + + +
+
+

+ + Q: Why is my gaming laptop getting low FPS? +

+

+ A: By default, many gaming laptops use intergrated CPU graphics to preserve battery. You may need to force IW4x to use your dedicated graphics card. +

+
    +
  1. Go to the NVIDIA Control Panel by right clicking on your desktop and click on "NVIDIA Control Panel".
  2. +
  3. In the default screen that pops up (it should be "manage 3D settings", and the "Program Settings" tab should be automatically selected), under "1. Select a program to customize:" hit the "Add" button.
  4. +
  5. From here, navigate to the folder where IW4x is installed.
  6. +
  7. Select IW4x.exe and hit open.
  8. +
  9. Then, under "2. Select the preferred graphics processor for this program:" open the drop-down menu and select "High-performance NVIDIA processor".
  10. +
  11. Finally, hit apply in the far bottom right corner, and you should be good to go!
  12. +
+
+
+ + + +
+
+

+ + Q: How can I report cheaters? +

+

+ A: IW4x has no global control over server owners or what rules they enforce / who they choose to ban. For this reason, if you encounter a cheater you must report them to the server owner you encountered the cheater on. Most good server provide contact + information such as a Discord or website. Note: If a server has poor moderation and doesn't ban cheaters, it's advised you don't play on their servers. +

+
+
+ + + +
+
+

+ + Q: Where can I download mods? +

+

+ A: There is no one central location to download mods. For this reason, Google is your best bet at locating mods. +

+
+
+ + + +
+
+

+ + Q: What is security level and why am I stuck on it? +

+

+ A: Security level is a built in security mechanism that generates a unique ID. It's computationally intense and may take a while to complete. Please be patient. +

+
+
+ + + +
+
+

+ + Q: What port does MW2 multiplayer use by default? +

+

+ A: The default port is 28960. This port needs to be forwarded on the correct protocols if you wish to play private matches with friends. 28960 on the protocols (UDP & TCP) needs to be forwarded. +

+
+
+ + + +
+
+

+ + Q: What port does MW2 singleplayer run on by default? +

+

+ A: The default port is 28961. This port needs to be forwarded on the correct protocols if you wish to host a spec ops lobby with a friend. 28961 on the protocols (UDP & TCP) needs to be forwarded. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw4x_privatematch.html b/website/iw4x_privatematch.html new file mode 100644 index 0000000..9eee091 --- /dev/null +++ b/website/iw4x_privatematch.html @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + IW4x Private Match Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW4x +
+

IW4x PRIVATE MATCH GUIDE

+
+

An in-depth guide on how to play private match with friends for IW4x.

+
+
+ + +
+
+

Connecting to your friends:

+
    +
  1. Go to here and PM anyone who wants to join your IP Address.
  2. +
  3. Start IW4x and select 'CREATE GAME' from the main menu.
  4. +
  5. Click 'START GAME'.
  6. +
  7. Tell anyone who wants to join, open the console by using the tilde key while at the main menu.
  8. +
  9. Get them to enter the following command, replacing 'HostsIPAddress' with the IP you previously sent him: /connect HostsIPAddress:28960
  10. +
+

Failed to join:

+
    +
  1. If you followed the above correctly and your friends are unable to join you or you are unable to join them, the host of the private match will need to port forward in order for them to connect to you or you connect to them.
  2. + +
  3. Port Forward port "28960" UDP & TCP
  4. +
  5. You can find how to do this by Googling 'YourRouterName Port Forwarding'
  6. +
  7. Note: If port forwarding is too complex, just stick to playing public servers, or maybe join an empty server so you have the same experience as a private game.
  8. +
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw4x_repair.html b/website/iw4x_repair.html new file mode 100644 index 0000000..7bb7c40 --- /dev/null +++ b/website/iw4x_repair.html @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + IW4x Repair Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW4x +
+

IW4x REPAIR GUIDE

+
+

An in-depth guide on how to repair a broken IW4x install.

+
+
+ + +
+
+ +
    +
  1. Locate your MW2 Install, and make note of the folder name and folder path (Your folder name may differ from the example below).
  2. + mw2 install folder +
  3. Download the following torrent and open it with qBittorent.
  4. +
  5. Once prompted with the following screen, click on the icon marked in red:
  6. + browse for mw2 files +
  7. Browse to the location of your MW2 folder and mark it by clicking on it once. Now click "Select Folder":
  8. + select mw2 folder +
  9. IMPORTANT: Under the content layout dropdown select "Don't create subfolder", after that hit OK to start the repair process:
  10. + +
  11. The torrent client will now check your game files and re-download missing or corrupted ones.
  12. +
  13. Once your torrent says Seeding, click on the torrent and hit the pause button.
  14. + qBit Stop Seeding +

    Congratulations! Your game should now be repaired!

    +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/iw4x_wiki_mirror.html b/website/iw4x_wiki_mirror.html new file mode 100644 index 0000000..7847ad2 --- /dev/null +++ b/website/iw4x_wiki_mirror.html @@ -0,0 +1,2628 @@ + + + + + + + Documentation + + + + + + + + + + + +
+
+ + + +
+

General

+

General configuration for IW4x.

+

Folder structure

+
    +
  • IW4x\[1]
      +
    • iw4x.dll[2]
    • +
    • iw4x.exe[3]
    • +
    • iw4x\[4]
    • +
    • main\[5]
    • +
    • mods\[6]
    • +
    • players\[7]
    • +
    • usermaps\[8]
    • +
    • userraw\[9]
    • +
    • zone\[10]
    • +
    +
  • +
+

[1] Your Modern Warfare 2 folder.
[2] The part where all our magic happens.
[3] The binary of the game.
[4] Do not touch anything or put anything in here, unless we told you to!
[5] Do not touch anything or put anything in here, unless we told you to!
[6] Here you can store any mod you want to apply, by using fs_game.
[7] Your configuration and all data related to your playerprofile is kept there.
[8] Your custom maps are stored here.
[9] This is a folder we have added for you to store your custom raw- and iwd files (e.g. custom camos etc.).
[10] Do not touch anything or put anything in here, unless we told you to!

+

Client

+

Here you can find client specific configuration.

+

Installation

+

You have to fulfill the following requirements to play IW4x:

+ +

To install IW4x follow the instructions below:

+
    +
  • Copy the game folder to a separate location
  • +
  • Download the Updater or the zip archive from our website. Use the mirrors if you want to get your full download speed.
  • +
  • Updater: Copy the updater to the game folder and start the updater.
  • +
  • Zip: Extract the zip archive directly in your game folder.
  • +
  • Start the game with the IW4x executable.
  • +
+

Multiple clients in the same game folder can lead to crashes.

+

Command line parameters

+

Those are the client related command line parameters.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdescription
-consoleEnables the external console.
-dedicatedStarts as a server.
-dumpDumps raw map entities.
-nosteamDisables Steam integration.
-repairNot implemented yet.
-versionShows game version.
-zonebuilderStarts the IW4x Zonebuilder.
+connect <ip:port>Directly connect to specified server, the default port (28960) will be used when no one has been provided.
+set <dvar> <value>Provide any dvar to the game, e.g. +set r_fullscreen 0.
+

Color Codes

+

Color codes allow coloring of any text, mainly player and server names. Modern Warfare 2 itself defines the following colors:

+

^1 Red.
^2 Green.
^3 Yellow.
^4 Blue.
^5 Cyan.
^6 Pink.
^7 White.
^8 This color changes depending on what map you’re playing on:

+
    +
  • American maps
      +
    • Dark green.
    • +
    +
  • +
  • Russian maps
      +
    • Dark red.
    • +
    +
  • +
  • British maps
      +
    • Dark blue.
    • +
    +
  • +
+

^9 Grey.
^0 Black.

+

Additionally, IW4x introduces new color codes for more fanciness:

+

^: Rainbow color.
^; A color set by the server using the sv_customTextColor dvar.

+

You can let the color of the nametag above your player model change by using ^^::!

+

Direct3D 9Ex

+

Direct3D 9Ex is an improved version of Microsoft’s Direct3D 9[1].

+

In IW4x it has been implemented to reduce the RAM usage of the game. If you have some problems you can simply disable it in the video options.

+

Native cursor

+

This setting allows you to disable the custom game cursor and use the native one your operating system provides, you can change this in the video options.

+

Security levels

+

Every player has an identity with which they can join servers. Normally such an identity would be some sort of login information like a forum login or an ID like you would get on steam. IW4x is not able to use such a way of authentication since it is completely decentralized. Instead, the client generates a random, unique identity for each player if they don’t have one yet.

+

Whenever a player gets banned, their identity gets added to a server-side blacklist which prevents them from joining with that identity again. In order to circumvent such a ban, a player can then create a new identity.

+

This is where the security level comes in: It determines the level of complexity an identity has to fulfill before it can be seen as an identity that is allowed to join the server. This implies that the client has to do a certain amount of work. The higher the complexity, the more work a client will statistically have to do.

+

Of course, a client is still able to pregenerate identities to prepare for instant ban evasion. This is where the server admin can reconfigure the security level on their server to a higher value, which automatically invalidates all identities below that level, requiring all clients trying to join to recalculate a valid identity token.

+

The security level is set to 23 by default, which in average leads to a waiting time of about 30 seconds for the identity token to be calculated.

+

[1] MSDN: Direct3D 9Ex Improvements.aspx)

+

Server

+

Quick setup and advanced configuration for IW4x servers.

+
+

⚠️ Warning
You can only host up to 15 servers on the same IP address, additional servers will be rejected by the decentralized node system. This has been implemented as a security measurement to prevent flooding the server list.

+
+

Server types

+

Party

+

A party[1] is a dedicated lobby, which uses a playlist for its configuration and will take players back into a lobby after each map. The advantage of the party system is:

+
    +
  • adjust classes and killstreak rewards without leaving the server
  • +
  • vote to skip next map
  • +
  • map rotation is random
  • +
+

Because of that, a party server is ideal for a public game servers.

+
+

⚠️ Warning
Party servers are very buggy and unstable, they will crash often and even with scripts the server might not properly restart. It is advised to not use party servers and stick to match servers instead!

+
+

Match

+

A match is a normal dedicated server, which uses a map rotation, ideal for private servers.

+

Requirements

+

You have to fulfill the following requirements to be able to host a server for IW4x:

+
    +
  • An internet connection
  • +
  • A clean installation of Call of Duty: Modern Warfare 2
  • +
  • Notepad++ to edit config files
  • +
  • 7-ZIP to extract the client files
  • +
  • Basic knowledge about your current operating system
  • +
  • Common sense (in case of a public server)
  • +
+

Quick instructions for hosting a match server

+
+

😡 Warning
If you forget to remove the < and > around the port, tech support is legally allowed to call you retarded.
In case you didn't get that, this means remove them.

+
    +
  • Copy your ‘Call of Duty Modern Warfare 2’ folder to another location
  • +
  • Extract the client files into your copied folder
  • +
  • Download the 📥 server.cfg and place it in your ‘players’ folder, edit it to your needs
  • +
  • Download the 📥 startserver.bat and place it into the root, edit it as needed
  • +
  • Forward the TCP and UDP port you've specified in +set net_port <port>
  • +
  • Run the batch and have fun!
  • +
+
+

Quick instructions for hosting a party server

+
    +
  • Copy your ‘Call of Duty Modern Warfare 2’ folder to another location
  • +
  • Extract the client files into your copied folder
  • +
  • Download the 📥 server.cfg and place it in your ‘players’ folder, edit it to your needs
  • +
  • Download the 📥 startserver.bat and place it into the root, edit it as needed
  • +
  • Forward the TCP and UDP port you've specified in +set net_port <port>
  • +
  • Run the batch and have fun!
  • +
+

File mirrors

+

If the above links don't work, you can download Zip files containing the files you need from here!

+

Alternatively, you can download the files individually from here

+

Advanced server configuration

+

Further information for advanced server configuration:

+

General
Match server
Party server
Docker
Setting up FastDL
API
Gameserver file optimization
List of map names

+

[1] A server starts per default as a party.

+

General

+

General server configuration for advanced options.

+

Command line parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
-dedicatedStarts the game as a dedicated server
-stdoutStarts the server without a console, only text output - useful for running server in wine
-consoleStarts the server in a dedicated console
+set net_ip <ip>0.0.0.0Configures the ip the server is listening on
+set net_port <int>289601 - 65535Configures the port the server is listening on
+set sv_lanonly <int>00 - 1Starts server for LAN only
+exec <string>Loads a given server configuration
+set fs_game <string>Configures which mod to load
+set party_enable <int>10 - 1Configures wether to use the party or match system
+set sv_maxclients <int>181 - 18Configures the amount of clients on the server (match only)
+map_rotateStarts map rotation (match only)
+set playlistFilename <string>“playlists_default.info”Configures which playlist to load (party only)
+playlist <int>0 - 99Loads playlist number +1 from playlist file (party only)
+

Supported gametypes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abbreviationgametype
warTeam Deathmatch
dmFree-for-all
domDomination
kothHeadquarters
sabSabotage
sdSearch and Destroy
arenaArena
ddDemolition
ctfCapture the Flag
oneflagOne-Flag CTF
gtnwGlobal Thermo-Nuclear War
+

Additional gametypes are possible with mods.

+

Supported maps

+

See List of map names

+

Match server

+

This is how you configure your server to run as a match server.

+

Server config

+

This is how you can configure your server to run as a match server. The configuration has to be done in the server.cfg file that your server is using.

+

General server configuration is required for general configuration options.

+

Info

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set sv_hostname <string>“IW4x Server”Sets the server hostname
set sv_securityLevel <int>230 - 256Configures the servers security level
set sv_motd <string>Sets a custom motd which is shown on the loadscreen when a player joins
sets _Admin <string>Configures admin name
sets _Email <string>Configures admin email
sets _Website <string>Configures website
sets _Location <string>Configures location
+

Non gameplay configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set rcon_password <string>""Configures password for rcon
set g_password <string>""Configures password for gameserver
set g_inactivity <int>1200 - 999Enable auto kick feature for idle/AFK players
set g_inactivitySpectator <int>1800 - 999Time in seconds before a spectator gets kicked
set g_logSync <int>10 - 11 = always flush games_mp.log, 0 = only flush on game end
set g_log <string>logs/games_mp.logConfigures gamelog filename
set sv_allowClientConsole <int>10 - 1Enable players ability to access server commands
set sv_maxPing <int>00 - 999Maximum ping allowed, any higher and players will get kicked
set sv_timeout <int>200 - 1800Timeout time period
set sv_reconnectlimit <int>30 - 1800How many times you can try to reconnect
set sv_pure <int>00 - 1Verifying client files
set sv_sayName <string>^7ConsoleName server-side ‘say’ commands show up as
set sv_floodProtect <int>10 - 1Chat Spam Protection
set sv_kickBanTime <int>3000 - 3600Configures kick ban duration
set scr_game_objectiveStreaks <int>10 - 1Enable Chopper, AC130 and Nuke
set scr_classic <int>00 - 1Enable IW3 killstreak system
set scr_intermission_time <int>300 - 999Change timer before server loads the next map (currently broken)
+

Base game configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set g_gametype <string>"war"Choose a gametype from the list
set scr_player_forcerespawn <int>10 - 1Players respawn automatically after being fragged
set scr_thirdperson <int>00 - 1Enable third-person mode
set scr_game_hardpoints <int>10 - 1Enable Killstreak rewards
set scr_hardpoint_allowhelicopter <int>10 - 1Allow Attack Helicopters
set scr_hardpoint_allowuav <int>10 - 1Allow UAV
set scr_hardpoint_allowartillery <int>10 - 1Allow Airstrikes
set scr_game_perks <int>10 - 1Allow players to have perks
set scr_game_allowkillcam <int>10 - 1Allow Killcam
set scr_nukeTimer <int>100 - 999Timer when nuke goes off
set scr_diehard <int>00 - 1Enable die-hard mode
set scr_teambalance <int>10 - 1Enable auto balance
set scr_game_spectatetype <int>20 - 2Allow Spectators. 0 = Disabled, 1 = Team/Player only, 2 = Free
set scr_player_suicidespawndelay <int>00 - 999Wait before you respawn if you committed suicide
set scr_player_sprinttime <int>40 - 999Sprint time, duration a player can run
+

Hardcore configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set g_hardcore <int>00 - 1Enable Hardcore Mode
set scr_game_deathpointloss <int>00 - 1Enable point loss on death
set scr_game_onlyheadshots <int>00 - 1Enable only headshots mode. You can only kill players by taking headshots.
set scr_player_maxhealth <int>300 - 100Percent of health players will have on respawn
set scr_team_fftype <int>10 - 3Enable Friendly Fire. 1 = on, 2 = reflect, 3 = shared
set scr_player_healthregentime <int>50 - 999Time it takes to recover damage
set scr_team_kickteamkillers <int>00 - 1Enable autokick for team kill
set scr_team_teamkillspawndelay <int>200 - 999Configure respawn penalty for team kill
+

Airdrop configuration

+

Higher weights increase random selection chance.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
paramterdefaultvaliddescription
set scr_airdrop_ac130 <int>30 - 1000Configures drop chance for AC130
set scr_airdrop_ammo <int>170 - 1000Configures drop chance for ammo
set scr_airdrop_counter_uav <int>150 - 1000Configures drop chance for Counter UAV
set scr_airdrop_emp <int>10 - 1000Configures drop chance for EMP
set scr_airdrop_harrier_airstrike <int>70 - 1000Configures drop chance for airstrike
set scr_airdrop_helicopter <int>70 - 1000Configures drop chance for helicopter
set scr_airdrop_helicopter_flares <int>50 - 1000Configures drop chance for helicopter flares
set scr_airdrop_helicopter_minigun <int>30 - 1000Configures drop chance for helicopter minigun
set scr_airdrop_nuke <int>00 - 1000Configures drop chance for nuke
set scr_airdrop_precision_airstrike <int>110 - 1000Configures drop chance for precision airstrike
set scr_airdrop_predator_missile <int>120 - 1000Configures drop chance for predator missile
set scr_airdrop_sentry <int>120 - 1000Configures drop chance for sentry
set scr_airdrop_stealth_airstrike <int>50 - 1000Configures drop chance for stealth bomber
set scr_airdrop_uav <int>170 - 1000Configures drop chance for UAV
+

Emergency airdrop configuration

+

Higher weights increase random selection chance.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_airdrop_mega_ac130 <int>20 - 1000Configures drop chance for AC130
set scr_airdrop_mega_ammo <int>120 - 1000Configures drop chance for ammo
set scr_airdrop_mega_counter_uav <int>160 - 1000Configures drop chance for Counter UAV
set scr_airdrop_mega_emp <int>00 - 1000Configures drop chance for EMP
set scr_airdrop_mega_harrier_airstrike <int>50 - 1000Configures drop chance for airstrike
set scr_airdrop_mega_helicopter <int>50 - 1000Configures drop chance for helicopter
set scr_airdrop_mega_helicopter_flares <int>30 - 1000Configures drop chance for helicopter flares
`set scr_airdrop_mega_helicopter_minigun 20 - 1000Configures drop chance for helicopter minigun
set scr_airdrop_mega_nuke <int>00 - 1000Configures drop chance for nuke
set scr_airdrop_mega_precision_airstrike <int>100 - 1000Configures drop chance for precision airstrike
`set scr_airdrop_mega_predator_missile 140 - 1000Configures drop chance for predator missile
set scr_airdrop_mega_sentry <int>160 - 1000Configures drop chance for sentry
set scr_airdrop_mega_stealth_airstrike <int>30 - 1000Configures drop chance for stealth bomber
set scr_airdrop_mega_uav <int>120 - 1000Configures drop chance for UAV
+

Free for all gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_dm_scorelimit <int>15000 - 99999Score limit to win the game
set scr_dm_timelimit <int>100 - 999Duration in minutes for the game to end if the score limit isn't reached
set scr_dm_playerrespawndelay <int>0-1 - 999-1 is no respawn delay, 0 is automatic, > 0 is X seconds
set scr_dm_numlives <int>00 - 999Number of lives per Player, 0 for unlimited
set scr_dm_promode <int>00 - 1Extra bullet damage unconfirmed
+

Domination gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_dom_scorelimit <int>2000 - 99999Configure score limit to win the game
set scr_dom_timelimit <int>600 - 999Duration in minutes for the game to end if the score limit isn't reached
set scr_dom_playerrespawndelay <int>-1-1 - 999-1 is no respawn delay, 0 is automatic, > 0 is X seconds
set scr_dom_waverespawndelay <int>00 - 999Duration in seconds before the first respawn in each round
set scr_dom_numlives <int>00 - 999Number of lives per Player, 0 for unlimited
set scr_dom_roundlimit <int>10 - 999Rounds per game
set scr_dom_winlimit <int>10 - 999Amount of wins needed to win a round-based game
set scr_dom_promode <int>00 - 1Extra bullet damage unconfirmed
+

Demolition gametype Settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_dd_scorelimit <int>20 - 99999Score limit needed to win
set scr_dd_timelimit <float>2.50 - 999Duration in minutes for the game to end if the score limit isn’t reached
set scr_dd_roundswitch <int>1Rounds before the teams switch sides
set scr_dd_bombtimer <float>45Time the bomb takes to detonate
set scr_dd_defusetime <float>5Time taken to defuse the bomb
set scr_dd_extratime <int>3
set scr_dd_numlives <int>00 - 999Lives per player, 0 for unlimited
set scr_dd_planttime <float>50 - 99Time it takes to plant a bomb in seconds
set scr_dd_roundlimit <int>30 - 99Rounds the game is limited to, if there are no winners
set scr_dd_playerrespawndelay <int>0-1 - 999-1 is no respawn delay, 0 is automatic, > 0 is X seconds
set scr_dd_promode <int>00 - 1Extra bullet damage unconfirmed
+

Search and destroy gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_sd_scorelimit <int>10 - 99999Score limit required to win the game
set scr_sd_timelimit <float>2.50 - 999Duration in minutes for the game to end if the score limit isn’t reached
set scr_sd_playerrespawndelay <int>-1-1 - 999-1 is no respawn delay, 0 is automatic, > 0 is X seconds
set scr_sd_waverespawndelay <int>00 - 999Delay for first respawn
set scr_sd_numlives <int>10 - 999Number of lives per player per game
set scr_sd_roundlimit <int>00 - 99Rounds the game is limited to 0 for unlimited
set scr_sd_winlimit <int>40 - 999amount of wins needed to win a round-based game
set scr_sd_roundswitch <int>1after X rounds, switch sides
set scr_sd_bombtimer <int>45Time taken for the bomb to detonate
set scr_sd_defusetime <int>5Time taken to defuse the bomb
set scr_sd_multibomb <int>00 - 1allow multiple people to ‘have the bomb’
set scr_sd_planttime <int>5
set scr_sd_promode <int>00 - 1Extra bullet damage unconfirmed
+

Sabotage gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_sab_scorelimit <int>00 - 99999Score limit to win the match
set scr_sab_timelimit <int>100 - 999Duration in minutes for the game to end if the score limit isn’t reached
set scr_sab_bombtimer <int>45Duration in seconds the bomb takes to detonate
set scr_sab_defusetime <int>5Time taken to defuse the bomb
set scr_sab_hotpotato <int>0One bomb that the teams must fight over. One defending and one have to plant at the site.
set scr_sab_numlives <int>00 - 999Number of lives players get
set scr_sab_planttime <int>2.5Time taken to plant the bomb
set scr_sab_playerrespawndelay <float>7.5-1 - 999Time before respawn
set scr_sab_roundlimit <int>10 - 99Rounds per game
set scr_sab_roundswitch <int>1Rounds needed to be played before the teams switch sides
set scr_sab_waverespawndelay <int>00 - 999Time delay for first respawn before the game
set scr_sab_promode <int>00 - 1Extra bullet damage unconfirmed
+

Capture the flag gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_ctf_scorelimit <int>30 - 99999Target score before the round ends
set scr_ctf_timelimit <int>100 - 999Duration in minutes for the game to end if the score limit isn’t reached
set scr_ctf_numlives <int>00 - 999Number of lives per player 0 for unlimited
set scr_ctf_playerrespawndelay <int>0-1 - 999Respawn wait in seconds
set scr_ctf_roundlimit <int>10 - 99How many rounds match would last
set scr_ctf_roundswitch <int>1Rounds before the teams switch sides
set scr_ctf_waverespawndelay <int>100 - 999Time delay for first respawn before the game
+

One flag gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_oneflag_scorelimit <int>10 - 99999Target score before the round ends
set scr_oneflag_timelimit <int>30 - 999Duration in minutes for the game to end if the score limit isn’t reached
set scr_oneflag_numlives <int>00 - 999Number of lives per player, 0 for unlimited
set scr_oneflag_playerrespawndelay <int>0-1 - 999Respawn wait in seconds
set scr_oneflag_roundlimit <int>10 - 99How many rounds match would last
set scr_oneflag_roundswitch <int>1Rounds before the teams switch sides
set scr_oneflag_waverespawndelay <int>00 - 999
+

Headquarters gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parametervaliddefaultdescription
set scr_koth_scorelimit <int>2500 - 99999Score limit to win the game
set scr_koth_timelimit <int>100 - 999Duration in minutes the game will continue if the score isn’t reached
set scr_koth_numlives <int>00 - 999Number of lives per game. 0 for unlimited.
set scr_koth_playerrespawndelay <int>0-1 - 999Players respawn wait
set scr_koth_roundlimit <int>10 - 99Rounds to be played
set scr_koth_roundswitch <int>1Rounds to be played before teams switch sides
set scr_koth_winlimit <int>10 - 999Rounds per game
set scr_koth_waverespawndelay <int>00 - 999First respawn delay for each round
set scr_koth_proMode <int>00 - 1Extra bullet damage unconfirmed
+

Arena gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_arena_scorelimit <int>10 - 99999Score limit to win the game
set scr_arena_timelimit <float>2.50 - 999Duration in minutes the game will continue if the score isn’t reached
set scr_arena_numlives <int>10 - 999Number of lives per game 0 for unlimited
set scr_arena_roundlimit <int>00 - 99Rounds to be played
set scr_arena_roundswitch <int>3Rounds before the teams switch sides
set scr_arena_winlimit <int>40 - 999rounds per game
set scr_arena_promode <int>00 - 1Extra bullet damage unconfirmed
+

Global thermonuclear war gametype settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set scr_gtnw_scorelimit <int>1000 - 99999Score limit to win the game
set scr_gtnw_timelimit <int>60 - 999Duration in minutes the game will continue if the score isn’t reached
set scr_gtnw_numlives <int>00 - 999Number of lives per game, 0 for unlimited
set scr_gtnw_playerrespawndelay <int>0-1 - 999Players respawn wait
set scr_gtnw_roundlimit <int>10 - 99Rounds to be played
set scr_gtnw_roundswitch <int>0Rounds before the teams switch sides
set scr_gtnw_waverespawndelay <int>00 - 999First respawn delay for each round
set scr_gtnw_winlimit <int>10 - 999rounds per game
set scr_gtnw_promode <int>00 - 1Extra bullet damage unconfirmed
+

Party server

+

This is how you configure your server to run as a party server.

+

Server config

+

This part of the configuration has to be done in the server.cfg file that your server is using. Please put your server configuration file in the Players folder in your MW2 root directory.

+

General server configuration is required for general configuration options.

+

Info

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set sv_hostname <string>"IW4x Server"Sets the server hostname
set sv_securityLevel <int>230 - 256Configures the servers security level
set sv_motd <string>Sets a custom motd which is shown on the loadscreen when a player joins
sets _Admin <string>Configures admin name
sets _Email <string>Configures admin email
sets _Website <string>Configures website
sets _Location <string>Configures location
+

Non gameplay configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
parameterdefaultvaliddescription
set rcon_password <string>""Configures password for rcon
set g_password <string>""Configures password for gameserver
set g_inactivity <int>1200 - 999Enable auto kick feature for idle/AFK players
set g_inactivitySpectator <int>1800 - 999Time in seconds before a spectator gets kicked
set g_logSync <int>10 - 11 = always flush games_mp.log, 0 = only flush on game end
set g_log <string>logs/games_mp.logConfigures gamelog filename
set sv_allowClientConsole <int>10 - 1Enable players ability to access server commands
set sv_maxPing <int>00 - 999Maximum ping allowed, any higher and players will get kicked
set sv_timeout <int>200 - 1800Timeout time period
set sv_reconnectlimit <int>30 - 1800How many times you can try to reconnect
set sv_pure <int>00 - 1Verifying client files
set sv_sayName <string>^7ConsoleName server-side ‘say’ commands show up as
set sv_floodProtect <int>10 - 1Chat Spam Protection
set sv_kickBanTime <int>3000 - 3600Configures kick ban duration
set scr_game_objectiveStreaks <int>10 - 1Enable Chopper, AC130 and Nuke
set scr_classic <int>00 - 1Enable IW3 killstreak system
set scr_intermission_time <int>300 - 999Change timer before server loads the next map (currently broken)
+

Required mod configuration has to be done in this file as well.

+

Playlist config

+

The following configuration has to be done in your playlist. Do not edit your iw4x/playlist_default.info file directly as this file is updated via the updater and will be resetted to defaults.

+

Instead put your playlist in the players folder in your MW2 root directory.

+

General

+

Playlists are limited to 32 Gametypes and 23 playlists. It is possible to create multiple seperate playlists. A single server can only run a single playlist at a time.

+

Function script

+

In playlists you can use the following parameters to configure your game server:

+
    +
  • gametype <string>: Unique name for your configured gametype. Everything until the next gametype configures your gametype. Eg.: gametype tdm
  • +
  • name <string> "<string>": Configures a specific localized name for the gametype which is shown to the user. Eg.: name english "Team Deathmatch"
  • +
  • script: Gametype the game actually loads. Eg.: script war
  • +
  • More gametypes can be found here
  • +
  • teambased: Currently unknown
  • +
  • hardcore: Currently unknown
  • +
  • rule <string> <string>: Rule is used to customize dvars. Eg.: rule scr_thirdperson 0
  • +
  • For possible values you can check the options for your preferred gametype here
  • +
+

Playlist

+

The first playlist in your file has to be playlist 1. To start this playlist on your server, you have to pass the parameter +set playlist 0.

+
    +
  • playlist <int>: Configures playlist
  • +
  • rule <string> <string>: Overwrites rules configured in your function.
  • +
  • <mapname>,<gametype>,<mapweight>: Configures your playlist. Put every map you want in your map rotation on a seperate line. The higher the mapweight the more likely this map will be picked. Eg.: mp_rust,tdm,4 or mp_fuel2,tdm,1
  • +
+

Docker

+

It is possible to run an IW4x server on Linux as an container using Docker, but you will have to build the image by yourself.

+ +

At first create a few folders

+
$ mkdir -p iw4x-dedicated/image
+$ mkdir -p iw4x-dedicated/data
+$ cd iw4x-dedicated/

Then create the following file with the name Dockerfile inside of iw4x-dedicated/image

+
FROM alpine:3.8
+LABEL maintainer="The IW4x Team" \
+        com.iw4x.description="Alpine based Wine environment for IW4x dedicated server."
+
+ENV LANG en_US.utf8
+
+# UID and GID of the iw4x user the server is running as.
+ARG USER_ID=1000
+ARG GROUP_ID=1000
+
+
+# This hack is necessary, because it is the only way to install 32-bit wine on 64-bit alpine.
+RUN echo "x86" > /etc/apk/arch &&\
+        apk add --no-cache wine &&\
+        echo "x86_64" > /etc/apk/arch &&\
+        addgroup -g ${GROUP_ID} iw4x &&\
+        adduser -h "/iw4x" -G iw4x -D -u ${USER_ID} iw4x
+
+ENV WINEARCH win32
+ENV IW4X_PORT 28960
+ENV IW4X_ARGS -dedicated +set net_port ${IW4X_PORT} +exec server.cfg +party_enable 0 +sv_maxclients 12 +map_rotate
+
+USER iw4x
+WORKDIR /iw4x
+
+RUN mkdir -p server
+
+COPY ./init.sh /iw4x/init.sh
+
+VOLUME ["/iw4x/server"]
+
+EXPOSE ${IW4X_PORT}/udp
+EXPOSE ${IW4X_PORT}
+
+CMD ["/bin/sh", "/iw4x/init.sh"]

And the following file with the name init.sh inside of iw4x-dedicated/image

+
#!/bin/sh -e
+cd server/
+wine iw4x.exe ${IW4X_ARGS}

Do not forget to make init.sh executeable

+
$ chmod +x image/init.sh

Now create a file called docker-compose.yml inside of iw4x-dedicated with the following content

+
version: "3.7"
+services:
+  server:
+    build:
+      context: "./image/"
+      args:
+        # You can change these matching the ids of your current user, except if you are root.
+        - USER_ID=1000
+        - GROUP_ID=1000
+    image: "iw4x:latest"
+    # Will auto-restart your server if it crashes.
+    restart: always
+    environment:
+      # Do not forget to adjust the ports section down below if chaning the port.
+      IW4X_PORT: 28960
+      # Here you can change the commandline arguments of your server.
+      IW4X_ARGS: "-dedicated +set net_port ${IW4X_PORT} +exec server.cfg +party_enable 0 +sv_maxclients 12 +map_rotate"
+    volumes:
+      # Copy the whole dedicated server into iw4x-dedicated/data/ and make sure the files are owned by the values of ${USER_ID} and ${GROUP_ID}
+      - "./data/:/iw4x/server/"
+    ports:
+      - "28960:28960/udp"
+      - "28960:28960"

After you have copied the serverfiles into iw4x-dedicated/data/ and have adjusted the file ownerships you can build your Docker image and start your server

+
$ docker-compose build --compress --force-rm --no-cache --pull
+$ docker-compose up -d

If you want to see the output of your server you can use

+
$ docker-compose logs -f

IW4x Server API

+

IW4x dedicated servers have an api endpoint that you can use to get some information about the server. The currently implemented endpoints are documented here.

+

Endpoints

+
    +
  • /serverlist
  • +
  • /info
  • +
  • /list
  • +
  • /map
  • +
+

Serverlist

+

The /serverlist endpoint returns a json array of all known servers excluding itself. If you query your own server you will in most cases not get a single of your own hosted servers (as long as they are on the same IP). This is a limitation of how NAT works and cannot be fixed. As a workaround I suggest merging your own servers with the array.

+

Example: ["x.x.x.x:28960", "x.x.x.x:28960"]

+

Info

+

The /info endpoint returns a json with the server's scoreboard and some server information.

+

List/Map

+

The /list & /map endpoints are used in our implementation of the mod/map download. The files are downloaded from /file/<name>. You can only download active mods and maps from the server.

+

Gameserver file optimization

+

You can delete some files that are not needed when hosting a dedicated server. This will save some space on your hard drive, but is not necessary.

+

The following files can be safely deleted:

+
    +
  • logo.bmp
  • +
  • splash.bmp
  • +
  • main\video
  • +
  • main\iw_01.iwd
  • +
  • main\iw_02.iwd
  • +
  • main\iw_03.iwd
  • +
  • main\iw_04.iwd
  • +
  • main\iw_05.iwd
  • +
  • main\iw_06.iwd
  • +
  • main\iw_07.iwd
  • +
  • main\iw_08.iwd
  • +
  • main\iw_09.iwd
  • +
  • main\iw_10.iwd
  • +
  • main\iw_11.iwd
  • +
  • main\iw_12.iwd
  • +
  • main\iw_13.iwd
  • +
  • main\iw_14.iwd
  • +
  • main\iw_15.iwd
  • +
  • main\iw_16.iwd
  • +
  • main\iw_17.iwd
  • +
  • main\iw_18.iwd
  • +
  • main\iw_19.iwd
  • +
  • main\iw_20.iwd
  • +
  • main\iw_21.iwd
  • +
  • main\iw_22.iwd
  • +
  • main\iw_23.iwd
  • +
  • main\iw_dlc4_01.iwd
  • +
  • main\iw_dlc6_00.iwd
  • +
  • main\iw_dlc7_00.iwd
  • +
  • main\localized_english_iw00.iwd
  • +
  • main\localized_english_iw01.iwd
  • +
  • main\localized_english_iw02.iwd
  • +
  • main\localized_english_iw03.iwd
  • +
  • main\localized_english_iw04.iwd
  • +
  • main\localized_english_iw05.iwd
  • +
  • main\localized_english_iw06.iwd
  • +
  • main\localized_english_iw07
  • +
  • miles
  • +
  • iw4x\video
  • +
  • iw4x\iw4x_01.iwd
  • +
+

The following files can safely be modified (open them with 7-Zip or WinRAR):

+

main\iw_00.iwd
Delete everything inside the file except fileSysCheck.cfg.

+

main\iw_dlc3_00.iwd
Inside the file delete the images and sound folder.

+

main\iw_dlc4_00.iwd
Inside the file delete the images folder.

+

main\iw_dlc5_00.iwd
Inside the file delete the images and Sound folder.

+

main\iw_dlc5_01.iwd
Inside the file delete the images folder.

+

main\iw_dlc8_00.iwd
Inside the file delete the images folder.

+

iw4x\iw4x_00.iwd
Inside the file delete the images and vision folder.

+

List of map names

+

Basegame

+

mp_afghan - Afghan
mp_derail - Derail
mp_estate - Estate
mp_favela - Favela
mp_highrise - Highrise
mp_invasion - Invasion
mp_checkpoint - Karachi
mp_quarry - Quarry
mp_rundown - Rundown
mp_rust - Rust
mp_boneyard - Scrapyard
mp_nightshift - Skidrow
mp_subbase - Sub Base
mp_terminal - Terminal
mp_underpass - Underpass
mp_brecourt - Wasteland

+

DLC1 STIMULUS

+

mp_complex - Bailout
mp_crash - Crash
mp_overgrown - Overgrown
mp_compact - Salvage
mp_storm - Storm

+

DLC2 RESURGENCE

+

mp_abandon - Carnival
mp_fuel2 - Fuel
mp_strike - Strike
mp_trailerpark - Trailer Park
mp_vacant - Vacant

+

DLC3 NUKETOWN

+

mp_nuked - Nuketown

+

DLC4 CLASSICS 1

+

mp_cross_fire - Crossfire
mp_bloc - Bloc
mp_cargoship - Cargoship

+

DLC5 CLASSICS 2

+

mp_killhouse - Killhouse
mp_bog_sh - Bog

+

DLC6 FREIGHTER

+

mp_cargoship_sh - Freighter

+

DLC7 RESURRECTION

+

mp_shipment_long - Long:Shipment
mp_rust_long - Long: Rust
mp_firingrange - Firing Range

+

DLC8 RECYCLED

+

mp_storm_spring - Chemical Plant
mp_fav_tropical - Tropical: Favela
mp_estate_tropical - Tropical: Estate
mp_crash_tropical - Tropical: Crash
mp_bloc_sh - Forgotten City

+

SP MAPS to MP

+

oilrig - Oilrig
iw4_credits - Test map
co_hunted - Village

+

Mods

+ +

Create a mod

+

Nothing here yet :(

+

Create a map

+

This is how you create a custom map for IW4x.

+

Requirements

+

You have to fulfill the following requirements to be able to create a custom map for IW4x:

+ +

Create a map

+

Creating a custom map requires to create a map for Call of Duty 4 first.
For that you can follow various existing tutorials.
You can then follow the steps to convert your map for IW4x.

+

Convert a map

+

Notes

+
    +
  • Automatic conversion for now only works for multiplayer maps
  • +
  • Your map might have a lot of bugs, map conversion is in an early alpha stage
  • +
  • Once we update the tools, you might have to reconvert your map
  • +
+

Conversion

+
    +
  • Open the Build Map tab in the IW4x Mod-Builder
  • +
  • You will see a list of maps if you correctly configured all paths:
      +
    • Stock Maps are the maps located in your <Call of Duty 4>/zone/<language>/ directory
    • +
    • User Maps are the maps located in your <Call of Duty 4>/usermaps/ directory
    • +
    • Other Maps are the maps you already converted, they will be in your <Modern Warfare 2>/mods/ directory
    • +
    +
  • +
  • Select the map you want to convert and click Export COD4 Map, this will export all required files into your <Modern Warfare 2>/mods/ directory
  • +
  • After the export, you can optionally edit the map’s CSV source[1] or edit the arena to change the name or teams of your map.
  • +
  • Click on Build MW2 Map to create the map, it will be located in <Modern Warfare 2>/usermaps/
  • +
  • At this point, you are able to test your map by clicking Run MW2 Map
  • +
+

Deployment

+

Once you followed all the steps for converting your map, you have to generate the IWD +by clicking Generate IWD for the map you selected in the IW4x Mod-Builder. This will compress the images for your map. +All required files should be located in <Modern Warfare 2>/usermaps/<your map>/. +Those are all files you need, you can then run the map on your server or client using map <your map>. +Players connecting to your server will automatically download all required ressources to play the map.

+

[1] Sometimes, you will get missing techset errors. This means you will need other dependency maps in your CSV. For now, as it is still hard to find the correct dependency, you can contact the IW4x staff on discord.

+

Seeing few servers

+

When playing IW4x you may notice the serverlist occasionally showing less servers or showing different amounts of servers for your friends.

+

This is due to IW4x's decentralisation. Under normal circumstances you would receive a list of servers from one or multiple master servers, like so:

IW4x however uses a decentralized system in which servers directly inform the client of their presence and send their information, like so:

So instead of having one incoming connection delivering a server list, you have multiple, potentially hundreds of simultaneous incoming connections sending information to your client.

+

So why does this cause problems?

+

Seeing few servers is almost always a problem of your router; old, low-end routers may not be able to handle the amount of incoming connections at once, some might even crash due to that; newer, high-end routers may see the amount of incoming connections as a DDoS attempt, therefore blocking them.
This will cause servers to not appear. IW4x developers attempted to fix this by slowing down the requests, spreading them out over a longer time period, this is where the Dvars net_serverQueryLimit and net_serverFrames come in.

+

net_serverQueryLimit defines how many servers are queried per query frame. A higher number means more servers simultaneously sending their information to you. A value of 10 will mean that ten servers are sending their information to you per query frame.
net_serverFrames defines the amount of query frames per second. A value of 1 will mean that there is only one query frame per real time second.
Together, these two Dvars form a formula you can use to calculate the amount of servers being queried per second:
(value of serverQueryLimit) * (value of serverFrames) / 1 second
The default values for these Dvars using the fix DLL file are 10 each. This means that there are 10 * 10 / 1 second = 100 servers / second requested. The values are higher without the DLL.
Values of 3 on each will mean that there are 3 * 3 / 1 second = 9 servers / second requested, significantly lowering the amount of incoming connections and helping with the server list.

+ +
+
+
+ + + diff --git a/website/iw6/motd.png b/website/iw6/motd.png new file mode 100644 index 0000000..06f7226 Binary files /dev/null and b/website/iw6/motd.png differ diff --git a/website/iw6/motd.txt b/website/iw6/motd.txt new file mode 100644 index 0000000..6ae0b79 --- /dev/null +++ b/website/iw6/motd.txt @@ -0,0 +1,7 @@ +^3Welcome to IW6x^7 + +Support us on Patreon to get special rewards: ^1patreon.com/XLabsProject^7 + +Follow us on Twitter: ^5@XLabsProject^7 + +Visit ^2https://xlabs.dev ^7for more info! diff --git a/website/iw6x_controllers.html b/website/iw6x_controllers.html new file mode 100644 index 0000000..a504087 --- /dev/null +++ b/website/iw6x_controllers.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + IW6x Controller Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW6x +
+

IW6x CONTROLLER GUIDE

+
+

An in-depth guide on how to setup controllers for IW6x.

+
+
+ + +
+
+

+ Xbox +

+

IW6x should support xbox controllers out of the box. If it does not work, make sure "Gamepad Support" is enabled in settings.

+

Playstation

+
    +
  1. Download DS4Windows, make sure you pick DS4Windows_xxx_x64.zip
  2. +
  3. Install/Extract it to a safe place and open it.
  4. +
  5. It should detect your controller, but if it does not, you may need to install the driver.
  6. +
  7. Check if gamepad works in IW6x. If there is still problems, you can join the Discord and ask for support in the #iw6x-support channel.
  8. +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw6x_download.html b/website/iw6x_download.html new file mode 100644 index 0000000..16c7e8e --- /dev/null +++ b/website/iw6x_download.html @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + IW6x Download | X Labs + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW6x +
+
+
+

IW6x Download

+ + + +

+ Follow us on twitter to unlock the download:
+    Twitter +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw6x_errors.html b/website/iw6x_errors.html new file mode 100644 index 0000000..b0d6724 --- /dev/null +++ b/website/iw6x_errors.html @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + IW6x Errors | X Labs + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+ + +
+
+

+ + Q: MENU_CONTENT_NOT_AVAILABLE +

+ MENU_CONTENT_NOT_AVAILABLE +

+ A: Install the DLCs. +

+
+
+ + + +
+
+

+ + Q: Couldn't find the bsp for this map. +

+ Couldn't find the bsp for this map +

+ A: Install the DLCs, or if you are 100% sure you installed them right, just restart your game. +

+
+
+ + + +
+
+

+ + Q: Script Error: An error has occurred in the script on this page. +

+ Script Error +

+ A: Try restarting the launcher. If it still happens, make a shortcut of IW6x.exe and add -multiplayer at the end of the target field. +

+ Solution -multiplayer +
+
+ + + + +
+
+

+ + Q: Unable to load import '#4' from module 'XINPUT1_3.dll' +

+ XINPUT1_3.dll +

+ A: Install DirectX. +

+
+
+ + + + +
+
+

+ + Q: Blank Menu (No Singleplayer/Multiplayer Option) +

+ Blank Menu +

+ A: Try restarting the launcher or, if it still happens, make a shortcut of IW6x.exe and add -multiplayer at the end of the target field. +

+
+
+ + + + +
+
+

+ + Q: Disc read error +

+ Disc read error +

+ A: Verify your game files through Steam, or use the IW6x Repair Guide. +

+
+
+ + + + +
+
+

+ + Q: Failed to read game binary +

+ Failed to read game binary +

+ A: Make sure IW6x.exe is in your Ghosts directory. If this still happens, verify your game files using Steam or use the IW6x Repair Guide +

+
+
+ + + + +
+
+

+ + Q: The code execution cannot proceed because steam_api64.dll was not found. +

+ steam_api64.dll was not found +

+ A: Make sure you are launching the game with IW6x.exe, instead of iw6mp64_ship.exe. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw6x_faq.html b/website/iw6x_faq.html new file mode 100644 index 0000000..33788ea --- /dev/null +++ b/website/iw6x_faq.html @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + IW6x FAQ | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+ +
+
+

+ + Q: How do I change my name? +

+

+ A: To change your name, open the in-game console (press the ~ key) and type name yourname. +

+
+
+ + + +
+
+

+ + Q: My classes don't work online? +

+

+ A: For now, you must make classes in private match. +

+
+
+ + + +
+
+

+ + Q: Can I use my Steam copy of Ghosts to play IW6x? +

+

+ A: You certainly can! A Steam copy of Ghosts is the prefered way to play IW6x. Read the Install Guide to learn how to use your Steam copy. +

+
+
+ + + +
+
+

+ + Q: On IW6x, can I play with players on Steam or Steam players play with me? +

+

+ A: IW6x is entirely seperate from Steam services, so it is not possible to play with people playing on the Steam version of Ghosts. You can, however, invite your Steam Ghosts friends to install IW6x, and then you'll be able to play together. +

+
+
+ + +
+
+

+ + Q: Will IW6x get me VAC banned? +

+

+ A: The short answer is no. IW6x is completely external to Steam and Steam Servers (You don't play with Steam users). It's impossible to get VAC banned. IW6x players only play with fellow IW6x players as the servers are completely seperate from Steam. + You are at no risk of recieving a VAC ban. +

+
+
+ + + + + + +
+
+

+ + Q: Does my Steam rank and stats carry over to IW6x? +

+

+ A: No. When you start IW6x, you will be starting fresh. As stated above, IW6x is external from Steam. So you will have a separate rank, classes, title, etc. When, and if, you go back to Steam Ghosts, you will still have the same rank you had before in + Steam. IW6x does not alter this at all. However, you can always manually set your rank back to the level you were if you wish as this is allowed, or just use the command unlockstats to get max prestige level 60 everything unlocked. +

+
+
+ + + +
+
+

+ + Q: How do I change my sensitivity? +

+

+ A: You can change your sensitivty either though the options menu in-game or for more precise values use the command sensitivty 1 (Replace the number with your desired sensitivty). +

+
+
+ + + +
+
+

+ + Q: How can I change my Field of View (FOV)? +

+

+ A: Using the in-game menu or using the console command cg_fov 90 (Replace the number with your desired FOV). +

+
+
+ + + +
+
+

+ + Q: How can I use cheat protected commands in private match such as noclip? +

+

+ A: You must use the sv_cheats 1 command to enable cheats. For more information on console commands, see the Console Commands Guide. +

+
+
+ + + +
+
+

+ + Q: How can I improve my FPS? +

+

+ A: The best way is to go into the graphic options of the game and lower all the settings. The next step you can take is to lower your games resolution. Keep lowering it until you reach your desired FPS. If your FPS is still low, there's a good chance + your PC isn't good enough to play IW6x. +

+
+
+ + + +
+
+

+ + Q: Why is my gaming laptop getting low FPS? +

+

+ A: By default many gaming laptops use intergrated CPU graphics to preserve battery. It may be the case that you need to force IW6x to use your dedicated graphics card. +

+
    +
  1. Go to the NVIDIA Control Panel by right clicking on your desktop and clicking on "NVIDIA Control Panel".
  2. +
  3. In the default screen that pops up (it should be "manage 3D settings", and the "Program Settings" tab should be automatically selected), under "1. Select a program to customize:" hit the "Add" button.
  4. +
  5. From here, navigate to the folder where your IW6x is installed.
  6. +
  7. Select IW6x.exe and click Open.
  8. +
  9. Then, under "2. Select the preferred graphics processor for this program". Open the drop-down menu and select "High-performance NVIDIA processor".
  10. +
  11. Finally, hit Apply in the far bottom right corner, and the correct GPU should be used for the game.
  12. +
+
+
+ + +
+
+

+ + Q: How can I report cheaters? +

+

+ A: Report cheaters to the admins or owner of the server. Most server owners will provide links to their Discord or website. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw6x_privatematch.html b/website/iw6x_privatematch.html new file mode 100644 index 0000000..11393e1 --- /dev/null +++ b/website/iw6x_privatematch.html @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + IW6x Private Match Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW6x +
+

IW6x PRIVATE MATCH GUIDE

+
+

An in-depth guide on how to play private match with friends for IW6x.

+
+
+ + +
+
+

+ + IW6x Private Match Guide: +

+
    +
  1. You can go to here to get your IP Address and message anyone who wants to join it.
  2. +
  3. Start IW6x and launch a private match.
  4. +
  5. Tell anyone who wants to join to open the console by using the tilde key while at the main menu.
  6. +
  7. Get them to enter the following command, replacing 'HostsIPAddress' with the IP you previously sent him: /connect HostsIPAddress:27016
  8. +
+

Failed to join:

+
    +
  1. If you followed the above correctly and your friends are unable to join them you the host of the private match will need to port forward in order for them to connect to you.
  2. +
  3. Port Forward port 27016 UDP & TCP
  4. +
  5. You can find how to do this by Googling 'YourRouterName Port Forwarding'
  6. +
  7. Note: If port forwarding is too complex, just stick to playing public servers, or maybe join an empty server so you have the same experience as a private game.
  8. +
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw6x_repair.html b/website/iw6x_repair.html new file mode 100644 index 0000000..dcc5211 --- /dev/null +++ b/website/iw6x_repair.html @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + IW6x Repair Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW6x +
+

IW6x REPAIR GUIDE

+
+

An in-depth guide on how to repair a broken IW6x install.

+
+
+ + +
+
+ +

+ Getting Started: +

+
    +
  1. Locate your IW6x Install, and make note of the folder name and folder path (Your folder name may differ from the example below).
  2. + +
  3. Download the following torrent and open it with qBittorent.
  4. +
  5. Once prompted with the following screen click on the icon marked in red:
  6. + +
  7. Browse to the location of your IW6x folder and mark it by clicking on it once. Now click "Select Folder":
  8. + +
  9. IMPORTANT: Under the content layout dropdown select "Don't create subfolder", after that hit OK to start the repair process:
  10. + +
  11. The torrent client will now check your game files and re-download missing or corrupted ones.
  12. +
  13. Once your torrent says Seeding, click on the torrent and hit the pause button.
  14. + qBit Stop Seeding +

    Congratulations! Your game should now be repaired!

    +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/iw6x_scripting_documentation.html b/website/iw6x_scripting_documentation.html new file mode 100644 index 0000000..f763e9d --- /dev/null +++ b/website/iw6x_scripting_documentation.html @@ -0,0 +1,890 @@ + + + + + + + Documentation + + + + + + + + + + + +
+
+
+ +
+ + +
+

Home.md

+

Welcome to the iw6x-client wiki!

+

Scripting.md

+

Introduction

+

This is the documentation for the IW6x scripting API.
Please note that the API might change over time and thus break existing scripts.
The intention is to create the best API possible and thus negelecting backwards compatibility.
There are also plans to create a common API with the Plutonium team, which might also have a huge impact on the API again, once this is done.

+

The IW6x scripting API integrates into the game's scripting VM/environment, which might be more commonly known as GSC. +The scripts are written in LUA. In case you are not familiar with LUA, you should catch up here.

+

Quick & dirty Example

+

Here is a sample script. If you want to read code instead of documentation, this should cover up the basics of the API:

+

iw6x/scripts/heli/__init__.lua

+
function move_helicopter(heli, player)
+    local origin = player.origin
+    origin.z = origin.z + 1000
+
+    heli:setvehgoalpos(origin, 1)
+end
+
+function setup_helicopter(heli, player)
+    heli:setturningability(1)
+    heli:setspeed(40, 15, 5)
+    heli:setcandamage(false)
+
+    local moveinterval = game:oninterval(function() move_helicopter(heli, player) end, 5000)
+
+    function disconnect_callback()
+        moveinterval:clear()
+        heli:delete()
+    end
+
+    player:onnotifyonce("disconnect", disconnect_callback)
+end
+
+function spawn_helicopter(player)
+    local origin = player.origin;
+    local angles = player.angles;
+
+    origin.z = origin.z + 1000.0;
+
+    local heli = game:spawnhelicopter(player, origin, angles, "cobra_mp", "vehicle_battle_hind")
+
+    setup_helicopter(heli, player)
+end
+
+function player_spawned(player)
+    print("Player spawned: " .. player.name)
+    player:freezecontrols(false)
+
+    spawn_helicopter(player)
+end
+
+function player_connected(player)
+    print("Player connected: " .. player.name)
+
+    player:onnotifyonce("spawned_player", function() player_spawned(player) end)
+end
+
+level:onnotify("connected", player_connected)

File structure

+

All scripts need to be placed in the iw6x/scripts folder in your Call of Duty: Ghosts installation folder.
You will need to create a folder for your script, for example my_script. The main entrypoint is always the __init__.lua file in there.

+

The structure should be like this:

+
COD Ghosts
+├── iw6x
+│   ├── scripts
+│   │   ├── my_script
+│   │   │   ├── __init__.lua
+│   │   │   └── other_script.lua
+│   │   ├── my_next_script
+│   │   │   ├── __init__.lua
+│   │   │   └── script.lua
+└── iw6x.exe

To load another script, you can use the include function.
If you want tofor example include other_script.lua, use it like this:

+
include("other_script")
+-- [...]

Types

+

There are only 5 distinct types needed to interact with game's scripting environment.
LUA of course has more types, but what is meant by this is the following:
When dealing with events, functions or fields, no complex LUA types are supported, only these primitive types:

+

Strings

+

Strings are text enclosed by quotes: "Hello World". +There is not much to say about them, as they are a common concept.

+

Integer

+

Integers are all whole numbers like 0, 1000 or -15.
Boolean values, so true and false, also fall under that category and are handled as 1 and 0 respectively.

+

Float

+

Floating point values are all numbers like 1.05 or -10.5.
1.0 is also a floating point number literal. This is due to the dot notation, even though it's technically a whole number.

+

Vector

+

A vector is a type that groups exactly 3 floating point components. +It is used to represent coordinates, angles or colors in the game.

+

Creating a new vector can be done like this:

+
local my_vector = vector:new(1.0, 2.0, 3.0)
+
+-- Statements below will be true
+assert(my_vector.x == 1.0)
+assert(my_vector.y == 2.0)
+assert(my_vector.z == 3.0)

You can access the individual components using either x, y and z property accessors, or r, g and b (note that both notations are equivalent, meaning xr, yg and zb).

+
local my_vector = vector:new() -- vector is initialized as (0.0, 0.0, 0.0)
+my_vector.x = 5.0
+my_vector.y = 1.0
+my_vector.z = 2.0
+
+local val1 = my_vector.x -- val1 is 5.0
+local val2 = my_vector.r -- val2 is also 5.0, as x and r are equivalent
+
+-- The statements below are always true
+assert(my_vector.y == my_vector.g)
+assert(my_vector.z == my_vector.b)

Entity

+

Entities represent 'things' that 'exist' in the game. Players are for example entities.
Vehicles, hud elements, or the level are also entites. +They can fire events, but also call functions into the game's scripting environment. +Some entites also have certain fields (or properties), like an origin or a name.

+

Events

+

Entites can fire events. +The concept was previously known as notify and waittill in GSC.
Popular events are the connected event fired by the level, or the spawned_player event fired by players.

+

Listening

+

You can listen to any of these events by calling either onnotify or onnotifyonce on an entity:

+
function player_connected(player)
+  -- [...]
+end
+
+level:onnotify("connected", player_connected)

In the example above, the player_connected callback is called every time a player connects. +If you don't want to be notified every time, you can use onnotifyonce instead, which only fires once.

+

If you called onnotify (or onnotifyonce), but want to stop listening for notifications, you can call clear on the object is returned:

+
-- [...]
+
+local listener = level:onnotify("connected", player_connected)
+
+-- [...]
+
+listener:clear() -- stops listening for the 'connected' event

Events can carry arguments. For example the connected event by the level carries the connecting player as an argument. +You can get these arguments by adding paramters to the callback functions, as seen in the player_connected callback above.

+

Firing

+

To fire events, you can call the notify function on an entity:

+
function player_connected(player)
+  function my_callback()
+    print("Yay")
+  end
+
+  player:onnotify("my_cool_event", my_callback)
+
+  -- [...]
+
+  -- This fires the 'my_cool_event' event
+  player:notify("my_cool_event")
+end

You can also pass arguments to the event (there can be any amount, but they must be instances of one of the 5 primitive types):

+
function player_connected(player)
+  function my_callback(arg1, arg2)
+    print(arg1 .. " " .. arg2)
+  end
+
+  player:onnotify("my_cool_event", my_callback)
+
+  -- [...]
+
+  -- This fires the 'my_cool_event' event
+  player:notify("my_cool_event", "Hello", "World")
+end

Timers

+

Timers are required to delay the execution. GSC had a function called wait, which paused the execution of a thread for a specific amount of time.
Due to the control flow being different in LUA, there are neither threads, nor is there a wait function.

+

However, you can do something else to delay the execution. The functions ontimeout and oninterval, which need to be called on the game object, allow to do that. They take two arguments, a callback and a time to wait in milliseconds.

+
function callback()
+  -- [...]
+end
+
+game:ontimeout(callback, 1000)

Similar to the functions setTimeout and setInterval known from JavaScript, ontimeout executes the callback exactly once and oninterval executes it every time the given amount of time passes.

+

You might want to cancel a timeout or an interval. This can be done exactly like it works for events.
Both ontimeout and oninterval return a timer with a clear method:

+
function callback()
+  -- [...]
+end
+
+local timer = game:oninterval(callback, 1000)
+
+-- [...]
+
+timer:clear()

Timer callbacks don't take any arguments. If you want to pass an object, like a player, to a callback, you have to capture it, in a lambda for example:

+
function do_something(player)
+  -- [...]
+end
+
+-- [...]
+
+local player = -- [...]
+game:oninterval(function() do_something(player) end, 1000)

Functions

+

The game provides a set of global functions and entity methods.
The functions provided are pretty much the same as COD4 had them.
You can have a look at a COD4 scripting reference: https://znation.nl/cod4script/ (libcod category doesn't exist in IW6x!)
Also note that all functions and methods are lowercase in IW6x!

+

Global functions are functions that don't need an entity to work. They need to be called on the game object.
In the COD4 scripting reference, these functions don't have a Call this on: paragraph.
Here is an example:

+
game:ambientplay("embient_mp_highrise");

There are also member functions. These do have a paragraph called Call this on: in the COD4 reference. +Here is an example:

+
player:freezecontrols(false)

For a list of all functions and methods available in IW6x, you can have a look at the source code:
https://github.com/XLabsProject/iw6x-client/blob/develop/src/client/game/scripting/function_tables.cpp

+

Fields

+

Entities do have fields (or properties).
They differ for each type of entity. For example players have fields like name, origin or angles and hud elements have fields like x, y or alpha.
You can get and set them like this (only the 5 primitive types are supported):

+
local playername = player.name
+player.origin = vector:new()

Creating new properties or fields does not work yet, so you can't store own data in an entity.
You have to create your own construct for that.

+

Additionally, there is no complete list of which fields exist. level.players is not a field for example. This was a variable.
So not every variable that existed in GSC is available as a field in here.

+

Command execution

+

Unlike in GSC, the scripting API allows to execute console commands (for versions > v1.1.0).
You can use the executecommand function on the game object like this:

+
game:executecommand("map mp_prisonbreak")

Noteworthy things

+

Players can disconnect. It might sound obvious, but is important for scripting.
Executing functions on a player that doesn't exist won't work. Additionally, captured player objects need to be freed.

+

GSC used to have a function called endon, which allowed to terminate a thread as soon as an event happend, for example player endon("disconnect") +stopped the execution, when a player disconnected.

+

There is no such concept in IW6x. You will need to work with a combination of clearing timers and onnotifyonce, like this:

+
+function do_something()
+  -- [...]
+end
+
+local timer = game:oninterval(do_something, 1000)
+
+  -- [...]
+
+player:onnotifyonce("disconnect", function() timer:clear() end)
+
+
+
+
+ + + \ No newline at end of file diff --git a/website/js/bootstrap.min.js b/website/js/bootstrap.min.js new file mode 100644 index 0000000..d9c72df --- /dev/null +++ b/website/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");+function(t){var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(jQuery),+function(){function t(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function e(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;nthis._items.length-1||e<0)){if(this._isSliding)return void t(this._element).one(m.SLID,function(){return n.to(e)});if(i===e)return this.pause(),void this.cycle();var o=e>i?p.NEXT:p.PREVIOUS;this._slide(o,this._items[e])}},h.prototype.dispose=function(){t(this._element).off(l),t.removeData(this._element,a),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},h.prototype._getConfig=function(n){return n=t.extend({},_,n),r.typeCheckConfig(e,n,g),n},h.prototype._addEventListeners=function(){var e=this;this._config.keyboard&&t(this._element).on(m.KEYDOWN,function(t){return e._keydown(t)}),"hover"!==this._config.pause||"ontouchstart"in document.documentElement||t(this._element).on(m.MOUSEENTER,function(t){return e.pause(t)}).on(m.MOUSELEAVE,function(t){return e.cycle(t)})},h.prototype._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case d:t.preventDefault(),this.prev();break;case f:t.preventDefault(),this.next();break;default:return}},h.prototype._getItemIndex=function(e){return this._items=t.makeArray(t(e).parent().find(v.ITEM)),this._items.indexOf(e)},h.prototype._getItemByDirection=function(t,e){var n=t===p.NEXT,i=t===p.PREVIOUS,o=this._getItemIndex(e),r=this._items.length-1,s=i&&0===o||n&&o===r;if(s&&!this._config.wrap)return e;var a=t===p.PREVIOUS?-1:1,l=(o+a)%this._items.length;return l===-1?this._items[this._items.length-1]:this._items[l]},h.prototype._triggerSlideEvent=function(e,n){var i=t.Event(m.SLIDE,{relatedTarget:e,direction:n});return t(this._element).trigger(i),i},h.prototype._setActiveIndicatorElement=function(e){if(this._indicatorsElement){t(this._indicatorsElement).find(v.ACTIVE).removeClass(E.ACTIVE);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&t(n).addClass(E.ACTIVE)}},h.prototype._slide=function(e,n){var i=this,o=t(this._element).find(v.ACTIVE_ITEM)[0],s=n||o&&this._getItemByDirection(e,o),a=Boolean(this._interval),l=void 0,h=void 0,c=void 0;if(e===p.NEXT?(l=E.LEFT,h=E.NEXT,c=p.LEFT):(l=E.RIGHT,h=E.PREV,c=p.RIGHT),s&&t(s).hasClass(E.ACTIVE))return void(this._isSliding=!1);var d=this._triggerSlideEvent(s,c);if(!d.isDefaultPrevented()&&o&&s){this._isSliding=!0,a&&this.pause(),this._setActiveIndicatorElement(s);var f=t.Event(m.SLID,{relatedTarget:s,direction:c});r.supportsTransitionEnd()&&t(this._element).hasClass(E.SLIDE)?(t(s).addClass(h),r.reflow(s),t(o).addClass(l),t(s).addClass(l),t(o).one(r.TRANSITION_END,function(){t(s).removeClass(l+" "+h).addClass(E.ACTIVE),t(o).removeClass(E.ACTIVE+" "+h+" "+l),i._isSliding=!1,setTimeout(function(){return t(i._element).trigger(f)},0)}).emulateTransitionEnd(u)):(t(o).removeClass(E.ACTIVE),t(s).addClass(E.ACTIVE),this._isSliding=!1,t(this._element).trigger(f)),a&&this.cycle()}},h._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(a),o=t.extend({},_,t(this).data());"object"===("undefined"==typeof e?"undefined":i(e))&&t.extend(o,e);var r="string"==typeof e?e:o.slide;if(n||(n=new h(this,o),t(this).data(a,n)),"number"==typeof e)n.to(e);else if("string"==typeof r){if(void 0===n[r])throw new Error('No method named "'+r+'"');n[r]()}else o.interval&&(n.pause(),n.cycle())})},h._dataApiClickHandler=function(e){var n=r.getSelectorFromElement(this);if(n){var i=t(n)[0];if(i&&t(i).hasClass(E.CAROUSEL)){var o=t.extend({},t(i).data(),t(this).data()),s=this.getAttribute("data-slide-to");s&&(o.interval=!1),h._jQueryInterface.call(t(i),o),s&&t(i).data(a).to(s),e.preventDefault()}}},o(h,null,[{key:"VERSION",get:function(){return s}},{key:"Default",get:function(){return _}}]),h}();return t(document).on(m.CLICK_DATA_API,v.DATA_SLIDE,T._dataApiClickHandler),t(window).on(m.LOAD_DATA_API,function(){t(v.DATA_RIDE).each(function(){var e=t(this);T._jQueryInterface.call(e,e.data())})}),t.fn[e]=T._jQueryInterface,t.fn[e].Constructor=T,t.fn[e].noConflict=function(){return t.fn[e]=c,T._jQueryInterface},T}(jQuery),function(t){var e="collapse",s="4.0.0-alpha.6",a="bs.collapse",l="."+a,h=".data-api",c=t.fn[e],u=600,d={toggle:!0,parent:""},f={toggle:"boolean",parent:"string"},_={SHOW:"show"+l,SHOWN:"shown"+l,HIDE:"hide"+l,HIDDEN:"hidden"+l,CLICK_DATA_API:"click"+l+h},g={SHOW:"show",COLLAPSE:"collapse",COLLAPSING:"collapsing",COLLAPSED:"collapsed"},p={WIDTH:"width",HEIGHT:"height"},m={ACTIVES:".card > .show, .card > .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},E=function(){function l(e,i){n(this,l),this._isTransitioning=!1,this._element=e,this._config=this._getConfig(i),this._triggerArray=t.makeArray(t('[data-toggle="collapse"][href="#'+e.id+'"],'+('[data-toggle="collapse"][data-target="#'+e.id+'"]'))),this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}return l.prototype.toggle=function(){t(this._element).hasClass(g.SHOW)?this.hide():this.show()},l.prototype.show=function(){var e=this;if(this._isTransitioning)throw new Error("Collapse is transitioning");if(!t(this._element).hasClass(g.SHOW)){var n=void 0,i=void 0;if(this._parent&&(n=t.makeArray(t(this._parent).find(m.ACTIVES)),n.length||(n=null)),!(n&&(i=t(n).data(a),i&&i._isTransitioning))){var o=t.Event(_.SHOW);if(t(this._element).trigger(o),!o.isDefaultPrevented()){n&&(l._jQueryInterface.call(t(n),"hide"),i||t(n).data(a,null));var s=this._getDimension();t(this._element).removeClass(g.COLLAPSE).addClass(g.COLLAPSING),this._element.style[s]=0,this._element.setAttribute("aria-expanded",!0),this._triggerArray.length&&t(this._triggerArray).removeClass(g.COLLAPSED).attr("aria-expanded",!0),this.setTransitioning(!0);var h=function(){t(e._element).removeClass(g.COLLAPSING).addClass(g.COLLAPSE).addClass(g.SHOW),e._element.style[s]="",e.setTransitioning(!1),t(e._element).trigger(_.SHOWN)};if(!r.supportsTransitionEnd())return void h();var c=s[0].toUpperCase()+s.slice(1),d="scroll"+c;t(this._element).one(r.TRANSITION_END,h).emulateTransitionEnd(u),this._element.style[s]=this._element[d]+"px"}}}},l.prototype.hide=function(){var e=this;if(this._isTransitioning)throw new Error("Collapse is transitioning");if(t(this._element).hasClass(g.SHOW)){var n=t.Event(_.HIDE);if(t(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension(),o=i===p.WIDTH?"offsetWidth":"offsetHeight";this._element.style[i]=this._element[o]+"px",r.reflow(this._element),t(this._element).addClass(g.COLLAPSING).removeClass(g.COLLAPSE).removeClass(g.SHOW),this._element.setAttribute("aria-expanded",!1),this._triggerArray.length&&t(this._triggerArray).addClass(g.COLLAPSED).attr("aria-expanded",!1),this.setTransitioning(!0);var s=function(){e.setTransitioning(!1),t(e._element).removeClass(g.COLLAPSING).addClass(g.COLLAPSE).trigger(_.HIDDEN)};return this._element.style[i]="",r.supportsTransitionEnd()?void t(this._element).one(r.TRANSITION_END,s).emulateTransitionEnd(u):void s()}}},l.prototype.setTransitioning=function(t){this._isTransitioning=t},l.prototype.dispose=function(){t.removeData(this._element,a),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},l.prototype._getConfig=function(n){return n=t.extend({},d,n),n.toggle=Boolean(n.toggle),r.typeCheckConfig(e,n,f),n},l.prototype._getDimension=function(){var e=t(this._element).hasClass(p.WIDTH);return e?p.WIDTH:p.HEIGHT},l.prototype._getParent=function(){var e=this,n=t(this._config.parent)[0],i='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]';return t(n).find(i).each(function(t,n){e._addAriaAndCollapsedClass(l._getTargetFromElement(n),[n])}),n},l.prototype._addAriaAndCollapsedClass=function(e,n){if(e){var i=t(e).hasClass(g.SHOW);e.setAttribute("aria-expanded",i),n.length&&t(n).toggleClass(g.COLLAPSED,!i).attr("aria-expanded",i)}},l._getTargetFromElement=function(e){var n=r.getSelectorFromElement(e);return n?t(n)[0]:null},l._jQueryInterface=function(e){return this.each(function(){var n=t(this),o=n.data(a),r=t.extend({},d,n.data(),"object"===("undefined"==typeof e?"undefined":i(e))&&e);if(!o&&r.toggle&&/show|hide/.test(e)&&(r.toggle=!1),o||(o=new l(this,r),n.data(a,o)),"string"==typeof e){if(void 0===o[e])throw new Error('No method named "'+e+'"');o[e]()}})},o(l,null,[{key:"VERSION",get:function(){return s}},{key:"Default",get:function(){return d}}]),l}();return t(document).on(_.CLICK_DATA_API,m.DATA_TOGGLE,function(e){e.preventDefault();var n=E._getTargetFromElement(this),i=t(n).data(a),o=i?"toggle":t(this).data();E._jQueryInterface.call(t(n),o)}),t.fn[e]=E._jQueryInterface,t.fn[e].Constructor=E,t.fn[e].noConflict=function(){return t.fn[e]=c,E._jQueryInterface},E}(jQuery),function(t){var e="dropdown",i="4.0.0-alpha.6",s="bs.dropdown",a="."+s,l=".data-api",h=t.fn[e],c=27,u=38,d=40,f=3,_={HIDE:"hide"+a,HIDDEN:"hidden"+a,SHOW:"show"+a,SHOWN:"shown"+a,CLICK:"click"+a,CLICK_DATA_API:"click"+a+l,FOCUSIN_DATA_API:"focusin"+a+l,KEYDOWN_DATA_API:"keydown"+a+l},g={BACKDROP:"dropdown-backdrop",DISABLED:"disabled",SHOW:"show"},p={BACKDROP:".dropdown-backdrop",DATA_TOGGLE:'[data-toggle="dropdown"]',FORM_CHILD:".dropdown form",ROLE_MENU:'[role="menu"]',ROLE_LISTBOX:'[role="listbox"]',NAVBAR_NAV:".navbar-nav",VISIBLE_ITEMS:'[role="menu"] li:not(.disabled) a, [role="listbox"] li:not(.disabled) a'},m=function(){function e(t){n(this,e),this._element=t,this._addEventListeners()}return e.prototype.toggle=function(){if(this.disabled||t(this).hasClass(g.DISABLED))return!1;var n=e._getParentFromElement(this),i=t(n).hasClass(g.SHOW);if(e._clearMenus(),i)return!1;if("ontouchstart"in document.documentElement&&!t(n).closest(p.NAVBAR_NAV).length){var o=document.createElement("div");o.className=g.BACKDROP,t(o).insertBefore(this),t(o).on("click",e._clearMenus)}var r={relatedTarget:this},s=t.Event(_.SHOW,r);return t(n).trigger(s),!s.isDefaultPrevented()&&(this.focus(),this.setAttribute("aria-expanded",!0),t(n).toggleClass(g.SHOW),t(n).trigger(t.Event(_.SHOWN,r)),!1)},e.prototype.dispose=function(){t.removeData(this._element,s),t(this._element).off(a),this._element=null},e.prototype._addEventListeners=function(){t(this._element).on(_.CLICK,this.toggle)},e._jQueryInterface=function(n){return this.each(function(){var i=t(this).data(s);if(i||(i=new e(this),t(this).data(s,i)),"string"==typeof n){if(void 0===i[n])throw new Error('No method named "'+n+'"');i[n].call(this)}})},e._clearMenus=function(n){if(!n||n.which!==f){var i=t(p.BACKDROP)[0];i&&i.parentNode.removeChild(i);for(var o=t.makeArray(t(p.DATA_TOGGLE)),r=0;r0&&a--,n.which===d&&adocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},h.prototype._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},h.prototype._checkScrollbar=function(){this._isBodyOverflowing=document.body.clientWidth=n){var i=this._targets[this._targets.length-1];return void(this._activeTarget!==i&&this._activate(i))}if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){var r=this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&(void 0===this._offsets[o+1]||t "+g.NAV_LINKS).addClass(_.ACTIVE),t(this._scrollElement).trigger(f.ACTIVATE,{relatedTarget:e})},h.prototype._clear=function(){t(this._selector).filter(g.ACTIVE).removeClass(_.ACTIVE)},h._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(a),o="object"===("undefined"==typeof e?"undefined":i(e))&&e; +if(n||(n=new h(this,o),t(this).data(a,n)),"string"==typeof e){if(void 0===n[e])throw new Error('No method named "'+e+'"');n[e]()}})},o(h,null,[{key:"VERSION",get:function(){return s}},{key:"Default",get:function(){return u}}]),h}();return t(window).on(f.LOAD_DATA_API,function(){for(var e=t.makeArray(t(g.DATA_SPY)),n=e.length;n--;){var i=t(e[n]);m._jQueryInterface.call(i,i.data())}}),t.fn[e]=m._jQueryInterface,t.fn[e].Constructor=m,t.fn[e].noConflict=function(){return t.fn[e]=c,m._jQueryInterface},m}(jQuery),function(t){var e="tab",i="4.0.0-alpha.6",s="bs.tab",a="."+s,l=".data-api",h=t.fn[e],c=150,u={HIDE:"hide"+a,HIDDEN:"hidden"+a,SHOW:"show"+a,SHOWN:"shown"+a,CLICK_DATA_API:"click"+a+l},d={DROPDOWN_MENU:"dropdown-menu",ACTIVE:"active",DISABLED:"disabled",FADE:"fade",SHOW:"show"},f={A:"a",LI:"li",DROPDOWN:".dropdown",LIST:"ul:not(.dropdown-menu), ol:not(.dropdown-menu), nav:not(.dropdown-menu)",FADE_CHILD:"> .nav-item .fade, > .fade",ACTIVE:".active",ACTIVE_CHILD:"> .nav-item > .active, > .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"]',DROPDOWN_TOGGLE:".dropdown-toggle",DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu .active"},_=function(){function e(t){n(this,e),this._element=t}return e.prototype.show=function(){var e=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&t(this._element).hasClass(d.ACTIVE)||t(this._element).hasClass(d.DISABLED))){var n=void 0,i=void 0,o=t(this._element).closest(f.LIST)[0],s=r.getSelectorFromElement(this._element);o&&(i=t.makeArray(t(o).find(f.ACTIVE)),i=i[i.length-1]);var a=t.Event(u.HIDE,{relatedTarget:this._element}),l=t.Event(u.SHOW,{relatedTarget:i});if(i&&t(i).trigger(a),t(this._element).trigger(l),!l.isDefaultPrevented()&&!a.isDefaultPrevented()){s&&(n=t(s)[0]),this._activate(this._element,o);var h=function(){var n=t.Event(u.HIDDEN,{relatedTarget:e._element}),o=t.Event(u.SHOWN,{relatedTarget:i});t(i).trigger(n),t(e._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},e.prototype.dispose=function(){t.removeClass(this._element,s),this._element=null},e.prototype._activate=function(e,n,i){var o=this,s=t(n).find(f.ACTIVE_CHILD)[0],a=i&&r.supportsTransitionEnd()&&(s&&t(s).hasClass(d.FADE)||Boolean(t(n).find(f.FADE_CHILD)[0])),l=function(){return o._transitionComplete(e,s,a,i)};s&&a?t(s).one(r.TRANSITION_END,l).emulateTransitionEnd(c):l(),s&&t(s).removeClass(d.SHOW)},e.prototype._transitionComplete=function(e,n,i,o){if(n){t(n).removeClass(d.ACTIVE);var s=t(n.parentNode).find(f.DROPDOWN_ACTIVE_CHILD)[0];s&&t(s).removeClass(d.ACTIVE),n.setAttribute("aria-expanded",!1)}if(t(e).addClass(d.ACTIVE),e.setAttribute("aria-expanded",!0),i?(r.reflow(e),t(e).addClass(d.SHOW)):t(e).removeClass(d.FADE),e.parentNode&&t(e.parentNode).hasClass(d.DROPDOWN_MENU)){var a=t(e).closest(f.DROPDOWN)[0];a&&t(a).find(f.DROPDOWN_TOGGLE).addClass(d.ACTIVE),e.setAttribute("aria-expanded",!0)}o&&o()},e._jQueryInterface=function(n){return this.each(function(){var i=t(this),o=i.data(s);if(o||(o=new e(this),i.data(s,o)),"string"==typeof n){if(void 0===o[n])throw new Error('No method named "'+n+'"');o[n]()}})},o(e,null,[{key:"VERSION",get:function(){return i}}]),e}();return t(document).on(u.CLICK_DATA_API,f.DATA_TOGGLE,function(e){e.preventDefault(),_._jQueryInterface.call(t(this),"show")}),t.fn[e]=_._jQueryInterface,t.fn[e].Constructor=_,t.fn[e].noConflict=function(){return t.fn[e]=h,_._jQueryInterface},_}(jQuery),function(t){if("undefined"==typeof Tether)throw new Error("Bootstrap tooltips require Tether (http://tether.io/)");var e="tooltip",s="4.0.0-alpha.6",a="bs.tooltip",l="."+a,h=t.fn[e],c=150,u="bs-tether",d={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:"0 0",constraints:[],container:!1},f={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"string",constraints:"array",container:"(string|element|boolean)"},_={TOP:"bottom center",RIGHT:"middle left",BOTTOM:"top center",LEFT:"middle right"},g={SHOW:"show",OUT:"out"},p={HIDE:"hide"+l,HIDDEN:"hidden"+l,SHOW:"show"+l,SHOWN:"shown"+l,INSERTED:"inserted"+l,CLICK:"click"+l,FOCUSIN:"focusin"+l,FOCUSOUT:"focusout"+l,MOUSEENTER:"mouseenter"+l,MOUSELEAVE:"mouseleave"+l},m={FADE:"fade",SHOW:"show"},E={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner"},v={element:!1,enabled:!1},T={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},I=function(){function h(t,e){n(this,h),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._isTransitioning=!1,this._tether=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}return h.prototype.enable=function(){this._isEnabled=!0},h.prototype.disable=function(){this._isEnabled=!1},h.prototype.toggleEnabled=function(){this._isEnabled=!this._isEnabled},h.prototype.toggle=function(e){if(e){var n=this.constructor.DATA_KEY,i=t(e.currentTarget).data(n);i||(i=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(t(this.getTipElement()).hasClass(m.SHOW))return void this._leave(null,this);this._enter(null,this)}},h.prototype.dispose=function(){clearTimeout(this._timeout),this.cleanupTether(),t.removeData(this.element,this.constructor.DATA_KEY),t(this.element).off(this.constructor.EVENT_KEY),t(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&t(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._tether=null,this.element=null,this.config=null,this.tip=null},h.prototype.show=function(){var e=this;if("none"===t(this.element).css("display"))throw new Error("Please use show on visible elements");var n=t.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){if(this._isTransitioning)throw new Error("Tooltip is transitioning");t(this.element).trigger(n);var i=t.contains(this.element.ownerDocument.documentElement,this.element);if(n.isDefaultPrevented()||!i)return;var o=this.getTipElement(),s=r.getUID(this.constructor.NAME);o.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&t(o).addClass(m.FADE);var a="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,l=this._getAttachment(a),c=this.config.container===!1?document.body:t(this.config.container);t(o).data(this.constructor.DATA_KEY,this).appendTo(c),t(this.element).trigger(this.constructor.Event.INSERTED),this._tether=new Tether({attachment:l,element:o,target:this.element,classes:v,classPrefix:u,offset:this.config.offset,constraints:this.config.constraints,addTargetClasses:!1}),r.reflow(o),this._tether.position(),t(o).addClass(m.SHOW);var d=function(){var n=e._hoverState;e._hoverState=null,e._isTransitioning=!1,t(e.element).trigger(e.constructor.Event.SHOWN),n===g.OUT&&e._leave(null,e)};if(r.supportsTransitionEnd()&&t(this.tip).hasClass(m.FADE))return this._isTransitioning=!0,void t(this.tip).one(r.TRANSITION_END,d).emulateTransitionEnd(h._TRANSITION_DURATION);d()}},h.prototype.hide=function(e){var n=this,i=this.getTipElement(),o=t.Event(this.constructor.Event.HIDE);if(this._isTransitioning)throw new Error("Tooltip is transitioning");var s=function(){n._hoverState!==g.SHOW&&i.parentNode&&i.parentNode.removeChild(i),n.element.removeAttribute("aria-describedby"),t(n.element).trigger(n.constructor.Event.HIDDEN),n._isTransitioning=!1,n.cleanupTether(),e&&e()};t(this.element).trigger(o),o.isDefaultPrevented()||(t(i).removeClass(m.SHOW),this._activeTrigger[T.CLICK]=!1,this._activeTrigger[T.FOCUS]=!1,this._activeTrigger[T.HOVER]=!1,r.supportsTransitionEnd()&&t(this.tip).hasClass(m.FADE)?(this._isTransitioning=!0,t(i).one(r.TRANSITION_END,s).emulateTransitionEnd(c)):s(),this._hoverState="")},h.prototype.isWithContent=function(){return Boolean(this.getTitle())},h.prototype.getTipElement=function(){return this.tip=this.tip||t(this.config.template)[0]},h.prototype.setContent=function(){var e=t(this.getTipElement());this.setElementContent(e.find(E.TOOLTIP_INNER),this.getTitle()),e.removeClass(m.FADE+" "+m.SHOW),this.cleanupTether()},h.prototype.setElementContent=function(e,n){var o=this.config.html;"object"===("undefined"==typeof n?"undefined":i(n))&&(n.nodeType||n.jquery)?o?t(n).parent().is(e)||e.empty().append(n):e.text(t(n).text()):e[o?"html":"text"](n)},h.prototype.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},h.prototype.cleanupTether=function(){this._tether&&this._tether.destroy()},h.prototype._getAttachment=function(t){return _[t.toUpperCase()]},h.prototype._setListeners=function(){var e=this,n=this.config.trigger.split(" ");n.forEach(function(n){if("click"===n)t(e.element).on(e.constructor.Event.CLICK,e.config.selector,function(t){return e.toggle(t)});else if(n!==T.MANUAL){var i=n===T.HOVER?e.constructor.Event.MOUSEENTER:e.constructor.Event.FOCUSIN,o=n===T.HOVER?e.constructor.Event.MOUSELEAVE:e.constructor.Event.FOCUSOUT;t(e.element).on(i,e.config.selector,function(t){return e._enter(t)}).on(o,e.config.selector,function(t){return e._leave(t)})}t(e.element).closest(".modal").on("hide.bs.modal",function(){return e.hide()})}),this.config.selector?this.config=t.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},h.prototype._fixTitle=function(){var t=i(this.element.getAttribute("data-original-title"));(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},h.prototype._enter=function(e,n){var i=this.constructor.DATA_KEY;return n=n||t(e.currentTarget).data(i),n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(i,n)),e&&(n._activeTrigger["focusin"===e.type?T.FOCUS:T.HOVER]=!0),t(n.getTipElement()).hasClass(m.SHOW)||n._hoverState===g.SHOW?void(n._hoverState=g.SHOW):(clearTimeout(n._timeout),n._hoverState=g.SHOW,n.config.delay&&n.config.delay.show?void(n._timeout=setTimeout(function(){n._hoverState===g.SHOW&&n.show()},n.config.delay.show)):void n.show())},h.prototype._leave=function(e,n){var i=this.constructor.DATA_KEY;if(n=n||t(e.currentTarget).data(i),n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(i,n)),e&&(n._activeTrigger["focusout"===e.type?T.FOCUS:T.HOVER]=!1),!n._isWithActiveTrigger())return clearTimeout(n._timeout),n._hoverState=g.OUT,n.config.delay&&n.config.delay.hide?void(n._timeout=setTimeout(function(){n._hoverState===g.OUT&&n.hide()},n.config.delay.hide)):void n.hide()},h.prototype._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},h.prototype._getConfig=function(n){return n=t.extend({},this.constructor.Default,t(this.element).data(),n),n.delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),r.typeCheckConfig(e,n,this.constructor.DefaultType),n},h.prototype._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},h._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(a),o="object"===("undefined"==typeof e?"undefined":i(e))&&e;if((n||!/dispose|hide/.test(e))&&(n||(n=new h(this,o),t(this).data(a,n)),"string"==typeof e)){if(void 0===n[e])throw new Error('No method named "'+e+'"');n[e]()}})},o(h,null,[{key:"VERSION",get:function(){return s}},{key:"Default",get:function(){return d}},{key:"NAME",get:function(){return e}},{key:"DATA_KEY",get:function(){return a}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return l}},{key:"DefaultType",get:function(){return f}}]),h}();return t.fn[e]=I._jQueryInterface,t.fn[e].Constructor=I,t.fn[e].noConflict=function(){return t.fn[e]=h,I._jQueryInterface},I}(jQuery));(function(r){var a="popover",l="4.0.0-alpha.6",h="bs.popover",c="."+h,u=r.fn[a],d=r.extend({},s.Default,{placement:"right",trigger:"click",content:"",template:''}),f=r.extend({},s.DefaultType,{content:"(string|element|function)"}),_={FADE:"fade",SHOW:"show"},g={TITLE:".popover-title",CONTENT:".popover-content"},p={HIDE:"hide"+c,HIDDEN:"hidden"+c,SHOW:"show"+c,SHOWN:"shown"+c,INSERTED:"inserted"+c,CLICK:"click"+c,FOCUSIN:"focusin"+c,FOCUSOUT:"focusout"+c,MOUSEENTER:"mouseenter"+c,MOUSELEAVE:"mouseleave"+c},m=function(s){function u(){return n(this,u),t(this,s.apply(this,arguments))}return e(u,s),u.prototype.isWithContent=function(){return this.getTitle()||this._getContent()},u.prototype.getTipElement=function(){return this.tip=this.tip||r(this.config.template)[0]},u.prototype.setContent=function(){var t=r(this.getTipElement());this.setElementContent(t.find(g.TITLE),this.getTitle()),this.setElementContent(t.find(g.CONTENT),this._getContent()),t.removeClass(_.FADE+" "+_.SHOW),this.cleanupTether()},u.prototype._getContent=function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)},u._jQueryInterface=function(t){return this.each(function(){var e=r(this).data(h),n="object"===("undefined"==typeof t?"undefined":i(t))?t:null;if((e||!/destroy|hide/.test(t))&&(e||(e=new u(this,n),r(this).data(h,e)),"string"==typeof t)){if(void 0===e[t])throw new Error('No method named "'+t+'"');e[t]()}})},o(u,null,[{key:"VERSION",get:function(){return l}},{key:"Default",get:function(){return d}},{key:"NAME",get:function(){return a}},{key:"DATA_KEY",get:function(){return h}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return c}},{key:"DefaultType",get:function(){return f}}]),u}(s);return r.fn[a]=m._jQueryInterface,r.fn[a].Constructor=m,r.fn[a].noConflict=function(){return r.fn[a]=u,m._jQueryInterface},m})(jQuery)}(); \ No newline at end of file diff --git a/website/js/classie.js b/website/js/classie.js new file mode 100644 index 0000000..a967554 --- /dev/null +++ b/website/js/classie.js @@ -0,0 +1,80 @@ +/*! + * classie - class helper functions + * from bonzo https://github.com/ded/bonzo + * + * classie.has( elem, 'my-class' ) -> true/false + * classie.add( elem, 'my-new-class' ) + * classie.remove( elem, 'my-unwanted-class' ) + * classie.toggle( elem, 'my-class' ) + */ + +/*jshint browser: true, strict: true, undef: true */ +/*global define: false */ + +( function( window ) { + +'use strict'; + +// class helper functions from bonzo https://github.com/ded/bonzo + +function classReg( className ) { + return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); +} + +// classList support for class management +// altho to be fair, the api sucks because it won't accept multiple classes at once +var hasClass, addClass, removeClass; + +if ( 'classList' in document.documentElement ) { + hasClass = function( elem, c ) { + return elem.classList.contains( c ); + }; + addClass = function( elem, c ) { + elem.classList.add( c ); + }; + removeClass = function( elem, c ) { + elem.classList.remove( c ); + }; +} +else { + hasClass = function( elem, c ) { + return classReg( c ).test( elem.className ); + }; + addClass = function( elem, c ) { + if ( !hasClass( elem, c ) ) { + elem.className = elem.className + ' ' + c; + } + }; + removeClass = function( elem, c ) { + elem.className = elem.className.replace( classReg( c ), ' ' ); + }; +} + +function toggleClass( elem, c ) { + var fn = hasClass( elem, c ) ? removeClass : addClass; + fn( elem, c ); +} + +var classie = { + // full names + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + toggleClass: toggleClass, + // short names + has: hasClass, + add: addClass, + remove: removeClass, + toggle: toggleClass +}; + +// transport +if ( typeof define === 'function' && define.amd ) { + // AMD + define( classie ); +} else { + // browser global + window.classie = classie; +} + +})( window ); diff --git a/website/js/jquery-min.js b/website/js/jquery-min.js new file mode 100644 index 0000000..49990d6 --- /dev/null +++ b/website/js/jquery-min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){ +return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*\s*$/g,ia={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/mod_guide.html b/website/mod_guide.html new file mode 100644 index 0000000..b4153c0 --- /dev/null +++ b/website/mod_guide.html @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + IW4x Mod Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+

IW4x Mod Guide

+
+

Frequently asked questions related to adding mods to IW4x.

+
+
+ + +
+
+

+ Mods can consist of anything from custom textures, new gamemodes, new weapons, edits of existing gamemodes, the list is endless... In IW4x, mods are handled the same way as they were in Call of Duty: Modern Warefare (Call of Duty 4). If you are familar + with that games mod system, great! But if not, I will briefly explain. +
+
Mods are located within a folder conveniently named mods inside of your MW2 game folder (See folder structure screenshot below). Each mod has its own sub folder inside of the mods folder. The name of that + folder is how IW4x identifies each mod and it also determines the name that you will see in the mods menu inside of IW4x. Once you select a mod via the main menu, the mods content is loaded into the games memory. It will overwrite + any scripts / textures / ... with ones found in the loaded mods folder. +
+
+

Folder Structure Examples:

+

IW4x/mods/bots +
IW4x/mods/prophunt +

+ +

Loading a mod:

+

+ Once you have a mod downloaded and in the correct folder (mods), you can start the game up and select the mod in the main menu. Once you click 'Launch' the game will restart with the mod loaded. +

+ +

Where to download mods?

+

This is a commonly asked question. Unfortunately, there is no central location for mod downloads so you will have to do a Google search to find some. +

+
+
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/patreon.html b/website/patreon.html new file mode 100644 index 0000000..07f4082 --- /dev/null +++ b/website/patreon.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/website/s1/motd.png b/website/s1/motd.png new file mode 100644 index 0000000..06f7226 Binary files /dev/null and b/website/s1/motd.png differ diff --git a/website/s1/motd.txt b/website/s1/motd.txt new file mode 100644 index 0000000..e6f339f --- /dev/null +++ b/website/s1/motd.txt @@ -0,0 +1,7 @@ +^3Welcome to S1x^7 + +Support us on Patreon to get special rewards: ^1patreon.com/XLabsProject^7 + +Follow us on Twitter: ^5@XLabsProject^7 + +Visit ^2https://xlabs.dev ^7for more info! \ No newline at end of file diff --git a/website/s1x_controllers.html b/website/s1x_controllers.html new file mode 100644 index 0000000..0d5e063 --- /dev/null +++ b/website/s1x_controllers.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + S1x Controller Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ S1x +
+

S1x CONTROLLER GUIDE

+
+

An in-depth guide on how to setup controllers for S1x.

+
+
+ + +
+
+

+ Xbox +

+

S1x should support xbox controllers out of the box. If it does not work, make sure "Gamepad Support" is enabled in settings.

+

Playstation

+
    +
  1. Download DS4Windows, make sure you pick DS4Windows_xxx_x64.zip
  2. +
  3. Install/Extract it to a safe place and open it.
  4. +
  5. It should detect your controller, but if it does not, you may need to install the driver.
  6. +
  7. Check if gamepad works in S1x. If there is still problems, you can join the Discord and ask for support in the #s1x-support channel.
  8. +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/s1x_download.html b/website/s1x_download.html new file mode 100644 index 0000000..a2f8d82 --- /dev/null +++ b/website/s1x_download.html @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + S1x Download | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ S1x +
+
+
+

S1x Download

+ + + +

+ Follow us on twitter to unlock the download:
+    Twitter +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/s1x_errors.html b/website/s1x_errors.html new file mode 100644 index 0000000..a7e6a15 --- /dev/null +++ b/website/s1x_errors.html @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + + + + S1x Errors | X Labs + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+ +
+
+

+ + Q: XUID does not match the certificate +

+ XUID does not match the certificate +

+ A: You are on an outdated build of S1x. Grab the latest from here. +

+
+
+ + + +
+
+

+ + Q: MENU_CONTENT_NOT_AVAILABLE +

+ MENU_CONTENT_NOT_AVAILABLE +

+ A: Install the DLCs. +

+
+
+ + + +
+
+

+ + Q: Couldn't find the bsp for this map. +

+ Couldn't find the bsp for this map +

+ A: Install the DLCs, or if you are 100% sure you installed them right, just restart your game. +

+
+
+ + + +
+
+

+ + Q: Script Error: An error has occurred in the script on this page. +

+ Script Error +

+ A: Try restarting the launcher. If it still happens, make a shortcut of S1x.exe and add -multiplayer at the end of the target field. +

+ +
+
+ + + + +
+
+

+ + Q: Unable to load import '#4' from module 'XINPUT1_3.dll' +

+ +

+ A: Install DirectX. +

+
+
+ + + + +
+
+

+ + Q: Blank Menu (No Singleplayer/Multiplayer Option) +

+ +

+ A: Try restarting the launcher or, if it still happens, make a shortcut of S1x.exe and add -multiplayer at the end of the target field. You may find several flags here. + +

+
+
+ + + + +
+
+

+ + Q: Disc read error +

+ Disc read error +

+ A: Verify your game files through Steam, or use the S1x Repair Guide. +

+
+
+ + + +
+
+

+ + Q: Unknown block compression type: 0. +

+ Unknown block compression type: 0 +

+ A: Verify your game files through Steam, or use the S1x Repair Guide. +

+
+
+ + + + +
+
+

+ + Q: Failed to read/map game binary +

+ +

+ A: Make sure S1x.exe is in your Advanced Warfare directory. If this still happens, verify your game files using Steam or use the S1x Repair Guide +

+
+
+ + + + +
+
+

+ + Q: The code execution cannot proceed because steam_api64.dll was not found. +

+ +

+ A: Make sure you are launching the game with S1x.exe, instead of the s1_mp64_ship.exe. +

+
+
+ + + +
+
+

+ + Q: Create2DTexture(...) failed. +

+ Create2DTexture(...) failed +

+ A: Make sure your GPU drivers are up-to-date. If it still happens, disable shader preload in your video settings. +

+
+
+ + + +
+
+

+ + Q: Unable to find a supported monitor. +

+ Create2DTexture(...) failed +

+ A: Make sure your GPU meets the minimum requirements. + If you're using a laptop make sure S1x uses your dedicated GPU. +

+
+
+ + + +
+
+

+ + Q: Can't move mouse in game. +

+

+ A: This is caused by third party software such as overlays, please quit them before starting the game. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/s1x_faq.html b/website/s1x_faq.html new file mode 100644 index 0000000..9840d00 --- /dev/null +++ b/website/s1x_faq.html @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + S1x FAQ | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+ +
+
+

+ + Q: How do I change my name? +

+

+ A: To change your name, open the in-game console (press the ~ key) and type name yourname. +

+
+
+ + + +
+
+

+ + Q: My classes don't work online? +

+

+ A: For now, you must make classes in private match. +

+
+
+ + + +
+
+

+ + Q: Having issues staying in fullscreen? +

+

+ A: Open your console and type r_fullscreen 1; vid_restart +

+
+
+ + + +
+
+

+ + Q: Can I use my Steam copy of Advanced Warfare to play S1x? +

+

+ A: You certainly can! A Steam copy of Advanced Warfare is the prefered way to play S1x. Read the Install Guide to learn how to use your Steam copy. +

+
+
+ + + +
+
+

+ + Q: On S1x, can I play with players on Steam or Steam players play with me? +

+

+ A: S1x is entirely seperate from Steam services, so it is not possible to play with people playing on the Steam version of Advanced Warfare. You can, however, invite your Steam Advanced Warfare friends to install S1x, and then you'll be able to play together. +

+
+
+ + +
+
+

+ + Q: Will S1x get me VAC banned? +

+

+ A: The short answer is no. S1x is completely external to Steam and Steam Servers (You don't play with Steam users). It's impossible to get VAC banned. S1x players only play with fellow S1x players as the servers are completely seperate from Steam. You + are at no risk of recieving a VAC ban. +

+
+
+ + + + + + +
+
+

+ + Q: Does my Steam rank and stats carry over to S1x? +

+

+ A: No. When you start S1x, you will be starting fresh. As stated above, S1x is external from Steam. So you will have a separate rank, classes, title, etc. When, and if, you go back to Steam Advanced Warfare, you will still have the same rank you had before + in Steam. S1x does not alter this at all. However, you can always manually set your rank back to the level you were if you wish as this is allowed, or just use the command unlockstats to get max prestige level 50 everything + unlocked. +

+
+
+ + + +
+
+

+ + Q: How can I set a custom rank in S1x? +

+

+ A: You can use the command setplayerdataint. Examples: setPlayerDataInt prestige 10 and setPlayerDataInt experience 141 +

+
+
+ + + +
+
+

+ + Q: How do I change my sensitivity? +

+

+ A: You can change your sensitivty either though the options menu in-game or for more precise values use the command sensitivty 1 (Replace the number with your desired sensitivty). +

+
+
+ + + +
+
+

+ + Q: How can I change my Field of View (FOV)? +

+

+ A: Using the in-game menu or using the console command cg_fov 90 (Replace the number with your desired FOV). +

+
+
+ + + +
+
+

+ + Q: How can I use cheat protected commands in private match such as noclip? +

+

+ A: You must use the sv_cheats 1 command to enable cheats. For more information on console commands, see the Console Commands Guide. +

+
+
+ + + +
+
+

+ + Q: How can I improve my FPS? +

+

+ A: The best way is to go into the graphic options of the game and lower all the settings. The next step you can take is to lower your games resolution. Keep lowering it until you reach your desired FPS. If your FPS is still low, there's a good chance + your PC isn't good enough to play S1x. +

+
+
+ + + +
+
+

+ + Q: Why is my gaming laptop getting low FPS? +

+

+ A: By default many gaming laptops use intergrated CPU graphics to preserve battery. It may be the case that you need to force S1x to use your dedicated graphics card. +

+
    +
  1. Go to the NVIDIA Control Panel by right clicking on your desktop and clicking on "NVIDIA Control Panel".
  2. +
  3. In the default screen that pops up (it should be "manage 3D settings", and the "Program Settings" tab should be automatically selected), under "1. Select a program to customize:" hit the "Add" button.
  4. +
  5. From here, navigate to the folder where your S1x is installed.
  6. +
  7. Select S1x.exe and click Open.
  8. +
  9. Then, under "2. Select the preferred graphics processor for this program". Open the drop-down menu and select "High-performance NVIDIA processor".
  10. +
  11. Finally, hit Apply in the far bottom right corner, and the correct GPU should be used for the game.
  12. +
+
+
+ + +
+
+

+ + Q: How can I report cheaters? +

+

+ A: Report cheaters to the admins or owner of the server. Most server owners will provide links to their Discord or website. +

+
+
+ + +
+
+

+ + Q: Why does my mouse randomly flick around? +

+

+ A: Lower your mouse polling rate to 125Hz. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/s1x_privatematch.html b/website/s1x_privatematch.html new file mode 100644 index 0000000..1764879 --- /dev/null +++ b/website/s1x_privatematch.html @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + S1x Private Match Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ S1x +
+

S1x PRIVATE MATCH GUIDE

+
+

An in-depth guide on how to play private match with friends for S1x.

+
+
+ + +
+
+

+ + S1x Private Match Guide: +

+
    +
  1. You can go to here to get your IP Address and message anyone who wants to join it.
  2. +
  3. Start S1x and launch a private match.
  4. +
  5. Tell anyone who wants to join to open the console by using the tilde key while at the main menu.
  6. +
  7. Get them to enter the following command, replacing 'HostsIPAddress' with the IP you previously sent him: /connect HostsIPAddress:27016
  8. +
+

Failed to join:

+
    +
  1. If you followed the above correctly and your friends are unable to join them you the host of the private match will need to port forward in order for them to connect to you.
  2. +
  3. Port Forward port 27016 UDP & TCP
  4. +
  5. You can find how to do this by Googling 'YourRouterName Port Forwarding'
  6. +
  7. Note: If port forwarding is too complex, just stick to playing public servers, or maybe join an empty server so you have the same experience as a private game.
  8. +
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/s1x_repair.html b/website/s1x_repair.html new file mode 100644 index 0000000..3ea7b7f --- /dev/null +++ b/website/s1x_repair.html @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + S1x Repair Guide | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ S1x +
+

S1x REPAIR GUIDE

+
+

An in-depth guide on how to repair a broken S1x install.

+
+
+ + +
+
+ +

+ Getting Started: +

+

IMPORTANT: This guide only works if you originally installed the game from the torrent, if you used steam you need to verify inside of steam.

+
    +
  1. Locate your S1x Install, and make note of the folder name and folder path (Your folder name may differ from the example below).
  2. + +
  3. Download the following torrent and open it with qBittorent.
  4. +
  5. Once prompted with the following screen click on the icon marked in red:
  6. + +
  7. Browse to the location of your S1x folder and mark it by clicking on it once. Now click "Select Folder":
  8. + +
  9. IMPORTANT: Under the content layout dropdown select "Don't create subfolder", after that hit OK to start the repair process:
  10. + +
  11. The torrent client will now check your game files and re-download missing or corrupted ones:
  12. + +
  13. Once your torrent says Seeding, click on the torrent and hit the pause button.
  14. + qBit Stop Seeding +

    Congratulations! Your game should now be repaired!

    +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/support_iw4x_client.html b/website/support_iw4x_client.html new file mode 100644 index 0000000..e36907d --- /dev/null +++ b/website/support_iw4x_client.html @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + IW4x Support | X Labs + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW4x +
+

IW4x CLIENT SUPPORT

+
+

Below are guides to help you with any client issues you may have with IW4x.

+

Experiencing errors? View our error page HERE.

+ Download IW4x + Full Game + Download IW4x (if you own the game on Steam) +
+
+ + +
+
+

+ + IW4x CLIENT INSTALL GUIDE +

+
+

+ Welcome to the IW4x install guide. +

    +
  • + Please follow carefully each step +
  • +
  • + The tutorial will provide you with every file you need +
  • +
  • + At NO POINT should you ever download files or DLL files over the internet.
    + Downloading arbitrary libraries (DLLs) over the internet is dangerous and unnecessary. +
  • +
  • + Avoid video guides found online as they quickly become outdated. Only this guide is guaranteed to always be up to date. +
  • +
+

+
+

+ If You Do Not Own The Game On Steam +

+

+ Getting Started: +

+
    +
  1. Download and Install qBittorrent.
  2. + +
  3. Open the full game torrent in qBittorrent, making sure to match these settings.
  4. + qBittorrent Settings + +
  5. Once your torrent says Seeding, click on the torrent and hit the pause button.
  6. + qBit Stop Seeding + +
  7. Download the IW4x archive
  8. + +
  9. Once downloaded, click on the iw4x archive in your downloads to open it
  10. + downloads + +
  11. On the top toolbar, click "Extract All"
  12. + extract_all + +
  13. In the extraction wizard, fill in the location in which you downloaded the game. +
    If you followed the tutorial closely up to this point, it should be C:\Games\IW4x
  14. + extract_path + +
  15. Click Extract and wait for the extraction to finish
  16. + +
  17. You're all done! To start the game, double-click IW4x.exe.
    Your folder should look something like this. If it does not, you missed a step in the tutorial. Please try again carefully before requesting assistance. + optimal_folder +
+

+ To change your name, open the in-game console (press the ~ key) and type name yourname. +

+

+ To unlock all, open the in-game console (press the ~ key) and type unlockstats. +

+
+
+ + + +
+
+

+ If You Do Own The Game On Steam, And want DLC/IW4x. +

+ +

+ Getting Started: +

+

IMPORTANT: This only works with English copies of the game, so please make sure you have your game in english before preceding.

+
    +
  1. Download and Install qBittorrent.
  2. +
  3. Open the DLC torrent in qBittorrent, making sure to match these settings.
  4. + qBittorrent Settings +
  5. Once your torrent says Seeding, click on the torrent and hit the pause button.
  6. + qBit Stop Seeding +
  7. Download IW4x and unzip it's contents into your game directory.
  8. +
  9. To start the game, double-click IW4x.exe.
  10. +
+

+ To change your name, open the in-game console (press the ~ key) and type name yourname. +

+

+ To unlock all, open the in-game console (press the ~ key) and type unlockstats. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/support_iw4x_server.html b/website/support_iw4x_server.html new file mode 100644 index 0000000..7778b30 --- /dev/null +++ b/website/support_iw4x_server.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + IW4x Server Support | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ IW4x +
+

IW4x SERVER SUPPORT

+
+

Below are guides to help you setup an IW4x Server.

+
+
+ + + +
+
+

+ IW4x Server Install Guide +

+

+ Requirements: +

+ +

+ Server Setup: +

+
    +
  1. Download the IW4x Dedicated Server Full torrent and place it in a location of your choosing on your VPS or PC
  2. +
  3. Download the IW4x Client, and extract the files to the server folder.
  4. +
  5. Download the server configurations from GitHub, and extract the files to the server folder.
  6. +
+

+ Match Server Setup: +

+
    +
  1. Right click the "DedicatedServer.bat" file and go to edit with Notepad++.
  2. +
  3. Carefully review/edit the bat file, along with the Game Port and LAN Mode.
  4. +
  5. Save the file that you just edit.
  6. +
  7. Go to your userraw folder. Right click on server.cfg and edit with Notepad++.
  8. +
  9. Carefully review edit the cfg file to your liking.
  10. +
  11. Give it a hostname, Message of the day, Gametype, remove/add maps that you want on the rotate.
  12. +
  13. Save the server.cfg file that you just edit after you done. You can always go back and edit it.
  14. +
  15. Forward the TCP and UDP port you put in the bat file.
  16. +
  17. Run the "startserver.bat" and now the server should be listed in the serverlist.
  18. +
  19. If your server does not appear in the server browser, you have not portforwarded correctly.
  20. +
+

+ Party Server Setup: +

+
    +
  1. Right click the "DedicatedLobbyServer.bat" file and go to edit with Visual Studio Code or your choice of a notepad editor.
  2. +
  3. Carefully review/edit the bat file, along with the Game Port and LAN Mode.
  4. +
  5. Save the file that you just edit after you done. (You can always go back and edit it).
  6. +
  7. Go to your userraw folder. Right click on partyserver.cfg and edit with Visual Studio Code or your choice of editor.
  8. +
  9. Carefully review edit the cfg file to your liking. Give it a hostname, MOTD (Message of The Day), etc.
  10. +
  11. Save the "partyserver.cfg" file that you just edit.
  12. +
  13. On your router, Forward the TCP and UDP port you put in +set net_port "28960" or whatever of your choice. (We can't help on this as everyone's routers very different).
  14. +
  15. Run the "DedicatedLobbyServer.bat" and the window should open the name of your server, 0/18 players, none. Ignore any console errors that happen. As long as the server doesn't crash or error out.
  16. +
  17. The server should now be listed in the serverlist
  18. +
+

+ Server Administration Software: +

+

+ We recommend IW4MAdmin to control your server. To add additional plugins using IW4MAdmin, you may check the Plugin Store. +

+
+
+ + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/support_iw6x_client.html b/website/support_iw6x_client.html new file mode 100644 index 0000000..95a355a --- /dev/null +++ b/website/support_iw6x_client.html @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + IW6x Support | X Labs + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + +
+ +
+
+
+ IW6x +
+

IW6x CLIENT + SUPPORT +

+
+

Below are + guides to help you with any client issues you may have with IW6x.

+

Experiencing + errors? View our error page HERE.

+ Download IW6x + Full Game + Download IW6x (if you own the game on Steam) +
+
+ + +
+
+

+ + IW6x CLIENT INSTALL GUIDE +

+

+ If you do not own the game on Steam +

+ +

+ Getting Started: +

+
    +
  1. Download and Install qBittorrent. +
  2. +
  3. Open the full game + torrent in qBittorrent, making sure to match these settings.
  4. + qBittorrent Settings +
  5. Once your torrent says Seeding, click on the torrent and hit the pause + button.
  6. + qBit Stop Seeding +
  7. Download the X Labs Launcher.
  8. +
  9. Select the Settings Cog, then click Browse on Ghosts Installation.
  10. + X Labs Launcher +
  11. Select your game folder.
  12. + X Labs Launcher +
  13. To start the game, Select the IW6x Icon, then press either Singleplayer or Multiplayer. +
  14. + X Labs Launcher +
+

+ To change your name, open the in-game console (press the ~ key) and type + name yourname. +

+

+ To unlock all, open the in-game console (press the ~ key) and type unlockstats. +

+

+ Custom classes are made in the Private Match section. +

+
+
+ + + +
+
+

+ + IW6x CLIENT/DLC INSTALL GUIDE +

+

+ If you do own the game on Steam, and want DLC/IW6x. +

+ +

+ Getting Started: +

+

IMPORTANT: This only works with English copies of the game, so please make sure you have your + game in english before preceding.

+
    +
  1. Download and Install qBittorrent. +
  2. +
  3. Open the DLC torrent + in qBittorrent, making sure to match these settings.
  4. + qBittorrent Settings +
  5. Once your torrent says Seeding, click on the torrent and hit the pause + button.
  6. + qBit Stop Seeding +
  7. Download the X Labs Launcher.
  8. +
  9. Select the Settings Cog, then click Browse on Ghosts Installation.
  10. + X Labs Launcher +
  11. Select your game folder.
  12. + X Labs Launcher +
  13. To start the game, Select the IW6x Icon, then press either Singleplayer or Multiplayer. +
  14. + X Labs Launcher +
+

+ To change your name, open the in-game console (press the ~ key) and type + name yourname. +

+

+ To unlock all, open the in-game console (press the ~ key) and type unlockstats. +

+

+ Custom classes are made in the Private Match section. +

+
+
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/support_iw6x_server.html b/website/support_iw6x_server.html new file mode 100644 index 0000000..580bbe8 --- /dev/null +++ b/website/support_iw6x_server.html @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + IW6x Support | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + +
+ +
+
+
+ IW6x +
+
+
+
+ +
+
+

IW6x + SERVER SUPPORT

+
+

+ Below are guides to help you with any server issues you may have with IW6x.

+
+
+ +
+
+

+ IW6x Server Install Guide +

+

+ Requirements: +

+ +

+ Server Setup: +

+
    +
  1. Download the IW6x Dedicated Server Full torrent + and place it in a location of your choosing on your VPS or PC.
  2. +
  3. Download the X Labs launcher from here and place it into + your server folder.
  4. +
  5. Download the server configurations from GitHub, + and place the files in the server folder.
  6. +
  7. Run !updateXLabs.bat to update your server.
  8. +
  9. Carefully review and edit the configuration settings file to your liking. + Give it a hostname, gametype, and remove/add maps that you want on the + rotate, etc.
  10. +
  11. Save the server.cfg file you just edited after you are done.
  12. +
  13. Forward the TCP and UDP port (27016). If you changed the default port or are + adding another server, you may need to open the following addition ports: + 27017, 27018, etc.
  14. +
  15. Run the start bat for the server you want and it should begin to load.
  16. +
+

+ Known Issues: +

+
    +
  1. Currently, g_gametype in server.cfg does not work. Game type + must be set in the map rotation. Example: + set sv_maprotation "gametype war map mp_prisonbreak map mp_dart". +
  2. +
  3. Other issues may exist that are not covered here. This is an initial + release, so be aware that you might experience difficulties running + dedicated servers for IW6x.
  4. +
+

+ Server Administration Software: +

+

+ IW4madmin partially supports IW6x. Not all functions work but full support is + planned as the client is further developed. For downloads and more more + information, please visit IW4MAdmin. +

+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/support_s1x_client.html b/website/support_s1x_client.html new file mode 100644 index 0000000..697f5a4 --- /dev/null +++ b/website/support_s1x_client.html @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + S1x Support | X Labs + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + + +
+ +
+
+
+ S1x +
+

S1x CLIENT + SUPPORT +

+
+

Below are + guides to help you with any client issues you may have with S1x.

+

Experiencing + errors? View our error page HERE.

+ Download S1x + Full Game + Download S1x (if you own the game on Steam) +
+
+ + +
+
+

+ + S1x CLIENT INSTALL GUIDE +

+

+ If You Do Not Own The Game On Steam +

+ +

+ Getting Started: +

+
    +
  1. Download and Install qBittorrent. +
  2. +
  3. Open the full game + torrent in qBittorrent, making sure to match these settings.
  4. + qBittorrent Settings +
  5. Once your torrent says Seeding, click on the torrent and hit the pause + button.
  6. + qBit Stop Seeding +
  7. Download the X Labs Launcher.
  8. +
  9. Select the Settings Cog, then click Browse on Advanced Warfare Installation.
  10. + X Labs Launcher +
  11. Select your game folder.
  12. + X Labs Launcher +
  13. To start the game, Select the S1x Icon, then press one of the options.
  14. + X Labs Launcher +
+

+ To change your name, open the in-game console (press the ~ key) and type + name yourname. +

+

+ To unlock all, open the in-game console (press the ~ key) and type unlockstats. +

+

+ Custom classes are made in the Private Match section. +

+
+
+ + + +
+
+

+ + S1x STEAM INSTALL GUIDE +

+

+ If You Do Own The Game On Steam, And want DLC/S1x. +

+ +

+ Getting Started: +

+

IMPORTANT: This only works with English copies of the game, so please make sure you have your + game in english before preceding.

+
    +
  1. Download and Install qBittorrent. +
  2. +
  3. Open the DLC torrent in + qBittorrent, making sure to match these settings.
  4. + qBittorrent Settings +
  5. Once your torrent says Seeding, click on the torrent and hit the pause + button.
  6. + qBit Stop Seeding +
  7. Download the X Labs Launcher.
  8. +
  9. Select the Settings Cog, then click Browse on Advanced Warfare Installation.
  10. + X Labs Launcher +
  11. Select your game folder.
  12. + X Labs Launcher +
  13. To start the game, Select the S1x Icon, then press one of the options.
  14. + X Labs Launcher +
+

+ To change your name, open the in-game console (press the ~ key) and type + name yourname. +

+

+ To unlock all, open the in-game console (press the ~ key) and type unlockstats. +

+

+ Custom classes are made in the Private Match section. +

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/support_s1x_server.html b/website/support_s1x_server.html new file mode 100644 index 0000000..2d898a9 --- /dev/null +++ b/website/support_s1x_server.html @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + S1x Support | X Labs + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+ + +
+ +
+
+
+ S1x +
+
+
+
+ +
+
+

S1x + SERVER SUPPORT

+
+

+ Below are guides to help you with any server issues you may have with S1x.

+
+
+ +
+
+

+ S1x Server Install Guide +

+

+ Requirements: +

+
    +
  • A computer or VPS with Windows 10/Server 2019 or newer.
  • +
  • At least 4GB of RAM for a single + server, with another 2GB per server + instance you want to host.
  • +
  • The + Visual + C++ 2010 Redistributable Package and the + Visual C++ + 2015-2019 Redistributable Package (These are included in the S1x + Dedicated Server torrent linked below). +
  • +
  • + Visual Code, + Notepad++ or + Sublime Text (You may use + whatever editor you choose but + we don't recommend Windows Notepad). +
  • +
  • Torrent client - (qBittorrent is + recommended).
  • +
  • Computer or VPS that's online 24/7 with a decent connection that has average + or above specs (We strongly advise a VPS). + For best results, use a wired connection + and avoid using a laptop to host servers.
  • +
  • Some technical knowledge / background knowledge of computers.
  • +
+

+ Server Setup: +

+
    +
  1. Download the S1x Dedicated Server Full torrent + and place it in a location of your choosing on your VPS or PC.
  2. +
  3. Download the X Labs launcher from here and place it into + your server folder.
  4. +
  5. Download the server configurations from GitHub, + and place the files in the server folder.
  6. +
  7. Open the redist folder and install + all of the prerequisites.
  8. +
  9. Run !updateXLabs.bat to update your server.
  10. +
  11. Carefully review and edit the configuration settings file to your liking. + Give it a hostname, gametype, and remove/add maps that you want + in the map rotation, etc.
  12. +
  13. Save the server.cfg file you just edited after you are done.
  14. +
  15. Forward the TCP and UDP port (27016). If you changed the default port or are + adding another server, you may need to open the following additional + ports: 27017, 27018, or whatever port + you assign to the server. +
  16. +
  17. Run the start bat for the server you want and it should begin to load.
  18. +
+

+ Known Issues: +

+
    +
  1. Currently, g_gametype in server.cfg does not work. Game type + must be set in the map rotation. Example: + set sv_maprotation "gametype war map mp_refraction map mp_lab2 map mp_comeback". +
  2. +
  3. Game logging (needed for IW4MAdmin + and other administration tools) + + requires a script to be installed + into the s1x/scripts + folder.  Without this script, + logging simply will not work. +
  4. +
  5. Other issues may exist that are not covered here. This is an initial + release, so be aware that you might experience difficulties running + dedicated servers for S1x.
  6. +
+

+ Server Administration Software: +

+

+ The latest builds of + IW4MAdmin partially support S1x. Not all functions work but full support is + planned as the client is further developed. + The previously mentioned logging script + has to be installed as well for this to + function. For downloads and more information, please visit IW4MAdmin. +

+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/twitter.html b/website/twitter.html new file mode 100644 index 0000000..4b4e9c3 --- /dev/null +++ b/website/twitter.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/website/video/s1x.mp4 b/website/video/s1x.mp4 new file mode 100644 index 0000000..ae94ea4 Binary files /dev/null and b/website/video/s1x.mp4 differ diff --git a/website/yt.html b/website/yt.html new file mode 100644 index 0000000..fc0ce3b --- /dev/null +++ b/website/yt.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file