diff --git a/extras/deploy-scripts/pandora_deploy_community_ubuntu_2204.sh b/extras/deploy-scripts/pandora_deploy_community_ubuntu_2204.sh index 5f240b0a41..c5c8edbb34 100644 --- a/extras/deploy-scripts/pandora_deploy_community_ubuntu_2204.sh +++ b/extras/deploy-scripts/pandora_deploy_community_ubuntu_2204.sh @@ -520,18 +520,18 @@ execute_cmd "systemctl restart mysql" "Configuring and restarting database engin #Define packages if [ "$PANDORA_LTS" -eq '1' ] ; then - [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.pandorafms.com/pandorafms/latest/Tarball/LTS/pandorafms_server-7.0NG.tar.gz" - [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.pandorafms.com/pandorafms/latest/Tarball/LTS/pandorafms_console-7.0NG.tar.gz" + [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/Tarball/LTS/pandorafms_server-7.0NG.tar.gz" + [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/Tarball/LTS/pandorafms_console-7.0NG.tar.gz" [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.x86_64.tar.gz" elif [ "$PANDORA_LTS" -ne '1' ] ; then - [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_server-7.0NG.tar.gz" - [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_console-7.0NG.tar.gz" + [ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_server-7.0NG.tar.gz" + [ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_console-7.0NG.tar.gz" [ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE=" https://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.x86_64.tar.gz" fi if [ "$PANDORA_BETA" -eq '1' ] ; then - PANDORA_SERVER_PACKAGE="http://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_server-latest.tar.gz" - PANDORA_CONSOLE_PACKAGE="http://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_console-latest.tar.gz" + PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_server-latest.tar.gz" + PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_console-latest.tar.gz" PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.x86_64.tar.gz" fi @@ -837,7 +837,7 @@ echo "@hourly root bash -c /etc/cron.hourly/pandora_db" >> /etc/cront ## Enabling agent adn configuring Agente sed -i "s/^remote_config.*$/remote_config 1/g" $PANDORA_AGENT_CONF &>> "$LOGFILE" -execute_cmd "/etc/init.d/pandora_agent_daemon start" "Starting PandoraFSM Agent" +execute_cmd "/etc/init.d/pandora_agent_daemon restart" "Starting PandoraFSM Agent" systemctl enable pandora_agent_daemon &>> "$LOGFILE" #fix path phantomjs diff --git a/pandora_agents/plugins/windows/pandora_security_win/.gitignore b/pandora_agents/plugins/windows/pandora_security_win/.gitignore new file mode 100644 index 0000000000..53c37a1660 --- /dev/null +++ b/pandora_agents/plugins/windows/pandora_security_win/.gitignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/pandora_agents/plugins/windows/pandora_security_win/Makefile b/pandora_agents/plugins/windows/pandora_security_win/Makefile new file mode 100644 index 0000000000..3de60fb2c0 --- /dev/null +++ b/pandora_agents/plugins/windows/pandora_security_win/Makefile @@ -0,0 +1,10 @@ +# Makefile for winexe.py. +.PHONY: all build_image pandora_security_win.py + +all: build_image pandora_security_win.py + +build_image: + docker build -t pandora_security_win docker/ + +pandora_security_win.py: + docker run --rm -t -v`pwd`:/pybuild pandora_security_win diff --git a/pandora_agents/plugins/windows/pandora_security_win/build.sh b/pandora_agents/plugins/windows/pandora_security_win/build.sh new file mode 100644 index 0000000000..b06af04f1f --- /dev/null +++ b/pandora_agents/plugins/windows/pandora_security_win/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# Build the winexe binary. +wine pip install -r src/requirements.txt +wine pyinstaller --onefile src/pandora_security_win.py +rm -rf build/ __pycache__/ pandora_security_win.spec diff --git a/pandora_agents/plugins/windows/pandora_security_win/docker/Dockerfile b/pandora_agents/plugins/windows/pandora_security_win/docker/Dockerfile new file mode 100644 index 0000000000..3f7e1d7133 --- /dev/null +++ b/pandora_agents/plugins/windows/pandora_security_win/docker/Dockerfile @@ -0,0 +1,34 @@ +FROM i386/debian + +# Update the package list. +RUN apt-get update + +# Install needed packages. +RUN apt-get install --yes \ +gnupg2 \ +unzip \ +software-properties-common \ +wget \ +xvfb + +# Install WineHQ. +RUN wget -q https://dl.winehq.org/wine-builds/winehq.key -O- | apt-key add - +RUN apt-add-repository https://dl.winehq.org/wine-builds/debian/; apt-get update +RUN apt-get install --yes --install-recommends wine + +# Use Windows 10. +COPY winetricks /tmp/winetricks +RUN /bin/bash /tmp/winetricks win10; rm -f /tmp/winetricks + +# Install Python. +RUN wget https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe +RUN xvfb-run wine python-3.8.10.exe /quiet Include_doc=0 Include_dev=0 Include_test=0 InstallAllUsers=1 PrependPath=1 TargetDir=c:\python; echo +ENV WINEPATH="c:\\python;c:\\python\Scripts" + +# Install Python modules.. +RUN wine pip.exe install wheel +RUN wine pip.exe install pyinstaller + +VOLUME ["/pybuild"] +WORKDIR "/pybuild" +ENTRYPOINT ["/bin/bash", "/pybuild/build.sh"] diff --git a/pandora_agents/plugins/windows/pandora_security_win/docker/winetricks b/pandora_agents/plugins/windows/pandora_security_win/docker/winetricks new file mode 100644 index 0000000000..08b3a7054e --- /dev/null +++ b/pandora_agents/plugins/windows/pandora_security_win/docker/winetricks @@ -0,0 +1,23525 @@ +#!/bin/sh +# shellcheck disable=SC2030,SC2031 +# SC2030: Modification of WINE is local (to subshell caused by (..) group). +# SC2031: WINE was modified in a subshell. That change might be lost +# This has to be right after the shebang, see: https://github.com/koalaman/shellcheck/issues/779 + +# Name of this version of winetricks (YYYYMMDD) +# (This doesn't change often, use the sha256sum of the file when reporting problems) +WINETRICKS_VERSION=20210206-next + +# This is a UTF-8 file +# You should see an o with two dots over it here [ö] +# You should see a micro (u with a tail) here [µ] +# You should see a trademark symbol here [™] + +#-------------------------------------------------------------------- +# +# Winetricks is a package manager for Win32 dlls and applications on POSIX. +# Features: +# - Consists of a single shell script - no installation required +# - Downloads packages automatically from original trusted sources +# - Points out and works around known wine bugs automatically +# - Both command-line and GUI operation +# - Can install many packages in silent (unattended) mode +# - Multiplatform; written for Linux, but supports OS X and Cygwin too +# +# Uses the following non-POSIX system tools: +# - wine is used to execute Win32 apps except on Cygwin. +# - ar, cabextract, unrar, unzip, and 7z are needed by some verbs. +# - aria2c, wget, curl, or fetch is needed for downloading. +# - fuseiso, archivemount (Linux), or hdiutil (macOS) is used to mount .iso images. +# - perl is used to munge steam config files. +# - pkexec, sudo, or kdesu (gksu/gksudo/kdesudo are deprecated upstream but also still supported) +# are used to mount .iso images if the user cached them with -k option. +# - sha256sum, sha256, or shasum (OSX 10.5 does not support these, 10.6+ is required) +# - torify is used with option "--torify" if sites are blocked in single countries. +# - xdg-open (if present) or open (for OS X) is used to open download pages +# for the user when downloads cannot be fully automated. +# - xz is used by some verbs to decompress tar archives. +# - zenity is needed by the GUI, though it can limp along somewhat with kdialog/xmessage. +# +# On Ubuntu, the following line can be used to install all the prerequisites: +# sudo apt install aria2 binutils cabextract fuseiso p7zip-full policykit-1 tor unrar unzip wine xdg-utils xz-utils zenity +# +# On Fedora, these commands can be used (RPM Fusion is used to install unrar): +# sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm +# sudo dnf install binutils cabextract fuseiso p7zip-plugins polkit tor unrar unzip wget wine xdg-utils xz zenity +# +# See https://github.com/Winetricks/winetricks for documentation and tutorials, +# including how to contribute changes to winetricks. +# +#-------------------------------------------------------------------- +# +# Copyright: +# Copyright (C) 2007-2014 Dan Kegel <dank!kegel.com> +# Copyright (C) 2008-2019 Austin English <austinenglish!gmail.com> +# Copyright (C) 2010-2011 Phil Blankenship <phillip.e.blankenship!gmail.com> +# Copyright (C) 2010-2015 Shannon VanWagner <shannon.vanwagner!gmail.com> +# Copyright (C) 2010 Belhorma Bendebiche <amro256!gmail.com> +# Copyright (C) 2010 Eleazar Galano <eg.galano!gmail.com> +# Copyright (C) 2010 Travis Athougies <iammisc!gmail.com> +# Copyright (C) 2010 Andrew Nguyen +# Copyright (C) 2010 Detlef Riekenberg +# Copyright (C) 2010 Maarten Lankhorst +# Copyright (C) 2010 Rico Schüller +# Copyright (C) 2011 Scott Jackson <sjackson2!gmx.com> +# Copyright (C) 2011 Trevor Johnson +# Copyright (C) 2011 Franco Junio +# Copyright (C) 2011 Craig Sanders +# Copyright (C) 2011 Matthew Bauer <mjbauer95!gmail.com> +# Copyright (C) 2011 Giuseppe Dia +# Copyright (C) 2011 Łukasz Wojniłowicz +# Copyright (C) 2011 Matthew Bozarth +# Copyright (C) 2013-2017 Andrey Gusev <andrey.goosev!gmail.com> +# Copyright (C) 2013-2020 Hillwood Yang <hillwood!opensuse.org> +# Copyright (C) 2013,2016 André Hentschel <nerv!dawncrow.de> +# +# License: +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program. If not, see +# <https://www.gnu.org/licenses/>. +# +#-------------------------------------------------------------------- +# Coding standards: +# +# Portability: +# - Portability matters, as this script is run on many operating systems +# - No bash, zsh, or csh extensions; only use features from +# the POSIX standard shell and utilities; see +# https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html +# - Prefer classic sh idioms as described in e.g. +# "Portable Shell Programming" by Bruce Blinn, ISBN: 0-13-451494-7 +# - If there is no universally available program for a needed function, +# support the two most frequently available programs. +# e.g. fall back to wget if curl is not available; likewise, support +# both sha256sum and sha256. +# - When using Unix commands like cp, put options before filenames so it will +# work on systems like OS X. e.g. "rm -f foo.dat", not "rm foo.dat -f" +# +# Formatting: +# - Your terminal and editor must be configured for UTF-8 +# If you do not see an o with two dots over it here [ö], stop! +# - Do not use tabs in this file or any verbs. +# - Indent 4 spaces. +# - Try to keep line length below 80 (makes printing easier) +# - Open curly braces ('{'), +# then should go on the same line as 'if/elif' +# close curlies ('}') and 'fi' should line up with the matching { or if, +# cases indented 4 spaces from 'case' and 'esac'. For instance, +# +# if test "$FOO" = "bar"; then +# echo "FOO is bar" +# fi +# +# case "$FOO" in +# bar) echo "FOO is still bar" ;; +# esac +# +# Commenting: +# - Comments should explain intent in English +# - Keep functions short and well named to reduce need for comments +# +# Naming: +# Public things defined by this script, for use by verbs: +# - Variables have uppercase names starting with W_ +# - Functions have lowercase names starting with w_ +# +# Private things internal to this script, not for use by verbs: +# - Local variables have lowercase names starting with uppercase _W_ +# (and should not use the local declaration, as it is not POSIX) +# - Global variables have uppercase names starting with WINETRICKS_ +# - Functions have lowercase names starting with winetricks_ +# FIXME: A few verbs still use winetricks-private functions or variables. +# +# Internationalization / localization: +# - Important or frequently used message should be internationalized +# so translations can be easily added. For example: +# case $LANG in +# de*) echo "Das ist die deutsche Meldung" ;; +# *) echo "This is the English message" ;; +# esac +# +# Support: +# - Winetricks is maintained by Austin English <austinenglish!$gmail.com>. +# - If winetricks has helped you out, then please consider donating to the FSF/EFF as a thank you: +# * EFF - https://supporters.eff.org/donate/button +# * FSF - https://my.fsf.org/donate +# - Donations towards electricity bill and developer beer fund can be sent via Bitcoin to 18euSAZztpZ9wcN6xZS3vtNnE1azf8niDk +# - I try to actively respond to bugs and pull requests on GitHub: +# - Bugs: https://github.com/Winetricks/winetricks/issues/new +# - Pull Requests: https://github.com/Winetricks/winetricks/pulls +#-------------------------------------------------------------------- + +# Using TRUE and FALSE instead of 0 and 1, to make the logic flow better and cause less confusion with other languages's definitions. +TRUE=0 +FALSE=1 + +# FIXME: XDG_CACHE_HOME is defined twice, clean this up +XDG_DATA_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}" +XDG_CACHE_HOME="${XDG_CACHE_HOME:-${HOME}/.cache}" + +W_COUNTRY="" +W_PREFIXES_ROOT="${WINE_PREFIXES:-${XDG_DATA_HOME}/wineprefixes}" + +# For temp files before $WINEPREFIX is available: +if [ -x "$(command -v mktemp 2>/dev/null)" ] ; then + W_TMP_EARLY="$(mktemp -d "${TMPDIR:-/tmp}/winetricks.XXXXXXXX")" +elif [ -w "${TMPDIR}" ] ; then + W_TMP_EARLY="${TMPDIR}" +else + W_TMP_EARLY="/tmp" +fi + +#---- Public Functions ---- + +# Ask permission to continue +w_askpermission() +{ + echo "------------------------------------------------------" + echo "$@" + echo "------------------------------------------------------" + + if test "${W_OPT_UNATTENDED}"; then + _W_timeout="--timeout 5" + fi + + case ${WINETRICKS_GUI} in + zenity) ${WINETRICKS_GUI} "${_W_timeout}" --question --title=winetricks --text="$(echo "$@" | sed 's,\\\\,\\\\\\\\,g')" --no-wrap;; + kdialog) ${WINETRICKS_GUI} --title winetricks --warningcontinuecancel "$@" ;; + none) + if [ -n "${_W_timeout}" ]; then + # -t / TMOUT don't seem to be portable, so just assume yes in unattended mode + w_info "Unattended mode, not prompting for confirmation" + else + printf %s "Press Y or N, then Enter: " + read -r response + test "${response}" = Y || test "${response}" = y + fi + esac + + if test $? -ne 0; then + case ${LANG} in + uk*) w_die "Операція скасована." ;; + pl*) w_die "Anulowano operację, opuszczanie." ;; + pt*) w_die "Operação cancelada, saindo." ;; + *) w_die "Operation cancelled, quitting." ;; + esac + exec false + fi + + unset _W_timeout +} + +# Display info message. Time out quickly if user doesn't click. +w_info() +{ + # If $WINETRICKS_SUPER_QUIET is set, w_info is a no-op: + if [ -z "${WINETRICKS_SUPER_QUIET}" ] ; then + echo "------------------------------------------------------" + echo "$@" + echo "------------------------------------------------------" + fi + + case ${WINETRICKS_GUI} in + zenity) ${WINETRICKS_GUI} --timeout=3 --info --width=400 --title=winetricks --text="$(echo "$@" | sed 's,\\\\,\\\\\\\\,g')" --no-wrap;; + kdialog) ${WINETRICKS_GUI} --title winetricks --msgbox "$@" ;; + none) ;; + esac +} + +# Display warning message to stderr (since it is called inside redirected code) +w_warn() +{ + # If $WINETRICKS_SUPER_QUIET is set, w_info is a no-op: + if [ -z "${WINETRICKS_SUPER_QUIET}" ] ; then + echo "------------------------------------------------------" + echo "warning: $*" + echo "------------------------------------------------------" + fi + + if test "${W_OPT_UNATTENDED}"; then + _W_timeout="--timeout 5" + fi + + case ${WINETRICKS_GUI} in + zenity) ${WINETRICKS_GUI} "${_W_timeout}" --error --width=400 --title=winetricks --text="$(echo "$@" | sed 's,\\\\,\\\\\\\\,g')";; + kdialog) ${WINETRICKS_GUI} --title winetricks --error "$@" ;; + none) ;; + esac + + unset _W_timeout +} + +# Display warning message to stderr (since it is called inside redirected code) +# And give gui user option to cancel (for when used in a loop) +# If user cancels, exit status is 1 +w_warn_cancel() +{ + echo "------------------------------------------------------" >&2 + echo "$@" >&2 + echo "------------------------------------------------------" >&2 + + if test "${W_OPT_UNATTENDED}"; then + _W_timeout="--timeout 5" + fi + + # Zenity has no cancel button, but will set status to 1 if you click the go-away X + case ${WINETRICKS_GUI} in + zenity) ${WINETRICKS_GUI} "${_W_timeout}" --error --title=winetricks --text="$(echo "$@" | sed 's,\\\\,\\\\\\\\,g')";; + kdialog) ${WINETRICKS_GUI} --title winetricks --warningcontinuecancel "$@" ;; + none) ;; + esac + + # can't unset, it clears status +} + +# Display fatal error message and terminate script +w_die() +{ + w_warn "$@" + + exit 1 +} + +# Kill all instances of a process in a safe way (Solaris killall kills _everything_) +w_killall() +{ + # shellcheck disable=SC2046,SC2086 + kill -s KILL $(pgrep $1) +} + +# Helper for w_package_broken() and friends. If --force is used, continue. +# If not, exit 99 or the optional value passed as $1 +_w_force_continue_check() +{ + exitval="${1:-99}" + if [ "${WINETRICKS_FORCE}" = 1 ]; then + w_warn "--force was used, so trying anyway. Caveat emptor." + else + exit "${exitval}" + fi +} + +_w_get_broken_messages() +{ + # bit of a hack, but otherwise if two bugs are reported, the second message won't get set: + unset broken_good_version_known + unset broken_good_and_bad_version_known + unset broken_only_bad_version_known + unset broken_no_version_known + + # Unify the broken messages (to make it easier for future translators): + case ${LANG} in + pt*) + # default broken messages + broken_good_version_known_default="O pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped}. Atualize para >=${good_version}. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_good_and_bad_version_known_default="O pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped}. Quebrado desde ${bad_version}. Atualize para >=${good_version}. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_only_bad_version_known_default="O pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped}. Quebrado desde ${bad_version}. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_no_version_known_default="Este pacote (${W_PACKAGE}) está quebrado. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + + # mingw broken messages + broken_good_version_known_mingw="Este pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped} quando o wine é feito com o mingw. Atualize para >=${good_version} ou refaça o wine sem mingw. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_good_and_bad_version_known_mingw="O pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped}. Quebrado desde ${bad_version} quando o wine é feito com o mingw. Atualize para >=${good_version} ou refaça o wine sem mingw. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_only_bad_version_known_mingw="O pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped}. Quebrado desde ${bad_version} quando o wine é feito com o mingw. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_no_version_known_mingw="Este pacote (${W_PACKAGE}) está quebrado quando o wine é feito com o mingw. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + + # no mingw broken messages + broken_good_version_known_no_mingw="Este pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped} quando o wine é feito sem mingw. Atualize para >=${good_version}. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_good_and_bad_version_known_no_mingw="O pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped}. Quebrado desde ${bad_version} quando o wine é feito sem mingw. Atualize para >=${good_version}. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_only_bad_version_known_no_mingw="O pacote (${W_PACKAGE}) está quebrado no wine-${_wine_version_stripped}. Quebrado desde ${bad_version} quando o wine é feito sem mingw. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_no_version_known_no_mingw="Este pacote (${W_PACKAGE}) está quebrado quando o wine é feito sem mingw. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + + # win64 broken messages + broken_good_version_known_win64="Este pacote (${W_PACKAGE}) está quebrado em 64-bit wine-${_wine_version_stripped}. Use um prefixo feito com WINEARCH=win32 ou atualize o wine para >=${good_version} para trabalhar com isto. Or use --force to try anyway. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_good_and_bad_version_known_win64="Este pacote (${W_PACKAGE}) está quebrado em 64-bit wine-${_wine_version_stripped}. Quebrado desde ${bad_version}. Use um prefixo feito com WINEARCH=win32 ou atualize o wine para >=${good_version} para trabalhar com isto. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_only_bad_version_known_win64="Este pacote (${W_PACKAGE}) está quebrado em 64-bit wine-${_wine_version_stripped}. Quebrado desde ${bad_version}. Use um prefixo feito com WINEARCH=win32 para trabalhar com isto. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + broken_no_version_known_win64="Este pacote (${W_PACKAGE}) está quebrado quando o wine é feito sem mingw. Veja ${bug_link} para mais informações. Use --force para tentar forçar de toda forma." + ;; + *) + # default broken messages + broken_good_version_known_default="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped}. Upgrade to >=${good_version}. See ${bug_link} for more info. Use --force to try anyway." + broken_good_and_bad_version_known_default="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped}. Broken since ${bad_version}. Upgrade to >=${good_version}. See ${bug_link} for more info. Use --force to try anyway." + broken_only_bad_version_known_default="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped}. Broken since ${bad_version}. See ${bug_link} for more info. Use --force to try anyway." + broken_no_version_known_default="This package (${W_PACKAGE}) is broken. See ${bug_link} for more info. Use --force to try anyway." + + # mingw broken messages + broken_good_version_known_mingw="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped} when wine is built with mingw. Upgrade to >=${good_version} or rebuild wine without mingw. See ${bug_link} for more info. Use --force to try anyway." + broken_good_and_bad_version_known_mingw="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped}. Broken since ${bad_version} when wine is built with mingw. Upgrade to >=${good_version} or rebuild wine without mingw. See ${bug_link} for more info. Use --force to try anyway." + broken_only_bad_version_known_mingw="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped}. Broken since ${bad_version} when wine is built with mingw. See ${bug_link} for more info. Use --force to try anyway." + broken_no_version_known_mingw="This package (${W_PACKAGE}) is broken when wine is built with mingw. See ${bug_link} for more info. Use --force to try anyway." + + # no mingw broken messages + broken_good_version_known_no_mingw="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped} when wine is built without mingw. Upgrade to >=${good_version}. See ${bug_link} for more info. Use --force to try anyway." + broken_good_and_bad_version_known_no_mingw="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped}. Broken since ${bad_version} when wine is built without mingw. Upgrade to >=${good_version}. See ${bug_link} for more info. Use --force to try anyway." + broken_only_bad_version_known_no_mingw="This package (${W_PACKAGE}) is broken in wine-${_wine_version_stripped}. Broken since ${bad_version} when wine is built without mingw. See ${bug_link} for more info. Use --force to try anyway." + broken_no_version_known_no_mingw="This package (${W_PACKAGE}) is broken when wine is built without mingw. See ${bug_link} for more info. Use --force to try anyway." + + # win64 broken messages + broken_good_version_known_win64="This package (${W_PACKAGE}) is broken on 64-bit wine-${_wine_version_stripped}. Use a prefix made with WINEARCH=win32 or upgrade wine to >=${good_version} to work around this. Or use --force to try anyway. See ${bug_link} for more info. Use --force to try anyway." + broken_good_and_bad_version_known_win64="This package (${W_PACKAGE}) is broken on 64-bit wine-${_wine_version_stripped}. Broken since ${bad_version}. Use a prefix made with WINEARCH=win32 or upgrade wine to >=${good_version} to work around this. See ${bug_link} for more info. Use --force to try anyway." + broken_only_bad_version_known_win64="This package (${W_PACKAGE}) is broken on 64-bit wine-${_wine_version_stripped}. Broken since ${bad_version}. Use a prefix made with WINEARCH=win32 to work around this. See ${bug_link} for more info. Use --force to try anyway." + broken_no_version_known_win64="This package (${W_PACKAGE}) is broken when wine is built without mingw. See ${bug_link} for more info. Use --force to try anyway." + ;; + esac +} + +# Warn user if package is broken (on all arches) in the current wine version. Bug report required. +w_package_broken() +{ + # FIXME: test cases for this + + bug_link="$1" + bad_version="$2" # Optional, for upstream regressions + good_version="$3" # Optional, if it's been fixed upstream + + _w_get_broken_messages + + broken_good_version_known="${broken_good_version_known:-${broken_good_version_known_default}}" + broken_good_and_bad_version_known="${broken_good_and_bad_version_known:-${broken_good_and_bad_version_known_default}}" + broken_only_bad_version_known="${broken_only_bad_version_known:-${broken_only_bad_version_known_default}}" + broken_no_version_known="${broken_no_version_known:-${broken_no_version_known_default}}" + + if [ -z "${bug_link}" ] ; then + w_die "Bug report link required!" + fi + + if [ -n "${good_version}" ] && [ -n "${bad_version}" ]; then + if w_wine_version_in "${bad_version},${good_version}"; then + w_warn "${broken_good_and_bad_version_known}" + else + return + fi + elif [ -n "${good_version}" ]; then + if w_wine_version_in ,"${good_version}"; then + w_warn "${broken_good_version_known}" + else + return + fi + elif [ -n "${bad_version}" ]; then + if w_wine_version_in "${bad_version}",; then + w_warn "${broken_only_bad_version_known}" + else + return + fi + else + w_warn "${broken_no_version_known}" + fi + + unset broken_good_version_known + unset broken_good_and_bad_version_known + unset broken_only_bad_version_known + unset broken_no_version_known + + _w_force_continue_check +} + +w_detect_mingw() +{ + # mingw builds have some (not yet all) .dll files in ${WINE}/../lib{,64}/wine + # non-mingw have exclusively .dll.so files + # + # It's more portable though, to check for 'Wine (placeholder|builtin) DLL' + # placeholder=no-mingw + # builtin=mingw (wine-4.11+) + + # See https://github.com/Winetricks/winetricks/issues/1461 + if w_wine_version_in 4.10, ; then + if grep -obUa "Wine placeholder DLL" "$(w_winepath -u "c:\\windows\\system32\\kernelbase.dll" 2>/dev/null)" | grep -q '64:Wine placeholder DLL'; then + _W_no_mingw=1 + elif grep -obUa "Wine builtin DLL" "$(w_winepath -u "c:\\windows\\system32\\kernelbase.dll" 2>/dev/null)" | grep -q '64:Wine builtin DLL'; then + _W_mingw=1 + else + w_warn "Unable to detect wine dlls, please file an issue on Github!" + fi + else + # FIXME: better message here (at least, easier to grep/recognize + echo "w_detect_mingw: mingw detection unimplemented for wine<4.11" + _W_no_mingw=1 + fi +} + +# Warn user if package is broken in the current wine version when compiled with mingw. Bug report required. +w_package_broken_mingw() +{ + # FIXME: test cases for this + + bug_link="$1" + bad_version="$2" # Optional, for upstream regressions + good_version="$3" # Optional, if it's been fixed upstream + + w_detect_mingw + + _w_get_broken_messages + + if [ -z "${_W_mingw}" ]; then + echo "Not using a mingw build, nothing to do" + return + fi + + broken_good_version_known="${broken_good_version_known_mingw}" + broken_good_and_bad_version_known="${broken_good_and_bad_version_known_mingw}" + broken_only_bad_version_known="${broken_only_bad_version_known_mingw}" + broken_no_version_known="${broken_no_version_known_mingw}" + + w_package_broken "${bug_link}" "${bad_version}" "${good_version}" +} + +# Warn user if package is broken in the current wine version when compiled without mingw. Bug report required. +w_package_broken_no_mingw() +{ + # FIXME: test cases for this + + bug_link="$1" + bad_version="$2" # Optional, for upstream regressions + good_version="$3" # Optional, if it's been fixed upstream + + w_detect_mingw + + _w_get_broken_messages + + if [ -z "${_W_no_mingw}" ]; then + echo "Using a mingw build, nothing to do" + return + fi + + broken_good_version_known="${broken_good_version_known_no_mingw}" + broken_good_and_bad_version_known="${broken_good_and_bad_version_known_no_mingw}" + broken_only_bad_version_known="${broken_only_bad_version_known_no_mingw}" + broken_no_version_known="${broken_no_version_known_no_mingw}" + + w_package_broken "${bug_link}" "${bad_version}" "${good_version}" +} + +# Warn user if package is broken on win64. +w_package_broken_win64() +{ + # FIXME: test cases for this + + bug_link="$1" + bad_version="$2" # Optional, for upstream regressions + good_version="$3" # Optional, if it's been fixed upstream + + _w_get_broken_messages + + if [ "${W_ARCH}" != "win64" ]; then + echo "Not using a 64-bit prefix, nothing to do" + return + fi + + broken_good_version_known="${broken_good_version_known_win64}" + broken_good_and_bad_version_known="${broken_good_and_bad_version_known_win64}" + broken_only_bad_version_known="${broken_only_bad_version_known_win64}" + broken_no_version_known="${broken_no_version_known_win64}" + + w_package_broken "${bug_link}" "${bad_version}" "${good_version}" +} + +# Some packages don't support win32, die with an appropriate message +# Returns 64 (for tests/winetricks-test) +w_package_unsupported_win32() +{ + if [ "${W_ARCH}" = "win32" ] ; then + w_warn "This package (${W_PACKAGE}) does not work on a 32-bit installation. You must use a prefix made with WINEARCH=win64." + _w_force_continue_check 64 + fi +} + + +# Some packages don't support win64, die with an appropriate message +# Note: this is for packages that natively don't support win64, not packages that are broken on wine64, for that, use w_package_broken_win64() +# Returns 32 (for tests/winetricks-test) +w_package_unsupported_win64() +{ + if [ "${W_ARCH}" = "win64" ] ; then + case ${LANG} in + pl*) w_warn "Ten pakiet (${W_PACKAGE}) nie działa z 64-bitową instalacją. Musisz użyć prefiksu utworzonego z WINEARCH=win32." ;; + pt*) w_warn "Este pacote (${W_PACKAGE}) não funciona em instalação de 64-bit. Você precisa usar um prefixo feito com WINEARCH=win32." ;; + ru*) w_warn "Данный пакет не работает в 64-битном окружении. Используйте префикс, созданный с помощью WINEARCH=win32." ;; + zh_CN*) w_warn "(${W_PACKAGE}) 无法在64位下工作,只能将容器变量设置为 WINEARCH=win32 安装。" ;; + zh_TW*|zh_HK*) w_warn "(${W_PACKAGE}) 無法在64元下工作,只能將容器變數設定為 WINEARCH=win32 安装。" ;; + *) w_warn "This package (${W_PACKAGE}) does not work on a 64-bit installation. You must use a prefix made with WINEARCH=win32." ;; + esac + _w_force_continue_check 32 + fi +} + +# For packages that are not well tested or have some known issues on win64, but aren't broken +w_package_warn_win64() +{ + if [ "${W_ARCH}" = "win64" ] ; then + case ${LANG} in + pt*) w_warn "Este pacote (${W_PACKAGE}) talvez não funcione completamente em 64-bit. Em prefixo 32-bit talvez funcione melhor." ;; + pl*) w_warn "Ten pakiet (${W_PACKAGE}) może nie działać poprawnie z 64-bitową instalacją. Prefiks 32-bitowy może działać lepiej." ;; + ru*) w_warn "Данный пакет может работать не полностью в 64-битном окружении. 32-битные префиксы могут работать лучше." ;; + zh_CN*) w_warn "(${W_PACKAGE}) 可能在64位环境下工作有问题,安装在32位环境可能会更好。" ;; + zh_TW*|zh_HK*) w_warn "(${W_PACKAGE}) 可能在64元環境下工作有問題,安装在32元環境可能會更好。" ;; + *) w_warn "This package (${W_PACKAGE}) may not fully work on a 64-bit installation. 32-bit prefixes may work better." ;; + esac + fi +} + +### w_try and w_try wrappers ### + +# Execute with error checking +# Put this in front of any command that might fail +w_try() +{ + # "VAR=foo w_try cmd" fails to put VAR in the environment + # with some versions of bash if w_try is a shell function?! + # This is a problem when trying to pass environment variables to e.g. wine. + # Adding an explicit export here works around it, so add any we use. + export WINEDLLOVERRIDES + # If $WINETRICKS_SUPER_QUIET is set, make w_try quiet + if [ -z "${WINETRICKS_SUPER_QUIET}" ]; then + printf '%s\n' "Executing $*" + fi + + # On Vista, we need to jump through a few hoops to run commands in Cygwin. + # First, .exe's need to have the executable bit set. + # Second, only cmd can run setup programs (presumably for security). + # If $1 ends in .exe, we know we're running on real Windows, otherwise + # $1 would be 'wine'. + case "$1" in + *.exe) + chmod +x "$1" || true # don't care if it fails + cmd /c "$@" + ;; + *) + "$@" + ;; + esac + status=$? + + en_ms_5="exit status ${status} - user selected 'Cancel'" + en_ms_105="exit status ${status} - normal, user selected 'restart now'" + en_ms_194="exit status ${status} - normal, user selected 'restart later'" + + en_abort="Note: command $* returned status ${status}. Aborting." + pl_abort="Informacja: poelcenie $* zwróciło status ${status}. Przerywam." + pt_abort="Nota: comando $* retornou o status ${status}. Cancelando." + ru_abort="Важно: команда $* вернула статус ${status}. Прерывание." + + if [ -n "${_w_ms_installer}" ]; then + case ${status} in + # Nonfatal + 0) ;; + 105) echo "${en_ms_105}" ;; + 194) echo "${en_ms_194}" ;; + + # Fatal + 5) w_die "${en_ms_5}" ;; + *) w_die "${en_abort}" ;; + esac + else + case ${status} in + 0) ;; + *) + case ${LANG} in + pl*) w_die "${pl_abort}" ;; + pt*) w_die "${pt_abort}" ;; + ru*) w_die "${ru_abort}" ;; + *) w_die "${en_abort}" ;; + esac + ;; + esac + fi +} + +# For some MS installers that have special exit codes: +w_try_ms_installer() +{ + _w_ms_installer=true + w_try "$@" + unset _w_ms_installer +} + +w_try_7z() +{ + # $1 - directory to extract to + # $2 - file to extract + # $3 .. $n - files to extract from the archive + + destdir="$1" + filename="$2" + shift 2 + + # Not always installed, use Windows 7-Zip as a fallback: + if [ -z "${WINETRICKS_FORCE_WIN_7Z}" ] && [ -x "$(command -v 7z 2>/dev/null)" ] ; then + w_try 7z x "${filename}" -o"${destdir}" "$@" + else + w_warn "Cannot find 7z. Using Windows 7-Zip instead. (You can avoid this by installing 7z, e.g. 'sudo apt-get install p7zip-full' or 'sudo yum install p7zip-plugins')." + WINETRICKS_OPT_SHAREDPREFIX=1 w_call 7zip + + # w_call above will wipe $W_TMP; if that's the CWD, things will break. So forcefully reset the directory: + w_try_cd "${PWD}" + + # errors out if there is a space between -o and path + w_try "${WINE}" "${W_PROGRAMS_X86_WIN}\\7-Zip\\7z.exe" x "$(w_pathconv -w "${filename}")" -o"$(w_pathconv -w "${destdir}")" "$@" + fi +} + +w_try_ar() +{ + # $1 - ar file (.deb) to extract (keeping internal paths, in cwd) + # $2 - file to extract (optional) + + # Not always installed, use Windows 7-zip as a fallback: + if [ -z "${WINETRICKS_FORCE_WIN_7Z}" ] && [ -x "$(command -v ar 2>/dev/null)" ]; then + w_try ar x "$@" + else + w_warn "Cannot find ar. Using Windows 7-zip instead. (You can avoid this by installing binutils, e.g. 'sudo apt-get install binutils' or 'sudo yum install binutils')." + WINETRICKS_OPT_SHAREDPREFIX=1 w_call 7zip + + # w_call above will wipe $W_TMP; if that's the CWD, things will break. So forcefully reset the directory: + w_try_cd "${PWD}" + + # -t* prevents 7-zip from decompressing .tar.xz to .tar, see + # https://sourceforge.net/p/sevenzip/discussion/45798/thread/8cd16946/?limit=25 + w_try "${WINE}" "${W_PROGRAMS_X86_WIN}\\7-Zip\\7z.exe" -t* x "$(w_pathconv -w "$1")" + fi +} + +w_try_cabextract() +{ + # Not always installed, but shouldn't be fatal unless it's being used + if test ! -x "$(command -v cabextract 2>/dev/null)"; then + w_die "Cannot find cabextract. Please install it (e.g. 'sudo apt-get install cabextract' or 'sudo yum install cabextract')." + fi + + w_try cabextract -q "$@" +} + +w_try_cd() +{ + w_try cd "$@" +} + +# Copy $1 into $2. If $2 is found to be a symbolic link, it will be removed first. +# This solve a problem of dlls being symbolic links on some versions or variants of wine. +# We want to replace the symbolic link and not copy into its target. +w_try_cp_dll() +{ + _W_srcfile="$1" + _W_destfile="$2" + [ -d "${_W_destfile}" ] && _W_destfile="${_W_destfile}/$(basename "${_W_srcfile}")" + + [ -h "${_W_destfile}" ] && w_try rm -f "${_W_destfile}" + w_try cp -f "${_W_srcfile}" "${_W_destfile}" +} + +# Copy font files matching a glob pattern from source directory to destination directory. +# Also remove any file in the destination directory that has the same name as +# any of the files that we're trying to copy, but with different case letters. +# Note: it converts font file names to lower case to avoid inconsistencies due to paths +# being case-insensitive under Wine. +w_try_cp_font_files() +{ + # $1 - source directory + # $2 - destination directory + # $3 - optional font file glob pattern (default: "*.ttf") + + _W_src_dir="$1" + _W_dest_dir="$2" + _W_pattern="$3" + shift 2 + + if test ! -d "${_W_src_dir}"; then + w_die "bug: missing source dir" + fi + + if test ! -d "${_W_dest_dir}"; then + w_die "bug: missing destination dir" + fi + + if test -z "${_W_pattern}"; then + _W_pattern="*.ttf" + fi + +# POSIX sh doesn't have a good way to handle this, but putting into a separate script +# and running with sh avoids it. +# +# See https://github.com/Winetricks/winetricks/issues/995 for details + +cat > "${WINETRICKS_WORKDIR}/cp_font_files.sh" <<_EOF_ +#!/bin/sh + _W_src_file="\$@" + + # Extract the file name and lower case it + _W_file_name="\$(basename "\$_W_src_file" | tr "[:upper:]" "[:lower:]")" + + # Remove any existing font files that might have the same name, but with different case characters + # LANG=C to avoid locale issues (https://github.com/Winetricks/winetricks/issues/1892) + LANG=C find "${_W_dest_dir}" -maxdepth 1 -type f -iname "\$_W_file_name" -exec rm '{}' ';' + + # FIXME: w_try() isn't available, need some better error handling: + cp -f "\$_W_src_file" "${_W_dest_dir}/\$_W_file_name" +_EOF_ + + # Use -exec "sh .." to avoid issues with noexec + # Gross quoting is to avoid SC2156 + # LANG=C to avoid locale issues (https://github.com/Winetricks/winetricks/issues/1892) + LANG=C find "${_W_src_dir}" -maxdepth 1 -type f -iname "${_W_pattern}" -exec sh -c 'sh '"${WINETRICKS_WORKDIR}/cp_font_files.sh"' "$1"' _ {} \; + + # Wait for Wine to add the new font to the registry under HKCU\Software\Wine\Fonts\Cache + w_wineserver -w + + unset _W_dest_dir +} + +w_try_msiexec64() +{ + if test "${W_ARCH}" != "win64"; then + w_die "bug: 64-bit msiexec called from a ${W_ARCH} prefix." + fi + + w_try "${WINE}" start /wait "${W_SYSTEM64_DLLS_WIN32}/msiexec.exe" ${W_OPT_UNATTENDED:+/q} "$@" +} + +w_try_regedit() +{ + # If on wow64, run under both wine and wine64 (otherwise they only go in the 32-bit registry afaict) + if [ "${W_ARCH}" = "win32" ]; then + w_try_regedit32 "$@" + elif [ "${W_ARCH}" = "win64" ]; then + w_try_regedit32 "$@" + w_try_regedit64 "$@" + fi +} + +w_try_regedit32() +{ + # on windows, doesn't work without cmd /c + case "${W_PLATFORM}" in + windows_cmd|wine_cmd) cmdc="cmd /c";; + *) unset cmdc ;; + esac + + # shellcheck disable=SC2086 + w_try "${WINE_MULTI}" ${cmdc} regedit ${W_OPT_UNATTENDED:+/S} "$@" +} + +w_try_regedit64() +{ + # on windows, doesn't work without cmd /c + case "${W_PLATFORM}" in + windows_cmd|wine_cmd) cmdc="cmd /c";; + *) unset cmdc ;; + esac + + # shellcheck disable=SC2086 + w_try "${WINE64}" ${cmdc} regedit ${W_OPT_UNATTENDED:+/S} "$@" +} + +w_try_regsvr() +{ + w_try "${WINE}" regsvr32 ${W_OPT_UNATTENDED:+/S} "$@" +} + +w_try_regsvr64() +{ + w_try "${WINE64}" regsvr32 ${W_OPT_UNATTENDED:+/S} "$@" +} + +w_try_unrar() +{ + # $1 - zipfile to extract (keeping internal paths, in cwd) + + # Not always installed, use Windows 7-Zip as a fallback: + if [ -z "${WINETRICKS_FORCE_WIN_7Z}" ] && [ -x "$(command -v unrar 2>/dev/null)" ]; then + w_try unrar x "$@" + else + w_warn "Cannot find unrar. Using Windows 7-Zip instead. (You can avoid this by installing unrar, e.g. 'sudo apt-get install unrar' or 'sudo yum install unrar')." + WINETRICKS_OPT_SHAREDPREFIX=1 w_call 7zip + + # w_call above will wipe $W_TMP; if that's the CWD, things will break. So forcefully reset the directory: + w_try_cd "${PWD}" + + w_try "${WINE}" "${W_PROGRAMS_X86_WIN}\\7-Zip\\7z.exe" x "$(w_pathconv -w "$1")" + fi +} + +w_try_unzip() +{ + # $1 - directory to extract to + # $2 - zipfile to extract + # $3 .. $n - files to extract from the archive + + destdir="$1" + zipfile="$2" + shift 2 + + # Not always installed, use Windows 7-Zip as a fallback: + if [ -z "${WINETRICKS_FORCE_WIN_7Z}" ] && [ -x "$(command -v unzip 2>/dev/null)" ]; then + # FreeBSD ships unzip, but it doesn't support self-compressed executables + # If it fails, fall back to 7-Zip: + unzip -o -q -d"${destdir}" "${zipfile}" "$@" + ret=$? + case ${ret} in + 0) return ;; + 1|*) w_warn "Unzip failed, trying Windows 7-Zip instead." ;; + esac + else + w_warn "Cannot find unzip. Using Windows 7-Zip instead. (You can avoid this by installing unzip, e.g. 'sudo apt-get install unzip' or 'sudo yum install unzip')." + fi + + WINETRICKS_OPT_SHAREDPREFIX=1 w_call 7zip + + # w_call above will wipe $W_TMP; if that's the CWD, things will break. So forcefully reset the directory: + w_try_cd "${PWD}" + + # errors out if there is a space between -o and path + w_try "${WINE}" "${W_PROGRAMS_X86_WIN}\\7-Zip\\7z.exe" x "$(w_pathconv -w "${zipfile}")" -o"$(w_pathconv -w "${destdir}")" "$@" +} + +### End of w_try ### + +w_read_key() +{ + if test ! "${W_OPT_UNATTENDED}"; then + W_KEY=dummy_to_make_autohotkey_happy + return "${TRUE}" + fi + + mkdir -p "${W_CACHE}/${W_PACKAGE}" + + # backwards compatible location + # Auth doesn't belong in cache, since restoring it requires user input + _W_keyfile="${W_CACHE}/${W_PACKAGE}/key.txt" + if ! test -f "${_W_keyfile}"; then + _W_keyfile="${WINETRICKS_AUTH}/${W_PACKAGE}/key.txt" + fi + if ! test -f "${_W_keyfile}"; then + # read key from user + case ${LANG} in + da*) _W_keymsg="Angiv venligst registrerings-nøglen for pakken '${W_PACKAGE}'" + _W_nokeymsg="Ingen nøgle angivet" + ;; + de*) _W_keymsg="Bitte einen Key für Paket '${W_PACKAGE}' eingeben" + _W_nokeymsg="Keinen Key eingegeben?" + ;; + pl*) _W_keymsg="Proszę podać klucz dla programu '${W_PACKAGE}'" + _W_nokeymsg="Nie podano klucza" + ;; + pt*) _W_keymsg="Por favor, insira a chave do aplicativo '${W_PACKAGE}'" + _W_nokeymsg="Nenhuma chave fornecida" + ;; + ru*) _W_keymsg="Пожалуйста, введите ключ для приложения '${W_PACKAGE}'" + _W_nokeymsg="Ключ не введён" + ;; + uk*) _W_keymsg="Будь ласка, введіть ключ для додатка '${W_PACKAGE}'" + _W_nokeymsg="Ключ не надано" + ;; + zh_CN*) _W_keymsg="按任意键为 '${W_PACKAGE}'" + _W_nokeymsg="No key given" + ;; + zh_TW*|zh_HK*) _W_keymsg="按任意鍵為 '${W_PACKAGE}'" + _W_nokeymsg="No key given" + ;; + *) _W_keymsg="Please enter the key for app '${W_PACKAGE}'" + _W_nokeymsg="No key given" + ;; + esac + + case ${WINETRICKS_GUI} in + *zenity) W_KEY=$(zenity --entry --text "${_W_keymsg}") ;; + *kdialog) W_KEY=$(kdialog --inputbox "${_W_keymsg}") ;; + *xmessage) w_die "sorry, can't read key from GUI with xmessage" ;; + none) printf %s "${_W_keymsg}": ; read -r W_KEY ;; + esac + + if test "${W_KEY}" = ""; then + w_die "${_W_nokeymsg}" + fi + echo "${W_KEY}" > "${_W_keyfile}" + fi + W_RAW_KEY=$(cat "${_W_keyfile}") + W_KEY=$(echo "${W_RAW_KEY}" | tr -d '[:blank:][=-=]') + unset _W_keyfile _W_keymsg _W_nokeymsg +} + +w_verify_cabextract_available() +{ + # If verb_a requires verb_b, then verba will fail when the dependency for verb_b is installed + # This should be called by verb_a, to give a proper warning + + w_try_cabextract -q -v >/dev/null 2>&1 +} + +# Convert a Windows path to a Unix path quickly. +# $1 is an absolute Windows path starting with c:\ or C:/ +# with no funny business, so we can use the simplest possible +# algorithm. +winetricks_wintounix() +{ + _W_winp_="$1" + # Remove drive letter and colon + _W_winp="${_W_winp_#??}" + # Prepend the location of drive c + printf %s "${WINEPREFIX}"/dosdevices/c: + # Change backslashes to slashes + echo "${_W_winp}" | sed 's,\\,/,g' +} + +# Convert between Unix path and Windows path +# Usage is lowest common denominator of cygpath/winepath +# so -u to convert to Unix, and -w to convert to Windows +w_pathconv() +{ + case "${W_PLATFORM}" in + windows_cmd) + # for some reason, cygpath turns some spaces into newlines?! + cygpath "$@" | tr '\012' '\040' | sed 's/ $//' + ;; + *) + case "$@" in + -u?c:\\*|-u?C:\\*|-u?c:/*|-u?C:/*) winetricks_wintounix "$2" ;; + *) w_winepath "$@" ;; + esac + ;; + esac +} + +# Expand an environment variable and print it to stdout +w_expand_env() +{ + winetricks_early_wine_arch cmd.exe /c echo "%$1%" +} + +# Get the latest tagged release from github.com API +w_get_github_latest_release() +{ + # FIXME: can we get releases that aren't on master branch? + org="$1" + repo="$2" + + WINETRICKS_SUPER_QUIET=1 w_download_to "${W_TMP_EARLY}" "https://api.github.com/repos/${org}/${repo}/releases/latest" "" "release.json" >/dev/null 2>&1 + + # aria2c condenses the json (https://github.com/aria2/aria2/issues/1389) + # but curl/wget don't, so handle both cases: + json_length="$(wc -l "${W_TMP_EARLY}/release.json")" + case "${json_length}" in + 0*) latest_version="$(sed -e "s/\",\"/|/g" "${W_TMP_EARLY}/release.json" | tr '|' '\n' | grep tag_name | sed 's@.*"@@')";; + *) latest_version="$(grep -w tag_name "${W_TMP_EARLY}/release.json" | cut -d '"' -f 4)";; + esac + + echo "${latest_version}" +} + +# Get the latest tagged prerelease from github.com API +w_get_github_latest_prerelease() +{ + # FIXME: can we get releases that aren't on master branch? + org="$1" + repo="$2" + + WINETRICKS_SUPER_QUIET=1 w_download_to "${W_TMP_EARLY}" "https://api.github.com/repos/${org}/${repo}/releases" "" "release.json" >/dev/null 2>&1 + + # aria2c condenses the json (https://github.com/aria2/aria2/issues/1389) + # but curl/wget don't, so handle both cases: + json_length="$(wc -l "${W_TMP_EARLY}/release.json")" + case "${json_length}" in + 0*) latest_version="$(sed -e "s/\",\"/|/g" "${W_TMP_EARLY}/release.json" | tr '|' '\n' | grep tag_name -m 1 | sed 's@.*"@@')";; + *) latest_version="$(grep -m 1 -w tag_name "${W_TMP_EARLY}/release.json" | cut -d '"' -f 4)";; + esac + + echo "${latest_version}" +} + +# get sha256sum string and set $_W_gotsha256sum to it +w_get_sha256sum() +{ + _W_sha256_file="$1" + + # See https://github.com/Winetricks/winetricks/issues/645 + # User is running winetricks from /dev/stdin + if [ -f "${_W_sha256_file}" ] || [ -h "${_W_sha256_file}" ] ; then + _W_gotsha256sum=$(${WINETRICKS_SHA256SUM} < "${_W_sha256_file}" | sed 's/(stdin)= //;s/ .*//') + else + w_warn "${_W_sha256_file} is not a regular file, not checking sha256sum" + return + fi +} + +w_get_shatype() { + _W_sum="$1" + + # tr -d " " is for FreeBSD/OS X/Solaris return a leading space: + # See https://stackoverflow.com/questions/30927590/wc-on-osx-return-includes-spaces/30927885#30927885 + _W_sum_length="$(echo "${_W_sum}" | tr -d "\\n" | wc -c | tr -d " ")" + case "${_W_sum_length}" in + 0) _W_shatype="none" ;; + 64) _W_shatype="sha256" ;; + # 128) sha512.. + *) w_die "unsupported shasum..bug" ;; + esac +} + +# verify a sha256sum +w_verify_sha256sum() +{ + _W_vs_wantsum=$1 + _W_vs_file=$2 + + w_get_sha256sum "${_W_vs_file}" + if [ "${_W_gotsha256sum}"x != "${_W_vs_wantsum}"x ] ; then + if [ "${WINETRICKS_FORCE}" = 1 ]; then + w_warn "sha256sum mismatch! However --force was used, so trying anyway. Caveat emptor." + else + w_askpermission "SHA256 mismatch!\n\nURL: ${_W_url}\nDownloaded: ${_W_gotsha256sum}\nExpected: ${_W_vs_wantsum}\n\nThis is often the result of an updated package such as vcrun2019.\nIf you are willing to accept the risk, you can bypass this check.\nAlternatively, you may use the --force option to ignore this check entirely.\n\nContinue anyway?" + fi + fi + unset _W_vs_wantsum _W_vs_file _W_gotsha256sum +} + +# verify any kind of shasum (that winetricks supports ;) ): +w_verify_shasum() +{ + _W_vs_wantsum="$1" + _W_vs_file="$2" + + w_get_shatype "${_W_vs_wantsum}" + + case "${_W_shatype}" in + none) w_warn "No checksum provided, not verifying" ;; + sha256) w_verify_sha256sum "${_W_sum}" "${_W_vs_file}" ;; + # 128) sha512.. + *) w_die "unsupported shasum..bug" ;; + esac +} + +# simple wrapper around winepath using winetricks_early_wine (to strip escape characters, etc.) +# For https://bugs.winehq.org/show_bug.cgi?id=48937 and any future regressions +w_winepath() +{ + winetricks_early_wine winepath "$@" +} + +# wget outputs progress messages that look like this: +# 0K .......... .......... .......... .......... .......... 0% 823K 40s +# This function replaces each such line with the pair of lines +# 0% +# # Downloading... 823K (40s) +# It uses minimal buffering, so each line is output immediately +# and the user can watch progress as it happens. + +# wrapper around wineserver, to let users know that it will wait indefinitely/kill stuff +w_wineserver() +{ + case "$@" in + *-k) w_warn "Running ${WINESERVER} -k. This will kill all running wine processes in prefix=${WINEPREFIX}";; + *-w) w_warn "Running ${WINESERVER} -w. This will hang until all wine processes in prefix=${WINEPREFIX} terminate";; + *) w_warn "Invoking wineserver with '$*'";; + esac + # shellcheck disable=SC2068 + "${WINESERVER}" $@ +} + +winetricks_parse_wget_progress() +{ + # Parse a percentage, a size, and a time into $1, $2 and $3 + # then use them to create the output line. + case ${LANG} in + pl*) perl -p -e \ + '$| = 1; s/^.* +([0-9]+%) +([0-9,.]+[GMKB]) +([0-9hms,.]+).*$/\1\n# Pobieranie… \2 (\3)/' ;; + ru*) perl -p -e \ + '$| = 1; s/^.* +([0-9]+%) +([0-9,.]+[GMKB]) +([0-9hms,.]+).*$/\1\n# Загрузка... \2 (\3)/' ;; + *) perl -p -e \ + '$| = 1; s/^.* +([0-9]+%) +([0-9,.]+[GMKB]) +([0-9hms,.]+).*$/\1\n# Downloading... \2 (\3)/' ;; + esac +} + +# Execute wget, and if in GUI mode, also show a graphical progress bar +winetricks_wget_progress() +{ + case ${WINETRICKS_GUI} in + zenity) + # Use a subshell so if the user clicks 'Cancel', + # the --auto-kill kills the subshell, not the current shell + ( + ${torify} wget "$@" 2>&1 | + winetricks_parse_wget_progress | \ + ${WINETRICKS_GUI} --progress --width 400 --title="${_W_file}" --auto-kill --auto-close + ) + err=$? + if test ${err} -gt 128; then + # 129 is 'killed by SIGHUP' + # Sadly, --auto-kill only applies to parent process, + # which was the subshell, not all the elements of the pipeline... + # have to go find and kill the wget. + # If we ran wget in the background, we could kill it more directly, perhaps... + if pid=$(pgrep -f ."${_W_file}"); then + echo User aborted download, killing wget + # shellcheck disable=SC2086 + kill ${pid} + fi + fi + return ${err} + ;; + *) ${torify} wget "$@" ;; + esac +} + +w_dotnet_verify() +{ + case "$1" in + dotnet11) version="1.1" ;; + dotnet11sp1) version="1.1 SP1" ;; + dotnet20) version="2.0" ;; + dotnet20sp1) version="2.0 SP1" ;; + dotnet20sp2) version="2.0 SP2" ;; + dotnet30) version="3.0" ;; + dotnet30sp1) version="3.0 SP1" ;; + dotnet35) version="3.5" ;; + dotnet35sp1) version="3.5 SP1" ;; + dotnet40) version="4 Client" ;; + dotnet45) version="4.5" ;; + dotnet452) version="4.5.2" ;; + dotnet46) version="4.6" ;; + dotnet461) version="4.6.1" ;; + dotnet462) version="4.6.2" ;; + dotnet471) version="4.7.1" ;; + dotnet472) version="4.7.2" ;; + dotnet48) version="4.8" ;; + *) echo error ; exit 1 ;; + esac + + w_call dotnet_verifier + + # FIXME: The logfile may be useful somewhere (or at least print the location) + + # for 'run, netfx_setupverifier.exe /q:a /c:"setupverifier2.exe"' line + # shellcheck disable=SC2140 + w_ahk_do " + SetTitleMatchMode, 2 + ; FIXME; this only works the first time? Check if it's already verified somehow.. + + run, netfx_setupverifier.exe /q:a /c:"setupverifier2.exe" + winwait, Verification Utility + ControlClick, Button1 + Control, ChooseString, NET Framework ${version}, ComboBox1 + ControlClick, Button1 ; Verify + loop, 60 + { + sleep 1000 + process, exist, setupverifier2.exe + dn_pid=%ErrorLevel% + if dn_pid = 0 + { + break + } + ifWinExist, Verification Utility, Product verification failed + { + process, close, setupverifier2.exe + exit 1 + } + ifWinExist, Verification Utility, Product verification succeeded + { + process, close, setupverifier2.exe + break + } + } + " + dn_status="$?" + w_info ".Net Verifier returned ${dn_status}" +} + +# Checks if the user can run the self-update/rollback commands +winetricks_check_update_availability() +{ + # Prevents the development file overwrite: + if test -d "../.git"; then + w_warn "You're running in a dev environment. Please make a copy of the file before running this command." + exit + fi + + # Checks read/write permissions on update directories + if ! { test -r "$0" && test -w "$0" && test -w "${0%/*}" && test -x "${0%/*}"; }; then + w_warn "You don't have the proper permissions to run this command. Try again with sudo or as root." + exit + fi +} + +winetricks_selfupdate() +{ + winetricks_check_update_availability + + _W_filename="${0##*/}" + _W_rollback_file="${0}.bak" + _W_update_file="${0}.update" + + _W_tmpdir=${TMPDIR:-/tmp} + _W_tmpdir="$(mktemp -d "${_W_tmpdir}/${_W_filename}.XXXXXXXX")" + + w_download_to "${_W_tmpdir}" https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks "" "${_W_filename}" + + # 2016/10/26: now file is uncompressed? Handle both cases: + update_file_type="$(file "${_W_tmpdir}/${_W_filename}")" + case "${update_file_type}" in + *"POSIX shell script"*) + #echo "already decompressed!" + w_try mv "${_W_tmpdir}/${_W_filename}" "${_W_update_file}" + ;; + *"gzip compressed data"*) + w_try mv "${_W_tmpdir}/${_W_filename}" "${_W_update_file}.gz" + w_try gunzip "${_W_update_file}.gz" + ;; + *) + echo "Unknown file type: ${update_file_type}" + exit 1 + ;; + esac + + w_try rmdir "${_W_tmpdir}" + + w_try cp "$0" "${_W_rollback_file}" + w_try chmod -x "${_W_rollback_file}" + + w_try mv "${_W_update_file}" "$0" + w_try chmod +x "$0" + + w_warn "Update finished! The current version is $($0 -V). Use 'winetricks --update-rollback' to return to the previous version." + + exit +} + +winetricks_selfupdate_rollback() +{ + winetricks_check_update_availability + + _W_rollback_file="${0}.bak" + + if test -f "${_W_rollback_file}"; then + w_try mv "${_W_rollback_file}" "$0" + w_try chmod +x "$0" + w_warn "Rollback finished! The current version is $($0 -V)." + else + w_warn "Nothing to rollback." + fi + exit; +} + +# Download a file +# Usage: w_download_to (packagename|path to download file) url [shasum [filename [cookie jar]]] +# Caches downloads in winetrickscache/$packagename +w_download_to() +{ + winetricks_download_setup + + _W_packagename="$1" # or path to download file to + _W_url="$2" + _W_sum="$3" + _W_file="$4" + _W_cookiejar="$5" + + case ${_W_packagename} in + .) w_die "bug: please do not download packages to top of cache" ;; + esac + + if echo "${_W_url}" | grep ' ' ; then + w_die "bug: please use %20 instead of literal spaces in urls, curl rejects spaces, and they make life harder for linkcheck.sh" + fi + if [ "${_W_file}"x = ""x ] ; then + _W_file=$(basename "${_W_url}") + fi + + w_get_shatype "${_W_sum}" + + if echo "${_W_packagename}" | grep -q -e '\/-' -e '^-'; then + w_die "Invalid path ${_W_packagename} given" + else + if ! echo "${_W_packagename}" | grep -q '^/' ; then + _W_cache="${W_CACHE}/${_W_packagename}" + else + _W_cache="${_W_packagename}" + fi + fi + + if test ! -d "${_W_cache}" ; then + w_try mkdir -p "${_W_cache}" + fi + + # Try download twice + checksum_ok="" + tries=0 + # Set olddir before entering the loop, otherwise second try will overwrite + _W_dl_olddir=$(pwd) + while test ${tries} -lt 2 ; do + # Warn on a second try + test "${tries}" -eq 1 && winetricks_dl_warning + tries=$((tries + 1)) + + if test -s "${_W_cache}/${_W_file}" ; then + if test "${_W_sum}" ; then + if test ${tries} = 1 ; then + # The cache was full. If the file is larger than 500 MB, + # don't checksum it, that just annoys the user. + # shellcheck disable=SC2046 + if test $(du -k "${_W_cache}/${_W_file}" | cut -f1) -gt 500000 ; then + checksum_ok=1 + break + fi + fi + # If checksum matches, declare success and exit loop + case "${_W_shatype}" in + none) + w_warn "No checksum provided, not verifying" + ;; + sha256) + w_get_sha256sum "${_W_cache}/${_W_file}" + if [ "${_W_gotsha256sum}"x = "${_W_sum}"x ] ; then + checksum_ok=1 + break + fi + ;; + esac + + if test "${WINETRICKS_FORCE}" != 1; then + case ${LANG} in + pl*) w_warn "Niezgodność sum kontrolnych dla ${_W_cache}/${_W_file}, pobieram ponownie" ;; + pt*) w_warn "Checksum para ${_W_cache}/${_W_file} não confere, tentando novo download" ;; + ru*) w_warn "Контрольная сумма файла ${_W_cache}/${_W_file} не совпадает, попытка повторной загрузки" ;; + *) w_warn "Checksum for ${_W_cache}/${_W_file} did not match, retrying download" ;; + esac + mv -f "${_W_cache}/${_W_file}" "${_W_cache}/${_W_file}".bak + else + w_warn "Checksum for ${_W_cache}/${_W_file} did not match, but --force was used, so ignoring and trying anyway." + checksum_ok=1 + break + fi + else + # file exists, no checksum known, declare success and exit loop + break + fi + elif test -f "${_W_cache}/${_W_file}" ; then + # zero-length file, just delete before retrying + rm "${_W_cache}/${_W_file}" + fi + + w_try_cd "${_W_cache}" + # Mac folks tend to have curl rather than wget + # On Mac, 'which' doesn't return good exit status + echo "Downloading ${_W_url} to ${_W_cache}" + + # For sites that prefer Mozilla in the user-agent header, set W_BROWSERAGENT=1 + case "${W_BROWSERAGENT}" in + 1) _W_agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" ;; + *) _W_agent="" ;; + esac + + if [ "${WINETRICKS_DOWNLOADER}" = "aria2c" ] ; then + # Note: aria2c wants = for most options or silently fails + + # (Slightly fancy) aria2c support + # See https://github.com/Winetricks/winetricks/issues/612 + # --daemon=false --enable-rpc=false to ensure aria2c doesnt go into the background after starting + # and prevent any attempts to rebind on the RPC interface specified in someone's config. + # --input-file='' if the user config has a input-file specified then aria2 will read it and + # attempt to download everything in that input file again. + # --save-session='' if the user has specified save-session in their config, their session will be + # ovewritten by the new aria2 process + + # shellcheck disable=SC2086 + ${torify} aria2c \ + ${aria2c_torify_opts:+"${aria2c_torify_opts}"} \ + --connect-timeout="${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --continue \ + --daemon=false \ + --dir="${_W_cache}" \ + --enable-rpc=false \ + --input-file='' \ + --max-connection-per-server=5 \ + --max-tries="${WINETRICKS_DOWNLOADER_RETRIES}" \ + --out="${_W_file}" \ + --save-session='' \ + --stream-piece-selector=geom \ + "${_W_url}" + elif [ "${WINETRICKS_DOWNLOADER}" = "wget" ] ; then + # Use -nd to insulate ourselves from people who set -x in WGETRC + # [*] --retry-connrefused works around the broken sf.net mirroring + # system when downloading corefonts + # [*] --read-timeout is useful on the adobe server that doesn't + # close the connection unless you tell it to (control-C or closing + # the socket) + + # shellcheck disable=SC2086 + winetricks_wget_progress \ + -O "${_W_file}" \ + -nd \ + -c\ + --read-timeout 300 \ + --retry-connrefused \ + --timeout "${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --tries "${WINETRICKS_DOWNLOADER_RETRIES}" \ + ${_W_cookiejar:+--load-cookies "${_W_cookiejar}"} \ + ${_W_agent:+--user-agent="${_W_agent}"} \ + "${_W_url}" + elif [ "${WINETRICKS_DOWNLOADER}" = "curl" ] ; then + # Note: curl does not accept '=' when passing options + # curl doesn't get filename from the location given by the server! + # fortunately, we know it + + # shellcheck disable=SC2086 + ${torify} curl \ + --connect-timeout "${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + -L \ + -o "${_W_file}" \ + -C - \ + --retry "${WINETRICKS_DOWNLOADER_RETRIES}" \ + ${_W_cookiejar:+--cookie "${_W_cookiejar}"} \ + ${_W_agent:+--user-agent "${_W_agent}"} \ + "${_W_url}" + elif [ "${WINETRICKS_DOWNLOADER}" = "fetch" ] ; then + # Note: fetch does not support configurable retry count + + # shellcheck disable=SC2086 + ${torify} fetch \ + -T "${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + -o "${_W_file}" \ + ${_W_agent:+--user-agent="${_W_agent}"} \ + "${_W_url}" + else + w_die "Here be dragons" + fi + + if test $? = 0; then + # Need to decompress .exe's that are compressed, else Cygwin fails + # Also affects ttf files on github + # FIXME: gzip hack below may no longer be needed, but need to investigate before removing + _W_filetype=$(command -v file 2>/dev/null) + case ${_W_filetype}-${_W_file} in + /*-*.exe|/*-*.ttf|/*-*.zip) + case $(file "${_W_file}") in + *:*gzip*) mv "${_W_file}" "${_W_file}.gz"; gunzip < "${_W_file}.gz" > "${_W_file}";; + esac + esac + + # On Cygwin, .exe's must be marked +x + case "${_W_file}" in + *.exe) chmod +x "${_W_file}" ;; + esac + + w_try_cd "${_W_dl_olddir}" + unset _W_dl_olddir + + # downloaded successfully, exit from loop + break + elif test ${tries} = 2; then + test -f "${_W_file}" && rm "${_W_file}" + w_die "Downloading ${_W_url} failed" + fi + # Download from the Wayback Machine on second try + _W_url="https://web.archive.org/web/2000/${_W_url}" + done + + if test "${_W_sum}" && test ! "${checksum_ok}"; then + w_verify_shasum "${_W_sum}" "${_W_cache}/${_W_file}" + fi +} + +# Open a folder for the user in the specified directory +# Usage: w_open_folder directory +w_open_folder() +{ + for _W_cmd in xdg-open open cygstart true ; do + _W_cmdpath=$(command -v ${_W_cmd}) + if test -n "${_W_cmdpath}" ; then + break + fi + done + ${_W_cmd} "$1" & + unset _W_cmd _W_cmdpath +} + +# Open a web browser for the user to the given page +# Usage: w_open_webpage url +w_open_webpage() +{ + # See https://www.dwheeler.com/essays/open-files-urls.html + for _W_cmd in xdg-open sdtwebclient cygstart open firefox true ; do + _W_cmdpath=$(command -v ${_W_cmd}) + if test -n "${_W_cmdpath}" ; then + break + fi + done + ${_W_cmd} "$1" & + unset _W_cmd _W_cmdpath +} + +# Download a file +# Usage: w_download url [shasum [filename [cookie jar]]] +# Caches downloads in winetrickscache/$W_PACKAGE +w_download() +{ + w_download_to "${W_PACKAGE}" "$@" +} + +# Download one or more files via BitTorrent +# Usage: w_download_torrent [foo.torrent] +# Caches downloads in $W_CACHE/$W_PACKAGE, torrent files are assumed to be there +# If no foo.torrent is given, will add ALL .torrent files in $W_CACHE/$W_PACKAGE +w_download_torrent() +{ + # FIXME: figure out how to extract the filename from the .torrent file + # so callers don't need to check if the files are already downloaded. + + w_call utorrent + + UT_WINPATH="${W_CACHE_WIN}\\${W_PACKAGE}" + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + if [ "$2"x != ""x ] ; then # foo.torrent parameter supplied + w_try "${WINE}" utorrent "/DIRECTORY" "${UT_WINPATH}" "${UT_WINPATH}\\$2" & + else # grab all torrents + for torrent in *.torrent ; do + w_try "${WINE}" utorrent "/DIRECTORY" "${UT_WINPATH}" "${UT_WINPATH}\\${torrent}" & + done + fi + + # Start uTorrent, have it wait until all downloads are finished + w_ahk_do " + SetTitleMatchMode, 2 + winwait, Torrent + Loop + { + sleep 6000 + ifwinexist, Torrent, default + { + ;should uTorrent be the default torrent app? + controlclick, Button1, Torrent, default ; yes + continue + } + ifwinexist, Torrent, already + { + ;torrent already registered, fine + controlclick, Button1, Torrent, default ; yes + continue + } + ifwinexist, Torrent, Bandwidth + { + ;Cancels bandwidth test on first run of uTorrent + controlclick, Button5, Torrent, Bandwidth + continue + } + ifwinexist, Torrent, version + { + ;Decline upgrade to newer version + controlclick, Button3, Torrent, version + controlclick, Button2, Torrent, version + continue + } + break + } + ;Sets parameter to close uTorrent once all downloads are complete + winactivate, Torrent 2.0 + send !o + send a{Down}{Enter} + winwaitclose, Torrent 2.0 + " +} + +w_download_manual_to() +{ + _W_packagename="$1" + _W_url="$2" + _W_file="$3" + _W_shasum="$4" + + # shellcheck disable=SC2154 + case "${media}" in + "download") w_info "FAIL: bug: media type is download, but w_download_manual was called. Programmer, please change verb's media type to manual_download." ;; + esac + + if ! test -f "${W_CACHE}/${_W_packagename}/${_W_file}"; then + case ${LANG} in + da*) _W_dlmsg="Hent venligst filen ${_W_file} fra ${_W_url} og placér den i ${W_CACHE}/${_W_packagename}, kør derefter dette skript.";; + de*) _W_dlmsg="Bitte laden Sie ${_W_file} von ${_W_url} runter, stellen Sie's in ${W_CACHE}/${_W_packagename}, dann wiederholen Sie dieses Kommando.";; + pl*) _W_dlmsg="Proszę pobrać plik ${_W_file} z ${_W_url}, następnie umieścić go w ${W_CACHE}/${_W_packagename}, a na końcu uruchomić ponownie ten skrypt.";; + pt*) _W_dlmsg="Baixe o ${_W_file} de ${_W_url}, salve em ${W_CACHE}/${_W_packagename}, então tente executar novamente este script.";; + ru*) _W_dlmsg="Пожалуйста, скачайте файл ${_W_file} по адресу ${_W_url}, и поместите его в ${W_CACHE}/${_W_packagename}, а затем запустите winetricks заново.";; + uk*) _W_dlmsg="Будь ласка, звантажте ${_W_file} з ${_W_url}, розташуйте в ${W_CACHE}/${_W_packagename}, потім запустіть скрипт знову.";; + zh_CN*) _W_dlmsg="请从 ${_W_url} 下载 ${_W_file},并置放于 ${W_CACHE}/${_W_packagename}, 然后重新运行 winetricks.";; + zh_TW*|zh_HK*) _W_dlmsg="請從 ${_W_url} 下載 ${_W_file},并置放於 ${W_CACHE}/${_W_packagename}, 然后重新執行 winetricks.";; + *) _W_dlmsg="Please download ${_W_file} from ${_W_url}, place it in ${W_CACHE}/${_W_packagename}, then re-run this script.";; + esac + + mkdir -p "${W_CACHE}/${_W_packagename}" + w_open_folder "${W_CACHE}/${_W_packagename}" + w_open_webpage "${_W_url}" + sleep 3 # give some time for web browser to open + w_die "${_W_dlmsg}" + # FIXME: wait in loop until file is finished? + fi + + if test "${_W_shasum}"; then + w_verify_shasum "${_W_shasum}" "${W_CACHE}/${_W_packagename}/${_W_file}" + fi + + unset _W_dlmsg _W_file _W_sha256sum _W_url +} + +w_download_manual() +{ + w_download_manual_to "${W_PACKAGE}" "$@" +} + +# Turn off news, overlays, and friend interaction in Steam +# Run from inside C:\Program Files\Steam +w_steam_safemode() +{ + cat > "${W_TMP}/steamconfig.pl" <<"_EOF_" +#!/usr/bin/env perl +# Parse Steam's localconfig.vcf, add settings to it, and write it out again +# The file is a recursive dictionary +# +# FILE :== CONTAINER +# +# VALUE :== "name" "value" NEWLINE +# +# CONTAINER :== "name" NEWLINE "{" NEWLINE ( VALUE | CONTAINER ) * "}" NEWLINE +# +# We load it into a recursive hash. + +use strict; +use warnings; + +sub read_into_container{ + my( $pcontainer ) = @_; + + $_ = <FILE> || w_die "Can't read first line of container"; + /{/ || w_die "First line of container was not {"; + while (<FILE>) { + chomp; + if (/"([^"]*)"\s*"([^"]*)"$/) { + ${$pcontainer}{$1} = $2; + } elsif (/"([^"]*)"$/) { + my( %newcon, $name ); + $name = $1; + read_into_container(\%newcon); + ${$pcontainer}{$name} = \%newcon; + } elsif (/}/) { + return; + } else { + w_die "huh?"; + } + } +} + +sub dump_container{ + my( $pcontainer, $indent ) = @_; + foreach (sort(keys(%{$pcontainer}))) { + my( $val ) = ${$pcontainer}{$_}; + if (ref $val eq 'HASH') { + print "${indent}\"$_\"\n"; + print "${indent}{\n"; + dump_container($val, "$indent\t"); + print "${indent}}\n"; + } else { + print "${indent}\"${_}\"\t\t\"$val\"\n"; + } + } +} + +# Disable anything unsafe or annoying +sub disable_notifications{ + my( $pcontainer ) = @_; + ${$pcontainer}{"friends"}{"PersonaStateDesired"} = "1"; + ${$pcontainer}{"friends"}{"Notifications_ShowIngame"} = "0"; + ${$pcontainer}{"friends"}{"Sounds_PlayIngame"} = "0"; + ${$pcontainer}{"friends"}{"Notifications_ShowOnline"} = "0"; + ${$pcontainer}{"friends"}{"Sounds_PlayOnline"} = "0"; + ${$pcontainer}{"friends"}{"Notifications_ShowMessage"} = "0"; + ${$pcontainer}{"friends"}{"Sounds_PlayMessage"} = "0"; + ${$pcontainer}{"friends"}{"AutoSignIntoFriends"} = "0"; + ${$pcontainer}{"News"}{"NotifyAvailableGames"} = "0"; + ${$pcontainer}{"system"}{"EnableGameOverlay"} = "0"; +} + +# Read the file +my(%top); +open FILE, $ARGV[0] || w_die "cannot open ".$ARGV[0]; +my($line); +$line = <FILE> || w_die "Could not read first line from ".$ARGV[0]; +$line =~ /"UserLocalConfigStore"/ || w_die "this is not a localconfig.vdf file"; +read_into_container(\%top); + +# Modify it +disable_notifications(\%top); + +# Write modified file +print "\"UserLocalConfigStore\"\n"; +print "{\n"; +dump_container(\%top, "\t"); +print "}\n"; +_EOF_ + +for file in userdata/*/config/localconfig.vdf ; do + cp "${file}" "${file}.old" + perl "${W_TMP}"/steamconfig.pl "${file}.old" > "${file}" +done +} + +w_question() +{ + case ${WINETRICKS_GUI} in + *zenity) ${WINETRICKS_GUI} --entry --text "$1" ;; + *kdialog) ${WINETRICKS_GUI} --inputbox "$1" ;; + *xmessage) w_die "sorry, can't ask question with xmessage" ;; + none) + # Using printf instead of echo because we don't want a newline + printf "%s" "$1" >&2 ; + read -r W_ANSWER ; + echo "${W_ANSWER}"; + unset W_ANSWER;; + esac +} + +# Reads steam username and password from environment, cache, or user +# If had to ask user, cache answer. +w_steam_getid() +{ + #TODO: Translate + _W_steamidmsg="Please enter your Steam login ID (not email)" + _W_steampasswordmsg="Please enter your Steam password" + + if test ! "${W_STEAM_ID}"; then + if test -f "${W_CACHE}"/steam_userid.txt; then + W_STEAM_ID=$(cat "${W_CACHE}"/steam_userid.txt) + else + W_STEAM_ID=$(w_question "${_W_steamidmsg}") + echo "${W_STEAM_ID}" > "${W_CACHE}"/steam_userid.txt + chmod 600 "${W_CACHE}"/steam_userid.txt + fi + fi + if test ! "${W_STEAM_PASSWORD}"; then + if test -f "${W_CACHE}"/steam_password.txt; then + W_STEAM_PASSWORD=$(cat "${W_CACHE}"/steam_password.txt) + else + W_STEAM_PASSWORD=$(w_question "${_W_steampasswordmsg}") + echo "${W_STEAM_PASSWORD}" > "${W_CACHE}"/steam_password.txt + chmod 600 "${W_CACHE}"/steam_password.txt + fi + fi +} + +# Usage: +# w_steam_install_game steamidnum windowtitle +w_steam_install_game() +{ + _W_steamid=$1 + _W_steamtitle="$2" + + w_steam_getid + + # Install the steam runtime + WINETRICKS_OPT_SHAREDPREFIX=1 w_call steam + + # Steam puts up a bunch of windows. Here's the sequence: + # "Steam - Updating" - wait for it to close. May appear twice in a row. + # "Steam - Login" - wait for it to close (credentials already given on cmdline) + # "Steam" (small window) - connecting, wait for it to close + # "Steam" (large window) - the main window + # "Steam - Updates News" - close it forcefully + # "Install - $title" - send enter, click a couple checkboxes, send enter again + # "Updating $title" - small download progress dialog + # "Steam - Ready" game install done. (Only comes up if main window not up.) + + w_try_cd "${W_PROGRAMS_X86_UNIX}/Steam" + w_ahk_do " + SetTitleMatchMode 2 + SetWinDelay 500 + ; Run steam once until it finishes its initial update. + ; For me, this exits at 26%. + run steam.exe -applaunch ${_W_steamid} -login ${W_STEAM_ID} ${W_STEAM_PASSWORD} + Loop + { + ifWinExist, Steam - Updating + { + winwaitclose, Steam + process close, Steam.exe + sleep 1000 + ; Run a second time; let it finish updating, then kill it. + run steam.exe + winwait Steam - Updating + winwaitclose + process close, Steam.exe + ; Run a third time, have it log in, wait until it has finished connecting + run steam.exe -applaunch ${_W_steamid} -login ${W_STEAM_ID} ${W_STEAM_PASSWORD} + } + ifWinExist, Steam Login + { + break + } + sleep 500 + } + ; wait for login window to close + winwaitclose + + winwait Steam ; wait for small <<connecting>> window + winwaitclose + " + +if [ "${STEAM_DVD}" = "TRUE" ]; then + w_ahk_do " + ; Run a fourth time, have it install the app. + run steam.exe -install ${W_ISO_MOUNT_LETTER}:\\ + " +else + w_ahk_do " + ; Run a fourth time, have it install the app. + run steam.exe -applaunch ${_W_steamid} + " +fi + + w_ahk_do " + winwait Install - ${_W_steamtitle} + if ( w_opt_unattended > 0 ) { + send {enter} ; next (for 1st of 3 pages of install dialog) + sleep 1000 + click 32, 91 ; uncheck create menu item? + click 32, 119 ; check create desktop icon? + send {enter} ; next (for 2nd of 3 pages of install dialog) + ; dismiss any news dialogs, and click 'next' on third page of install dialog + loop + { + sleep 1000 + ifwinexist Steam - Updates News + { + winclose + continue + } + ifwinexist Install - ${_W_steamtitle} + { + winactivate + send {enter} ; next (for 3rd of 3 pages of install dialog) + } + ifwinnotexist Install - ${_W_steamtitle} + { + sleep 1000 + ifwinnotexist Install - ${_W_steamtitle} + break + } + } + } + " + +if [ "${STEAM_DVD}" = "TRUE" ]; then + # Wait for install to finish + while true; do + grep "SetHasAllLocalContent(true) called for ${_W_steamid}" "${W_PROGRAMS_X86_UNIX}/Steam/logs/download_log.txt" && break + sleep 5 + done +fi + + w_ahk_do " + ; For DVD's: theoretically, it should be installed now, but most games want to download updates. Do that now. + ; For regular downloads: relaunch to coax steam into showing its nice small download progress dialog + process close, Steam.exe + run steam.exe -login ${W_STEAM_ID} ${W_STEAM_PASSWORD} -applaunch ${_W_steamid} + winwait Ready - + process close, Steam.exe + " + + # Not all users need this disabled, but let's play it safe for now + if w_workaround_wine_bug 22053 "Disabling in-game notifications to prevent game crashes on some machines."; then + w_steam_safemode + fi + + unset _W_steamid _W_steamtitle +} + +#---------------------------------------------------------------- + + +# Usage: w_mount "volume name" [filename-to-check [discnum]] +# Some games have two volumes with identical volume names. +# For these, please specify discnum 1 for first disc, discnum 2 for 2nd, etc., +# else caching can't work. +# FIXME: should take mount option 'unhide' for poorly mastered discs +w_mount() +{ + if test "$3"; then + WINETRICKS_IMG="${W_CACHE}/${W_PACKAGE}/$1-$3.iso" + else + WINETRICKS_IMG="${W_CACHE}/${W_PACKAGE}/$1.iso" + fi + mkdir -p "${W_CACHE}/${W_PACKAGE}" + + if test -f "${WINETRICKS_IMG}"; then + winetricks_mount_cached_iso + else + if test "${WINETRICKS_OPT_KEEPISOS}" = 0 || test "$2"; then + while true; do + winetricks_mount_real_volume "$1" + if test "$2" = "" || test -f "${W_ISO_MOUNT_ROOT}/$2"; then + break + else + w_warn "Wrong disc inserted, $2 not found." + fi + done + fi + + case "${WINETRICKS_OPT_KEEPISOS}" in + 1) + winetricks_cache_iso "$1" + winetricks_mount_cached_iso + ;; + esac + fi +} + +w_umount() +{ + if test "${WINE}" = ""; then + # Windows + winetricks_load_vcdmount + w_try_cd "${VCD_DIR}" + w_try vcdmount.exe /u + else + if test "${W_USE_USERMOUNT}"; then + # FUSE-based tools or hdiutil + if test -d "${W_ISO_USER_MOUNT_ROOT}"; then + "${WINE}" eject "${W_ISO_MOUNT_LETTER}:" + cat > "${W_TMP}"/unset_type_cdrom.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Wine\\Drives] +"${W_ISO_MOUNT_LETTER}:"=- +_EOF_ + w_try_regedit "${W_TMP}"/unset_type_cdrom.reg + rm -f "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:" + rm -f "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}::" + + case "${WINETRICKS_ISO_MOUNT}" in + hdiutil) + "${WINETRICKS_ISO_MOUNT}" detach "${W_ISO_USER_MOUNT_ROOT}" + ;; + *) + # -uz lazy unmount in case executable still running + fusermount -uz "${W_ISO_USER_MOUNT_ROOT}" + ;; + esac + w_try rmdir "${W_ISO_USER_MOUNT_ROOT}" + fi + W_ISO_MOUNT_ROOT=/mnt/winetricks + else + # sudo + umount + echo "Running ${WINETRICKS_SUDO} umount ${W_ISO_MOUNT_ROOT}" + + case "${WINETRICKS_SUDO}" in + gksu*|kdesudo) + # -l lazy unmount in case executable still running + "${WINETRICKS_SUDO}" "umount -l ${W_ISO_MOUNT_ROOT}" + w_try "${WINETRICKS_SUDO}" "rm -rf ${W_ISO_MOUNT_ROOT}" + ;; + kdesu) + "${WINETRICKS_SUDO}" -c "umount -l ${W_ISO_MOUNT_ROOT}" + w_try "${WINETRICKS_SUDO}" -c "rm -rf ${W_ISO_MOUNT_ROOT}" + ;; + *) + "${WINETRICKS_SUDO}" umount -l "${W_ISO_MOUNT_ROOT}" + w_try "${WINETRICKS_SUDO}" rm -rf "${W_ISO_MOUNT_ROOT}" + ;; + esac + + "${WINE}" eject "${W_ISO_MOUNT_LETTER}:" + rm -f "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:" + rm -f "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}::" + fi + fi +} + +w_ahk_do() +{ + if ! test -f "${W_CACHE}/ahk/AutoHotkey.exe"; then + w_download_to ahk https://github.com/AutoHotkey/AutoHotkey/releases/download/v1.0.48.05/AutoHotkey104805_Install.exe 4311c3e7c29ed2d67f415138360210bc2f55ff78758b20b003b91d775ee207b9 + w_try_7z "${W_CACHE}/ahk" "${W_CACHE}/ahk/AutoHotkey104805_Install.exe" AutoHotkey.exe AU3_Spy.exe + chmod +x "${W_CACHE}/ahk/AutoHotkey.exe" + fi + + # Previously this used printf + sed, but that was broken with BSD sed (FreeBSD/OS X): + # https://github.com/Winetricks/winetricks/issues/697 + # So now using trying awk instead (next, perl): + cat <<_EOF_ | awk 'sub("$", "\r")' > "${W_TMP}/${W_PACKAGE}.ahk" +w_opt_unattended = ${W_OPT_UNATTENDED:-0} +$@ +_EOF_ + w_try "${WINE}" "${W_CACHE_WIN}\\ahk\\AutoHotkey.exe" "${W_TMP_WIN}\\${W_PACKAGE}.ahk" +} + +# Function to protect Wine-specific sections of code. +# Outputs a message to console explaining what's being skipped. +# Usage: +# if w_skip_windows name-of-operation; then +# return +# fi +# ... do something that doesn't make sense on Windows ... + +w_skip_windows() +{ + case "${W_PLATFORM}" in + windows_cmd) + echo "Skipping operation '$1' on Windows" + return "${TRUE}" + ;; + esac + return "${FALSE}" +} + +# for common code in w_override_dlls and w_override_app_dlls +w_common_override_dll() +{ + _W_mode="$1" + module="$2" + + # Remove wine's builtin manifest, if present. Use: + # wineboot ; find "$WINEPREFIX"/drive_c/windows/winsxs/ -iname \*deadbeef.manifest | sort + case "${W_PACKAGE}" in + comctl32) + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest + ;; + vcrun2005) + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/amd64_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + + # These are 32-bit only? + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc80.openmp_1fc8b3b9a1e18e3b_8.0.50727.6195_none_deadbeef.manifest + ;; + vcrun2008) + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/amd64_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + + # These are 32-bit only? + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "${W_WINDIR_UNIX}"/winsxs/manifests/x86_microsoft.vc90.openmp_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + ;; + esac + + if [ "${_W_mode}" = default ] ; then + # To delete a registry key, give an unquoted dash as value + echo "\"*${module}\"=-" >> "${W_TMP}"/override-dll.reg + else + # Note: if you want to override even DLLs loaded with an absolute + # path, you need to add an asterisk: + echo "\"*${module}\"=\"${_W_mode}\"" >> "${W_TMP}"/override-dll.reg + fi +} + +w_override_dlls() +{ + w_skip_windows w_override_dlls && return + + _W_mode=$1 + case ${_W_mode} in + *=*) + w_die "w_override_dlls: unknown mode ${_W_mode}. +Usage: 'w_override_dlls mode[,mode] dll ...'." ;; + disabled) + _W_mode="" ;; + esac + + shift + + echo "Using ${_W_mode} override for following DLLs: $*" + cat > "${W_TMP}"/override-dll.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\DllOverrides] +_EOF_ + while test "$1" != ""; do + w_common_override_dll "${_W_mode}" "$1" + shift + done + + w_try_regedit "${W_TMP_WIN}"\\override-dll.reg + + unset _W_mode +} + +w_override_no_dlls() +{ + w_skip_windows override && return + + w_try_regedit /d "HKEY_CURRENT_USER\\Software\\Wine\\DllOverrides" +} + +w_override_all_dlls() +{ + # Disable all known native Microsoft DLLs in favor of Wine's built-in ones + # Generated with: + # find ./dlls -maxdepth 1 -type d ! -iname "*.dll16" ! -iname "*.drv*" ! -iname "*.ds" ! -iname "*.exe*" ! -iname "*.tlb" ! -iname "*.vxd" -print | sed \ + # -e '/^.*\/adsiid$/ d' \ + # -e '/^.*\/advapi32$/ d' \ + # -e '/^.*\/capi2032$/ d' \ + # -e '/^.*\/dbghelp$/ d' \ + # -e '/^.*\/ddraw$/ d' \ + # -e '/^.*\/dlls$/ d' \ + # -e '/^.*\/dmoguids$/ d' \ + # -e '/^.*\/dxerr8$/ d' \ + # -e '/^.*\/dxerr9$/ d' \ + # -e '/^.*\/dxguid$/ d' \ + # -e '/^.*\/gdi32$/ d' \ + # -e '/^.*\/glu32$/ d' \ + # -e '/^.*\/icmp$/ d' \ + # -e '/^.*\/iphlpapi$/ d' \ + # -e '/^.*\/kernel32$/ d' \ + # -e '/^.*\/l3codeca.acm$/ d' \ + # -e '/^.*\/mfuuid$/ d' \ + # -e '/^.*\/mountmgr.sys$/ d' \ + # -e '/^.*\/mswsock$/ d' \ + # -e '/^.*\/ntdll$/ d' \ + # -e '/^.*\/opengl32$/ d' \ + # -e '/^.*\/secur32$/ d' \ + # -e '/^.*\/strmbase$/ d' \ + # -e '/^.*\/strmiids$/ d' \ + # -e '/^.*\/twain_32$/ d' \ + # -e '/^.*\/unicows$/ d' \ + # -e '/^.*\/user32$/ d' \ + # -e '/^.*\/uuid$/ d' \ + # -e '/^.*\/vdmdbg$/ d' \ + # -e '/^.*\/w32skrnl$/ d' \ + # -e '/^.*\/winecrt0$/ d' \ + # -e '/^.*\/wined3d$/ d' \ + # -e '/^.*\/winemp3.acm$/ d' \ + # -e '/^.*\/wineqtdecoder$/ d' \ + # -e '/^.*\/winmm$/ d' \ + # -e '/^.*\/wintab32$/ d' \ + # -e '/^.*\/wmcodecdspuuid$/ d' \ + # -e '/^.*\/wnaspi32$/ d' \ + # -e '/^.*\/wow32$/ d' \ + # -e '/^.*\/ws2_32$/ d' \ + # -e '/^.*\/wsock32$/ d' \ + # -e 's,.*/, ,' | sort | fmt -63 | sed 's/$/ \\/' + # + # 2018-12-10: Last list update (wine-4.0-rc1) + w_override_dlls builtin \ + acledit aclui activeds actxprxy adsldp adsldpc advpack \ + amstream api-ms-win-appmodel-identity-l1-1-0 \ + api-ms-win-appmodel-runtime-l1-1-1 \ + api-ms-win-appmodel-runtime-l1-1-2 \ + api-ms-win-core-apiquery-l1-1-0 \ + api-ms-win-core-appcompat-l1-1-1 \ + api-ms-win-core-appinit-l1-1-0 \ + api-ms-win-core-atoms-l1-1-0 \ + api-ms-win-core-bem-l1-1-0 api-ms-win-core-com-l1-1-0 \ + api-ms-win-core-com-l1-1-1 api-ms-win-core-comm-l1-1-0 \ + api-ms-win-core-com-private-l1-1-0 \ + api-ms-win-core-console-l1-1-0 \ + api-ms-win-core-console-l2-1-0 \ + api-ms-win-core-crt-l1-1-0 api-ms-win-core-crt-l2-1-0 \ + api-ms-win-core-datetime-l1-1-0 \ + api-ms-win-core-datetime-l1-1-1 \ + api-ms-win-core-debug-l1-1-0 \ + api-ms-win-core-debug-l1-1-1 \ + api-ms-win-core-delayload-l1-1-0 \ + api-ms-win-core-delayload-l1-1-1 \ + api-ms-win-core-errorhandling-l1-1-0 \ + api-ms-win-core-errorhandling-l1-1-1 \ + api-ms-win-core-errorhandling-l1-1-2 \ + api-ms-win-core-errorhandling-l1-1-3 \ + api-ms-win-core-fibers-l1-1-0 \ + api-ms-win-core-fibers-l1-1-1 \ + api-ms-win-core-file-l1-1-0 \ + api-ms-win-core-file-l1-2-0 \ + api-ms-win-core-file-l1-2-1 \ + api-ms-win-core-file-l1-2-2 \ + api-ms-win-core-file-l2-1-0 \ + api-ms-win-core-file-l2-1-1 \ + api-ms-win-core-file-l2-1-2 \ + api-ms-win-core-handle-l1-1-0 \ + api-ms-win-core-heap-l1-1-0 \ + api-ms-win-core-heap-l1-2-0 \ + api-ms-win-core-heap-l2-1-0 \ + api-ms-win-core-heap-obsolete-l1-1-0 \ + api-ms-win-core-interlocked-l1-1-0 \ + api-ms-win-core-interlocked-l1-2-0 \ + api-ms-win-core-io-l1-1-0 api-ms-win-core-io-l1-1-1 \ + api-ms-win-core-job-l1-1-0 api-ms-win-core-job-l2-1-0 \ + api-ms-win-core-kernel32-legacy-l1-1-0 \ + api-ms-win-core-kernel32-legacy-l1-1-1 \ + api-ms-win-core-kernel32-private-l1-1-1 \ + api-ms-win-core-largeinteger-l1-1-0 \ + api-ms-win-core-libraryloader-l1-1-0 \ + api-ms-win-core-libraryloader-l1-1-1 \ + api-ms-win-core-libraryloader-l1-2-0 \ + api-ms-win-core-libraryloader-l1-2-1 \ + api-ms-win-core-libraryloader-l1-2-2 \ + api-ms-win-core-localization-l1-1-0 \ + api-ms-win-core-localization-l1-2-0 \ + api-ms-win-core-localization-l1-2-1 \ + api-ms-win-core-localization-l2-1-0 \ + api-ms-win-core-localization-obsolete-l1-1-0 \ + api-ms-win-core-localization-obsolete-l1-2-0 \ + api-ms-win-core-localization-obsolete-l1-3-0 \ + api-ms-win-core-localization-private-l1-1-0 \ + api-ms-win-core-localregistry-l1-1-0 \ + api-ms-win-core-memory-l1-1-0 \ + api-ms-win-core-memory-l1-1-1 \ + api-ms-win-core-memory-l1-1-2 \ + api-ms-win-core-misc-l1-1-0 \ + api-ms-win-core-namedpipe-l1-1-0 \ + api-ms-win-core-namedpipe-l1-2-0 \ + api-ms-win-core-namespace-l1-1-0 \ + api-ms-win-core-normalization-l1-1-0 \ + api-ms-win-core-path-l1-1-0 \ + api-ms-win-core-privateprofile-l1-1-1 \ + api-ms-win-core-processenvironment-l1-1-0 \ + api-ms-win-core-processenvironment-l1-2-0 \ + api-ms-win-core-processthreads-l1-1-0 \ + api-ms-win-core-processthreads-l1-1-1 \ + api-ms-win-core-processthreads-l1-1-2 \ + api-ms-win-core-processthreads-l1-1-3 \ + api-ms-win-core-processtopology-obsolete-l1-1-0 \ + api-ms-win-core-profile-l1-1-0 \ + api-ms-win-core-psapi-ansi-l1-1-0 \ + api-ms-win-core-psapi-l1-1-0 \ + api-ms-win-core-psapi-obsolete-l1-1-0 \ + api-ms-win-core-quirks-l1-1-0 \ + api-ms-win-core-realtime-l1-1-0 \ + api-ms-win-core-registry-l1-1-0 \ + api-ms-win-core-registry-l2-1-0 \ + api-ms-win-core-registryuserspecific-l1-1-0 \ + api-ms-win-core-rtlsupport-l1-1-0 \ + api-ms-win-core-rtlsupport-l1-2-0 \ + api-ms-win-core-shlwapi-legacy-l1-1-0 \ + api-ms-win-core-shlwapi-obsolete-l1-1-0 \ + api-ms-win-core-shlwapi-obsolete-l1-2-0 \ + api-ms-win-core-shutdown-l1-1-0 \ + api-ms-win-core-sidebyside-l1-1-0 \ + api-ms-win-core-stringansi-l1-1-0 \ + api-ms-win-core-string-l1-1-0 \ + api-ms-win-core-string-l2-1-0 \ + api-ms-win-core-stringloader-l1-1-1 \ + api-ms-win-core-string-obsolete-l1-1-0 \ + api-ms-win-core-synch-ansi-l1-1-0 \ + api-ms-win-core-synch-l1-1-0 \ + api-ms-win-core-synch-l1-2-0 \ + api-ms-win-core-synch-l1-2-1 \ + api-ms-win-core-sysinfo-l1-1-0 \ + api-ms-win-core-sysinfo-l1-2-0 \ + api-ms-win-core-sysinfo-l1-2-1 \ + api-ms-win-core-threadpool-l1-1-0 \ + api-ms-win-core-threadpool-l1-2-0 \ + api-ms-win-core-threadpool-legacy-l1-1-0 \ + api-ms-win-core-threadpool-private-l1-1-0 \ + api-ms-win-core-timezone-l1-1-0 \ + api-ms-win-core-toolhelp-l1-1-0 \ + api-ms-win-core-url-l1-1-0 api-ms-win-core-util-l1-1-0 \ + api-ms-win-core-versionansi-l1-1-0 \ + api-ms-win-core-version-l1-1-0 \ + api-ms-win-core-version-l1-1-1 \ + api-ms-win-core-version-private-l1-1-0 \ + api-ms-win-core-windowserrorreporting-l1-1-0 \ + api-ms-win-core-winrt-error-l1-1-0 \ + api-ms-win-core-winrt-error-l1-1-1 \ + api-ms-win-core-winrt-errorprivate-l1-1-1 \ + api-ms-win-core-winrt-l1-1-0 \ + api-ms-win-core-winrt-registration-l1-1-0 \ + api-ms-win-core-winrt-roparameterizediid-l1-1-0 \ + api-ms-win-core-winrt-string-l1-1-0 \ + api-ms-win-core-winrt-string-l1-1-1 \ + api-ms-win-core-wow64-l1-1-0 \ + api-ms-win-core-wow64-l1-1-1 \ + api-ms-win-core-xstate-l1-1-0 \ + api-ms-win-core-xstate-l2-1-0 \ + api-ms-win-crt-conio-l1-1-0 \ + api-ms-win-crt-convert-l1-1-0 \ + api-ms-win-crt-environment-l1-1-0 \ + api-ms-win-crt-filesystem-l1-1-0 \ + api-ms-win-crt-heap-l1-1-0 \ + api-ms-win-crt-locale-l1-1-0 \ + api-ms-win-crt-math-l1-1-0 \ + api-ms-win-crt-multibyte-l1-1-0 \ + api-ms-win-crt-private-l1-1-0 \ + api-ms-win-crt-process-l1-1-0 \ + api-ms-win-crt-runtime-l1-1-0 \ + api-ms-win-crt-stdio-l1-1-0 \ + api-ms-win-crt-string-l1-1-0 \ + api-ms-win-crt-time-l1-1-0 \ + api-ms-win-crt-utility-l1-1-0 \ + api-ms-win-devices-config-l1-1-0 \ + api-ms-win-devices-config-l1-1-1 \ + api-ms-win-devices-query-l1-1-1 \ + api-ms-win-downlevel-advapi32-l1-1-0 \ + api-ms-win-downlevel-advapi32-l2-1-0 \ + api-ms-win-downlevel-normaliz-l1-1-0 \ + api-ms-win-downlevel-ole32-l1-1-0 \ + api-ms-win-downlevel-shell32-l1-1-0 \ + api-ms-win-downlevel-shlwapi-l1-1-0 \ + api-ms-win-downlevel-shlwapi-l2-1-0 \ + api-ms-win-downlevel-user32-l1-1-0 \ + api-ms-win-downlevel-version-l1-1-0 \ + api-ms-win-dx-d3dkmt-l1-1-0 \ + api-ms-win-eventing-classicprovider-l1-1-0 \ + api-ms-win-eventing-consumer-l1-1-0 \ + api-ms-win-eventing-controller-l1-1-0 \ + api-ms-win-eventing-legacy-l1-1-0 \ + api-ms-win-eventing-provider-l1-1-0 \ + api-ms-win-eventlog-legacy-l1-1-0 \ + api-ms-win-gdi-dpiinfo-l1-1-0 \ + api-ms-win-mm-joystick-l1-1-0 \ + api-ms-win-mm-misc-l1-1-1 api-ms-win-mm-mme-l1-1-0 \ + api-ms-win-mm-time-l1-1-0 \ + api-ms-win-ntuser-dc-access-l1-1-0 \ + api-ms-win-ntuser-rectangle-l1-1-0 \ + api-ms-win-ntuser-sysparams-l1-1-0 \ + api-ms-win-perf-legacy-l1-1-0 \ + api-ms-win-power-base-l1-1-0 \ + api-ms-win-power-setting-l1-1-0 \ + api-ms-win-rtcore-ntuser-draw-l1-1-0 \ + api-ms-win-rtcore-ntuser-private-l1-1-0 \ + api-ms-win-rtcore-ntuser-private-l1-1-4 \ + api-ms-win-rtcore-ntuser-window-l1-1-0 \ + api-ms-win-rtcore-ntuser-winevent-l1-1-0 \ + api-ms-win-rtcore-ntuser-wmpointer-l1-1-0 \ + api-ms-win-rtcore-ntuser-wmpointer-l1-1-3 \ + api-ms-win-security-activedirectoryclient-l1-1-0 \ + api-ms-win-security-audit-l1-1-1 \ + api-ms-win-security-base-l1-1-0 \ + api-ms-win-security-base-l1-2-0 \ + api-ms-win-security-base-private-l1-1-1 \ + api-ms-win-security-credentials-l1-1-0 \ + api-ms-win-security-cryptoapi-l1-1-0 \ + api-ms-win-security-grouppolicy-l1-1-0 \ + api-ms-win-security-lsalookup-l1-1-0 \ + api-ms-win-security-lsalookup-l1-1-1 \ + api-ms-win-security-lsalookup-l2-1-0 \ + api-ms-win-security-lsalookup-l2-1-1 \ + api-ms-win-security-lsapolicy-l1-1-0 \ + api-ms-win-security-provider-l1-1-0 \ + api-ms-win-security-sddl-l1-1-0 \ + api-ms-win-security-systemfunctions-l1-1-0 \ + api-ms-win-service-core-l1-1-0 \ + api-ms-win-service-core-l1-1-1 \ + api-ms-win-service-management-l1-1-0 \ + api-ms-win-service-management-l2-1-0 \ + api-ms-win-service-private-l1-1-1 \ + api-ms-win-service-winsvc-l1-1-0 \ + api-ms-win-service-winsvc-l1-2-0 \ + api-ms-win-shcore-obsolete-l1-1-0 \ + api-ms-win-shcore-scaling-l1-1-1 \ + api-ms-win-shcore-stream-l1-1-0 \ + api-ms-win-shcore-thread-l1-1-0 \ + api-ms-win-shell-shellcom-l1-1-0 \ + api-ms-win-shell-shellfolders-l1-1-0 apphelp \ + appwiz.cpl atl atl100 atl110 atl80 atl90 atmlib \ + authz avicap32 avifil32 avrt bcrypt bluetoothapis \ + browseui bthprops.cpl cabinet cards cdosys cfgmgr32 \ + clusapi combase comcat comctl32 comdlg32 compstui \ + comsvcs concrt140 connect credui crtdll crypt32 \ + cryptdlg cryptdll cryptext cryptnet cryptui ctapi32 \ + ctl3d32 d2d1 d3d10 d3d10_1 d3d10core d3d11 d3d12 d3d8 \ + d3d9 d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 \ + d3dcompiler_36 d3dcompiler_37 d3dcompiler_38 \ + d3dcompiler_39 d3dcompiler_40 d3dcompiler_41 \ + d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 \ + d3dcompiler_47 d3dim d3drm d3dx10_33 d3dx10_34 \ + d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 \ + d3dx10_40 d3dx10_41 d3dx10_42 d3dx10_43 d3dx11_42 \ + d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 \ + d3dx9_28 d3dx9_29 d3dx9_30 d3dx9_31 d3dx9_32 d3dx9_33 \ + d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 \ + d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43 d3dxof davclnt \ + dbgeng dciman32 ddrawex devenum dhcpcsvc dhtmled.ocx \ + difxapi dinput dinput8 dispex dmband dmcompos dmime \ + dmloader dmscript dmstyle dmsynth dmusic dmusic32 \ + dnsapi dplay dplayx dpnaddr dpnet dpnhpast dpnlobby \ + dpvoice dpwsockx drmclien dsound dsquery dssenh \ + dswave dwmapi dwrite dx8vb dxdiagn dxgi dxva2 esent \ + evr explorerframe ext-ms-win-authz-context-l1-1-0 \ + ext-ms-win-domainjoin-netjoin-l1-1-0 \ + ext-ms-win-dwmapi-ext-l1-1-0 \ + ext-ms-win-gdi-dc-create-l1-1-1 \ + ext-ms-win-gdi-dc-l1-2-0 ext-ms-win-gdi-devcaps-l1-1-0 \ + ext-ms-win-gdi-draw-l1-1-1 \ + ext-ms-win-gdi-render-l1-1-0 \ + ext-ms-win-kernel32-package-current-l1-1-0 \ + ext-ms-win-kernel32-package-l1-1-1 \ + ext-ms-win-ntuser-draw-l1-1-0 \ + ext-ms-win-ntuser-gui-l1-3-0 \ + ext-ms-win-ntuser-keyboard-l1-3-0 \ + ext-ms-win-ntuser-message-l1-1-1 \ + ext-ms-win-ntuser-misc-l1-2-0 \ + ext-ms-win-ntuser-misc-l1-5-1 \ + ext-ms-win-ntuser-mouse-l1-1-0 \ + ext-ms-win-ntuser-private-l1-1-1 \ + ext-ms-win-ntuser-private-l1-3-1 \ + ext-ms-win-ntuser-rectangle-ext-l1-1-0 \ + ext-ms-win-ntuser-uicontext-ext-l1-1-0 \ + ext-ms-win-ntuser-windowclass-l1-1-1 \ + ext-ms-win-ntuser-window-l1-1-1 \ + ext-ms-win-ntuser-window-l1-1-4 \ + ext-ms-win-oleacc-l1-1-0 \ + ext-ms-win-ras-rasapi32-l1-1-0 \ + ext-ms-win-rtcore-gdi-devcaps-l1-1-0 \ + ext-ms-win-rtcore-gdi-object-l1-1-0 \ + ext-ms-win-rtcore-gdi-rgn-l1-1-0 \ + ext-ms-win-rtcore-ntuser-cursor-l1-1-0 \ + ext-ms-win-rtcore-ntuser-dc-access-l1-1-0 \ + ext-ms-win-rtcore-ntuser-dpi-l1-1-0 \ + ext-ms-win-rtcore-ntuser-dpi-l1-2-0 \ + ext-ms-win-rtcore-ntuser-rawinput-l1-1-0 \ + ext-ms-win-rtcore-ntuser-syscolors-l1-1-0 \ + ext-ms-win-rtcore-ntuser-sysparams-l1-1-0 \ + ext-ms-win-security-credui-l1-1-0 \ + ext-ms-win-security-cryptui-l1-1-0 \ + ext-ms-win-uxtheme-themes-l1-1-0 faultrep feclient \ + fltlib fltmgr.sys fntcache fontsub fusion fwpuclnt \ + gameux gdiplus gpkcsp hal hhctrl.ocx hid hidclass.sys \ + hlink hnetcfg httpapi iccvid ieframe ieproxy \ + imaadp32.acm imagehlp imm32 inetcomm inetcpl.cpl \ + inetmib1 infosoft initpki inkobj inseng iprop \ + irprops.cpl itircl itss joy.cpl jscript jsproxy \ + kerberos kernelbase ksuser ktmw32 loadperf localspl \ + localui lz32 mapi32 mapistub mciavi32 mcicda mciqtz32 \ + mciseq mciwave mf mf3216 mfplat mfreadwrite mgmtapi \ + midimap mlang mmcndmgr mmdevapi mp3dmod mpr mprapi \ + msacm32 msadp32.acm msasn1 mscat32 mscms mscoree \ + msctf msctfp msdaps msdelta msdmo msdrm msftedit \ + msg711.acm msgsm32.acm mshtml msi msident msimg32 \ + msimsg msimtf msisip msisys.ocx msls31 msnet32 \ + mspatcha msports msrle32 msscript.ocx mssign32 \ + mssip32 mstask msvcirt msvcm80 msvcm90 msvcp100 \ + msvcp110 msvcp120 msvcp120_app msvcp140 msvcp60 \ + msvcp70 msvcp71 msvcp80 msvcp90 msvcr100 msvcr110 \ + msvcr120 msvcr120_app msvcr70 msvcr71 msvcr80 \ + msvcr90 msvcrt msvcrt20 msvcrt40 msvcrtd msvfw32 \ + msvidc32 msxml msxml2 msxml3 msxml4 msxml6 mtxdm \ + ncrypt nddeapi ndis.sys netapi32 netcfgx netprofm \ + newdev ninput normaliz npmshtml npptools ntdsapi \ + ntprint objsel odbc32 odbccp32 odbccu32 ole32 oleacc \ + oleaut32 olecli32 oledb32 oledlg olepro32 olesvr32 \ + olethk32 opcservices openal32 opencl packager pdh \ + photometadatahandler pidgen powrprof printui prntvpt \ + propsys psapi pstorec qcap qedit qmgr qmgrprxy \ + quartz query qwave rasapi32 rasdlg regapi resutils \ + riched20 riched32 rpcrt4 rsabase rsaenh rstrtmgr \ + rtutils samlib sapi sas scarddlg sccbase schannel \ + schedsvc scrobj scrrun scsiport.sys security sensapi \ + serialui setupapi sfc sfc_os shcore shdoclc shdocvw \ + shell32 shfolder shlwapi slbcsp slc snmpapi softpub \ + spoolss srclient sspicli sti strmdll svrapi sxs \ + t2embed tapi32 taskschd tdh tdi.sys traffic tzres \ + ucrtbase uiautomationcore uiribbon updspapi url \ + urlmon usbd.sys userenv usp10 uxtheme vbscript \ + vcomp vcomp100 vcomp110 vcomp120 vcomp140 vcomp90 \ + vcruntime140 version virtdisk vssapi vulkan-1 wbemdisp \ + wbemprox wdscore webservices wer wevtapi wiaservc \ + wimgapi windowscodecs windowscodecsext winebus.sys \ + winegstreamer winehid.sys winemapi winevulkan wing32 \ + winhttp wininet winnls32 winscard winsta wintrust \ + winusb wlanapi wldap32 wmasf wmi wmiutils wmp wmphoto \ + wmvcore wpc wpcap wsdapi wshom.ocx wsnmp32 wtsapi32 \ + wuapi wuaueng x3daudio1_0 x3daudio1_1 x3daudio1_2 \ + x3daudio1_3 x3daudio1_4 x3daudio1_5 x3daudio1_6 \ + x3daudio1_7 xapofx1_1 xapofx1_2 xapofx1_3 xapofx1_4 \ + xapofx1_5 xaudio2_0 xaudio2_1 xaudio2_2 xaudio2_3 \ + xaudio2_4 xaudio2_5 xaudio2_6 xaudio2_7 xaudio2_8 \ + xaudio2_9 xinput1_1 xinput1_2 xinput1_3 xinput1_4 \ + xinput9_1_0 xmllite xolehlp xpsprint xpssvcs \ + + # blank line so you don't have to remove the extra trailing \ +} + +w_override_app_dlls() +{ + w_skip_windows w_override_app_dlls && return + + _W_app=$1 + shift + _W_mode=$1 + shift + + # Fixme: handle comma-separated list of modes + case ${_W_mode} in + b|builtin) _W_mode=builtin ;; + n|native) _W_mode=native ;; + default) _W_mode=default ;; + d|disabled) _W_mode="" ;; + *) + w_die "w_override_app_dlls: unknown mode ${_W_mode}. (want native, builtin, default, or disabled) +Usage: 'w_override_app_dlls app mode dll ...'." ;; + esac + + echo "Using ${_W_mode} override for following DLLs when running ${_W_app}: $*" + ( + echo REGEDIT4 + echo "" + echo "[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\${_W_app}\\DllOverrides]" + ) > "${W_TMP}"/override-dll.reg + + while test "$1" != ""; do + w_common_override_dll "${_W_mode}" "$1" + shift + done + + w_try_regedit "${W_TMP_WIN}"\\override-dll.reg + w_try rm "${W_TMP}"/override-dll.reg + unset _W_app _W_mode +} + +# Has to be set in a few places... +w_set_winver() +{ + w_skip_windows w_set_winver && return + + _W_winver="$1" + + if w_wine_version_in 5.7, ; then + # Make sure we pass the right version name: + case "${_W_winver}" in + # These are the mismatched ones: + # winecfg doesn't accept 'default' as an option (as of wine-5.9): + # https://bugs.winehq.org/show_bug.cgi?id=49241 + # For now, assuming win7: + default) _W_winver="win7";; + win2k3) _W_winver="win2003";; + win2k8) _W_winver="win2008";; + win2k8r2) _W_winver="win2008r2";; + + # xp has two entries (winxp/winxp64): + winxp) + if [ "${W_ARCH}" = "win64" ]; then + _W_winver="winxp64" + else + _W_winver="winxp" + fi + ;; + # These are the same: + nt351|nt40|vista|win10|win20|win2k|win30|win31|win7|win8|win81|win95|win98|winme) : ;; + *) w_die "Unsupported Windows version ${_W_winver}";; + esac + + w_try "${WINE}" winecfg -v "${_W_winver}" + else + # FIXME: remove this after wine-7.0 (i.e., after it's been in stable wine for a while): + + # First, delete any lingering version info, otherwise it may conflict: + ( + "${WINE}" reg delete "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion" /v SubVersionNumber /f || true + "${WINE}" reg delete "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion" /v VersionNumber /f || true + "${WINE}" reg delete "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion" /v CSDVersion /f || true + "${WINE}" reg delete "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion" /v CurrentBuildNumber /f || true + "${WINE}" reg delete "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion" /v CurrentVersion /f || true + "${WINE}" reg delete "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /f || true + "${WINE}" reg delete "HKLM\\System\\CurrentControlSet\\Control\\ServiceCurrent" /v OS /f || true + "${WINE}" reg delete "HKLM\\System\\CurrentControlSet\\Control\\Windows" /v CSDVersion /f || true + "${WINE}" reg delete "HKCU\\Software\\Wine" /v Version /f || true + "${WINE}" reg delete "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /f || true + ) > /dev/null 2>&1 + + case "${_W_winver}" in + win31) + echo "Setting Windows version to ${_W_winver}" + cat > "${W_TMP}"/set-winver.reg <<_EOF_ +REGEDIT4 + +[HKEY_USERS\\S-1-5-4\\Software\\Wine] +"Version"="win31" + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-winver.reg + return + ;; + win95) + # This key is only used for Windows 95/98: + + echo "Setting Windows version to ${_W_winver}" + cat > "${W_TMP}"/set-winver.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion] +"ProductName"="Microsoft Windows 95" +"SubVersionNumber"="" +"VersionNumber"="4.0.950" + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-winver.reg + return + ;; + win98) + # This key is only used for Windows 95/98: + + echo "Setting Windows version to ${_W_winver}" + cat > "${W_TMP}"/set-winver.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion] +"ProductName"="Microsoft Windows 98" +"SubVersionNumber"=" A " +"VersionNumber"="4.10.2222" + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-winver.reg + return + ;; + nt40) + # Similar to modern version, but sets two extra keys: + + echo "Setting Windows version to ${_W_winver}" + cat > "${W_TMP}"/set-winver.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion] +"CSDVersion"="Service Pack 6a" +"CurrentBuildNumber"="1381" +"CurrentVersion"="4.0" + +[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\ProductOptions] +"ProductType"="WinNT" + +[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\ServiceCurrent] +"OS"="Windows_NT" + +[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Windows] +"CSDVersion"=dword:00000600 + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-winver.reg + return + ;; + win2k) + csdversion="Service Pack 4" + currentbuildnumber="2195" + currentversion="5.0" + csdversion_hex=dword:00000400 + ;; + winxp) + # Special case, afaik it's the only Windows version that has different version numbers for 32/64-bit + # So ensure we set the arch appropriate version: + if [ "${W_ARCH}" = "win32" ]; then + csdversion="Service Pack 3" + currentbuildnumber="2600" + currentversion="5.1" + csdversion_hex=dword:00000300 + elif [ "${W_ARCH}" = "win64" ]; then + csdversion="Service Pack 2" + currentbuildnumber="3790" + currentversion="5.2" + csdversion_hex=dword:00000200 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "WinNT" /f + else + w_die "Invalid W_ARCH ${W_ARCH}" + fi + ;; + win2k3) + csdversion="Service Pack 2" + currentbuildnumber="3790" + currentversion="5.2" + csdversion_hex=dword:00000200 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "ServerNT" /f + ;; + vista) + csdversion="Service Pack 2" + currentbuildnumber="6002" + currentversion="6.0" + csdversion_hex=dword:00000200 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "WinNT" /f + ;; + win7|default) + csdversion="Service Pack 1" + currentbuildnumber="7601" + currentversion="6.1" + csdversion_hex=dword:00000100 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "WinNT" /f + ;; + win2k8) + csdversion="Service Pack 2" + currentbuildnumber="6002" + currentversion="6.0" + csdversion_hex=dword:00000200 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "ServerNT" /f + ;; + win2k8r2) + csdversion="Service Pack 1" + currentbuildnumber="7601" + currentversion="6.1" + csdversion_hex=dword:00000100 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "ServerNT" /f + ;; + win8) + csdversion="" + currentbuildnumber="9200" + currentversion="6.2" + csdversion_hex=dword:00000000 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "WinNT" /f + ;; + win81) + csdversion="" + currentbuildnumber="9600" + currentversion="6.3" + csdversion_hex=dword:00000000 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "WinNT" /f + ;; + win10) + csdversion="" + currentbuildnumber="10240" + currentversion="10.0" + csdversion_hex=dword:00000000 + "${WINE}" reg add "HKLM\\System\\CurrentControlSet\\Control\\ProductOptions" /v ProductType /d "WinNT" /f + ;; + *) + w_die "Invalid Windows version given." + ;; + esac + + echo "Setting Windows version to ${_W_winver}" + cat > "${W_TMP}"/set-winver.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion] +"CSDVersion"="${csdversion}" +"CurrentBuildNumber"="${currentbuildnumber}" +"CurrentVersion"="${currentversion}" + +[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Windows] +"CSDVersion"=${csdversion_hex} + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-winver.reg + fi # if w_wine_version_in 5.7, + + # Prevent a race when calling from another verb + w_wineserver -w +} + +w_unset_winver() +{ + w_warn "w_unset_winver() is deprecated, use \'w_set_winver default\' instead" + w_set_winver default +} + +# Present app $1 with the Windows personality $2 +w_set_app_winver() +{ + w_skip_windows w_set_app_winver && return + + _W_app="$1" + _W_version="$2" + echo "Setting ${_W_app} to ${_W_version} mode" + ( + echo REGEDIT4 + echo "" + echo "[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\${_W_app}]" + echo "\"Version\"=\"${_W_version}\"" + ) > "${W_TMP}"/set-winver.reg + + w_try_regedit "${W_TMP_WIN}"\\set-winver.reg + rm "${W_TMP}"/set-winver.reg + unset _W_app +} + +# Usage: w_compare_wine_version OP VALUE +# Note: currently only -ge and -le are supported, +# as well as the special case -bn (between) +# Example: +# if w_compare_wine_version -ge 2.5 ; then +# ... +# fi +# +# Returns true if comparison is valid +w_compare_wine_version() +{ + comparison="$1" + known_wine_val1="$2" + known_wine_val2="$3" + + case "${comparison}" in + # expected value if the comparison is true + -bn) + # If the current wine version matches the lower version, it's a match (the bug is present). + # If it matches the higher version, it's not a match (the bug is fixed in that version). + if [ "${_wine_version_stripped}" = "${known_wine_val1}" ]; then + return "${TRUE}" + elif [ "${_wine_version_stripped}" = "${known_wine_val2}" ]; then + return "${FALSE}" + else + _expected_pos_current_wine="2" + fi + ;; + -ge) _expected_pos_current_wine="2";; + -le) _expected_pos_current_wine="1";; + *) w_die "Unsupported comparison. Only -bn, -ge, and -le are supported" ;; + esac + + # First, check if current wine is equal to either upper or lower wine version: + case "${_wine_version_stripped}" in + "${known_wine_val1}"|"${known_wine_val2}") return "${TRUE}";; + esac + + _pos_current_wine="$(printf "%s\\n%s\\n%s" "${known_wine_val1}" "${_wine_version_stripped}" "${known_wine_val2}" | sort -t. -k 1,1n -k 2,2n -k 3,3n | grep -n "^${_wine_version_stripped}\$" | cut -d : -f1)" + if [ "${_pos_current_wine}" = "${_expected_pos_current_wine}" ] ; then + #echo "true: known_wine_version=$2, comparison=$1, stripped wine=$_wine_version_stripped, expected_pos=$_expected_pos_known, pos_known=$_pos_known_wine" + #echo "Wine version comparison is true" + return "${TRUE}" + else + #echo "false: known_wine_version=$2, comparison=$1, stripped wine=$_wine_version_stripped, expected_pos=$_expected_pos_known, pos_known=$_pos_known_wine" + #echo "Wine version comparison is false" + return "${FALSE}" + fi +} + +# Usage: w_wine_version_in range ... +# True if wine version in any of the given ranges +# 'range' can be +# val1, (for >= val1) +# ,val2 (for <= val2) +# val1,val2 (for >= val1 && <= val2) +w_wine_version_in() +{ + for _W_range; do + _W_val1=$(echo "${_W_range}" | sed 's/,.*//') + _W_val2=$(echo "${_W_range}" | sed 's/.*,//') + # If in this range, return true + case ${_W_range} in + ,*) w_compare_wine_version -le "${_W_val2}" && unset _W_range _W_val1 _W_val2 && return "${TRUE}";; + *,) w_compare_wine_version -ge "${_W_val1}" && unset _W_range _W_val1 _W_val2 && return "${TRUE}";; + *) w_compare_wine_version -bn "${_W_val1}" "${_W_val2}" && unset _W_range _W_val1 _W_val2 && return "${TRUE}";; + esac + done + unset _W_range _W_val1 _W_val2 + return "${FALSE}" +} + +# Usage: workaround_wine_bug bugnumber [message] [good-wine-version-range ...] +# Returns true and outputs given msg if the workaround needs to be applied. +# For debugging: if you want to skip a bug's workaround, put the bug number in +# the environment variable WINETRICKS_BLACKLIST to disable it. +w_workaround_wine_bug() +{ + if test "${WINE}" = ""; then + echo "No need to work around wine bug $1 on Windows" + return "${FALSE}" + fi + case "$2" in + [0-9]*) w_die "bug: want message in w_workaround_wine_bug arg 2, got $2" ;; + "") _W_msg="";; + *) _W_msg="-- $2";; + esac + + # shellcheck disable=SC2086 + if test "$3" && w_wine_version_in $3 $4 $5 $6; then + echo "Current Wine does not have Wine bug $1, so not applying workaround" + return "${FALSE}" + fi + + case "$1" in + "${WINETRICKS_BLACKLIST}") + echo "Wine bug $1 workaround blacklisted, skipping" + return "${FALSE}" + ;; + esac + + case ${LANG} in + da*) w_warn "Arbejder uden om wine-fejl ${1} ${_W_msg}" ;; + de*) w_warn "Wine-Fehler ${1} wird umgegangen ${_W_msg}" ;; + pl*) w_warn "Obchodzenie błędu w wine ${1} ${_W_msg}" ;; + pt*) w_warn "Trabalhando em torno do bug do wine ${1} ${_W_msg}" ;; + ru*) w_warn "Обход ошибки ${1} ${_W_msg}" ;; + uk*) w_warn "Обхід помилки ${1} ${_W_msg}" ;; + zh_CN*) w_warn "绕过 wine bug ${1} ${_W_msg}" ;; + zh_TW*|zh_HK*) w_warn "繞過 wine bug ${1} ${_W_msg}" ;; + *) w_warn "Working around wine bug ${1} ${_W_msg}" ;; + esac + + winetricks_stats_log_command "w_workaround_wine_bug-$1" + return "${TRUE}" +} + +# Function for verbs to register themselves so they show up in the menu. +# Example: +# w_metadata wog games \ +# title="World of Goo Demo" \ +# pub="2D Boy" \ +# year="2008" \ +# media="download" \ +# file1="WorldOfGooDemo.1.0.exe" + +w_metadata() +{ + case ${WINETRICKS_OPT_VERBOSE} in + 2) set -x ;; + *) set +x ;; + esac + + # shellcheck disable=SC2154 + if test "${installed_exe1}" || test "${installed_file1}" || test "${publisher}" || test "${year}"; then + w_die "bug: stray metadata tags set: somebody forgot a backslash in a w_metadata somewhere. Run with sh -x to see where." + fi + if winetricks_metadata_exists "$1"; then + w_die "bug: a verb named $1 already exists." + fi + + _W_md_cmd="$1" + _W_category="$2" + file="${WINETRICKS_METADATA}/${_W_category}/$1.vars" + shift + shift + # Echo arguments to file, with double quotes around the values. + # Used to use Perl here, but that was too slow on Cygwin. + for arg; do + # If _W_wine_not_needed is set, we're a list command that isn't list-installed, and can ignore the installed_* errors: + case "${arg}" in + installed_exe1=/*) + if [ -n "${_W_wine_not_needed}" ]; then + # "_W_wine_not_needed set, no installed_exe1" + : + else + w_die "bug: w_metadata ${_W_md_cmd} has a unix path for installed_exe1, should be a windows path" + fi + ;; + installed_file1=/*) + if [ -n "${_W_wine_not_needed}" ]; then + # "_W_wine_not_needed set, no installed_file1" + : + else + w_die "bug: w_metadata ${_W_md_cmd} has a unix path for installed_file1, should be a windows path" + fi + ;; + media=download_manual) + w_die "bug: verb ${_W_md_cmd} has media=download_manual, should be manual_download";; + esac + # Use longest match when stripping value, + # and shortest match when stripping name, + # so descriptions can have embedded equals signs + # FIXME: backslashes get interpreted here. This screws up + # installed_file1 fairly often. Fortunately, we can use forward + # slashes in that variable instead of backslashes. + echo "${arg%%=*}"=\""${arg#*=}"\" + done > "${file}" + echo category='"'"${_W_category}"'"' >> "${file}" + # If the problem described above happens, you'd see errors like this: + # /tmp/w.dank.4650/metadata/dlls/comctl32.vars: 6: Syntax error: Unterminated quoted string + # so check for lines that aren't properly quoted. + + # Do sanity check unless running on Cygwin, where it's way too slow. + case "${W_PLATFORM}" in + windows_cmd) + ;; + *) + if grep '[^"]$' "${file}"; then + w_die "bug: w_metadata ${_W_md_cmd} corrupt, might need forward slashes?" + fi + ;; + esac + unset _W_md_cmd + + # Restore verbosity: + case ${WINETRICKS_OPT_VERBOSE} in + 1|2) set -x ;; + *) set +x ;; + esac +} + +# Function for verbs to register their main executable [or, if name is given, other executables] +# Deprecated. No-op for backwards compatibility +w_declare_exe() +{ + w_warn "w_declare_exe is deprecated, now a noop" +} + +# Checks that a conflicting verb is not already installed in the prefix +# Usage: w_conflicts verb_to_install conflicting_verbs +w_conflicts() +{ + verb="$1" + conflicting_verbs="$2" + + for x in ${conflicting_verbs}; do + if grep -qw "${x}" "${WINEPREFIX}/winetricks.log" 2>/dev/null; then + w_die "error: ${verb} conflicts with ${x}, which is already installed. You can run \`$0 --force ${verb}\` to ignore this check and attempt installation." + fi + done +} + +# Call a verb, don't let it affect environment +# Hope that subshell passes through exit status +# Usage: w_do_call foo [bar] (calls load_foo bar) +# Or: w_do_call foo=bar (also calls load_foo bar) +# Or: w_do_call foo (calls load_foo) +w_do_call() +{ + ( + # Hack.. + if test "${cmd}" = vd; then + load_vd "${arg}" + _W_status=$? + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${W_TMP}" + mkdir -p "${W_TMP}" + return ${_W_status} + fi + + case "$1" in + *=*) arg=$(echo "$1" | sed 's/.*=//'); cmd=$(echo "$1" | sed 's/=.*//');; + *) cmd=$1; arg=$2 ;; + esac + + # Kludge: use Temp instead of temp to avoid \t expansion in w_try + # but use temp in Unix path because that's what Wine creates, and having both temp and Temp + # causes confusion (e.g. makes vc2005trial fail) + # FIXME: W_TMP is also set in winetricks_set_wineprefix, can we avoid the duplication? + W_TMP="${W_DRIVE_C}/windows/temp/_$1" + W_TMP_WIN="C:\\windows\\Temp\\_$1" + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${W_TMP}" + mkdir -p "${W_TMP}" + + # Unset all known used metadata values, in case this is a nested call + unset conflicts installed_file1 installed_exe1 + + if winetricks_metadata_exists "$1"; then + # shellcheck disable=SC1090 + . "${WINETRICKS_METADATA}"/*/"${1}.vars" + elif winetricks_metadata_exists "${cmd}"; then + # shellcheck disable=SC1090 + . "${WINETRICKS_METADATA}"/*/"${cmd}.vars" + elif test "${cmd}" = native || test "${cmd}" = disabled || test "${cmd}" = builtin || test "${cmd}" = default; then + # ugly special case - can't have metadata for these verbs until we allow arbitrary parameters + w_override_dlls "${cmd}" "${arg}" + _W_status=$? + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${W_TMP}" + mkdir -p "${W_TMP}" + return ${_W_status} + else + w_die "No such verb $1" + fi + + # If needed, set the app's wineprefix + case "${W_PLATFORM}" in + windows_cmd|wine_cmd) ;; + *) + case "${_W_category}-${WINETRICKS_OPT_SHAREDPREFIX}" in + apps-0|benchmarks-0|games-0) winetricks_set_wineprefix "${cmd}";; + *) winetricks_set_wineprefix "${_W_prefix_name}";; + esac + # If it's a new wineprefix, give it metadata + if test ! -f "${WINEPREFIX}"/wrapper.cfg; then + echo ww_name=\""${title}"\" > "${WINEPREFIX}"/wrapper.cfg + fi + ;; + esac + + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${W_TMP}" + mkdir -p "${W_TMP}" + + # Don't install if a conflicting verb is already installed: + # shellcheck disable=SC2154 + if test "${WINETRICKS_FORCE}" != 1 && test "${conflicts}" && test -f "${WINEPREFIX}/winetricks.log"; then + for x in ${conflicts}; do + w_conflicts "$1" "${x}" + done + fi + + # Allow verifying a verb separately from installing it + if test "${WINETRICKS_VERIFY}" = 1 && winetricks_is_installed "$1" && test -z "${WINETRICKS_FORCE}"; then + echo "$1 is already installed. --force wasn't given, --verify was, so re-verifying." + winetricks_verify + return "${TRUE}" + fi + + # Don't install if already installed + if test "${WINETRICKS_FORCE}" != 1 && winetricks_is_installed "$1"; then + echo "$1 already installed, skipping" + return "${TRUE}" + fi + + # We'd like to get rid of W_PACKAGE, but for now, just set it as late as possible. + W_PACKAGE=$1 + w_try "load_${cmd}" "${arg}" + winetricks_stats_log_command "$@" + + # User-specific postinstall hook. + # Source it so the script can call w_download() if needed. + postfile="${WINETRICKS_POST}/$1/$1-postinstall.sh" + if test -f "${postfile}"; then + chmod +x "${postfile}" + # shellcheck disable=SC1090 + . "${postfile}" + fi + + # Verify install + if test "${installed_exe1}" || test "${installed_file1}"; then + if ! winetricks_is_installed "$1"; then + w_die "$1 install completed, but installed file ${_W_file_unix} not found" + fi + fi + + # If the user specified --verify, also run GUI tests: + if test "${WINETRICKS_VERIFY}" = 1; then + winetricks_verify + fi + + # Clean up after this verb + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${W_TMP}" + mkdir -p "${W_TMP}" + + # Reset whether use of user mount tool + unset W_USE_USERMOUNT + + # Calling subshell must explicitly propagate error code with exit $? + ) || exit $? +} + +# If you want to check exit status yourself, use w_do_call +w_call() +{ + w_try w_do_call "$@" +} + +w_backup_reg_file() +{ + W_reg_file=$1 + + w_get_sha256sum "${W_reg_file}" + + w_try cp "${W_reg_file}" "${W_TMP_EARLY}/_reg_$(echo "${_W_gotsha256sum}" | cut -c1-8)"_$$.reg + + unset W_reg_file _W_gotsha256sum +} + +w_register_font() +{ + W_file=$1 + shift + W_font=$1 + + case $(echo "${W_file}" | tr "[:upper:]" "[:lower:]") in + *.ttf|*.ttc) W_font="${W_font} (TrueType)";; + esac + + # Kludge: use _r to avoid \r expansion in w_try + cat > "${W_TMP}"/_register-font.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts] +"${W_font}"="${W_file}" +_EOF_ + # too verbose + w_try_regedit "${W_TMP_WIN}"\\_register-font.reg + w_backup_reg_file "${W_TMP}"/_register-font.reg + + # Wine also updates the win9x fonts key, so let's do that, too + cat > "${W_TMP}"/_register-font.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Fonts] +"${W_font}"="${W_file}" +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\_register-font.reg + w_backup_reg_file "${W_TMP}"/_register-font.reg + + unset W_file W_font +} + +# Note: we use UTF-16 (little endian) in .reg file for native (non-English) font names. +w_register_font_replacement() +{ + _W_alias=$1 + shift + _W_font=$1 + # UTF-16 BOM (U+FEFF, "0xEF 0xBB 0xBF" in UTF-8) + printf "\357\273\277" | iconv -f UTF-8 -t UTF-16LE > "${W_TMP}"/_register-font-replacements.reg + # Kludge: use _r to avoid \r expansion in w_try + iconv -f UTF-8 -t UTF-16LE >> "${W_TMP}"/_register-font-replacements.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Fonts\\Replacements] +"${_W_alias}"="${_W_font}" +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\_register-font-replacements.reg + + w_backup_reg_file "${W_TMP}"/_register-font-replacements.reg + + unset _W_alias _W_font +} + +w_append_path() +{ + # Prepend $1 to the Windows path in the registry. + # Use printf %s to avoid interpreting backslashes. + # 2/4 backslashes, not 4/8, see https://github.com/Winetricks/winetricks/issues/932 + _W_NEW_PATH="$(printf %s "$1" | sed 's,\\,\\\\,g')" + _W_WIN_PATH="$(w_expand_env PATH | sed 's,\\,\\\\,g')" + + # FIXME: OS X? https://github.com/Winetricks/winetricks/issues/697 + sed 's/$/\r/' > "${W_TMP}"/path.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment] +"PATH"="${_W_NEW_PATH};${_W_WIN_PATH}" +_EOF_ + + w_try_regedit "${W_TMP_WIN}"\\path.reg + rm -f "${W_TMP}"/path.reg + unset _W_NEW_PATH _W_WIN_PATH +} + +#---- Private Functions ---- + +# Determines downloader to use, etc. +# I.e., things common to w_download_to(), winetricks_download_to_stdout(), and winetricks_stats_report()) +winetricks_download_setup() +{ + # shellcheck disable=SC2104 + case "${WINETRICKS_DOWNLOADER}" in + aria2c|curl|wget|fetch) : ;; + "") if [ -x "$(command -v aria2c 2>/dev/null)" ] ; then + WINETRICKS_DOWNLOADER="aria2c" + elif [ -x "$(command -v wget 2>/dev/null)" ] ; then + WINETRICKS_DOWNLOADER="wget" + elif [ -x "$(command -v curl 2>/dev/null)" ] ; then + WINETRICKS_DOWNLOADER="curl" + elif [ -x "$(command -v fetch 2>/dev/null)" ] ; then + WINETRICKS_DOWNLOADER="fetch" + else + w_die "Please install wget or aria2c (or, if those aren't available, curl)" + fi + ;; + *) w_die "Invalid value ${WINETRICKS_DOWNLOADER} given for WINETRICKS_DOWNLOADER. Possible values: aria2c, curl, wget, fetch" + esac + + # Common values for aria2c/curl/fetch/wget + # Number of retry attempts (not supported by fetch): + WINETRICKS_DOWNLOADER_RETRIES=${WINETRICKS_DOWNLOADER_RETRIES:-3} + # Connection timeout time (in seconds): + WINETRICKS_DOWNLOADER_TIMEOUT=${WINETRICKS_DOWNLOADER_TIMEOUT:-15} + + case "${WINETRICKS_OPT_TORIFY}" in + 1) torify=torify + # torify needs --async-dns=false, see https://github.com/tatsuhiro-t/aria2/issues/613 + aria2c_torify_opts="--async-dns=false" + if [ ! -x "$(command -v torify 2>/dev/null)" ]; then + w_die "--torify was used, but torify is not installed, please install it." ; exit 1 + fi ;; + *) torify= + aria2c_torify_opts="" ;; + esac +} + + +winetricks_dl_url_to_stdout() +{ + winetricks_download_setup + + # Not using w_try here as it adds extra output, breaking things. + # FIXME: add a w_try_quiet() wrapper around w_try() that doesn't print the + # Executing ... stuff, but still does error checking + if [ "${WINETRICKS_DOWNLOADER}" = "wget" ] ; then + ${torify} wget -q -O - --timeout "${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --tries "${WINETRICKS_DOWNLOADER_RETRIES}" "$1" + elif [ "${WINETRICKS_DOWNLOADER}" = "curl" ] ; then + ${torify} curl -s --connect-timeout "${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --retry "${WINETRICKS_DOWNLOADER_RETRIES}" "$1" + elif [ "${WINETRICKS_DOWNLOADER}" = "aria2c" ] ; then + # aria2c doesn't have support downloading to stdout: + # https://github.com/aria2/aria2/issues/190 + # So instead, download to a temporary directory and cat the file: + stdout_tmpfile="${W_TMP_EARLY}/stdout.tmp" + + if [ -e "${stdout_tmpfile}" ] ; then + rm "${stdout_tmpfile}" + fi + ${torify} aria2c \ + ${aria2c_torify_opts:+"${aria2c_torify_opts}"} \ + --continue \ + --daemon=false \ + --dir="${W_TMP_EARLY}" \ + --enable-rpc=false \ + --input-file='' \ + --max-connection-per-server=5 \ + --out="stdout.tmp" \ + --save-session='' \ + --stream-piece-selector=geom \ + --connect-timeout="${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --max-tries="${WINETRICKS_DOWNLOADER_RETRIES}" \ + "$1" > /dev/null + cat "${stdout_tmpfile}" + rm "${stdout_tmpfile}" + elif [ "${WINETRICKS_DOWNLOADER}" = "fetch" ] ; then + # fetch does not support retry count + ${torify} fetch -o - -T "${WINETRICKS_DOWNLOADER_TIMEOUT}" "$1" 2>/dev/null + else + w_die "Please install aria2c, curl, or wget" + fi +} + +winetricks_dl_warning() { + case ${LANG} in + ru*) _W_countrymsg="Скрипт определил, что ваш IP-адрес принадлежит России. Если во время загрузки файлов вы увидите ошибки несоответствия сертификата, перезапустите скрипт с опцией '--torify' или скачайте файлы вручную, например, используя VPN." ;; + pl*) _W_countrymsg="Wykryto, że twój adres IP należy do Rosji. W wypadku problemów z pobieraniem, uruchom z parametrem '--torify' lub pobierz plik manualnie, np. z użyciem VPN." ;; + *) _W_countrymsg="Your IP address has been determined to belong to Russia. If you encounter a certificate error while downloading, please relaunch with the '--torify' option, or download files manually, for instance using VPN." ;; + esac + + # Lookup own country via IP address only once (i.e. don't run this function for every download invocation) + if [ -z "${W_COUNTRY}" ] ; then + W_COUNTRY="$(winetricks_dl_url_to_stdout "https://ipinfo.io/$(winetricks_dl_url_to_stdout "https://ipinfo.io/ip")" | awk -F '"' '/country/{print $4}')" + export W_COUNTRY + + if [ -z "${W_COUNTRY}" ] ; then + export W_COUNTRY="unknown" + fi + fi + + # TODO: Resolve a full country name via https://github.com/umpirsky/country-list/tree/master/data + case "${W_COUNTRY}" in + "RU") w_warn "${_W_countrymsg}" ;; + *) : ;; + esac +} + +winetricks_get_sha256sum_prog() { + # Linux/Solaris: + if [ -x "$(command -v sha256sum 2>/dev/null)" ] ; then + WINETRICKS_SHA256SUM="sha256sum" + # FreeBSD/NetBSD: + elif [ -x "$(command -v sha256 2>/dev/null)" ] ; then + WINETRICKS_SHA256SUM="sha256" + # OSX (10.6+), 10.5 doesn't support at all: https://stackoverflow.com/questions/7500691/rvm-sha256sum-nor-shasum-found + elif [ -x "$(command -v shasum 2>/dev/null)" ] ; then + WINETRICKS_SHA256SUM="shasum -a 256" + else + w_die "No sha256um utility available." + fi +} + +winetricks_get_platform() +{ + if [ "${OS}" = "Windows_NT" ]; then + if [ -n "${WINELOADERNOEXEC}" ]; then + # Windows/Cygwin + export W_PLATFORM="windows_cmd" + else + # wineconsole/cmd under wine + export W_PLATFORM="wine_cmd" + fi + else + # Normal Unix shell + export W_PLATFORM="wine" + fi +} + +winetricks_latest_version_check() +{ + if [ "${WINETRICKS_LATEST_VERSION_CHECK}" = 'disabled' ] || [ -f "${WINETRICKS_CONFIG}/disable-latest-version-check" ] ; then + w_info "winetricks latest version check update disabled" + return + # Used by ./src/release.sh, not for end users. Silently disables update check, without using $WINETRICKS_SUPER_QUIET + elif [ "${WINETRICKS_LATEST_VERSION_CHECK}" = 'development' ] ; then + return + fi + + latest_version="$(winetricks_dl_url_to_stdout https://raw.githubusercontent.com/Winetricks/winetricks/master/files/LATEST)" + + # Check that $latest_version is an actual number in case github is down + if ! echo "${latest_version}" | grep -q -E "[0-9]{8}" || [ -z "${latest_version}" ] ; then + case ${LANG} in + pl*) w_warn "GitHub nie działa? Wersja '${latest_version}' nie wydaje się być prawdiłową wersją" ;; + pt*) w_warn "Github offline? versão '${latest_version}' não parece uma versão válida" ;; + ru*) w_warn "Отсутствует подключение к Github? версия '${latest_version}' может быть неактуальной" ;; + zh_CN*) w_warn "GitHub 无法访问?${latest_version} 似乎不是个有效的版本号。" ;; + zh_TW*|zh_HK*) w_warn "GitHub 宕機了?${latest_version} 似乎不是個有效的版本號。" ;; + *) w_warn "Github down? version '${latest_version}' doesn't appear to be a valid version" ;; + esac + + # If we can't get the latest version, no reason to go further: + return + fi + + if [ ! "${WINETRICKS_VERSION}" = "${latest_version}" ] && [ ! "${WINETRICKS_VERSION}" = "${latest_version}-next" ]; then + if [ -f "${WINETRICKS_CONFIG}/enable-auto-update" ] ; then + w_info "You are running winetricks-${WINETRICKS_VERSION}." + w_info "New upstream release winetricks-${latest_version} is available." + w_info "auto-update enabled: running winetricks_selfupdate" + winetricks_selfupdate + else + case ${LANG} in + pl*) + w_warn "Korzystasz z winetricks-${WINETRICKS_VERSION}, a najnowszą wersją winetricks-${latest_version}!" + w_warn "Zalecana jest aktualizacja z użyciem menedżera pakietów Twojej dystrybucji, --self-update lub ręczna aktualizacja." + ;; + pt*) + w_warn "Você está utilizando o winetricks-${WINETRICKS_VERSION}, a versão mais recente é winetricks-${latest_version}!" + w_warn "Você pode atualizar com o sistema de atualizações da sua distribuição, --self-update, ou manualmente." + ;; + ru*) + w_warn "Запущен winetricks-${WINETRICKS_VERSION}, последняя версия winetricks-${latest_version}!" + w_warn "Вы можете ее обновить с помощью менеджера пакетов, --self-update или вручную." + ;; + zh_CN*) + w_warn "你正在使用 winetricks-${WINETRICKS_VERSION},最新版本是 winetricks-${latest_version}!" + w_warn "你应该使用你的发行版软件管理器、--self-update 或者手动更新。" + ;; + zh_TW*|zh_HK*) + w_warn "你正在使用 winetricks-${WINETRICKS_VERSION},最新版本是 winetricks-${latest_version}!" + w_warn "你應該使用你的發行版軟體管理者、--self-update 或者手動更新。" + ;; + *) + w_warn "You are running winetricks-${WINETRICKS_VERSION}, latest upstream is winetricks-${latest_version}!" + w_warn "You should update using your distribution's package manager, --self-update, or manually." + ;; + esac + fi + fi +} + +winetricks_print_version() +{ + # Normally done by winetricks_init, but we don't want to set up the WINEPREFIX + # just to get the winetricks version: + + winetricks_get_sha256sum_prog + + w_get_sha256sum "$0" + echo "${WINETRICKS_VERSION} - sha256sum: ${_W_gotsha256sum}" +} + +# Run a small wine command for internal use +# Handy place to put small workarounds +winetricks_early_wine() +{ + # The sed works around https://bugs.winehq.org/show_bug.cgi?id=25838 + # which unfortunately got released in wine-1.3.12 + # We would like to use DISPLAY= to prevent virtual desktops from + # popping up, but that causes AutoHotKey's tray icon to not show up. + # We used to use WINEDLLOVERRIDES=mshtml= here to suppress the Gecko + # autoinstall, but that yielded wineprefixes that *never* autoinstalled + # Gecko (winezeug bug 223). + # The tr removes carriage returns so expanded variables don't have crud on the end + # The grep works around using new wineprefixes with old wine + WINEDEBUG=-all "${WINE}" "$@" 2> "${W_TMP_EARLY}"/early_wine.err.txt | ( sed 's/.*1h.=//' | tr -d '\r' | grep -v -e "Module not found" -e "Could not load wine-gecko" || true) +} + +# Wrapper around winetricks_early_wine() +# Same idea, but use $WINE_ARCH, i.e., always use wine64 for 64-bit prefixes +# Currently only used by w_expand_env() +winetricks_early_wine_arch() +{ + WINE="${WINE_ARCH}" winetricks_early_wine "$@" +} + +winetricks_detect_gui() +{ + if [ -n "$1" ]; then + if [ "$1" = "kdialog" ] && test -x "$(command -v kdialog 2>/dev/null)"; then + WINETRICKS_GUI=kdialog + WINETRICKS_GUI_VERSION="$(kdialog --version)" + elif [ "$1" = "zenity" ] || [ "$1" = "--gui" ] && test -x "$(command -v zenity 2>/dev/null)"; then + WINETRICKS_GUI=zenity + WINETRICKS_GUI_VERSION="$(zenity --version)" + WINETRICKS_MENU_HEIGHT=500 + WINETRICKS_MENU_WIDTH=1010 + else + echo "Invalid argument for --gui" + echo "Valid options are 'zenity' and 'kdialog'" + exit 1 + fi + elif [ "${XDG_CURRENT_DESKTOP}" = "KDE" ] && test -x "$(command -v kdialog 2>/dev/null)"; then + WINETRICKS_GUI=kdialog + WINETRICKS_GUI_VERSION="$(kdialog --version)" + elif test -x "$(command -v zenity 2>/dev/null)"; then + WINETRICKS_GUI=zenity + WINETRICKS_GUI_VERSION="$(zenity --version)" + WINETRICKS_MENU_HEIGHT=500 + WINETRICKS_MENU_WIDTH=1010 + elif test -x "$(command -v kdialog 2>/dev/null)"; then + WINETRICKS_GUI=kdialog + WINETRICKS_GUI_VERSION="$(kdialog --version)" + else + echo "No arguments given, so tried to start GUI, but neither zenity" + echo "nor kdialog were found. Please install one of them if you want" + echo "a graphical interface, or run with --help for more options." + exit 1 + fi + + # Print zenity/dialog version info for debugging: + if [ -z "${WINETRICKS_SUPER_QUIET}" ] ; then + echo "winetricks GUI enabled, using ${WINETRICKS_GUI} ${WINETRICKS_GUI_VERSION##kdialog }" + fi +} + +# Detect which sudo to use +winetricks_detect_sudo() +{ + WINETRICKS_SUDO=sudo + if test "${WINETRICKS_GUI}" = "none"; then + return + fi + + if test x"${DISPLAY}" != x""; then + # This should be the default option because some of GUI sudo programs are unmaintained + # See https://github.com/Winetricks/winetricks/issues/912 + if test -x "$(command -v pkexec 2>/dev/null)"; then + # Maintained and recommended, part of Polkit, desktop-independent + # Usage: pkexec command ... + WINETRICKS_SUDO=pkexec + # Austin said "gksu*/kdesu* should stay (at least for a while)" in Feb 2018 + # See https://github.com/Winetricks/winetricks/pull/915#issuecomment-362984379 + elif test -x "$(command -v gksudo 2>/dev/null)"; then + # Unmaintained [2009], part of gksu + # Usage: gksudo "command ..." + WINETRICKS_SUDO=gksudo + elif test -x "$(command -v kdesudo 2>/dev/null)"; then + # Unmaintained [2015] (latest is for KDE4, no KF5 version available) + # https://cgit.kde.org/kdesudo.git/ + # Usage: kdesudo "command ..." + WINETRICKS_SUDO=kdesudo + # fall back to the su versions if sudo isn't available (Fedora, etc.): + elif test -x "$(command -v gksu 2>/dev/null)"; then + # Unmaintained [2009] + # Usage: gksu "command ..." + WINETRICKS_SUDO=gksu + elif test -x "$(command -v kdesu 2>/dev/null)"; then + # Maintained, KF5 version available + # https://cgit.kde.org/kdesu.git/ + # Usage: kdesu -c "command ..." + WINETRICKS_SUDO=kdesu + fi + fi +} + +# Detect which iso mount tool to use +winetricks_detect_iso_mount() +{ + if test -x "$(command -v fuseiso 2>/dev/null)"; then + # File/dir names are converted to lowercase + WINETRICKS_ISO_MOUNT=fuseiso + elif test -x "$(command -v archivemount 2>/dev/null)"; then + # File/dir names may be uppercase and we may need + # case-insensitive operations + # e.g. w_try "$WINE" cmd /c "copy $W_ISO_MOUNT_LETTER:\\DOC.PDF C:\\doc.pdf" + # This tool had path issue in 0.8.8 or older versions + # e.g. office2013pro works in 0.8.9 or later but doesn't work in 0.8.8 + WINETRICKS_ISO_MOUNT=archivemount + elif test -x "$(command -v hdiutil 2>/dev/null)"; then + # File/dir names may be uppercase (same as archivemount) + WINETRICKS_ISO_MOUNT=hdiutil + else + WINETRICKS_ISO_MOUNT=none + fi + # Notes about other tools: + # fuseiso9660: may append ";1" to filenames + # unar: the drive icon is not "optical drive + disc" in Wine Explorer + # and "wine eject" command fails +} + +winetricks_get_prefix_var() +{ + ( + # shellcheck disable=SC1090 + . "${W_PREFIXES_ROOT}/${p}/wrapper.cfg" + + # The cryptic sed is there to turn ' into '\'' + # shellcheck disable=SC1117 + eval echo \$ww_"$1" | sed "s/'/'\\\''/" + ) +} + +# Display prefix menu, get which wineprefix the user wants to work with +winetricks_prefixmenu() +{ + case ${LANG} in + ru*) _W_msg_title="Winetricks - выберите путь wine (wineprefix)" + _W_msg_body='Что вы хотите сделать?' + _W_msg_apps='Установить программу' + _W_msg_games='Установить игру' + _W_msg_benchmarks='Установить приложение для оценки производительности' + _W_msg_default="Выберите путь для wine по умолчанию" + _W_msg_mkprefix="Создать новый путь wine" + _W_msg_unattended0="Отключить автоматическую установку" + _W_msg_unattended1="Включить автоматическую установку" + _W_msg_help="Просмотр справки (в веб-браузере)" + ;; + uk*) _W_msg_title="Winetricks - виберіть wineprefix" + _W_msg_body='Що Ви хочете зробити?' + _W_msg_apps='Встановити додаток' + _W_msg_games='Встановити гру' + _W_msg_benchmarks='Встановити benchmark' + _W_msg_default="Вибрати wineprefix за замовчуванням" + _W_msg_mkprefix="створити новий wineprefix" + _W_msg_unattended0="Вимкнути автоматичне встановлення" + _W_msg_unattended1="Увімкнути автоматичне встановлення" + _W_msg_help="Переглянути довідку" + ;; + zh_CN*) _W_msg_title="Winetricks - 择一 Wine 容器" + _W_msg_body='君欲何为?' + _W_msg_apps='安装一个 Windows 应用' + _W_msg_games='安装一个游戏' + _W_msg_benchmarks='安装一个基准测试软件' + _W_msg_default="选择默认的 Wine 容器" + _W_msg_mkprefix="创建新的 Wine 容器" + _W_msg_unattended0="禁用静默安装" + _W_msg_unattended1="启用静默安装" + _W_msg_help="查看帮助" + ;; + zh_TW*|zh_HK*) _W_msg_title="Winetricks - 取一 Wine 容器" + _W_msg_body='君欲何為?' + _W_msg_apps='安裝一個 Windows 應用' + _W_msg_games='安裝一個遊戲' + _W_msg_benchmarks='安裝一個基准測試軟體' + _W_msg_default="選取預設的 Wine 容器" + _W_msg_mkprefix="建立新的 Wine 容器" + _W_msg_unattended0="禁用靜默安裝" + _W_msg_unattended1="啟用靜默安裝" + _W_msg_help="檢視輔助說明" + ;; + de*) _W_msg_title="Winetricks - wineprefix auswählen" + _W_msg_body='Was möchten Sie tun?' + _W_msg_apps='Ein Programm installieren' + _W_msg_games='Ein Spiel installieren' + _W_msg_benchmarks='Einen Benchmark-Test installieren' + _W_msg_default="Standard wineprefix auswählen" + _W_msg_mkprefix="Neuen wineprefix erstellen" + _W_msg_unattended0="Automatische Installation deaktivieren" + _W_msg_unattended1="Automatische Installation aktivieren" + _W_msg_help="Hilfe anzeigen" + ;; + pl*) _W_msg_title="Winetricks - wybierz prefiks Wine" + _W_msg_body='Co chcesz zrobić?' + _W_msg_apps='Zainstalować aplikację' + _W_msg_games='Zainstalować grę' + _W_msg_benchmarks='Zainstalować program sprawdzający wydajność komputera' + _W_msg_default="Wybrać domyślny prefiks Wine" + _W_msg_mkprefix="Stwórz nowy prefiks Wine" + _W_msg_unattended0="Wyłącz cichą instalację" + _W_msg_unattended1="Włącz cichą instalację" + _W_msg_help="Wyświetl pomoc" + ;; + pt*) _W_msg_title="Winetricks - Escolha um wineprefix" + _W_msg_body='O que você quer fazer?' + _W_msg_apps='Instalar um programa' + _W_msg_games='Instalar um jogo' + _W_msg_benchmarks='Instalar um teste de desempenho/benchmark' + _W_msg_default="Selecionar o prefixo padrão wineprefix" + _W_msg_mkprefix="Criar novo prefixo wineprefix" + _W_msg_unattended0="Desativar instalação silenciosa" + _W_msg_unattended1="Ativar instalação silenciosa" + _W_msg_help="Ver ajuda" + ;; + *) _W_msg_title="Winetricks - choose a wineprefix" + _W_msg_body='What do you want to do?' + _W_msg_apps='Install an application' + _W_msg_games='Install a game' + _W_msg_benchmarks='Install a benchmark' + _W_msg_default="Select the default wineprefix" + _W_msg_mkprefix="Create new wineprefix" + _W_msg_unattended0="Disable silent install" + _W_msg_unattended1="Enable silent install" + _W_msg_help="View help" + ;; + esac + case "${W_OPT_UNATTENDED}" in + 1) _W_cmd_unattended=attended; _W_msg_unattended="${_W_msg_unattended0}" ;; + *) _W_cmd_unattended=unattended; _W_msg_unattended="${_W_msg_unattended1}" ;; + esac + + case ${WINETRICKS_GUI} in + zenity) + printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --radiolist \ + --column '' \ + --column '' \ + --column '' \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + --hide-column 2 \ + FALSE help '${_W_msg_help}' \ + FALSE apps '${_W_msg_apps}' \ + FALSE benchmarks '${_W_msg_benchmarks}' \ + FALSE games '${_W_msg_games}' \ + TRUE main '${_W_msg_default}' \ + FALSE mkprefix '${_W_msg_mkprefix}' \ + " \ + > "${WINETRICKS_WORKDIR}"/zenity.sh + + if ls -d "${W_PREFIXES_ROOT}"/*/dosdevices > /dev/null 2>&1; then + for prefix in "${W_PREFIXES_ROOT}"/*/dosdevices; do + q="${prefix%%/dosdevices}" + p="${q##*/}" + if test -f "${W_PREFIXES_ROOT}/${p}/wrapper.cfg"; then + _W_msg_name="${p} ($(winetricks_get_prefix_var name))" + else + _W_msg_name="${p}" + fi + case ${LANG} in + zh_CN*) printf %s " FALSE prefix='${p}' '选择管理 ${_W_msg_name}' " ;; + zh_TW*|zh_HK*) printf %s " FALSE prefix='${p}' '選擇管理 ${_W_msg_name}' " ;; + de*) printf %s " FALSE prefix='${p}' '${_W_msg_name} auswählen' " ;; + pl*) printf %s " FALSE prefix='${p}' 'Wybierz ${_W_msg_name}' " ;; + pt*) printf %s " FALSE prefix='${p}' 'Selecione ${_W_msg_name}' " ;; + *) printf %s " FALSE prefix='${p}' 'Select ${_W_msg_name}' " ;; + esac + done >> "${WINETRICKS_WORKDIR}"/zenity.sh + fi + printf %s " FALSE ${_W_cmd_unattended} '${_W_msg_unattended}'" >> "${WINETRICKS_WORKDIR}"/zenity.sh + + sh "${WINETRICKS_WORKDIR}"/zenity.sh | tr '|' ' ' + ;; + + kdialog) + ( + printf %s "kdialog \ + --geometry 600x400+100+100 \ + --title '${_W_msg_title}' \ + --separate-output \ + --radiolist '${_W_msg_body}' \ + help '${_W_msg_help}' off \ + games '${_W_msg_games}' off \ + benchmarks '${_W_msg_benchmarks}' off \ + apps '${_W_msg_apps}' off \ + main '${_W_msg_default}' on \ + mkprefix '${_W_msg_mkprefix}' off \ + " + if ls -d "${W_PREFIXES_ROOT}"/*/dosdevices > /dev/null 2>&1; then + for prefix in "${W_PREFIXES_ROOT}"/*/dosdevices; do + q="${prefix%%/dosdevices}" + p="${q##*/}" + if test -f "${W_PREFIXES_ROOT}/${p}/wrapper.cfg"; then + _W_msg_name="${p} ($(winetricks_get_prefix_var name))" + else + _W_msg_name="${p}" + fi + printf %s "prefix='${p}' 'Select ${_W_msg_name}' off " + done + fi + printf %s " ${_W_cmd_unattended} '${_W_msg_unattended}' off" + ) > "${WINETRICKS_WORKDIR}"/kdialog.sh + sh "${WINETRICKS_WORKDIR}"/kdialog.sh + ;; + esac + unset _W_msg_help _W_msg_body _W_msg_title _W_msg_new _W_msg_default _W_msg_name +} + +# Graphically create new custom wineprefix. +# This returns two verbs: arch and prefix, e.g. "arch=32 prefix=test". +winetricks_mkprefixmenu() +{ + case ${LANG} in + # TODO: translate to other languages + de) _W_msg_title="Winetricks - Neues Wineprefix erstellen" + _W_msg_name="Name" + _W_msg_arch="Architektur" + ;; + pt*) _W_msg_title="Winetricks - criar novo wineprefix" + _W_msg_name="Nome" + _W_msg_arch="Arquitetura" + ;; + *) _W_msg_title="Winetricks - create new wineprefix" + _W_msg_name="Name" + _W_msg_arch="Architecture" + ;; + esac + + case ${WINETRICKS_GUI} in + zenity) + ${WINETRICKS_GUI} --forms --text="" --title "${_W_msg_title}" \ + --add-combo="${_W_msg_arch}" --combo-values=32\|64 \ + --add-entry="${_W_msg_name}" \ + | sed -e 's/^\s*|/64|/' -e 's/^/arch=/' -e 's/|/ prefix=/' + ;; + kdialog) + ${WINETRICKS_GUI} --title="${_W_msg_title}" \ + --radiolist="${_W_msg_arch}" 32 32bit off 64 64bit on \ + | sed -e 's/^$/64/' -e 's/^/arch=/' + ${WINETRICKS_GUI} --title="${_W_msg_title}" --inputbox="${_W_msg_name}" \ + | sed -e 's/^/prefix=/' + ;; + esac + + unset _W_msg_title _W_msg_name _W_msg_arch +} + +# Display main menu, get which submenu the user wants +winetricks_mainmenu() +{ + case ${LANG} in + da*) _W_msg_title="Vælg en pakke-kategori - Nuværende præfiks er \"${WINEPREFIX}\"" + _W_msg_body='Hvad ønsker du at gøre?' + _W_msg_dlls="Install a Windows DLL" + _W_msg_fonts='Install a font' + _W_msg_settings='Change Wine settings' + _W_msg_winecfg='Run winecfg' + _W_msg_regedit='Run regedit' + _W_msg_taskmgr='Run taskmgr' + _W_msg_explorer='Run explorer' + _W_msg_uninstaller='Run uninstaller' + _W_msg_shell='Run a commandline shell (for debugging)' + _W_msg_folder='Browse files' + _W_msg_annihilate="Delete ALL DATA AND APPLICATIONS INSIDE THIS WINEPREFIX" + ;; + de*) _W_msg_title="Pakettyp auswählen - Aktueller Präfix ist \"${WINEPREFIX}\"" + _W_msg_body='Was möchten Sie tun?' + _W_msg_dlls="Windows-DLL installieren" + _W_msg_fonts='Schriftart installieren' + _W_msg_settings='Wine Einstellungen ändern' + _W_msg_winecfg='winecfg starten' + _W_msg_regedit='regedit starten' + _W_msg_taskmgr='taskmgr starten' + _W_msg_explorer='explorer starten' + _W_msg_uninstaller='uninstaller starten' + _W_msg_shell='Eine Kommandozeile zum debuggen starten' + _W_msg_folder='Ordner durchsuchen' + _W_msg_annihilate="ALLE DATEIEN UND PROGRAMME IN DIESEM WINEPREFIX Löschen" + ;; + pl*) _W_msg_title="Winetricks - obecny prefiks to \"${WINEPREFIX}\"" + _W_msg_body='Co chcesz zrobić w tym prefiksie?' + _W_msg_dlls="Zainstalować windowsową bibliotekę DLL lub komponent" + _W_msg_fonts='Zainstalować czcionkę' + _W_msg_settings='Zmienić ustawienia' + _W_msg_winecfg='Uruchomić winecfg' + _W_msg_regedit='Uruchomić edytor rejestru' + _W_msg_taskmgr='Uruchomić menedżer zadań' + _W_msg_explorer='Uruchomić explorer' + _W_msg_uninstaller='Uruchomić program odinstalowujący' + _W_msg_shell='Uruchomić powłokę wiersza poleceń (dla debugowania)' + _W_msg_folder='Przeglądać pliki' + _W_msg_annihilate="Usuńąć WSZYSTKIE DANE I APLIKACJE WEWNĄTRZ TEGO PREFIKSU WINE" + ;; + pt*) _W_msg_title="Winetricks - o prefixo atual é \"${WINEPREFIX}\"" + _W_msg_body='O que você gostaria de fazer com este prefixo wineprefix?' + _W_msg_dlls="Instalar DLL ou componente do Windows" + _W_msg_fonts='Instalar fontes' + _W_msg_settings='Alterar configurações' + _W_msg_winecfg='Executar winecfg' + _W_msg_regedit='Executar regedit' + _W_msg_taskmgr='Executar taskmgr' + _W_msg_explorer='Executar explorer' + _W_msg_uninstaller='Executar desinstalador' + _W_msg_shell='Executar linha de comandos shell (para depuração)' + _W_msg_folder='Gerenciar arquivos' + _W_msg_annihilate="Apagar TODOS OS DADOS E APLICATIVOS DENTRO DESTE WINEPREFIX" + ;; + ru*) _W_msg_title="Winetricks - текущий путь для wine (wineprefix) \"${WINEPREFIX}\"" + _W_msg_body='Что вы хотите сделать с этим wineprefix?' + _W_msg_dlls="Установить библиотеку DLL или компонент Windows" + _W_msg_fonts='Установить шрифт' + _W_msg_settings='Поменять настройки' + _W_msg_winecfg='Запустить winecfg (редактор настроек wine)' + _W_msg_regedit='Запустить regedit (редактор реестра)' + _W_msg_taskmgr='Запустить taskmgr (менеджер задач)' + _W_msg_explorer='Запустить explorer' + _W_msg_uninstaller='Запустить uninstaller (деинсталлятор)' + _W_msg_shell='Запустить графический терминал (для отладки)' + _W_msg_folder='Проводник файлов' + _W_msg_annihilate="Удалить ВСЕ ДАННЫЕ И ПРИЛОЖЕНИЯ В ЭТОМ WINEPREFIX" + ;; + uk*) _W_msg_title="Winetricks - поточний prefix \"${WINEPREFIX}\"" + _W_msg_body='Що Ви хочете зробити для цього wineprefix?' + _W_msg_dlls="Встановити Windows DLL чи компонент(и)" + _W_msg_fonts='Встановити шрифт' + _W_msg_settings='Змінити налаштування' + _W_msg_winecfg='Запустити winecfg' + _W_msg_regedit='Запустити regedit' + _W_msg_taskmgr='Запустити taskmgr' + _W_msg_explorer='Запустити explorer' + _W_msg_uninstaller='Встановлення/видалення програм' + _W_msg_shell='Запуск командної оболонки (для налагодження)' + _W_msg_folder='Перегляд файлів' + _W_msg_annihilate="Видалити УСІ ДАНІ ТА ПРОГРАМИ З ЦЬОГО WINEPREFIX" + ;; + zh_CN*) _W_msg_title="Winetricks - 当前容器路径是 \"${WINEPREFIX}\"" + _W_msg_body='管理当前容器' + _W_msg_dlls="安装 Windows DLL 或组件" + _W_msg_fonts='安装字体' + _W_msg_settings='修改设置' + _W_msg_winecfg='运行 Wine 配置程序' + _W_msg_regedit='运行注册表' + _W_msg_taskmgr='运行任务管理器' + _W_msg_explorer='运行资源管理器' + _W_msg_uninstaller='运行卸载程序' + _W_msg_shell='运行命令提示窗口 (作为调试)' + _W_msg_folder='浏览容器中的文件' + _W_msg_annihilate="删除容器中所有数据和应用程序" + ;; + zh_TW*|zh_HK*) _W_msg_title="Winetricks - 目前容器路徑是 \"${WINEPREFIX}\"" + _W_msg_body='管理目前容器' + _W_msg_dlls="安裝 Windows DLL 或套件" + _W_msg_fonts='安裝字型' + _W_msg_settings='修改設定' + _W_msg_winecfg='執行 Wine 設定程式' + _W_msg_regedit='執行登錄編輯程式' + _W_msg_taskmgr='執行工作管理員' + _W_msg_explorer='執行檔案總管' + _W_msg_uninstaller='執行解除安裝程式' + _W_msg_shell='執行命令提示視窗 (作為偵錯)' + _W_msg_folder='瀏覽容器中的檔案' + _W_msg_annihilate="刪除容器中所有資料和應用程式" + ;; + *) _W_msg_title="Winetricks - current prefix is \"${WINEPREFIX}\"" + _W_msg_body='What would you like to do to this wineprefix?' + _W_msg_dlls="Install a Windows DLL or component" + _W_msg_fonts='Install a font' + _W_msg_settings='Change settings' + _W_msg_winecfg='Run winecfg' + _W_msg_regedit='Run regedit' + _W_msg_taskmgr='Run taskmgr' + _W_msg_explorer='Run explorer' + _W_msg_uninstaller='Run uninstaller' + _W_msg_shell='Run a commandline shell (for debugging)' + _W_msg_folder='Browse files' + _W_msg_annihilate="Delete ALL DATA AND APPLICATIONS INSIDE THIS WINEPREFIX" + ;; + esac + + case ${WINETRICKS_GUI} in + zenity) + ( + printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --radiolist \ + --column '' \ + --column '' \ + --column '' \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + --hide-column 2 \ + FALSE dlls '${_W_msg_dlls}' \ + FALSE fonts '${_W_msg_fonts}' \ + FALSE settings '${_W_msg_settings}' \ + FALSE winecfg '${_W_msg_winecfg}' \ + FALSE regedit '${_W_msg_regedit}' \ + FALSE taskmgr '${_W_msg_taskmgr}' \ + FALSE explorer '${_W_msg_explorer}' \ + FALSE uninstaller '${_W_msg_uninstaller}' \ + FALSE shell '${_W_msg_shell}' \ + FALSE folder '${_W_msg_folder}' \ + FALSE annihilate '${_W_msg_annihilate}' \ + " + ) > "${WINETRICKS_WORKDIR}"/zenity.sh + + sh "${WINETRICKS_WORKDIR}"/zenity.sh | tr '|' ' ' + ;; + + kdialog) + ${WINETRICKS_GUI} --geometry 600x400+100+100 \ + --title "${_W_msg_title}" \ + --separate-output \ + --radiolist \ + "${_W_msg_body}"\ + dlls "${_W_msg_dlls}" off \ + fonts "${_W_msg_fonts}" off \ + settings "${_W_msg_settings}" off \ + winecfg "${_W_msg_winecfg}" off \ + regedit "${_W_msg_regedit}" off \ + taskmgr "${_W_msg_taskmgr}" off \ + explorer "${_W_msg_explorer}" off \ + uninstaller "${_W_msg_uninstaller}" off \ + shell "${_W_msg_shell}" off \ + folder "${_W_msg_folder}" off \ + annihilate "${_W_msg_annihilate}" off \ + ${_W_cmd_unattended} "${_W_msg_unattended}" off \ + + ;; + esac + unset _W_msg_body _W_msg_title _W_msg_apps _W_msg_benchmarks _W_msg_dlls _W_msg_games _W_msg_settings +} + +winetricks_settings_menu() +{ + # FIXME: these translations should really be centralized/reused: + case ${LANG} in + da*) _W_msg_title="Vælg en pakke - Nuværende præfiks er \"${WINEPREFIX}\"" + _W_msg_body='Which settings would you like to change?' + ;; + de*) _W_msg_title="Winetricks - Aktueller Präfix ist \"${WINEPREFIX}\"" + _W_msg_body='Welche Einstellungen möchten Sie ändern?' + ;; + pl*) _W_msg_title="Winetricks - obecny prefiks to \"${WINEPREFIX}\"" + _W_msg_body='Jakie ustawienia chcesz zmienić?' + ;; + pt*) _W_msg_title="Winetricks - o prefixo atual é \"${WINEPREFIX}\"" + _W_msg_body='Quais configurações você gostaria de alterar?' + ;; + ru*) _W_msg_title="Winetricks - текущий путь wine (wineprefix) \"${WINEPREFIX}\"" + _W_msg_body='Какие настройки вы хотите изменить?' + ;; + uk*) _W_msg_title="Winetricks - поточний prefix \"${WINEPREFIX}\"" + _W_msg_body='Які налаштування Ви хочете змінити?' + ;; + zh_CN*) _W_msg_title="Winetricks - 当前容器路径是 \"${WINEPREFIX}\"" + _W_msg_body='您想要更改哪项设置?' + ;; + zh_TW*|zh_HK*) _W_msg_title="Winetricks - 目前容器路徑是 \"${WINEPREFIX}\"" + _W_msg_body='您想要變更哪項設定?' + ;; + *) _W_msg_title="Winetricks - current prefix is \"${WINEPREFIX}\"" + _W_msg_body='Which settings would you like to change?' + ;; + esac + + case ${WINETRICKS_GUI} in + zenity) + case ${LANG} in + da*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Pakke \ + --column Navn \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + de*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Einstellung \ + --column Name \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + pl*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Ustawienie \ + --column Nazwa \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + pt*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Configuração \ + --column Título \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + ru*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Установка \ + --column Имя \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + uk*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Установка \ + --column Назва \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + zh_CN*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column 设置 \ + --column 标题 \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + zh_TW*|zh_HK*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column 設定 \ + --column 標題 \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + *) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Setting \ + --column Title \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + esac > "${WINETRICKS_WORKDIR}"/zenity.sh + + for metadatafile in "${WINETRICKS_METADATA}/${WINETRICKS_CURMENU}"/*.vars; do + code=$(winetricks_metadata_basename "${metadatafile}") + ( + title='?' + # shellcheck disable=SC1090 + . "${metadatafile}" + + # Begin 'title' strings localization code + # shellcheck disable=SC2154 + case ${LANG} in + uk*) + case "${title_uk}" in + "") ;; + *) title="${title_uk}";; + esac + esac + + # End of code + printf "%s %s %s %s" " " FALSE \ + "${code}" \ + "\"${title}\"" + ) + done >> "${WINETRICKS_WORKDIR}"/zenity.sh + + sh "${WINETRICKS_WORKDIR}"/zenity.sh | tr '|' ' ' + ;; + + kdialog) + ( + printf %s "kdialog --geometry 600x400+100+100 --title '${_W_msg_title}' --separate-output --checklist '${_W_msg_body}' " + winetricks_list_all | sed 's/\([^ ]*\) *\(.*\)/\1 "\1 - \2" off /' | tr '\012' ' ' + ) > "${WINETRICKS_WORKDIR}"/kdialog.sh + + sh "${WINETRICKS_WORKDIR}"/kdialog.sh + ;; + esac + + unset _W_msg_body _W_msg_title +} + +# Display the current menu, output list of verbs to execute to stdout +winetricks_showmenu() +{ + case ${LANG} in + da*) _W_msg_title='Vælg en pakke' + _W_msg_body='Vilken pakke vil du installere?' + _W_cached="cached" + ;; + de*) _W_msg_title="Winetricks - Aktueller Prefix ist \"${WINEPREFIX}\"" + _W_msg_body='Welche Paket(e) möchten Sie installieren?' + _W_cached="gecached" + ;; + pl*) _W_msg_title="Winetricks - obecny prefiks to \"${WINEPREFIX}\"" + _W_msg_body='Które paczki chesz zainstalować?' + _W_cached="zarchiwizowane" + ;; + pt*) _W_msg_title="Winetricks - o prefixo atual é \"${WINEPREFIX}\"" + _W_msg_body='Quais pacotes você gostaria de instalar?' + _W_cached="em cache" + ;; + ru*) _W_msg_title="Winetricks - текущий путь wine (wineprefix) \"${WINEPREFIX}\"" + _W_msg_body='Какое приложение(я) вы хотите установить?' + _W_cached="в кэше" + ;; + uk*) _W_msg_title="Winetricks - поточний prefix \"${WINEPREFIX}\"" + _W_msg_body='Які пакунки Ви хочете встановити?' + _W_cached="кешовано" + ;; + zh_CN*) _W_msg_title="Winetricks - 当前容器路径是 \"${WINEPREFIX}\"" + _W_msg_body='您想要安装什么应用程序?' + _W_cached="已缓存" + ;; + zh_TW*|zh_HK*) _W_msg_title="Winetricks - 目前容器路徑是 \"${WINEPREFIX}\"" + _W_msg_body='您想要安裝什麼應用程式?' + _W_cached="已緩存" + ;; + *) _W_msg_title="Winetricks - current prefix is \"${WINEPREFIX}\"" + _W_msg_body='Which package(s) would you like to install?' + _W_cached="cached" + ;; + esac + + + case ${WINETRICKS_GUI} in + zenity) + case ${LANG} in + da*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Pakke \ + --column Navn \ + --column Udgiver \ + --column År \ + --column Medie \ + --column Status \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + de*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Paket \ + --column Name \ + --column Herausgeber \ + --column Jahr \ + --column Media \ + --column Status \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + pl*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Pakiet \ + --column Nazwa \ + --column Wydawca \ + --column Rok \ + --column Media \ + --column Status \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + pt*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Pacote \ + --column Título \ + --column Publisher \ + --column Ano \ + --column Mídia \ + --column Status \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + ru*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Пакет \ + --column Название \ + --column Издатель \ + --column Год \ + --column Источник \ + --column Статус \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + uk*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Пакунок \ + --column Назва \ + --column Видавець \ + --column Рік \ + --column Медіа \ + --column Статус \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + zh_CN*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column 包名 \ + --column 软件名 \ + --column 发行商 \ + --column 发行年 \ + --column 媒介 \ + --column 状态 \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + zh_TW*|zh_HK*) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column 包名 \ + --column 軟體名 \ + --column 發行商 \ + --column 發行年 \ + --column 媒介 \ + --column 狀態 \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + *) printf %s "zenity \ + --title '${_W_msg_title}' \ + --text '${_W_msg_body}' \ + --list \ + --checklist \ + --column '' \ + --column Package \ + --column Title \ + --column Publisher \ + --column Year \ + --column Media \ + --column Status \ + --height ${WINETRICKS_MENU_HEIGHT} \ + --width ${WINETRICKS_MENU_WIDTH} \ + " + ;; + esac > "${WINETRICKS_WORKDIR}"/zenity.sh + + true > "${WINETRICKS_WORKDIR}"/installed.txt + + for metadatafile in "${WINETRICKS_METADATA}/${WINETRICKS_CURMENU}"/*.vars; do + code=$(winetricks_metadata_basename "${metadatafile}") + ( + title='?' + # shellcheck disable=SC1090 + . "${metadatafile}" + # Compute cached and downloadable flags + flags="" + winetricks_is_cached "${code}" && flags="${_W_cached}" + installed=FALSE + if winetricks_is_installed "${code}"; then + installed=TRUE + echo "${code}" >> "${WINETRICKS_WORKDIR}"/installed.txt + fi + printf %s " ${installed} \ + ${code} \ + \"${title}\" \ + \"${publisher}\" \ + \"${year}\" \ + \"${media}\" \ + \"${flags}\" \ + " + ) + done >> "${WINETRICKS_WORKDIR}"/zenity.sh + + # Filter out any verb that's already installed + sh "${WINETRICKS_WORKDIR}"/zenity.sh | + tr '|' '\012' | + grep -F -v -x -f "${WINETRICKS_WORKDIR}"/installed.txt | + tr '\012' ' ' + ;; + + kdialog) + ( + printf %s "kdialog --geometry 600x400+100+100 --title '${_W_msg_title}' --separate-output --checklist '${_W_msg_body}' " + winetricks_list_all | sed 's/\([^ ]*\) *\(.*\)/\1 "\1 - \2" off /' | tr '\012' ' ' + ) > "${WINETRICKS_WORKDIR}"/kdialog.sh + + sh "${WINETRICKS_WORKDIR}"/kdialog.sh + ;; + esac + + unset _W_msg_body _W_msg_title +} + +# Converts a metadata absolute path to its app code +winetricks_metadata_basename() +{ + # Classic, but too slow on cygwin + #basename $1 .vars + + # first, remove suffix .vars + _W_mb_tmp="${1%.vars}" + # second, remove any directory prefix + echo "${_W_mb_tmp##*/}" + unset _W_mb_tmp +} + +# Returns true if given verb has been registered +winetricks_metadata_exists() +{ + test -f "${WINETRICKS_METADATA}"/*/"${1}.vars" +} + +# Returns true if given verb has been cached +# You must have already loaded its metadata before calling +winetricks_is_cached() +{ + # FIXME: also check file2... if given + # https://github.com/Winetricks/winetricks/issues/989 + # shellcheck disable=SC2154 + _W_path="${W_CACHE}/$1/${file1}" + case "${_W_path}" in + *..*) + # Remove /foo/.. so verbs that don't have their own cache directories + # can refer to siblings + _W_path="$(echo "${_W_path}" | sed 's,/[^/]*/\.\.,,')" + ;; + esac + + if test -f "${_W_path}"; then + unset _W_path + return "${TRUE}" + fi + + unset _W_path + return "${FALSE}" +} + +# Returns true if given verb has been installed +# You must have already loaded its metadata before calling +winetricks_is_installed() +{ + unset _W_file _W_file_unix + if test "${installed_exe1}"; then + _W_file="${installed_exe1}" + elif test "${installed_file1}"; then + _W_file="${installed_file1}" + else + return "${FALSE}" # not installed + fi + + # Test if the verb has been executed before + if ! grep -qw "$1" "${WINEPREFIX}/winetricks.log" 2>/dev/null; then + unset _W_file + return "${FALSE}" # not installed + fi + + case "${W_PLATFORM}" in + windows_cmd|wine_cmd) + # On Windows, there's no wineprefix, just check if file's there + _W_file_unix="$(w_pathconv -u "${_W_file}")" + if test -f "${_W_file_unix}"; then + unset _W_file _W_file_unix _W_prefix + return "${TRUE}" # installed + fi + ;; + *) + # Compute wineprefix for this app + case "${_W_category}-${WINETRICKS_OPT_SHAREDPREFIX}" in + apps-0|benchmarks-0|games-0) + _W_prefix="${W_PREFIXES_ROOT}/$1" + ;; + *) + _W_prefix="${WINEPREFIX}" + ;; + esac + if test -d "${_W_prefix}/dosdevices"; then + # 'win7 vcrun2005' creates different file than 'winxp vcrun2005' + # so let it specify multiple, separated by | + _W_IFS="${IFS}" + IFS='|' + for _W_file_ in ${_W_file}; do + _W_file_unix="$(WINEPREFIX="${_W_prefix}" w_pathconv -u "${_W_file_}")" + if test -f "${_W_file_unix}" && ! grep -q "Wine placeholder DLL" "${_W_file_unix}"; then + IFS="${_W_IFS}" + unset _W_file _W_file_ _W_file_unix _W_prefix _W_IFS + return "${TRUE}" # installed + fi + done + IFS="${_W_IFS}" + fi + ;; + esac + unset _W_file _W_prefix _W_IFS # leak _W_file_unix for caller. Is this wise? + return "${FALSE}" # not installed +} + +# List verbs which are already fully cached locally +winetricks_list_cached() +{ + for _W_metadatafile in "${WINETRICKS_METADATA}"/*/*.vars; do + # Use a subshell to avoid putting metadata in global space + # If this is too slow, we can unset known metadata by hand + ( + code=$(winetricks_metadata_basename "${_W_metadatafile}") + # shellcheck disable=SC1090 + . "${_W_metadatafile}" + if winetricks_is_cached "${code}"; then + echo "${code}" + fi + ) + done | sort + unset _W_metadatafile +} + +# List verbs which are automatically downloadable, regardless of whether they're cached yet +winetricks_list_download() +{ + # Piping output of w_try_cd to /dev/null since winetricks-test parses it: + w_try_cd "${WINETRICKS_METADATA}" >/dev/null + grep -l 'media=.download' ./*/*.vars | sed 's,.*/,,;s/\.vars//' | sort -u +} + +# List verbs which are downloadable with user intervention, regardless of whether they're cached yet +winetricks_list_manual_download() +{ + # Piping output of w_try_cd to /dev/null since winetricks-test parses it: + w_try_cd "${WINETRICKS_METADATA}" >/dev/null + grep -l 'media=.manual_download' ./*/*.vars | sed 's,.*/,,;s/\.vars//' | sort -u +} + +winetricks_list_installed() +{ + # Rather than check individual metadata/files (which is slow/brittle, and also breaks settings and metaverbs) + # just show winetricks.log (if it exists), which lists verbs in the order they were installed + if [ -f "${WINEPREFIX}/winetricks.log" ]; then + cat "${WINEPREFIX}/winetricks.log" + else + echo "warning: ${WINEPREFIX}/winetricks.log not found; winetricks has not installed anything in this prefix." + fi +} + +# Helper for adding a string to a list of flags +winetricks_append_to_flags() +{ + if test "${flags}"; then + flags="${flags}," + fi + flags="${flags}$1" +} + +# List all verbs in category WINETRICKS_CURMENU verbosely +# Format is "verb title (publisher, year) [flags]" +winetricks_list_all() +{ + # Note: doh123 relies on 'winetricks list' to list main menu categories + case ${WINETRICKS_CURMENU} in + prefix|main|mkprefix) echo "${WINETRICKS_CATEGORIES}" | sed 's/ mkprefix//' | tr ' ' '\012' ; return;; + esac + + case ${LANG} in + da*) _W_cached="cached" ; _W_download="kan hentes" ;; + de*) _W_cached="gecached" ; _W_download="herunterladbar";; + pl*) _W_cached="zarchiwizowane" ; _W_download="do pobrania" ;; + pt*) _W_cached="em cache" ; _W_download="para download" ;; + ru*) _W_cached="в кэше" ; _W_download="доступно для скачивания" ;; + uk*) _W_cached="кешовано" ; _W_download="завантажуване" ;; + zh_CN*) _W_cached="已缓存" ; _W_download="可下载" ;; + zh_TW*|zh_HK*) _W_cached="已緩存" ; _W_download="可下載" ;; + *) _W_cached="cached" ; _W_download="downloadable" ;; + esac + + for _W_metadatafile in "${WINETRICKS_METADATA}/${WINETRICKS_CURMENU}"/*.vars; do + # Use a subshell to avoid putting metadata in global space + # If this is too slow, we can unset known metadata by hand + ( + code=$(winetricks_metadata_basename "${_W_metadatafile}") + # shellcheck disable=SC1090 + . "${_W_metadatafile}" + + # Compute cached and downloadable flags + flags="" + test "${media}" = "download" && winetricks_append_to_flags "${_W_download}" + winetricks_is_cached "${code}" && winetricks_append_to_flags "${_W_cached}" + test "${flags}" && flags="[${flags}]" + + if ! test "${year}" && ! test "${publisher}"; then + printf "%-24s %s %s\\n" "${code}" "${title}" "${flags}" + else + printf "%-24s %s (%s, %s) %s\\n" "${code}" "${title}" "${publisher}" "${year}" "${flags}" + fi + ) + done + unset _W_cached _W_metadatafile +} + +# Abort if user doesn't own the given directory (or its parent, if it doesn't exist yet) +winetricks_die_if_user_not_dirowner() +{ + if test -d "$1"; then + _W_checkdir="$1" + else + # fixme: quoting problem? + _W_checkdir=$(dirname "$1") + fi + _W_nuser=$(id -u) + _W_nowner=$(stat -c '%u' "${_W_checkdir}") + if test x"${_W_nuser}" != x"${_W_nowner}"; then + w_die "You ($(id -un)) don't own ${_W_checkdir}. Don't run this tool as another user!" + fi +} + +# See +# https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf (iso9660) +# https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-167.pdf +# http://www.osta.org/specs/pdf/udf102.pdf +# https://www.ecma-international.org/publications/techreports/E-TR-071.htm + +# Usage: read_bytes offset count device +winetricks_read_bytes() +{ + dd status=noxfer if="$3" bs=1 skip="$1" count="$2" 2>/dev/null +} + +# Usage: read_hex offset count device +winetricks_read_hex() +{ + od -j "$1" -N "$2" -t x1 "$3" | # offset $1, count $2, single byte hex format, file $3 + sed 's/^[^ ]* //' | # remove address + sed '$d' # remove final line which is just final offset +} + +# Usage: read_decimal offset device +# Reads single four byte word, outputs in decimal. +# Uses default endianness. +# udf uses little endian words, so this only works on little endian machines. +winetricks_read_decimal() +{ + od -j "$1" -N 4 -t u4 "$2" | # offset $1, byte count 4, four byte decimal format, file $2 + sed 's/^[^ ]* //' | # remove address + sed '$d' # remove final line which is just final offset +} + +winetricks_read_udf_volume_name() +{ + # "Anchor volume descriptor pointer" starts at sector 256 + + # AVDP Layout (ECMA-167 3/10.2): + # size offset contents + # 16 0 descriptor tag (id = 2) + # 16 8 main (primary?) volume descriptor sequence extent + # ... + + # descriptor tag layout (ECMA-167 3/7.2): + # size offset contents + # 2 0 TagIdentifier + # ... + + # extent layout (ECMA-167 3/7.1): + # size offset contents + # 4 0 length (in bytes) + # 8 4 location (in 2k sectors) + + # primary volume descriptor layout (ECMA-167 3/10.1): + # size offset contents + # 16 0 descriptor tag (id = 1) + # ... + # 32 24 volume identifier (dstring) + + # 1. check the 16 bit TagIdentifier of the descriptor tag, make sure it's 2 + tagid=$(winetricks_read_hex 524288 2 "$1") + : echo "tagid is ${tagid}" + case "${tagid}" in + "02 00") : echo "Found AVDP" ;; + *) echo "Did not find AVDP (tagid was ${tagid})"; exit 1;; + esac + + # 2. read the location of the main volume descriptor: + offset=$(winetricks_read_decimal 524308 "$1") + : echo "MVD is at sector ${offset}" + offset=$((offset * 2048)) + : echo "MVD is at byte ${offset}" + + # 3. check the TagIdentifier of the MVD's descriptor tag, make sure it's 1 + tagid=$(winetricks_read_hex ${offset} 2 "$1") + : echo "tagid is ${tagid}" + case "${tagid}" in + "01 00") : echo Found MVD ;; + *) echo Did not find MVD; exit 1;; + esac + + # 4. Read whether the name is in 8 or 16 bit chars + offset=$((offset + 24)) + width=$(winetricks_read_hex ${offset} 1 "$1") + + offset=$((offset + 1)) + + # 5. Profit! + case ${width} in + 08) winetricks_read_bytes ${offset} 30 "$1" | sed 's/ *$//' ;; + 10) winetricks_read_bytes ${offset} 30 "$1" | tr -d '\000' | sed 's/ *$//' ;; + *) echo "Unhandled dvd volname character width '${width}'"; exit 1;; + esac + + echo "" +} + +winetricks_read_iso9660_volume_name() +{ + winetricks_read_bytes 32808 30 "$1" | sed 's/ *$//' +} + +winetricks_read_volume_name() +{ + # ECMA-119 says that CD-ROMs have sector size 2k, and at sector 16 have: + # size offset contents + # 1 0 Volume descriptor type (1 for primary volume descriptor) + # 5 1 Standard identifier ("CD001" for iso9660) + # ECMA-167, section 9.1.2, has a table of standard identifiers: + # "BEA01": ecma-167 9.2, Beginning Extended Area Descriptor + # "CD001": ecma-119 + # "CDW02": ecma-168 + + std_id=$(winetricks_read_bytes 32769 5 "$1") + : echo "std_id is ${std_id}" + + case ${std_id} in + CD001) winetricks_read_iso9660_volume_name "$1" ;; + BEA01) winetricks_read_udf_volume_name "$1" ;; + *) echo "Unrecognized disk type ${std_id}"; exit 1 ;; + esac +} + +winetricks_volname() +{ + x=$(volname "$1" 2> /dev/null| sed 's/ *$//') + if test -z "${x}"; then + # UDF? See https://bugs.launchpad.net/bugs/678419 + x=$(winetricks_read_volume_name "$1") + fi + echo "${x}" +} + +# Really, should take a volume name as argument, and use 'mount' to get +# mount point if system automounted it. +winetricks_detect_optical_drive() +{ + case "${WINETRICKS_DEV}" in + "") ;; + *) return ;; + esac + + for WINETRICKS_DEV in /dev/cdrom /dev/dvd /dev/sr0; do + test -b ${WINETRICKS_DEV} && break + done + + case "${WINETRICKS_DEV}" in + "x") w_die "can't find cd/dvd drive" ;; + esac +} + +winetricks_cache_iso() +{ + # WINETRICKS_IMG has already been set by w_mount + _W_expected_volname="$1" + + winetricks_die_if_user_not_dirowner "${W_CACHE}" + winetricks_detect_optical_drive + + # Horrible hack for Gentoo - make sure we can read from the drive + if ! test -r ${WINETRICKS_DEV}; then + case "${WINETRICKS_SUDO}" in + gksu*|kdesudo) ${WINETRICKS_SUDO} "chmod 666 ${WINETRICKS_DEV}" ;; + kdesu) ${WINETRICKS_SUDO} -c "chmod 666 ${WINETRICKS_DEV}" ;; + *) ${WINETRICKS_SUDO} chmod 666 ${WINETRICKS_DEV} ;; + esac + fi + + while true; do + # Wait for user to insert disc. + # Sleep long to make it less likely to close the drive during insertion. + while ! dd if=${WINETRICKS_DEV} of=/dev/null count=1; do + sleep 5 + done + + # Some distributions automount discs in /media, take advantage of that + if test -d "/media/_W_expected_volname"; then + break + fi + # Otherwise try and read it straight from unmounted volume + _W_volname=$(winetricks_volname ${WINETRICKS_DEV}) + if test "${_W_expected_volname}" != "${_W_volname}"; then + case ${LANG} in + da*) w_warn "Forkert disk [${_W_volname}] indsat. Indsæt venligst disken [${_W_expected_volname}]" ;; + de*) w_warn "Falsche Disk [${_W_volname}] eingelegt. Bitte legen Sie Disk [${_W_expected_volname}] ein!" ;; + pl*) w_warn "Umieszczono zły dysk [${_W_volname}]. Proszę włożyć dysk [${_W_expected_volname}]" ;; + pt*) w_warn "Disco errado [${_W_volname}] inserido. Por favor insira o disco [${_W_expected_volname}]" ;; + ru*) w_warn "Неверный диск [${_W_volname}]. Пожалуйста, вставьте диск [${_W_expected_volname}]" ;; + uk*) w_warn "Неправильний диск [${_W_volname}]. Будь ласка, вставте диск [${_W_expected_volname}]" ;; + zh_CN*) w_warn " [${_W_volname}] 光盘插入错误,请插入光盘 [${_W_expected_volname}]" ;; + zh_TW*|zh_HK*) w_warn " [${_W_volname}] 光碟插入錯誤,請插入光碟 [${_W_expected_volname}]" ;; + *) w_warn "Wrong disc [${_W_volname}] inserted. Please insert disc [${_W_expected_volname}]" ;; + esac + + sleep 10 + else + break + fi + done + + # Copy disc to .iso file, display progress every 5 seconds + # Use conv=noerror,sync to replace unreadable blocks with zeroes + case ${WINETRICKS_OPT_DD} in + dd) + ${WINETRICKS_OPT_DD} if=${WINETRICKS_DEV} of="${W_CACHE}"/temp.iso bs=2048 conv=noerror,sync & + WINETRICKS_DD_PID=$! + ;; + ddrescue) + if [ ! -x "$(command -v ddrescue)" ]; then + w_die "Please install ddrescue first." + fi + ${WINETRICKS_OPT_DD} -v -b 2048 ${WINETRICKS_DEV} "${W_CACHE}"/temp.iso & + WINETRICKS_DD_PID=$! + ;; + esac + + echo "${WINETRICKS_DD_PID}" > "${WINETRICKS_WORKDIR}"/dd-pid + + # Note: if user presses ^C, winetricks_cleanup will call winetricks_iso_cleanup + # FIXME: add progress bar for kde, too + case ${WINETRICKS_GUI} in + none|kdialog) + while ps -p "${WINETRICKS_DD_PID}" > /dev/null 2>&1; do + sleep 5 + ls -l "${W_CACHE}"/temp.iso + done + ;; + zenity) + while ps -p "${WINETRICKS_DD_PID}" > /dev/null 2>&1; do + echo 1 + sleep 2 + done | ${WINETRICKS_GUI} --title "Copying to ${_W_expected_volname}.iso" --progress --pulsate --auto-kill + ;; + esac + rm "${WINETRICKS_WORKDIR}"/dd-pid + + mv "${W_CACHE}"/temp.iso "${WINETRICKS_IMG}" + + eject ${WINETRICKS_DEV} || true # punt if eject not found (as on cygwin) +} + +winetricks_load_vcdmount() +{ + if test "${WINE}" != ""; then + return + fi + + # Call only on real Windows. + # Sets VCD_DIR and W_ISO_MOUNT_ROOT + + # The only free mount tool I know for Windows Vista is Virtual CloneDrive, + # which can be downloaded at + # http://www.slysoft.com/en/virtual-clonedrive.html + # FIXME: actually install it here + + # Locate vcdmount.exe. + VCD_DIR="Elaborate Bytes/VirtualCloneDrive" + if test ! -x "${W_PROGRAMS_UNIX}/${VCD_DIR}/vcdmount.exe" && test ! -x "${W_PROGRAMS_X86_UNIX}/${VCD_DIR}/vcdmount.exe"; then + w_warn "Installing Virtual CloneDrive" + w_download_to vcd http://static.slysoft.com/SetupVirtualCloneDrive.exe + # have to use cmd else vista won't let cygwin run .exe's? + chmod +x "${W_CACHE}"/vcd/SetupVirtualCloneDrive.exe + w_try_cd "${W_CACHE}/vcd" + cmd /c SetupVirtualCloneDrive.exe + fi + if test -x "${W_PROGRAMS_UNIX}/${VCD_DIR}/vcdmount.exe"; then + VCD_DIR="${W_PROGRAMS_UNIX}/${VCD_DIR}" + elif test -x "${W_PROGRAMS_X86_UNIX}/${VCD_DIR}/vcdmount.exe"; then + VCD_DIR="${W_PROGRAMS_X86_UNIX}/${VCD_DIR}" + else + w_die "can't find Virtual CloneDrive?" + fi + # FIXME: Use WMI to locate the drive named + # "ELBY CLONEDRIVE..." using WMI as described in + # https://delphihaven.wordpress.com/2009/07/05/using-wmi-to-get-a-drive-friendly-name/ +} + +winetricks_mount_cached_iso() +{ + # On entry, WINETRICKS_IMG is already set + w_umount + + if test "${WINE}" = ""; then + winetricks_load_vcdmount + my_img_win="$(w_pathconv -w "${WINETRICKS_IMG}" | tr '\012' ' ' | sed 's/ $//')" + w_try_cd "${VCD_DIR}" + w_try vcdmount.exe /l="${letter}" "${my_img_win}" + + tries=0 + while test ${tries} -lt 20; do + for W_ISO_MOUNT_LETTER in e f g h i j k; do + # let user blacklist drive letters + echo "${WINETRICKS_MOUNT_LETTER_IGNORE}" | grep -q "${W_ISO_MOUNT_LETTER}" && continue + W_ISO_MOUNT_ROOT=/cygdrive/${W_ISO_MOUNT_LETTER} + if find ${W_ISO_MOUNT_ROOT} -iname 'setup*' -o -iname '*.exe' -o -iname '*.msi'; then + break 2 + fi + done + tries=$((tries + 1)) + echo "Waiting for mount to finish mounting" + sleep 1 + done + else + if test "${W_USE_USERMOUNT}"; then + # Linux (FUSE-based tools), macOS (hdiutil) + if test "${WINETRICKS_ISO_MOUNT}" = "none"; then + # If no tools found, fall back to sudo + mount + w_warn "No user mount tools detected, using sudo + mount" + unset W_USE_USERMOUNT + winetricks_mount_cached_iso + return + fi + echo "Running mkdir -p ${W_ISO_USER_MOUNT_ROOT}" + mkdir -p "${W_ISO_USER_MOUNT_ROOT}" + if test $? -ne 0; then + w_warn "mkdir -p ${W_ISO_USER_MOUNT_ROOT} failed, falling back to sudo + mount" + unset W_USE_USERMOUNT + winetricks_mount_cached_iso + return + fi + case "${WINETRICKS_ISO_MOUNT}" in + fuseiso) + echo "Running ${WINETRICKS_ISO_MOUNT} ${WINETRICKS_IMG} ${W_ISO_USER_MOUNT_ROOT}" + ${WINETRICKS_ISO_MOUNT} "${WINETRICKS_IMG}" "${W_ISO_USER_MOUNT_ROOT}" + ;; + archivemount) + echo "Running ${WINETRICKS_ISO_MOUNT} ${WINETRICKS_IMG} ${W_ISO_USER_MOUNT_ROOT} -o readonly" + ${WINETRICKS_ISO_MOUNT} "${WINETRICKS_IMG}" "${W_ISO_USER_MOUNT_ROOT}" -o readonly + ;; + hdiutil) + echo "Running ${WINETRICKS_ISO_MOUNT} attach -mountpoint ${W_ISO_USER_MOUNT_ROOT} ${WINETRICKS_IMG}" + ${WINETRICKS_ISO_MOUNT} attach -mountpoint "${W_ISO_USER_MOUNT_ROOT}" "${WINETRICKS_IMG}" + ;; + *) + w_warn "Unknown ISO mount tool ${WINETRICKS_ISO_MOUNT}, using sudo + mount" + unset W_USE_USERMOUNT + winetricks_mount_cached_iso + return + ;; + esac + if test $? -ne 0; then + w_warn "${WINETRICKS_ISO_MOUNT} failed, falling back to sudo + mount" + unset W_USE_USERMOUNT + winetricks_mount_cached_iso + return + fi + + echo "Mounting as drive ${W_ISO_MOUNT_LETTER}:" + # Gotta provide a symlink to the raw disc, else installers that check volume names will fail + rm -f "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:"* + ln -sf "${WINETRICKS_IMG}" "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}::" + ln -sf "${W_ISO_USER_MOUNT_ROOT}" "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:" + # Gotta set the type to "cdrom", else "wine eject" will fail + cat > "${W_TMP}"/set_type_cdrom.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Wine\\Drives] +"${W_ISO_MOUNT_LETTER}:"="cdrom" +_EOF_ + w_try_regedit "${W_TMP}"/set_type_cdrom.reg + # The new drive is not recognized without waiting + # FIXME: not sure if the duration is appropriate + sleep 5 + + W_ISO_MOUNT_ROOT="${W_ISO_USER_MOUNT_ROOT}" + else + # Linux (sudo + mount) + _W_USERID=$(id -u) + # WINETRICKS_IMG may contain spaces and needs to be quoted + case "${WINETRICKS_SUDO}" in + gksu*|kdesudo) + w_try ${WINETRICKS_SUDO} "mkdir -p ${W_ISO_MOUNT_ROOT}" + w_try ${WINETRICKS_SUDO} "mount -o ro,loop,uid=${_W_USERID},unhide '${WINETRICKS_IMG}' ${W_ISO_MOUNT_ROOT}" + ;; + kdesu) + w_try ${WINETRICKS_SUDO} -c "mkdir -p ${W_ISO_MOUNT_ROOT}" + w_try ${WINETRICKS_SUDO} -c "mount -o ro,loop,uid=${_W_USERID},unhide '${WINETRICKS_IMG}' ${W_ISO_MOUNT_ROOT}" + ;; + *) + w_try ${WINETRICKS_SUDO} mkdir -p "${W_ISO_MOUNT_ROOT}" + w_try ${WINETRICKS_SUDO} mount -o ro,loop,uid="${_W_USERID}",unhide "${WINETRICKS_IMG}" "${W_ISO_MOUNT_ROOT}" + ;; + esac + + echo "Mounting as drive ${W_ISO_MOUNT_LETTER}:" + # Gotta provide a symlink to the raw disc, else installers that check volume names will fail + rm -f "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:"* + ln -sf "${WINETRICKS_IMG}" "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}::" + ln -sf "${W_ISO_MOUNT_ROOT}" "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:" + unset _W_USERID + fi + fi +} + +# List the currently mounted UDF or iso9660 filesystems that match the given pattern +# Output format: +# dev mountpoint +# dev mountpoint +# ... +# Mount points may contain spaces. + +winetricks_list_mounts() +{ + mount | grep -E 'udf|iso9660' | sed 's,^\([^ ]*\) on \(.*\) type .*,\1 \2,'| grep "$1\$" +} + +# Return success and set _W_dev _W_mountpoint if volume $1 is mounted +# Note: setting variables as a way of returning results from a +# shell function exposed several bugs in most shells (except ksh!) +# related to implicit subshells. It would be better to output +# one string to stdout instead. +winetricks_is_mounted() +{ + # First, check for matching mountpoint + _W_tmp="$(winetricks_list_mounts "$1")" + if test "${_W_tmp}"; then + _W_dev=$(echo "${_W_tmp}" | sed 's/ .*//') + _W_mountpoint="$(echo "${_W_tmp}" | sed 's/^[^ ]* //')" + # Volume found! + return "${TRUE}" + fi + + # If that fails, read volume name the hard way for each volume + # Have to use file to return results from implicit subshell + rm -f "${W_TMP_EARLY}/_W_tmp.${LOGNAME}" + winetricks_list_mounts . | while true; do + IFS= read -r _W_tmp + + _W_dev=$(echo "${_W_tmp}" | sed 's/ .*//') + test "${_W_dev}" || break + _W_mountpoint="$(echo "${_W_tmp}" | sed 's/^[^ ]* //')" + _W_volname=$(winetricks_volname "${_W_dev}") + if test "$1" = "${_W_volname}"; then + # Volume found! Want to return from function here, but can't + echo "${_W_tmp}" > "${W_TMP_EARLY}/_W_tmp.${LOGNAME}" + break + fi + done + + if test -f "${W_TMP_EARLY}/_W_tmp.${LOGNAME}"; then + # Volume found! Return from function. + _W_dev=$(sed 's/ .*//' "${W_TMP_EARLY}/_W_tmp.${LOGNAME}") + _W_mountpoint="$(sed 's/^[^ ]* //' "${W_TMP_EARLY}/_W_tmp.${LOGNAME}")" + rm -f "${W_TMP_EARLY}/_W_tmp.${LOGNAME}" + return "${TRUE}" + fi + + # Volume not found + unset _W_dev _W_mountpoint _W_volname + return "${FALSE}" +} + +winetricks_mount_real_volume() +{ + _W_expected_volname="$1" + + # Wait for user to insert disc. + + case ${LANG} in + da*)_W_mountmsg="Indsæt venligst disken '${_W_expected_volname}' (krævet af pakken '${W_PACKAGE}')" ;; + de*)_W_mountmsg="Bitte Disk '${_W_expected_volname}' einlegen (für Paket '${W_PACKAGE}')" ;; + pl*) _W_mountmsg="Proszę włożyć dysk '${_W_expected_volname}' (potrzebny paczce '${W_PACKAGE}')" ;; + pt*) _W_mountmsg="Por favor insira o volume '${_W_expected_volname}' (necessário para o pacote '${W_PACKAGE}')" ;; + ru*) _W_mountmsg="Пожалуйста, вставьте том '${_W_expected_volname}' (требуется для пакета '${W_PACKAGE}')" ;; + uk*) _W_mountmsg="Будь ласка, вставте том '${_W_expected_volname}' (потрібний для пакунка '${W_PACKAGE}')" ;; + zh_CN*) _W_mountmsg="请插入卷 '${_W_expected_volname}' (为包 '${W_PACKAGE} 所需')" ;; + zh_TW*|zh_HK*) _W_mountmsg="請插入卷 '${_W_expected_volname}' (為包 '${W_PACKAGE} 所需')" ;; + *) _W_mountmsg="Please insert volume '${_W_expected_volname}' (needed for package '${W_PACKAGE}')" ;; + esac + + if test "${WINE}" = ""; then + # Assume already mounted, just get drive letter + W_ISO_MOUNT_LETTER=$(awk '/iso/ {print $1}' < /proc/mounts | tr -d :) + W_ISO_MOUNT_ROOT=$(awk '/iso/ {print $2}' < /proc/mounts) + else + while ! winetricks_is_mounted "${_W_expected_volname}"; do + w_try w_warn_cancel "${_W_mountmsg}" + # In non-gui case, give user two seconds to futz with disc drive before spamming him again + sleep 2 + done + WINETRICKS_DEV=${_W_dev} + W_ISO_MOUNT_ROOT="${_W_mountpoint}" + + # Gotta provide a symlink to the raw disc, else installers that check volume names will fail + rm -f "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:"* + ln -sf "${WINETRICKS_DEV}" "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}::" + ln -sf "${W_ISO_MOUNT_ROOT}" "${WINEPREFIX}/dosdevices/${W_ISO_MOUNT_LETTER}:" + fi + + # FIXME: need to remount some discs with unhide option, + # add that as option to w_mount + + unset _W_mountmsg +} + +winetricks_cleanup() +{ + # We don't want to run this multiple times, so unfortunately we have to run it here: + if test "${W_NGEN_CMD}"; then + "${W_NGEN_CMD}" + fi + + set +e + if test -f "${WINETRICKS_WORKDIR}/dd-pid"; then + # shellcheck disable=SC2046 + kill $(cat "${WINETRICKS_WORKDIR}/dd-pid") + fi + test "${WINETRICKS_CACHE_SYMLINK}" && rm -f "${WINETRICKS_CACHE_SYMLINK}" + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${WINETRICKS_WORKDIR}" + # if $W_TMP_EARLY was created by mktemp, remove it (but not if W_OPT_NOCLEAN is set to 1): + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${W_TMP_EARLY}" + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${WINEPREFIX}"/wrapper.cfg +} + +winetricks_set_unattended() +{ + case "$1" in + 1) W_OPT_UNATTENDED=1;; + *) unset W_OPT_UNATTENDED;; + esac +} + +# Usage: winetricks_print_wineprefix_info +# Print some useful info about $WINEPREFIX if things fail in winetricks_set_wineprefix() +winetricks_print_wineprefix_info() +{ + printf "WINEPREFIX INFO:\\n" + printf "Drive C: %s\\n\\n" "$(ls -al1 "${WINEPREFIX}/drive_c")" + printf "Registry info:\\n" + for regfile in "${WINEPREFIX}"/*.reg; do + printf "%s:%s\\n" "${regfile}" "$(grep '#arch=' "${regfile}")" + done +} + +# Force creation of 32 or 64bit wineprefix on 64 bit systems. +# On 32bit systems, trying to create a 64bit wineprefix will fail. +# This must be called prior to winetricks_set_wineprefix() +winetricks_set_winearch() +{ + if [ "$1" = "32" ] || [ "$1" = "win32" ]; then + export WINEARCH=win32 + elif [ "$1" = "64" ] || [ "$1" = "win64" ]; then + export WINEARCH=win64 + else + w_die "arch: Invalid architecture: $1" + fi +} + +# Usage: winetricks_set_wineprefix [bottlename] +# Bottlename must not contain spaces, slashes, or other special characters +# If bottlename is omitted, the default bottle (~/.wine) is used. +# +# shellcheck disable=SC2034 +winetricks_set_wineprefix() +{ + # Note: these are arch independent, but are needed by some arch dependent variables + # Defining here to avoid having two arch checks: + if ! test "$1"; then + WINEPREFIX="${WINETRICKS_ORIGINAL_WINEPREFIX}" + else + WINEPREFIX="${W_PREFIXES_ROOT}/$1" + fi + + export WINEPREFIX + w_try mkdir -p "$(dirname "${WINEPREFIX}")" + + case "${W_PLATFORM}" in + windows_cmd) + W_DRIVE_C="/cygdrive/c" ;; + *) + W_DRIVE_C="${WINEPREFIX}/dosdevices/c:" ;; + esac + W_WINDIR_UNIX="${W_DRIVE_C}/windows" + + if [ ! -d "${WINEPREFIX}" ] && [ -n "${WINEARCH}" ]; then + w_info "Creating WINEPREFIX \"${WINEPREFIX}\" with WINEARCH=${WINEARCH}" + "${WINE}" wineboot + # apparently wineboot doesn't wait for the prefix to be ready + # (to reproduce, run 'wine wineboot ; ls ~/.wine' it will often return before the .reg files are present + "${WINESERVER}" -w + fi + + # Make sure the prefix is initialized: + w_try winetricks_early_wine cmd /c "echo init" > /dev/null 2>&1 + + # Win(e) 32/64? + # Using the variable W_SYSTEM32_DLLS instead of SYSTEM32 because some stuff does go under system32 for both arch's + # e.g., spool/drivers/color + if test -d "${W_DRIVE_C}/windows/syswow64"; then + # Probably need fancier handling/checking, but for a basic start: + # Note 'wine' may be named 'wine-stable'/'wine-staging'/etc.): + # WINE64 = wine64, available on 64-bit prefixes + # WINE_ARCH = the native wine for the prefix (wine for 32-bit, wine64 for 64-bit) + # WINE_MULTI = generic wine, new name + if [ -n "${WINE64}" ]; then + true + elif [ "${WINE%??}64" = "${WINE}" ]; then + WINE64="${WINE}" + elif command -v "${WINE}64" >/dev/null 2>&1; then + WINE64="${WINE}64" + else + # Handle case where wine binaries (or binary wrappers) have a suffix + WINE64="$(dirname "${WINE}")/" + [ "${WINE64}" = "./" ] && WINE64="" + WINE64="${WINE64}$(basename "${WINE}" | sed 's/^wine/wine64/')" + fi + WINE_ARCH="${WINE64}" + WINE_MULTI="${WINE}" + W_ARCH=win64 + + W_PROGRAMS_WIN="$(w_expand_env ProgramFiles)" + W_PROGRAMS_UNIX="$(w_pathconv -u "${W_PROGRAMS_WIN}")" + + # Common variable for 32-bit dlls on win32/win64: + W_SYSTEM32_DLLS="${W_WINDIR_UNIX}/syswow64" + W_SYSTEM32_DLLS_WIN="C:\\windows\\syswow64" + + W_SYSTEM64_DLLS="${W_WINDIR_UNIX}/system32" + W_SYSTEM64_DLLS_WIN32="C:\\windows\\sysnative" # path to access 64-bit dlls from 32-bit apps + W_SYSTEM64_DLLS_WIN64="C:\\windows\\system32" # path to access 64-bit dlls from 64-bit apps + + # There's also ProgramW6432, which =%ProgramFiles%(but only available when running under a 64 bit OS) + # See https://ss64.com/nt/syntax-variables.html + W_PROGRAMW6432_WIN="$(w_expand_env ProgramW6432)" + W_PROGRAMW6432_UNIX="$(w_pathconv -u "${W_PROGRAMW6432_WIN}")" + + # 64-bit Windows has a second directory for program files + W_PROGRAMS_X86_WIN="${W_PROGRAMS_WIN} (x86)" + W_PROGRAMS_X86_UNIX="${W_PROGRAMS_UNIX} (x86)" + + W_COMMONFILES_X86_WIN="$(w_expand_env CommonProgramFiles\(x86\))" + W_COMMONFILES_X86="$(w_pathconv -u "${W_COMMONFILES_X86_WIN}")" + W_COMMONFILES_WIN="$(w_expand_env CommonProgramW6432)" + W_COMMONFILES="$(w_pathconv -u "${W_COMMONFILES_WIN}")" + + # 64-bit prefixes still have plenty of issues: + case ${LANG} in + ru*) w_warn "Вы используете 64-битный WINEPREFIX. Важно: многие ветки устанавливают только 32-битные версии пакетов. Если у вас возникли проблемы, пожалуйста, проверьте еще раз на чистом 32-битном WINEPREFIX до отправки отчета об ошибке." ;; + pt*) w_warn "Você está usando um WINEPREFIX de 64-bit. Observe que muitos casos instalam apenas versões de pacotes de 32-bit. Se você encontrar problemas, teste novamente em um WINEPREFIX limpo de 32-bit antes de relatar um bug." ;; + *) w_warn "You are using a 64-bit WINEPREFIX. Note that many verbs only install 32-bit versions of packages. If you encounter problems, please retest in a clean 32-bit WINEPREFIX before reporting a bug." ;; + esac + else + WINE64="false" + WINE_ARCH="${WINE}" + WINE_MULTI="${WINE}" + W_ARCH=win32 + + W_PROGRAMS_WIN="$(w_expand_env ProgramFiles)" + W_PROGRAMS_UNIX="$(w_pathconv -u "${W_PROGRAMS_WIN}")" + + # Common variable for 32-bit dlls on win32/win64: + W_SYSTEM32_DLLS="${W_WINDIR_UNIX}/system32" + W_SYSTEM32_DLLS_WIN="C:\\windows\\system32" + + # These don't exist on win32, but are defined in case they are used on 32-bit. + # W_SYSTEM64_DLLS_WIN64 in particular is needed by w_metadata() + W_SYSTEM64_DLLS="/dev/null" + W_SYSTEM64_DLLS_WIN32="C:\\does-not-exist-on-win32" # path to access 64-bit dlls from 32-bit apps + W_SYSTEM64_DLLS_WIN64="C:\\does-not-exist-on-win32" # path to access 64-bit dlls from 64-bit apps + + W_PROGRAMS_X86_WIN="${W_PROGRAMS_WIN}" + W_PROGRAMS_X86_UNIX="${W_PROGRAMS_UNIX}" + + W_COMMONFILES_X86_WIN="$(w_expand_env CommonProgramFiles)" + W_COMMONFILES_X86="$(w_pathconv -u "${W_COMMONFILES_X86_WIN}")" + W_COMMONFILES_WIN="$(w_expand_env CommonProgramFiles)" + W_COMMONFILES="$(w_pathconv -u "${W_COMMONFILES_WIN}")" + fi + + ## Arch independent variables: + + # Note: using AppData since it's arch indepedent + W_APPDATA_WIN="$(w_expand_env AppData)" + W_APPDATA_UNIX="$(w_pathconv -u "${W_APPDATA_WIN}")" + + case "${W_APPDATA_WIN}" in + "") w_info "$(winetricks_print_wineprefix_info)" ; w_die "${WINE} cmd.exe /c echo '%AppData%' returned empty string, error message \"$(cat ${W_TMP_EARLY}/early_wine.err.txt)\" ";; + %*) w_info "$(winetricks_print_wineprefix_info)" ; w_die "${WINE} cmd.exe /c echo '%AppData%' returned unexpanded string '${W_PROGRAMS_WIN}' ... this can be caused by a corrupt wineprefix (\`wineboot -u\` may help), by an old wine, or by not owning ${WINEPREFIX}" ;; + esac + + # Kludge: use Temp instead of temp to avoid \t expansion in w_try + # but use temp in Unix path because that's what Wine creates, and having both temp and Temp + # causes confusion (e.g. makes vc2005trial fail) + if ! test "$1"; then + W_TMP="${W_DRIVE_C}/windows/temp" + W_TMP_WIN="C:\\windows\\Temp" + else + # Verbs can rely on W_TMP being empty at entry, deleted after return, and a subdir of C: + W_TMP="${W_DRIVE_C}/windows/temp/_$1" + W_TMP_WIN="C:\\windows\\Temp\\_$1" + fi + + case "${W_PLATFORM}" in + "windows_cmd|wine_cmd") W_CACHE_WIN="$(w_pathconv -w "${W_CACHE}")" ;; + *) + # For case where Z: doesn't exist or / is writable (!), + # make a drive letter for W_CACHE. Clean it up on exit. + test "${WINETRICKS_CACHE_SYMLINK}" && rm -f "${WINETRICKS_CACHE_SYMLINK}" + for letter in y x w v u t s r q p o n m; do + if ! test -d "${WINEPREFIX}"/dosdevices/${letter}:; then + mkdir -p "${WINEPREFIX}"/dosdevices + WINETRICKS_CACHE_SYMLINK="${WINEPREFIX}"/dosdevices/${letter}: + ln -sf "${W_CACHE}" "${WINETRICKS_CACHE_SYMLINK}" + break + fi + done + W_CACHE_WIN="${letter}:" + ;; + esac + + W_WINDIR_UNIX="${W_DRIVE_C}/windows" + + # FIXME: get fonts path from SHGetFolderPath + # See also https://blogs.msdn.microsoft.com/oldnewthing/20031103-00/?p=41973/ + W_FONTSDIR_WIN="c:\\windows\\Fonts" + + # FIXME: just convert path from Windows to Unix? + # Did the user rename Fonts to fonts? + if test ! -d "${W_WINDIR_UNIX}"/Fonts && test -d "${W_WINDIR_UNIX}"/fonts; then + W_FONTSDIR_UNIX="${W_WINDIR_UNIX}"/fonts + else + W_FONTSDIR_UNIX="${W_WINDIR_UNIX}"/Fonts + fi + mkdir -p "${W_FONTSDIR_UNIX}" + + + # Unset WINEARCH which might be set from winetricks_set_winearch(). + # It is no longer necessary after the new wineprefix was created + # and even may cause trouble when using 64bit wineprefixes afterwards. + unset WINEARCH +} + +winetricks_annihilate_wineprefix() +{ + w_skip_windows "No wineprefix to delete on windows" && return + + case ${LANG} in + uk*) w_askpermission "Бажаєте видалити '${WINEPREFIX}'?" ;; + pl*) w_askpermission "Czy na pewno chcesz usunąć prefiks ${WINEPREFIX} i wszystkie jego elementy?" ;; + pt*) w_askpermission "Apagar ${WINEPREFIX}, Estes apps, ícones e ítens do menu?" ;; + *) w_askpermission "Delete ${WINEPREFIX}, its apps, icons, and menu items?" ;; + esac + + rm -rf "${WINEPREFIX}" + + # Also remove menu items. + find "${XDG_DATA_HOME}/applications" -type f -name '*.desktop' -exec grep -q -l "${WINEPREFIX}" '{}' ';' -exec rm '{}' ';' + + # Also remove desktop items. + # Desktop might be synonym for home directory, so only go one level + # deep to avoid extreme slowdown if user has lots of files + ( + if ! test "${XDG_DESKTOP_DIR}" && test -f "${XDG_CONFIG_HOME}/user-dirs.dirs"; then + # shellcheck disable=SC1090,SC1091 + . "${XDG_CONFIG_HOME}/user-dirs.dirs" + fi + find "${XDG_DESKTOP_DIR}" -maxdepth 1 -type f -name '*.desktop' -exec grep -q -l "${WINEPREFIX}" '{}' ';' -exec rm '{}' ';' + ) + + # FIXME: recover more nicely. At moment, have to restart to avoid trouble. + exit 0 +} + +winetricks_init() +{ + #---- Private Variables ---- + + if ! test "${USERNAME}"; then + # Posix only requires LOGNAME to be defined, and sure enough, when + # logging in via console and startx in Ubuntu 11.04, USERNAME isn't set! + # And even normal logins in Ubuntu 13.04 doesn't set it. + # I tried using only LOGNAME in this script, but it's so easy to slip + # and use USERNAME, so define it here if needed. + USERNAME="${LOGNAME}" + fi + + # Running Wine as root is (generally) bad, mmkay? + if [ "$(id -u)" = 0 ]; then + w_warn "Running Wine/winetricks as root is highly discouraged. See https://wiki.winehq.org/FAQ#Should_I_run_Wine_as_root.3F" + fi + + # Ephemeral files for this run + WINETRICKS_WORKDIR="${W_TMP_EARLY}/w.${LOGNAME}.$$" + test "${W_OPT_NOCLEAN}" = 1 || rm -rf "${WINETRICKS_WORKDIR}" + + # Registering a verb creates a file in WINETRICKS_METADATA + WINETRICKS_METADATA="${WINETRICKS_WORKDIR}/metadata" + + # The list of categories is also hardcoded in winetricks_mainmenu() :-( + WINETRICKS_CATEGORIES="apps benchmarks dlls fonts games settings mkprefix" + for _W_cat in ${WINETRICKS_CATEGORIES}; do + mkdir -p "${WINETRICKS_METADATA}/${_W_cat}" + done + + # Which subdirectory of WINETRICKS_METADATA is currently active (or main, if none) + WINETRICKS_CURMENU=prefix + + # Delete work directory after each run, on exit either graceful or abrupt + trap winetricks_cleanup EXIT HUP INT QUIT ABRT + + # Whether to always cache cached iso's (1) or only use cache if present (0) + # Can be inherited from environment or set via -k, defaults to off + WINETRICKS_OPT_KEEPISOS=${WINETRICKS_OPT_KEEPISOS:-0} + + # what program to use to make disc image (dd or ddrescue) + WINETRICKS_OPT_DD=${WINETRICKS_OPT_DD:-dd} + + # whether to use shared wineprefix (1) or unique wineprefix for each app (0) + WINETRICKS_OPT_SHAREDPREFIX=${WINETRICKS_OPT_SHAREDPREFIX:-0} + + winetricks_get_sha256sum_prog + + winetricks_get_platform + + # Workaround SIP DYLD_stripping + # See https://support.apple.com/en-us/HT204899 + if [ -n "${WINETRICKS_FALLBACK_LIBRARY_PATH}" ]; then + export DYLD_FALLBACK_LIBRARY_PATH="${WINETRICKS_FALLBACK_LIBRARY_PATH}" + fi + + #---- Public Variables ---- + + # Where application installers are cached + # See https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html + # OSX: https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/MacOSXDirectories/MacOSXDirectories.html + + if test -d "${HOME}/Library"; then + # OS X + XDG_CACHE_HOME="${XDG_CACHE_HOME:-${HOME}/Library/Caches}" + XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME}/Library/Preferences}" + else + XDG_CACHE_HOME="${XDG_CACHE_HOME:-${HOME}/.cache}" + XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME}/.config}" + fi + + # shellcheck disable=SC2153 + if test "${WINETRICKS_DIR}"; then + # For backwards compatibility + W_CACHE="${W_CACHE:-${WINETRICKS_DIR}/cache}" + WINETRICKS_POST="${WINETRICKS_POST:-${WINETRICKS_DIR}/postinstall}" + else + W_CACHE="${W_CACHE:-${XDG_CACHE_HOME}/winetricks}" + WINETRICKS_POST="${WINETRICKS_POST:-${XDG_DATA_HOME}/winetricks/postinstall}" + fi + + WINETRICKS_AUTH="${WINETRICKS_AUTH:-${XDG_DATA_HOME}/winetricks/auth}" + + # Config options are currently opt-in and not required, so not creating the config + # directory unless there's demand: + WINETRICKS_CONFIG="${XDG_CONFIG_HOME}/winetricks" + #test -d "$WINETRICKS_CONFIG" || mkdir -p "$WINETRICKS_CONFIG" + + # Load country code from config file only when "--country=" option is not specified + if test -z "${W_COUNTRY}" -a -f "${WINETRICKS_CONFIG}"/country; then + W_COUNTRY="$(cat "${WINETRICKS_CONFIG}"/country)" + fi + + # Pin a task to a single cpu. Helps prevent race conditions. + # + # Linux/FreeBSD: supported + # OSX: doesn't have a utility for this + # Solaris: no access, PR welcome + + if [ -x "$(command -v taskset 2>/dev/null)" ]; then + W_TASKSET="taskset -c 0" + elif [ -x "$(command -v cpuset 2>/dev/null)" ]; then + W_TASKSET="cpuset -l 0" + else + # not using w_warn so we don't annoy everyone running via GUI, but still printed to terminal: + echo "warning: taskset/cpuset not available on your platform!" + W_TASKSET="" + fi + + # Whether to automate installs (0=no, 1=yes) + winetricks_set_unattended "${W_OPT_UNATTENDED:-0}" + + # We have to call this here, because it needs to be called before w_metadata + # Unfortunately, that means we run wine before the gui runs. Avoiding that would take quite the refactor.. + winetricks_wine_setup "$@" +} + +winetricks_wine_setup() +{ + # This used to be part of winetricks_init(), factored out because not everything needs Wine. + if [ -n "${_W_wine_not_needed}" ]; then + # no-op + : + return + fi + + winetricks_latest_version_check + + # Overridden for windows + W_ISO_MOUNT_ROOT=/mnt/winetricks + W_ISO_USER_MOUNT_ROOT="${HOME}"/winetricks-iso + W_ISO_MOUNT_LETTER=i + + ###################### + # System-specific variables + case "${W_PLATFORM}" in + windows_cmd) + WINE="" + WINE64="" + WINE_ARCH="" + WINE_MULTI="" + WINESERVER="" + W_DRIVE_C="C:/" + ;; + *) + WINE="${WINE:-wine}" + # Find wineserver. + # Some distributions (Debian before wine 1.8-2) don't have it on the path. + for x in \ + "${WINESERVER}" \ + "${WINE}server" \ + "$(command -v wineserver 2> /dev/null)" \ + "$(dirname "${WINE}")/server/wineserver" \ + /usr/bin/wineserver-development \ + /usr/lib/wine/wineserver \ + /usr/lib/i386-kfreebsd-gnu/wine/wineserver \ + /usr/lib/i386-linux-gnu/wine/wineserver \ + /usr/lib/powerpc-linux-gnu/wine/wineserver \ + /usr/lib/i386-kfreebsd-gnu/wine/bin/wineserver \ + /usr/lib/i386-linux-gnu/wine/bin/wineserver \ + /usr/lib/powerpc-linux-gnu/wine/bin/wineserver \ + /usr/lib/x86_64-linux-gnu/wine/bin/wineserver \ + /usr/lib/i386-kfreebsd-gnu/wine-development/wineserver \ + /usr/lib/i386-linux-gnu/wine-development/wineserver \ + /usr/lib/powerpc-linux-gnu/wine-development/wineserver \ + /usr/lib/x86_64-linux-gnu/wine-development/wineserver \ + file-not-found; do + + if test -x "${x}"; then + case "${x}" in + /usr/lib/*/wine-development/wineserver|/usr/bin/wineserver-development) + if test -x /usr/bin/wine-development; then + WINE="/usr/bin/wine-development" + fi + ;; + esac + break + fi + done + + case "${x}" in + file-not-found) w_die "wineserver not found!" ;; + *) WINESERVER="${x}" ;; + esac + + if test "${WINEPREFIX}"; then + WINETRICKS_ORIGINAL_WINEPREFIX="${WINEPREFIX}" + else + WINETRICKS_ORIGINAL_WINEPREFIX="${HOME}/.wine" + fi + _abswine="$(command -v "${WINE}" 2>/dev/null)" + if ! test -x "${_abswine}" || ! test -f "${_abswine}"; then + w_die "WINE is ${WINE}, which is neither on the path nor an executable file" + fi + unset _abswine + ;; + esac + + WINETRICKS_WINE_VERSION=${WINETRICKS_WINE_VERSION:-$(winetricks_early_wine --version | sed 's/.*wine/wine/')} + WINETRICKS_ORIG_WINE_VERSION="${WINETRICKS_WINE_VERSION}" + + # Need to account for lots of variations: + # wine-1.9.22 + # wine-1.9.22 (Debian 1.9.22-1) + # wine-1.9.22 (Staging) + # wine-2.0 (Debian 2.0-1) + # wine-2.0-rc1 + # wine-2.8 + _wine_version_stripped="$(echo "${WINETRICKS_WINE_VERSION}" | cut -d ' ' -f1 | sed -e 's/wine-//' -e 's/-rc.*//')" + + # If WINE is < 5.0, warn user: + # 5.0 doesn't do what I thought it would + if w_wine_version_in ,4.99 ; then + w_warn "Your version of wine ${_wine_version_stripped} is no longer supported upstream. You should upgrade to 5.x" + fi + + winetricks_set_wineprefix "$1" + + if [ -z "${WINETRICKS_SUPER_QUIET}" ] ; then + echo "Using winetricks $(winetricks_print_version) with ${WINETRICKS_ORIG_WINE_VERSION} and WINEARCH=${W_ARCH}" + fi +} + +winetricks_usage() +{ + case ${LANG} in + da*) + cat <<_EOF_ +Brug: $0 [tilvalg] [verbum|sti-til-verbum] ... +Kører de angivne verber. Hvert verbum installerer et program eller ændrer en indstilling. +Tilvalg: + --country=CC Set country code to CC and don't detect your IP address +-f, --force Don't check whether packages were already installed + --gui Show gui diagnostics even when driven by commandline + --isolate Install each app or game in its own bottle (WINEPREFIX) + --self-update Update this application to the last version + --update-rollback Rollback the last self update +-k, --keep_isos lagr iso'er lokalt (muliggør senere installation uden disk) + --no-clean Don't delete temp directories (useful during debugging) +-q, --unattended stil ingen spørgsmål, installér bare automatisk +-r, --ddrescue brug alternativ disk-tilgangsmetode (hjælper i tilfælde af en ridset disk) +-t, --torify Run downloads under torify, if available + --verify Run (automated) GUI tests for verbs, if available +-v, --verbose vis alle kommandoer som de bliver udført +-V, --version vis programversionen og afslut +-h --help vis denne besked og afslut + +Diverse verber: +list vis en liste over alle verber +list-all list all categories and their verbs +apps list list verbs in category 'applications' +benchmarks list list verbs in category 'benchmarks' +dlls list list verbs in category 'dlls' +fonts list list verbs in category 'fonts' +games list list verbs in category 'games' +settings list list verbs in category 'settings' +list-cached vis en liste over verber for allerede-hentede installationsprogrammer +list-download vis en liste over verber for programmer der kan hentes +list-manual-download list applications which can be downloaded with some help from the user +list-installed list already-installed applications +arch=32|64 create wineprefix with 32 or 64 bit, this option must be + given before prefix=foobar and will not work in case of + the default wineprefix. +prefix=foobar select WINEPREFIX=${W_PREFIXES_ROOT}/foobar +annihilate Delete ALL DATA AND APPLICATIONS INSIDE THIS WINEPREFIX +_EOF_ + ;; + de*) + cat <<_EOF_ +Benutzung: $0 [options] [Kommando|Verb|Pfad-zu-Verb] ... +Angegebene Verben ausführen. +Jedes Verb installiert eine Anwendung oder ändert eine Einstellung. + +Optionen: + --country=CC Ländercode auf CC setzen und IP Adresse nicht auslesen +-f, --force Nicht prüfen ob Pakete bereits installiert wurden + --gui GUI Diagnosen anzeigen, auch wenn von der Kommandozeile gestartet + --isolate Jedes Programm oder Spiel in eigener Bottle (WINEPREFIX) installieren + --self-update Dieses Programm auf die neueste Version aktualisieren + --update-rollback Rollback des letzten Self Update +-k, --keep_isos ISOs local speichern (erlaubt spätere Installation ohne Disk) + --no-clean Temp Verzeichnisse nicht löschen (nützlich beim debuggen) +-q, --unattended Keine Fragen stellen, alles automatisch installieren +-r, --ddrescue Alternativer Zugriffsmodus (hilft bei zerkratzten Disks) +-t --torify Wenn möglich Downloads unter torify ausführen + --verify Wenn möglich automatische GUI Tests für Verben starten +-v, --verbose Alle ausgeführten Kommandos anzeigen +-h, --help Diese Hilfemeldung anzeigen +-V, --version Programmversion anzeigen und Beenden + +Kommandos: +list Kategorien auflisten +list-all Alle Kategorien und deren Verben auflisten +apps list Verben der Kategorie 'Anwendungen' auflisten +benchmarks list Verben der Kategorie 'Benchmarks' auflisten +dlls list Verben der Kategorie 'DLLs' auflisten +fonts list list verbs in category 'fonts' +games list Verben der Kategorie 'Spiele' auflisten +settings list Verben der Kategorie 'Einstellungen' auflisten +list-cached Verben für bereits gecachte Installers auflisten +list-download Verben für automatisch herunterladbare Anwendungen auflisten +list-manual-download Verben für vom Benutzer herunterladbare Anwendungen auflisten +list-installed Bereits installierte Verben auflisten +arch=32|64 Neues wineprefix mit 32 oder 64 bit erstellen, diese Option + muss vor prefix=foobar angegeben werden und funktioniert + nicht im Falle des Standard Wineprefix. +prefix=foobar WINEPREFIX=${W_PREFIXES_ROOT}/foobar auswählen +annihilate ALLE DATEIEN UND PROGRAMME IN DIESEM WINEPREFIX Löschen +_EOF_ + ;; + *) + cat <<_EOF_ +Usage: $0 [options] [command|verb|path-to-verb] ... +Executes given verbs. Each verb installs an application or changes a setting. + +Options: + --country=CC Set country code to CC and don't detect your IP address +-f, --force Don't check whether packages were already installed + --gui Show gui diagnostics even when driven by commandline + --gui=OPT Set OPT to kdialog or zenity to override GUI engine + --isolate Install each app or game in its own bottle (WINEPREFIX) + --self-update Update this application to the last version + --update-rollback Rollback the last self update +-k, --keep_isos Cache isos (allows later installation without disc) + --no-clean Don't delete temp directories (useful during debugging) +-q, --unattended Don't ask any questions, just install automatically +-r, --ddrescue Retry hard when caching scratched discs +-t --torify Run downloads under torify, if available + --verify Run (automated) GUI tests for verbs, if available +-v, --verbose Echo all commands as they are executed +-h, --help Display this message and exit +-V, --version Display version and exit + +Commands: +list list categories +list-all list all categories and their verbs +apps list list verbs in category 'applications' +benchmarks list list verbs in category 'benchmarks' +dlls list list verbs in category 'dlls' +fonts list list verbs in category 'fonts' +games list list verbs in category 'games' +settings list list verbs in category 'settings' +list-cached list cached-and-ready-to-install verbs +list-download list verbs which download automatically +list-manual-download list verbs which download with some help from the user +list-installed list already-installed verbs +arch=32|64 create wineprefix with 32 or 64 bit, this option must be + given before prefix=foobar and will not work in case of + the default wineprefix. +prefix=foobar select WINEPREFIX=${W_PREFIXES_ROOT}/foobar +annihilate Delete ALL DATA AND APPLICATIONS INSIDE THIS WINEPREFIX +_EOF_ + ;; + esac +} + +winetricks_handle_option() +{ + case "$1" in + --country=*) W_COUNTRY="${1##--country=}" ;; + -f|--force) WINETRICKS_FORCE=1;; + --gui*) winetricks_detect_gui "${1##--gui=}";; + -h|--help) winetricks_usage ; exit 0 ;; + --isolate) WINETRICKS_OPT_SHAREDPREFIX=0 ;; + -k|--keep_isos) WINETRICKS_OPT_KEEPISOS=1 ;; + --no-clean) W_OPT_NOCLEAN=1 ;; + --no-isolate) WINETRICKS_OPT_SHAREDPREFIX=1 ;; + --optin) WINETRICKS_STATS_REPORT=1;; + --optout) WINETRICKS_STATS_REPORT=0;; + -q|--unattended) winetricks_set_unattended 1 ;; + -r|--ddrescue) WINETRICKS_OPT_DD=ddrescue ;; + --self-update) winetricks_selfupdate;; + -t|--torify) WINETRICKS_OPT_TORIFY=1 ;; + --update-rollback) winetricks_selfupdate_rollback;; + -v|--verbose) WINETRICKS_OPT_VERBOSE=1 ; set -x;; + -V|--version) winetricks_print_version ; exit 0;; + --verify) WINETRICKS_VERIFY=1 ;; + -vv|--really-verbose) WINETRICKS_OPT_VERBOSE=2 ; set -x ;; + -*) w_die "unknown option $1" ;; + prefix=*) export WINEPREFIX="${W_PREFIXES_ROOT}/${1##prefix=}" ;; + *) return "${FALSE}" ;; + esac + return "${TRUE}" +} + +# Test whether temporary directory is valid - before initialising script +[ -d "${W_TMP_EARLY}" ] || w_die "temporary directory: '${W_TMP_EARLY}' ; does not exist" +[ -w "${W_TMP_EARLY}" ] || w_die "temporary directory: '${W_TMP_EARLY}' ; is not user writeable" + +# Must initialize variables before calling w_metadata +if ! test "${WINETRICKS_LIB}"; then + WINETRICKS_SRCDIR=$(dirname "$0") + WINETRICKS_SRCDIR=$(w_try_cd "${WINETRICKS_SRCDIR}"; pwd) + + # Which GUI helper to use (none/zenity/kdialog). See winetricks_detect_gui. + WINETRICKS_GUI=none + # Default to a shared prefix: + WINETRICKS_OPT_SHAREDPREFIX=${WINETRICKS_OPT_SHAREDPREFIX:-1} + + # Handle options before init, to avoid starting wine for --help or --version + while winetricks_handle_option "$1"; do + shift + done + + # Super gross, but I couldn't find a cleaner way. This needs to be set for the list verbs (maybe others) + # while also supporting `dlls list` (etc.) + # This used by w_metadata() to skip checking installed files if wine isn't available/needed + if echo "$*" | grep -v list-installed | grep -q -w list; then + export _W_wine_not_needed=1 + fi + + # Workaround for https://github.com/Winetricks/winetricks/issues/599 + # If --isolate is used, pass verb to winetricks_init, so it can set the wineprefix using winetricks_set_wineprefix() + # Otherwise, an arch mismatch between ${WINEPREFIX:-$HOME/.wine} and the prefix to be made for the isolated app would cause it to fail + case ${WINETRICKS_OPT_SHAREDPREFIX} in + 0) winetricks_init "$1" ;; + *) winetricks_init ;; + esac +fi + +winetricks_install_app() +{ + case ${LANG} in + da*) fail_msg="Installationen af pakken $1 fejlede" ;; + de*) fail_msg="Installieren von Paket $1 gescheitert" ;; + pl*) fail_msg="Niepowodzenie przy instalacji paczki $1" ;; + pt*) fail_msg="Falha ao instalar o pacote $1" ;; + ru*) fail_msg="Ошибка установки пакета $1" ;; + uk*) fail_msg="Помилка встановлення пакунка $1" ;; + zh_CN*) fail_msg="$1 安装失败" ;; + zh_TW*|zh_HK*) fail_msg="$1 安裝失敗" ;; + *) fail_msg="Failed to install package $1" ;; + esac + + # FIXME: initialize a new wineprefix for this app, set lots of global variables + if ! w_do_call "$1" "$2"; then + w_die "${fail_msg}" + fi +} + +winetricks_verify() +{ + "verify_${cmd}" 2>/dev/null + verify_status=$? + case ${verify_status} in + 0) w_warn "verify_${cmd} succeeded!" ;; + 127) echo "verify_${cmd} not found, not verifying ${cmd}" ;; + *) w_die "verify_${cmd} failed!" ;; + esac +} + +#---- Builtin Verbs ---- + +#---------------------------------------------------------------- +# Runtimes +#---------------------------------------------------------------- + +#----- common download for several verbs +# Note: please put a file list $(cabextract -l $foo) / $(unzip -l $foo) at ./misc/filelists/${helper}.txt + +# Filelist at ./misc/filelists/directx-feb2010.txt +helper_directx_dl() +{ + # February 2010 DirectX 9c User Redistributable + # https://www.microsoft.com/en-us/download/details.aspx?id=9033 + # FIXME: none of the verbs that use this will show download status right + # until file1 metadata is extended to handle common cache dir + # 2021/01/28: https://download.microsoft.com/download/E/E/1/EE17FF74-6C45-4575-9CF4-7FC2597ACD18/directx_feb2010_redist.exe + w_download_to directx9 https://files.holarse-linuxgaming.de/mirrors/microsoft/directx_feb2010_redist.exe f6d191e89a963d7cca34f169d30f49eab99c1ed3bb92da73ec43617caaa1e93f + + DIRECTX_NAME=directx_feb2010_redist.exe +} + +# Filelist at ./misc/filelists/directx-jun2010.txt +helper_directx_Jun2010() +{ + # June 2010 DirectX 9c User Redistributable + # https://www.microsoft.com/en-us/download/details.aspx?id=8109 + # 2021/01/28: https://download.microsoft.com/download/8/4/A/84A35BF1-DAFE-4AE8-82AF-AD2AE20B6B14/directx_Jun2010_redist.exe + w_download_to directx9 https://files.holarse-linuxgaming.de/mirrors/microsoft/directx_Jun2010_redist.exe 8746ee1a84a083a90e37899d71d50d5c7c015e69688a466aa80447f011780c0d + + DIRECTX_NAME=directx_Jun2010_redist.exe +} + +# Filelist at ./misc/filelists/directx-jun2010.txt +helper_d3dx9_xx() +{ + dllname=d3dx9_$1 + + helper_directx_Jun2010 + + # Even kinder, less invasive directx - only extract and override d3dx9_xx.dll + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x86*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "${dllname}.dll" "${x}" + done + + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x64*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F "${dllname}.dll" "${x}" + done + fi + + w_override_dlls native "${dllname}" +} + +# Filelist at ./misc/filelists/vb6sp6.txt +helper_vb6sp6() +{ + # $1 - directory to extract to + # $2 .. $n - files to extract from the archive + + destdir="$1" + shift + + w_download_to vb6sp6 https://download.microsoft.com/download/5/6/3/5635D6A9-885E-4C80-A2E7-8A7F4488FBF1/VB60SP6-KB2708437-x86-ENU.msi 350602b2e084b39c97d1394c8594b18e41ef622315d4a9635c5e8ea6aa977b5e + w_try_7z "${destdir}" "${W_CACHE}"/vb6sp6/VB60SP6-KB2708437-x86-ENU.msi "$@" +} + +# Filelist at ./misc/filelists/win2ksp4.txt +helper_win2ksp4() +{ + filename=$1 + + # Originally at https://www.microsoft.com/en-us/download/details.aspx?id=4127 + # Mirror list at http://www.filewatcher.com/m/w2ksp4_en.exe.135477136-0.html + # This URL doesn't need rename from w2ksp4_en.exe to W2KSP4_EN.EXE + # to avoid users having to redownload for a file rename + # 2020/12/09: https://ftp.gnome.org/mirror/archive/ftp.sunet.se/pub/security/vendor/microsoft/win2000/Service_Packs/usa/W2KSP4_EN.EXE + w_download_to win2ksp4 http://x3270.bgp.nu/download/specials/W2KSP4_EN.EXE 167bb78d4adc957cc39fb4902517e1f32b1e62092353be5f8fb9ee647642de7e + w_try_cabextract -d "${W_TMP}" -L -F "${filename}" "${W_CACHE}"/win2ksp4/W2KSP4_EN.EXE +} + +# Filelist at ./misc/filelists/winxpsp2_support_tools.txt +helper_winxpsp2_support_tools() +{ + filename="$1" + + # https://www.microsoft.com/en-us/download/details.aspx?id=18546 + w_download_to winxpsp2_support_tools https://web.archive.org/web/20070104163903/https://download.microsoft.com/download/d/3/8/d38066aa-4e37-4ae8-bce3-a4ce662b2024/WindowsXP-KB838079-SupportTools-ENU.exe 7927e87af616d2fb8d4ead0db0103eb845a4e6651b20a5bffea9eebc3035c24d + + w_try_cabextract -d "${W_TMP}" -L -F support.cab "${W_CACHE}"/winxpsp2_support_tools/WindowsXP-KB838079-SupportTools-ENU.exe + w_try_cabextract -d "${W_TMP}" -L -F "${filename}" "${W_TMP}"/support.cab +} + +# Filelist at ./misc/filelists/winxpsp3.txt +helper_winxpsp3() +{ + filename=$1 + + # 2017/03/15: helper was renamed from winxpsp3 to winxpsp3, to match win2k/win7 service pack helpers + # To minimize user impact, renaming directory automagically. + # This could be removed after a transition period (1 year or so): + if [ -d "${W_CACHE}/xpsp3" ] ; then + w_try mv "${W_CACHE}/xpsp3" "${W_CACHE}/winxpsp3" + fi + + # Formerly at: + # https://www.microsoft.com/en-us/download/details.aspx?id=24 + # https://download.microsoft.com/download/d/3/0/d30e32d8-418a-469d-b600-f32ce3edf42d/WindowsXP-KB936929-SP3-x86-ENU.exe + # Mirror list: http://www.filewatcher.com/m/WindowsXP-KB936929-SP3-x86-ENU.exe.331805736-0.html + # 2018/04/04: http://www.download.windowsupdate.com/msdownload/update/software/dflt/2008/04/windowsxp-kb936929-sp3-x86-enu_c81472f7eeea2eca421e116cd4c03e2300ebfde4.exe + # 2020/12/09: https://ftp.gnome.org/mirror/archive/ftp.sunet.se/pub/security/vendor/microsoft/winxp/Service_Packs/WindowsXP-KB936929-SP3-x86-ENU.exe + w_download_to winxpsp3 http://www.download.windowsupdate.com/msdownload/update/software/dflt/2008/04/windowsxp-kb936929-sp3-x86-enu_c81472f7eeea2eca421e116cd4c03e2300ebfde4.exe 62e524a552db9f6fd22d469010ea4d7e28ee06fa615a1c34362129f808916654 WindowsXP-KB936929-SP3-x86-ENU.exe + + w_try_cabextract -d "${W_TMP}" -L -F "${filename}" "${W_CACHE}"/winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe +} + +# Filelist at ./misc/filelists/win7sp1.txt +helper_win7sp1() +{ + filename=$1 + + # Formerly at: + # https://www.microsoft.com/en-us/download/details.aspx?id=5842 + # 2020/08/27: https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X86.exe + w_download_to win7sp1 http://download.windowsupdate.com/msdownload/update/software/svpk/2011/02/windows6.1-kb976932-x86_c3516bc5c9e69fee6d9ac4f981f5b95977a8a2fa.exe e5449839955a22fc4dd596291aff1433b998f9797e1c784232226aba1f8abd97 windows6.1-KB976932-X86.exe + + w_try_cabextract -d "${W_TMP}" -L -F "${filename}" "${W_CACHE}"/win7sp1/windows6.1-KB976932-X86.exe +} + +# Filelist at ./misc/filelists/win7sp1_x64.txt +helper_win7sp1_x64() +{ + filename=$1 + + # Formerly at: + # https://www.microsoft.com/en-us/download/details.aspx?id=5842 + # 2020/08/27: https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X64.exe + w_download_to win7sp1 http://download.windowsupdate.com/msdownload/update/software/svpk/2011/02/windows6.1-kb976932-x64_74865ef2562006e51d7f9333b4a8d45b7a749dab.exe f4d1d418d91b1619688a482680ee032ffd2b65e420c6d2eaecf8aa3762aa64c8 windows6.1-KB976932-X64.exe + + w_try_cabextract -d "${W_TMP}" -L -F "${filename}" "${W_CACHE}"/win7sp1/windows6.1-KB976932-X64.exe +} + +####################### +# dlls +####################### + +#--------------------------------------------------------- + +w_metadata amstream dlls \ + title="MS amstream.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/amstream.dll" + +load_amstream() +{ + helper_win7sp1 x86_microsoft-windows-directshow-other_31bf3856ad364e35_6.1.7601.17514_none_0f58f1e53efca91e/amstream.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-directshow-other_31bf3856ad364e35_6.1.7601.17514_none_0f58f1e53efca91e/amstream.dll" "${W_SYSTEM32_DLLS}/amstream.dll" + + w_override_dlls native,builtin amstream + + w_try_regsvr amstream.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-directshow-other_31bf3856ad364e35_6.1.7601.17514_none_6b778d68f75a1a54/amstream.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-directshow-other_31bf3856ad364e35_6.1.7601.17514_none_6b778d68f75a1a54/amstream.dll" "${W_SYSTEM64_DLLS}/amstream.dll" + w_try_regsvr64 amstream.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata art2kmin dlls \ + title="MS Access 2000 runtime" \ + publisher="Microsoft" \ + year="2000" \ + media="download" \ + file1="art2kmin.exe" \ + installed_file1="${W_COMMONFILES_X86_WIN}/Microsoft Shared/MSDesigners98/MDT2DBNS.DLL" + +load_art2kmin() +{ + w_download http://download.microsoft.com/download/office2000dev/art2kmin/1/win98/en-us/art2kmin.exe c6bf34dfac8d22b5d4ba8a4b14256dc25215f1ce769049c7f25c40850b5e5b81 + w_try_7z "${W_TMP}" "${W_CACHE}/${W_PACKAGE}"/art2kmin.exe + w_try_cd "${W_TMP}" + w_try "${WINE}" Setup.exe INSTALLPFILES=1 /wait ${W_OPT_UNATTENDED:+/q} +} + +w_metadata art2k7min dlls \ + title="MS Access 2007 runtime" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + file1="AccessRuntime.exe" \ + installed_file1="${W_COMMONFILES_X86_WIN}/Microsoft Shared/OFFICE12/ACEES.DLL" + +load_art2k7min() +{ + # See https://www.microsoft.com/en-us/download/details.aspx?id=4438 + # Originally at https://download.microsoft.com/download/D/2/A/D2A2FC8B-0447-491C-A5EF-E8AA3A74FB98/AccessRuntime.exe + # 2019/11/22: moved to https://www.fmsinc.com/microsoftaccess/runtime/AccessRuntime2007.exe + w_download https://www.fmsinc.com/microsoftaccess/runtime/AccessRuntime2007.exe a00a92fdc4ddc0dcf5d1964214a8d7e4c61bb036908a4b43b3700063eda9f4fb AccessRuntime.exe + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" AccessRuntime.exe ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +w_metadata atmlib dlls \ + title="Adobe Type Manager" \ + publisher="Adobe" \ + year="2009" \ + media="download" \ + file1="../win2ksp4/W2KSP4_EN.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/atmlib.dll" + +load_atmlib() +{ + helper_win2ksp4 i386/atmlib.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/atmlib.dl_ +} + +#---------------------------------------------------------------- + +w_metadata avifil32 dlls \ + title="MS avifil32" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/avifil32.dll" + +load_avifil32() +{ + helper_winxpsp3 i386/avifil32.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/avifil32.dl_ + + w_override_dlls native avifil32 +} + +#---------------------------------------------------------------- + +w_metadata cabinet dlls \ + title="Microsoft cabinet.dll" \ + publisher="Microsoft" \ + year="2002" \ + media="download" \ + file1="MDAC_TYP.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/cabinet.dll" + +load_cabinet() +{ + # https://www.microsoft.com/downloads/en/details.aspx?FamilyId=9AD000F2-CAE7-493D-B0F3-AE36C570ADE8&displaylang=en + # Originally at: https://download.microsoft.com/download/3/b/f/3bf74b01-16ba-472d-9a8c-42b2b4fa0d76/mdac_typ.exe + # Mirror list: http://www.filewatcher.com/m/MDAC_TYP.EXE.5389224-0.html (5.14 MB MDAC_TYP.EXE) + # 2018/08/09: ftp.gunadarma.ac.id is dead, moved to archive.org + w_download https://web.archive.org/web/20060718123742/http://ftp.gunadarma.ac.id/pub/driver/itegno/USB%20Software/MDAC/MDAC_TYP.EXE 36d2a3099e6286ae3fab181a502a95fbd825fa5ddb30bf09b345abc7f1f620b4 + + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try_cp_dll "${W_TMP}/cabinet.dll" "${W_SYSTEM32_DLLS}/cabinet.dll" + + w_override_dlls native,builtin cabinet +} + +#---------------------------------------------------------------- + +w_metadata cmd dlls \ + title="MS cmd.exe" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="Q811493_W2K_SP4_X86_EN.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/cmd.exe" + +load_cmd() +{ + w_download https://web.archive.org/web/20150526022037/http://download.microsoft.com/download/8/d/c/8dc79965-dfbc-4b25-9546-e23bc4b791c6/Q811493_W2K_SP4_X86_EN.exe b5574b3516a724c2cba0d864162a3d1d684db1cf30de8db4b0e0ea6a1f6f1480 + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_CACHE}/${W_PACKAGE}/${file1}" -F cmd.exe + w_override_dlls native,builtin cmd.exe +} + +#---------------------------------------------------------------- + +w_metadata cnc_ddraw dlls \ + title="Reimplentation of ddraw for CnC games" \ + homepage="https://github.com/CnCNet/cnc-ddraw" \ + publisher="CnCNet" \ + year="2021" \ + media="download" \ + file1="cnc-ddraw.zip" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/Shaders/readme.txt" + +load_cnc_ddraw() +{ + # Note: only works if ddraw.ini contains settings for the executable + w_download https://github.com/CnCNet/cnc-ddraw/releases/download/v4.4.4.0/cnc-ddraw.zip 15b1f5ff38558869af651e3f10ab9e7728fa8f48d03b721e923f35fb417c55eb + w_try_unzip "${W_SYSTEM32_DLLS}" "${W_CACHE}/${W_PACKAGE}/${file1}" + + w_override_dlls native,builtin ddraw +} + +#---------------------------------------------------------------- + +w_metadata comctl32 dlls \ + title="MS common controls 5.80" \ + publisher="Microsoft" \ + year="2001" \ + media="download" \ + file1="CC32inst.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/comctl32.dll" + +load_comctl32() +{ + # Microsoft has removed. Mirrors can be found at http://www.filewatcher.com/m/CC32inst.exe.587496-0.html + # 2011/01/17: https://www.microsoft.com/en-us/download/details.aspx?id=14672 + # 2012/08/11: w_download https://download.microsoft.com/download/platformsdk/redist/5.80.2614.3600/w9xnt4/en-us/cc32inst.exe d68c0cca721870aed39f5f2efd80dfb74f3db66d5f9a49e7578b18279edfa4a7 + # 2016/01/07: w_download ftp://ftp.ie.debian.org/disk1/download.sourceforge.net/pub/sourceforge/p/po/pocmin/Win%2095_98%20Controls/Win%2095_98%20Controls/CC32inst.exe + # 2017/03/12: w_download https://downloads.sourceforge.net/project/pocmin/Win%2095_98%20Controls/Win%2095_98%20Controls/CC32inst.exe + + w_download https://downloads.sourceforge.net/project/pocmin/Win%2095_98%20Controls/Win%2095_98%20Controls/CC32inst.exe d68c0cca721870aed39f5f2efd80dfb74f3db66d5f9a49e7578b18279edfa4a7 + + w_try "${WINE}" "${W_CACHE}/${W_PACKAGE}/${file1}" "/T:${W_TMP_WIN}" /c ${W_OPT_UNATTENDED:+/q} + w_try_unzip "${W_TMP}" "${W_TMP}"/comctl32.exe + w_try "${WINE}" "${W_TMP}"/x86/50ComUpd.Exe "/T:${W_TMP_WIN}" /c ${W_OPT_UNATTENDED:+/q} + w_try_cp_dll "${W_TMP}"/comcnt.dll "${W_SYSTEM32_DLLS}"/comctl32.dll + + w_override_dlls native,builtin comctl32 + + # some builtin apps don't like native comctl32 + w_override_app_dlls winecfg.exe builtin comctl32 + w_override_app_dlls explorer.exe builtin comctl32 + w_override_app_dlls iexplore.exe builtin comctl32 +} + +#---------------------------------------------------------------- + +w_metadata comctl32ocx dlls \ + title="MS comctl32.ocx and mscomctl.ocx, comctl32 wrappers for VB6" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="../vb6sp6/VB60SP6-KB2708437-x86-ENU.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mscomctl.ocx" + +load_comctl32ocx() +{ + helper_vb6sp6 "${W_SYSTEM32_DLLS}" comctl32.ocx mscomctl.ocx mscomct2.ocx + + w_try_regsvr comctl32.ocx + w_try_regsvr mscomctl.ocx + w_try_regsvr mscomct2.ocx +} + +#---------------------------------------------------------------- + +w_metadata comdlg32ocx dlls \ + title="Common Dialog ActiveX Control for VB6" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="../vb6sp6/VB60SP6-KB2708437-x86-ENU.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/comdlg32.ocx" + +load_comdlg32ocx() +{ + helper_vb6sp6 "${W_TMP}" ComDlg32.ocx + w_try mv "${W_TMP}/ComDlg32.ocx" "${W_SYSTEM32_DLLS}/comdlg32.ocx" + w_try_regsvr comdlg32.ocx +} + +#---------------------------------------------------------------- + +w_metadata crypt32 dlls \ + title="MS crypt32" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/crypt32.dll" + +load_crypt32() +{ + w_call msasn1 + + helper_winxpsp3 i386/crypt32.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/crypt32.dl_ + + w_override_dlls native crypt32 +} + +#---------------------------------------------------------------- + +w_metadata binkw32 dlls \ + title="RAD Game Tools binkw32.dll" \ + publisher="RAD Game Tools, Inc." \ + year="2000" \ + media="download" \ + file1="__32-binkw32.dll3.0.0.0.zip" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/binkw32.dll" + +load_binkw32() +{ + # Mirror: https://www.dlldump.com/download-dll-files_new.php/dllfiles/B/binkw32.dll/1.0q/download.html + # sha256sum of the decompressed file: 1fd7ef7873c8a3be7e2f127b306d0d24d7d88e20cf9188894eff87b5af0d495f + # + # Zip sha256sum: + # 2015/12/27: 1d5efda8e4af796319b94034ba67b453cbbfddd81eb7d94fd059b40e237fa75d + w_download https://web.archive.org/web/20160221223726if_/http://www.down-dll.com/dll/b/__32-binkw32.dll3.0.0.0.zip 1d5efda8e4af796319b94034ba67b453cbbfddd81eb7d94fd059b40e237fa75d + + w_try_unzip "${W_TMP}" "${W_CACHE}"/binkw32/__32-binkw32.dll3.0.0.0.zip + w_try_cp_dll "${W_TMP}"/binkw32.dll "${W_SYSTEM32_DLLS}"/binkw32.dll + + w_override_dlls native binkw32 +} + +#---------------------------------------------------------------- + +w_metadata d3dcompiler_42 dlls \ + title="MS d3dcompiler_42.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dcompiler_42.dll" + +load_d3dcompiler_42() +{ + dllname=d3dcompiler_42 + + helper_directx_Jun2010 + + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x86*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "${dllname}.dll" "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x64*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F "${dllname}.dll" "${x}" + done + fi + + w_override_dlls native ${dllname} +} + +#---------------------------------------------------------------- + +w_metadata d3dcompiler_43 dlls \ + title="MS d3dcompiler_43.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dcompiler_43.dll" + +load_d3dcompiler_43() +{ + if w_workaround_wine_bug 24013 "Native d3dcompiler_43 may cause some d3d10 apps to crash, see https://bugs.winehq.org/show_bug.cgi?id=24013" ,5.4; then + : + fi + + dllname=d3dcompiler_43 + + helper_directx_Jun2010 + + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x86*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "${dllname}.dll" "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x64*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F "${dllname}.dll" "${x}" + done + fi + + w_override_dlls native ${dllname} +} + +#---------------------------------------------------------------- + +w_metadata d3dcompiler_46 dlls \ + title="MS d3dcompiler_46.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dcompiler_46.dll" + +load_d3dcompiler_46() +{ + # See https://bugs.winehq.org/show_bug.cgi?id=50350#c13 + + w_download http://download.microsoft.com/download/F/1/3/F1300C9C-A120-4341-90DF-8A52509B23AC/standalonesdk/Installers/2630bae9681db6a9f6722366f47d055c.cab + w_try_cabextract -d "${W_TMP}" -L -F "fil47ed91e900f4b9d9659b66a211b57c39" "${W_CACHE}/${W_PACKAGE}/2630bae9681db6a9f6722366f47d055c.cab" + w_try mv "${W_TMP}/fil47ed91e900f4b9d9659b66a211b57c39" "${W_SYSTEM32_DLLS}/d3dcompiler_46.dll" + + if [ "${W_ARCH}" = "win64" ]; then + w_download http://download.microsoft.com/download/F/1/3/F1300C9C-A120-4341-90DF-8A52509B23AC/standalonesdk/Installers/61d57a7a82309cd161a854a6f4619e52.cab + w_try_cabextract -d "${W_TMP}" -L -F "fil8c20206095817436f8df4a711faee5b7" "${W_CACHE}/${W_PACKAGE}/61d57a7a82309cd161a854a6f4619e52.cab" + w_try mv "${W_TMP}/fil8c20206095817436f8df4a711faee5b7" "${W_SYSTEM64_DLLS}/d3dcompiler_46.dll" + fi + + w_override_dlls native d3dcompiler_46 +} + +#---------------------------------------------------------------- + +w_metadata d3dcompiler_47 dlls \ + title="MS d3dcompiler_47.dll" \ + publisher="Microsoft" \ + year="FIXME" \ + media="download" \ + file1="FirefoxSetup62.0.3-win32.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dcompiler_47.dll" + +load_d3dcompiler_47() +{ + # FIXME: would be awesome to find a small download that has both 32/64bit dlls, but this works for now: + + w_download https://download-installer.cdn.mozilla.net/pub/firefox/releases/62.0.3/win32/ach/Firefox%20Setup%2062.0.3.exe "d6edb4ff0a713f417ebd19baedfe07527c6e45e84a6c73ed8c66a33377cc0aca" "FirefoxSetup62.0.3-win32.exe" + w_try_7z "${W_TMP}/win32" "${W_CACHE}/d3dcompiler_47/FirefoxSetup62.0.3-win32.exe" "core/d3dcompiler_47.dll" + w_try_cp_dll "${W_TMP}/win32/core/d3dcompiler_47.dll" "${W_SYSTEM32_DLLS}/d3dcompiler_47.dll" + + if [ "${W_ARCH}" = "win64" ]; then + w_download https://download-installer.cdn.mozilla.net/pub/firefox/releases/62.0.3/win64/ach/Firefox%20Setup%2062.0.3.exe "721977f36c008af2b637aedd3f1b529f3cfed6feb10f68ebe17469acb1934986" "FirefoxSetup62.0.3-win64.exe" + w_try_7z "${W_TMP}/win64" "${W_CACHE}/d3dcompiler_47/FirefoxSetup62.0.3-win64.exe" "core/d3dcompiler_47.dll" + w_try_cp_dll "${W_TMP}/win64/core/d3dcompiler_47.dll" "${W_SYSTEM64_DLLS}/d3dcompiler_47.dll" + fi + + w_override_dlls native d3dcompiler_47 +} + +#---------------------------------------------------------------- + +w_metadata d3drm dlls \ + title="MS d3drm.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3drm.dll" + +load_d3drm() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F "dxnt.cab" "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "d3drm.dll" "${W_TMP}/dxnt.cab" + + w_override_dlls native d3drm +} + +#---------------------------------------------------------------- + +w_metadata d3dx9 dlls \ + title="MS d3dx9_??.dll from DirectX 9 redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_43.dll" + +load_d3dx9() +{ + helper_directx_Jun2010 + + # Kinder, less invasive directx - only extract and override d3dx9_??.dll + w_try_cabextract -d "${W_TMP}" -L -F '*d3dx9*x86*' "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'd3dx9*.dll' "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F '*d3dx9*x64*' "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F 'd3dx9*.dll' "${x}" + done + fi + + # For now, not needed, but when Wine starts preferring our builtin dll over native it will be. + w_override_dlls native d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30 + w_override_dlls native d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 + w_override_dlls native d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_24 dlls \ + title="MS d3dx9_24.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_24.dll" + +load_d3dx9_24() +{ + helper_d3dx9_xx 24 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_25 dlls \ + title="MS d3dx9_25.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_25.dll" + +load_d3dx9_25() +{ + helper_d3dx9_xx 25 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_26 dlls \ + title="MS d3dx9_26.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_26.dll" + +load_d3dx9_26() +{ + helper_d3dx9_xx 26 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_27 dlls \ + title="MS d3dx9_27.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_27.dll" + +load_d3dx9_27() +{ + helper_d3dx9_xx 27 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_28 dlls \ + title="MS d3dx9_28.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_28.dll" + +load_d3dx9_28() +{ + helper_d3dx9_xx 28 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_29 dlls \ + title="MS d3dx9_29.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_29.dll" + +load_d3dx9_29() +{ + helper_d3dx9_xx 29 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_30 dlls \ + title="MS d3dx9_30.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_30.dll" + +load_d3dx9_30() +{ + helper_d3dx9_xx 30 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_31 dlls \ + title="MS d3dx9_31.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_31.dll" + +load_d3dx9_31() +{ + helper_d3dx9_xx 31 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_32 dlls \ + title="MS d3dx9_32.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_32.dll" + +load_d3dx9_32() +{ + helper_d3dx9_xx 32 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_33 dlls \ + title="MS d3dx9_33.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_33.dll" + +load_d3dx9_33() +{ + helper_d3dx9_xx 33 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_34 dlls \ + title="MS d3dx9_34.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_34.dll" + +load_d3dx9_34() +{ + helper_d3dx9_xx 34 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_35 dlls \ + title="MS d3dx9_35.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_35.dll" + +load_d3dx9_35() +{ + helper_d3dx9_xx 35 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_36 dlls \ + title="MS d3dx9_36.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_36.dll" + +load_d3dx9_36() +{ + helper_d3dx9_xx 36 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_37 dlls \ + title="MS d3dx9_37.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_37.dll" + +load_d3dx9_37() +{ + helper_d3dx9_xx 37 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_38 dlls \ + title="MS d3dx9_38.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_38.dll" + +load_d3dx9_38() +{ + helper_d3dx9_xx 38 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_39 dlls \ + title="MS d3dx9_39.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_39.dll" + +load_d3dx9_39() +{ + helper_d3dx9_xx 39 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_40 dlls \ + title="MS d3dx9_40.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_40.dll" + +load_d3dx9_40() +{ + helper_d3dx9_xx 40 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_41 dlls \ + title="MS d3dx9_41.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_41.dll" + +load_d3dx9_41() +{ + helper_d3dx9_xx 41 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_42 dlls \ + title="MS d3dx9_42.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_42.dll" + +load_d3dx9_42() +{ + helper_d3dx9_xx 42 +} + +#---------------------------------------------------------------- + +w_metadata d3dx9_43 dlls \ + title="MS d3dx9_43.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx9_43.dll" + +load_d3dx9_43() +{ + helper_d3dx9_xx 43 +} + +#---------------------------------------------------------------- + +w_metadata d3dx11_42 dlls \ + title="MS d3dx11_42.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx11_42.dll" + +load_d3dx11_42() +{ + dllname=d3dx11_42 + + helper_directx_Jun2010 + + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x86*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "${dllname}.dll" "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x64*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F "${dllname}.dll" "${x}" + done + fi + + w_override_dlls native ${dllname} +} + +#---------------------------------------------------------------- + +w_metadata d3dx11_43 dlls \ + title="MS d3dx11_43.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx11_43.dll" + +load_d3dx11_43() +{ + dllname=d3dx11_43 + + helper_directx_Jun2010 + + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x86*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "${dllname}.dll" "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x64*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F "${dllname}.dll" "${x}" + done + fi + + w_override_dlls native ${dllname} +} + +#---------------------------------------------------------------- + +w_metadata d3dx10 dlls \ + title="MS d3dx10_??.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx10_33.dll" + +load_d3dx10() +{ + helper_directx_Jun2010 + + # Kinder, less invasive directx10 - only extract and override d3dx10_??.dll + w_try_cabextract -d "${W_TMP}" -L -F '*d3dx10*x86*' "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'd3dx10*.dll' "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F '*d3dx10*x64*' "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F 'd3dx10*.dll' "${x}" + done + fi + + # For now, not needed, but when Wine starts preferring our built-in DLL over native it will be. + w_override_dlls native d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 + w_override_dlls native d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41 d3dx10_42 d3dx10_43 +} + +#---------------------------------------------------------------- + +w_metadata d3dx10_43 dlls \ + title="MS d3dx10_43.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dx10_43.dll" + +load_d3dx10_43() +{ + dllname=d3dx10_43 + + helper_directx_Jun2010 + + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x86*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "${dllname}.dll" "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F "*${dllname}*x64*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F "${dllname}.dll" "${x}" + done + fi + + w_override_dlls native ${dllname} +} + +#---------------------------------------------------------------- + +w_metadata d3dxof dlls \ + title="MS d3dxof.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3dxof.dll" + +load_d3dxof() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F 'dxnt.cab' "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'd3dxof.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native d3dxof +} + +#---------------------------------------------------------------- + +w_metadata dbghelp dlls \ + title="MS dbghelp" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dbghelp.dll" + +load_dbghelp() +{ + helper_winxpsp3 i386/dbghelp.dll + + w_try_cp_dll "${W_TMP}"/i386/dbghelp.dll "${W_SYSTEM32_DLLS}" + + w_override_dlls native dbghelp +} + +#---------------------------------------------------------------- + +w_metadata devenum dlls \ + title="MS devenum.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/devenum.dll" + +load_devenum() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F 'dxnt.cab' "${W_CACHE}/directx9/${DIRECTX_NAME}" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'devenum.dll' "${W_TMP}/dxnt.cab" + w_override_dlls native devenum + w_try_regsvr devenum.dll +} + +#---------------------------------------------------------------- + +w_metadata dinput dlls \ + title="MS dinput.dll; breaks mouse, use only on Rayman 2 etc." \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dinput.dll" + +load_dinput() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F 'dxnt.cab' "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dinput.dll' "${W_TMP}/dxnt.cab" + w_override_dlls native dinput + w_try_regsvr dinput +} + +#---------------------------------------------------------------- + +w_metadata dinput8 dlls \ + title="MS DirectInput 8 from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dinput8.dll" + +load_dinput8() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F 'dxnt.cab' "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dinput8.dll' "${W_TMP}/dxnt.cab" + + # Don't try to register native dinput8; it doesn't export DllRegisterServer(). + #w_try_regsvr32 dinput8 + w_override_dlls native dinput8 +} + +#---------------------------------------------------------------- + +w_metadata directmusic dlls \ + title="MS DirectMusic from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmusic.dll" + +load_directmusic() +{ + # Untested. Based off https://bugs.winehq.org/show_bug.cgi?id=4805 and https://bugs.winehq.org/show_bug.cgi?id=24911 + + w_warn "You can specify individual DirectMusic verbs instead. e.g. 'winetricks dmsynth dmusic'" + + w_call dmband + w_call dmcompos + w_call dmime + w_call dmloader + w_call dmscript + w_call dmstyle + w_call dmsynth + w_call dmusic + w_call dmusic32 + w_call dsound + w_call dswave + + # FIXME: dxnt.cab doesn't contain this DLL. Is this really needed? + w_override_dlls native streamci +} + +#---------------------------------------------------------------- + +w_metadata directshow dlls \ + title="DirectShow runtime DLLs (amstream, qasf, qcap, qdvd, qedit, quartz)" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" + +load_directshow() +{ + w_warn "You can specify individual DirectShow verbs instead. e.g. 'winetricks quartz'" + + w_call amstream + w_call qasf + w_call qcap + w_call qdvd + w_call qedit + w_call quartz +} + +#---------------------------------------------------------------- + +w_metadata directplay dlls \ + title="MS DirectPlay from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dplayx.dll" + +load_directplay() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dplaysvr.exe' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dplayx.dll' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpmodemx.dll' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpnet.dll' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpnhpast.dll' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpnhupnp.dll' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpnsvr.exe' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpwsockx.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dplaysvr.exe dplayx dpmodemx dpnet dpnhpast dpnhupnp dpnsvr.exe dpwsockx + + w_try_regsvr dplayx.dll + w_try_regsvr dpnet.dll + w_try_regsvr dpnhpast.dll + w_try_regsvr dpnhupnp.dll +} + +#---------------------------------------------------------------- + +w_metadata directx9 dlls \ + title="MS DirectX 9 (Deprecated, no-op)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" + +load_directx9() +{ + # There are 54 as of 2019/04/23, so listing them all (especially in GUI) would be hard. + # Besides, that would probably encourage people to install more native stuff than necessary. + w_warn "directx9 is deprecated. Please install individual directx components (e.g., \`$0 d3dx9\`) instead." +} + +#---------------------------------------------------------------- + +w_metadata dpvoice dlls \ + title="Microsoft dpvoice dpvvox dpvacm Audio dlls" \ + publisher="Microsoft" \ + year="2002" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dpvoice.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dpvvox.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dpvacm.dll" + +load_dpvoice() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F 'dxnt.cab' "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpvoice.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpvvox.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dpvacm.dll' "${x}" + done + w_override_dlls native dpvoice dpvvox dpvacm + w_try_regsvr dpvoice.dll + w_try_regsvr dpvvox.dll + w_try_regsvr dpvacm.dll +} + +#---------------------------------------------------------------- + +w_metadata dsdmo dlls \ + title="MS dsdmo.dll" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dsdmo.dll" + +load_dsdmo() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dsdmo.dll' "${W_TMP}/dxnt.cab" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dsdmoprp.dll' "${W_TMP}/dxnt.cab" + w_try_regsvr dsdmo.dll + w_try_regsvr dsdmoprp.dll +} + +#---------------------------------------------------------------- + +w_metadata dxsdk_nov2006 apps \ + title="MS DirectX SDK, November 2006 (developers only)" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="dxsdk_aug2006.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Microsoft DirectX SDK (August 2006)/Lib/x86/d3d10.lib" + +load_dxsdk_nov2006() +{ + w_download https://download.microsoft.com/download/9/e/5/9e5bfc66-a621-4e0d-8bfe-6688058c3f00/dxsdk_aug2006.exe ab8d7d895089a88108d4148ef0f7e214b7a23c1ee9ba720feca78c7d4ca16c00 + + # dxview.dll uses mfc42u while registering + w_call mfc42 + + w_try_cabextract "${W_CACHE}"/dxsdk_nov2006/dxsdk_aug2006.exe + w_try_unzip "${W_TMP}" dxsdk.exe + w_try_cd "${W_TMP}" + w_try "${WINE}" msiexec /i Microsoft_DirectX_SDK.msi ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +w_metadata dxsdk_jun2010 apps \ + title="MS DirectX SDK, June 2010 (developers only)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="DXSDK_Jun10.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Microsoft DirectX SDK (June 2010)/Lib/x86/d3d11.lib" + +load_dxsdk_jun2010() +{ + w_download https://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe 9f818a977c32b254af5d649a4cec269ed8762f8a49ae67a9f01101a7237ae61a + + # Without dotnet20, install aborts halfway through + w_call dotnet20 + + w_try_cd "${W_TMP}" + w_try "${WINE}" "${W_CACHE}"/dxsdk_jun2010/DXSDK_Jun10.exe ${W_OPT_UNATTENDED:+/U} +} + +#---------------------------------------------------------------- + +w_metadata dxtrans dlls \ + title="MS dxtrans.dll" \ + publisher="Microsoft" \ + year="2002" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dxtrans.dll" \ + +load_dxtrans() +{ + helper_winxpsp3 i386/dxtrans.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/dxtrans.dl_ + w_override_dlls native,builtin dxtrans + w_try_regsvr dxtrans.dll +} + +#---------------------------------------------------------------- + +# $1 - dxvk archive name (required) +# $2 - minimum Wine version (required) +# $3 - minimum Vulkan API version (required) +# $4 - [dxgi,][d3d9,][d3d10core,][d3d10,]d3d11 (required) +helper_dxvk_d9vk() +{ + _W_package_archive="${1}" + _W_min_wine_version="${2}" + _W_min_vulkan_version="${3}" + _W_dll_overrides="$(echo "${4}" | sed 's/,/ /g')" + + _W_supported_overrides="dxgi d3d9 d3d10core d3d10 d3d11" + _W_invalid_overrides="$(echo "${_W_dll_overrides}" | awk -vvalid_overrides_regex="$(echo "${_W_supported_overrides}" | sed 's/ /|/g')" '{ gsub(valid_overrides_regex,""); sub("[ ]*",""); print $0 }')" + if [ "${_W_invalid_overrides}" != "" ]; then + w_die "parameter (4) unsupported dll override: '${_W_invalid_overrides}' ; supported dll overrides: ${_W_supported_overrides}" + fi + + _W_dll_overrides="$(echo "${_W_dll_overrides}" | sed 's/d3d10 /&d3d10_1 /')" + + case "${_W_package_archive}" in + d9vk*) + # dvk9 repository, for d3d9/d3d10/d3d11 support + _W_repository="Joshua-Ashton/d9vk" + ;; + dxvk*) + # dxvk repository, for d3d9/d3d10/d3d11 support + _W_repository="doitsujin/dxvk" + ;; + *) + w_die "parameter (1): unsupported package archive repository: '${_W_package_archive}'; supported: d9vk dxvk" + ;; + esac + + case "${_W_package_archive}" in + *master*) + _W_package_dir="build/dxvk-release" + _W_package_version="master" + w_warn "Using master ${_W_repository} build" + ;; + *) + _W_package_dir="${_W_package_archive%.tar.gz}" + _W_package_version="${_W_package_dir#*-}" + w_warn "Please refer to ${_W_repository#*/} version ${_W_package_version} release notes... See: https://github.com/${_W_repository}/releases/tag/${_W_package_version}" + ;; + esac + w_warn "Please refer to current dxvk base graphics driver requirements... See: https://github.com/doitsujin/dxvk/wiki/Driver-support" + + if w_wine_version_in ",${_W_min_wine_version}" ; then + # shellcheck disable=SC2140 + w_warn "${_W_repository#*/} ${_W_package_version} does not support wine version ${_wine_version_stripped} . "\ + "${_W_repository#*/} ${_W_package_version} requires wine version ${_W_min_wine_version} (or newer). "\ + "Vulkan ${_W_min_vulkan_version} API (or newer) support is recommended." + fi + + if [ "${_W_package_archive##*.}" = "zip" ]; then + w_try_unzip "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${_W_package_archive}" + else + w_try_cd "${W_TMP}" + w_try tar -zxf "${W_CACHE}/${W_PACKAGE}/${_W_package_archive}" + fi + + for _W_dll in ${_W_dll_overrides}; do + w_try mv "${W_TMP}/${_W_package_dir}/x32/${_W_dll}.dll" "${W_SYSTEM32_DLLS}/" + [ "${_W_dll}" = "d3d9" ] && _W_d3d9_support="1" + done + if test "${W_ARCH}" = "win64"; then + for _W_dll in ${_W_dll_overrides}; do + w_try mv "${W_TMP}/${_W_package_dir}/x64/${_W_dll}.dll" "${W_SYSTEM64_DLLS}/" + done + fi + # shellcheck disable=SC2086 + w_override_dlls native ${_W_dll_overrides} + if [ -n "${_W_d3d9_support}" ]; then + w_call d3dcompiler_43 + w_call d3dx9 + fi + + unset _W_d3d9_support _W_dll _W_dll_overrides _W_invalid_overrides _W_min_vulkan_version _W_min_wine_version \ + _W_package_archive _W_package_dir _W_package_version \ + _W_repository _W_supported_overrides +} + + +#---------------------------------------------------------------- + +w_metadata dxvk0054 dlls \ + title="Vulkan-based D3D11 implementation for Linux / Wine (0.54)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.54.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0054() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.54/dxvk-0.54.tar.gz" 1c2f186baaa01d2de7b832f6f05021bdd29eccb65fc197c8b15adfd4e08f9640 + helper_dxvk_d9vk "${file1}" "3.10" "1.1.72" "dxgi,d3d11" +} + +w_metadata dxvk0060 dlls \ + title="Vulkan-based D3D11 implementation for Linux / Wine (0.60)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.60.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0060() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.60/dxvk-0.60.tar.gz" 27d6f700241d3ec3b6c002c3d739bb0e3f210ec916ecb5a62d9204e9e50f2c4a + helper_dxvk_d9vk "${file1}" "3.10" "1.1.72" "dxgi,d3d11" +} + +w_metadata dxvk0061 dlls \ + title="Vulkan-based D3D11 implementation for Linux / Wine (0.61)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.61.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0061() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.61/dxvk-0.61.tar.gz" d04388f026dc0d8b276b08f7db74fb3556cbbc8f762401eb5ef52629ee39ded1 + helper_dxvk_d9vk "${file1}" "3.10" "1.1.72" "dxgi,d3d11" +} + +w_metadata dxvk0062 dlls \ + title="Vulkan-based D3D11 implementation for Linux / Wine (0.62)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.62.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0062() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.62/dxvk-0.62.tar.gz" b9dbb57908e24b094b68f665ad729b6ee277eecc8ba04a6e6e4f8a4d2dfd94e3 + helper_dxvk_d9vk "${file1}" "3.10" "1.1.72" "dxgi,d3d11" +} + +w_metadata dxvk0063 dlls \ + title="Vulkan-based D3D11 implementation for Linux / Wine (0.63)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.63.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0063() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.63/dxvk-0.63.tar.gz" 696df816bd9640770dee14f932bc641a16261fccf76be7c28d812a64ca6040fa + helper_dxvk_d9vk "${file1}" "3.18" "1.1.80" "dxgi,d3d11" +} + +w_metadata dxvk0064 dlls \ + title="Vulkan-based D3D11 implementation for Linux / Wine (0.64)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.64.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0064() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.64/dxvk-0.64.tar.gz" 2e03e40ff0a9d36f96a06137f3fa9110ebaea230d0bf6c22cf6399e16e97fb9c + helper_dxvk_d9vk "${file1}" "3.18" "1.1.80" "dxgi,d3d11" +} + +w_metadata dxvk0065 dlls \ + title="Vulkan-based D3D11 implementation for Linux / Wine (0.65)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.65.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0065() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.65/dxvk-0.65.tar.gz" 7b4eb42e693f925d0aff90bae261b20c50428602382ee94a3e3860b2ad1ebad0 + helper_dxvk_d9vk "${file1}" "3.18" "1.1.80" "dxgi,d3d11" +} + +w_metadata dxvk0070 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.70)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.70.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0070() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.70/dxvk-0.70.tar.gz" 310546d530be494a35cae49b707fef4b073269d811aac25bdf72899ed1df4e9f + helper_dxvk_d9vk "${file1}" "3.18" "1.1.80" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0071 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.71)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.71.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0071() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.71/dxvk-0.71.tar.gz" fbe66337d1450f366961a7699253cd7a96c12a88c2fcda64b79be1cbb13d37d5 + helper_dxvk_d9vk "${file1}" "3.18" "1.1.80" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0072 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.72)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.72.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0072() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.72/dxvk-0.72.tar.gz" bc84f48f99cf5add3c8919a43d7a9c0bf208c994dc58326a636b56b8db650c52 + helper_dxvk_d9vk "${file1}" "3.18" "1.1.84" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0080 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.80)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.80.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0080() +{ + # https://github.com/doitsujin/dxvk + # 2017/09/23: f9e736cdbf1e83e45ca748652a94a3a189fc5accde1eac549b2ba5af8f7acacb + # 2017/11/17: 7058a834bb006cad5462933110449b434df561e67d83f68d3965ecc74e2e1cbc + # See: https://github.com/doitsujin/dxvk/issues/773 + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.80/dxvk-0.80.tar.gz" 7058a834bb006cad5462933110449b434df561e67d83f68d3965ecc74e2e1cbc + helper_dxvk_d9vk "${file1}" "3.18" "1.1.84" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0081 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.81)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.81.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0081() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.81/dxvk-0.81.tar.gz" 9bf6eda9ae4ee74b509e07dfe9cc003dfa4bba192b519dacdd542a57f6a43869 + helper_dxvk_d9vk "${file1}" "3.18" "1.1.84" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0090 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.90)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.90.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0090() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.90/dxvk-0.90.tar.gz" 15bce7b282065054ff9233b33738bf1d2c74b16829361cbd6843bc2f5dfe4509 + helper_dxvk_d9vk "${file1}" "3.19" "1.1.87" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0091 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.91)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.91.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0091() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.91/dxvk-0.91.tar.gz" 5296106ac3a8c631d7f26fa46dbff4be1332cda14fa493fd89ccf97e050c4855 + helper_dxvk_d9vk "${file1}" "3.19" "1.1.87" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0092 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.92)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.92.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0092() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.92/dxvk-0.92.tar.gz" e22c0ae4693aac88562c7a9a97b3316e086b9048c9f8f9e128923ac1611a5c49 + helper_dxvk_d9vk "${file1}" "3.19" "1.1.87" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0093 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.93)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.93.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0093() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.93/dxvk-0.93.tar.gz" 4d964e4e10e67ba7705312496e472ae9859520a78d8742d6d377886318c95e53 + helper_dxvk_d9vk "${file1}" "4.0" "1.1.93" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0094 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.94)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.94.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0094() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.94/dxvk-0.94.tar.gz" 1f06bfac5b435b62b972806fb3bbd86f7ccae2399b4451e85ae414e03d3712a3 + helper_dxvk_d9vk "${file1}" "4.0" "1.1.93" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0095 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.95)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.95.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0095() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.95/dxvk-0.95.tar.gz" 1eea48149f6e94c3c74ecddd92df4f9daa67ab28d0fca548bde5cd40f0e486bf + helper_dxvk_d9vk "${file1}" "4.0" "1.1.93" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk0096 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (0.96)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-0.96.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk0096() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v0.96/dxvk-0.96.tar.gz" 9d054c1e7a4f59825c651b14d3cfbf0d8c724763f485b3d59c89f1d7194b2206 + helper_dxvk_d9vk "${file1}" "4.0" "1.1.93" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1000 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.0)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.0.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1000() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.0/dxvk-1.0.tar.gz" 8c8d26544609532201c10e6f5309bf5e913b5ca5b985932928ef9ab238de6dc2 + helper_dxvk_d9vk "${file1}" "4.5" "1.1.101" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1001 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.0.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.0.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1001() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.0.1/dxvk-1.0.1.tar.gz" 739847cdd14b302dac600c66bc6617d7814945df6d4d7b6c91fecfa910e3b1b1 + helper_dxvk_d9vk "${file1}" "4.5" "1.1.101" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1002 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.0.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.0.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1002() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.0.2/dxvk-1.0.2.tar.gz" f9504b188488d1102cba7e82c28681708f39e151af1c1ef7ebeac82d729c01ac + helper_dxvk_d9vk "${file1}" "4.5" "1.1.101" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1003 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.0.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.0.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1003() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.0.3/dxvk-1.0.3.tar.gz" 984d28ab3a112be207d6339da19113d1117e56731ed413d0e202e6fd1391a6ae + helper_dxvk_d9vk "${file1}" "4.5" "1.1.101" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1011 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.1.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.1.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1011() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.1.1/dxvk-1.1.1.tar.gz" 346c523953f72ac5885071c4384039faf01f6f43a88d5b0c12d94bfaa9598c1d + helper_dxvk_d9vk "${file1}" "4.5" "1.1.104" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1020 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1020() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.2/dxvk-1.2.tar.gz" 414751a810143ced34d1f4f0eb2a40e79b4c9726318994b244b70d1b3a6f8b32 + helper_dxvk_d9vk "${file1}" "4.5" "1.1.104" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1021 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.2.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.2.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1021() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.2.1/dxvk-1.2.1.tar.gz" 192beca0a34d13f101e9c2545d9533cf84830a23b566bed185c022ed754c3daa + helper_dxvk_d9vk "${file1}" "4.5" "1.1.104" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1022 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.2.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.2.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1022() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.2.2/dxvk-1.2.2.tar.gz" dfe620a387222dc117a6722171e0bca400755a3e1c6459350c710dfda40b6701 + helper_dxvk_d9vk "${file1}" "4.5" "1.1.104" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1023 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.2.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.2.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1023() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.2.3/dxvk-1.2.3.tar.gz" 29ce345b3d962dbd8ec8bfda190635a21f62124e3e46f06e89aa2f3b1e230321 + helper_dxvk_d9vk "${file1}" "4.5" "1.1.104" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1030 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1030() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.3/dxvk-1.3.tar.gz" d15fac6503ea614986237052d554d7cbd2dbf5f3486feb6217e64bae83cfc2cf + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1031 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.3.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.3.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1031() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.3.1/dxvk-1.3.1.tar.gz" 2f6636dbd591ea9de20b30a33c9c8c0985a4939f6503f90ca5c7edafd01524a3 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1032 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.3.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.3.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1032() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.3.2/dxvk-1.3.2.tar.gz" aa70890a17b48be27648d15cb837b5167c99f75ee32ae0c94a85ec1f1fdc4675 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1033 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.3.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.3.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1033() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.3.3/dxvk-1.3.3.tar.gz" 828171ad1dbb6b51f367fa46cf33f8db4a0b1b990cd2e95654d6a65500d230b7 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1034 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.3.4)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.3.4.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1034() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.3.4/dxvk-1.3.4.tar.gz" 4683e2ad4221b16572b0d939da5a05ab9a16b2b62c2f4e0c8bf3b2cdb27918ff + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1040 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.4)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.4.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1040() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.4/dxvk-1.4.tar.gz" bf22785de1ce728bbdcfb4615035924112b4718049ca2cade5861b03735181de + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1041 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.4.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.4.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1041() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.4.1/dxvk-1.4.1.tar.gz" 574ec4dc5201e45d70472228f0c6695426f0392503ec7a47d6092600aac53a07 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1042 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.4.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.4.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1042() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.4.2/dxvk-1.4.2.tar.gz" 5adfd71ee0299798af4402f09f113f88929af429b6889af334cff5b84b84dbe6 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1043 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.4.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.4.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1043() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.4.3/dxvk-1.4.3.tar.gz" e4b9e7fc8faf2dd1ddf5206e14939a822034a85778d54a6950767d68909726f7 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1044 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.4.4)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.4.4.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1044() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.4.4/dxvk-1.4.4.tar.gz" a845285c8dfc63c7d00c14520b58fc6048796fef69fea49617edb46662a0ba31 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1045 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.4.5)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.4.5.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1045() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.4.5/dxvk-1.4.5.tar.gz" 566c93dce84c3c2f39938428ddcca27a5bb2f5068eb4f868ff2126389b965cd1 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1046 dlls \ + title="Vulkan-based D3D10/D3D11 implementation for Linux / Wine (1.4.6)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.4.6.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1046() +{ + # https://github.com/doitsujin/dxvk + # Original sha256sum: 1aa069f5ea7d3d6e374bda332d12f9207f1a21e9811c4d4d82487416420ee73e + # Upstream later rebuilt with commit 1ae7d4b30283d2eb06b467c581aafdbbd9d36cdf: c9e3a96d8c5e693e20f69f27ac3f8b55198449fddd24205195476d6af7e8a339 + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.4.6/dxvk-1.4.6.tar.gz" c9e3a96d8c5e693e20f69f27ac3f8b55198449fddd24205195476d6af7e8a339 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1050 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.5.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1050() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.5/dxvk-1.5.tar.gz" 90cfae0bb43fed1e46442d20e2ab3bf448ebdff1e9f4f59841dc922aa3a36d3b + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d9,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1051 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.5.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1051() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.5.1/dxvk-1.5.1.tar.gz" 474ce9995edd47a3bd347a8f3263f35cf8df2676f5b16668bf38efa298d75c01 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d9,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1052 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.5.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1052() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.5.2/dxvk-1.5.2.tar.gz" 684ba886b5ed922c2417753d8178f923c695258c69cc8f778bb59b99bbf62477 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d9,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1053 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.5.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1053() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.5.3/dxvk-1.5.3.tar.gz" b845c9c492e32648dee44d058c189eff8534e5490a80a3b2a921248bc72e33bd + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d9,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1054 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.4)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.5.4.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1054() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.5.4/dxvk-1.5.4.tar.gz" 8e4fd15525def9bcaa9cc1b4496f76a2664ba4806b02a5ac0eddd703d7bbdea7 + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d9,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1055 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.5)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.5.5.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d10.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10_1.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file5="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1055() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.5.5/dxvk-1.5.5.tar.gz" f4c57274ac85d71b192e2a0ac095f285e26cc054c87c6c34c081f919147539eb + helper_dxvk_d9vk "${file1}" "4.20" "1.1.113" "dxgi,d3d9,d3d10core,d3d10,d3d11" +} + +w_metadata dxvk1060 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.6.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1060() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.6/dxvk-1.6.tar.gz" a493e0802e02629244672c44ad92c40fa0813b38908677ae14ee07feefcf7227 + helper_dxvk_d9vk "${file1}" "5.3" "1.1.113" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1061 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.6.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1061() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.6.1/dxvk-1.6.1.tar.gz" cdef8735313ed9ccb7af23b37bcceaad54553e29505c269246d5e347f1359136 + helper_dxvk_d9vk "${file1}" "5.3" "1.1.113" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1070 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.7.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1070() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.7/dxvk-1.7.tar.gz" 67d78239906c24bd50a5ecbc2fd792c1721e274a7a60dd22f74b21b08ca4c7a1 + helper_dxvk_d9vk "${file1}" "5.8" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1071 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.7.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1071() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.7.1/dxvk-1.7.1.tar.gz" 6ce66c4e01196ed022604e90383593aea02c9016bde92c6840aa58805d5fc588 + helper_dxvk_d9vk "${file1}" "5.8" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1072 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.7.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1072() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.7.2/dxvk-1.7.2.tar.gz" 1662f6bda93faf4f6c8b57d656779b08925889dd6b794114be874d6deb97e15b + helper_dxvk_d9vk "${file1}" "5.8" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1073 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.7.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1073() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.7.3/dxvk-1.7.3.tar.gz" e4c2444256b7ad63455fa6329638e3f42900ec7462dc9c26da56187a2040aba0 + helper_dxvk_d9vk "${file1}" "5.8" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1080 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.8)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.8.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1080() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.8/dxvk-1.8.tar.gz" e84f7ac494ac7f5013976744470899226d145e29617c407ff52870055bda476e + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1081 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.8.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.8.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1081() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.8.1/dxvk-1.8.1.tar.gz" 756a09c46f8279ade84456e3af038f64613a51e00a2d4cfffa4c91c10ede60e8 + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1090 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.9)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.9.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1090() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.9/dxvk-1.9.tar.gz" 433868f8783887192a04b788203d6b4effe3168be762dd60df1c1b564421a6ed + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1091 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.9.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.9.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1091() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.9.1/dxvk-1.9.1.tar.gz" ef7591d6effcca8a8352cea4fa50fe73aa1f10fd89cb475f2f14236e4340a007 + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1092 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.9.2)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.9.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1092() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.9.2/dxvk-1.9.2.tar.gz" 24bcee655767f4731b8d3883dd93ba4edc7f1e87421e15fab19499d57236b8e9 + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1093 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.9.3)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.9.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1093() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.9.3/dxvk-1.9.3.tar.gz" cfcf4fac1f6bfc5a09183e77362a0af7fead4e54961bb548aef3e6cddadbe9bf + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1094 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.9.4)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.9.4.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1094() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.9.4/dxvk-1.9.4.tar.gz" 854f564c3b58a4cdf7b16eb9a4b6bc6ddc0f83d68c4f979a529fc23f7a770502 + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1100 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.10)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.10.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1100() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.10/dxvk-1.10.tar.gz" a15bc7c1df66158a205c498883b0b216390d58f4a128657990af357431b9ce77 + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +w_metadata dxvk1101 dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.10.1)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + file1="dxvk-1.10.1.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk1101() +{ + # https://github.com/doitsujin/dxvk + w_download "https://github.com/doitsujin/dxvk/releases/download/v1.10.1/dxvk-1.10.1.tar.gz" dc349482cb0a73d4e29c82f8e9ff6031e09e176e84a97ffe91eac64422b307aa + helper_dxvk_d9vk "${file1}" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" +} + +#---------------------------------------------------------------- + +w_metadata dxvk dlls \ + title="Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (latest)" \ + publisher="Philip Rebohle" \ + year="2017" \ + media="download" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/d3d10core.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/d3d11.dll" \ + installed_file4="${W_SYSTEM32_DLLS_WIN}/dxgi.dll" + +load_dxvk() +{ + # https://github.com/doitsujin/dxvk + _W_dxvk_version="$(w_get_github_latest_release doitsujin dxvk)" + _W_dxvk_version="${_W_dxvk_version#v}" + w_linkcheck_ignore=1 w_download "https://github.com/doitsujin/dxvk/releases/download/v${_W_dxvk_version}/dxvk-${_W_dxvk_version}.tar.gz" + helper_dxvk_d9vk "dxvk-${_W_dxvk_version}.tar.gz" "5.14" "1.2.140" "dxgi,d3d9,d3d10core,d3d11" + unset _W_dxvk_version +} + +#---------------------------------------------------------------- + +# $1 - vkd3d-proton archive name (required) +helper_vkd3d_proton() +{ + _W_package_archive="${1}" + + _W_dll_overrides="d3d12" + + case "${_W_package_archive}" in + vkd3d-proton*) + _W_repository="HansKristian-Work/vkd3d-proton" + ;; + *) + w_die "parameter (1): unsupported package archive repository: '${_W_package_archive}'; supported: vkd3d-proton" + ;; + esac + + case "${_W_package_archive}" in + *master*) + _W_package_dir="build/vkd3d-proton-release" + _W_package_version="master" + w_warn "Using master ${_W_repository} build" + ;; + *) + _W_package_dir="${_W_package_archive%.tar.zst}" + _W_package_version="${_W_package_dir#*-}" + _W_package_version="${_W_package_version#*-}" + w_warn "Please refer to ${_W_repository#*/} version ${_W_package_version} release notes... See: https://github.com/${_W_repository}/releases/tag/${_W_package_version}" + ;; + esac + w_warn "Please refer to current vkd3d-proton base graphics driver requirements... See: https://github.com/HansKristian-Work/vkd3d-proton#drivers" + + if [ "${_W_package_archive##*.}" = "zip" ]; then + w_try_unzip "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${_W_package_archive}" + elif [ "${_W_package_archive##*.}" = "zst" ]; then + w_try_cd "${W_TMP}" + w_try tar -I zstd -xvf "${W_CACHE}/${W_PACKAGE}/${_W_package_archive}" + else + w_try_cd "${W_TMP}" + w_try tar -zxf "${W_CACHE}/${W_PACKAGE}/${_W_package_archive}" + fi + + for _W_dll in ${_W_dll_overrides}; do + w_try mv "${W_TMP}/${_W_package_dir}/x86/${_W_dll}.dll" "${W_SYSTEM32_DLLS}/" + done + if test "${W_ARCH}" = "win64"; then + for _W_dll in ${_W_dll_overrides}; do + w_try mv "${W_TMP}/${_W_package_dir}/x64/${_W_dll}.dll" "${W_SYSTEM64_DLLS}/" + done + fi + # shellcheck disable=SC2086 + w_override_dlls native ${_W_dll_overrides} + + unset _W_dll _W_dll_overrides _W_package_archive _W_package_dir \ + _W_package_version _W_repository +} + +#---------------------------------------------------------------- + +w_metadata vkd3d dlls \ + title="Vulkan-based D3D12 implementation for Linux / Wine (latest)" \ + publisher="Hans-Kristian Arntzen " \ + year="2020" \ + media="download" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d12.dll" + +load_vkd3d() +{ + # https://github.com/HansKristian-Work/vkd3d-proton + _W_vkd3d_proton_version="$(w_get_github_latest_release HansKristian-Work vkd3d-proton)" + _W_vkd3d_proton_version="${_W_vkd3d_proton_version#v}" + w_linkcheck_ignore=1 w_download "https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v${_W_vkd3d_proton_version}/vkd3d-proton-${_W_vkd3d_proton_version}.tar.zst" + helper_vkd3d_proton "vkd3d-proton-${_W_vkd3d_proton_version}.tar.zst" + unset _W_vkd3d_proton_version +} + +#---------------------------------------------------------------- + +w_metadata dmusic32 dlls \ + title="MS dmusic32.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="../directx9/directx_apr2006_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmusic32.dll" + +load_dmusic32() +{ + w_download_to directx9 https://web.archive.org/web/20100920035904/https://download.microsoft.com/download/3/9/7/3972f80c-5711-4e14-9483-959d48a2d03b/directx_apr2006_redist.exe dd8c3d401efe4561b67bd88475201b2f62f43cd23e4acc947bb34a659fa74952 + + w_try_cabextract -d "${W_TMP}" -F DirectX.cab "${W_CACHE}"/directx9/directx_apr2006_redist.exe + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F dmusic32.dll "${W_TMP}"/DirectX.cab + + w_override_dlls native dmusic32 +} + +#---------------------------------------------------------------- + +w_metadata dmband dlls \ + title="MS dmband.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmband.dll" + +load_dmband() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmband.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmband + w_try_regsvr dmband.dll +} + +#---------------------------------------------------------------- + +w_metadata dmcompos dlls \ + title="MS dmcompos.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmcompos.dll" + +load_dmcompos() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmcompos.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmcompos + w_try_regsvr dmcompos.dll +} + +#---------------------------------------------------------------- + +w_metadata dmime dlls \ + title="MS dmime.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmime.dll" + +load_dmime() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmime.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmime + w_try_regsvr dmime.dll +} + +#---------------------------------------------------------------- + +w_metadata dmloader dlls \ + title="MS dmloader.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmloader.dll" + +load_dmloader() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmloader.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmloader + w_try_regsvr dmloader.dll +} + +#---------------------------------------------------------------- + +w_metadata dmscript dlls \ + title="MS dmscript.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmscript.dll" + +load_dmscript() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmscript.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmscript + w_try_regsvr dmscript.dll +} + +#---------------------------------------------------------------- + +w_metadata dmstyle dlls \ + title="MS dmstyle.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmstyle.dll" + +load_dmstyle() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmstyle.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmstyle + w_try_regsvr dmstyle.dll +} + +#---------------------------------------------------------------- + +w_metadata dmsynth dlls \ + title="MS dmsynth.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmsynth.dll" + +load_dmsynth() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmsynth.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmsynth + w_try_regsvr dmsynth.dll +} + +#---------------------------------------------------------------- + +w_metadata dmusic dlls \ + title="MS dmusic.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dmusic.dll" + +load_dmusic() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dmusic.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dmusic + w_try_regsvr dmusic.dll +} + +#---------------------------------------------------------------- + +w_metadata dswave dlls \ + title="MS dswave.dll from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dswave.dll" + +load_dswave() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dswave.dll' "${W_TMP}/dxnt.cab" + + w_override_dlls native dswave + w_try_regsvr dswave.dll +} + +#---------------------------------------------------------------- + +w_metadata dotnet11 dlls \ + title="MS .NET 1.1" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + conflicts="dotnet20sdk" \ + file1="dotnetfx.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v1.1.4322/ndpsetup.ico" + +load_dotnet11() +{ + # The installer itself doesn't support 64-bit + w_package_unsupported_win64 + + # https://www.microsoft.com/en-us/download/details.aspx?id=26 + w_download https://web.archive.org/web/20210505032023/http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe ba0e58ec93f2ffd54fc7c627eeca9502e11ab3c6fc85dcbeff113bd61d995bce + + w_call remove_mono + w_call corefonts + w_call fontfix + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + # Use builtin regsvcs.exe to work around https://bugs.winehq.org/show_bug.cgi?id=25120 + if [ -n "${W_OPT_UNATTENDED}" ]; then + WINEDLLOVERRIDES="regsvcs.exe=b" w_ahk_do " + SetTitleMatchMode, 2 + run, dotnetfx.exe /q /C:\"install /q\" + + Loop + { + sleep 1000 + ifwinexist, Fatal error, Failed to delay load library + { + WinClose, Fatal error, Failed to delay load library + continue + } + Process, exist, dotnetfx.exe + dotnet_pid = %ErrorLevel% ; Save the value immediately since ErrorLevel is often changed. + if dotnet_pid = 0 + { + break + } + } + " + else + WINEDLLOVERRIDES="regsvcs.exe=b" w_try "${WINE}" dotnetfx.exe + fi + + w_override_dlls native mscorwks + w_override_dlls native fusion + + W_NGEN_CMD="w_try ${WINE} ${W_DRIVE_C}/windows/Microsoft.NET/Framework/v1.1.4322/ngen.exe executequeueditems" +} + +verify_dotnet11() +{ + w_dotnet_verify dotnet11 +} + +#---------------------------------------------------------------- + +w_metadata dotnet11sp1 dlls \ + title="MS .NET 1.1 SP1" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="NDP1.1sp1-KB867460-X86.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v1.1.4322/CONFIG/web_hightrust.config.default" + +load_dotnet11sp1() +{ + # The installer itself doesn't support 64-bit + w_package_unsupported_win64 + + w_download https://download.microsoft.com/download/8/b/4/8b4addd8-e957-4dea-bdb8-c4e00af5b94b/NDP1.1sp1-KB867460-X86.exe 2c0a35409ff0873cfa28b70b8224e9aca2362241c1f0ed6f622fef8d4722fd9a + + w_call remove_mono + w_call dotnet11 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + # Use builtin regsvcs.exe to work around https://bugs.winehq.org/show_bug.cgi?id=25120 + if [ -n "${W_OPT_UNATTENDED}" ]; then + WINEDLLOVERRIDES="regsvcs.exe=b" w_ahk_do " + SetTitleMatchMode, 2 + run, NDP1.1sp1-KB867460-X86.exe /q /C:"install /q" + + Loop + { + sleep 1000 + ifwinexist, Fatal error, Failed to delay load library + { + WinClose, Fatal error, Failed to delay load library + continue + } + Process, exist, dotnetfx.exe + dotnet_pid = %ErrorLevel% ; Save the value immediately since ErrorLevel is often changed. + if dotnet_pid = 0 + { + break + } + } + " + else + WINEDLLOVERRIDES="regsvcs.exe=b" w_try "${WINE}" "${W_CACHE}"/dotnet11sp1/NDP1.1sp1-KB867460-X86.exe + fi + + w_override_dlls native mscorwks + + W_NGEN_CMD="w_try ${WINE} ${W_DRIVE_C}/windows/Microsoft.NET/Framework/v1.1.4322/ngen.exe executequeueditems" +} + +verify_dotnet11sp1() +{ + w_dotnet_verify dotnet11sp1 +} + +#---------------------------------------------------------------- + +w_metadata dotnet20 dlls \ + title="MS .NET 2.0" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + conflicts="dotnet20sp1 dotnet20sp2 dotnet30sp1 dotnet35" \ + file1="dotnetfx.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v2.0.50727/MSBuild.exe" + +load_dotnet20() +{ + w_call remove_mono + w_call fontfix + + if [ "${W_ARCH}" = "win32" ]; then + # https://www.microsoft.com/en-us/download/details.aspx?id=19 + w_download https://download.lenovo.com/ibmdl/pub/pc/pccbbs/thinkvantage_en/dotnetfx.exe 46693d9b74d12454d117cc61ff2e9481cabb100b4d74eb5367d3cf88b89a0e71 + + # Needed for https://bugs.winehq.org/show_bug.cgi?id=12401 + w_set_winver win2k + + # if dotnet11 if installed there is a warning dialog, but it still verifies + # dotnet11 doesn't work on 64-bit, so no need to run there + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if [ -n "${W_OPT_UNATTENDED}" ]; then + w_ahk_do " + SetTitleMatchMode, 2 + ; FIXME: this isn't silent? + run, dotnetfx.exe /q /c:\"install.exe /q\" + + Loop + { + sleep 1000 + ifwinexist, .NET Framework Initialization Error + { + WinClose, .NET Framework Initialization Error + continue + } + + Process, exist, dotnetfx.exe + dotnet_pid = %ErrorLevel% + if dotnet_pid = 0 + { + break + } + } + " + else + w_try_ms_installer "${WINE}" dotnetfx.exe ${W_OPT_UNATTENDED:+/q /c:"install.exe /q"} + fi + + w_set_winver 'default' + + # We can't stop installing dotnet20 in win2k mode until Wine supports + # reparse/junction points + # (see https://bugs.winehq.org/show_bug.cgi?id=10467#c57 ) + # so for now just remove the bogus msvc*80.dll files it installs. + # See also https://bugs.winehq.org/show_bug.cgi?id=16577 + # This affects Victoria 2 demo, see https://forum.paradoxplaza.com/forum/showthread.php?p=11523967 + rm -f "${W_SYSTEM32_DLLS}"/msvc?80.dll + elif [ "${W_ARCH}" = "win64" ]; then + w_download https://download.microsoft.com/download/a/3/f/a3f1bf98-18f3-4036-9b68-8e6de530ce0a/NetFx64.exe 7ea86dca8eeaedcaa4a17370547ca2cea9e9b6774972b8e03d2cb1fb0e798669 + + # validates successfully in win7 mode wine-3.19, so not setting winversion + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" NetFx64.exe ${W_OPT_UNATTENDED:+/q /c:"install.exe /q"} + fi + + w_override_dlls native mscorwks + + W_NGEN_CMD="w_try ${WINE} ${W_DRIVE_C}/windows/Microsoft.NET/Framework/v2.0.50727/ngen.exe executequeueditems" +} + +verify_dotnet20() +{ + w_package_broken_win64 https://bugs.winehq.org/show_bug.cgi?id=49550 5.7 + + w_dotnet_verify dotnet20 +} + +#---------------------------------------------------------------- + +w_metadata dotnet20sdk apps \ + title="MS .NET 2.0 SDK" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + conflicts="dotnet11 dotnet20sp1 dotnet20sp2 dotnet30 dotnet40" \ + file1="setup.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Microsoft.NET/SDK/v2.0/Bin/cordbg.exe" + +load_dotnet20sdk() +{ + w_package_unsupported_win64 + + # https://www.microsoft.com/en-us/download/details.aspx?id=19988 + w_download https://download.microsoft.com/download/c/4/b/c4b15d7d-6f37-4d5a-b9c6-8f07e7d46635/setup.exe 1d7337bfbb2c65f43c82d188688ce152af403bcb67a2cc2a3cc68a580ecd8200 + + w_call remove_mono + + w_call dotnet20 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run, setup.exe ${W_OPT_UNATTENDED:+/q /c:"install.exe /q"} + + Loop + { + sleep 1000 + ifwinexist, Microsoft Document Explorer, Application Data folder + { + WinClose, Microsoft Document Explorer, Application Data folder + continue + } + ifwinexist, Microsoft CLR Debugger, Application Data folder + { + WinClose, Microsoft CLR Debugger, Application Data folder + continue + } + ; FIXME: only appears if dotnet30sp1 is run first? + ifwinexist, Microsoft .NET Framework 2.0 SDK Setup, This wizard will guide + { + ControlClick, Button22, Microsoft .NET Framework 2.0 SDK Setup + Winwait, Microsoft .NET Framework 2.0 SDK Setup, By clicking + sleep 100 + ControlClick, Button21 + sleep 100 + ControlClick, Button18 + WinWait, Microsoft .NET Framework 2.0 SDK Setup, Select from + sleep 100 + ControlClick, Button12 + WinWait, Microsoft .NET Framework 2.0 SDK Setup, Type the path + sleep 100 + ControlClick, Button8 + WinWait, Microsoft .NET Framework 2.0 SDK Setup, successfully installed + sleep 100 + ControlClick, Button2 + sleep 100 + } + Process, exist, setup.exe + dotnet_pid = %ErrorLevel% + if dotnet_pid = 0 + { + break + } + } + " + +} + +#---------------------------------------------------------------- + +w_metadata dotnet20sp1 dlls \ + title="MS .NET 2.0 SP1" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + conflicts="dotnet20sp2" \ + file1="NetFx20SP1_x86.exe" \ + installed_file1="c:/windows/dotnet20sp1.installed.workaround" + +load_dotnet20sp1() +{ + w_call remove_mono + + # Not sure when exactly it was fixed, but it works with 4.0+, and doesn't in 3.0 + # Given that 3.x is deprecated, not worth looking into. + # See https://github.com/Winetricks/winetricks/pull/1271 + # https://bugs.winehq.org/show_bug.cgi?id=47484, et al + if w_wine_version_in 4.0, ; then + WINEDLLOVERRIDES="regsvcs.exe,mscorsvw.exe=b;${WINEDLLOVERRIDES}" + export WINEDLLOVERRIDES + else + WINEDLLOVERRIDES="ngen.exe,regsvcs.exe,mscorsvw.exe=b;${WINEDLLOVERRIDES}" + export WINEDLLOVERRIDES + fi + + if [ "${W_ARCH}" = "win32" ]; then + # https://www.microsoft.com/en-us/download/details.aspx?id=16614 + w_download https://download.microsoft.com/download/0/8/c/08c19fa4-4c4f-4ffb-9d6c-150906578c9e/NetFx20SP1_x86.exe c36c3a1d074de32d53f371c665243196a7608652a2fc6be9520312d5ce560871 + exe="NetFx20SP1_x86.exe" + + w_warn "Setting Windows version so installer works" + w_set_winver win2k + elif [ "${W_ARCH}" = "win64" ]; then + # https://www.microsoft.com/en-us/download/details.aspx?id=6041 + w_download https://download.microsoft.com/download/9/8/6/98610406-c2b7-45a4-bdc3-9db1b1c5f7e2/NetFx20SP1_x64.exe 1731e53de5f48baae0963677257660df1329549e81c48b4d7db7f7f3f2329aab + exe="NetFx20SP1_x64.exe" + + w_warn "Setting Windows version so installer works" + w_set_winver winxp + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try_ms_installer "${WINE}" "${exe}" ${W_OPT_UNATTENDED:+/q} + + if [ "${W_ARCH}" = "win32" ]; then + # We can't stop installing dotnet20sp1 in win2k mode until Wine supports + # reparse/junction points + # (see https://bugs.winehq.org/show_bug.cgi?id=10467#c57 ) + # so for now just remove the bogus msvc*80.dll files it installs. + # See also https://bugs.winehq.org/show_bug.cgi?id=16577 + # This affects Victoria 2 demo, see https://forum.paradoxplaza.com/forum/showthread.php?p=11523967 + rm -f "${W_SYSTEM32_DLLS}"/msvc?80.dll + + fi + + w_set_winver 'default' + + W_NGEN_CMD="w_try ${WINE} ${W_DRIVE_C}/windows/Microsoft.NET/Framework/v2.0.50727/ngen.exe executequeueditems" + + w_override_dlls native mscorwks + + # Installs the same file(name)s as dotnet35sp1, let users install dotnet35sp1 after dotnet20sp1 + w_try touch "${W_WINDIR_UNIX}/dotnet20sp1.installed.workaround" +} + +verify_dotnet20sp1() +{ + w_dotnet_verify dotnet20sp1 +} + +#---------------------------------------------------------------- + +w_metadata dotnet20sp2 dlls \ + title="MS .NET 2.0 SP2" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + conflicts="dotnet11" \ + file1="NetFx20SP2_x86.exe" \ + installed_file1="c:/windows/winsxs/manifests/x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca.cat" + +load_dotnet20sp2() +{ + w_call remove_mono + + # Not sure when exactly it was fixed, but it works with 4.0+, and doesn't in 3.0 + # Given that 3.x is deprecated, not worth looking into. + # See https://github.com/Winetricks/winetricks/pull/1271 + # https://bugs.winehq.org/show_bug.cgi?id=47484, et al + if w_wine_version_in 4.0, ; then + WINEDLLOVERRIDES="regsvcs.exe,mscorsvw.exe=b;${WINEDLLOVERRIDES}" + export WINEDLLOVERRIDES + else + WINEDLLOVERRIDES="ngen.exe,regsvcs.exe,mscorsvw.exe=b;${WINEDLLOVERRIDES}" + export WINEDLLOVERRIDES + fi + w_warn "Setting Windows version so installer works" + w_set_winver winxp + + if [ "${W_ARCH}" = "win32" ]; then + # https://www.microsoft.com/en-us/download/details.aspx?id=1639 + w_download https://web.archive.org/web/20210329003118/http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe 6e3f363366e7d0219b7cb269625a75d410a5c80d763cc3d73cf20841084e851f + exe="NetFx20SP2_x86.exe" + elif [ "${W_ARCH}" = "win64" ]; then + # https://www.microsoft.com/en-us/download/details.aspx?id=1639 + w_download https://web.archive.org/web/20210328110521/http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x64.exe 430315c97c57ac158e7311bbdbb7130de3e88dcf5c450a25117c74403e558fbe + exe="NetFx20SP2_x64.exe" + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try_ms_installer "${WINE}" "${exe}" ${W_OPT_UNATTENDED:+ /q /c:"install.exe /q"} + + if [ "${W_ARCH}" = "win32" ]; then + # We can't stop installing dotnet20sp1 in win2k mode until Wine supports + # reparse/junction points + # (see https://bugs.winehq.org/show_bug.cgi?id=10467#c57 ) + # so for now just remove the bogus msvc*80.dll files it installs. + # See also https://bugs.winehq.org/show_bug.cgi?id=16577 + # This affects Victoria 2 demo, see https://forum.paradoxplaza.com/forum/showthread.php?p=11523967 + rm -f "${W_SYSTEM32_DLLS}"/msvc?80.dll + fi + + w_set_winver 'default' + w_override_dlls native mscorwks + + W_NGEN_CMD="w_try ${WINE} ${W_DRIVE_C}/windows/Microsoft.NET/Framework/v2.0.50727/ngen.exe executequeueditems" +} + +verify_dotnet20sp2() +{ + w_dotnet_verify dotnet20sp2 +} + +#---------------------------------------------------------------- + +w_metadata dotnet30 dlls \ + title="MS .NET 3.0" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + conflicts="dotnet11 dotnet30sp1 dotnet35 dotnet35sp1" \ + file1="dotnetfx3.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v3.0/Microsoft .NET Framework 3.0/logo.bmp" + +load_dotnet30() +{ + # I can't find a 64-bit installer anywhere + w_package_unsupported_win64 + + # Originally at https://msdn.microsoft.com/en-us/netframework/bb264589.aspx + # No longer on microsoft.com, and archive.org is unreliable. Choose amongst the oldest/most reliable looking from + # http://www.filewatcher.com/m/dotnetfx3.exe.52770576-0.html + # (and verify sha256sum, of course ;)) + # 2017/04/20: http://descargas.udenar.edu.co/Framework.net/dotnetfx3.exe + # 2019/08/18: ftp://support.danbit.dk/I/IPP15-C2D/Net%20Framework%203.0/dotnetfx3.exe + # 2020/04/12: couldn't find a working mirror, so back to archive.org for now: + w_download https://web.archive.org/web/20061130220825/http://download.microsoft.com/download/3/F/0/3F0A922C-F239-4B9B-9CB0-DF53621C57D9/dotnetfx3.exe 6cf8921e00f52bbd888aa7a520a7bac47e818e2a850bcc44494c64d6cbfafdac + + w_call remove_mono + + if test -f /proc/sys/kernel/yama/ptrace_scope; then + case $(cat /proc/sys/kernel/yama/ptrace_scope) in + 0) ;; + *) w_warn "If install fails, set /proc/sys/kernel/yama/ptrace_scope to 0. See https://bugs.winehq.org/show_bug.cgi?id=30410" ;; + esac + fi + + case "${W_PLATFORM}" in + windows_cmd) + osver=$(cmd /c ver) + case "${osver}" in + *Version?6*) w_die "Vista and up bundle .NET 3.0, so you can't install it like this" ;; + esac + ;; + esac + + # AF's workaround to avoid long pause + LANGPACKS_BASE_PATH="${W_WINDIR_UNIX}/SYSMSICache/Framework/v3.0" + test -d "${LANGPACKS_BASE_PATH}" || mkdir -p "${LANGPACKS_BASE_PATH}" + # shellcheck disable=SC1010 + for lang in ar cs da de el es fi fr he it jp ko nb nl pl pt-BR pt-PT ru sv tr zh-CHS zh-CHT; do + ln -sf "${W_SYSTEM32_DLLS}/spupdsvc.exe" "${LANGPACKS_BASE_PATH}/dotnetfx3langpack${lang}.exe" + done + + w_set_winver winxp + + # Delete FontCache 3.0 service, it's in Wine for Mono, breaks native .NET + # OK if this fails, that just means you have an older Wine. + "${WINE}" sc delete "FontCache3.0.0.0" + + # Not sure when exactly it was fixed, but it works with 4.0+, and doesn't in 3.0 + # Given that 3.x is deprecated, not worth looking into. + # See https://github.com/Winetricks/winetricks/pull/1271 + # https://bugs.winehq.org/show_bug.cgi?id=47484, et al + if w_wine_version_in 4.0, ; then + WINEDLLOVERRIDES="mscorsvw.exe=b;${WINEDLLOVERRIDES}" + export WINEDLLOVERRIDES + else + WINEDLLOVERRIDES="ngen.exe,mscorsvw.exe=b;${WINEDLLOVERRIDES}" + export WINEDLLOVERRIDES + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_warn "Installing .NET 3.0 runtime silently, as otherwise it gets hidden behind taskbar. Installation usually takes about 3 minutes." + w_try "${WINE}" "${file1}" /q /c:"install.exe /q" + + w_override_dlls native mscorwks + w_set_winver 'default' + + # Doesn't install any ngen.exe + # W_NGEN_CMD="" +} + +verify_dotnet30() +{ + w_dotnet_verify dotnet30 +} + +#---------------------------------------------------------------- + +w_metadata dotnet30sp1 dlls \ + title="MS .NET 3.0 SP1" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + conflicts="dotnet11 dotnet20sdk" \ + file1="NetFx30SP1_x86.exe" \ + installed_file1="c:/windows/dotnet30sp1.installed.workaround" + +load_dotnet30sp1() +{ + # I can't find a 64-bit installer anywhere + w_package_unsupported_win64 + + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=47436" 4.8 4.15 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=48277" 4.16 4.21 + + # And a third way, but only with mingw enabled in wine-4.12.1 through wine-4.14 + w_package_broken_mingw "https://bugs.winehq.org/show_bug.cgi?id=47484" 4.12.1 4.14 + + # crashes on install: + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49831" 5.17 6.0 + + # XpsFilt.dll doesn't get installed (not sure what version exactly causes it, bug 49831 muddies things): + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=50463" 5.17 6.0 + + # FIXME: URL? + w_download https://download.microsoft.com/download/8/F/E/8FEEE89D-9E4F-4BA3-993E-0FFEA8E21E1B/NetFx30SP1_x86.exe 3100df4d4db3965ead9520c887a534115cf6fc7ba100abde45226958b865695b + # Recipe from https://bugs.winehq.org/show_bug.cgi?id=25060#c10 + # 2020/10/19: w_download https://download.microsoft.com/download/2/5/2/2526f55d-32bc-410f-be18-164ba67ae07d/XPSEP%20XP%20and%20Server%202003%2032%20bit.msi 630c86a202c40cbcd430701977d4f1fefa6151624ef9a4870040dff45e547dea "XPSEP XP and Server 2003 32 bit.msi" + w_download https://web.archive.org/web/20200810211554if_/https://download.microsoft.com/download/2/5/2/2526f55d-32bc-410f-be18-164ba67ae07d/XPSEP%20XP%20and%20Server%202003%2032%20bit.msi 630c86a202c40cbcd430701977d4f1fefa6151624ef9a4870040dff45e547dea "XPSEP XP and Server 2003 32 bit.msi" + + w_call remove_mono + w_call dotnet30 + w_wineserver -w + w_call dotnet20sp1 + w_wineserver -w + + if w_workaround_wine_bug 47436 "Installing native prntvpt" 4.11,4.15 ;then + w_call prntvpt + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + "${WINE}" reg add "HKLM\\Software\\Microsoft\\Net Framework Setup\\NDP\\v3.0" /v Version /t REG_SZ /d "3.0" /f + "${WINE}" reg add "HKLM\\Software\\Microsoft-\\Net Framework Setup\\NDP\\v3.0" /v SP /t REG_DWORD /d 0001 /f + + w_set_winver winxp + + "${WINE}" sc delete FontCache3.0.0.0 + + w_try_ms_installer "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/q} + + w_override_dlls native mscorwks + w_set_winver 'default' + + # Doesn't install any ngen.exe + # W_NGEN_CMD="" + + # Do not rely on temporary files. As a workaround, touch a file instead so that we know it's been installed for list-installed + w_try touch "${W_WINDIR_UNIX}/dotnet30sp1.installed.workaround" +} + +verify_dotnet30sp1() +{ + w_dotnet_verify dotnet30sp1 +} + +#---------------------------------------------------------------- + +w_metadata dotnet35 dlls \ + title="MS .NET 3.5" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + conflicts="dotnet11 dotnet20sdk dotnet20sp2 dotnet30" \ + file1="dotnetfx35.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v3.5/MSBuild.exe" + +load_dotnet35() +{ + # actually, fixed in 6.0-rc2, but w_package_broken() doesn't handle rc versions well + w_package_broken_win64 https://bugs.winehq.org/show_bug.cgi?id=49690 5.12 6.0 + + w_verify_cabextract_available + + # https://www.microsoft.com/en-us/download/details.aspx?id=21 + w_download https://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe 3e3a4104bad9a0c270ed5cbe8abb986de9afaf0281a98998bdbdc8eaab85c3b6 + + w_call remove_mono + + w_set_winver winxp + + w_override_dlls native mscoree mscorwks + w_wineserver -w + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try_ms_installer "${WINE}" "${file1}" /lang:ENU ${W_OPT_UNATTENDED:+/q} + + w_set_winver 'default' + + # Doesn't install any ngen.exe + # W_NGEN_CMD="" +} + +verify_dotnet35() +{ + w_dotnet_verify dotnet35 +} + +#---------------------------------------------------------------- + +w_metadata dotnet35sp1 dlls \ + title="MS .NET 3.5 SP1" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + conflicts="dotnet11 dotnet20sp1" \ + file1="dotnetfx35.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v3.5/msbuild.exe.config" + +load_dotnet35sp1() +{ + w_package_broken_win64 https://bugs.winehq.org/show_bug.cgi?id=49690 5.12 6.0 + + w_verify_cabextract_available + + # Official version. See https://dotnet.microsoft.com/en-us/download/dotnet-framework/net35-sp1 + w_download https://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe 0582515bde321e072f8673e829e175ed2e7a53e803127c50253af76528e66bc1 + + w_call remove_mono + + w_set_winver winxp + + w_override_dlls native mscoree mscorwks + w_wineserver -w + + # The installer is braindead and picks the lowest drive letter that's writable + # winetricks_set_wineprefix(), which is called by w_do_call() sets up this symlink so that wine + # can make a windows path to the cache (which is removed during cleanup). + # To avoid that, we sylmink the executable directly and remove the symlink + # and then the installer leaves the cruft on C:\ instead (assuming there's no other drives mounted). + # + # If the user has other drives mounted (or maybe if Z:\ is writable), + # then they have to clean up the mess themselves, sorry. + w_try rm "${WINETRICKS_CACHE_SYMLINK}" + w_try_cd "${W_TMP}" + w_try ln -s "${W_CACHE}/${W_PACKAGE}/${file1}" . + w_try_ms_installer "${WINE}" dotnetfx35.exe /lang:ENU ${W_OPT_UNATTENDED:+/q} + w_try rm dotnetfx35.exe + + w_set_winver 'default' + + # Doesn't install any ngen.exe + # W_NGEN_CMD="" +} + +verify_dotnet35sp1() +{ + w_dotnet_verify dotnet35sp1 +} + +#---------------------------------------------------------------- + +w_metadata dotnet40 dlls \ + title="MS .NET 4.0" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + conflicts="dotnet20sdk" \ + file1="dotNetFx40_Full_x86_x64.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v4.0.30319/ngen.exe" + +load_dotnet40() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + case "${W_PLATFORM}" in + windows_cmd) ;; + *) w_warn "dotnet40 does not yet fully work or install on wine. Caveat emptor." ;; + esac + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net40 + w_download https://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe 65e064258f2e418816b304f646ff9e87af101e4c9552ab064bb74d281c38659f + + w_call remove_mono + + w_call winxp + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" dotNetFx40_Full_x86_x64.exe ${W_OPT_UNATTENDED:+/q /c:"install.exe /q"} + + w_override_dlls native mscoree + + "${WINE}" reg add "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full" /v Install /t REG_DWORD /d 0001 /f + "${WINE}" reg add "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full" /v Version /t REG_SZ /d "4.0.30319" /f + + W_NGEN_CMD="${WINE} ${WINEPREFIX}/drive_c/windows/Microsoft.NET/Framework/v4.0.30319/ngen.exe executequeueditems" + + # Avoid a popup on WINEPREFIX updates, see https://bugs.winehq.org/show_bug.cgi?id=41727#c5 + "${WINE}" reg add "HKLM\\Software\\Microsoft\\.NETFramework" /v OnlyUseLatestCLR /t REG_DWORD /d 0001 /f + + w_set_winver 'default' +} + +verify_dotnet40() +{ + w_dotnet_verify dotnet40 +} + +#---------------------------------------------------------------- + +w_metadata dotnet40_kb2468871 dlls \ + title="MS .NET 4.0 KB2468871" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + conflicts="dotnet20sdk" \ + file1="NDP40-KB2468871-v2-x86.exe" + +load_dotnet40_kb2468871() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_call dotnet40 + + # Install KB2468871: + if [ "${W_ARCH}" = "win32" ]; then + w_download https://download.microsoft.com/download/2/B/F/2BF4D7D1-E781-4EE0-9E4F-FDD44A2F8934/NDP40-KB2468871-v2-x86.exe 8822672fc864544e0766c80b635973bd9459d719b1af75f51483ff36cfb26f03 + w_try_7z "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/NDP40-KB2468871-v2-x86.exe" NDP40-KB2468871.msp + elif [ "${W_ARCH}" = "win64" ]; then + w_download https://download.microsoft.com/download/2/B/F/2BF4D7D1-E781-4EE0-9E4F-FDD44A2F8934/NDP40-KB2468871-v2-x64.exe b1b53c3953377b111fe394dd57592d342cfc8a3261a5575253b211c1c2e48ff8 + w_try_7z "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/NDP40-KB2468871-v2-x64.exe" NDP40-KB2468871.msp + fi + + w_try_cd "${W_TMP}" + w_try "${WINE}" msiexec /p NDP40-KB2468871.msp + + w_set_winver 'default' +} + +verify_dotnet40_kb2468871() +{ + w_dotnet_verify dotnet40 +} + +#---------------------------------------------------------------- + +w_metadata dotnet45 dlls \ + title="MS .NET 4.5" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + conflicts="dotnet20sdk" \ + file1="dotnetfx45_full_x86_x64.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v4.0.30319/Microsoft.Windows.ApplicationServer.Applications.45.man" + +load_dotnet45() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49897" 5.18 6.6 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + w_verify_cabextract_available + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net45 + w_download https://download.microsoft.com/download/b/a/4/ba4a7e71-2906-4b2d-a0e1-80cf16844f5f/dotnetfx45_full_x86_x64.exe a04d40e217b97326d46117d961ec4eda455e087b90637cb33dd6cc4a2c228d83 + + w_call remove_mono + + # See https://appdb.winehq.org/objectManager.php?sClass=version&iId=25478 for Focht's recipe + + # Seems unneeded in wine-2.0 + # w_call dotnet35 + w_call dotnet40 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" dotnetfx45_full_x86_x64.exe ${W_OPT_UNATTENDED:+/q /c:"install.exe /q"} + + w_override_dlls native mscoree + + # Avoid a popup on WINEPREFIX updates, see https://bugs.winehq.org/show_bug.cgi?id=41727#c5 + "${WINE}" reg add "HKLM\\Software\\Microsoft\\.NETFramework" /v OnlyUseLatestCLR /t REG_DWORD /d 0001 /f + + w_warn "Setting Windows version to 2003, otherwise applications using .NET 4.5 will subtly fail" + w_set_winver win2k3 +} + +verify_dotnet45() +{ + w_dotnet_verify dotnet45 +} + +#---------------------------------------------------------------- + +w_metadata dotnet452 dlls \ + title="MS .NET 4.5.2" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + conflicts="dotnet20sdk dotnet46 dotnet462" \ + file1="NDP452-KB2901907-x86-x64-AllOS-ENU.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/v4.0.30319/Microsoft.Windows.ApplicationServer.Applications.45.man" + +load_dotnet452() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49897" 5.18 6.6 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + w_verify_cabextract_available + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net452 + w_download https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe 6c2c589132e830a185c5f40f82042bee3022e721a216680bd9b3995ba86f3781 + + w_call remove_mono + + # See https://appdb.winehq.org/objectManager.php?sClass=version&iId=25478 for Focht's recipe + + # Seems unneeded in wine-2.0 + # w_call dotnet35 + w_call dotnet40 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" NDP452-KB2901907-x86-x64-AllOS-ENU.exe ${W_OPT_UNATTENDED:+/q /c:"install.exe /q"} + + w_override_dlls native mscoree + + w_warn "Setting Windows version to 2003, otherwise applications using .NET 4.5 will subtly fail" + w_set_winver win2k3 +} + +verify_dotnet452() +{ + w_dotnet_verify dotnet452 +} + +#---------------------------------------------------------------- + +w_metadata dotnet46 dlls \ + title="MS .NET 4.6" \ + publisher="Microsoft" \ + year="2015" \ + media="download" \ + file1="NDP46-KB3045557-x86-x64-AllOS-ENU.exe" \ + conflicts="dotnet20sdk" \ + installed_file1="c:/windows/Migration/WTR/netfx45_upgradecleanup.inf" + +load_dotnet46() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net46 + w_download https://download.microsoft.com/download/6/F/9/6F9673B1-87D1-46C4-BF04-95F24C3EB9DA/enu_netfx/NDP46-KB3045557-x86-x64-AllOS-ENU_exe/NDP46-KB3045557-x86-x64-AllOS-ENU.exe b21d33135e67e3486b154b11f7961d8e1cfd7a603267fb60febb4a6feab5cf87 + + w_call remove_mono + + w_call dotnet45 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/q /c:"install.exe /q"} + + w_override_dlls native mscoree +} + +verify_dotnet46() +{ + w_dotnet_verify dotnet46 +} + +#---------------------------------------------------------------- + +w_metadata dotnet461 dlls \ + title="MS .NET 4.6.1" \ + publisher="Microsoft" \ + year="2015" \ + media="download" \ + file1="NDP461-KB3102436-x86-x64-AllOS-ENU.exe" \ + conflicts="dotnet20sdk" \ + installed_file1="c:/windows/dotnet461.installed.workaround" + +load_dotnet461() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net461 + w_download https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe beaa901e07347d056efe04e8961d5546c7518fab9246892178505a7ba631c301 + + w_call remove_mono + + w_call dotnet46 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" "${file1}" /sfxlang:1027 ${W_OPT_UNATTENDED:+/q /norestart} + + w_override_dlls native mscoree + + # Do not rely on temporary files. As a workaround, touch a file instead so that we know it's been installed for list-installed + w_try touch "${W_WINDIR_UNIX}/dotnet461.installed.workaround" +} + +verify_dotnet461() +{ + w_dotnet_verify dotnet461 +} + +#---------------------------------------------------------------- + +w_metadata dotnet462 dlls \ + title="MS .NET 4.6.2" \ + publisher="Microsoft" \ + year="2016" \ + media="download" \ + conflicts="dotnet20sdk" \ + installed_file1="c:/windows/dotnet462.installed.workaround" + +load_dotnet462() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net462 + w_download https://download.visualstudio.microsoft.com/download/pr/8e396c75-4d0d-41d3-aea8-848babc2736a/80b431456d8866ebe053eb8b81a168b3/NDP462-KB3151800-x86-x64-AllOS-ENU.exe b4cbb4bc9a3983ec3be9f80447e0d619d15256a9ce66ff414ae6e3856705e237 + file_package="NDP462-KB3151800-x86-x64-AllOS-ENU.exe" + + w_call remove_mono + + w_call dotnet461 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" "${file_package}" ${W_OPT_UNATTENDED:+/sfxlang:1027 /q /norestart} + + w_override_dlls native mscoree + + # Unfortunately, dotnet462 install the same files that dotnet461 does, but with different checksums + # The only unique files are temporary ones. As a workaround, touch a file instead so that we know it's been installed for list-installed + w_try touch "${W_WINDIR_UNIX}/dotnet462.installed.workaround" +} + +verify_dotnet462() +{ + w_dotnet_verify dotnet462 +} + +#---------------------------------------------------------------- + +w_metadata dotnet471 dlls \ + title="MS .NET 4.7.1" \ + publisher="Microsoft" \ + year="2017" \ + media="download" \ + file1="NDP471-KB4033342-x86-x64-AllOS-ENU.exe" \ + conflicts="dotnet20sdk dotnet30sp1" \ + installed_file1="c:/windows/dotnet471.installed.workaround" + +load_dotnet471() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net471 + w_download https://download.visualstudio.microsoft.com/download/pr/4312fa21-59b0-4451-9482-a1376f7f3ba4/9947fce13c11105b48cba170494e787f/NDP471-KB4033342-x86-x64-AllOS-ENU.exe df6e700d37ff416e2e1d8463dededdf76522ceaf5bb4cc3f197a7f2b9eccc4ad + + w_call remove_mono + + w_call dotnet462 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/sfxlang:1027 /q /norestart} + + w_override_dlls native mscoree + + # Do not rely on temporary files. As a workaround, touch a file instead so that we know it's been installed for list-installed + w_try touch "${W_WINDIR_UNIX}/dotnet471.installed.workaround" +} + +verify_dotnet471() +{ + w_dotnet_verify dotnet471 +} + +#---------------------------------------------------------------- + +w_metadata dotnet472 dlls \ + title="MS .NET 4.7.2" \ + publisher="Microsoft" \ + year="2018" \ + media="download" \ + conflicts="dotnet20sdk" \ + installed_file1="c:/windows/dotnet472.installed.workaround" + +load_dotnet472() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52722" 7.5 + + w_package_warn_win64 + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net472 + w_download https://download.visualstudio.microsoft.com/download/pr/1f5af042-d0e4-4002-9c59-9ba66bcf15f6/089f837de42708daacaae7c04b7494db/NDP472-KB4054530-x86-x64-AllOS-ENU.exe 5cb624b97f9fd6d3895644c52231c9471cd88aacb57d6e198d3024a1839139f6 + + w_call remove_mono + + w_call dotnet462 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" NDP472-KB4054530-x86-x64-AllOS-ENU.exe ${W_OPT_UNATTENDED:+/sfxlang:1027 /q /norestart} + + w_override_dlls native mscoree + + # Do not rely on temporary files. As a workaround, touch a file instead so that we know it's been installed for list-installed + w_try touch "${W_WINDIR_UNIX}/dotnet472.installed.workaround" +} + +verify_dotnet472() +{ + w_dotnet_verify dotnet472 +} + +#---------------------------------------------------------------- + +w_metadata dotnet48 dlls \ + title="MS .NET 4.8" \ + publisher="Microsoft" \ + year="2019" \ + media="download" \ + file1="ndp48-x86-x64-allos-enu.exe" \ + conflicts="dotnet20sdk" \ + installed_file1="c:/windows/dotnet48.installed.workaround" + +load_dotnet48() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49532" 5.12 5.18 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49897" 5.18 6.6 + + w_package_warn_win64 + + # Official version. See https://dotnet.microsoft.com/download/dotnet-framework/net48 + w_download https://download.visualstudio.microsoft.com/download/pr/7afca223-55d2-470a-8edc-6a1739ae3252/abd170b4b0ec15ad0222a809b761a036/ndp48-x86-x64-allos-enu.exe 95889d6de3f2070c07790ad6cf2000d33d9a1bdfc6a381725ab82ab1c314fd53 + + w_call remove_mono + + w_call dotnet40 + w_set_winver win7 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + WINEDLLOVERRIDES=fusion=b w_try_ms_installer "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/sfxlang:1027 /q /norestart} + + w_override_dlls native mscoree + + # Do not rely on temporary files. As a workaround, touch a file instead so that we know it's been installed for list-installed + w_try touch "${W_WINDIR_UNIX}/dotnet48.installed.workaround" +} + +verify_dotnet48() +{ + w_dotnet_verify dotnet48 +} + +#---------------------------------------------------------------- + +w_metadata dotnetcore2 dlls \ + title="MS .NET Core Runtime 2.1 LTS" \ + publisher="Microsoft" \ + year="2020" \ + media="download" \ + file1="dotnet-runtime-2.1.17-win-x86.exe" \ + installed_file1="${W_PROGRAMS_WIN}/dotnet/dotnet.exe" + +load_dotnetcore2() +{ + # Official version, see https://dotnet.microsoft.com/download/dotnet-core/2.1 + w_download https://download.visualstudio.microsoft.com/download/pr/73a0ea97-57d6-4263-ac36-ea3a9b373bcf/cd5f7e08e749c1d3468cdae89e4518de/dotnet-runtime-2.1.17-win-x86.exe 706a7f0ad998c3c1b321e89e4bcd6304bef31c95c83eda119e8d4adccccbc915 + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/quiet} + + if [ "${W_ARCH}" = "win64" ]; then + # Also install the 64-bit version + w_download https://download.visualstudio.microsoft.com/download/pr/cd223083-8c0e-4963-9fcd-fcf01a55e56c/15500e764899442ed6e014687caa34e9/dotnet-runtime-2.1.17-win-x64.exe 5a065ae6f9e031399cb7084c6315ce977342dec069cd6386caed1c5b69d49260 + w_try "${WINE}" "dotnet-runtime-2.1.17-win-x64.exe" ${W_OPT_UNATTENDED:+/quiet} + fi +} + +#---------------------------------------------------------------- + +w_metadata dotnetcore3 dlls \ + title="MS .NET Core Runtime 3.1 LTS" \ + publisher="Microsoft" \ + year="2020" \ + media="download" \ + file1="dotnet-runtime-3.1.10-win-x86.exe" \ + installed_file1="${W_PROGRAMS_WIN}/dotnet/dotnet.exe" + +load_dotnetcore3() +{ + # Official version, see https://dotnet.microsoft.com/download/dotnet-core/3.1 + w_download https://download.visualstudio.microsoft.com/download/pr/abb3fb5d-4e82-4ca8-bc03-ac13e988e608/b34036773a72b30c5dc5520ee6a2768f/dotnet-runtime-3.1.10-win-x86.exe 6ae8d2fb7a23ac4770fa815bc27614b2db0e89f5c078eb2744771bf5541cdba3 + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/quiet} + + if [ "${W_ARCH}" = "win64" ]; then + # Also install the 64-bit version + w_download https://download.visualstudio.microsoft.com/download/pr/9845b4b0-fb52-48b6-83cf-4c431558c29b/41025de7a76639eeff102410e7015214/dotnet-runtime-3.1.10-win-x64.exe 78ef39c732ec35e79a0c1a10010ea797733df2811d774709b0fde23dce02efdf + w_try "${WINE}" "dotnet-runtime-3.1.10-win-x64.exe" ${W_OPT_UNATTENDED:+/quiet} + fi +} + +#---------------------------------------------------------------- + +w_metadata dotnetcoredesktop3 dlls \ + title="MS .NET Core Desktop Runtime 3.1 LTS" \ + publisher="Microsoft" \ + year="2020" \ + media="download" \ + file1="windowsdesktop-runtime-3.1.10-win-x86.exe" \ + installed_file1="${W_PROGRAMS_WIN}/dotnet/dotnet.exe" + +load_dotnetcoredesktop3() +{ + # Official version, see https://dotnet.microsoft.com/download/dotnet-core/3.1 + w_download https://download.visualstudio.microsoft.com/download/pr/865d0be5-16e2-4b3d-a990-f4c45acd280c/ec867d0a4793c0b180bae85bc3a4f329/windowsdesktop-runtime-3.1.10-win-x86.exe 4da245d9048642ed3f25c04e8fa0156e1d2966b4d257c12a9a3d3a0c929102aa + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/quiet} + + if [ "${W_ARCH}" = "win64" ]; then + # Also install the 64-bit version + w_download https://download.visualstudio.microsoft.com/download/pr/513acf37-8da2-497d-bdaa-84d6e33c1fee/eb7b010350df712c752f4ec4b615f89d/windowsdesktop-runtime-3.1.10-win-x64.exe 32286b9a35d9a53d28807ef761f3dba43b71e602efd2b794f843fcf5ea8438a9 + w_try "${WINE}" "windowsdesktop-runtime-3.1.10-win-x64.exe" ${W_OPT_UNATTENDED:+/quiet} + fi +} + +#---------------------------------------------------------------- + +w_metadata dotnet_verifier dlls \ + title="MS .NET Verifier" \ + publisher="Microsoft" \ + year="2016" \ + media="download" \ + file1="netfx_setupverifier_new.zip" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/netfx_setupverifier.exe" + +load_dotnet_verifier() +{ + # https://blogs.msdn.microsoft.com/astebner/2008/10/13/net-framework-setup-verification-tool-users-guide/ + # 2016/10/26: sha256sum 1daf4b1b27669b65f613e17814da3c8342d3bfa9520a65a880c58d6a2a6e32b5, adds .NET Framework 4.6.{1,2} support + # 2017/06/12: sha256sum 310a0341fbe68f5b8601f2d8deef5d05ca6bce50df03912df391bc843794ef60, adds .NET Framework 4.7 support + # 2018/06/03: sha256sum 13fd683fd604f9de09a9e649df303100b81e6797f868024d55e5c2f3c14aa9a6, adds .NET Framework 4.7.{1,2} support + + w_download https://web.archive.org/web/20180802234935/https://msdnshared.blob.core.windows.net/media/2018/05/netfx_setupverifier_new.zip 13fd683fd604f9de09a9e649df303100b81e6797f868024d55e5c2f3c14aa9a6 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try_unzip "${W_SYSTEM32_DLLS}" netfx_setupverifier_new.zip netfx_setupverifier.exe + + w_warn "You can run the .NET Verifier with \"${WINE} netfx_setupverifier.exe\"" +} + +#---------------------------------------------------------------- + +w_metadata dx8vb dlls \ + title="MS dx8vb.dll from DirectX 8.1 runtime" \ + publisher="Microsoft" \ + year="2001" \ + media="download" \ + file1="DX81NTger.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dx8vb.dll" + +load_dx8vb() +{ + # https://www.microsoft.com/de-de/download/details.aspx?id=10968 + w_download https://download.microsoft.com/download/win2000pro/dx/8.1/NT5/DE/DX81NTger.exe 31513966a29dc100165072891d21b5c5e0dd2632abf3409a843cefb3a9886f13 + + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -F dx8vb.dll "${W_CACHE}/${W_PACKAGE}"/DX81NTger.exe + + w_override_dlls native dx8vb +} + +#---------------------------------------------------------------- + +w_metadata dxdiagn dlls \ + title="DirectX Diagnostic Library" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + conflicts="dxdiagn_feb2010" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dxdiagn.dll" + +load_dxdiagn() +{ + helper_win7sp1 x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.1.7601.17514_none_25cb021dbc0611db/dxdiagn.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.1.7601.17514_none_25cb021dbc0611db/dxdiagn.dll" "${W_SYSTEM32_DLLS}/dxdiagn.dll" + w_override_dlls native,builtin dxdiagn + w_try_regsvr dxdiagn.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.1.7601.17514_none_81e99da174638311/dxdiagn.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.1.7601.17514_none_81e99da174638311/dxdiagn.dll" "${W_SYSTEM64_DLLS}/dxdiagn.dll" + w_try_regsvr64 dxdiagn.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata dxdiagn_feb2010 dlls \ + title="DirectX Diagnostic Library (February 2010)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + conflicts="dxdiagn" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dxdiagn.dll" + +load_dxdiagn_feb2010() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dxdiagn.dll' "${W_TMP}/dxnt.cab" + w_override_dlls native dxdiagn + w_try_regsvr dxdiagn.dll +} + +#---------------------------------------------------------------- + +w_metadata dsound dlls \ + title="MS DirectSound from DirectX user redistributable" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dsound.dll" + +load_dsound() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'dsound.dll' "${W_TMP}/dxnt.cab" + + # Don't try to register native dsound; it doesn't export DllRegisterServer(). + #w_try_regsvr32 dsound.dll + w_override_dlls native dsound +} + +#---------------------------------------------------------------- + +w_metadata esent dlls \ + title="MS Extensible Storage Engine" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/esent.dll" + +load_esent() +{ + helper_win7sp1 x86_microsoft-windows-e..estorageengine-isam_31bf3856ad364e35_6.1.7601.17514_none_f3ebb0cc8a4dd814/esent.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-e..estorageengine-isam_31bf3856ad364e35_6.1.7601.17514_none_f3ebb0cc8a4dd814/esent.dll" "${W_SYSTEM32_DLLS}/esent.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-e..estorageengine-isam_31bf3856ad364e35_6.1.7601.17514_none_500a4c5042ab494a/esent.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-e..estorageengine-isam_31bf3856ad364e35_6.1.7601.17514_none_500a4c5042ab494a/esent.dll" "${W_SYSTEM64_DLLS}/esent.dll" + fi + + w_override_dlls native,builtin esent +} + +#---------------------------------------------------------------- + +# $1 - faudio archive name (required) +helper_faudio() +{ + faudio_archive="$1" + faudio_version="$(basename "${faudio_archive}" .tar.xz)" + + w_try_cd "${W_TMP}" + w_try tar -Jxf "${W_CACHE}/${W_PACKAGE}/${faudio_archive}" + + if [ -d "${faudio_version}/x32" ]; then + w_info "Installing 32-bit binaries since present; upstreams says they may be broken" + + # They ship an installation script, but it's bash (and we have all needed functionality already) + # Unless they add something more complex, this should suffice: + for dll in "${faudio_version}/x32/"*.dll; do + shortdll="$(basename "${dll}" .dll)" + w_try_cp_dll "${dll}" "${W_SYSTEM32_DLLS}" + w_override_dlls native "${shortdll}" + done + fi + + if [ "${W_ARCH}" = "win64" ]; then + for dll in "${faudio_version}/x64/"*.dll; do + # Note: 'libgcc_s_sjlj-1.dll' is not included in the 64-bit build + shortdll="$(basename "${dll}" .dll)" + w_try_cp_dll "${dll}" "${W_SYSTEM64_DLLS}" + w_override_dlls native "${shortdll}" + done + fi +} + +#---------------------------------------------------------------- + +w_metadata faudio1901 dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (19.01)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + file1="faudio-19.01.tar.xz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/FAudio.dll" + +load_faudio1901() +{ + w_download https://github.com/Kron4ek/FAudio-Builds/releases/download/19.01/faudio-19.01.tar.xz f3439090ba36061ee47ebda93e409ae4b2d8886c780c86a197c66ff08b9b573f + helper_faudio "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata faudio1902 dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (19.02)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + file1="faudio-19.02.tar.xz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/FAudio.dll" + +load_faudio1902() +{ + w_download https://github.com/Kron4ek/FAudio-Builds/releases/download/19.02/faudio-19.02.tar.xz 849fec35482748a2b441d8dd7e9a171c7c5c2207d1037c7ffd0265e65f2a4b2b + helper_faudio "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata faudio1903 dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (19.03)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + file1="faudio-19.03.tar.xz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/FAudio.dll" + +load_faudio1903() +{ + w_download https://github.com/Kron4ek/FAudio-Builds/releases/download/19.03/faudio-19.03.tar.xz d5c62437fd5b185e82f464f6a82334af5d666cb506aba218358ea7a3697fdf63 + helper_faudio "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata faudio1904 dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (19.04)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + file1="faudio-19.04.tar.xz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/FAudio.dll" + +load_faudio1904() +{ + w_download https://github.com/Kron4ek/FAudio-Builds/releases/download/19.04/faudio-19.04.tar.xz c364db1a18bfb6f6c0f375c641672ca40140b8e5db69dc2c8c9b41d79d0fc56f + helper_faudio "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata faudio1905 dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (19.05)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + file1="faudio-19.05.tar.xz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/FAudio.dll" + +load_faudio1905() +{ + w_download https://github.com/Kron4ek/FAudio-Builds/releases/download/19.05/faudio-19.05.tar.xz 94b44c43c0b2260f8061dd699292c8d58ce56fae330a53314417804df4f5f723 + helper_faudio "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata faudio1906 dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (19.06)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + file1="faudio-19.06.tar.xz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/FAudio.dll" + +load_faudio1906() +{ + w_download https://github.com/Kron4ek/FAudio-Builds/releases/download/19.06/faudio-19.06.tar.xz 87639e30f9e913685829e05b925809598409e54c4c51e3d74b977cedd658aaf3 + helper_faudio "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata faudio190607 dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (19.06.07)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + file1="faudio-19.06.07.tar.xz" \ + installed_file1="${W_SYSTEM64_DLLS_WIN64}/FAudio.dll" + +load_faudio190607() +{ + # Starting in 19.06.07; before that ships them, but they're supposedly broken + w_package_unsupported_win32 + + w_download https://github.com/Kron4ek/FAudio-Builds/releases/download/19.06.07/faudio-19.06.07.tar.xz e17e3a9dadeb1017dc369fe0d46c3d1945ebceadb7ad2f94a3a1448435ab3f6c + helper_faudio "${file1}" +} +#---------------------------------------------------------------- + +w_metadata faudio dlls \ + title="FAudio (xaudio reimplementation, with xna support) builds for win32 (latest)" \ + publisher="Kron4ek" \ + year="2019" \ + media="download" \ + installed_file1="${W_SYSTEM64_DLLS_WIN64}/FAudio.dll" + +load_faudio() +{ + # Starting in 19.06.07; before that ships them, but they're supposedly broken + w_package_unsupported_win32 + + w_download_to "${W_TMP_EARLY}" "https://raw.githubusercontent.com/Kron4ek/FAudio-Builds/master/LATEST" + faudio_version="$(cat "${W_TMP_EARLY}/LATEST")" + w_linkcheck_ignore=1 w_download "https://github.com/Kron4ek/FAudio-Builds/releases/download/${faudio_version}/faudio-${faudio_version}.tar.xz" + helper_faudio "faudio-${faudio_version}.tar.xz" +} + +#---------------------------------------------------------------- + +w_metadata filever dlls \ + title="Microsoft's filever, for dumping file version info" \ + publisher="Microsoft" \ + year="20??" \ + media="download" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/filever.exe" + +load_filever() +{ + helper_winxpsp2_support_tools filever.exe + w_try_cp_dll "${W_TMP}/filever.exe" "${W_SYSTEM32_DLLS}/filever.exe" +} + +#---------------------------------------------------------------- + +# $1 - gallium nine standalone archive name (required) +helper_galliumnine() +{ + _W_galliumnine_archive="${1}" + _W_galliumnine_tmp="${W_TMP}/galliumnine" + + w_try rm -rf "${_W_galliumnine_tmp}" + w_try mkdir -p "${_W_galliumnine_tmp}" + w_try tar -C "${_W_galliumnine_tmp}" --strip-components=1 -zxf "${W_CACHE}/${W_PACKAGE}/${_W_galliumnine_archive}" + w_try mv "${_W_galliumnine_tmp}/lib32/d3d9-nine.dll.so" "${W_SYSTEM32_DLLS}/d3d9-nine.dll" + w_try mv "${_W_galliumnine_tmp}/bin32/ninewinecfg.exe.so" "${W_SYSTEM32_DLLS}/ninewinecfg.exe" + if test "${W_ARCH}" = "win64"; then + w_try mv "${_W_galliumnine_tmp}/lib64/d3d9-nine.dll.so" "${W_SYSTEM64_DLLS}/d3d9-nine.dll" + w_try mv "${_W_galliumnine_tmp}/bin64/ninewinecfg.exe.so" "${W_SYSTEM64_DLLS}/ninewinecfg.exe" + fi + w_try rm -rf "${_W_galliumnine_tmp}" + # use ninewinecfg to enable gallium nine + WINEDEBUG=-all w_try "${WINE_MULTI}" ninewinecfg -e + + unset _W_galliumnine_tmp _W_galliumnine_archive +} + +w_metadata galliumnine02 dlls \ + title="Gallium Nine Standalone (v0.2)" \ + publisher="Gallium Nine Team" \ + year="2019" \ + media="download" \ + file1="gallium-nine-standalone-v0.2.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine02() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49676" 5.13 + w_package_broken "https://github.com/iXit/wine-nine-standalone/issues/83" 5.14 + + w_download "https://github.com/iXit/wine-nine-standalone/releases/download/v0.2/gallium-nine-standalone-v0.2.tar.gz" 6818fe890e343aa32d3d53179bfeb63df40977797bd7b6263e85e2bb57559313 + helper_galliumnine "${file1}" +} + +w_metadata galliumnine03 dlls \ + title="Gallium Nine Standalone (v0.3)" \ + publisher="Gallium Nine Team" \ + year="2019" \ + media="download" \ + file1="gallium-nine-standalone-v0.3.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine03() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49676" 5.13 + w_package_broken "https://github.com/iXit/wine-nine-standalone/issues/83" 5.14 + + w_download "https://github.com/iXit/wine-nine-standalone/releases/download/v0.3/gallium-nine-standalone-v0.3.tar.gz" 8bb564073ab2198e5b9b870f7b8cac8d9bc20bc6accf66c4c798e4b450ec0c91 + helper_galliumnine "${file1}" +} + +w_metadata galliumnine04 dlls \ + title="Gallium Nine Standalone (v0.4)" \ + publisher="Gallium Nine Team" \ + year="2019" \ + media="download" \ + file1="gallium-nine-standalone-v0.4.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine04() +{ + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=49676" 5.13 + w_package_broken "https://github.com/iXit/wine-nine-standalone/issues/83" 5.14 + + w_download "https://github.com/iXit/wine-nine-standalone/releases/download/v0.4/gallium-nine-standalone-v0.4.tar.gz" 4423c32d46419830c8e68fea86d28e740f17f182c365250c379b5493176e19ab + helper_galliumnine "${file1}" +} + +w_metadata galliumnine05 dlls \ + title="Gallium Nine Standalone (v0.5)" \ + publisher="Gallium Nine Team" \ + year="2019" \ + media="download" \ + file1="gallium-nine-standalone-v0.5.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine05() +{ + w_package_broken "https://github.com/iXit/wine-nine-standalone/issues/83" 5.14 + + w_download "https://github.com/iXit/wine-nine-standalone/releases/download/v0.5/gallium-nine-standalone-v0.5.tar.gz" c46e06b13a3ba0adee75b27a8b54e9d772f83ed29dee5e203364460771fb1bcd + helper_galliumnine "${file1}" +} + +w_metadata galliumnine06 dlls \ + title="Gallium Nine Standalone (v0.6)" \ + publisher="Gallium Nine Team" \ + year="2020" \ + media="download" \ + file1="gallium-nine-standalone-v0.6.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine06() +{ + w_download "https://github.com/iXit/wine-nine-standalone/releases/download/v0.6/gallium-nine-standalone-v0.6.tar.gz" 1a085b5175791414fdd513b5adb5682985917fef81e84f0116ef2b4d5295ad1c + helper_galliumnine "${file1}" +} + +w_metadata galliumnine07 dlls \ + title="Gallium Nine Standalone (v0.7)" \ + publisher="Gallium Nine Team" \ + year="2020" \ + media="download" \ + file1="gallium-nine-standalone-v0.7.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine07() +{ + w_download "https://github.com/iXit/wine-nine-standalone/releases/download/v0.7/gallium-nine-standalone-v0.7.tar.gz" e0b3005280119732d2ca48a5aa5aad27eaf08e6e1dd5598652744a04554a9475 + helper_galliumnine "${file1}" +} + +w_metadata galliumnine08 dlls \ + title="Gallium Nine Standalone (v0.8)" \ + publisher="Gallium Nine Team" \ + year="2021" \ + media="download" \ + file1="gallium-nine-standalone-v0.8.tar.gz" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine08() +{ + w_download "https://github.com/iXit/wine-nine-standalone/releases/download/v0.8/gallium-nine-standalone-v0.8.tar.gz" 8d73dcf78e4b5edf7a3aea8c339459b5138acd1c957c91c5c06432cb2fc51893 + helper_galliumnine "${file1}" +} + +w_metadata galliumnine dlls \ + title="Gallium Nine Standalone (latest)" \ + publisher="Gallium Nine Team" \ + year="2019" \ + media="download" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/d3d9-nine.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/ninewinecfg.exe" \ + homepage="https://github.com/iXit/wine-nine-standalone" + +load_galliumnine() +{ + _W_galliumnine_version="$(w_get_github_latest_release iXit wine-nine-standalone)" + w_linkcheck_ignore=1 w_download "https://github.com/iXit/wine-nine-standalone/releases/download/${_W_galliumnine_version}/gallium-nine-standalone-${_W_galliumnine_version}.tar.gz" + helper_galliumnine "gallium-nine-standalone-${_W_galliumnine_version}.tar.gz" + unset _W_galliumnine_version +} + +#---------------------------------------------------------------- + +w_metadata gdiplus dlls \ + title="MS GDI+" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/gdiplus.dll" + +load_gdiplus() +{ + # gdiplus has changed in win7. See https://bugs.winehq.org/show_bug.cgi?id=32163#c3 + helper_win7sp1 x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_72d18a4386696c80/gdiplus.dll + w_try_cp_dll "${W_TMP}/x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_72d18a4386696c80/gdiplus.dll" "${W_SYSTEM32_DLLS}/gdiplus.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_2b24536c71ed437a/gdiplus.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_2b24536c71ed437a/gdiplus.dll" "${W_SYSTEM64_DLLS}/gdiplus.dll" + fi + + # For some reason, native, builtin isn't good enough...? + w_override_dlls native gdiplus +} + +#---------------------------------------------------------------- + +w_metadata gdiplus_winxp dlls \ + title="MS GDI+" \ + publisher="Microsoft" \ + year="2009" \ + media="manual_download" \ + file1="WindowsXP-KB975337-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/gdiplus.dll" + +load_gdiplus_winxp() +{ + # https://www.microsoft.com/en-us/download/details.aspx?id=5339 + w_download https://web.archive.org/web/20140615000000/http://download.microsoft.com/download/a/b/c/abc45517-97a0-4cee-a362-1957be2f24e1/WindowsXP-KB975337-x86-ENU.exe 699e76e9f100db3d50da8762c484a369df4698d4b84f7821d4df0e37ce68bcbe + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${W_CACHE}/${W_PACKAGE}/${file1}" /x:. /q + w_try_cp_dll "${W_CACHE}/${W_PACKAGE}/asms/10/msft/windows/gdiplus/gdiplus.dll" "${W_SYSTEM32_DLLS}/gdiplus.dll" + + # For some reason, native, builtin isn't good enough...? + w_override_dlls native gdiplus +} + +#---------------------------------------------------------------- + +w_metadata glidewrapper dlls \ + title="GlideWrapper" \ + publisher="Rolf Neuberger" \ + year="2005" \ + media="download" \ + file1="GlideWrapper084c.exe" \ + installed_file1="c:/windows/glide3x.dll" + +load_glidewrapper() +{ + w_download http://www.zeckensack.de/glide/archive/GlideWrapper084c.exe 3c4185bd7eac9bd50e0727a7b5165ec8273230455480cf94358e1bbd35921b69 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + # The installer opens its README in a web browser, really annoying when doing make check/test: + # FIXME: maybe we should back up this key first? + if [ -n "${W_OPT_UNATTENDED}" ]; then + cat > "${W_TMP}"/disable-browser.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser] +"Browsers"="" + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\disable-browser.reg + + fi + + # NSIS installer + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ /S} + + if [ -n "${W_OPT_UNATTENDED}" ]; then + "${WINE}" reg delete "HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser" /v Browsers /f || true + fi +} + +#---------------------------------------------------------------- + +w_metadata gfw dlls \ + title="MS Games For Windows Live (xlive.dll)" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="gfwlivesetupmin.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/xlive.dll" + +load_gfw() +{ + # https://www.microsoft.com/games/en-us/live/pages/livejoin.aspx + # http://www.next-gen.biz/features/should-games-for-windows-live-die + w_download https://web.archive.org/web/20140730232216/https://download.microsoft.com/download/5/5/8/55846E20-4A46-4EF8-B272-7F988BC9090A/gfwlivesetupmin.exe b14609508e2f8dba0886ded84e2817ad532ebfa31f8a6d4be2e6a5a03a9d7c23 + + # Otherwise it leaves an arbitrarily named empty directory in ${W_CACHE} + w_try cp "${W_CACHE}/${W_PACKAGE}/gfwlivesetupmin.exe" "${W_TMP}" + w_try "${WINE}" "${W_TMP_WIN}\gfwlivesetupmin.exe" /nodotnet ${W_OPT_UNATTENDED:+/q} + + w_call msasn1 +} + +#---------------------------------------------------------------- + +w_metadata glut dlls \ + title="The glut utility library for OpenGL" \ + publisher="Mark J. Kilgard" \ + year="2001" \ + media="download" \ + file1="glut-3.7.6-bin.zip" \ + installed_file1="c:/glut-3.7.6-bin/glut32.lib" + +load_glut() +{ + w_download https://press.liacs.nl/researchdownloads/glut.win32/glut-3.7.6-bin.zip 788e97653bfd527afbdc69e1b7c6bcf9cb45f33d13ddf9d676dc070da92f80d4 + # FreeBSD unzip rm -rf's inside the target directory before extracting: + w_try_unzip "${W_TMP}" "${W_CACHE}"/glut/glut-3.7.6-bin.zip + w_try mv "${W_TMP}/glut-3.7.6-bin" "${W_DRIVE_C}" + w_try_cp_dll "${W_DRIVE_C}"/glut-3.7.6-bin/glut32.dll "${W_SYSTEM32_DLLS}" + w_warn "If you want to compile glut programs, add c:/glut-3.7.6-bin to LIB and INCLUDE" +} + +#---------------------------------------------------------------- + +w_metadata gmdls dlls \ + title="General MIDI DLS Collection" \ + publisher="Microsoft / Roland" \ + year="1999" \ + media="download" \ + file1="../directx9/directx_apr2006_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/drivers/gm.dls" + +load_gmdls() +{ + w_download_to directx9 https://web.archive.org/web/20100920035904/https://download.microsoft.com/download/3/9/7/3972f80c-5711-4e14-9483-959d48a2d03b/directx_apr2006_redist.exe dd8c3d401efe4561b67bd88475201b2f62f43cd23e4acc947bb34a659fa74952 + + w_try_cabextract -d "${W_TMP}" -F DirectX.cab "${W_CACHE}"/directx9/directx_apr2006_redist.exe + w_try_cabextract -d "${W_TMP}" -F gm16.dls "${W_TMP}"/DirectX.cab + + # When running in a 64bit prefix, syswow64/drivers doesn't exist + w_try mkdir -p "${W_SYSTEM32_DLLS}"/drivers + w_try mv "${W_TMP}"/gm16.dls "${W_SYSTEM32_DLLS}"/drivers/gm.dls + + if test "${W_ARCH}" = "win64"; then + w_try ln -s "${W_SYSTEM32_DLLS}"/drivers/gm.dls "${W_SYSTEM64_DLLS}"/drivers + fi +} + +#---------------------------------------------------------------- +# um, codecs are kind of clustered here. They probably deserve their own real category. + +w_metadata allcodecs dlls \ + title="All codecs (dirac, ffdshow, icodecs, cinepak, l3codecx, xvid) except wmp" \ + publisher="various" \ + year="1995-2009" \ + media="download" + +load_allcodecs() +{ + w_call dirac + w_call l3codecx + w_call ffdshow + w_call icodecs + w_call cinepak + w_call xvid +} + +#---------------------------------------------------------------- + +w_metadata dirac dlls \ + title="The Dirac directshow filter v1.0.2" \ + publisher="Dirac" \ + year="2009" \ + media="download" \ + file1="DiracDirectShowFilter-1.0.2.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Dirac/DiracDecoder.dll" + +load_dirac() +{ + w_download https://downloads.sourceforge.net/dirac/DiracDirectShowFilter-1.0.2.exe 7257de4be940405637bb5d11c1179f7db86f165f21fc0ba24f42a9ecbc55fe20 + + # Avoid mfc90 not found error. (DiracSplitter-libschroedinger.ax needs mfc90 to register itself, I think.) + w_call vcrun2008 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run DiracDirectShowFilter-1.0.2.exe + WinWait, Dirac, Welcome + if ( w_opt_unattended > 0 ) { + ControlClick, Button2 + WinWait, Dirac, License + Sleep 1000 + ControlClick, Button2 + WinWait, Dirac, Location + Sleep 1000 + ControlClick, Button2 + WinWait, Dirac, Components + Sleep 1000 + ControlClick, Button2 + WinWait, Dirac, environment + Sleep 1000 + ControlCLick, Button1 + WinWait, Dirac, installed + Sleep 1000 + ControlClick, Button2 + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata ffdshow dlls \ + title="ffdshow video codecs" \ + publisher="doom9 folks" \ + year="2010" \ + media="download" \ + file1="ffdshow_beta7_rev3154_20091209.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/ffdshow/ff_liba52.dll" \ + homepage="https://ffdshow-tryout.sourceforge.io/" + +load_ffdshow() +{ + w_download https://downloads.sourceforge.net/ffdshow-tryout/ffdshow_beta7_rev3154_20091209.exe 86fb22e9a79a1c83340a99fd5722974a4d03948109d404a383c4334fab8f8860 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" ffdshow_beta7_rev3154_20091209.exe ${W_OPT_UNATTENDED:+/silent} +} + +#---------------------------------------------------------------- + +w_metadata hid dlls \ + title="MS hid" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="../win2ksp4/W2KSP4_EN.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/hid.dll" + +load_hid() +{ + helper_win2ksp4 i386/hid.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/hid.dl_ + + w_override_dlls native hid +} + +#---------------------------------------------------------------- + +w_metadata icodecs dlls \ + title="Indeo codecs" \ + publisher="Intel" \ + year="1998" \ + media="download" \ + file1="codinstl.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/ir50_32.dll" + +load_icodecs() +{ + # Note: this codec is insecure, see + # https://support.microsoft.com/kb/954157 + # Original source, ftp://download.intel.com/support/createshare/camerapack/codinstl.exe, had same checksum + # 2010/11/14: http://codec.alshow.co.kr/Down/codinstl.exe + # 2014/04/11: http://www.cucusoft.com/codecdownload/codinstl.exe (linked from http://www.cucusoft.com/codec.asp) + w_download "http://www.cucusoft.com/codecdownload/codinstl.exe" 0979d43568111cadf0b3bf43cd8d746ac3de505759c14f381592b4f8439f6c95 + + # Extract the installer so that we can use the included Install Shield + # response file for unattended installations + w_try_cabextract -d "${W_TMP}/codinstl/" "${W_CACHE}/${W_PACKAGE}/codinstl.exe" + w_try_cd "${W_TMP}/codinstl/" + w_try "${WINE}" "setup.exe" ${W_OPT_UNATTENDED:+/s} + + # Work around bug in codec's installer? + # https://support.britannica.com/other/touchthesky/win/issues/TSTUw_150.htm + # https://appdb.winehq.org/objectManager.php?sClass=version&iId=7091 + w_try_regsvr ir50_32.dll + + # Apparently some codecs are missing, see https://github.com/Winetricks/winetricks/issues/302 + # Download at https://www.moviecodec.com/download-codec-packs/indeo-codecs-legacy-package-31/ + w_download https://s3.amazonaws.com/moviecodec/files/iv5setup.exe 51bec25488b5b94eb3ce49b0a117618c9526161fd0753817a7a724ce25ff0cad + + # Extract the installer so that we can create and use a pre-recorded + # Install Shield response file for unattended installations + w_try_cabextract -d "${W_TMP}/iv5setup/" "${W_CACHE}/${W_PACKAGE}/iv5setup.exe" + + # Create the response file with the following excluded components + # - IV5 Directshow plugin (gives error about missing Ivfsrc.ax) + # - Web browser (Netscape) plugin + # http://www.silentinstall.org/InstallShield + cat > "${W_TMP}/iv5setup/setup.iss" <<_EOF_ +[InstallShield Silent] +Version=v5.00.000 +File=Response File +[File Transfer] +OverwriteReadOnly=NoToAll +[DlgOrder] +Dlg0=SdWelcome-0 +Count=8 +Dlg1=SdLicense-0 +Dlg2=SdAskDestPath-0 +Dlg3=SdSetupTypeEx-0 +Dlg4=SdComponentDialog2-0 +Dlg5=AskYesNo-0 +Dlg6=SdStartCopy-0 +Dlg7=SdFinish-0 +[SdWelcome-0] +Result=1 +[SdLicense-0] +Result=1 +[SdAskDestPath-0] +szDir=C:\Program Files\Ligos\Indeo +Result=1 +[SdSetupTypeEx-0] +Result=Custom +[SdComponentDialog2-0] +Indeo Audio Codec-type=string +Indeo Audio Codec-count=1 +Indeo Audio Codec-0=Indeo Audio Codec\Indeo Audio Encoder +Component-type=string +Component-count=12 +Component-0=Indeo Video 5 Quick Compressors +Component-1=Indeo® Video 5 Codec +Component-2=Indeo Video 4 Codec +Component-3=Indeo Video 3.2 Codec +Component-4=Indeo Audio Codec +Component-5=Indeo Video Raw (YVU9) Codec +Component-6=Indeo Video 4 Quick Compressors +Component-7=Indeo Video 5 Compressor Help Files +Component-8=Indeo Video 4 Compressor Help Files +Component-9=Indeo Software Release Notes +Component-10=Indeo Software Installation Source Code +Component-11=Indeo Software Uninstallation +Result=1 +[AskYesNo-0] +Result=0 +[SdStartCopy-0] +Result=1 +[Application] +Name=Indeo® Software +Version=1.00.000 +Company=Ligos +Lang=0009 +[SdFinish-0] +Result=1 +bOpt1=0 +bOpt2=0 +_EOF_ + + w_try_cd "${W_TMP}/iv5setup/" + w_try "${WINE}" "setup.exe" ${W_OPT_UNATTENDED:+/s} + + # Note, this leaves a dangling explorer window. + # Wait for it to appear and kill it + while ! inode_pid=$(pgrep -f "explorer.exe.*Indeo"); do + sleep 1 + done + kill -HUP "${inode_pid}" +} + +#---------------------------------------------------------------- + +w_metadata iertutil dlls \ + title="MS Runtime Utility" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/iertutil.dll" + +load_iertutil() +{ + helper_win7sp1 x86_microsoft-windows-ie-runtimeutilities_31bf3856ad364e35_8.0.7601.17514_none_64655b7c61c841cb/iertutil.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-ie-runtimeutilities_31bf3856ad364e35_8.0.7601.17514_none_64655b7c61c841cb/iertutil.dll" "${W_SYSTEM32_DLLS}/iertutil.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-ie-runtimeutilities_31bf3856ad364e35_8.0.7601.17514_none_c083f7001a25b301/iertutil.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-ie-runtimeutilities_31bf3856ad364e35_8.0.7601.17514_none_c083f7001a25b301/iertutil.dll" "${W_SYSTEM64_DLLS}/iertutil.dll" + fi + + w_override_dlls native,builtin iertutil +} + +#---------------------------------------------------------------- + +w_metadata itircl dlls \ + title="MS itircl.dll" \ + publisher="Microsoft" \ + year="1999" \ + media="download" \ + file1="../hhw/htmlhelp.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/itircl.dll" + +load_itircl() +{ + # https://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx + w_download_to hhw https://web.archive.org/web/20160423015142if_/http://download.microsoft.com/download/0/a/9/0a939ef6-e31c-430f-a3df-dfae7960d564/htmlhelp.exe b2b3140d42a818870c1ab13c1c7b8d4536f22bd994fa90aade89729a6009a3ae + + w_try_cabextract -d "${W_TMP}" -F hhupd.exe "${W_CACHE}"/hhw/htmlhelp.exe + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -F itircl.dll "${W_TMP}"/hhupd.exe + w_override_dlls native itircl + w_try_regsvr itircl.dll +} + +#---------------------------------------------------------------- + +w_metadata itss dlls \ + title="MS itss.dll" \ + publisher="Microsoft" \ + year="1999" \ + media="download" \ + file1="../hhw/htmlhelp.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/itss.dll" + +load_itss() +{ + # https://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx + w_download_to hhw https://web.archive.org/web/20160423015142if_/http://download.microsoft.com/download/0/a/9/0a939ef6-e31c-430f-a3df-dfae7960d564/htmlhelp.exe b2b3140d42a818870c1ab13c1c7b8d4536f22bd994fa90aade89729a6009a3ae + + w_try_cabextract -d "${W_TMP}" -F hhupd.exe "${W_CACHE}"/hhw/htmlhelp.exe + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -F itss.dll "${W_TMP}"/hhupd.exe + w_override_dlls native itss + w_try_regsvr itss.dll +} + +#---------------------------------------------------------------- + +w_metadata cinepak dlls \ + title="Cinepak Codec" \ + publisher="Radius" \ + year="1995" \ + media="download" \ + file1="cvid32.zip" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/iccvid.dll" \ + homepage="http://www.probo.com/cinepak.php" + +load_cinepak() +{ + w_download "http://www.probo.com/pub/cinepak/cvid32.zip" a41984a954fe77557f228fa8a95cdc05db22bf9ff5429fe4307fd6fc51e11969 + + if [ -f "${W_SYSTEM32_DLLS}/iccvid.dll" ]; then + w_try rm -f "${W_SYSTEM32_DLLS}/iccvid.dll" + fi + + w_try_unzip "${W_SYSTEM32_DLLS}" "${W_CACHE}/${W_PACKAGE}/${file1}" ICCVID.DLL + + w_try mv -f "${W_SYSTEM32_DLLS}/ICCVID.DLL" "${W_SYSTEM32_DLLS}/iccvid_.dll" + w_try mv -f "${W_SYSTEM32_DLLS}/iccvid_.dll" "${W_SYSTEM32_DLLS}/iccvid.dll" + + w_override_dlls native iccvid +} + +#---------------------------------------------------------------- + +w_metadata jet40 dlls \ + title="MS Jet 4.0 Service Pack 8" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="jet40sp8_9xnt.exe" \ + installed_file1="${W_COMMONFILES_WIN}/Microsoft Shared/dao/dao360.dll" + +load_jet40() +{ + # Both mdac27/mdac28 are 32-bit only: + w_package_unsupported_win64 + + w_call mdac27 + w_call wsh57 + + # https://support.microsoft.com/kb/239114 + # See also https://bugs.winehq.org/show_bug.cgi?id=6085 + # FIXME: "failed with error 2" + w_download https://web.archive.org/web/20210225171713/http://download.microsoft.com/download/4/3/9/4393c9ac-e69e-458d-9f6d-2fe191c51469/Jet40SP8_9xNT.exe b060246cd499085a31f15873689d5fa7df817e407c8261a5c71fa6b9f7042560 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" jet40sp8_9xnt.exe ${W_OPT_UNATTENDED:+/q} +} + +# FIXME: verify_jet40() +# See https://github.com/Winetricks/winetricks/issues/327, +# https://en.wikibooks.org/wiki/JET_Database/Creating_and_connecting, and +# https://msdn.microsoft.com/en-us/library/ms677200%28v=vs.85%29.aspx + +#---------------------------------------------------------------- + +w_metadata ie8_kb2936068 dlls \ + title="Cumulative Security Update for Internet Explorer 8" \ + publisher="Microsoft" \ + year="2014" \ + media="download" \ + file1="IE8-WindowsXP-KB2936068-x86-ENU.exe" \ + installed_file1="c:/windows/KB2936068-IE8.log" + +load_ie8_kb2936068() +{ + # If we really need win64 support, should check if there's an x64 version of the hotfix + w_package_unsupported_win64 + + w_call ie8 + + w_download https://download.microsoft.com/download/3/8/C/38CE0ABB-01FD-4C0A-A569-BC5E82C34A17/IE8-WindowsXP-KB2936068-x86-ENU.exe 8bda23c78cdcd9d01c364a01c6d639dfb2d11550a5521b8a81c808c1a2b1824e + + w_set_winver winxp + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try_ms_installer "${WINE}" IE8-WindowsXP-KB2936068-x86-ENU.exe ${W_OPT_UNATTENDED:+/quiet /forcerestart} + + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata l3codecx dlls \ + title="MPEG Layer-3 Audio Codec for Microsoft DirectShow" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/l3codecx.ax" + +load_l3codecx() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'l3codecx.ax' "${W_TMP}/dxnt.cab" + + w_try_regsvr l3codecx.ax +} + +#---------------------------------------------------------------- + +w_metadata lavfilters dlls \ + title="LAV Filters" \ + publisher="Hendrik Leppkes" \ + year="2019" \ + media="download" \ + conflicts="lavfilters702" \ + file1="LAVFilters-0.74.1-Installer.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/LAV Filters/x86/avfilter-lav-7.dll" \ + homepage="https://github.com/Nevcairiel/LAVFilters" + +load_lavfilters() +{ + w_download https://github.com/Nevcairiel/LAVFilters/releases/download/0.74.1/LAVFilters-0.74.1-Installer.exe 181e24428eaa34d0121cd53ec829c18e52d028689e12a7326f952989daa44ddb + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" LAVFilters-0.74.1-Installer.exe ${W_OPT_UNATTENDED:+ /VERYSILENT} +} + +#---------------------------------------------------------------- + +w_metadata lavfilters702 dlls \ + title="LAV Filters 0.70.2" \ + publisher="Hendrik Leppkes" \ + year="2017" \ + media="download" \ + conflicts="lavfilters" \ + file1="LAVFilters-0.70.2-Installer.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/LAV Filters/x86/avfilter-lav-6.dll" \ + homepage="https://github.com/Nevcairiel/LAVFilters" + +load_lavfilters702() +{ + w_download https://github.com/Nevcairiel/LAVFilters/releases/download/0.70.2/LAVFilters-0.70.2-Installer.exe 526e6f2de21759c0d5a60bfd2471880b5720cfb88a3b70163865a9d6cd2aa7cc + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" LAVFilters-0.70.2-Installer.exe ${W_OPT_UNATTENDED:+ /VERYSILENT} +} + +#---------------------------------------------------------------- + +# FIXME: installed location is +# $W_PROGRAMS_X86_WIN/Gemeinsame Dateien/System/ADO/msado26.tlb +# in German... need a variable W_COMMONFILES or something like that + +w_metadata mdac27 dlls \ + title="Microsoft Data Access Components 2.7 sp1" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="MDAC_TYP.EXE" \ + installed_file1="${W_COMMONFILES_X86_WIN}/System/ADO/msado26.tlb" + +load_mdac27() +{ + w_package_unsupported_win64 + + # https://www.microsoft.com/downloads/en/details.aspx?FamilyId=9AD000F2-CAE7-493D-B0F3-AE36C570ADE8&displaylang=en + # Originally at: https://download.microsoft.com/download/3/b/f/3bf74b01-16ba-472d-9a8c-42b2b4fa0d76/mdac_typ.exe + # Mirror list: http://www.filewatcher.com/m/MDAC_TYP.EXE.5389224-0.html (5.14 MB MDAC_TYP.EXE) + # 2018/08/09: ftp.gunadarma.ac.id is dead, moved to archive.org + w_download https://web.archive.org/web/20060718123742/http://ftp.gunadarma.ac.id/pub/driver/itegno/USB%20Software/MDAC/MDAC_TYP.EXE 36d2a3099e6286ae3fab181a502a95fbd825fa5ddb30bf09b345abc7f1f620b4 + + load_native_mdac + w_set_winver nt40 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/q /C:"setup /qnt"} + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata mdac28 dlls \ + title="Microsoft Data Access Components 2.8 sp1" \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="MDAC_TYP.EXE" \ + installed_file1="${W_COMMONFILES_X86_WIN}/System/ADO/msado27.tlb" + +load_mdac28() +{ + w_package_unsupported_win64 + + # https://www.microsoft.com/en-us/download/details.aspx?id=5793 + w_download https://web.archive.org/web/20070127061938/https://download.microsoft.com/download/4/a/a/4aafff19-9d21-4d35-ae81-02c48dcbbbff/MDAC_TYP.EXE 157ebae46932cb9047b58aa849ac1885e8cbd2f218810cb83e57613b49c679d6 + load_native_mdac + w_set_winver nt40 + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" mdac_typ.exe ${W_OPT_UNATTENDED:+/q /C:"setup /qnt"} + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata mdx dlls \ + title="Managed DirectX" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="C:/windows/assembly/GAC/microsoft.directx/1.0.2902.0__31bf3856ad364e35/microsoft.directx.dll" + +load_mdx() +{ + helper_directx_Jun2010 + + w_try_cd "${W_TMP}" + + w_try_cabextract -F "*MDX*" "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -F "*.cab" ./*Archive.cab + + # Install assemblies + w_try_cabextract -d "${W_WINDIR_UNIX}/Microsoft.NET/DirectX for Managed Code/1.0.2902.0" -F "microsoft.directx*" ./*MDX1_x86.cab + for file in mdx_*.cab; do + ver="${file%%_x86.cab}" + ver="${ver##mdx_}" + w_try_cabextract -d "${W_WINDIR_UNIX}/Microsoft.NET/DirectX for Managed Code/${ver}" -F "microsoft.directx*" "${file}" + done + w_try_cabextract -d "${W_WINDIR_UNIX}/Microsoft.NET/DirectX for Managed Code/1.0.2911.0" -F "microsoft.directx.direct3dx*" ./*MDX1_x86.cab + + # Add them to GAC + w_try_cd "${W_WINDIR_UNIX}/Microsoft.NET/DirectX for Managed Code" + for ver in *; do + ( + w_try_cd "${ver}" + for asm in *.dll; do + name="${asm%%.dll}" + w_try mkdir -p "${W_WINDIR_UNIX}/assembly/GAC/${name}/${ver}__31bf3856ad364e35" + w_try cp "${asm}" "${W_WINDIR_UNIX}/assembly/GAC/${name}/${ver}__31bf3856ad364e35" + done + ) + done + + # AssemblyFolders + cat > "${W_TMP}"/asmfolders.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2902.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2902.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2903.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2903.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2904.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2904.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2905.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2905.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2906.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2906.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2907.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2907.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2908.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2908.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2909.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2909.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2910.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2910.0\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\.NETFramework\\AssemblyFolders\\DX_1.0.2911.0] +@="C:\\\\windows\\\\Microsoft.NET\\\\DirectX for Managed Code\\\\1.0.2911.0\\\\" +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\asmfolders.reg +} + +#---------------------------------------------------------------- + +w_metadata mf dlls \ + title="MS Media Foundation" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mf.dll" + +load_mf() +{ + helper_win7sp1 x86_microsoft-windows-mediafoundation_31bf3856ad364e35_6.1.7601.17514_none_9e6699276b03c38e/mf.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-mediafoundation_31bf3856ad364e35_6.1.7601.17514_none_9e6699276b03c38e/mf.dll" "${W_SYSTEM32_DLLS}/mf.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-mediafoundation_31bf3856ad364e35_6.1.7601.17514_none_fa8534ab236134c4/mf.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-mediafoundation_31bf3856ad364e35_6.1.7601.17514_none_fa8534ab236134c4/mf.dll" "${W_SYSTEM64_DLLS}/mf.dll" + fi + + w_override_dlls native,builtin mf +} + +#---------------------------------------------------------------- + +w_metadata mfc40 dlls \ + title="MS mfc40 (Microsoft Foundation Classes from win7sp1)" \ + publisher="Microsoft" \ + year="1999" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc40.dll" + +load_mfc40() +{ + helper_win7sp1 x86_microsoft-windows-mfc40_31bf3856ad364e35_6.1.7601.17514_none_5c06580240091047/mfc40.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-mfc40_31bf3856ad364e35_6.1.7601.17514_none_5c06580240091047/mfc40.dll" "${W_SYSTEM32_DLLS}/mfc40.dll" + + helper_win7sp1 x86_microsoft-windows-mfc40u_31bf3856ad364e35_6.1.7601.17514_none_f51a7bf0b3d25294/mfc40u.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-mfc40u_31bf3856ad364e35_6.1.7601.17514_none_f51a7bf0b3d25294/mfc40u.dll" "${W_SYSTEM32_DLLS}/mfc40u.dll" + + w_call msvcrt40 +} + +#---------------------------------------------------------------- + +w_metadata mfc70 dlls \ + title="Visual Studio (.NET) 2002 mfc70 library" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="VS7.0sp1-KB924642-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc70.dll" + +load_mfc70() +{ + w_download https://download.microsoft.com/download/6/b/e/6be11d8a-e0c7-429c-ac8c-9860e313ced9/VS7.0sp1-KB924642-X86.exe 7173a950169a58c56d7174811a7cd50e6092046f1f083db9d2b03315347fc0f4 + + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" -F '*mfc*' + + w_try_cp_dll "${W_TMP}"/FL_mfc70_dll_____X86.3643236F_FC70_11D3_A536_0090278A1BB8 "${W_SYSTEM32_DLLS}"/mfc70.dll + w_try_cp_dll "${W_TMP}"/FL_mfc70u_dll_____X86.3643236F_FC70_11D3_A536_0090278A1BB8 "${W_SYSTEM32_DLLS}"/mfc70u.dll +} + +#---------------------------------------------------------------- + +w_metadata msaa dlls \ + title="MS Active Accessibility (oleacc.dll, oleaccrc.dll, msaatext.dll)" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="MSAA20_RDK.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/oleacc.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/oleaccrc.dll" \ + installed_file3="${W_SYSTEM32_DLLS_WIN}/msaatext.dll" + +load_msaa() +{ + w_download https://download.microsoft.com/download/c/1/c/c1cf13a6-4d7f-4b7d-9f67-51ef3a421fc7/MSAA20_RDK.exe 081e382f7e5b874ab143f0b073246fd31f84ae181df1838813b02935a951c9da + w_try_unzip "${W_TMP}/${W_PACKAGE}" "${W_CACHE}/${W_PACKAGE}"/MSAA20_RDK.exe + w_try cp "${W_TMP}/${W_PACKAGE}/oleaccW.dll" "${W_SYSTEM32_DLLS}/oleacc.dll" + w_try cp "${W_TMP}/${W_PACKAGE}/oleaccrc.dll" "${W_SYSTEM32_DLLS}/oleaccrc.dll" + w_try cp "${W_TMP}/${W_PACKAGE}/MSAATextW.dll" "${W_SYSTEM32_DLLS}/msaatext.dll" + w_override_dlls native,builtin oleacc oleaccrc msaatext +} + +#---------------------------------------------------------------- + +w_metadata msacm32 dlls \ + title="MS ACM32" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msacm32.dll" + +load_msacm32() +{ + helper_winxpsp3 i386/msacm32.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/msacm32.dl_ + w_override_dlls native,builtin msacm32 +} + +#---------------------------------------------------------------- + +w_metadata msasn1 dlls \ + title="MS ASN1" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="../win2ksp4/W2KSP4_EN.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msasn1.dll" + +load_msasn1() +{ + helper_win2ksp4 i386/msasn1.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/msasn1.dl_ +} + +#---------------------------------------------------------------- + +w_metadata msctf dlls \ + title="MS Text Service Module" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msctf.dll" + +load_msctf() +{ + helper_winxpsp3 i386/msctf.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/msctf.dl_ + w_override_dlls native,builtin msctf +} + +#---------------------------------------------------------------- + +w_metadata msdelta dlls \ + title="MSDelta differential compression library" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msdelta.dll" + +load_msdelta() +{ + helper_win7sp1 x86_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_0b66cb34258c936f/msdelta.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_0b66cb34258c936f/msdelta.dll" "${W_SYSTEM32_DLLS}/msdelta.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_678566b7ddea04a5/msdelta.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_678566b7ddea04a5/msdelta.dll" "${W_SYSTEM64_DLLS}/msdelta.dll" + fi + + w_override_dlls native,builtin msdelta +} + +#---------------------------------------------------------------- + +w_metadata msdxmocx dlls \ + title="MS Windows Media Player 2 ActiveX control for VB6" \ + publisher="Microsoft" \ + year="1999" \ + media="download" \ + file1="mpfull.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msdxm.ocx" + +load_msdxmocx() +{ + # Previously at https://www.oldapps.com/windows_media_player.php?old_windows_media_player=3?download + # 2015/12/01: Iceweasel gave a security warning (!), but clamscan and virustotal.com report it as clean + # + # 2016/02/18: Since then, oldapps.com removed it. It's on a Finnish mirror, where it's been since 2001/10/20 + # Found using http://www.filewatcher.com/m/mpfull.exe.3593680-0.html + # The sha256sum is different. Perhaps Iceweasel was right. This one is also clean according to clamscan/virustotal.com + + # 2017/09/28: define.fi is down, these sites have mpfull.exe with the original sha256: + # http://hell.pl/agnus/windows95/ + # http://zerosky.oldos.org/win9x.html + # https://sdfox7.com/win95/ + + w_download http://hell.pl/agnus/windows95/mpfull.exe a39b2b9735cedd513fcb78f8634695d35073e9d7e865e536a0da6db38c7225e4 + + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try_regsvr msdxm.ocx +} + +#---------------------------------------------------------------- + +w_metadata msflxgrd dlls \ + title="MS FlexGrid Control (msflxgrd.ocx)" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="../vb6sp6/VB60SP6-KB2708437-x86-ENU.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msflxgrd.ocx" + +load_msflxgrd() +{ + helper_vb6sp6 "${W_TMP}" MSFlxGrd.ocx + w_try mv "${W_TMP}/MSFlxGrd.ocx" "${W_SYSTEM32_DLLS}/msflxgrd.ocx" + w_try_regsvr msflxgrd.ocx +} + +#---------------------------------------------------------------- + +w_metadata mshflxgd dlls \ + title="MS Hierarchical FlexGrid Control (mshflxgd.ocx)" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="../vb6sp6/VB60SP6-KB2708437-x86-ENU.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mshflxgd.ocx" + +load_mshflxgd() +{ + helper_vb6sp6 "${W_TMP}" MShflxgd.ocx + w_try mv "${W_TMP}/MShflxgd.ocx" "${W_SYSTEM32_DLLS}/mshflxgd.ocx" + w_try_regsvr mshflxgd.ocx +} + +#---------------------------------------------------------------- + +w_metadata mspatcha dlls \ + title="MS mspatcha" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../win2ksp4/W2KSP4_EN.EXE" \ + installed_exe1="${W_SYSTEM32_DLLS_WIN}/mspatcha.dll" + +load_mspatcha() +{ + helper_win2ksp4 i386/mspatcha.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/mspatcha.dl_ + + w_override_dlls native,builtin mspatcha +} + +#---------------------------------------------------------------- + +w_metadata msscript dlls \ + title="MS Windows Script Control" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msscript.ocx" + +load_msscript() +{ + helper_winxpsp3 i386/msscript.oc_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/msscript.oc_ + w_override_dlls native,builtin i386/msscript.ocx +} + +#---------------------------------------------------------------- + +w_metadata msls31 dlls \ + title="MS Line Services" \ + publisher="Microsoft" \ + year="2001" \ + media="download" \ + file1="InstMsiW.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msls31.dll" + +load_msls31() +{ + # Needed by native RichEdit and Internet Explorer + # Originally at https://download.microsoft.com/download/WindowsInstaller/Install/2.0/NT45/EN-US/InstMsiW.exe + # Old mirror at https://ftp.hp.com/pub/softlib/software/msi/InstMsiW.exe + w_download https://web.archive.org/web/20160710055851if_/http://download.microsoft.com/download/WindowsInstaller/Install/2.0/NT45/EN-US/InstMsiW.exe 4c3516c0b5c2b76b88209b22e3bf1cb82d8e2de7116125e97e128952372eed6b + + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}"/msls31/InstMsiW.exe + w_try_cp_dll "${W_TMP}"/msls31.dll "${W_SYSTEM32_DLLS}" +} + +#---------------------------------------------------------------- + +w_metadata msmask dlls \ + title="MS Masked Edit Control" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="../vb6sp6/VB60SP6-KB2708437-x86-ENU.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msmask32.ocx" + +load_msmask() +{ + helper_vb6sp6 "${W_TMP}" msmask32.ocx + w_try mv "${W_TMP}/msmask32.ocx" "${W_SYSTEM32_DLLS}/msmask32.ocx" + w_try_regsvr msmask32.ocx +} + + #---------------------------------------------------------------- + +w_metadata msftedit dlls \ + title="Microsoft RichEdit Control" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msftedit.dll" + +load_msftedit() +{ + helper_win7sp1 x86_microsoft-windows-msftedit_31bf3856ad364e35_6.1.7601.17514_none_d7d862f19573a5ff/msftedit.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-msftedit_31bf3856ad364e35_6.1.7601.17514_none_d7d862f19573a5ff/msftedit.dll" "${W_SYSTEM32_DLLS}/msftedit.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-msftedit_31bf3856ad364e35_6.1.7601.17514_none_33f6fe754dd11735/msftedit.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-msftedit_31bf3856ad364e35_6.1.7601.17514_none_33f6fe754dd11735/msftedit.dll" "${W_SYSTEM64_DLLS}/msftedit.dll" + fi + + w_override_dlls native,builtin msftedit +} + +#---------------------------------------------------------------- + +w_metadata msvcrt40 dlls \ + title="fixme" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msvcrt40.dll" + +load_msvcrt40() +{ + helper_winxpsp3 i386/msvcrt40.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/msvcrt40.dl_ + + w_override_dlls native,builtin msvcrt40 +} + +#---------------------------------------------------------------- + +w_metadata msxml3 dlls \ + title="MS XML Core Services 3.0" \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="msxml3.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msxml3.dll" + +load_msxml3() +{ + # Service Pack 7 + # Originally at https://download.microsoft.com/download/8/8/8/888f34b7-4f54-4f06-8dac-fa29b19f33dd/msxml3.msi + # Mirror list: http://www.filewatcher.com/m/msxml3.msi.1070592-0.html + # Known bad sites (2017/06/11): + # ftp://support.danbit.dk/D/DVD-RW-USB2B/Driver/Installation/Data/Redist/msxml3.msi + # ftp://94.79.56.169/common/Client/MSXML%204.0%20Service%20Pack%202/msxml3.msi + w_download https://media.codeweavers.com/pub/other/msxml3.msi f9c678f8217e9d4f9647e8a1f6d89a7c26a57b9e9e00d39f7487493dd7b4e36c + + # It won't install on top of Wine's msxml3, which has a pretty high version number, so delete Wine's fake DLL + rm "${W_SYSTEM32_DLLS}"/msxml3.dll + w_override_dlls native msxml3 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + # See https://github.com/Winetricks/winetricks/issues/1086 + # and https://bugs.winehq.org/show_bug.cgi?id=26925 + if w_workaround_wine_bug 26925 "Forcing quiet install"; then + w_try "${WINE}" msiexec /i msxml3.msi /q + else + w_try "${WINE}" msiexec /i msxml3.msi ${W_OPT_UNATTENDED:+/q} + fi +} + +#---------------------------------------------------------------- + +w_metadata msxml4 dlls \ + title="MS XML Core Services 4.0" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="msxml.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msxml4.dll" + +load_msxml4() +{ + # MS06-071: https://www.microsoft.com/en-us/download/details.aspx?id=11125 + # w_download https://download.microsoft.com/download/e/2/e/e2e92e52-210b-4774-8cd9-3a7a0130141d/msxml4-KB927978-enu.exe 7602c2a6d2a46ef2b4028438d2cce67fe437a9bfb569249ea38141b4756b4e03 + # MS07-042: https://www.microsoft.com/en-us/download/details.aspx?id=2386 + # w_download https://download.microsoft.com/download/9/4/2/9422e6b6-08ee-49cb-9f05-6c6ee755389e/msxml4-KB936181-enu.exe 1ce9ff868816cfc9bf33e93fdf1552afce5b491443892babb521e74c05e45242 + # SP3 (2009): https://www.microsoft.com/en-us/download/details.aspx?id=15697 + w_download https://web.archive.org/web/20210506101448/http://download.microsoft.com/download/A/2/D/A2D8587D-0027-4217-9DAD-38AFDB0A177E/msxml.msi 47c2ae679c37815da9267c81fc3777de900ad2551c11c19c2840938b346d70bb + w_override_dlls native,builtin msxml4 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" msiexec /i msxml.msi ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +w_metadata msxml6 dlls \ + title="MS XML Core Services 6.0 sp2" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="msxml6-KB973686-enu-amd64.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msxml6.dll" + +load_msxml6() +{ + # Service Pack 2 + # https://www.microsoft.com/en-us/download/details.aspx?id=9774 + + # 64bit exe also includes 32bit dlls + # Originally here: https://download.microsoft.com/download/1/5/8/158F681A-E595-472B-B15E-62B649B1B6FF/msxml6-KB973686-enu-amd64.exe + w_download https://web.archive.org/web/20190122095451/https://download.microsoft.com/download/1/5/8/158F681A-E595-472B-B15E-62B649B1B6FF/msxml6-KB973686-enu-amd64.exe 0e5c4af488e88e8defb59de80271671d8283d5744b2eebdb351bbd4950fb0883 + + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}"/msxml6/msxml6-KB973686-enu-amd64.exe + w_try_cabextract --directory="${W_TMP}" "${W_TMP}"/msxml6.msi + w_try_cp_dll "${W_TMP}"/msxml6.dll.86F857F6_A743_463D_B2FE_98CB5F727E09 "${W_SYSTEM32_DLLS}"/msxml6.dll + w_try_cp_dll "${W_TMP}"/msxml6r.dll.86F857F6_A743_463D_B2FE_98CB5F727E09 "${W_SYSTEM32_DLLS}"/msxml6r.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_try_cp_dll "${W_TMP}"/msxml6.dll.1ECC0691_D2EB_4A33_9CBF_5487E5CB17DB "${W_SYSTEM64_DLLS}"/msxml6.dll + w_try_cp_dll "${W_TMP}"/msxml6r.dll.1ECC0691_D2EB_4A33_9CBF_5487E5CB17DB "${W_SYSTEM64_DLLS}"/msxml6r.dll + fi + + w_override_dlls native,builtin msxml6 +} + +#---------------------------------------------------------------- + +w_metadata nuget dlls \ + title="NuGet Package manager" \ + publisher="Outercurve Foundation" \ + year="2013" \ + media="download" \ + file1="nuget.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/nuget.exe" \ + homepage="https://nuget.org" + +load_nuget() +{ + w_call dotnet40 + # Changes too rapidly to check shasum + w_download https://nuget.org/nuget.exe + w_try_cp_dll "${W_CACHE}/${W_PACKAGE}"/nuget.exe "${W_SYSTEM32_DLLS}" + w_warn "To run NuGet, use the command line \"${WINE} nuget\"." +} + +#---------------------------------------------------------------- + +w_metadata ogg dlls \ + title="OpenCodecs 0.85: FLAC, Speex, Theora, Vorbis, WebM" \ + publisher="Xiph.Org Foundation" \ + year="2011" \ + media="download" \ + file1="opencodecs_0.85.17777.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Xiph.Org/Open Codecs/AxPlayer.dll" \ + homepage="https://xiph.org/dshow" + +load_ogg() +{ + w_download https://downloads.xiph.org/releases/oggdsf/opencodecs_0.85.17777.exe fcec3cea637e806501aff447d902de3b5bfef226b629e43ab67e46dbb23f13e7 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/S} +} + + +#---------------------------------------------------------------- + +w_metadata ole32 dlls \ + title="MS ole32 Module (ole32.dll)" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/ole32.dll" + +load_ole32() +{ + # Some applications need this, for example Wechat. + helper_winxpsp3 i386/ole32.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/ole32.dl_ + w_override_dlls native,builtin ole32 +} + +#---------------------------------------------------------------- + +w_metadata oleaut32 dlls \ + title="MS oleaut32.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/oleaut32.dll" + +load_oleaut32() +{ + helper_win7sp1 x86_microsoft-windows-ole-automation_31bf3856ad364e35_6.1.7601.17514_none_bf07947959bc4c33/oleaut32.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-ole-automation_31bf3856ad364e35_6.1.7601.17514_none_bf07947959bc4c33/oleaut32.dll" "${W_SYSTEM32_DLLS}/oleaut32.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-ole-automation_31bf3856ad364e35_6.1.7601.17514_none_1b262ffd1219bd69/oleaut32.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-ole-automation_31bf3856ad364e35_6.1.7601.17514_none_1b262ffd1219bd69/oleaut32.dll" "${W_SYSTEM64_DLLS}/oleaut32.dll" + fi + + w_override_dlls native,builtin oleaut32 +} + +#---------------------------------------------------------------- + +w_metadata pdh dlls \ + title="MS pdh.dll (Performance Data Helper)" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + conflicts="pdh_nt4" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/pdh.dll" + +load_pdh() +{ + helper_win7sp1 x86_microsoft-windows-p..rastructureconsumer_31bf3856ad364e35_6.1.7601.17514_none_b5e3f88a8eb425e8/pdh.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-p..rastructureconsumer_31bf3856ad364e35_6.1.7601.17514_none_b5e3f88a8eb425e8/pdh.dll" "${W_SYSTEM32_DLLS}/pdh.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-p..rastructureconsumer_31bf3856ad364e35_6.1.7601.17514_none_1202940e4711971e/pdh.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-p..rastructureconsumer_31bf3856ad364e35_6.1.7601.17514_none_1202940e4711971e/pdh.dll" "${W_SYSTEM64_DLLS}/pdh.dll" + fi + + w_override_dlls native,builtin pdh +} + +#---------------------------------------------------------------- + +w_metadata pdh_nt4 dlls \ + title="MS pdh.dll (Performance Data Helper); WinNT 4.0 Version" \ + publisher="Microsoft" \ + year="1997" \ + media="download" \ + conflicts="pdh" \ + file1="nt4pdhdll.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/pdh.dll" + +load_pdh_nt4() +{ + if [ "${W_ARCH}" = "win64" ]; then + w_warn "There is no 64-bit version of the WinNT 4.0 pdh.dll. If your program doesn't work then try a 32-bit wineprefix or use 'winetricks pdh' instead." + fi + + w_download http://download.microsoft.com/download/winntsrv40/update/5.0.2195.2668/nt4/en-us/nt4pdhdll.exe a0a45ea8f4b82daaebcff7ad5bd1b7f5546e527e04790ca8c4c9b71b18c73e32 + + w_try_unzip "${W_TMP}/${W_PACKAGE}" "${W_CACHE}/${W_PACKAGE}"/nt4pdhdll.exe + w_try_cp_dll "${W_TMP}/${W_PACKAGE}/pdh.dll" "${W_SYSTEM32_DLLS}/pdh.dll" + + w_override_dlls native,builtin pdh +} + +#---------------------------------------------------------------- + +w_metadata peverify dlls \ + title="MS peverify (from .NET 2.0 SDK)" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="../dotnet20sdk/setup.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/peverify.exe" + +load_peverify() +{ + w_download_to dotnet20sdk https://download.microsoft.com/download/c/4/b/c4b15d7d-6f37-4d5a-b9c6-8f07e7d46635/setup.exe 1d7337bfbb2c65f43c82d188688ce152af403bcb67a2cc2a3cc68a580ecd8200 + + # Seems to require dotnet20; at least doesn't work if dotnet40 is installed instead + w_call dotnet20 + + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}/dotnet20sdk/setup.exe" -F netfxsd1.cab + w_try_cabextract --directory="${W_TMP}" "${W_TMP}/netfxsd1.cab" -F FL_PEVerify_exe_____X86.3643236F_FC70_11D3_A536_0090278A1BB8 + w_try mv "${W_TMP}/FL_PEVerify_exe_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" "${W_SYSTEM32_DLLS}/peverify.exe" +} + +#---------------------------------------------------------------- + +w_metadata physx dlls \ + title="PhysX" \ + publisher="Nvidia" \ + year="2021" \ + media="download" \ + file1="PhysX_9.21.0713_SystemSoftware.exe" \ + +load_physx() +{ + w_get_sha256sum "${W_PROGRAMS_X86_UNIX}/NVIDIA Corporation/PhysX/Engine/86C5F4F22ECD/APEX_Particles_x64.dll" + if [ "${_W_gotsha256sum}"x = "b3991e0165a9802b60e2f7d14c1be5f879071999ae74a38263cec9bf043a9eaa"x ] ; then + w_warn "${W_PACKAGE} is already installed - not updating" + unset _W_gotsha256sum + return + else + unset _W_gotsha256sum + w_download https://us.download.nvidia.com/Windows/9.21.0713/PhysX_9.21.0713_SystemSoftware.exe 26d62c5c347c15cb27c3be92bf10706113511b48b28aecc09f61ee58b3b62778 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" PhysX_9.21.0713_SystemSoftware.exe ${W_OPT_UNATTENDED:+/s} + fi +} + +#---------------------------------------------------------------- + +w_metadata pngfilt dlls \ + title="pngfilt.dll (from winxp)" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/pngfilt.dll" + +load_pngfilt() +{ + # Previously used https://www.microsoft.com/en-us/download/details.aspx?id=3907 + # Now using winxp's dll + + helper_winxpsp3 i386/pngfilt.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/pngfilt.dl_ + w_try_regsvr pngfilt.dll +} + +#---------------------------------------------------------------- + +w_metadata prntvpt dlls \ + title="prntvpt.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/prntvpt.dll" + +load_prntvpt() +{ + + helper_win7sp1 x86_microsoft-windows-p..g-printticket-win32_31bf3856ad364e35_6.1.7601.17514_none_1562129afd710f2c/prntvpt.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-p..g-printticket-win32_31bf3856ad364e35_6.1.7601.17514_none_1562129afd710f2c/prntvpt.dll" "${W_SYSTEM32_DLLS}/prntvpt.dll" + + w_override_dlls native,builtin prntvpt + w_try_regsvr prntvpt.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-p..g-printticket-win32_31bf3856ad364e35_6.1.7601.17514_none_7180ae1eb5ce8062/prntvpt.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-p..g-printticket-win32_31bf3856ad364e35_6.1.7601.17514_none_7180ae1eb5ce8062/prntvpt.dll" "${W_SYSTEM64_DLLS}/prntvpt.dll" + w_try_regsvr64 prntvpt.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata python26 dlls \ + title="Python interpreter 2.6.2" \ + publisher="Python Software Foundaton" \ + year="2009" \ + media="download" \ + file1="python-2.6.2.msi" \ + installed_exe1="c:/Python26/python.exe" + +load_python26() +{ + w_download https://www.python.org/ftp/python/2.6.2/python-2.6.2.msi c2276b398864b822c25a7c240cb12ddb178962afd2e12d602f1a961e31ad52ff + w_download https://downloads.sourceforge.net/project/pywin32/pywin32/Build%20214/pywin32-214.win32-py2.6.exe dc311bbdc5868e3dd139dfc46136221b7f55c5613a98a5a48fa725a6c681cd40 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" msiexec /i python-2.6.2.msi ALLUSERS=1 ${W_OPT_UNATTENDED:+/q} + + w_ahk_do " + SetTitleMatchMode, 2 + run pywin32-214.win32-py2.6.exe + WinWait, Setup, Wizard will install pywin32 + if ( w_opt_unattended > 0 ) { + ControlClick Button2 ; next + WinWait, Setup, Python 2.6 is required + ControlClick Button3 ; next + WinWait, Setup, Click Next to begin + ControlClick Button3 ; next + WinWait, Setup, finished + ControlClick Button4 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata python27 dlls \ + title="Python interpreter 2.7.16" \ + publisher="Python Software Foundaton" \ + year="2019" \ + media="download" \ + file1="python-2.7.16.msi" \ + installed_exe1="c:/Python27/python.exe" + +load_python27() +{ + w_download https://www.python.org/ftp/python/2.7.16/python-2.7.16.msi d57dc3e1ba490aee856c28b4915d09e3f49442461e46e481bc6b2d18207831d7 + w_download https://github.com/mhammond/pywin32/releases/download/b224/pywin32-224.win32-py2.7.exe 03bb02aff0ec604d1d5fefc699581ab599fff618eaddc8a721f2fa22e5572dd4 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" msiexec /i python-2.7.16.msi ALLUSERS=1 ${W_OPT_UNATTENDED:+/q} + + w_ahk_do " + SetTitleMatchMode, 2 + run pywin32-224.win32-py2.7.exe + WinWait, Setup, Wizard will install pywin32 + if ( w_opt_unattended > 0 ) { + ControlClick Button2 ; next + WinWait, Setup, Python 2.7 is required + ControlClick Button3 ; next + WinWait, Setup, Click Next to begin + ControlClick Button3 ; next + WinWait, Setup, finished + ControlClick Button4 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata qasf dlls \ + title="qasf.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/qasf.dll" + +load_qasf() +{ + helper_win7sp1 x86_microsoft-windows-directshow-asf_31bf3856ad364e35_6.1.7601.17514_none_1cc4e9c15ccc8ae8/qasf.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-directshow-asf_31bf3856ad364e35_6.1.7601.17514_none_1cc4e9c15ccc8ae8/qasf.dll" "${W_SYSTEM32_DLLS}/qasf.dll" + + w_override_dlls native,builtin qasf + w_try_regsvr qasf.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-directshow-asf_31bf3856ad364e35_6.1.7601.17514_none_78e385451529fc1e/qasf.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-directshow-asf_31bf3856ad364e35_6.1.7601.17514_none_78e385451529fc1e/qasf.dll" "${W_SYSTEM64_DLLS}/qasf.dll" + w_try_regsvr64 qasf.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata qcap dlls \ + title="qcap.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/qcap.dll" + +load_qcap() +{ + helper_win7sp1 x86_microsoft-windows-directshow-capture_31bf3856ad364e35_6.1.7601.17514_none_bae08d1e7dcccf2a/qcap.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-directshow-capture_31bf3856ad364e35_6.1.7601.17514_none_bae08d1e7dcccf2a/qcap.dll" "${W_SYSTEM32_DLLS}/qcap.dll" + w_override_dlls native,builtin qcap + w_try_regsvr qcap.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-directshow-capture_31bf3856ad364e35_6.1.7601.17514_none_16ff28a2362a4060/qcap.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-directshow-capture_31bf3856ad364e35_6.1.7601.17514_none_16ff28a2362a4060/qcap.dll" "${W_SYSTEM64_DLLS}/qcap.dll" + w_try_regsvr64 qcap.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata qdvd dlls \ + title="qdvd.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/qdvd.dll" + +load_qdvd() +{ + helper_win7sp1 x86_microsoft-windows-directshow-dvdsupport_31bf3856ad364e35_6.1.7601.17514_none_562994bd321aac67/qdvd.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-directshow-dvdsupport_31bf3856ad364e35_6.1.7601.17514_none_562994bd321aac67/qdvd.dll" "${W_SYSTEM32_DLLS}/qdvd.dll" + w_override_dlls native,builtin qdvd + w_try_regsvr qdvd.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-directshow-dvdsupport_31bf3856ad364e35_6.1.7601.17514_none_b2483040ea781d9d/qdvd.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-directshow-dvdsupport_31bf3856ad364e35_6.1.7601.17514_none_b2483040ea781d9d/qdvd.dll" "${W_SYSTEM64_DLLS}/qdvd.dll" + w_try_regsvr64 qdvd.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata qedit dlls \ + title="qedit.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/qedit.dll" + +load_qedit() +{ + helper_win7sp1 x86_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_5ca34698a5a970d2/qedit.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_5ca34698a5a970d2/qedit.dll" "${W_SYSTEM32_DLLS}/qedit.dll" + w_override_dlls native,builtin qedit + w_try_regsvr qedit.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_b8c1e21c5e06e208/qedit.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_b8c1e21c5e06e208/qedit.dll" "${W_SYSTEM64_DLLS}/qedit.dll" + w_try_regsvr64 qedit.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata quartz dlls \ + title="quartz.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/quartz.dll" + +load_quartz() +{ + helper_win7sp1 x86_microsoft-windows-directshow-core_31bf3856ad364e35_6.1.7601.17514_none_a877a1cc4c284497/quartz.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-directshow-core_31bf3856ad364e35_6.1.7601.17514_none_a877a1cc4c284497/quartz.dll" "${W_SYSTEM32_DLLS}/quartz.dll" + w_override_dlls native,builtin quartz + w_try_regsvr quartz.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-directshow-core_31bf3856ad364e35_6.1.7601.17514_none_04963d500485b5cd/quartz.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-directshow-core_31bf3856ad364e35_6.1.7601.17514_none_04963d500485b5cd/quartz.dll" "${W_SYSTEM64_DLLS}/quartz.dll" + w_try_regsvr64 quartz.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata quartz_feb2010 dlls \ + title="quartz.dll (February 2010)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + conflicts="quartz" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/quartz.dll" + +load_quartz_feb2010() +{ + helper_directx_dl + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F quartz.dll "${W_TMP}/dxnt.cab" + + w_override_dlls native,builtin quartz + w_try_regsvr quartz.dll +} + +#---------------------------------------------------------------- + +w_metadata quicktime72 dlls \ + title="Apple QuickTime 7.2" \ + publisher="Apple" \ + year="2010" \ + media="download" \ + file1="QuickTimeInstaller.exe" \ + installed_file1="c:/windows/Installer/{95A890AA-B3B1-44B6-9C18-A8F7AB3EE7FC}/QTPlayer.ico" + +load_quicktime72() +{ + # https://support.apple.com/kb/DL837 + w_download http://appldnld.apple.com.edgesuite.net/content.info.apple.com/QuickTime/061-2915.20070710.pO94c/QuickTimeInstaller.exe a42b93531910bdf1539cc5ae3199ade5a1ca63fd4ac971df74c345d8e1ee6593 + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" "${file1}" ALLUSERS=1 DESKTOP_SHORTCUTS=0 QTTaskRunFlags=0 QTINFO.BISQTPRO=1 SCHEDULE_ASUW=0 REBOOT_REQUIRED=No ${W_OPT_UNATTENDED:+/qn} > /dev/null 2>&1 + + if w_workaround_wine_bug 11681; then + # Following advice verified with test movies from + # https://support.apple.com/kb/HT1425 + # in QuickTimePlayer. + + case ${LANG} in + ru*) w_warn "В настройках Quicktime включите Дополнительно / Безопасный режим (только gdi), иначе видеофайлы не будут воспроизводиться." ;; + pt*) w_warn "Nas preferências do Quicktime, marque Advanced / Safe Mode (gdi), ou os vídeos não irão reproduzir." ;; + *) w_warn "In Quicktime preferences, check Advanced / Safe Mode (gdi), or movies won't play." ;; + esac + if [ -z "${W_OPT_UNATTENDED}" ]; then + w_try "${WINE}" control "${W_PROGRAMS_WIN}\\QuickTime\\QTSystem\\QuickTime.cpl" + else + # FIXME: script the control panel with AutoHotKey? + # We could probably also overwrite QuickTime.qtp but + # the format isn't known, so we'd have to override all other settings, too. + : + fi + fi +} + +#---------------------------------------------------------------- + +w_metadata quicktime76 dlls \ + title="Apple QuickTime 7.6" \ + publisher="Apple" \ + year="2010" \ + media="download" \ + file1="QuickTimeInstaller.exe" \ + installed_file1="c:/windows/Installer/{57752979-A1C9-4C02-856B-FBB27AC4E02C}/QTPlayer.ico" + +load_quicktime76() +{ + # https://support.apple.com/kb/DL837 + w_download http://appldnld.apple.com/QuickTime/041-0025.20101207.Ptrqt/QuickTimeInstaller.exe c2dcda76ed55428e406ad7e6acdc84e804d30752a1380c313394c09bb3e27f56 + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" QuickTimeInstaller.exe ALLUSERS=1 DESKTOP_SHORTCUTS=0 QTTaskRunFlags=0 QTINFO.BISQTPRO=1 SCHEDULE_ASUW=0 REBOOT_REQUIRED=No ${W_OPT_UNATTENDED:+/qn} > /dev/null 2>&1 + + if w_workaround_wine_bug 11681; then + # Following advice verified with test movies from + # https://support.apple.com/kb/HT1425 + # in QuickTimePlayer. + + case ${LANG} in + ru*) w_warn "В настройках Quicktime включите Дополнительно / Безопасный режим (только gdi), иначе видеофайлы не будут воспроизводиться." ;; + pt*) w_warn "Nas preferências do Quicktime, marque Advanced / Safe Mode (gdi), ou os vídeos não irão reproduzir." ;; + *) w_warn "In Quicktime preferences, check Advanced / Safe Mode (gdi), or movies won't play." ;; + esac + if [ -z "${W_OPT_UNATTENDED}" ]; then + w_try "${WINE}" control "${W_PROGRAMS_WIN}\\QuickTime\\QTSystem\\QuickTime.cpl" + else + # FIXME: script the control panel with AutoHotKey? + # We could probably also overwrite QuickTime.qtp but + # the format isn't known, so we'd have to override all other settings, too. + : + fi + fi +} + +#---------------------------------------------------------------- + +w_metadata riched20 dlls \ + title="MS RichEdit Control 2.0 (riched20.dll)" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../win2ksp4/W2KSP4_EN.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/riched20.dll" + +load_riched20() +{ + # FIXME: this verb used to also install riched32. Does anyone need that? + helper_win2ksp4 i386/riched20.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/riched20.dl_ + w_override_dlls native,builtin riched20 + + # https://github.com/Winetricks/winetricks/issues/292 + w_call msls31 +} + +#---------------------------------------------------------------- + +# Problem - riched20 and riched30 both install riched20.dll! +# We may need a better way to distinguish between installed files. + +w_metadata riched30 dlls \ + title="MS RichEdit Control 3.0 (riched20.dll, msls31.dll)" \ + publisher="Microsoft" \ + year="2001" \ + media="download" \ + file1="InstMsiA.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/riched20.dll" \ + installed_file2="${W_SYSTEM32_DLLS_WIN}/msls31.dll" + +load_riched30() +{ + # http://www.novell.com/documentation/nm1/readmeen_web/readmeen_web.html#Akx3j64 + # claims that Groupwise Messenger's View / Text Size command + # only works with riched30, and recommends getting it by installing + # msi 2, which just happens to come with riched30 version of riched20 + # (though not with a corresponding riched32, which might be a problem) + + # https://www.microsoft.com/en-us/download/details.aspx?id=21990 + # Originally at https://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe + # with sha256sum 536e4c8385d7d250fd5702a6868d1ed004692136eefad22252d0dac15f02563a + # Mirror list at http://www.filewatcher.com/m/InstMsiA.Exe.1707856-0.html + # But they all have a different sha256sum, 5ab8b82f578f09dbccf797754155e531b5996b532c1f19c531596ec07cc4b46d + # Since mirrors are dead, going back to the microsoft.com version, via archive.org + w_download https://web.archive.org/web/20060720160141/https://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe 536e4c8385d7d250fd5702a6868d1ed004692136eefad22252d0dac15f02563a + + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}"/riched30/InstMsiA.exe + w_try_cp_dll "${W_TMP}"/riched20.dll "${W_SYSTEM32_DLLS}" + w_try_cp_dll "${W_TMP}"/msls31.dll "${W_SYSTEM32_DLLS}" + w_override_dlls native,builtin riched20 +} + +#---------------------------------------------------------------- + +w_metadata richtx32 dlls \ + title="MS Rich TextBox Control 6.0" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="../vb6sp6/VB60SP6-KB2708437-x86-ENU.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/richtx32.ocx" + +load_richtx32() +{ + helper_vb6sp6 "${W_SYSTEM32_DLLS}" richtx32.ocx + w_try_regsvr richtx32.ocx +} + +#---------------------------------------------------------------- + +w_metadata sapi dlls \ + title="MS Speech API" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + conflicts="speechsdk" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/sapi.dll" + +load_sapi() +{ + # This version of native SAPI needs to be directly in system32/syswow64 + for stub in "${W_SYSTEM32_DLLS}/Speech" "${W_SYSTEM64_DLLS}/Speech"; do + if [ -d "${stub}" ]; then + w_try rm -rf "${stub}" + fi + done + + helper_win7sp1 x86_microsoft-windows-speechcommon_31bf3856ad364e35_6.1.7601.17514_none_d809b28230ecfe46/sapi.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-speechcommon_31bf3856ad364e35_6.1.7601.17514_none_d809b28230ecfe46/sapi.dll" "${W_SYSTEM32_DLLS}/sapi.dll" + w_override_dlls native sapi + w_try_regsvr sapi.dll + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-speechcommon_31bf3856ad364e35_6.1.7601.17514_none_34284e05e94a6f7c/sapi.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-speechcommon_31bf3856ad364e35_6.1.7601.17514_none_34284e05e94a6f7c/sapi.dll" "${W_SYSTEM64_DLLS}/sapi.dll" + w_try_regsvr64 sapi.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata sdl dlls \ + title="Simple DirectMedia Layer" \ + publisher="Sam Lantinga" \ + year="2012" \ + media="download" \ + file1="SDL-1.2.15-win32.zip" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/SDL.dll" + +load_sdl() +{ + # https://www.libsdl.org/download-1.2.php + w_download https://www.libsdl.org/release/SDL-1.2.15-win32.zip a28bbe38714ef7817b1c1e8082a48f391f15e4043402444b783952fca939edc1 + w_try_unzip "${W_SYSTEM32_DLLS}" "${W_CACHE}"/sdl/SDL-1.2.15-win32.zip SDL.dll +} + +#---------------------------------------------------------------- + +w_metadata secur32 dlls \ + title="MS Security Support Provider Interface" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/secur32.dll" + +load_secur32() +{ + w_warn "Installing native secur32 may lead to stack overflow crashes, see https://bugs.winehq.org/show_bug.cgi?id=45344" + + helper_win7sp1 x86_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17514_none_a851f4adbb0d5141/secur32.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17514_none_a851f4adbb0d5141/secur32.dll" "${W_SYSTEM32_DLLS}/secur32.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17514_none_04709031736ac277/secur32.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17514_none_04709031736ac277/secur32.dll" "${W_SYSTEM64_DLLS}/secur32.dll" + fi + + w_override_dlls native,builtin secur32 +} + +#---------------------------------------------------------------- + +w_metadata setupapi dlls \ + title="MS Setup API" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/setupapi.dll" + +load_setupapi() +{ + helper_winxpsp3 i386/setupapi.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/setupapi.dl_ + + w_override_dlls native,builtin setupapi +} + +#---------------------------------------------------------------- + +w_metadata shockwave dlls \ + title="Shockwave" \ + publisher="Adobe" \ + year="2018" \ + media="download" \ + file1="sw_lic_full_installer.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/Adobe/Shockwave 12/shockwave_Projector_Loader.dcr" + +load_shockwave() { + # 2017/03/12: 39715a84b1d85347066fbf89a3af9f5e612b59402093b055cd423bd30a7f637d + # 2017/03/15: 58f2152bf726d52f08fb41f904c62ff00fdf748c8ce413e8c8547da3a21922ba + # 2017/08/03: bebebaef1644a994179a2e491ce3f55599d768f7c6019729f21e7029b1845b9c + # 2017/12/12: 0a9813ac55a8718440518dc2f5f410a3a065b422fe0618c073bfc631b9abf12c + # 2018/03/16: 4d7b408cf5b65a522b071d7d9ddbc5f6964911a7d55c418e31f393e6055cf796 + # 2018/05/24: 2b03fa11ff6f31b3fef9313264f0ef356ee11d5bc3642c30a2482b4ac5dd0084 + # 2018/06/14: a37f6c47b74fa3c96906e01b9b41d63c08d212fa3e357e354db1b5a93eb92c2f + # 2019/04/02: 8e414c1a218157d2b83877fb0b6a5002c2e9bff4dc2a3095bae774a13e3e9dbf + w_download https://fpdownload.macromedia.com/get/shockwave/default/english/win95nt/latest/sw_lic_full_installer.msi 8e414c1a218157d2b83877fb0b6a5002c2e9bff4dc2a3095bae774a13e3e9dbf + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" msiexec /i sw_lic_full_installer.msi ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +# While this is an sdk, some apps require it (those needing sapi.dll), +# so keeping in the dll category +w_metadata speechsdk dlls \ + title="MS Speech SDK 5.1" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + conflicts="sapi" \ + file1="SpeechSDK51.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Microsoft Speech SDK 5.1/Bin/SAPI51SampleApp.exe" + +load_speechsdk() +{ + w_package_unsupported_win64 + + # https://www.microsoft.com/en-us/download/details.aspx?id=10121 + w_download https://web.archive.org/web/20110805062427/https://download.microsoft.com/download/B/4/3/B4314928-7B71-4336-9DE7-6FA4CF00B7B3/SpeechSDK51.exe 520aa5d1a72dc6f41dc9b8b88603228ffd5d5d6f696224fc237ec4828fe7f6e0 + + w_try_unzip "${W_TMP}" "${W_CACHE}"/speechsdk/SpeechSDK51.exe + + # Otherwise it only installs the SDK and not the redistributable: + w_set_winver win2k + + # Only added in wine-2.18 + for stub in "${W_SYSTEM32_DLLS}/Speech/Common/sapi.dll" "${W_SYSTEM64_DLLS}/Speech/Common/sapi.dll"; do + if [ -f "${stub}" ]; then + w_try rm "${stub}" + fi + done + + w_try_cd "${W_TMP}" + w_try "${WINE}" msiexec /i "Microsoft Speech SDK 5.1.msi" ${W_OPT_UNATTENDED:+/q} + + # If sapi.dll isn't in original location, applications won't start, see + # e.g., https://bugs.winehq.org/show_bug.cgi?id=43841 + mkdir -p "${W_SYSTEM32_DLLS}/Speech/Common/" + w_try ln -s "${W_COMMONFILES_X86}/Microsoft Shared/Speech/sapi.dll" "${W_SYSTEM32_DLLS}/Speech/Common" + + w_override_dlls native sapi + + # SAPI 5.1 doesn't work on vista and newer + w_set_winver winxp +} + +#---------------------------------------------------------------- + +w_metadata tabctl32 dlls \ + title="Microsoft Tabbed Dialog Control 6.0 (tabctl32.ocx)" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="../vb6sp6/VB60SP6-KB2708437-x86-ENU.msi" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/tabctl32.ocx" + +load_tabctl32() +{ + helper_vb6sp6 "${W_TMP}" TabCtl32.ocx + w_try mv "${W_TMP}/TabCtl32.ocx" "${W_SYSTEM32_DLLS}/tabctl32.ocx" + w_try_regsvr tabctl32.ocx +} + +#---------------------------------------------------------------- + +w_metadata updspapi dlls \ + title="Windows Update Service API" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/updspapi.dll" + +load_updspapi() +{ + helper_winxpsp3 i386/update/updspapi.dll + w_try_cp_dll "${W_TMP}"/i386/update/updspapi.dll "${W_SYSTEM32_DLLS}" + + w_override_dlls native,builtin updspapi +} + +#---------------------------------------------------------------- + +w_metadata urlmon dlls \ + title="MS urlmon" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/urlmon.dll" + +load_urlmon() +{ + helper_win7sp1 x86_microsoft-windows-i..ersandsecurityzones_31bf3856ad364e35_8.0.7601.17514_none_d1a4c8feac0dfcdb/urlmon.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-i..ersandsecurityzones_31bf3856ad364e35_8.0.7601.17514_none_d1a4c8feac0dfcdb/urlmon.dll" "${W_SYSTEM32_DLLS}/urlmon.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-i..ersandsecurityzones_31bf3856ad364e35_8.0.7601.17514_none_2dc36482646b6e11/urlmon.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-i..ersandsecurityzones_31bf3856ad364e35_8.0.7601.17514_none_2dc36482646b6e11/urlmon.dll" "${W_SYSTEM64_DLLS}/urlmon.dll" + fi + + w_override_dlls native,builtin urlmon + + w_call iertutil +} + +#---------------------------------------------------------------- + +w_metadata usp10 dlls \ + title="Uniscribe" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/usp10.dll" + +load_usp10() +{ + helper_win7sp1 x86_microsoft-windows-usp_31bf3856ad364e35_6.1.7601.17514_none_af01e2f9b6be7939/usp10.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-usp_31bf3856ad364e35_6.1.7601.17514_none_af01e2f9b6be7939/usp10.dll" "${W_SYSTEM32_DLLS}/usp10.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-usp_31bf3856ad364e35_6.1.7601.17514_none_0b207e7d6f1bea6f/usp10.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-usp_31bf3856ad364e35_6.1.7601.17514_none_0b207e7d6f1bea6f/usp10.dll" "${W_SYSTEM64_DLLS}/usp10.dll" + fi + + w_override_dlls native,builtin usp10 +} + +#---------------------------------------------------------------- + +w_metadata vb2run dlls \ + title="MS Visual Basic 2 runtime" \ + publisher="Microsoft" \ + year="1993" \ + media="download" \ + file1="VBRUN200.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/VBRUN200.DLL" + +load_vb2run() +{ + # Not referenced on MS web anymore, but the old Microsoft Software Library FTP still has it. + # See ftp://ftp.microsoft.com/Softlib/index.txt + # 2014/05/31: Microsoft FTP is down ftp://$ftp_microsoft_com/Softlib/MSLFILES/VBRUN200.EXE + # 2015/08/10: chatnfiles is down, conradshome.com is up (and has a LOT of old MS installers archived!) + # 2018/11/15: now conradshome is down ,but quaddicted.com also has it (and a lot more) + w_download https://www.quaddicted.com/files/mirrors/ftp.planetquake.com/aoe/downloads/VBRUN200.EXE 4b0811d8fdcac1fd9411786c9119dc8d98d0540948211bdbc1ac682fbe5c0228 + w_try_unzip "${W_TMP}" "${W_CACHE}"/vb2run/VBRUN200.EXE + w_try_cp_dll "${W_TMP}/VBRUN200.DLL" "${W_SYSTEM32_DLLS}" +} + +#---------------------------------------------------------------- + +w_metadata vb3run dlls \ + title="MS Visual Basic 3 runtime" \ + publisher="Microsoft" \ + year="1998" \ + media="download" \ + file1="vb3run.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/Vbrun300.dll" + +load_vb3run() +{ + # See https://support.microsoft.com/kb/196285 + w_download https://download.microsoft.com/download/vb30/utility/1/w9xnt4/en-us/vb3run.exe 3ca3ad6332f83b5c2b86e4758afa400150f07ae66ce8b850d8f9d6bcd47ad4cd + w_try_unzip "${W_TMP}" "${W_CACHE}"/vb3run/vb3run.exe + w_try_cp_dll "${W_TMP}/Vbrun300.dll" "${W_SYSTEM32_DLLS}" +} + +#---------------------------------------------------------------- + +w_metadata vb4run dlls \ + title="MS Visual Basic 4 runtime" \ + publisher="Microsoft" \ + year="1998" \ + media="download" \ + file1="vb4run.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/Vb40032.dll" + +load_vb4run() +{ + # See https://support.microsoft.com/kb/196286 + w_download https://download.microsoft.com/download/vb40ent/sample27/1/w9xnt4/en-us/vb4run.exe 40931308b5a137f9ce3e9da9b43f4ca6688e18b523687cfea8be6cdffa3153fb + w_try_unzip "${W_TMP}" "${W_CACHE}"/vb4run/vb4run.exe + w_try_cp_dll "${W_TMP}/Vb40032.dll" "${W_SYSTEM32_DLLS}" + w_try_cp_dll "${W_TMP}/Vb40016.dll" "${W_SYSTEM32_DLLS}" +} + +#---------------------------------------------------------------- + +w_metadata vb5run dlls \ + title="MS Visual Basic 5 runtime" \ + publisher="Microsoft" \ + year="2001" \ + media="download" \ + file1="msvbvm50.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msvbvm50.dll" + +load_vb5run() +{ + w_download https://download.microsoft.com/download/vb50pro/utility/1/win98/en-us/msvbvm50.exe b5f8ea5b9d8b30822a2be2cdcb89cda99ec0149832659ad81f45360daa6e6965 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" msvbvm50.exe ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +w_metadata vb6run dlls \ + title="MS Visual Basic 6 runtime sp6" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="vbrun60sp6.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msvbvm60.dll" + +load_vb6run() +{ + # https://support.microsoft.com/kb/290887 + if test ! -f "${W_CACHE}"/vb6run/vbrun60sp6.exe; then + w_download https://lon-01.lo4d.com/files/visual-basic-runtime-files/VB6.0-KB290887-X86.exe 467b5a10c369865f2021d379fc0933cb382146b702bbca4bcb703fc86f4322bb + + w_try "${WINE}" "${W_CACHE}"/vb6run/VB6.0-KB290887-X86.exe "/T:${W_TMP_WIN}" /c ${W_OPT_UNATTENDED:+/q} + if test ! -f "${W_TMP}"/vbrun60sp6.exe; then + w_die vbrun60sp6.exe not found + fi + w_try mv "${W_TMP}"/vbrun60sp6.exe "${W_CACHE}"/vb6run + fi + + # extract the files instead of using installer to avoid https://github.com/Winetricks/winetricks/issues/1806 + w_try_cabextract -L "${W_CACHE}/${W_PACKAGE}/${file1}" -d "${W_TMP}" + + for dll in asycfilt.dll comcat.dll msvbvm60.dll oleaut32.dll olepro32.dll stdole2.tlb; do + w_try mv "${W_TMP}/${dll}" "${W_SYSTEM32_DLLS}" + done +} + +#---------------------------------------------------------------- + +winetricks_vcrun6_helper() { + if test ! -f "${W_CACHE}"/vcrun6/vcredist.exe; then + w_download_to vcrun6 https://download.microsoft.com/download/vc60pro/Update/2/W9XNT4/EN-US/VC6RedistSetup_deu.exe c2eb91d9c4448d50e46a32fecbcc3b418706d002beab9b5f4981de552098cee7 + + w_try "${WINE}" "${W_CACHE}"/vcrun6/VC6RedistSetup_deu.exe "/T:${W_TMP_WIN}" /c ${W_OPT_UNATTENDED:+/q} + if test ! -f "${W_TMP}"/vcredist.exe; then + w_die vcredist.exe not found + fi + mv "${W_TMP}"/vcredist.exe "${W_CACHE}"/vcrun6 + fi +} + +w_metadata vcrun6 dlls \ + title="Visual C++ 6 SP4 libraries (mfc42, msvcp60, msvcirt)" \ + publisher="Microsoft" \ + year="2000" \ + media="download" \ + file1="VC6RedistSetup_deu.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc42.dll" + +load_vcrun6() +{ + # Load the Visual C++ 6 runtime libraries, including the elusive mfc42u.dll + winetricks_vcrun6_helper + + # extract the files instead of using installer to avoid https://github.com/Winetricks/winetricks/issues/1806 + w_try_cabextract "${W_CACHE}/${W_PACKAGE}/${file1}" -d "${W_TMP}" -F vcredist.exe + w_try_cabextract "${W_TMP}/vcredist.exe" -d "${W_TMP}" + + for dll in asycfilt.dll comcat.dll mfc42.dll mfc42u.dll msvcirt.dll msvcp60.dll msvcrt.dll oleaut32.dll olepro32.dll stdole2.tlb; do + w_try mv "${W_TMP}/${dll}" "${W_SYSTEM32_DLLS}" + done + + # atla.dll lbecomes atl.dll (note: atlu.dll is unused) + w_try mv "${W_TMP}/atla.dll" "${W_SYSTEM32_DLLS}/atl.dll" +} + +w_metadata mfc42 dlls \ + title="Visual C++ 6 SP4 mfc42 library; part of vcrun6" \ + publisher="Microsoft" \ + year="2000" \ + media="download" \ + file1="../vcrun6/VC6RedistSetup_deu.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc42u.dll" + +load_mfc42() +{ + winetricks_vcrun6_helper + + w_try_cabextract "${W_CACHE}"/vcrun6/vcredist.exe -d "${W_SYSTEM32_DLLS}" -F "mfc42*.dll" +} + +w_metadata msvcirt dlls \ + title="Visual C++ 6 SP4 msvcirt library; part of vcrun6" \ + publisher="Microsoft" \ + year="2000" \ + media="download" \ + file1="../vcrun6/VC6RedistSetup_deu.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msvcirt.dll" + +load_msvcirt() +{ + winetricks_vcrun6_helper + + w_try_cabextract "${W_CACHE}"/vcrun6/vcredist.exe -d "${W_SYSTEM32_DLLS}" -F msvcirt.dll +} + +#---------------------------------------------------------------- + +# FIXME: we don't currently have an install check that can distinguish +# between SP4 and SP6, it would have to check size or version of a file, +# or maybe a registry key. + +w_metadata vcrun6sp6 dlls \ + title="Visual C++ 6 SP6 libraries (with fixes in ATL and MFC)" \ + publisher="Microsoft" \ + year="2004" \ + media="download" \ + file1="VS6SP6.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc42.dll" + +load_vcrun6sp6() +{ + w_download https://www.ddsystem.com.br/update/setup/vb6+sp6/VS6SP6.EXE 7fa1d1778824b55a5fceb02f45c399b5d4e4dce7403661e67e587b5f455edbf3 + + # extract the files instead of using installer to avoid https://github.com/Winetricks/winetricks/issues/1806 + w_try_cabextract "${W_CACHE}/${W_PACKAGE}/${file1}" -d "${W_TMP}" -F vcredist.exe + w_try_cabextract "${W_TMP}/vcredist.exe" -d "${W_TMP}" + + for dll in asycfilt.dll comcat.dll mfc42.dll mfc42u.dll msvcirt.dll msvcp60.dll msvcrt.dll oleaut32.dll olepro32.dll stdole2.tlb; do + w_try mv "${W_TMP}/${dll}" "${W_SYSTEM32_DLLS}" + done + + # atla.dll lbecomes atl.dll (note: atlu.dll is unused) + w_try mv "${W_TMP}/atla.dll" "${W_SYSTEM32_DLLS}/atl.dll" +} + +#---------------------------------------------------------------- + +w_metadata vcrun2003 dlls \ + title="Visual C++ 2003 libraries (mfc71,msvcp71,msvcr71)" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="BZEditW32_1.6.5.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/msvcp71.dll" + +load_vcrun2003() +{ + # Sadly, I know of no Microsoft URL for these + # winetricks-test can't handle ${file1} in url since it does a raw parsing :/ + w_download https://sourceforge.net/projects/bzflag/files/bzedit%20win32/1.6.5/BZEditW32_1.6.5.exe 84d1bda5dbf814742898a2e1c0e4bc793e9bc1fba4b7a93d59a7ef12bd0fd802 + + w_try_7z "${W_SYSTEM32_DLLS}" "${W_CACHE}/vcrun2003/BZEditW32_1.6.5.exe" "mfc71.dll" "msvcp71.dll" "msvcr71.dll" -y +} + +w_metadata mfc71 dlls \ + title="Visual C++ 2003 mfc71 library; part of vcrun2003" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="BZEditW32_1.6.5.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc71.dll" + +load_mfc71() +{ + w_download_to vcrun2003 https://sourceforge.net/projects/bzflag/files/bzedit%20win32/1.6.5/BZEditW32_1.6.5.exe 84d1bda5dbf814742898a2e1c0e4bc793e9bc1fba4b7a93d59a7ef12bd0fd802 + + w_try_7z "${W_SYSTEM32_DLLS}" "${W_CACHE}/vcrun2003/BZEditW32_1.6.5.exe" "mfc71.dll" -y +} + +#---------------------------------------------------------------- + +# Temporary fix for bug 169 +# The | symbol in installed_file1 means "or". +# (Adding an installed_file2 would mean 'and'.) +# Perhaps we should test for one if winxp mode, and the other if win7 mode; +# if that becomes important to get right, we'll do something like +# "if installed_file1 is just the single char @, call test_installed_$verb" +# and then define that function here. +w_metadata vcrun2005 dlls \ + title="Visual C++ 2005 libraries (mfc80,msvcp80,msvcr80)" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="vcredist_x86.EXE" \ + installed_file1="c:/windows/winsxs/x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b/mfc80.dll|c:/windows/winsxs/x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_deadbeef/mfc80.dll" + +load_vcrun2005() +{ + # 2011/06: Security update, see + # https://technet.microsoft.com/library/security/ms11-025 or + # https://support.microsoft.com/kb/2538242 + # Originally: 4ee4da0fe62d5fa1b5e80c6e6d88a4a2f8b3b140c35da51053d0d7b72a381d29 + # 2021/05/25: 8648c5fc29c44b9112fe52f9a33f80e7fc42d10f3b5b42b2121542a13e44adfd + w_download https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE 8648c5fc29c44b9112fe52f9a33f80e7fc42d10f3b5b42b2121542a13e44adfd + + # For native to be used, msvc* dlls must either be set to native only, OR + # set to native, builtin and remove wine's builtin manifest. Setting to native only breaks several apps, + # e.g., Dirac Codec and Ragnarok Online. + # For more info, see: + # https://bugs.winehq.org/show_bug.cgi?id=28225 + # https://bugs.winehq.org/show_bug.cgi?id=33604 + # https://bugs.winehq.org/show_bug.cgi?id=42859 + w_override_dlls native,builtin atl80 msvcm80 msvcp80 msvcr80 vcomp + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/q} + + if [ "${W_ARCH}" = "win64" ] ;then + # Originally: 0551a61c85b718e1fa015b0c3e3f4c4eea0637055536c00e7969286b4fa663e0 + # 2021/05/25: 4487570bd86e2e1aac29db2a1d0a91eb63361fcaac570808eb327cd4e0e2240d + w_download https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE 4487570bd86e2e1aac29db2a1d0a91eb63361fcaac570808eb327cd4e0e2240d + w_try "${WINE}" vcredist_x64.exe ${W_OPT_UNATTENDED:+/q} + fi +} + +w_metadata mfc80 dlls \ + title="Visual C++ 2005 mfc80 library; part of vcrun2005" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../vcrun2005/vcredist_x86.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc80.dll" + +load_mfc80() +{ + w_download_to vcrun2005 https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE 8648c5fc29c44b9112fe52f9a33f80e7fc42d10f3b5b42b2121542a13e44adfd + + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2005/vcredist_x86.EXE -F 'vcredist.msi' + w_try_cabextract --directory="${W_TMP}/win32" "${W_TMP}/win32/vcredist.msi" + + w_try_cp_dll "${W_TMP}/win32"/mfc80.dll.8.0.50727.6195.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E "${W_SYSTEM32_DLLS}"/mfc80.dll + w_try_cp_dll "${W_TMP}/win32"/mfc80u.dll.8.0.50727.6195.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E "${W_SYSTEM32_DLLS}"/mfc80u.dll + w_try_cp_dll "${W_TMP}/win32"/mfcm80.dll.8.0.50727.6195.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E "${W_SYSTEM32_DLLS}"/mfcm80.dll + w_try_cp_dll "${W_TMP}/win32"/mfcm80u.dll.8.0.50727.6195.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E "${W_SYSTEM32_DLLS}"/mfcm80u.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_download_to vcrun2005 https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE 4487570bd86e2e1aac29db2a1d0a91eb63361fcaac570808eb327cd4e0e2240d + + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2005/vcredist_x64.EXE -F 'vcredist.msi' + w_try_cabextract --directory="${W_TMP}/win64" "${W_TMP}/win64/vcredist.msi" + + w_try_cp_dll "${W_TMP}/win64"/mfc80.dll.8.0.50727.6195.8731EA9C_B0D8_8F16_FF1F_C8B3B9A1E18E "${W_SYSTEM64_DLLS}"/mfc80.dll + w_try_cp_dll "${W_TMP}/win64"/mfc80u.dll.8.0.50727.6195.8731EA9C_B0D8_8F16_FF1F_C8B3B9A1E18E "${W_SYSTEM64_DLLS}"/mfc80u.dll + w_try_cp_dll "${W_TMP}/win64"/mfcm80.dll.8.0.50727.6195.8731EA9C_B0D8_8F16_FF1F_C8B3B9A1E18E "${W_SYSTEM64_DLLS}"/mfcm80.dll + w_try_cp_dll "${W_TMP}/win64"/mfcm80u.dll.8.0.50727.6195.8731EA9C_B0D8_8F16_FF1F_C8B3B9A1E18E "${W_SYSTEM64_DLLS}"/mfcm80u.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata vcrun2008 dlls \ + title="Visual C++ 2008 libraries (mfc90,msvcp90,msvcr90)" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="vcredist_x86.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Common Files/Microsoft Shared/VC/msdia90.dll" + +load_vcrun2008() +{ + # June 2011 security update, see + # https://technet.microsoft.com/library/security/ms11-025 or + # https://support.microsoft.com/kb/2538242 + # Originally: 6b3e4c51c6c0e5f68c8a72b497445af3dbf976394cbb62aa23569065c28deeb6 + # 2021/05/23: 8742bcbf24ef328a72d2a27b693cc7071e38d3bb4b9b44dec42aa3d2c8d61d92 + w_download https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe 8742bcbf24ef328a72d2a27b693cc7071e38d3bb4b9b44dec42aa3d2c8d61d92 + + # For native to be used, msvc* dlls must either be set to native only, OR + # set to native, builtin and remove wine's builtin manifest. Setting to native only breaks several apps, + # e.g., Dirac Codec and Ragnarok Online. + # For more info, see: + # https://bugs.winehq.org/show_bug.cgi?id=28225 + # https://bugs.winehq.org/show_bug.cgi?id=33604 + # https://bugs.winehq.org/show_bug.cgi?id=42859 + w_override_dlls native,builtin atl90 msvcm90 msvcp90 msvcr90 vcomp90 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/q} + + case "${W_ARCH}" in + win64) + # Also install the 64-bit version + # 2016/11/15: b811f2c047a3e828517c234bd4aa4883e1ec591d88fad21289ae68a6915a6665 + # 2021/05/23: c5e273a4a16ab4d5471e91c7477719a2f45ddadb76c7f98a38fa5074a6838654 + w_download https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe c5e273a4a16ab4d5471e91c7477719a2f45ddadb76c7f98a38fa5074a6838654 + w_try "${WINE}" vcredist_x64.exe ${W_OPT_UNATTENDED:+/q} + ;; + esac +} + +w_metadata mfc90 dlls \ + title="Visual C++ 2008 mfc90 library; part of vcrun2008" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../vcrun2008/vcredist_x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc90.dll" + +load_mfc90() +{ + w_download_to vcrun2008 https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe 8742bcbf24ef328a72d2a27b693cc7071e38d3bb4b9b44dec42aa3d2c8d61d92 + + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2008/vcredist_x86.exe -F 'vc_red.cab' + w_try_cabextract --directory="${W_TMP}/win32" "${W_TMP}/win32/vc_red.cab" + + w_try_cp_dll "${W_TMP}/win32"/mfc90.dll.30729.6161.Microsoft_VC90_MFC_x86.QFE "${W_SYSTEM32_DLLS}"/mfc90.dll + w_try_cp_dll "${W_TMP}/win32"/mfc90u.dll.30729.6161.Microsoft_VC90_MFC_x86.QFE "${W_SYSTEM32_DLLS}"/mfc90u.dll + w_try_cp_dll "${W_TMP}/win32"/mfcm90.dll.30729.6161.Microsoft_VC90_MFC_x86.QFE "${W_SYSTEM32_DLLS}"/mfcm90.dll + w_try_cp_dll "${W_TMP}/win32"/mfcm90u.dll.30729.6161.Microsoft_VC90_MFC_x86.QFE "${W_SYSTEM32_DLLS}"/mfcm90u.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_download_to vcrun2008 https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe c5e273a4a16ab4d5471e91c7477719a2f45ddadb76c7f98a38fa5074a6838654 + + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2008/vcredist_x64.exe -F 'vc_red.cab' + w_try_cabextract --directory="${W_TMP}/win64" "${W_TMP}/win64/vc_red.cab" + + w_try_cp_dll "${W_TMP}/win64"/mfc90.dll.30729.6161.Microsoft_VC90_MFC_x64.QFE "${W_SYSTEM64_DLLS}"/mfc90.dll + w_try_cp_dll "${W_TMP}/win64"/mfc90u.dll.30729.6161.Microsoft_VC90_MFC_x64.QFE "${W_SYSTEM64_DLLS}"/mfc90u.dll + w_try_cp_dll "${W_TMP}/win64"/mfcm90.dll.30729.6161.Microsoft_VC90_MFC_x64.QFE "${W_SYSTEM64_DLLS}"/mfcm90.dll + w_try_cp_dll "${W_TMP}/win64"/mfcm90u.dll.30729.6161.Microsoft_VC90_MFC_x64.QFE "${W_SYSTEM64_DLLS}"/mfcm90u.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata vcrun2010 dlls \ + title="Visual C++ 2010 libraries (mfc100,msvcp100,msvcr100)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="vcredist_x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc100.dll" + +load_vcrun2010() +{ + # See https://www.microsoft.com/en-us/download/details.aspx?id=5555 + # Originally: 8162b2d665ca52884507ede19549e99939ce4ea4a638c537fa653539819138c8 + # 2021/04/24: 31d32fa39d52cac9a765a43660431f7a127eee784b54b2f5e2af3e2b763a1af8 + w_download https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe 31d32fa39d52cac9a765a43660431f7a127eee784b54b2f5e2af3e2b763a1af8 + + w_override_dlls native,builtin msvcp100 msvcr100 vcomp100 atl100 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" vcredist_x86.exe ${W_OPT_UNATTENDED:+/q} + + case "${W_ARCH}" in + win64) + # Also install the 64-bit version + # https://www.microsoft.com/en-us/download/details.aspx?id=13523 + # Originally: c6cd2d3f0b11dc2a604ffdc4dd97861a83b77e21709ba71b962a47759c93f4c8 + # 2021/04/24: 2fddbc3aaaab784c16bc673c3bae5f80929d5b372810dbc28649283566d33255 + w_download https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe 2fddbc3aaaab784c16bc673c3bae5f80929d5b372810dbc28649283566d33255 + w_try "${WINE}" vcredist_x64.exe ${W_OPT_UNATTENDED:+/q} + ;; + esac +} + +w_metadata mfc100 dlls \ + title="Visual C++ 2010 mfc100 library; part of vcrun2010" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../vcrun2010/vcredist_x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc100u.dll" + +load_mfc100() +{ + w_download_to vcrun2010 https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe 31d32fa39d52cac9a765a43660431f7a127eee784b54b2f5e2af3e2b763a1af8 + + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2010/vcredist_x86.exe -F '*.cab' + w_try_cabextract --directory="${W_TMP}/win32" "${W_TMP}/win32/vc_red.cab" + + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfc100_x86 "${W_SYSTEM32_DLLS}"/mfc100.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfc100u_x86 "${W_SYSTEM32_DLLS}"/mfc100u.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfcm100_x86 "${W_SYSTEM32_DLLS}"/mfcm100.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfcm100u_x86 "${W_SYSTEM32_DLLS}"/mfcm100u.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_download_to vcrun2010 https://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe 2fddbc3aaaab784c16bc673c3bae5f80929d5b372810dbc28649283566d33255 + + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2010/vcredist_x64.exe -F '*.cab' + w_try_cabextract --directory="${W_TMP}/win64" "${W_TMP}/win64/vc_red.cab" + + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfc100_x64 "${W_SYSTEM64_DLLS}"/mfc100.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfc100u_x64 "${W_SYSTEM64_DLLS}"/mfc100u.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfcm100_x64 "${W_SYSTEM64_DLLS}"/mfcm100.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfcm100u_x64 "${W_SYSTEM64_DLLS}"/mfcm100u.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata vcrun2012 dlls \ + title="Visual C++ 2012 libraries (atl110,mfc110,mfc110u,msvcp110,msvcr110,vcomp110)" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="vcredist_x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc110.dll" + +load_vcrun2012() +{ + # https://www.microsoft.com/en-us/download/details.aspx?id=30679 + w_download https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe b924ad8062eaf4e70437c8be50fa612162795ff0839479546ce907ffa8d6e386 + + w_override_dlls native,builtin atl110 msvcp110 msvcr110 vcomp110 + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" vcredist_x86.exe ${W_OPT_UNATTENDED:+/q} + + case "${W_ARCH}" in + win64) + # Also install the 64-bit version + # 2015/10/19: 681be3e5ba9fd3da02c09d7e565adfa078640ed66a0d58583efad2c1e3cc4064 + w_download https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe 681be3e5ba9fd3da02c09d7e565adfa078640ed66a0d58583efad2c1e3cc4064 + w_try "${WINE}" vcredist_x64.exe ${W_OPT_UNATTENDED:+/q} + ;; + esac +} + +w_metadata mfc110 dlls \ + title="Visual C++ 2012 mfc110 library; part of vcrun2012" \ + publisher="Microsoft" \ + year="2012" \ + media="download" \ + file1="../vcrun2012/vcredist_x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc110u.dll" + +load_mfc110() +{ + w_download_to vcrun2012 https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe b924ad8062eaf4e70437c8be50fa612162795ff0839479546ce907ffa8d6e386 + + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2012/vcredist_x86.exe -F 'a3' + w_try_cabextract --directory="${W_TMP}/win32" "${W_TMP}/win32/a3" + + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfc110_x86 "${W_SYSTEM32_DLLS}"/mfc110.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfc110u_x86 "${W_SYSTEM32_DLLS}"/mfc110u.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfcm110_x86 "${W_SYSTEM32_DLLS}"/mfcm110.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfcm110u_x86 "${W_SYSTEM32_DLLS}"/mfcm110u.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_download_to vcrun2012 https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe 681be3e5ba9fd3da02c09d7e565adfa078640ed66a0d58583efad2c1e3cc4064 + + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2012/vcredist_x64.exe -F 'a3' + w_try_cabextract --directory="${W_TMP}/win64" "${W_TMP}/win64/a3" + + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfc110_x64 "${W_SYSTEM64_DLLS}"/mfc110.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfc110u_x64 "${W_SYSTEM64_DLLS}"/mfc110u.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfcm110_x64 "${W_SYSTEM64_DLLS}"/mfcm110.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfcm110u_x64 "${W_SYSTEM64_DLLS}"/mfcm110u.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata vcrun2013 dlls \ + title="Visual C++ 2013 libraries (mfc120,mfc120u,msvcp120,msvcr120,vcomp120)" \ + publisher="Microsoft" \ + year="2013" \ + media="download" \ + file1="vcredist_x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc120.dll" + +load_vcrun2013() +{ + # https://support.microsoft.com/en-gb/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package + # 2015/01/14: a22895e55b26202eae166838edbe2ea6aad00d7ea600c11f8a31ede5cbce2048 + # 2019/03/24: 89f4e593ea5541d1c53f983923124f9fd061a1c0c967339109e375c661573c17 + w_download https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x86.exe 89f4e593ea5541d1c53f983923124f9fd061a1c0c967339109e375c661573c17 + + w_override_dlls native,builtin atl120 msvcp120 msvcr120 vcomp120 + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" vcredist_x86.exe ${W_OPT_UNATTENDED:+/q} + + case "${W_ARCH}" in + win64) + # Also install the 64-bit version + # 2015/10/19: e554425243e3e8ca1cd5fe550db41e6fa58a007c74fad400274b128452f38fb8 + # 2019/03/24: 20e2645b7cd5873b1fa3462b99a665ac8d6e14aae83ded9d875fea35ffdd7d7e + w_download https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe 20e2645b7cd5873b1fa3462b99a665ac8d6e14aae83ded9d875fea35ffdd7d7e + w_try "${WINE}" vcredist_x64.exe ${W_OPT_UNATTENDED:+/q} + ;; + esac +} + +w_metadata mfc120 dlls \ + title="Visual C++ 2013 mfc120 library; part of vcrun2013" \ + publisher="Microsoft" \ + year="2013" \ + media="download" \ + file1="../vcrun2013/vcredist_x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc120u.dll" + +load_mfc120() +{ + w_download_to vcrun2013 https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x86.exe 89f4e593ea5541d1c53f983923124f9fd061a1c0c967339109e375c661573c17 + + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2013/vcredist_x86.exe -F 'a3' + w_try_cabextract --directory="${W_TMP}/win32" "${W_TMP}/win32/a3" + + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfc120_x86 "${W_SYSTEM32_DLLS}"/mfc120.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfc120u_x86 "${W_SYSTEM32_DLLS}"/mfc120u.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfcm120_x86 "${W_SYSTEM32_DLLS}"/mfcm120.dll + w_try_cp_dll "${W_TMP}/win32"/F_CENTRAL_mfcm120u_x86 "${W_SYSTEM32_DLLS}"/mfcm120u.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_download_to vcrun2013 https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe 20e2645b7cd5873b1fa3462b99a665ac8d6e14aae83ded9d875fea35ffdd7d7e + + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2013/vcredist_x64.exe -F 'a3' + w_try_cabextract --directory="${W_TMP}/win64" "${W_TMP}/win64/a3" + + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfc120_x64 "${W_SYSTEM64_DLLS}"/mfc120.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfc120u_x64 "${W_SYSTEM64_DLLS}"/mfc120u.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfcm120_x64 "${W_SYSTEM64_DLLS}"/mfcm120.dll + w_try_cp_dll "${W_TMP}/win64"/F_CENTRAL_mfcm120u_x64 "${W_SYSTEM64_DLLS}"/mfcm120u.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata vcrun2015 dlls \ + title="Visual C++ 2015 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll)" \ + publisher="Microsoft" \ + year="2015" \ + media="download" \ + conflicts="vcrun2017 vcrun2019" \ + file1="vc_redist.x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc140.dll" + +load_vcrun2015() +{ + # https://www.microsoft.com/en-us/download/details.aspx?id=48145 + # 2015/10/12: fdd1e1f0dcae2d0aa0720895eff33b927d13076e64464bb7c7e5843b7667cd14 + w_download https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe fdd1e1f0dcae2d0aa0720895eff33b927d13076e64464bb7c7e5843b7667cd14 + + w_override_dlls native,builtin api-ms-win-crt-private-l1-1-0 api-ms-win-crt-conio-l1-1-0 api-ms-win-crt-convert-l1-1-0 api-ms-win-crt-environment-l1-1-0 api-ms-win-crt-filesystem-l1-1-0 api-ms-win-crt-heap-l1-1-0 api-ms-win-crt-locale-l1-1-0 api-ms-win-crt-math-l1-1-0 api-ms-win-crt-multibyte-l1-1-0 api-ms-win-crt-process-l1-1-0 api-ms-win-crt-runtime-l1-1-0 api-ms-win-crt-stdio-l1-1-0 api-ms-win-crt-string-l1-1-0 api-ms-win-crt-utility-l1-1-0 api-ms-win-crt-time-l1-1-0 atl140 concrt140 msvcp140 msvcr140 ucrtbase vcomp140 vcruntime140 + + if w_workaround_wine_bug 50894 "Working around failing wusa.exe lookup via C:\windows\SysNative"; then + w_set_winver winxp + fi + + # Setup will refuse to install ucrtbase because builtin's version number is higher, so manually replace it + # See https://bugs.winehq.org/show_bug.cgi?id=46317 + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2015/vc_redist.x86.exe -F 'a10' + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}/win32/a10" -F 'ucrtbase.dll' + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" vc_redist.x86.exe ${W_OPT_UNATTENDED:+/q} + + case "${W_ARCH}" in + win64) + # Also install the 64-bit version + # 2015/10/12: 5eea714e1f22f1875c1cb7b1738b0c0b1f02aec5ecb95f0fdb1c5171c6cd93a3 + w_download https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe 5eea714e1f22f1875c1cb7b1738b0c0b1f02aec5ecb95f0fdb1c5171c6cd93a3 + # Also replace 64-bit ucrtbase.dll + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2015/vc_redist.x64.exe -F 'a10' + w_try_cabextract --directory="${W_SYSTEM64_DLLS}" "${W_TMP}/win64/a10" -F 'ucrtbase.dll' + w_try "${WINE}" vc_redist.x64.exe ${W_OPT_UNATTENDED:+/q} + ;; + esac + + w_set_winver 'default' +} + +w_metadata mfc140 dlls \ + title="Visual C++ 2015 mfc140 library; part of vcrun2015" \ + publisher="Microsoft" \ + year="2015" \ + media="download" \ + file1="../vcrun2015/vc_redist.x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc140u.dll" + +load_mfc140() +{ + w_download_to vcrun2015 https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe fdd1e1f0dcae2d0aa0720895eff33b927d13076e64464bb7c7e5843b7667cd14 + + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2015/vc_redist.x86.exe -F 'a11' + w_try_cabextract --directory="${W_TMP}/win32" "${W_TMP}/win32/a11" + + w_try_cp_dll "${W_TMP}/win32"/mfc140.dll "${W_SYSTEM32_DLLS}"/mfc140.dll + w_try_cp_dll "${W_TMP}/win32"/mfc140u.dll "${W_SYSTEM32_DLLS}"/mfc140u.dll + w_try_cp_dll "${W_TMP}/win32"/mfcm140.dll "${W_SYSTEM32_DLLS}"/mfcm140.dll + w_try_cp_dll "${W_TMP}/win32"/mfcm140u.dll "${W_SYSTEM32_DLLS}"/mfcm140u.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_download_to vcrun2015 https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe 5eea714e1f22f1875c1cb7b1738b0c0b1f02aec5ecb95f0fdb1c5171c6cd93a3 + + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2015/vc_redist.x64.exe -F 'a11' + w_try_cabextract --directory="${W_TMP}/win64" "${W_TMP}/win64/a11" + + w_try_cp_dll "${W_TMP}/win64"/mfc140.dll "${W_SYSTEM64_DLLS}"/mfc140.dll + w_try_cp_dll "${W_TMP}/win64"/mfc140u.dll "${W_SYSTEM64_DLLS}"/mfc140u.dll + w_try_cp_dll "${W_TMP}/win64"/mfcm140.dll "${W_SYSTEM64_DLLS}"/mfcm140.dll + w_try_cp_dll "${W_TMP}/win64"/mfcm140u.dll "${W_SYSTEM64_DLLS}"/mfcm140u.dll + fi +} + +#---------------------------------------------------------------- + +w_metadata vcrun2017 dlls \ + title="Visual C++ 2017 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,msvcp140_1.dll,msvcp140_2.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll)" \ + publisher="Microsoft" \ + year="2017" \ + media="download" \ + conflicts="vcrun2015 vcrun2019" \ + file1="vc_redist.x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc140.dll" + +load_vcrun2017() +{ + # https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads + # 2017/10/02: 2da11e22a276be85970eaed255daf3d92af84e94142ec04252326a882e57303e + # 2019/03/17: 7355962b95d6a5441c304cd2b86baf37bc206f63349f4a02289bcfb69ef142d3 + # 2019/08/14: 54ad46ae80984aa48cae6361213692c96b3639e322730d28c7fb93b183c761da + w_download https://aka.ms/vs/15/release/vc_redist.x86.exe 54ad46ae80984aa48cae6361213692c96b3639e322730d28c7fb93b183c761da + + w_override_dlls native,builtin api-ms-win-crt-private-l1-1-0 api-ms-win-crt-conio-l1-1-0 api-ms-win-crt-heap-l1-1-0 api-ms-win-crt-locale-l1-1-0 api-ms-win-crt-math-l1-1-0 api-ms-win-crt-runtime-l1-1-0 api-ms-win-crt-stdio-l1-1-0 api-ms-win-crt-time-l1-1-0 atl140 concrt140 msvcp140 msvcp140_1 msvcp140_2 msvcr140 ucrtbase vcomp140 vcruntime140 + + if w_workaround_wine_bug 50894 "Working around failing wusa.exe lookup via C:\windows\SysNative"; then + w_set_winver winxp + fi + + # Setup will refuse to install ucrtbase because builtin's version number is higher, so manually replace it + # See https://bugs.winehq.org/show_bug.cgi?id=46317 + w_try_cabextract --directory="${W_TMP}/win32" "${W_CACHE}"/vcrun2017/vc_redist.x86.exe -F 'a10' + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}/win32/a10" -F 'ucrtbase.dll' + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" vc_redist.x86.exe ${W_OPT_UNATTENDED:+/q} + + case "${W_ARCH}" in + win64) + # Also install the 64-bit version + # https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads + # 2017/10/02: 7434bf559290cccc3dd3624f10c9e6422cce9927d2231d294114b2f929f0e465 + # 2019/03/17: b192e143d55257a0a2f76be42e44ff8ee14014f3b1b196c6e59829b6b3ec453c + # 2019/08/14: 5b0cbb977f2f5253b1ebe5c9d30edbda35dbd68fb70de7af5faac6423db575b5 + w_download https://aka.ms/vs/15/release/vc_redist.x64.exe 5b0cbb977f2f5253b1ebe5c9d30edbda35dbd68fb70de7af5faac6423db575b5 + # Also replace 64-bit ucrtbase.dll + w_try_cabextract --directory="${W_TMP}/win64" "${W_CACHE}"/vcrun2017/vc_redist.x64.exe -F 'a10' + w_try_cabextract --directory="${W_SYSTEM64_DLLS}" "${W_TMP}/win64/a10" -F 'ucrtbase.dll' + w_try "${WINE}" vc_redist.x64.exe ${W_OPT_UNATTENDED:+/q} + ;; + esac + + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata vcrun2019 dlls \ + title="Visual C++ 2015-2019 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,msvcp140_1,msvcp140_2,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (and vcruntime140_1.dll on win64)" \ + publisher="Microsoft" \ + year="2019" \ + media="download" \ + conflicts="vcrun2015 vcrun2017" \ + file1="vc_redist.x86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/mfc140.dll" + +load_vcrun2019() +{ + # https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads + # 2019/12/26: e59ae3e886bd4571a811fe31a47959ae5c40d87c583f786816c60440252cd7ec + # 2020/03/23: ac96016f1511ae3eb5ec9de04551146fe351b7f97858dcd67163912e2302f5d6 + # 2020/05/20: a06aac66734a618ab33c1522920654ddfc44fc13cafaa0f0ab85b199c3d51dc0 + # 2020/08/05: b4d433e2f66b30b478c0d080ccd5217ca2a963c16e90caf10b1e0592b7d8d519 + # 2020/10/03: caa38fd474164a38ab47ac1755c8ccca5ccfacfa9a874f62609e6439924e87ec + # 2020/11/13: 50a3e92ade4c2d8f310a2812d46322459104039b9deadbd7fdd483b5c697c0c8 + # 2021/03/09: 4521ed84b9b1679a706e719423d54ef5e413dc50dde1cf362232d7359d7e89c4 + # 2021/03/28: e830c313aa99656748f9d2ed582c28101eaaf75f5377e3fb104c761bf3f808b2 + # 2021/04/05: e830c313aa99656748f9d2ed582c28101eaaf75f5377e3fb104c761bf3f808b2 + # 2021/04/13: 14563755ac24a874241935ef2c22c5fce973acb001f99e524145113b2dc638c1 + # 2021/06/06: 91c21c93a88dd82e8ae429534dacbc7a4885198361eae18d82920c714e328cf9 + # 2021/08/26: 1acd8d5ea1cdc3eb2eb4c87be3ab28722d0825c15449e5c9ceef95d897de52fa + # 2021/10/23: 80c7969f4e05002a0cd820b746e0acb7406d4b85e52ef096707315b390927824 + # 2022/01/18: 4c6c420cf4cbf2c9c9ed476e96580ae92a97b2822c21329a2e49e8439ac5ad30 + + w_warn "ucrtbase.dll is no longer included in vcrun2019. For details see: https://github.com/Winetricks/winetricks/issues/1770" + + w_override_dlls native,builtin api-ms-win-crt-private-l1-1-0 api-ms-win-crt-conio-l1-1-0 api-ms-win-crt-heap-l1-1-0 api-ms-win-crt-locale-l1-1-0 api-ms-win-crt-math-l1-1-0 api-ms-win-crt-runtime-l1-1-0 api-ms-win-crt-stdio-l1-1-0 api-ms-win-crt-time-l1-1-0 atl140 concrt140 msvcp140 msvcp140_1 msvcp140_2 msvcr140 vcomp140 vcruntime140 + + w_download https://aka.ms/vs/16/release/vc_redist.x86.exe 4c6c420cf4cbf2c9c9ed476e96580ae92a97b2822c21329a2e49e8439ac5ad30 + + if w_workaround_wine_bug 50894 "Working around failing wusa.exe lookup via C:\windows\SysNative"; then + w_set_winver winxp + fi + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" vc_redist.x86.exe ${W_OPT_UNATTENDED:+/q} + + case "${W_ARCH}" in + win64) + # Also install the 64-bit version + # 2019/12/26: 40ea2955391c9eae3e35619c4c24b5aaf3d17aeaa6d09424ee9672aa9372aeed + # 2020/03/23: b6c82087a2c443db859fdbeaae7f46244d06c3f2a7f71c35e50358066253de52 + # 2020/05/20: 7d7105c52fcd6766beee1ae162aa81e278686122c1e44890712326634d0b055e + # 2020/08/05: 952a0c6cb4a3dd14c3666ef05bb1982c5ff7f87b7103c2ba896354f00651e358 + # 2020/10/03: 4b5890eb1aefdf8dfa3234b5032147eb90f050c5758a80901b201ae969780107 + # 2020/11/13: b1a32c71a6b7d5978904fb223763263ea5a7eb23b2c44a0d60e90d234ad99178 + # 2021/03/09: f299953673de262fefad9dd19bfbe6a5725a03ae733bebfec856f1306f79c9f7 + # 2021/03/28: b6c82087a2c443db859fdbeaae7f46244d06c3f2a7f71c35e50358066253de52 + # 2021/04/05: 015edd4e5d36e053b23a01adb77a2b12444d3fb6eccefe23e3a8cd6388616a16 + # 2021/04/13: 52b196bbe9016488c735e7b41805b651261ffa5d7aa86eb6a1d0095be83687b2 + # 2021/06/06: a1592d3da2b27230c087a3b069409c1e82c2664b0d4c3b511701624702b2e2a3 + # 2021/08/26: 003063723b2131da23f40e2063fb79867bae275f7b5c099dbd1792e25845872b + # 2021/10/23: 9b9dd72c27ab1db081de56bb7b73bee9a00f60d14ed8e6fde45dab3e619b5f04 + # 2022/01/18: 296f96cd102250636bcd23ab6e6cf70935337b1bbb3507fe8521d8d9cfaa932f + + # vcruntime140_1 is only shipped on x64: + w_override_dlls native,builtin vcruntime140_1 + + w_download https://aka.ms/vs/16/release/vc_redist.x64.exe 296f96cd102250636bcd23ab6e6cf70935337b1bbb3507fe8521d8d9cfaa932f + w_try "${WINE}" vc_redist.x64.exe ${W_OPT_UNATTENDED:+/q} + ;; + esac + + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata vjrun20 dlls \ + title="MS Visual J# 2.0 SE libraries (requires dotnet20)" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + file1="vjredist.exe" \ + installed_file1="c:/windows/Microsoft.NET/Framework/VJSharp/VJSharpSxS10.dll" + +load_vjrun20() +{ + w_package_unsupported_win64 + + w_call dotnet20 + + # See https://www.microsoft.com/en-us/download/details.aspx?id=18084 + w_download https://web.archive.org/web/20200803205240/https://download.microsoft.com/download/9/2/3/92338cd0-759f-4815-8981-24b437be74ef/vjredist.exe cf8f3dd4ad41453a302870b74de1c6489e7ed255ad3f652ce4af0b424a933b41 + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" vjredist.exe ${W_OPT_UNATTENDED:+/q /C:"install /qnt"} +} + +#---------------------------------------------------------------- + +w_metadata vstools2019 apps \ + title="MS Visual Studio Build Tools 2019" \ + publisher="Microsoft" \ + year="2019" \ + media="download" + +load_vstools2019() +{ + w_call dotnet472 + w_download https://aka.ms/vs/16/release/installer e653e715ddb8a08873e50a2fe091fca2ce77726b8b6ed2b99ed916d0e03c1fbe vstools2019.zip + w_try_unzip "${W_TMP}/vs_installer_16" "${W_CACHE}/${W_PACKAGE}/vstools2019.zip" + w_try "${WINE}" "${W_TMP}"/vs_installer_16/Contents/vs_installer.exe install \ + --channelId VisualStudio.16.Release \ + --channelUri "https://aka.ms/vs/16/release/channel" \ + --productId "Microsoft.VisualStudio.Product.BuildTools" \ + --add "Microsoft.VisualStudio.Workload.VCTools" \ + --includeRecommended \ + ${W_OPT_UNATTENDED:+--quiet} +} + +#---------------------------------------------------------------- + +w_metadata vulkanrt121412 dlls \ + title="Vulkan Runtime 1.2.141.2" \ + publisher="LunarG" \ + year="2020" \ + media="download" \ + file1="VulkanRT-1.2.141.2-Installer.exe" \ + installed_exe1="${W_SYSTEM32_DLLS_WIN}/vulkaninfo.exe" + +load_vulkanrt121412() +{ + # https://vulkan.lunarg.com/sdk/home + w_download "https://sdk.lunarg.com/sdk/download/1.2.141.2/windows/VulkanRT-1.2.141.2-Installer.exe?Human=true;u=" bf5050ead980e66fdd7b8eb5664d2b92e037ec5c400f75c2dc209a595828aaf7 "${file1}" + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata vulkansdk121412 apps \ + title="Vulkan SDK 1.2.141.2 (developers only)" \ + publisher="LunarG" \ + year="2020" \ + media="download" \ + file1="VulkanSDK-1.2.141.2-Installer.exe" \ + installed_file1="C:/VulkanSDK/1.2.141.2/vulkan.ico" \ + installed_file2="C:/windows/winevulkan.json" + +load_vulkansdk121412() +{ + _W_vulkan_version="${file1%-*.exe}" + _W_vulkan_version="${_W_vulkan_version#*-}" + # https://vulkan.lunarg.com/sdk/home + w_download "https://sdk.lunarg.com/sdk/download/1.2.141.2/windows/VulkanSDK-1.2.141.2-Installer.exe?Human=true;u=" d732eaee50c5f924ee64c9408bec7073b7a230464f1636f346833727c9bbddd0 "${file1}" + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/S} + echo "Creating C:\\windows\\winevulkan.json winevulkan json file" + cat > "${W_WINDIR_UNIX}"/winevulkan.json <<_EOF_ +{ + "file_format_version": "1.0.0", + "ICD": { + "library_path": "c:\\\\windows\\\\system32\\\\winevulkan.dll", + "api_version": "${_W_vulkan_version}" + } +} +_EOF_ + echo "Creating winevulkan registry settings" + cat > "${W_TMP}"/winevulkan.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\SOFTWARE\\Khronos\\Vulkan\\Drivers\\] +"C:\\\\Windows\\\\winevulkan.json"=dword:00000000 + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\winevulkan.reg +} + +#---------------------------------------------------------------- + +w_metadata webio dlls \ + title="MS Windows Web I/O" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/webio.dll" + +load_webio() +{ + helper_win7sp1 x86_microsoft-windows-webio_31bf3856ad364e35_6.1.7601.17514_none_5ef1a4093cf55387/webio.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-webio_31bf3856ad364e35_6.1.7601.17514_none_5ef1a4093cf55387/webio.dll" "${W_SYSTEM32_DLLS}/webio.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-webio_31bf3856ad364e35_6.1.7601.17514_none_bb103f8cf552c4bd/webio.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-webio_31bf3856ad364e35_6.1.7601.17514_none_bb103f8cf552c4bd/webio.dll" "${W_SYSTEM64_DLLS}/webio.dll" + fi + + w_override_dlls native,builtin webio +} + + +#---------------------------------------------------------------- + +w_metadata windowscodecs dlls \ + title="MS Windows Imaging Component" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="wic_x86_enu.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/WindowsCodecs.dll" + +load_windowscodecs() +{ + # Separate 32/64-bit installers: + if [ "${W_ARCH}" = "win32" ] ; then + # https://www.microsoft.com/en-us/download/details.aspx?id=32 + w_download https://web.archive.org/web/20200810071051if_/https://download.microsoft.com/download/f/f/1/ff178bb1-da91-48ed-89e5-478a99387d4f/wic_x86_enu.exe 196868b09d87ae04e4ab42b4a3e0abbb160500e8ff13deb38e2956ee854868b1 + EXE="wic_x86_enu.exe" + elif [ "${W_ARCH}" = "win64" ] ; then + # https://www.microsoft.com/en-us/download/details.aspx?id=1385 + w_download https://web.archive.org/web/20191125095535if_/http://download.microsoft.com/download/6/4/5/645fed5f-a6e7-44d9-9d10-fe83348796b0/wic_x64_enu.exe 5822fecd69a90c2833965a25e8779000825d69cc8c9250933f0ab70df52171e1 + EXE="wic_x64_enu.exe" + else + w_die "Invalid W_ARCH value, ${W_ARCH}" + fi + + # Avoid a file existence check. + w_try rm -f "${W_SYSTEM32_DLLS}"/windowscodecs.dll "${W_SYSTEM32_DLLS}"/windowscodecsext.dll "${W_SYSTEM32_DLLS}"/wmphoto.dll "${W_SYSTEM32_DLLS}"/photometadatahandler.dll + + if [ "${W_ARCH}" = "win64" ]; then + w_try rm -f "${W_SYSTEM64_DLLS}"/windowscodecs.dll "${W_SYSTEM64_DLLS}"/windowscodecsext.dll "${W_SYSTEM64_DLLS}"/wmphoto.dll "${W_SYSTEM64_DLLS}"/photometadatahandler.dll + fi + + # AF says in AppDB entry for .NET 3.0 that windowscodecs has to be native only + w_override_dlls native windowscodecs windowscodecsext + + # Previously this was winxp, but that didn't work for 64-bit, see https://github.com/Winetricks/winetricks/issues/970 + w_set_winver win2k3 + + # Always run the WIC installer in passive mode. + # See https://bugs.winehq.org/show_bug.cgi?id=16876 and + # https://bugs.winehq.org/show_bug.cgi?id=23232 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + if w_workaround_wine_bug 32859 "Working around possibly broken libX11"; then + # shellcheck disable=SC2086 + w_try ${W_TASKSET} "${WINE}" "${EXE}" /passive + else + w_try "${WINE}" "${EXE}" /passive + fi + + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata winhttp dlls \ + title="MS Windows HTTP Services" \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="../win2ksp4/W2KSP4_EN.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/winhttp.dll" + +load_winhttp() +{ + # 2017/10/12: Can't use win7's version, as that need webio.dll, which wants ntdll.EtwEventActivityIdControl. + # Should get that into wine{,-stable} so we can use win7 version in the long run + # See https://github.com/Winetricks/winetricks/issues/831 + + helper_win2ksp4 i386/new/winhttp.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/new/winhttp.dl_ + w_override_dlls native,builtin winhttp +} + +#---------------------------------------------------------------- + +w_metadata wininet dlls \ + title="MS Windows Internet API" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/wininet.dll" + +load_wininet() +{ + helper_win7sp1 x86_microsoft-windows-i..tocolimplementation_31bf3856ad364e35_8.0.7601.17514_none_1eaaa4a07717236e/wininet.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-i..tocolimplementation_31bf3856ad364e35_8.0.7601.17514_none_1eaaa4a07717236e/wininet.dll" "${W_SYSTEM32_DLLS}/wininet.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-i..tocolimplementation_31bf3856ad364e35_8.0.7601.17514_none_7ac940242f7494a4/wininet.dll + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-i..tocolimplementation_31bf3856ad364e35_8.0.7601.17514_none_7ac940242f7494a4/wininet.dll" "${W_SYSTEM64_DLLS}/wininet.dll" + fi + + w_override_dlls native,builtin wininet + + w_call iertutil +} + +#---------------------------------------------------------------- + +w_metadata wininet_win2k dlls \ + title="MS Windows Internet API" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="../win2ksp4/W2KSP4_EN.EXE" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/wininet.dll" + +load_wininet_win2k() +{ + helper_win2ksp4 i386/wininet.dl_ + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_TMP}"/i386/wininet.dl_ + + w_override_dlls native,builtin wininet +} + +#---------------------------------------------------------------- + +w_metadata wmi dlls \ + title="Windows Management Instrumentation (aka WBEM) Core 1.5" \ + publisher="Microsoft" \ + year="2000" \ + media="download" \ + file1="wmi9x.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/wbem/wbemcore.dll" + +load_wmi() +{ + w_package_unsupported_win64 + + # WMI for NT4.0 need validation: https://www.microsoft.com/en-us/download/details.aspx?id=7665 + # See also https://www.microsoft.com/en-us/download/details.aspx?id=16510 + # Originally at: https://download.microsoft.com/download/platformsdk/wmi9x/1.5/W9X/EN-US/wmi9x.exe + # Mirror list: https://filemare.com/en-us/search/wmi9x.exe/761569271 + # 2017/10/14: ftp://59.124.141.94 is dead, using ftp://82.162.138.211 + # 2018/06/03: ftp://82.162.138.211 is dead, moved to ftp://ftp.espe.edu.ec + # 2019/12/22: all ftp mirrors I found are dead, so use wayback machine for original MS url + w_download https://web.archive.org/web/20051221074940/https://download.microsoft.com/download/platformsdk/wmi9x/1.5/W9X/EN-US/wmi9x.exe 1d5d94050354b164c6a19531df151e0703d5eb39cebf4357ee2cfc340c2509d0 + + w_set_winver win98 + w_override_dlls native,builtin wbemprox wmiutils + + # Note: there is a crash in the background towards the end, doesn't seem to hurt; see https://bugs.winehq.org/show_bug.cgi?id=7920 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" wmi9x.exe ${W_OPT_UNATTENDED:+/S} + w_killall "WinMgmt.exe" + + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata wmv9vcm dlls \ + title="MS Windows Media Video 9 Video Compression Manager" \ + publisher="Microsoft" \ + year="2013" \ + media="download" \ + file1="WindowsServer2003-WindowsMedia-KB2845142-x86-ENU.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/wmv9vcm.dll" + +load_wmv9vcm() +{ + # https://www.microsoft.com/en-us/download/details.aspx?id=39486 + # See also https://www.microsoft.com/en-us/download/details.aspx?id=6191 + w_download https://download.microsoft.com/download/2/8/D/28DA9C3E-6DA2-456F-BD33-1F937EB6E0FF/WindowsServer2003-WindowsMedia-KB2845142-x86-ENU.exe 51e11691339c1c817b12f92e613145ffcd7b6f7e869d994cc8dbc4591b24f155 + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try_cp_dll "${W_TMP}"/wm64/wmv9vcm.dll "${W_SYSTEM32_DLLS}" + + # Register codec: + cat > "${W_TMP}"/tmp.reg <<_EOF_ +REGEDIT4 +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32] +"vidc.WMV3"="wmv9vcm.dll" + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\tmp.reg +} + +#---------------------------------------------------------------- + +w_metadata wsh57 dlls \ + title="MS Windows Script Host 5.7" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + file1="scripten.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/scrrun.dll" + +load_wsh57() +{ + # See also https://www.microsoft.com/en-us/download/details.aspx?id=8247 + w_download https://download.microsoft.com/download/4/4/d/44de8a9e-630d-4c10-9f17-b9b34d3f6417/scripten.exe 63c781b9e50bfd55f10700eb70b5c571a9bedfd8d35af29f6a22a77550df5e7b + + w_try_cabextract -d "${W_SYSTEM32_DLLS}" "${W_CACHE}"/wsh57/scripten.exe + + # Wine doesn't provide the other dll's (yet?) + w_override_dlls native,builtin jscript scrrun vbscript cscript.exe wscript.exe + w_try_regsvr dispex.dll jscript.dll scrobj.dll scrrun.dll vbscript.dll wshcon.dll wshext.dll +} + +#---------------------------------------------------------------- + +w_metadata xact dlls \ + title="MS XACT Engine (32-bit only)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/xactengine2_0.dll" + +load_xact() +{ + helper_directx_Jun2010 + + # Extract xactengine?_?.dll, X3DAudio?_?.dll, xaudio?_?.dll, xapofx?_?.dll + w_try_cabextract -d "${W_TMP}" -L -F '*_xact_*x86*' "${W_CACHE}/directx9/${DIRECTX_NAME}" + w_try_cabextract -d "${W_TMP}" -L -F '*_x3daudio_*x86*' "${W_CACHE}/directx9/${DIRECTX_NAME}" + w_try_cabextract -d "${W_TMP}" -L -F '*_xaudio_*x86*' "${W_CACHE}/directx9/${DIRECTX_NAME}" + + for x in "${W_TMP}"/*.cab ; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'xactengine*.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'xaudio*.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'x3daudio*.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'xapofx*.dll' "${x}" + done + + # Don't install 64-bit xact DLLs by default. They are broken in Wine, see: + # https://bugs.winehq.org/show_bug.cgi?id=41618#c5 + + w_override_dlls native,builtin xaudio2_0 xaudio2_1 xaudio2_2 xaudio2_3 xaudio2_4 xaudio2_5 xaudio2_6 xaudio2_7 + w_override_dlls native,builtin x3daudio1_0 x3daudio1_1 x3daudio1_2 x3daudio1_3 x3daudio1_4 x3daudio1_5 x3daudio1_6 x3daudio1_7 + w_override_dlls native,builtin xapofx1_1 xapofx1_2 xapofx1_3 xapofx1_4 xapofx1_5 + + # Register xactengine?_?.dll + for x in "${W_SYSTEM32_DLLS}"/xactengine* ; do + w_try_regsvr "$(basename "${x}")" + done + + # and xaudio?_?.dll, but not xaudio2_8 (unsupported) + for x in 0 1 2 3 4 5 6 7 ; do + w_try_regsvr "$(basename "${W_SYSTEM32_DLLS}/xaudio2_${x}")" + done +} + +#---------------------------------------------------------------- + +w_metadata xact_x64 dlls \ + title="MS XACT Engine (64-bit only)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_Jun2010_redist.exe" \ + installed_file1="${W_SYSTEM64_DLLS_WIN64:-does_not_exist}/xactengine2_0.dll" + +load_xact_x64() +{ + w_package_unsupported_win32 + if w_workaround_wine_bug 41618; then + w_warn "While this helps some games, it completely breaks others. You've been warned." + fi + + helper_directx_Jun2010 + + # Extract xactengine?_?.dll, X3DAudio?_?.dll, xaudio?_?.dll, xapofx?_?.dll + w_try_cabextract -d "${W_TMP}" -L -F '*_xact_*x64*' "${W_CACHE}/directx9/${DIRECTX_NAME}" + w_try_cabextract -d "${W_TMP}" -L -F '*_x3daudio_*x64*' "${W_CACHE}/directx9/${DIRECTX_NAME}" + w_try_cabextract -d "${W_TMP}" -L -F '*_xaudio_*x64*' "${W_CACHE}/directx9/${DIRECTX_NAME}" + + for x in "${W_TMP}"/*.cab ; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F 'xactengine*.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F 'xaudio*.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F 'x3daudio*.dll' "${x}" + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F 'xapofx*.dll' "${x}" + done + + w_override_dlls native,builtin xaudio2_0 xaudio2_1 xaudio2_2 xaudio2_3 xaudio2_4 xaudio2_5 xaudio2_6 xaudio2_7 + w_override_dlls native,builtin x3daudio1_0 x3daudio1_1 x3daudio1_2 x3daudio1_3 x3daudio1_4 x3daudio1_5 x3daudio1_6 x3daudio1_7 + w_override_dlls native,builtin xapofx1_1 xapofx1_2 xapofx1_3 xapofx1_4 xapofx1_5 + + # Register xactengine?_?.dll + for x in "${W_SYSTEM64_DLLS}"/xactengine* ; do + w_try_regsvr64 "$(basename "${x}")" + done + + # and xaudio?_?.dll, but not xaudio2_8 (unsupported) + for x in 0 1 2 3 4 5 6 7 ; do + w_try_regsvr64 "$(basename "${W_SYSTEM64_DLLS}/xaudio2_${x}")" + done +} + +#---------------------------------------------------------------- + +w_metadata xinput dlls \ + title="Microsoft XInput (Xbox controller support)" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/xinput1_1.dll" + +load_xinput() +{ + helper_directx_Jun2010 + + w_try_cabextract -d "${W_TMP}" -L -F '*_xinput_*x86*' "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*.cab; do + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F 'xinput*.dll' "${x}" + done + if test "${W_ARCH}" = "win64"; then + w_try_cabextract -d "${W_TMP}" -L -F '*_xinput_*x64*' "${W_CACHE}"/directx9/${DIRECTX_NAME} + for x in "${W_TMP}"/*x64.cab; do + w_try_cabextract -d "${W_SYSTEM64_DLLS}" -L -F 'xinput*.dll' "${x}" + done + fi + w_override_dlls native xinput1_1 + w_override_dlls native xinput1_2 + w_override_dlls native xinput1_3 + w_override_dlls native xinput9_1_0 +} + +#---------------------------------------------------------------- + +w_metadata xmllite dlls \ + title="MS xmllite dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/xmllite.dll" + +load_xmllite() +{ + helper_win7sp1 x86_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_0b66cb34258c936f/xmllite.dll + w_try_cp_dll "${W_TMP}/x86_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_0b66cb34258c936f/xmllite.dll" "${W_SYSTEM32_DLLS}/xmllite.dll" + + if [ "${W_ARCH}" = "win64" ]; then + helper_win7sp1_x64 amd64_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_678566b7ddea04a5/xmllite.dll "${W_SYSTEM64_DLLS}/xmllite.dll" + w_try_cp_dll "${W_TMP}/amd64_microsoft-windows-servicingstack_31bf3856ad364e35_6.1.7601.17514_none_678566b7ddea04a5/xmllite.dll" "${W_SYSTEM64_DLLS}/xmllite.dll" + fi + + w_override_dlls native,builtin xmllite +} + +#---------------------------------------------------------------- + +w_metadata xna31 dlls \ + title="MS XNA Framework Redistributable 3.1" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="xnafx31_redist.msi" \ + installed_file1="C:/windows/assembly/GAC_32/Microsoft.Xna.Framework.Game/3.1.0.0__6d5c3888ef60e27d/Microsoft.Xna.Framework.Game.dll" + +load_xna31() +{ + w_call dotnet20sp2 + w_download https://web.archive.org/web/20120325004645/https://download.microsoft.com/download/5/9/1/5912526C-B950-4662-99B6-119A83E60E5C/xnafx31_redist.msi 187e7e6b08fe35428d945612a7d258bfed25fad53cc54882983abdc73fe60f91 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" msiexec ${W_OPT_UNATTENDED:+/quiet} /i "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata xna40 dlls \ + title="MS XNA Framework Redistributable 4.0" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="xnafx40_redist.msi" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Common Files/Microsoft Shared/XNA/Framework/v4.0/XnaNative.dll" + +load_xna40() +{ + if w_workaround_wine_bug 30718; then + export COMPlus_OnlyUseLatestCLR=1 + w_call dotnet40 + fi + + # https://www.microsoft.com/en-us/download/details.aspx?id=20914 + w_download https://web.archive.org/web/20120325002813/https://download.microsoft.com/download/A/C/2/AC2C903B-E6E8-42C2-9FD7-BEBAC362A930/xnafx40_redist.msi e6c41d692ebcba854dad4b1c52bb7ddd05926bad3105595d6596b8bab01c25e7 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" msiexec ${W_OPT_UNATTENDED:+/quiet} /i "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata xvid dlls \ + title="Xvid Video Codec" \ + publisher="xvid.org" \ + year="2009" \ + media="download" \ + file1="Xvid-1.3.2-20110601.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Xvid/xvid.ico" + +load_xvid() +{ + w_call vcrun6 + w_download http://www.koepi.info/Xvid-1.3.2-20110601.exe 74b23965cebe59e388eab6dba224b6b751ef4519454cc12086ade51c81f0a33c + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ --mode unattended --decode_divx 1 --decode_3ivx 1 --decode_other 1} +} + +####################### +# fonts +####################### + +w_metadata baekmuk fonts \ + title="Baekmuk Korean fonts" \ + publisher="Wooderart Inc. / kldp.net" \ + year="1999" \ + media="download" \ + file1="fonts-baekmuk_2.2.orig.tar.gz" \ + installed_file1="${W_FONTSDIR_WIN}/batang.ttf" + +load_baekmuk() +{ + # See http://kldp.net/projects/baekmuk for project page + # Need to download from Debian as the project page has unique captcha tokens per visitor + w_download "https://deb.debian.org/debian/pool/main/f/fonts-baekmuk/fonts-baekmuk_2.2.orig.tar.gz" 08ab7dffb55d5887cc942ce370f5e33b756a55fbb4eaf0b90f244070e8d51882 + + w_try_cd "${W_TMP}" + w_try tar -zxf "${W_CACHE}/${W_PACKAGE}/${file1}" baekmuk-ttf-2.2/ttf + w_try_cp_font_files baekmuk-ttf-2.2/ttf/ "${W_FONTSDIR_UNIX}" + w_register_font batang.ttf "Baekmuk Batang" + w_register_font gulim.ttf "Baekmuk Gulim" + w_register_font dotum.ttf "Baekmuk Dotum" + w_register_font hline.ttf "Baekmuk Headline" +} + +#---------------------------------------------------------------- + +w_metadata cjkfonts fonts \ + title="All Chinese, Japanese, Korean fonts and aliases" \ + publisher="Various" \ + date="1999-2019" \ + media="download" + +load_cjkfonts() +{ + w_call fakechinese + w_call fakejapanese + w_call fakekorean + w_call unifont +} + +#---------------------------------------------------------------- + +w_metadata calibri fonts \ + title="MS Calibri font" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + file1="PowerPointViewer.exe" \ + installed_file1="${W_FONTSDIR_WIN}/calibri.ttf" + +load_calibri() +{ + helper_pptfonts "CALIBRI*.TTF" + w_register_font calibri.ttf "Calibri" + w_register_font calibrib.ttf "Calibri Bold" + w_register_font calibrii.ttf "Calibri Italic" + w_register_font calibriz.ttf "Calibri Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata cambria fonts \ + title="MS Cambria font" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="PowerPointViewer.exe" \ + installed_file1="${W_FONTSDIR_WIN}/cambria.ttc" + +load_cambria() +{ + helper_pptfonts "CAMBRIA*.TT*" + w_register_font cambria.ttc "Cambria & Cambria Math" + w_register_font cambriab.ttf "Cambria Bold" + w_register_font cambriai.ttf "Cambria Italic" + w_register_font cambriaz.ttf "Cambria Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata candara fonts \ + title="MS Candara font" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="PowerPointViewer.exe" \ + installed_file1="${W_FONTSDIR_WIN}/candara.ttf" + +load_candara() +{ + helper_pptfonts "CANDARA*.TTF" + w_register_font candara.ttf "Candara" + w_register_font candarab.ttf "Candara Bold" + w_register_font candarai.ttf "Candara Italic" + w_register_font candaraz.ttf "Candara Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata consolas fonts \ + title="MS Consolas console font" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="PowerPointViewer.exe" \ + installed_file1="${W_FONTSDIR_WIN}/consola.ttf" + +load_consolas() +{ + helper_pptfonts "CONSOLA*.TTF" + w_register_font consola.ttf "Consolas" + w_register_font consolab.ttf "Consolas Bold" + w_register_font consolai.ttf "Consolas Italic" + w_register_font consolaz.ttf "Consolas Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata constantia fonts \ + title="MS Constantia font" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="PowerPointViewer.exe" \ + installed_file1="${W_FONTSDIR_WIN}/constan.ttf" + +load_constantia() +{ + helper_pptfonts "CONSTAN*.TTF" + w_register_font constan.ttf "Constantia" + w_register_font constanb.ttf "Constantia Bold" + w_register_font constani.ttf "Constantia Italic" + w_register_font constanz.ttf "Constantia Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata corbel fonts \ + title="MS Corbel font" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + file1="PowerPointViewer.exe" \ + installed_file1="${W_FONTSDIR_WIN}/corbel.ttf" + +load_corbel() +{ + helper_pptfonts "CORBEL*.TTF" + w_register_font corbel.ttf "Corbel" + w_register_font corbelb.ttf "Corbel Bold" + w_register_font corbeli.ttf "Corbel Italic" + w_register_font corbelz.ttf "Corbel Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata meiryo fonts \ + title="MS Meiryo font" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + conflicts="fakejapanese_vlgothic" \ + file1="PowerPointViewer.exe" \ + installed_file1="${W_FONTSDIR_WIN}/meiryo.ttc" + +load_meiryo() +{ + helper_pptfonts "MEIRYO*.TTC" + w_register_font meiryo.ttc "Meiryo & Meiryo Italic & Meiryo UI & Meiryo UI Italic" + w_register_font meiryob.ttc "Meiryo Bold & Meiryo Bold Italic & Meiryo UI Bold & Meiryo UI Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata pptfonts fonts \ + title="All MS PowerPoint Viewer fonts" \ + publisher="various" \ + date="2007-2009" \ + media="download" + +load_pptfonts() +{ + w_call calibri + w_call cambria + w_call candara + w_call consolas + w_call constantia + w_call corbel + w_call meiryo +} + +helper_pptfonts() +{ + # download PowerPointViewer, extract the given files, and copy them to $W_FONTSDIR_UNIX + # Font registration should still be done by the respective verbs + # $1 - font pattern to extract + + pptfont="$1" + w_download_to PowerPointViewer "https://web.archive.org/web/20171225132744if_/https://download.microsoft.com/download/E/6/7/E675FFFC-2A6D-4AB0-B3EB-27C9F8C8F696/PowerPointViewer.exe" 249473568eba7a1e4f95498acba594e0f42e6581add4dead70c1dfb908a09423 + w_try_cabextract -d "${W_TMP}" -F "ppviewer.cab" "${W_CACHE}/PowerPointViewer/PowerPointViewer.exe" + w_try_cabextract -d "${W_TMP}" -F "${pptfont}" "${W_TMP}/ppviewer.cab" + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "${pptfont}" +} + +#---------------------------------------------------------------- + +w_metadata andale fonts \ + title="MS Andale Mono font" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="andale32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/andalemo.ttf" + +load_andale() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/andale32.exe" 0524fe42951adc3a7eb870e32f0920313c71f170c859b5f770d82b4ee111e970 + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/andale32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "AndaleMo.TTF" + w_register_font andalemo.ttf "Andale Mono" +} + +#---------------------------------------------------------------- + +w_metadata arial fonts \ + title="MS Arial / Arial Black fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="arial32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/arial.ttf" + +load_arial() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/arial32.exe" 85297a4d146e9c87ac6f74822734bdee5f4b2a722d7eaa584b7f2cbf76f478f6 + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/arialb32.exe" a425f0ffb6a1a5ede5b979ed6177f4f4f4fdef6ae7c302a7b7720ef332fec0a8 + + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/arial32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "Arial*.TTF" + w_register_font arialbd.ttf "Arial Bold" + w_register_font arialbi.ttf "Arial Bold Italic" + w_register_font ariali.ttf "Arial Italic" + w_register_font arial.ttf "Arial" + + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/arialb32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "AriBlk.TTF" + w_register_font ariblk.ttf "Arial Black" +} + +#---------------------------------------------------------------- + +w_metadata comicsans fonts \ + title="MS Comic Sans fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="comic32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/comic.ttf" + +load_comicsans() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/comic32.exe" 9c6df3feefde26d4e41d4a4fe5db2a89f9123a772594d7f59afd062625cd204e + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/comic32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "Comic*.TTF" + w_register_font comicbd.ttf "Comic Sans MS Bold" + w_register_font comic.ttf "Comic Sans MS" +} + +#---------------------------------------------------------------- + +w_metadata courier fonts \ + title="MS Courier fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="courie32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/cour.ttf" +load_courier() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/courie32.exe" bb511d861655dde879ae552eb86b134d6fae67cb58502e6ff73ec5d9151f3384 + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/courie32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "cour*.ttf" + w_register_font courbd.ttf "Courier New Bold" + w_register_font courbi.ttf "Courier New Bold Italic" + w_register_font couri.ttf "Courier New Italic" + w_register_font cour.ttf "Courier New" +} + +#---------------------------------------------------------------- + +w_metadata georgia fonts \ + title="MS Georgia fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="georgi32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/georgia.ttf" +load_georgia() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/georgi32.exe" 2c2c7dcda6606ea5cf08918fb7cd3f3359e9e84338dc690013f20cd42e930301 + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/georgi32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "Georgia*.TTF" + w_register_font georgiab.ttf "Georgia Bold" + w_register_font georgiai.ttf "Georgia Italic" + w_register_font georgia.ttf "Georgia" + w_register_font georgiaz.ttf "Georgia Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata impact fonts \ + title="MS Impact fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="impact32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/impact.ttf" + +load_impact() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/impact32.exe" 6061ef3b7401d9642f5dfdb5f2b376aa14663f6275e60a51207ad4facf2fccfb + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/impact32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "Impact.TTF" + w_register_font impact.ttf "Impact" +} + +#---------------------------------------------------------------- + +w_metadata times fonts \ + title="MS Times fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="times32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/times.ttf" + +load_times() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/times32.exe" db56595ec6ef5d3de5c24994f001f03b2a13e37cee27bc25c58f6f43e8f807ab + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/times32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "Times*.TTF" + w_register_font timesbd.ttf "Times New Roman Bold" + w_register_font timesbi.ttf "Times New Roman Bold Italic" + w_register_font timesi.ttf "Times New Roman Italic" + w_register_font times.ttf "Times New Roman" +} + +#---------------------------------------------------------------- + +w_metadata trebuchet fonts \ + title="MS Trebuchet fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="trebuchet32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/trebuc.ttf" + +load_trebuchet() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/trebuc32.exe" 5a690d9bb8510be1b8b4fe49f1f2319651fe51bbe54775ddddd8ef0bd07fdac9 + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/trebuc32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "[tT]rebuc*.ttf" + w_register_font trebucbd.ttf "Trebuchet MS Bold" + w_register_font trebucbi.ttf "Trebuchet MS Bold Italic" + w_register_font trebucit.ttf "Trebuchet MS Italic" + w_register_font trebuc.ttf "Trebuchet MS" +} + +#---------------------------------------------------------------- + +w_metadata verdana fonts \ + title="MS Verdana fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="verdan32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/verdana.ttf" + +load_verdana() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/verdan32.exe" c1cb61255e363166794e47664e2f21af8e3a26cb6346eb8d2ae2fa85dd5aad96 + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/verdan32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "Verdana*.TTF" + w_register_font verdanab.ttf "Verdana Bold" + w_register_font verdanai.ttf "Verdana Italic" + w_register_font verdana.ttf "Verdana" + w_register_font verdanaz.ttf "Verdana Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata webdings fonts \ + title="MS Webdings fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="webdin32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/webdings.ttf" + +load_webdings() +{ + w_download_to corefonts "https://mirrors.kernel.org/gentoo/distfiles/webdin32.exe" 64595b5abc1080fba8610c5c34fab5863408e806aafe84653ca8575bed17d75a + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/corefonts/webdin32.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "Webdings.TTF" + w_register_font webdings.ttf "Webdings" +} + +#---------------------------------------------------------------- + +w_metadata corefonts fonts \ + title="MS Arial, Courier, Times fonts" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="arial32.exe" \ + installed_file1="${W_FONTSDIR_WIN}/corefonts.installed" + +load_corefonts() +{ + # Natively installed versions of these fonts will cause the installers + # to exit silently. Because there are apps out there that depend on the + # files being present in the Windows font directory we use cabextract + # to obtain the files and register the fonts by hand. + + w_call andale + w_call arial + w_call comicsans + w_call courier + w_call georgia + w_call impact + w_call times + w_call trebuchet + w_call verdana + w_call webdings + + touch "${W_FONTSDIR_UNIX}/corefonts.installed" +} + +#---------------------------------------------------------------- + +w_metadata droid fonts \ + title="Droid fonts" \ + publisher="Ascender Corporation" \ + year="2009" \ + media="download" \ + file1="DroidSans-Bold.ttf" \ + installed_file1="${W_FONTSDIR_WIN}/droidsans-bold.ttf" + +do_droid() { + w_download "${_W_droid_url}${1}?raw=true" "$3" "$1" + w_try_cp_font_files "${W_CACHE}/droid" "${W_FONTSDIR_UNIX}" "$1" + w_register_font "$(echo "$1" | tr "[:upper:]" "[:lower:]")" "$2" +} + +load_droid() +{ + # See https://en.wikipedia.org/wiki/Droid_(font) + # Old URL was http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=data/fonts/' + # Then it was https://github.com/android/platform_frameworks_base/blob/master/data/fonts/ + # but the fonts are no longer in master. Using an older commit instead: + _W_droid_url="https://github.com/android/platform_frameworks_base/blob/feef9887e8f8eb6f64fc1b4552c02efb5755cdc1/data/fonts/" + + do_droid DroidSans-Bold.ttf "Droid Sans Bold" 2f529a3e60c007979d95d29794c3660694217fb882429fb33919d2245fe969e9 + do_droid DroidSansFallback.ttf "Droid Sans Fallback" 05d71b179ef97b82cf1bb91cef290c600a510f77f39b4964359e3ef88378c79d + do_droid DroidSansJapanese.ttf "Droid Sans Japanese" 935867c21b8484c959170e62879460ae9363eae91f9b35e4519d24080e2eac30 + do_droid DroidSansMono.ttf "Droid Sans Mono" 12b552de765dc1265d64f9f5566649930dde4dba07da0251d9f92801e70a1047 + do_droid DroidSans.ttf "Droid Sans" f51b88945f4c1b236f44b8d55a2d304316869127e95248c435c23f1e4142a7db + do_droid DroidSerif-BoldItalic.ttf "Droid Serif Bold Italic" 3fdf15b911c04317e5881ae1e4b9faefcdc4bf4cfb60223597d5c9455c3e4156 + do_droid DroidSerif-Bold.ttf "Droid Serif Bold" d28533eed8368f047eb5f57a88a91ba2ffc8b69a2dec5e50fe3f0c11ae3f4d8e + do_droid DroidSerif-Italic.ttf "Droid Serif Italic" 8a55a4823886234792991dd304dfa1fa120ae99483ec6c2255597d7d913b9a55 + do_droid DroidSerif-Regular.ttf "Droid Serif" 22aea9471bea5bce1ec3bf7136c84f075b3d11cf09dffdc3dba05e570094cbde + + unset _W_droid_url +} + +#---------------------------------------------------------------- + +w_metadata eufonts fonts \ + title="Updated fonts for Romanian and Bulgarian" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="EUupdate.EXE" \ + installed_file1="${W_FONTSDIR_WIN}/trebucbd.ttf" + +load_eufonts() +{ + # https://www.microsoft.com/en-us/download/details.aspx?id=16083 + # Previously at https://download.microsoft.com/download/a/1/8/a180e21e-9c2b-4b54-9c32-bf7fd7429970/EUupdate.EXE + # 2020/09/11: https://sourceforge.net/projects/mscorefonts2/files/cabs/EUupdate.EXE + w_download "https://sourceforge.net/projects/mscorefonts2/files/cabs/EUupdate.EXE" 464dd2cd5f09f489f9ac86ea7790b7b8548fc4e46d9f889b68d2cdce47e09ea8 + w_try_cabextract -d "${W_TMP}" "${W_CACHE}"/eufonts/EUupdate.EXE + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" + + w_register_font arialbd.ttf "Arial Bold" + w_register_font arialbi.ttf "Arial Bold Italic" + w_register_font ariali.ttf "Arial Italic" + w_register_font arial.ttf "Arial" + w_register_font timesbd.ttf "Times New Roman Bold" + w_register_font timesbi.ttf "Times New Roman Bold Italic" + w_register_font timesi.ttf "Times New Roman Italic" + w_register_font times.ttf "Times New Roman" + w_register_font trebucbd.ttf "Trebuchet MS Bold" + w_register_font trebucbi.ttf "Trebuchet MS Bold Italic" + w_register_font trebucit.ttf "Trebuchet MS Italic" + w_register_font trebuc.ttf "Trebuchet MS" + w_register_font verdanab.ttf "Verdana Bold" + w_register_font verdanai.ttf "Verdana Italian" + w_register_font verdana.ttf "Verdana" + w_register_font verdanaz.ttf "Verdana Bold Italic" +} + +#---------------------------------------------------------------- + +w_metadata fakechinese fonts \ + title="Creates aliases for Chinese fonts using Source Han Sans fonts" \ + publisher="Adobe" \ + year="2019" + +load_fakechinese() +{ + # Loads Source Han Sans fonts and sets aliases for Microsoft Chinese fonts + # Reference : https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_fonts + w_call sourcehansans + + # Simplified Chinese + w_register_font_replacement "Dengxian" "Source Han Sans SC" + w_register_font_replacement "FangSong" "Source Han Sans SC" + w_register_font_replacement "KaiTi" "Source Han Sans SC" + w_register_font_replacement "Microsoft YaHei" "Source Han Sans SC" + w_register_font_replacement "Microsoft YaHei UI" "Source Han Sans SC" + w_register_font_replacement "NSimSun" "Source Han Sans SC" + w_register_font_replacement "SimHei" "Source Han Sans SC" + w_register_font_replacement "SimKai" "Source Han Sans SC" + w_register_font_replacement "SimSun" "Source Han Sans SC" + w_register_font_replacement "SimSun-ExtB" "Source Han Sans SC" + + # Traditional Chinese + w_register_font_replacement "DFKai-SB" "Source Han Sans TC" + w_register_font_replacement "Microsoft JhengHei" "Source Han Sans TC" + w_register_font_replacement "Microsoft JhengHei UI" "Source Han Sans TC" + w_register_font_replacement "MingLiU" "Source Han Sans TC" + w_register_font_replacement "PMingLiU" "Source Han Sans TC" + w_register_font_replacement "MingLiU-ExtB" "Source Han Sans TC" + w_register_font_replacement "PMingLiU-ExtB" "Source Han Sans TC" +} + +#---------------------------------------------------------------- + +w_metadata fakejapanese fonts \ + title="Creates aliases for Japanese fonts using Source Han Sans fonts" \ + publisher="Adobe" \ + year="2019" + +load_fakejapanese() +{ + # Loads Source Han Sans fonts and sets aliases for Microsoft Japanese fonts + # Reference : https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_fonts + w_call sourcehansans + + w_register_font_replacement "Meiryo" "Source Han Sans" + w_register_font_replacement "Meiryo UI" "Source Han Sans" + w_register_font_replacement "MS Gothic" "Source Han Sans" + w_register_font_replacement "MS PGothic" "Source Han Sans" + w_register_font_replacement "MS Mincho" "Source Han Sans" + w_register_font_replacement "MS PMincho" "Source Han Sans" + w_register_font_replacement "MS UI Gothic" "Source Han Sans" + w_register_font_replacement "UD Digi KyoKasho N-R" "Source Han Sans" + w_register_font_replacement "UD Digi KyoKasho NK-R" "Source Han Sans" + w_register_font_replacement "UD Digi KyoKasho NP-R" "Source Han Sans" + w_register_font_replacement "Yu Gothic" "Source Han Sans" + w_register_font_replacement "Yu Gothic UI" "Source Han Sans" + w_register_font_replacement "Yu Mincho" "Source Han Sans" + w_register_font_replacement "メイリオ" "Source Han Sans" + w_register_font_replacement "MS ゴシック" "Source Han Sans" + w_register_font_replacement "MS Pゴシック" "Source Han Sans" + w_register_font_replacement "MS 明朝" "Source Han Sans" + w_register_font_replacement "MS P明朝" "Source Han Sans" +} + +#---------------------------------------------------------------- + +w_metadata fakejapanese_ipamona fonts \ + title="Creates aliases for Japanese fonts using IPAMona fonts" \ + publisher="Jun Kobayashi" \ + year="2008" + +load_fakejapanese_ipamona() +{ + w_call ipamona + + # Aliases to set: + # MS UI Gothic --> IPAMonaUIGothic + # MS Gothic (MS ゴシック) --> IPAMonaGothic + # MS PGothic (MS Pゴシック) --> IPAMonaPGothic + # MS Mincho (MS 明朝) --> IPAMonaMincho + # MS PMincho (MS P明朝) --> IPAMonaPMincho + + w_register_font_replacement "MS UI Gothic" "IPAMonaUIGothic" + w_register_font_replacement "MS Gothic" "IPAMonaGothic" + w_register_font_replacement "MS PGothic" "IPAMonaPGothic" + w_register_font_replacement "MS Mincho" "IPAMonaMincho" + w_register_font_replacement "MS PMincho" "IPAMonaPMincho" + w_register_font_replacement "MS ゴシック" "IPAMonaGothic" + w_register_font_replacement "MS Pゴシック" "IPAMonaPGothic" + w_register_font_replacement "MS 明朝" "IPAMonaMincho" + w_register_font_replacement "MS P明朝" "IPAMonaPMincho" +} + +#---------------------------------------------------------------- + +w_metadata fakejapanese_vlgothic fonts \ + title="Creates aliases for Japanese Meiryo fonts using VLGothic fonts" \ + publisher="Project Vine / Daisuke Suzuki" \ + conflicts="meiryo" \ + year="2014" + +load_fakejapanese_vlgothic() +{ + w_call vlgothic + + # Aliases to set: + # Meiryo UI --> VL Gothic + # Meiryo (メイリオ) --> VL Gothic + + w_register_font_replacement "Meiryo UI" "VL Gothic" + w_register_font_replacement "Meiryo" "VL Gothic" + w_register_font_replacement "メイリオ" "VL Gothic" +} + +#---------------------------------------------------------------- + +w_metadata fakekorean fonts \ + title="Creates aliases for Korean fonts using Source Han Sans fonts" \ + publisher="Adobe" \ + year="2019" + +load_fakekorean() +{ + # Loads Source Han Sans fonts and sets aliases for Microsoft Korean fonts + # Reference : https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_fonts + w_call sourcehansans + + w_register_font_replacement "Batang" "Source Han Sans K" + w_register_font_replacement "BatangChe" "Source Han Sans K" + w_register_font_replacement "Dotum" "Source Han Sans K" + w_register_font_replacement "DotumChe" "Source Han Sans K" + w_register_font_replacement "Gulim" "Source Han Sans K" + w_register_font_replacement "GulimChe" "Source Han Sans K" + w_register_font_replacement "Gungsuh" "Source Han Sans K" + w_register_font_replacement "GungsuhChe" "Source Han Sans K" + w_register_font_replacement "Malgun Gothic" "Source Han Sans K" + w_register_font_replacement "바탕" "Source Han Sans K" + w_register_font_replacement "바탕체" "Source Han Sans K" + w_register_font_replacement "돋움" "Source Han Sans K" + w_register_font_replacement "돋움체" "Source Han Sans K" + w_register_font_replacement "굴림" "Source Han Sans K" + w_register_font_replacement "굴림체" "Source Han Sans K" + w_register_font_replacement "맑은 고딕" "Source Han Sans K" +} + +#---------------------------------------------------------------- + +w_metadata ipamona fonts \ + title="IPAMona Japanese fonts" \ + publisher="Jun Kobayashi" \ + year="2008" \ + media="download" \ + file1="opfc-ModuleHP-1.1.1_withIPAMonaFonts-1.0.8.tar.gz" \ + installed_file1="${W_FONTSDIR_WIN}/ipag-mona.ttf" \ + homepage="http://www.geocities.jp/ipa_mona/" + +load_ipamona() +{ + w_download "https://web.archive.org/web/20190309175311/http://www.geocities.jp/ipa_mona/opfc-ModuleHP-1.1.1_withIPAMonaFonts-1.0.8.tar.gz" ab77beea3b051abf606cd8cd3badf6cb24141ef145c60f508fcfef1e3852bb9d + + w_try_cd "${W_TMP}" + w_try tar -zxf "${W_CACHE}/${W_PACKAGE}/${file1}" "${file1%.tar.gz}/fonts" + w_try_cp_font_files "${file1%.tar.gz}/fonts" "${W_FONTSDIR_UNIX}" + + w_register_font ipagui-mona.ttf "IPAMonaUIGothic" + w_register_font ipag-mona.ttf "IPAMonaGothic" + w_register_font ipagp-mona.ttf "IPAMonaPGothic" + w_register_font ipam-mona.ttf "IPAMonaMincho" + w_register_font ipamp-mona.ttf "IPAMonaPMincho" +} + +#---------------------------------------------------------------- + +w_metadata liberation fonts \ + title="Red Hat Liberation fonts (Mono, Sans, SansNarrow, Serif)" \ + publisher="Red Hat" \ + year="2008" \ + media="download" \ + file1="liberation-fonts-ttf-1.07.4.tar.gz" \ + installed_file1="${W_FONTSDIR_WIN}/liberationmono-bolditalic.ttf" + +load_liberation() +{ + # https://pagure.io/liberation-fonts + w_download "https://releases.pagure.org/liberation-fonts/liberation-fonts-ttf-1.07.4.tar.gz" 61a7e2b6742a43c73e8762cdfeaf6dfcf9abdd2cfa0b099a9854d69bc4cfee5c + + w_try_cd "${W_TMP}" + w_try tar -zxf "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try_cp_font_files "${file1%.tar.gz}" "${W_FONTSDIR_UNIX}" + + w_register_font liberationmono-bolditalic.ttf "Liberation Mono Bold Italic" + w_register_font liberationmono-bold.ttf "Liberation Mono Bold" + w_register_font liberationmono-italic.ttf "Liberation Mono Italic" + w_register_font liberationmono-regular.ttf "Liberation Mono" + + w_register_font liberationsans-bolditalic.ttf "Liberation Sans Bold Italic" + w_register_font liberationsans-bold.ttf "Liberation Sans Bold" + w_register_font liberationsans-italic.ttf "Liberation Sans Italic" + w_register_font liberationsans-regular.ttf "Liberation Sans" + + w_register_font liberationsansnarrow-bolditalic.ttf "Liberation Sans Narrow Bold Italic" + w_register_font liberationsansnarrow-bold.ttf "Liberation Sans Narrow Bold" + w_register_font liberationsansnarrow-italic.ttf "Liberation Sans Narrow Italic" + w_register_font liberationsansnarrow-regular.ttf "Liberation Sans Narrow" + + w_register_font liberationserif-bolditalic.ttf "Liberation Serif Bold Italic" + w_register_font liberationserif-bold.ttf "Liberation Serif Bold" + w_register_font liberationserif-italic.ttf "Liberation Serif Italic" + w_register_font liberationserif-regular.ttf "Liberation Serif" +} + +#---------------------------------------------------------------- + +w_metadata lucida fonts \ + title="MS Lucida Console font" \ + publisher="Microsoft" \ + year="1998" \ + media="download" \ + file1="eurofixi.exe" \ + installed_file1="${W_FONTSDIR_WIN}/lucon.ttf" + +load_lucida() +{ + # The site supports https with Let's Encrypt, but that cert fails with curl (which breaks src/linkcheck.sh) + w_download "http://ftpmirror.your.org/pub/misc/ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/NT40TSE/hotfixes-postSP3/Euro-fix/eurofixi.exe" 41f272a33521f6e15f2cce9ff1e049f2badd5ff0dc327fc81b60825766d5b6c7 + w_try_cabextract -d "${W_TMP}" -F "lucon.ttf" "${W_CACHE}"/lucida/eurofixi.exe + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" + w_register_font lucon.ttf "Lucida Console" +} + +#---------------------------------------------------------------- + +w_metadata opensymbol fonts \ + title="OpenSymbol fonts (replacement for Wingdings)" \ + publisher="OpenOffice.org" \ + year="2017" \ + media="download" \ + file1="fonts-opensymbol_102.10+LibO6.1.5-3+deb10u4_all.deb" \ + installed_file1="${W_FONTSDIR_WIN}/opens___.ttf" + +load_opensymbol() +{ + # The OpenSymbol fonts are a replacement for the Windows Wingdings font from OpenOffice.org. + # Need to w_download Debian since I can't find a standalone download from OpenOffice + # Note: The source download package on debian is for _all_ of OpenOffice, which is 266 MB. + w_download "https://cdn-aws.deb.debian.org/debian-security/pool/updates/main/libr/libreoffice/fonts-opensymbol_102.10+LibO6.1.5-3+deb10u4_all.deb" 1b2ab1e8eeb9a3a4a07e4a1c9bf539bb721734bf8b9881f4d0b8e71e822cecde + w_try_cd "${W_TMP}" + w_try_ar "${W_CACHE}/${W_PACKAGE}/${file1}" data.tar.xz + w_try tar -Jxf "${W_TMP}/data.tar.xz" ./usr/share/fonts/truetype/openoffice/opens___.ttf + w_try_cp_font_files "usr/share/fonts/truetype/openoffice" "${W_FONTSDIR_UNIX}" + w_register_font opens___.ttf "OpenSymbol" +} + +#---------------------------------------------------------------- + +w_metadata sourcehansans fonts \ + title="Source Han Sans fonts" \ + publisher="Adobe" \ + year="2021" \ + media="download" \ + file1="SourceHanSans.ttc.zip" \ + installed_file1="${W_FONTSDIR_WIN}/sourcehansans.ttc" + +load_sourcehansans() +{ + w_download "https://github.com/adobe-fonts/source-han-sans/releases/download/2.004R/SourceHanSans.ttc.zip" 6f59118a9adda5a7fe4e9e6bb538309f7e1d3c5411f9a9d32af32a79501b7e4f + w_try_unzip "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try mv "${W_TMP}/SourceHanSans.ttc" "${W_TMP}/sourcehansans_.ttc" + w_try mv "${W_TMP}/sourcehansans_.ttc" "${W_TMP}/sourcehansans.ttc" + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "*.ttc" + + # Simplified Chinese + w_register_font sourcehansans.ttc "Source Han Sans SC ExtraLight" + w_register_font sourcehansans.ttc "Source Han Sans SC Light" + w_register_font sourcehansans.ttc "Source Han Sans SC Normal" + w_register_font sourcehansans.ttc "Source Han Sans SC" + w_register_font sourcehansans.ttc "Source Han Sans SC Medium" + w_register_font sourcehansans.ttc "Source Han Sans SC Bold" + w_register_font sourcehansans.ttc "Source Han Sans SC Heavy" + + # Traditional Chinese (Taiwan) + w_register_font sourcehansans.ttc "Source Han Sans TC ExtraLight" + w_register_font sourcehansans.ttc "Source Han Sans TC Light" + w_register_font sourcehansans.ttc "Source Han Sans TC Normal" + w_register_font sourcehansans.ttc "Source Han Sans TC" + w_register_font sourcehansans.ttc "Source Han Sans TC Medium" + w_register_font sourcehansans.ttc "Source Han Sans TC Bold" + w_register_font sourcehansans.ttc "Source Han Sans TC Heavy" + + # Japanese + w_register_font sourcehansans.ttc "Source Han Sans ExtraLight" + w_register_font sourcehansans.ttc "Source Han Sans Light" + w_register_font sourcehansans.ttc "Source Han Sans Normal" + w_register_font sourcehansans.ttc "Source Han Sans" + w_register_font sourcehansans.ttc "Source Han Sans Medium" + w_register_font sourcehansans.ttc "Source Han Sans Bold" + w_register_font sourcehansans.ttc "Source Han Sans Heavy" + + # Korean + w_register_font sourcehansans.ttc "Source Han Sans K ExtraLight" + w_register_font sourcehansans.ttc "Source Han Sans K Light" + w_register_font sourcehansans.ttc "Source Han Sans K Normal" + w_register_font sourcehansans.ttc "Source Han Sans K" + w_register_font sourcehansans.ttc "Source Han Sans K Medium" + w_register_font sourcehansans.ttc "Source Han Sans K Bold" + w_register_font sourcehansans.ttc "Source Han Sans K Heavy" +} + +#---------------------------------------------------------------- + +w_metadata tahoma fonts \ + title="MS Tahoma font (not part of corefonts)" \ + publisher="Microsoft" \ + year="1999" \ + media="download" \ + file1="IELPKTH.CAB" \ + installed_file1="${W_FONTSDIR_WIN}/tahoma.ttf" + +load_tahoma() +{ + # Formerly at https://download.microsoft.com/download/ie55sp2/Install/5.5_SP2/WIN98Me/EN-US/IELPKTH.CAB + w_download https://downloads.sourceforge.net/corefonts/OldFiles/IELPKTH.CAB c1be3fb8f0042570be76ec6daa03a99142c88367c1bc810240b85827c715961a + + w_try_cabextract -d "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" "*.TTF" + + w_register_font tahoma.ttf "Tahoma" + w_register_font tahomabd.ttf "Tahoma Bold" +} + +#---------------------------------------------------------------- + +w_metadata takao fonts \ + title="Takao Japanese fonts" \ + publisher="Jun Kobayashi" \ + year="2010" \ + media="download" \ + file1="takao-fonts-ttf-003.02.01.zip" \ + installed_file1="${W_FONTSDIR_WIN}/takaogothic.ttf" + +load_takao() +{ + # The Takao font provides Japanese glyphs. May also be needed with fakejapanese function above. + # See https://launchpad.net/takao-fonts for project page + w_download "https://launchpad.net/takao-fonts/trunk/003.02.01/+download/takao-fonts-ttf-003.02.01.zip" 2f526a16c7931958f560697d494d8304949b3ce0aef246fb0c727fbbcc39089e + w_try_unzip "${W_TMP}" "${W_CACHE}"/takao/takao-fonts-ttf-003.02.01.zip + w_try_cp_font_files "${W_TMP}/takao-fonts-ttf-003.02.01" "${W_FONTSDIR_UNIX}" + + w_register_font takaogothic.ttf "TakaoGothic" + w_register_font takaopgothic.ttf "TakaoPGothic" + w_register_font takaomincho.ttf "TakaoMincho" + w_register_font takaopmincho.ttf "TakaoPMincho" + w_register_font takaoexgothic.ttf "TakaoExGothic" + w_register_font takaoexmincho.ttf "TakaoExMincho" +} + +#---------------------------------------------------------------- + +w_metadata uff fonts \ + title="Ubuntu Font Family" \ + publisher="Ubuntu" \ + year="2010" \ + media="download" \ + file1="ubuntu-font-family-0.83.zip" \ + installed_file1="${W_FONTSDIR_WIN}/ubuntu-r.ttf" \ + homepage="https://launchpad.net/ubuntu-font-family" + +load_uff() +{ + w_download "https://assets.ubuntu.com/v1/fad7939b-ubuntu-font-family-0.83.zip" 456d7d42797febd0d7d4cf1b782a2e03680bb4a5ee43cc9d06bda172bac05b42 ubuntu-font-family-0.83.zip + w_try_unzip "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" + + w_try_cp_font_files "${W_TMP}/$(basename "${file1}" .zip)" "${W_FONTSDIR_UNIX}" + + w_register_font ubuntu-bi.ttf "Ubuntu Bold Italic" + w_register_font ubuntu-b.ttf "Ubuntu Bold" + w_register_font ubuntu-c.ttf "Ubuntu Condensed" + w_register_font ubuntu-i.ttf "Ubuntu Italic" + w_register_font ubuntu-li.ttf "Ubuntu Light Italic" + w_register_font ubuntu-l.ttf "Ubuntu Light" + w_register_font ubuntu-mi.ttf "Ubuntu Medium Italic" + w_register_font ubuntumono-bi.ttf "Ubuntu Mono Bold Italic" + w_register_font ubuntumono-b.ttf "Ubuntu Mono Bold" + w_register_font ubuntumono-ri.ttf "Ubuntu Mono Italic" + w_register_font ubuntumono-r.ttf "Ubuntu Mono" + w_register_font ubuntu-m.ttf "Ubuntu Medium" + w_register_font ubuntu-ri.ttf "Ubuntu Italic" + w_register_font ubuntu-r.ttf "Ubuntu" + +} + +#---------------------------------------------------------------- + +w_metadata vlgothic fonts \ + title="VLGothic Japanese fonts" \ + publisher="Project Vine / Daisuke Suzuki" \ + year="2014" \ + media="download" \ + file1="VLGothic-20141206.tar.xz" \ + installed_file1="${W_FONTSDIR_WIN}/vl-gothic-regular.ttf" \ + homepage="https://ja.osdn.net/projects/vlgothic" + +load_vlgothic() +{ + w_download "https://ja.osdn.net/projects/vlgothic/downloads/62375/VLGothic-20141206.tar.xz" 982040db2f9cb73d7c6ab7d9d163f2ed46d1180f330c9ba2fae303649bf8102d + + w_try_cd "${W_TMP}" + w_try tar -Jxf "${W_CACHE}/vlgothic/VLGothic-20141206.tar.xz" + w_try_cp_font_files "${W_TMP}/VLGothic" "${W_FONTSDIR_UNIX}" + + w_register_font vl-gothic-regular.ttf "VL Gothic" + w_register_font vl-pgothic-regular.ttf "VL PGothic" +} + +#---------------------------------------------------------------- + +w_metadata wenquanyi fonts \ + title="WenQuanYi CJK font" \ + publisher="wenq.org" \ + year="2009" \ + media="download" \ + file1="wqy-microhei-0.2.0-beta.tar.gz" \ + installed_file1="${W_FONTSDIR_WIN}/wqy-microhei.ttc" + +load_wenquanyi() +{ + # See http://wenq.org/enindex.cgi + # Donate at http://wenq.org/enindex.cgi?Download(en)#MicroHei_Beta if you want to help support free CJK font development + w_download "https://downloads.sourceforge.net/wqy/wqy-microhei-0.2.0-beta.tar.gz" 2802ac8023aa36a66ea6e7445854e3a078d377ffff42169341bd237871f7213e + w_try_cd "${W_TMP}" + w_try tar -zxf "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try_cp_font_files "${W_TMP}/wqy-microhei" "${W_FONTSDIR_UNIX}" "*.ttc" + + w_register_font wqy-microhei.ttc "WenQuanYi Micro Hei" +} + +#---------------------------------------------------------------- + +w_metadata wenquanyizenhei fonts \ + title="WenQuanYi ZenHei font" \ + publisher="wenq.org" \ + year="2009" \ + media="download" \ + file1="wqy-zenhei-0.8.38-1.tar.gz" \ + installed_file1="${W_FONTSDIR_WIN}/wqy-zenhei.ttc" + +load_wenquanyizenhei() +{ + # See http://wenq.org/wqy2/index.cgi?ZenHei + # Donate at http://wenq.org/wqy2/index.cgi?Donation if you want to help support free font development + w_download "http://downloads.sourceforge.net/wqy/wqy-zenhei-0.8.38-1.tar.gz" 6018eb54243eddc41e9cbe0b71feefa5cb2570ecbaccd39daa025961235dea22 + w_try_cd "${W_TMP}" + w_try tar -zxf "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try_cp_font_files "${W_TMP}/wqy-zenhei" "${W_FONTSDIR_UNIX}" "*.ttc" + + w_register_font wqy-zenhei.ttc "WenQuanYi Zen Hei" +} + +#---------------------------------------------------------------- + +w_metadata unifont fonts \ + title="Unifont alternative to Arial Unicode MS" \ + publisher="Roman Czyborra / GNU" \ + year="2021" \ + media="download" \ + file1="unifont-13.0.06.ttf" \ + installed_file1="${W_FONTSDIR_WIN}/unifont.ttf" + +load_unifont() +{ + # The GNU Unifont provides glyphs for just about everything in common language. It is intended for multilingual usage. + # See https://unifoundry.com/unifont/index.html for project page. + w_download "https://unifoundry.com/pub/unifont/unifont-13.0.06/font-builds/unifont-13.0.06.ttf" d73c0425811ffd366b0d1973e9338bac26fe7cf085760a12e10c61241915e742 + w_try cp "${W_CACHE}/${W_PACKAGE}/${file1}" "${W_TMP}/unifont.ttf" + w_try_cp_font_files "${W_TMP}" "${W_FONTSDIR_UNIX}" + + w_register_font unifont.ttf "Unifont" + w_register_font_replacement "Arial Unicode MS" "Unifont" +} + +#---------------------------------------------------------------- + +w_metadata allfonts fonts \ + title="All fonts" \ + publisher="various" \ + year="1998-2010" \ + media="download" + +load_allfonts() +{ + # This verb uses reflection, should probably do it portably instead, but that would require keeping it up to date + for file in "${WINETRICKS_METADATA}"/fonts/*.vars; do + cmd=$(basename "${file}" .vars) + case ${cmd} in + # "fake*" verbs need to be skipped because + # this "allfonts" verb is intended to only install real fonts and + # adding font replacements at the same time may invalidate the replacements + # "pptfonts" can be skipped because it only calls other verbs for installing fonts + # See https://github.com/Winetricks/winetricks/issues/899 + allfonts|cjkfonts|fake*|pptfonts) ;; + *) w_call "${cmd}";; + esac + done +} + +####################### +# apps +####################### + +#---------------------------------------------------------------- + +w_metadata 3m_library apps \ + title="3M Cloud Library" \ + publisher="3M Company" \ + year="2015" \ + media="download" \ + file1="cloudLibrary-2.1.1702011951-Setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/cloudLibrary/cloudLibrary.exe" \ + homepage="https://www.yourcloudlibrary.com/" + +load_3m_library() +{ + w_download https://usestrwebaccess.blob.core.windows.net/apps/pc/cloudLibrary-2.1.1702011951-Setup.exe bb3d854cc525c065e7298423bf0019309f4b65497c1d8bc6af09460cd6fcb57f + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata 7zip apps \ + title="7-Zip 19.00" \ + publisher="Igor Pavlov" \ + year="2019" \ + media="download" \ + file1="7z1900.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/7-Zip/7zFM.exe" + +load_7zip() +{ + w_download https://www.7-zip.org/a/7z1900.exe 759aa04d5b03ebeee13ba01df554e8c962ca339c74f56627c8bed6984bb7ef80 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata adobe_diged apps \ + title="Adobe Digital Editions 1.7" \ + publisher="Adobe" \ + year="2011" \ + media="download" \ + file1="setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Adobe/Adobe Digital Editions/digitaleditions.exe" \ + homepage="https://www.adobe.com/solutions/ebook/digital-editions.html" + +load_adobe_diged() +{ + w_download https://kb2.adobe.com/cps/403/kb403051/attachments/setup.exe 4ebe0fcefbe68900ca6bf499432030c9f8eb8828f8cb5a7e1fd1a16c0eba918e + # NSIS installer + w_try "${WINE}" "${W_CACHE}/${W_PACKAGE}/setup.exe" ${W_OPT_UNATTENDED:+ /S} +} + +#---------------------------------------------------------------- + +w_metadata adobe_diged4 apps \ + title="Adobe Digital Editions 4.5" \ + publisher="Adobe" \ + year="2015" \ + media="download" \ + file1="ADE_4.5_Installer.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Adobe/Adobe Digital Editions 4.5/DigitalEditions.exe" \ + homepage="https://www.adobe.com/solutions/ebook/digital-editions.html" + +load_adobe_diged4() +{ + w_download https://download.adobe.com/pub/adobe/digitaleditions/ADE_4.5_Installer.exe a21a9d5389728fdac6a7288953dddeea774ef2bee07f1caf7ea20bbed8f5a2c6 + + if w_workaround_wine_bug 32323; then + w_call corefonts + fi + + if [ ! -x "$(command -v winbindd 2>/dev/null)" ]; then + w_warn "Adobe Digital Editions 4.5 requires winbind (part of Samba) to be installed, but winbind was not detected." + fi + + w_call dotnet40 + + #w_call win7 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if w_workaround_wine_bug 46019 "Installer fails under wine, manually unpacking it instead" ,4.6; then + w_try_7z "${W_PROGRAMS_X86_UNIX}/Adobe/Adobe Digital Editions 4.5" "${file1}" -y + else + w_ahk_do " + SetTitleMatchMode, 2 + run, ${file1} ${W_OPT_UNATTENDED:+ /S} + winwait, Installing Adobe Digital Editions + ControlClick, Button1 ; Don't install Norton Internet Security + ControlClick, Static19 ; Next + " + fi +} + +#---------------------------------------------------------------- + +w_metadata autohotkey apps \ + title="AutoHotKey" \ + publisher="autohotkey.org" \ + year="2010" \ + media="download" \ + file1="AutoHotkey104805_Install.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/AutoHotkey/AutoHotkey.exe" + +load_autohotkey() +{ + w_download https://github.com/AutoHotkey/AutoHotkey/releases/download/v1.0.48.05/AutoHotkey104805_Install.exe 4311c3e7c29ed2d67f415138360210bc2f55ff78758b20b003b91d775ee207b9 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" AutoHotkey104805_Install.exe ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata busybox apps \ + title="BusyBox FRP-4621-gf3c5e8bc3" \ + publisher="Ron Yorston / Busybox authors" \ + year="2021" \ + media="download" \ + file1="busybox-w32-FRP-4621-gf3c5e8bc3.exe" \ + installed_exe1="${W_SYSTEM32_DLLS_WIN}/busybox.exe" + +load_busybox() +{ + w_download https://frippery.org/files/busybox/busybox-w32-FRP-4621-gf3c5e8bc3.exe 58c9da9ba094eade662572f9a725a6af44350dc3ff5a7897696926c651fdb582 + + if test "${W_ARCH}" = "win64"; then + w_download https://frippery.org/files/busybox/busybox-w64-FRP-4621-gf3c5e8bc3.exe 7109bc6f129ab7ce466f7b3175ca830316184b431d16a965ade17b93c035ec7c + w_try_cp_dll "${W_CACHE}/${W_PACKAGE}/${file1}" "${W_SYSTEM32_DLLS}/busybox.exe" + w_try_cp_dll "${W_CACHE}/${W_PACKAGE}/busybox-w64-FRP-4621-gf3c5e8bc3.exe" "${W_SYSTEM64_DLLS}/busybox.exe" + else + w_try_cp_dll "${W_CACHE}/${W_PACKAGE}/${file1}" "${W_SYSTEM32_DLLS}/busybox.exe" + fi +} + +#---------------------------------------------------------------- + +w_metadata cmake apps \ + title="CMake 2.8" \ + publisher="Kitware" \ + year="2013" \ + media="download" \ + file1="cmake-2.8.11.2-win32-x86.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/CMake 2.8/bin/cmake-gui.exe" + +load_cmake() +{ + w_download https://www.cmake.org/files/v2.8/cmake-2.8.11.2-win32-x86.exe cb6a7df8fd6f2eca66512279991f3c2349e3f788477c3be8eaa362d46c21dbf0 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" cmake-2.8.11.2-win32-x86.exe ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata colorprofile apps \ + title="Standard RGB color profile" \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="ColorProfile.exe" \ + installed_exe1="c:/windows/system32/spool/drivers/color/sRGB Color Space Profile.icm" + +load_colorprofile() +{ + w_download https://download.microsoft.com/download/whistler/hwdev1/1.0/wxp/en-us/ColorProfile.exe d04ac910acdd97abd663f559bebc6440d8d68664bf977ec586035247d7b0f728 + w_try_unzip "${W_TMP}" "${W_CACHE}"/colorprofile/ColorProfile.exe + + # It's in system32 for both win32/win64 + mkdir -p "${W_WINDIR_UNIX}"/system32/spool/drivers/color + w_try cp -f "${W_TMP}/sRGB Color Space Profile.icm" "${W_WINDIR_UNIX}"/system32/spool/drivers/color +} + +#---------------------------------------------------------------- + +w_metadata controlpad apps \ + title="MS ActiveX Control Pad" \ + publisher="Microsoft" \ + year="1997" \ + media="download" \ + file1="setuppad.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/ActiveX Control Pad/PED.EXE" + +load_controlpad() +{ + # https://msdn.microsoft.com/en-us/library/ms968493.aspx + w_call wsh57 + w_download https://download.microsoft.com/download/activexcontrolpad/install/4.0.0.950/win98mexp/en-us/setuppad.exe eab94091ac391f9bbc8e355a1d231e6a08b8dbbb0f6539245b7f0c58d94f420c + w_try_cabextract --directory="${W_TMP}" "${W_CACHE}"/controlpad/setuppad.exe + + echo "If setup says 'Unable to start DDE ...', press Ignore" + + w_try_cd "${W_TMP}" + w_try "${WINE}" setup ${W_OPT_UNATTENDED:+/qt} + + if ! test -f "${W_SYSTEM32_DLLS}"/FM20.DLL; then + w_die "Install failed. Please report, If you just wanted fm20.dll, try installing art2min instead." + fi +} + +#---------------------------------------------------------------- + +w_metadata controlspy apps \ + title="Control Spy 6 " \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="ControlSpyV6.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft/ControlSpy/ControlSpyV6.exe" + +load_controlspy() +{ + # Originally at https://download.microsoft.com/download/a/3/1/a315b133-03a8-4845-b428-ec585369b285/ControlSpy.msi + # 2019/04/11: changed to https://github.com/pywinauto/pywinauto/blob/master/apps/ControlSpy_20/ControlSpyV6.exe + # Unfortunately that means no V5 of ControlSpy :/ + w_download https://github.com/pywinauto/pywinauto/blob/master/apps/ControlSpy_20/ControlSpyV6.exe + w_try mkdir -p "${W_PROGRAMS_X86_UNIX}/Microsoft/ControlSpy" + w_try cp "${W_CACHE}/${W_PACKAGE}/${file1}" "${W_PROGRAMS_X86_UNIX}/Microsoft/ControlSpy" +} + +#---------------------------------------------------------------- + +# dxdiag is a system component that one usually adds to an existing wineprefix, +# so it belongs in 'dlls', not apps. +w_metadata dxdiag dlls \ + title="DirectX Diagnostic Tool" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="../directx9/directx_feb2010_redist.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/dxdiag.exe" + +load_dxdiag() +{ + helper_directx_dl + + w_call gmdls + + w_try_cabextract -d "${W_TMP}" -L -F dxnt.cab "${W_CACHE}"/directx9/${DIRECTX_NAME} + w_try_cabextract -d "${W_SYSTEM32_DLLS}" -L -F "dxdiag.exe" "${W_TMP}/dxnt.cab" + mkdir -p "${W_WINDIR_UNIX}/help" + w_try_cabextract -d "${W_WINDIR_UNIX}/help" -L -F "dxdiag.chm" "${W_TMP}/dxnt.cab" + w_override_dlls native dxdiag.exe + + if w_workaround_wine_bug 49996; then + w_call dxdiagn_feb2010 + fi + + if w_workaround_wine_bug 9027; then + w_call dmband + w_call dmime + w_call dmstyle + w_call dmsynth + w_call dmusic + fi +} + +#---------------------------------------------------------------- + +w_metadata emu8086 apps \ + title="emu8086" \ + publisher="emu8086.com" \ + year="2015" \ + media="download" \ + file1="emu8086v408r11.zip" \ + installed_exe1="c:/emu8086/emu8086.exe" + +load_emu8086() +{ + # 2018/11/15: emu8086.com is down + # w_download http://www.emu8086.com/files/emu8086v408r11.zip d56d6e42fe170c52df5abd6002b1e8fef0b840eb8d8807d77819fe1fc2e17afd + w_download https://web.archive.org/web/20160206003914if_/http://emu8086.com/files/emu8086v408r11.zip d56d6e42fe170c52df5abd6002b1e8fef0b840eb8d8807d77819fe1fc2e17afd + w_try_unzip "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" + w_try "${WINE}" "${W_TMP}/Setup.exe" ${W_OPT_UNATTENDED:+/silent} +} + +#---------------------------------------------------------------- + +w_metadata ev3 apps \ + title="Lego Mindstorms EV3 Home Edition" \ + publisher="Lego" \ + year="2014" \ + media="download" \ + file1="LMS-EV3-WIN32-ENUS-01-02-01-full-setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/LEGO Software/LEGO MINDSTORMS EV3 Home Edition/MindstormsEV3.exe" + +load_ev3() +{ + if w_workaround_wine_bug 40192 "Installing vcrun2005 as Wine does not have MFC80.dll"; then + w_call vcrun2005 + fi + + if w_workaround_wine_bug 40193 "Installing IE8 as built-in Gecko is not sufficient"; then + w_call ie8 + fi + + w_call dotnet40 + + # 2016/03/22: LMS-EV3-WIN32-ENUS-01-02-01-full-setup.exe c47341f08242f0f6f01996530e7c93bda2d666747ada60ab93fa773a55d40a19 + + w_download http://esd.lego.com.edgesuite.net/digitaldelivery/mindstorms/6ecda7c2-1189-4816-b2dd-440e22d65814/public/LMS-EV3-WIN32-ENUS-01-02-01-full-setup.exe c47341f08242f0f6f01996530e7c93bda2d666747ada60ab93fa773a55d40a19 + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/qb /AcceptLicenses yes} + + if w_workaround_wine_bug 40729 "Setting override for urlmon.dll to native to avoid crash"; then + w_override_dlls native urlmon + fi +} + +#---------------------------------------------------------------- + +w_metadata firefox apps \ + title="Firefox 51.0" \ + publisher="Mozilla" \ + year="2017" \ + media="download" \ + file1="FirefoxSetup51.0.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Mozilla Firefox/firefox.exe" + +load_firefox() +{ + w_download "https://download.mozilla.org/?product=firefox-51.0-SSL&os=win&lang=en-US" 05fa9ae012eca560f42d593e75eb37045a54e4978b665b51f6a61e4a2d376eb8 "${file1}" + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ -ms} +} + +#---------------------------------------------------------------- + +w_metadata fontxplorer apps \ + title="Font Xplorer 1.2.2" \ + publisher="Moon Software" \ + year="2001" \ + media="download" \ + file1="Font_Xplorer_122_Free.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Font Xplorer/FXplorer.exe" \ + homepage="http://www.moonsoftware.com/fxplorer.asp" + +load_fontxplorer() +{ + # 2011/05/15: http://www.moonsoftware.com/files/legacy/Font_Xplorer_122_Free.exe e3a53841c133e2ecfeb75c7ea277e23011317bb031f8caf423b7e9b7f92d85e0 + # 2019/06/14: http://www.moonsoftware.com/files/legacy/Font_Xplorer_122_Free.exe is dead + w_download https://web.archive.org/web/20190217101943/http://www.moonsoftware.com/files/legacy/Font_Xplorer_122_Free.exe e3a53841c133e2ecfeb75c7ea277e23011317bb031f8caf423b7e9b7f92d85e0 + w_try_cd "${W_CACHE}/fontxplorer" + w_try "${WINE}" Font_Xplorer_122_Free.exe ${W_OPT_UNATTENDED:+/S} + w_killall "explorer.exe" +} + +#---------------------------------------------------------------- + +w_metadata foobar2000 apps \ + title="foobar2000 v1.4" \ + publisher="Peter Pawlowski" \ + year="2018" \ + media="manual_download" \ + file1="foobar2000_v1.4.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/foobar2000/foobar2000.exe" + +load_foobar2000() +{ + # 2016/12/21: 1.3.14 - 72d024d258c2f3b6cea62dc47fb613848202e7f33f2331f6b2e0a8e61daffcb6 + # 2018/07/25: 1.4 - 7c048faecfec79f9ec2b332b2c68b25e0d0219b47a7c679fe56f2ec05686a96a + + w_download_manual https://www.foobar2000.org/download foobar2000_v1.4.exe 7c048faecfec79f9ec2b332b2c68b25e0d0219b47a7c679fe56f2ec05686a96a + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata hhw apps \ + title="HTML Help Workshop" \ + publisher="Microsoft" \ + year="2000" \ + media="download" \ + file1="htmlhelp.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/HTML Help Workshop/hhw.exe" + +load_hhw() +{ + w_call mfc40 + + # https://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx + w_download https://web.archive.org/web/20160423015142if_/http://download.microsoft.com/download/0/a/9/0a939ef6-e31c-430f-a3df-dfae7960d564/htmlhelp.exe b2b3140d42a818870c1ab13c1c7b8d4536f22bd994fa90aade89729a6009a3ae + + # htmlhelp.exe automatically runs hhupd.exe. It shows a dialog that says + # "This computer already has a newer version of HTML Help." + # because of Wine's built-in hhctrl.ocx and it copys files only when + # Windows version is "Windows 98", "Windows 95", "Windows NT 4.0", + # or "Windows NT 3.51". 64-bit prefixes can't use any of them. + # + # So we need the following steps: + # 1. Run htmlhelp.exe to unpack its contents + # 2. Edit htmlhelp.inf not to run hhupd.exe + # 3. Run setup.exe + w_try "${WINE}" "${W_CACHE}/${W_PACKAGE}"/htmlhelp.exe /C "/T:${W_TMP_WIN}" ${W_OPT_UNATTENDED:+/q} + w_try_cd "${W_TMP}" + w_try sed -i "s/RunPostSetupCommands=HHUpdate//" htmlhelp.inf + w_try "${WINE}" setup.exe + + if w_workaround_wine_bug 7517; then + w_call itircl + w_call itss + fi +} + +#---------------------------------------------------------------- + +w_metadata iceweasel apps \ + title="GNU Icecat 31.7.0" \ + publisher="GNU Foundation" \ + year="2015" \ + media="download" \ + file1="icecat-31.7.0.en-US.win32.zip" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/icecat/icecat.exe" + +load_iceweasel() +{ + w_download https://ftp.gnu.org/gnu/gnuzilla/31.7.0/icecat-31.7.0.en-US.win32.zip 27d10e63ab9ea4e6995c235b92258b379f79433a06a12e4ad16811801cf81e36 + w_try_unzip "${W_PROGRAMS_X86_UNIX}" "${W_CACHE}/${W_PACKAGE}/${file1}" +} + + +#---------------------------------------------------------------- + +w_metadata irfanview apps \ + title="Irfanview" \ + publisher="Irfan Skiljan" \ + year="2016" \ + media="download" \ + file1="iview444_setup.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/IrfanView/i_view32.exe" \ + homepage="https://www.irfanview.com/" + +load_irfanview() +{ + w_download http://download.betanews.com/download/967963863-1/iview444_setup.exe 71b44cd3d14376bbb619b2fe8a632d29200385738dd186680e988ce32662b3d6 + if w_workaround_wine_bug 657 "Installing mfc42"; then + w_call mfc42 + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if test "${W_OPT_UNATTENDED}"; then + w_ahk_do " + SetWinDelay 200 + SetTitleMatchMode, 2 + run ${file1} + winwait, Setup, This program will install + winactivate, Setup, This program will install + Sleep 900 + ControlClick, Button7 ; Uncheck All + Sleep 900 + ControlClick, Button4 ; Create start menu icons + Sleep 900 + ControlClick, Button11 ; Next + Sleep 900 + winwait, Setup, version + Sleep 900 + ControlClick, Button11 ; Next + Sleep 900 + winwait, Setup, associate extensions + Sleep 900 + ControlClick, Button1 ; Images Only associations + Sleep 900 + ControlClick, Button16 ; Next + Sleep 1000 + winwait, Setup, INI + Sleep 1000 + ControlClick, Button21 ; Next + Sleep 1000 + winwait, Setup, You want to change + winactivate, Setup, really + Sleep 900 + ControlClick, Button1 ; Yes + Sleep 900 + winwait, Setup, successful + winactivate, Setup, successful + Sleep 900 + ControlClick, Button1 ; no load webpage + Sleep 900 + ControlClick, Button2 ; no start irfanview + Sleep 900 + ControlClick, Button25 ; done + Sleep 900 + winwaitclose + " + else + w_try "${WINE}" "${file1}" + fi +} + +#---------------------------------------------------------------- + +# FIXME: ie6 always installs to C:/Program Files even if LANG is de_DE.utf-8, +# so we have to hard code that, but that breaks on 64-bit Windows. +w_metadata ie6 dlls \ + title="Internet Explorer 6" \ + publisher="Microsoft" \ + year="2002" \ + media="download" \ + conflicts="ie7 ie8" \ + file1="ie60.exe" \ + installed_file1="c:/Program Files/Internet Explorer/iedetect.dll" + +load_ie6() +{ + w_package_unsupported_win64 + + w_download https://web.archive.org/web/20150411022055if_/http://download.oldapps.com/Internet_Explorer/ie60.exe e34e0557d939e7e83185f5354403df99c92a3f3ff80f5ee0c75f6843eaa6efb2 + + w_try_cd "${W_TMP}" + "${WINE}" "${W_CACHE}/${W_PACKAGE}/${file1}" + + # Unregister Wine IE + if [ ! -f "${W_SYSTEM32_DLLS}"/plugin.ocx ]; then + w_override_dlls builtin iexplore.exe + w_try "${WINE}" iexplore -unregserver + fi + + # Change the override to the native so we are sure we use and register them + w_override_dlls native,builtin iexplore.exe inetcpl.cpl itircl itss jscript mlang mshtml msimtf shdoclc shdocvw shlwapi + + # Remove the fake DLLs, if any + mv "${W_PROGRAMS_UNIX}/Internet Explorer/iexplore.exe" "${W_PROGRAMS_UNIX}/Internet Explorer/iexplore.exe.bak" + for dll in itircl itss jscript mlang mshtml msimtf shdoclc shdocvw; do + test -f "${W_SYSTEM32_DLLS}"/${dll}.dll && + mv "${W_SYSTEM32_DLLS}"/${dll}.dll "${W_SYSTEM32_DLLS}"/${dll}.dll.bak + done + + # The installer doesn't want to install iexplore.exe in XP mode. + w_set_winver win2k + + # Workaround https://bugs.winehq.org/show_bug.cgi?id=21009 + # FIXME: seems this didn't get migrated to Github? + # See also https://code.google.com/p/winezeug/issues/detail?id=78 + rm -f "${W_SYSTEM32_DLLS}"/browseui.dll "${W_SYSTEM32_DLLS}"/inseng.dll + + # Otherwise regsvr32 crashes later + rm -f "${W_SYSTEM32_DLLS}"/inetcpl.cpl + + # Work around https://bugs.winehq.org/show_bug.cgi?id=25432 + w_try_cabextract -F inseng.dll "${W_TMP}/IE 6.0 Full/ACTSETUP.CAB" + mv inseng.dll "${W_SYSTEM32_DLLS}" + w_override_dlls native inseng + + w_try_cd "${W_TMP}/IE 6.0 Full" + w_try_ms_installer "${WINE}" IE6SETUP.EXE ${W_OPT_UNATTENDED:+/q:a /r:n /c:"ie6wzd /S:""#e"" /q:a /r:n"} + + # Work around DLL registration bug until ierunonce/RunOnce/wineboot is fixed + # FIXME: whittle down this list + w_try_cd "${W_SYSTEM32_DLLS}" + for i in actxprxy.dll browseui.dll browsewm.dll cdfview.dll ddraw.dll \ + dispex.dll dsound.dll iedkcs32.dll iepeers.dll iesetup.dll imgutil.dll \ + inetcomm.dll inetcpl.cpl inseng.dll isetup.dll jscript.dll laprxy.dll \ + mlang.dll mshtml.dll mshtmled.dll msi.dll msident.dll \ + msoeacct.dll msrating.dll mstime.dll msxml3.dll occache.dll \ + ole32.dll oleaut32.dll olepro32.dll pngfilt.dll quartz.dll \ + rpcrt4.dll rsabase.dll rsaenh.dll scrobj.dll scrrun.dll \ + shdocvw.dll shell32.dll vbscript.dll webcheck.dll \ + wshcon.dll wshext.dll asctrls.ocx hhctrl.ocx mscomct2.ocx \ + plugin.ocx proctexe.ocx tdc.ocx webcheck.dll wshom.ocx; do + "${WINE}" regsvr32 /i ${i} > /dev/null 2>&1 + done + + # Set Windows version back to the default. Leave at win2k for better rendering (is there a bug for that?) + w_set_winver 'default' + + # the ie6 we use these days lacks pngfilt, so grab that + w_call pngfilt + + w_call msls31 +} + +#---------------------------------------------------------------- + +w_metadata ie7 dlls \ + title="Internet Explorer 7" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + conflicts="ie6 ie8" \ + file1="IE7-WindowsXP-x86-enu.exe" \ + installed_file1="c:/windows/ie7.log" + +load_ie7() +{ + w_package_unsupported_win64 + + # Unregister Wine IE + if grep -q -i "wine placeholder" "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe"; then + w_override_dlls builtin iexplore.exe + w_try "${WINE}" iexplore -unregserver + fi + + # Change the override to the native so we are sure we use and register them + w_override_dlls native,builtin ieproxy ieframe itircl itss jscript mshtml msimtf shdoclc shdocvw shlwapi urlmon wininet xmllite + + # IE7 installer will check the version number of iexplore.exe which causes IE7 installer to fail on wine-1.9.0+ + w_override_dlls native iexplore.exe + + # Bundled updspapi cannot work on Wine + w_override_dlls builtin updspapi + + # Remove the fake DLLs from the existing WINEPREFIX + if [ -f "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe" ]; then + mv "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe" "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe.bak" + fi + for dll in itircl itss jscript mshtml msimtf shdoclc shdocvw urlmon; do + test -f "${W_SYSTEM32_DLLS}"/${dll}.dll && + mv "${W_SYSTEM32_DLLS}"/${dll}.dll "${W_SYSTEM32_DLLS}"/${dll}.dll.bak + done + + # See https://bugs.winehq.org/show_bug.cgi?id=16013 + # Find instructions to create this file in dlls/wintrust/tests/crypt.c + w_download https://github.com/Winetricks/winetricks/raw/master/files/winetest.cat 5d18ab44fc289100ccf4b51cf614cc2d36f7ca053e557e2ba973811293c97d38 + + # Put a dummy catalog file in place + mkdir -p "${W_SYSTEM32_DLLS}"/catroot/\{f750e6c3-38ee-11d1-85e5-00c04fc295ee\} + w_try cp -f "${W_CACHE}"/ie7/winetest.cat "${W_SYSTEM32_DLLS}"/catroot/\{f750e6c3-38ee-11d1-85e5-00c04fc295ee\}/oem0.cat + + # KLUDGE: if / is writable (as on OS X?), having a Z: mapping to it + # causes ie7 to put temporary directories on Z:\. + # So hide it temporarily. This is not very robust! + if [ -w / ] && [ -h "${WINEPREFIX}/dosdevices/z:" ]; then + w_try rm -f "${WINEPREFIX}/dosdevices/z:.bak_wt" + w_try mv "${WINEPREFIX}/dosdevices/z:" "${WINEPREFIX}/dosdevices/z:.bak_wt" + _W_restore_z=1 + fi + + # Install + # Microsoft took this down (as of 2020/08/08), but the latest snapshot on archive.org (2020/06/20) gives a different binary. + # The snapshot just before that (2020/06/17) is fine, however: + w_download https://web.archive.org/web/20200617171343/https://download.microsoft.com/download/3/8/8/38889DC1-848C-4BF2-8335-86C573AD86D9/IE7-WindowsXP-x86-enu.exe bf5c325bbe3f4174869b2a8ff75f92833e7f7debe64777ed0faf293c7725cbef + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + # IE7 requies winxp to install: + w_set_winver winxp + + w_try_ms_installer "${WINE}" IE7-WindowsXP-x86-enu.exe ${W_OPT_UNATTENDED:+/quiet} + + if [ "${_W_restore_z}" = 1 ]; then + # END KLUDGE: restore Z:, assuming that the user didn't kill us + w_try mv "${WINEPREFIX}/dosdevices/z:.bak_wt" "${WINEPREFIX}/dosdevices/z:" + fi + + # Work around DLL registration bug until ierunonce/RunOnce/wineboot is fixed + # FIXME: whittle down this list + w_try_cd "${W_SYSTEM32_DLLS}" + for i in actxprxy.dll browseui.dll browsewm.dll cdfview.dll ddraw.dll \ + dispex.dll dsound.dll iedkcs32.dll iepeers.dll iesetup.dll \ + imgutil.dll inetcomm.dll inseng.dll isetup.dll jscript.dll laprxy.dll \ + mlang.dll mshtml.dll mshtmled.dll msi.dll msident.dll \ + msoeacct.dll msrating.dll mstime.dll msxml3.dll occache.dll \ + ole32.dll oleaut32.dll olepro32.dll pngfilt.dll quartz.dll \ + rpcrt4.dll rsabase.dll rsaenh.dll scrobj.dll scrrun.dll \ + shdocvw.dll shell32.dll urlmon.dll vbscript.dll webcheck.dll \ + wshcon.dll wshext.dll asctrls.ocx hhctrl.ocx mscomct2.ocx \ + plugin.ocx proctexe.ocx tdc.ocx webcheck.dll wshom.ocx; do + "${WINE}" regsvr32 /i ${i} > /dev/null 2>&1 + done + + # Builtin ieproxy is in system32, but ie7's lives in Program Files. Native + # CLSID path will get overwritten on prefix update. Setting ieproxy to + # native doesn't help because setupapi ignores DLL overrides. To work + # around this problem, copy native ieproxy to system32. + w_try_cp_dll "${W_PROGRAMS_X86_UNIX}/Internet Explorer/ieproxy.dll" "${W_SYSTEM32_DLLS}" + + # Seeing is believing + case ${WINETRICKS_GUI} in + none) + w_warn "To start ie7, use the command \"${WINE}\" '${W_PROGRAMS_WIN}\\\\Internet Explorer\\\\iexplore.exe'" + ;; + *) + w_warn "Starting ie7. To start it later, use the command \"${WINE}\" '${W_PROGRAMS_WIN}\\\\Internet Explorer\\\\iexplore.exe'" + "${WINE}" "${W_PROGRAMS_WIN}\\Internet Explorer\\iexplore.exe" http://www.example.com/ > /dev/null 2>&1 & + ;; + esac + + unset _W_restore_z +} + +#---------------------------------------------------------------- + +w_metadata ie8 dlls \ + title="Internet Explorer 8" \ + publisher="Microsoft" \ + year="2009" \ + media="download" \ + conflicts="ie6 ie7" \ + file1="IE8-WindowsXP-x86-ENU.exe" \ + installed_file1="c:/windows/ie8_main.log" + +load_ie8() +{ + if [ "${W_ARCH}" = "win32" ]; then + # Bundled in Windows 7, so refuses to install. Works with XP: + w_set_winver winxp + else + # Bundled in Windows 7, so refuses to install. Works with Win2003: + w_set_winver win2k3 + fi + + # Unregister Wine IE + #if [ ! -f "$W_SYSTEM32_DLLS"/plugin.ocx ]; then + if grep -q -i "wine placeholder" "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe"; then + w_override_dlls builtin iexplore.exe + w_try "${WINE}" iexplore -unregserver + fi + + w_call msls31 + + # Change the override to the native so we are sure we use and register them + w_override_dlls native,builtin ieframe ieproxy itircl itss jscript msctf mshtml shdoclc shdocvw shlwapi urlmon wininet xmllite + + # IE8 installer will check the version number of iexplore.exe which causes IE8 installer to fail on wine-1.9.0+ + w_override_dlls native iexplore.exe + + # Bundled updspapi cannot work on Wine + w_override_dlls builtin updspapi + + # See https://bugs.winehq.org/show_bug.cgi?id=16013 + # Find instructions to create this file in dlls/wintrust/tests/crypt.c + w_download https://github.com/Winetricks/winetricks/raw/master/files/winetest.cat 5d18ab44fc289100ccf4b51cf614cc2d36f7ca053e557e2ba973811293c97d38 + + # Put a dummy catalog file in place + mkdir -p "${W_SYSTEM32_DLLS}"/catroot/\{f750e6c3-38ee-11d1-85e5-00c04fc295ee\} + w_try cp -f "${W_CACHE}"/ie8/winetest.cat "${W_SYSTEM32_DLLS}"/catroot/\{f750e6c3-38ee-11d1-85e5-00c04fc295ee\}/oem0.cat + + if [ "${W_ARCH}" = "win32" ]; then + w_download https://download.microsoft.com/download/C/C/0/CC0BD555-33DD-411E-936B-73AC6F95AE11/IE8-WindowsXP-x86-ENU.exe 5a2c6c82774bfe99b175f50a05b05bcd1fac7e9d0e54db2534049209f50cd6ef + else + w_download https://download.microsoft.com/download/7/5/4/754D6601-662D-4E39-9788-6F90D8E5C097/IE8-WindowsServer2003-x64-ENU.exe bcff753e92ceabf31cfefaa6def146335c7cb27a50b95cd4f4658a0c3326f499 + fi + + # Remove the fake DLLs from the existing WINEPREFIX + if [ -f "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe" ]; then + w_try mv "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe" "${W_PROGRAMS_X86_UNIX}/Internet Explorer/iexplore.exe.bak" + fi + + if [ "${W_ARCH}" = "win64" ]; then + if [ -f "${W_PROGRAMS_UNIX}/Internet Explorer/iexplore.exe" ]; then + w_try mv "${W_PROGRAMS_UNIX}/Internet Explorer/iexplore.exe" "${W_PROGRAMS_UNIX}/Internet Explorer/iexplore.exe.bak" + fi + fi + + # Replace the fake DLLs by copies from the bundle + for dll in browseui inseng itircl itss jscript mshtml shdoclc shdocvw shlwapi urlmon; do + test -f "${W_SYSTEM32_DLLS}"/${dll}.dll && + w_try mv "${W_SYSTEM32_DLLS}"/${dll}.dll "${W_SYSTEM32_DLLS}"/${dll}.dll.bak && + w_try_cabextract --directory="${W_SYSTEM32_DLLS}" "${W_CACHE}"/ie8/IE8-WindowsXP-x86-ENU.exe -F ${dll}.dll + if [ "${W_ARCH}" = "win64" ]; then + test -f "${W_SYSTEM64_DLLS}"/${dll}.dll && + w_try mv "${W_SYSTEM64_DLLS}"/${dll}.dll "${W_SYSTEM64_DLLS}"/${dll}.dll.bak + w_try_cabextract --directory="${W_SYSTEM64_DLLS}" "${W_CACHE}"/ie8/IE8-WindowsServer2003-x64-ENU.exe -F ${dll}.dll + fi + + done + + # KLUDGE: if / is writable (as on OS X?), having a Z: mapping to it + # causes ie7 to put temporary directories on Z:\. + # So hide it temporarily. This is not very robust! + if [ -w / ] && [ -h "${WINEPREFIX}/dosdevices/z:" ]; then + w_try rm -f "${WINEPREFIX}/dosdevices/z:.bak_wt" + w_try mv "${WINEPREFIX}/dosdevices/z:" "${WINEPREFIX}/dosdevices/z:.bak_wt" + _W_restore_z=1 + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + # FIXME: There's an option for /updates-noupdates to disable checking for updates, but that + # forces the install to fail on Wine. Not sure if it's an IE8 or Wine bug... + # FIXME: can't check status, as it always reports failure on wine? + if [ "${W_ARCH}" = "win32" ]; then + "${WINE}" IE8-WindowsXP-x86-ENU.exe ${W_OPT_UNATTENDED:+/quiet /forcerestart} + else + "${WINE}" IE8-WindowsServer2003-x64-ENU.exe ${W_OPT_UNATTENDED:+/quiet /forcerestart} + fi + + if [ "${_W_restore_z}" = 1 ]; then + # END KLUDGE: restore Z:, assuming that the user didn't kill us + w_try mv "${WINEPREFIX}/dosdevices/z:.bak_wt" "${WINEPREFIX}/dosdevices/z:" + fi + + # Work around DLL registration bug until ierunonce/RunOnce/wineboot is fixed + # FIXME: whittle down this list + for i in actxprxy.dll browseui.dll browsewm.dll cdfview.dll ddraw.dll \ + dispex.dll dsound.dll iedkcs32.dll iepeers.dll iesetup.dll \ + imgutil.dll inetcomm.dll isetup.dll jscript.dll laprxy.dll \ + mlang.dll msctf.dll mshtml.dll mshtmled.dll msi.dll msimtf.dll msident.dll \ + msoeacct.dll msrating.dll mstime.dll msxml3.dll occache.dll \ + ole32.dll oleaut32.dll olepro32.dll pngfilt.dll quartz.dll \ + rpcrt4.dll rsabase.dll rsaenh.dll scrobj.dll scrrun.dll \ + shdocvw.dll shell32.dll urlmon.dll vbscript.dll webcheck.dll \ + wshcon.dll wshext.dll asctrls.ocx hhctrl.ocx mscomct2.ocx \ + plugin.ocx proctexe.ocx tdc.ocx uxtheme.dll webcheck.dll wshom.ocx; do + "${WINE}" regsvr32 /i ${i} > /dev/null 2>&1 + if [ "${W_ARCH}" = "win64" ]; then + "${WINE64}" regsvr32 /i ${i} > /dev/null 2>&1 + fi + done + + if w_workaround_wine_bug 25648 "Setting TabProcGrowth=0 to avoid hang"; then + cat > "${W_TMP}"/set-tabprocgrowth.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main] +"TabProcGrowth"=dword:00000000 + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-tabprocgrowth.reg + fi + + # Builtin ieproxy is in system32, but ie8's lives in Program Files. Native + # CLSID path will get overwritten on prefix update. Setting ieproxy to + # native doesn't help because setupapi ignores DLL overrides. To work + # around this problem, copy native ieproxy to system32. + w_try_cp_dll "${W_PROGRAMS_X86_UNIX}/Internet Explorer/ieproxy.dll" "${W_SYSTEM32_DLLS}" + + if [ "${W_ARCH}" = "win64" ]; then + w_try_cp_dll "${W_PROGRAMS_UNIX}/Internet Explorer/ieproxy.dll" "${W_SYSTEM64_DLLS}" + fi + + # Seeing is believing + case ${WINETRICKS_GUI} in + none) + w_warn "To start ie8, use the command \"${WINE}\" '${W_PROGRAMS_WIN}\\\\Internet Explorer\\\\iexplore.exe'" + ;; + *) + w_warn "Starting ie8. To start it later, use the command \"${WINE}\" '${W_PROGRAMS_WIN}\\\\Internet Explorer\\\\iexplore.exe'" + "${WINE}" "${W_PROGRAMS_WIN}\\Internet Explorer\\iexplore.exe" http://www.example.com > /dev/null 2>&1 & + ;; + esac + + w_set_winver 'default' + + unset _W_restore_z +} + +#---------------------------------------------------------------- + +w_metadata kindle apps \ + title="Amazon Kindle" \ + publisher="Amazon" \ + year="2017" \ + media="download" \ + file1="KindleForPC-installer-1.16.44025.exe" \ + installed_exe1="${W_PROGRAMS_WIN}/Amazon/Kindle/Kindle.exe" \ + homepage="https://www.amazon.com/kindle-dbs/fd/kcp" + +load_kindle() +{ + if w_workaround_wine_bug 43508; then + w_warn "Using an older version of Kindle (1.16.44025) to work around https://bugs.winehq.org/show_bug.cgi?id=43508" + fi + + # Originally at: https://s3.amazonaws.com/kindleforpc/44025/KindleForPC-installer-1.16.44025.exe + w_download https://web.archive.org/web/20160817182927/https://s3.amazonaws.com/kindleforpc/44025/KindleForPC-installer-1.16.44025.exe 2655fa8be7b8f4659276c46ef9f3fede847135bf6e5c1de136c9de7af6cac1e2 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ /S} + + if w_workaround_wine_bug 35041 && [ -n "${W_TASKSET}" ] ; then + w_warn "You may need to run with ${W_TASKSET} to avoid a libX11 crash." + fi + + if w_workaround_wine_bug 29045; then + w_call corefonts + fi + + w_warn "If kindle does not load for you, try increasing your open file limit" +} + +#---------------------------------------------------------------- + +w_metadata kobo apps \ + title="Kobo e-book reader" \ + publisher="Kobo" \ + year="2011" \ + media="download" \ + file1="KoboSetup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Kobo/Kobo.exe" \ + homepage="http://www.borders.com/online/store/MediaView_ereaderapps" + +load_kobo() +{ + w_download http://download.kobobooks.com/desktop/1/KoboSetup.exe 721e76c06820058422f06420400a0b1286662196d6178d70c4592fd8034704c4 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ /S} +} + +#---------------------------------------------------------------- + +w_metadata mingw apps \ + title="Minimalist GNU for Windows, including GCC for Windows" \ + publisher="GNU" \ + year="2013" \ + media="download" \ + file1="mingw-get-setup.exe" \ + installed_exe1="c:/MinGW/bin/gcc.exe" \ + homepage="http://mingw.org/wiki/Getting_Started" + +load_mingw() +{ + w_download "https://downloads.sourceforge.net/mingw/files/mingw-get-setup.exe" aab27bd5547d35dc159288f3b5b8760f21b0cfec86e8f0032b49dd0410f232bc + + if test "${W_OPT_UNATTENDED}"; then + w_info "FYI: Quiet mode will install these mingw packages: 'gcc msys-base'" + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + run, ${file1} + WinWait, MinGW Installation Manager Setup Tool + if ( w_opt_unattended > 0 ) { + WinActivate + Sleep, 1000 + ControlClick, Button1 ; Install + ; Window title is blank + WinWait, , Step 1: Specify Installation Preferences + Sleep, 1000 + ControlClick, Button10 ; Continue + Sleep, 1000 + WinWait, , Step 2: Download and Set Up MinGW Installation Manager + ; This takes a while + WinWait, , Catalogue update completed + Sleep, 1000 + ControlClick, Button4 ; Continue + ; This window appears in background, but isn't active because of another popup + ; We may need to wait for that to disappear first + WinWait, MinGW Installation Manager + Sleep, 1000 + WinClose, MinGW Installation Manager + } + WinWaitClose, MinGW Installation Manager + " + + w_append_path 'C:\MinGW\bin' + w_try "${WINE}" mingw-get update + w_try "${WINE}" mingw-get install gcc msys-base +} + +#---------------------------------------------------------------- + +w_metadata mozillabuild apps \ + title="Mozilla build environment" \ + publisher="Mozilla Foundation" \ + year="2015" \ + media="download" \ + file1="MozillaBuildSetup-2.0.0.exe" \ + installed_file1="c:/mozilla-build/moztools/bin/nsinstall.exe" \ + homepage="https://wiki.mozilla.org/MozillaBuild" + +load_mozillabuild() +{ + w_download https://ftp.mozilla.org/pub/mozilla.org/mozilla/libraries/win32/MozillaBuildSetup-2.0.0.exe d5ffe52fe634fb7ed02e61041cc183c3af92039ee74e794f7ae83a408e4cf3f5 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" MozillaBuildSetup-2.0.0.exe ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata mpc apps \ + title="Media Player Classic - Home Cinema" \ + publisher="doom9 folks" \ + year="2014" \ + media="download" \ + file1="MPC-HC.1.7.5.x86.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/MPC-HC/mpc-hc.exe" \ + homepage="https://mpc-hc.sourceforge.io/" + +load_mpc() +{ + w_download https://downloads.sourceforge.net/project/mpc-hc/MPC%20HomeCinema%20-%20Win32/MPC-HC_v1.7.5_x86/MPC-HC.1.7.5.x86.exe 1d690da5b330f723aea4a294d478828395d321b59fc680f2b971e8b16b8bd33d + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" MPC-HC.1.7.5.x86.exe ${W_OPT_UNATTENDED:+ /VERYSILENT} +} + +#---------------------------------------------------------------- + +w_metadata mspaint apps \ + title="MS Paint" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="windowsxp-kb978706-x86-enu_f4e076b3867c2f08b6d258316aa0e11d6822b8d7.exe" \ + installed_file1="c:/windows/mspaint.exe" + +load_mspaint() +{ + if w_workaround_wine_bug 657 "Native mspaint.exe from XP requires mfc42.dll"; then + w_call mfc42 + fi + + # Originally at: https://download.microsoft.com/download/0/A/4/0A40DF5C-2BAE-4C63-802A-84C33B34AC98/WindowsXP-KB978706-x86-ENU.exe + # Mirror list: http://www.filewatcher.com/_/?q=WindowsXP-KB978706-x86-ENU.exe + w_download http://download.windowsupdate.com/msdownload/update/software/secu/2010/01/windowsxp-kb978706-x86-enu_f4e076b3867c2f08b6d258316aa0e11d6822b8d7.exe 93ed34ab6c0d01a323ce10992d1c1ca27d1996fef82f0864d83e7f5ac6f9b24b + w_try "${WINE}" "${W_CACHE}/${W_PACKAGE}/${file1}" /q /x:"${W_TMP}/${file1}" + w_try cp -f "${W_TMP}/${file1}/SP3GDR/mspaint.exe" "${W_WINDIR_UNIX}"/mspaint.exe +} + +#---------------------------------------------------------------- + +w_metadata mt4 apps \ + title="Meta Trader 4" \ + year="2005" \ + media="download" \ + file1="mt4setup.exe" + +load_mt4() +{ + w_download https://web.archive.org/web/20160112133258/https://download.mql5.com/cdn/web/metaquotes.software.corp/mt4/mt4setup.exe?utm_campaign=www.metatrader4.com 96c82266e18cc4ada1bbc0cd0ada74c3a31d18914fb1a36626f4596c8bacb6f0 mt4setup.exe + + if w_workaround_wine_bug 7156 "${title} needs wingdings.ttf, installing opensymbol"; then + w_call opensymbol + fi + + # Opens a webpage + WINEDLLOVERRIDES="winebrowser.exe=" + export WINEDLLOVERRIDES + + # No documented silent install option, unfortunately. + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + Run, ${file1} + SetTitleMatchMode, RegEx + WinWaitActive, 4 Setup + Sleep, 200 + ControlClick, Button1 + Sleep, 200 + ControlClick, Button3 + WinWaitClose ; Wait for installer to finish + Process, Wait, Terminal.exe + WinWaitActive, ahk_class #32770 + Process, Close, Terminal.exe + " +} + +#---------------------------------------------------------------- + +w_metadata njcwp_trial apps \ + title="NJStar Chinese Word Processor trial" \ + publisher="NJStar" \ + year="2015" \ + media="download" \ + file1="njcwp610sw15918.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/NJStar Chinese WP6/NJStar.exe" \ + homepage="https://www.njstar.com/cms/njstar-chinese-word-processor" + +load_njcwp_trial() +{ + w_download http://ftp.njstar.com/sw/njcwp610sw15918.exe 7afa6dfc431f058d1397ac7100d5650b97347e1f37f81a2e2d2ee5dfdff4660b + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if test "${W_OPT_UNATTENDED}"; then + w_ahk_do " + SetTitleMatchMode, 2 + run ${file1} + WinWait, Setup, Welcome + ControlClick Button2 ; next + WinWait, Setup, License + ControlClick Button2 ; agree + WinWait, Setup, Install + ControlClick Button2 ; install + WinWait, Setup, Completing + ControlClick Button4 ; do not launch + ControlClick Button2 ; finish + WinWaitClose + " + else + w_try "${WINE}" "${file1}" + fi +} + +#---------------------------------------------------------------- + +w_metadata njjwp_trial apps \ + title="NJStar Japanese Word Processor trial" \ + publisher="NJStar" \ + year="2009" \ + media="download" \ + file1="njjwp610sw15918.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/NJStar Japanese WP6/NJStarJ.exe" \ + homepage="https://www.njstar.com/cms/njstar-japanese-word-processor" + +load_njjwp_trial() +{ + w_download http://ftp.njstar.com/sw/njjwp610sw15918.exe 7f36138c3d19539cb73d757cd42a6f7afebdaf9cfed0cf9bc483c33e519e2a26 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if test "${W_OPT_UNATTENDED}"; then + w_ahk_do " + SetTitleMatchMode, 2 + run ${file1} + WinWait, Setup, Welcome + ControlClick Button2 ; next + WinWait, Setup, License + ControlClick Button2 ; agree + WinWait, Setup, Install + ControlClick Button2 ; install + WinWait, Setup, Completing + ControlClick Button4 ; do not launch + ControlClick Button2 ; finish + WinWaitClose + " + else + w_try "${WINE}" "${file1}" + fi +} + +#---------------------------------------------------------------- + +w_metadata nook apps \ + title="Nook for PC (e-book reader)" \ + publisher="Barnes & Noble" \ + year="2011" \ + media="download" \ + file1="bndr2_setup_latest.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Barnes & Noble/BNDesktopReader/BNDReader.exe" \ + homepage="https://www.barnesandnoble.com/h/nook/apps" + +load_nook() +{ + # Dates from curl --head + # 2012/03/07: sha256sum 436616d99f0e2351909ab53d910b505c7a3fca248876ebb835fd7bce4aad9720 + w_download http://images.barnesandnoble.com/PResources/download/eReader2/bndr2_setup_latest.exe 436616d99f0e2351909ab53d910b505c7a3fca248876ebb835fd7bce4aad9720 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + # Exits with 199 for some reason.. + "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ /S} + + status=$? + case ${status} in + 0|199) echo "Successfully installed ${W_PACKAGE}" ;; + *) w_die "Failed to install ${W_PACKAGE}" ;; + esac +} + +#---------------------------------------------------------------- + +w_metadata npp apps \ + title="Notepad++" \ + publisher="Don Ho" \ + year="2019" \ + media="download" \ + file1="npp.7.7.1.Installer.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Notepad++/notepad++.exe" + +load_npp() +{ + w_download https://notepad-plus-plus.org/repository/7.x/7.7.1/npp.7.7.1.Installer.exe 6787c524b0ac30a698237ffb035f932d7132343671b8fe8f0388ed380d19a51c + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata office2003pro apps \ + title="Microsoft Office 2003 Professional" \ + publisher="Microsoft" \ + year="2002" \ + media="cd" \ + file1="setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Office/Office11/WINWORD.EXE" + +load_office2003pro() +{ + w_mount OFFICE11 + w_read_key + + w_ahk_do " + if ( w_opt_unattended > 0 ) { + run ${W_ISO_MOUNT_LETTER}:setup.exe /EULA_ACCEPT=YES /PIDKEY=${W_KEY} + } else { + run ${W_ISO_MOUNT_LETTER}:setup.exe + } + SetTitleMatchMode, 2 + WinWait,Microsoft Office 2003 Setup, Welcome + if ( w_opt_unattended > 0 ) { + Sleep 500 + WinWait,Microsoft Office 2003 Setup,Key + Sleep 500 + ControlClick Button1 ; Next + WinWait,Microsoft Office 2003 Setup,Initials + Sleep 500 + ControlClick Button1 ; Next + WinWait,Microsoft Office 2003 Setup,End-User + Sleep 500 + ControlClick Button1 ; I accept + ControlClick Button2 ; Next + WinWait,Microsoft Office 2003 Setup,Recommended + Sleep 500 + ControlClick Button7 ; Next + WinWait,Microsoft Office 2003 Setup,Summary + Sleep 500 + ControlClick Button1 ; Install + } + WinWait,Microsoft Office 2003 Setup,Completed + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick Button2 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata office2007pro apps \ + title="Microsoft Office 2007 Professional" \ + publisher="Microsoft" \ + year="2006" \ + media="cd" \ + file1="setup.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Microsoft Office/Office12/WINWORD.EXE" + +load_office2007pro() +{ + if w_workaround_wine_bug 14980 "Using native riched20"; then + w_override_app_dlls winword.exe n riched20 + w_override_app_dlls excel.exe n riched20 + w_override_app_dlls powerpnt.exe n riched20 + w_override_app_dlls msaccess.exe n riched20 + w_override_app_dlls outlook.exe n riched20 + w_override_app_dlls mspub.exe n riched20 + w_override_app_dlls infopath.exe n riched20 + fi + + w_mount OFFICE12 + w_read_key + + if [ -n "${W_OPT_UNATTENDED}" ]; then + # See + # https://blogs.technet.microsoft.com/office_resource_kit/2009/01/29/configure-a-silent-install-of-the-2007-office-system-with-config-xml/ + # https://www.symantec.com/connect/articles/office-2007-silent-installation-lessons-learned + cat > "${W_TMP}"/config.xml <<__EOF__ +<Configuration Product="ProPlus"> +<Display Level="none" CompletionNotice="no" SuppressModal="yes" AcceptEula="yes" /> +<PIDKEY Value="${W_KEY}" /> +</Configuration> +__EOF__ + "${WINE}" ${W_ISO_MOUNT_LETTER}:setup.exe /config "${W_TMP_WIN}"\\config.xml + + status=$? + case ${status} in + 0|43) ;; + 78) + w_die "Installing ${W_PACKAGE} failed, product key ${W_KEY} \ + might be wrong. Try again without -q, or put correct key in \ + ${W_CACHE}/${W_PACKAGE}/key.txt and rerun." + ;; + *) + w_die "Installing ${W_PACKAGE} failed." + ;; + esac + + else + w_try "${WINE}" ${W_ISO_MOUNT_LETTER}:setup.exe + fi +} + +#---------------------------------------------------------------- + +w_metadata office2013pro apps \ + title="Microsoft Office 2013 Professional" \ + publisher="Microsoft" \ + year="2013" \ + media="download" \ + file1="setup.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Microsoft Office/Office15/WINWORD.EXE" + +load_office2013pro() +{ + w_package_unsupported_win64 + + if [ ! -x "$(command -v ntlm_auth 2>/dev/null)" ]; then + w_die "winbind (part of samba) is required for the installation" + fi + + # link from https://www.askvg.com/direct-download-link-microsoft-office-2013-professional-plus-free-trial/ + w_download https://web.archive.org/web/20130324022555/http://care.dlservice.microsoft.com/dl/download/2/9/C/29CC45EF-4CDA-4710-9FB3-1489786570A1/OfficeProfessionalPlus_x86_en-us.img 236f8faae3f979ec72592a63784bba2f0d614916350c44631221b88ae9dae206 "OFFICE15.iso" + + w_set_winver win7 + + w_call corefonts + w_call tahoma + + w_call riched20 + + + if w_workaround_wine_bug 43581 "Wine has problems parsing some regex strings during installation"; then + w_call msxml6 + fi + + case "${WINETRICKS_ISO_MOUNT}" in + # archivemount > 0.8.8: works + # archivemount <= 0.8.8: cannot finish installation due to path issue + archivemount) + _W_last_bad_ver=0.8.8 + _W_tool_ver="$(archivemount --version 2>&1 | head -n 1 | cut -d ' ' -f3)" + _W_pos_am_ver="$(printf "%s\\n%s" "${_W_tool_ver}" "${_W_last_bad_ver}" | sort -t. -k 1,1n -k 2,2n -k 3,3n | grep -n "^${_W_tool_ver}\$" | cut -d : -f1 | head -n 1)" + if test "${_W_pos_am_ver}" = "2"; then + W_USE_USERMOUNT=1 + else + w_warn "archivemount <= ${_W_last_bad_ver} has path issue and cannot be used." + fi + unset _W_last_bad_ver _W_tool_ver _W_pos_am_ver + ;; + # fuseiso: works + # hdiutil: partially tested (only mounting/unmounting and copying files) + *) W_USE_USERMOUNT=1 ;; + esac + w_mount OFFICE15 + + if [ -n "${W_OPT_UNATTENDED}" ]; then + cat > "${W_TMP}"/config.xml <<_EOF_ +<Configuration Product="ProPlus"> +<Display Level="none" CompletionNotice="no" SuppressModal="yes" AcceptEula="yes" /> +</Configuration> +_EOF_ + w_try "${WINE}" "${W_ISO_MOUNT_LETTER}:${file1}" /config "${W_TMP_WIN}"\\config.xml + else + w_try "${WINE}" "${W_ISO_MOUNT_LETTER}:${file1}" + fi + + w_wineserver -w + w_umount + + w_warn "Microsoft Office 2013 is far away from running stable under wine 3.3. It should not be used in a productive environment." +} + +#---------------------------------------------------------------- + +w_metadata ollydbg110 apps \ + title="OllyDbg" \ + publisher="ollydbg.de" \ + year="2004" \ + media="download" \ + file1="odbg110.zip" \ + installed_file1="c:/ollydbg110/OLLYDBG.EXE" \ + homepage="http://ollydbg.de" + +load_ollydbg110() +{ + # The GUI is unreadable without having corefonts installed. + w_call corefonts + + w_download http://www.ollydbg.de/odbg110.zip 73b1770f28893dab22196eb58d45ede8ddf5444009960ccc0107d09881a7cd1e + w_try_unzip "${W_DRIVE_C}/ollydbg110" "${W_CACHE}/${W_PACKAGE}"/odbg110.zip +} + +#---------------------------------------------------------------- + +w_metadata ollydbg200 apps \ + title="OllyDbg" \ + publisher="ollydbg.de" \ + year="2010" \ + media="download" \ + file1="odbg200.zip" \ + installed_file1="c:/ollydbg200/ollydbg.exe" \ + homepage="http://ollydbg.de" + +load_ollydbg200() +{ + # The GUI is unreadable without having corefonts installed. + w_call corefonts + + w_download http://www.ollydbg.de/odbg200.zip 93dfd6348323db33f2005fc1fb8ff795256ae91d464dd186adc29c4314ed647c + w_try_unzip "${W_DRIVE_C}/ollydbg200" "${W_CACHE}/${W_PACKAGE}"/odbg200.zip +} + +#---------------------------------------------------------------- + +w_metadata ollydbg201 apps \ + title="OllyDbg" \ + publisher="ollydbg.de" \ + year="2013" \ + media="download" \ + file1="odbg201.zip" \ + installed_file1="c:/ollydbg201/ollydbg.exe" \ + homepage="http://ollydbg.de" + +load_ollydbg201() +{ + # The GUI is unreadable without having corefonts installed. + w_call corefonts + + w_download http://www.ollydbg.de/odbg201.zip 29244e551be31f347db00503c512058086f55b43c93c1ae93729b15ce6e087a5 + w_try_unzip "${W_DRIVE_C}/ollydbg201" "${W_CACHE}/${W_PACKAGE}"/odbg201.zip + + # ollydbg201 is affected by Wine bug 36012 if debug symbols are available. + # As a workaround native 'dbghelp' can be installed. We don't do this automatically + # because for some people it might work even without additional workarounds. + # Older versions of OllyDbg were not affected by this bug. +} + +#---------------------------------------------------------------- + +w_metadata openwatcom apps \ + title="Open Watcom C/C++ compiler (can compile win16 code!)" \ + publisher="Watcom" \ + year="2010" \ + media="download" \ + file1="open-watcom-c-win32-1.9.exe" \ + installed_file1="c:/WATCOM/owsetenv.bat" \ + homepage="http://www.openwatcom.org" + +load_openwatcom() +{ + # 2016/03/11: upstream http://www.openwatcom.org appears to be dead (404) + # 2019/06/14: now at https://sourceforge.net/projects/openwatcom/files/open-watcom-1.9/open-watcom-c-win32-1.9.exe/download + w_download https://sourceforge.net/projects/openwatcom/files/open-watcom-1.9/open-watcom-c-win32-1.9.exe 040c910aba304fdb5f39b8fe508cd3c772b1da1f91a58179fa0895e0b2bf190b + + if [ -n "${W_OPT_UNATTENDED}" ]; then + # Options documented at http://bugzilla.openwatcom.org/show_bug.cgi?id=898 + # But they don't seem to work on Wine, so jam them into setup.inf + # Pick smallest installation that supports 16-bit C and C++ + w_try_cd "${W_TMP}" + cp "${W_CACHE}/${W_PACKAGE}/${file1}" . + w_try_unzip . "${file1}" setup.inf + sed -i 's/tools16=.*/tools16=true/' setup.inf + w_try zip -f "${file1}" + w_try "${WINE}" "${file1}" -s + else + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" + fi + + if test ! -f "${W_DRIVE_C}"/WATCOM/binnt/wcc.exe; then + w_warn "c:/watcom/binnt/wcc.exe not found; you probably didn't select 16-bit tools, and won't be able to build win16test." + fi +} + +#---------------------------------------------------------------- + +w_metadata protectionid apps \ + title="Protection ID" \ + publisher="CDKiLLER & TippeX" \ + year="2016" \ + media="manual_download" \ + file1="ProtectionId.685.December.2016.rar" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/protection_id.exe" + +load_protectionid() +{ + w_download "https://web.archive.org/web/20181209123344/https://pid.wiretarget.com/?f=ProtectionId.685.December.2016.rar" 27a84d740c9fb96cc866438a2b5cd4afc350affc8b7a0122c28c651af3559aea ProtectionId.685.December.2016.rar + w_try_cd "${W_SYSTEM32_DLLS}" + w_try_unrar "${W_CACHE}/${W_PACKAGE}/${file1}" + + # ProtectionId.685.December.2016 has a different executable name than usual, this may need to be disabled on next update: + w_try mv Protection_ID.eXe protection_id_.exe + w_try mv protection_id_.exe protection_id.exe +} + +#---------------------------------------------------------------- + +w_metadata psdk2003 apps \ + title="MS Platform SDK 2003" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="5.2.3790.1830.15.PlatformSDK_Svr2003SP1_rtm.img" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Microsoft Platform SDK/SetEnv.Cmd" + +load_psdk2003() +{ + w_package_unsupported_win64 + + w_call mfc42 + + # https://www.microsoft.com/en-us/download/details.aspx?id=15656 + w_download https://download.microsoft.com/download/7/5/e/75ec7f04-4c8c-4f38-b582-966e76602643/5.2.3790.1830.15.PlatformSDK_Svr2003SP1_rtm.img 7ef138b07a8ed2e008371d8602900eb68e86ac2a832d16b53f462a9e64f24d53 + + # Unpack ISO (how handy that 7z can do this!) + # Only the Windows version of 7z can handle .img files? + WINETRICKS_OPT_SHAREDPREFIX=1 w_call 7zip + w_try_cd "${W_PROGRAMS_X86_UNIX}"/7-Zip + w_try "${WINE}" 7z.exe x -y -o"${W_TMP_WIN}" "${W_CACHE_WIN}\\psdk2003\\5.2.3790.1830.15.PlatformSDK_Svr2003SP1_rtm.img" + + w_try_cd "${W_TMP}/Setup" + + # Sanity check... + w_verify_sha256sum d2605ae6f35a7fcc209e1d8dfbdfdb42afcb61e7d173f58fd608ae31db4ab1e7 PSDK-x86.msi + + w_try "${WINE}" msiexec /i PSDK-x86.msi ${W_OPT_UNATTENDED:+/qb} +} + +#---------------------------------------------------------------- + +w_metadata psdkwin71 apps \ + title="MS Windows 7.1 SDK" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="winsdk_web.exe" \ + installed_exe1="C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin/SetEnv.Cmd" + +load_psdkwin71() +{ + w_call dotnet20 + w_call dotnet40 + w_call mfc42 # need mfc42u, or setup will abort + # https://www.microsoft.com/en-us/download/details.aspx?id=3138 + w_download https://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe 9ea8d82a66a33946e8673df92d784971b35b8f65ade3e0325855be8490e3d51d + + # don't have a working unattended recipe. Maybe we'll have to + # do an AutoHotKey script until Microsoft gets its act together: + # https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/c053b616-7d5b-405d-9841-ec465a8e21d5/ + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" winsdk_web.exe + + if w_workaround_wine_bug 21362; then + # Assume user installed in default location + cat > "${W_TMP}"/set-psdk71.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft SDKs] + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft SDKs\\Windows] +"CurrentVersion"="v7.1" +"CurrentInstallFolder"="C:\\\\Program Files\\\\Microsoft SDKs\\\\Windows\\\\v7.1\\\\" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft SDKs\\Windows\\v7.1] +"InstallationFolder"="C:\\\\Program Files\\\\Microsoft SDKs\\\\Windows\\\\v7.1\\\\" +"ProductVersion"="7.0.7600.0.30514" +"ProductName"="Microsoft Windows SDK for Windows 7 (7.0.7600.0.30514)" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDKBuild] +"ComponentName"="Microsoft Windows SDK Headers and Libraries" +"InstallationFolder"="C:\\\\Program Files\\\\Microsoft SDKs\\\\Windows\\\\v7.1\\\\" +"ProductVersion"="7.0.7600.0.30514" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDKTools] +"ComponentName"="Microsoft Windows SDK Headers and Libraries" +"InstallationFolder"="C:\\\\Program Files\\\\Microsoft SDKs\\\\Windows\\\\v7.1\\\\bin\\\\" +"ProductVersion"="7.0.7600.0.30514" + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDKWin32Tools] +"ComponentName"="Microsoft Windows SDK Utilities for Win32 Development" +"InstallationFolder"="C:\\\\Program Files\\\\Microsoft SDKs\\\\Windows\\\\v7.1\\\\bin\\\\" +"ProductVersion"="7.0.7600.0.30514" +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-psdk71.reg + fi +} + +#---------------------------------------------------------------- + +w_metadata qq apps \ + title="QQ 8.9.6(Chinese chat app)" \ + publisher="Tencent" \ + year="2017" \ + media="download" \ + file1="QQ8.9.6.exe" \ + file2="QQ.tar.gz"\ + installed_exe1="${W_PROGRAMS_X86_WIN}/Tencent/QQ/Bin/QQScLauncher.exe" \ + homepage="https://www.qq.com/" \ + unattended="no" + +load_qq() +{ + w_download https://dldir1.qq.com/qqfile/qq/QQ8.9.6/22404/QQ8.9.6.exe d207f49a642be21c4e1b14fc9f4cf47a6a9a2718afbc8bd0685b607b65424ef6 + w_download https://hillwoodhome.net/wine/QQ.tar.gz eb5cd6371eb75ec9e2fc0271199df05cbb9f38a60c2e81d5d8ac7daeb40aba62 + + if w_workaround_wine_bug 5162 "Installing native riched20 to work around can't input username."; then + w_call riched20 + fi + + # Make sure chinese fonts are available + w_call fakechinese + + # uses mfc42u.dll + w_call mfc42 + + if w_workaround_wine_bug 38171 "Installing desktop file to work around bug"; then + w_try_cd "${W_TMP}/" + tar -zxf "${W_CACHE}/qq/QQ.tar.gz" + mkdir -p "${HOME}/.local/share/applications/wine/Programs/腾讯软件/QQ" + mkdir -p "${HOME}/.local/share/icons/hicolor/48x48/apps" + mkdir -p "${HOME}/.local/share/icons/hicolor/256x256/apps" + w_try mv QQ/腾讯QQ.desktop ~/.local/share/applications/wine/Programs/腾讯软件/QQ + w_try mv QQ/48x48/QQ.png ~/.local/share/icons/hicolor/48x48/apps + w_try mv QQ/256x256/QQ.png ~/.local/share/icons/hicolor/256x256/apps + # shellcheck disable=SC1001 + echo Exec=env WINEPREFIX="${WINEPREFIX}" "${WINE}" \""${W_PROGRAMS_X86_WIN}"/Tencent/QQ/bin/QQScLauncher.exe\" >> "${HOME}/.local/share/applications/wine/Programs/腾讯软件/QQ/腾讯QQ.desktop" + fi + + if w_workaround_wine_bug 37680 "Disable txplatform.exe to work around QQ can't be quit cleanly"; then + w_override_dlls disabled txplatform.exe + fi + + # Disable update, stay on the version. + w_override_dlls disabled txupd.exe + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata qqintl apps \ + title="QQ International Instant Messenger 2.11" \ + publisher="Tencent" \ + year="2014" \ + media="download" \ + file1="QQIntl2.11.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Tencent/QQIntl/Bin/QQ.exe" \ + homepage="https://www.imqq.com/" \ + unattended="no" + +load_qqintl() +{ + w_download https://dldir1.qq.com/qqfile/QQIntl/QQi_PC/QQIntl2.11.exe a08e5d8432ad41745cfe92479a9a0c3328a546c27f05486392ca7b77b1cb02a8 + + if w_workaround_wine_bug 33086 "Installing native riched20 to allow typing in username"; then + w_call riched20 + fi + + if w_workaround_wine_bug 37617 "Installing native wininet to work around crash"; then + w_call wininet + fi + + if w_workaround_wine_bug 37680 "Disable txplatform.exe to work around QQ can't be quit cleanly"; then + w_override_dlls disabled txplatform.exe + fi + + # Make sure chinese fonts are available + w_call fakechinese + + # wants mfc80u.dll + w_call vcrun2005 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" +} + +#---------------------------------------------------------------- + +w_metadata safari apps \ + title="Safari" \ + publisher="Apple" \ + year="2010" \ + media="download" \ + file1="SafariSetup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Safari/Safari.exe" + +load_safari() +{ + w_download http://appldnld.apple.com.edgesuite.net/content.info.apple.com/Safari5/061-7138.20100607.Y7U87/SafariSetup.exe a5b44032fe9cd0ede8571023912c91b1dcca106ad6a65a822be9ebd405510939 + + if [ -n "${W_OPT_UNATTENDED}" ]; then + w_warn "Safari's silent install is broken under Wine. See https://bugs.winehq.org/show_bug.cgi?id=23493. You should do a regular install if you want to use Safari." + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE_MULTI}" SafariSetup.exe ${W_OPT_UNATTENDED:+/qn} +} + +#---------------------------------------------------------------- + +w_metadata sketchup apps \ + title="SketchUp 8" \ + publisher="Google" \ + year="2012" \ + media="download" \ + file1="GoogleSketchUpWEN.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Google/Google SketchUp 8/SketchUp.exe" + +load_sketchup() +{ + w_download https://dl.google.com/sketchup/GoogleSketchUpWEN.exe e50c1b36131d72437eb32a124a5208fad22dc22b843683cfb520e1ef172b8352 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run GoogleSketchUpWEN.exe + WinWait, SketchUp, Welcome + if ( w_opt_unattended > 0 ) { + Sleep 4000 + Send {Enter} + WinWait, SketchUp, License + Sleep 1000 + ControlClick Button1 ; accept + Sleep 1000 + ControlClick Button4 ; Next + WinWait, SketchUp, Destination + Sleep 1000 + ControlClick Button1 ; Next + WinWait, SketchUp, Ready + Sleep 1000 + ControlClick Button1 ; Install + } + WinWait, SketchUp, Completed + if ( w_opt_unattended > 0 ) { + Sleep 1000 + ControlClick Button1 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata steam apps \ + title="Steam" \ + publisher="Valve" \ + year="2010" \ + media="download" \ + file1="SteamInstall.msi" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/Steam.exe" + +load_steam() +{ + # 2016/10/28: 029f918a29b2b311711788e8a477c8de529c11d7dba3caf99cbbde5a983efdad + # 2018/06/01: 3bc6942fe09f10ed3447bccdcf4a70ed369366fef6b2c7f43b541f1a3c5d1c51 + # 2021/03/27: 874788b45dfc043289ba05387e83f27b4a046004a88a4c5ee7c073187ff65b9d + # 2022/03/27: 3b616cb0beaacffb53884b5ba0453312d2577db598d2a877a3b251125fb281a1 + w_download http://media.steampowered.com/client/installer/SteamSetup.exe 3b616cb0beaacffb53884b5ba0453312d2577db598d2a877a3b251125fb281a1 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_try "${WINE}" SteamSetup.exe ${W_OPT_UNATTENDED:+ /S} + + # Not all users need this disabled, but let's play it safe for now + if w_workaround_wine_bug 22053 "Disabling gameoverlayrenderer to prevent game crashes on some machines."; then + w_override_dlls disabled gameoverlayrenderer + fi + + if w_workaround_wine_bug 44985 "Disabling libglesv2 to make Store and Library function correctly."; then + w_override_dlls disabled libglesv2 + fi + + # Otherwise Steam Store and Library don't show + w_call corefonts +} + +#---------------------------------------------------------------- + +w_metadata uplay apps \ + title="Uplay" \ + publisher="Ubisoft" \ + year="2013" \ + media="download" \ + file1="UplayInstaller.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Ubisoft/Ubisoft Game Launcher/Uplay.exe" + +load_uplay() +{ + # Changes too frequently, don't check anymore + w_download https://static3.cdn.ubi.com/orbit/launcher_installer/UplayInstaller.exe + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + # NSIS installer + w_try "${WINE}" UplayInstaller.exe ${W_OPT_UNATTENDED:+ /S} +} + +#---------------------------------------------------------------- + +w_metadata utorrent apps \ + title="µTorrent 2.2.1" \ + publisher="BitTorrent" \ + year="2011" \ + media="manual_download" \ + file1="utorrent_2.2.1.exe" \ + installed_exe1="c:/windows/utorrent.exe" + +load_utorrent() +{ + # BitTorrent client supported on Windows, OS X, Linux through Wine + # 2012/03/07: sha256sum ec2c086ff784b06e4ff05243164ddb768b81ee32096afed6d5e574ff350b619e + w_download_manual "https://www.oldapps.com/utorrent.php?old_utorrent=38" utorrent_2.2.1.exe ec2c086ff784b06e4ff05243164ddb768b81ee32096afed6d5e574ff350b619e + + w_try cp -f "${W_CACHE}/utorrent/${file1}" "${W_WINDIR_UNIX}"/utorrent.exe +} + +#---------------------------------------------------------------- + +w_metadata utorrent3 apps \ + title="µTorrent 3.4" \ + publisher="BitTorrent" \ + year="2011" \ + media="download" \ + file1="uTorrent.exe" \ + installed_exe1="c:/users/${LOGNAME}/Application Data/uTorrent/uTorrent.exe" + +load_utorrent3() +{ + # 2017/03/26: sha256sum 482cfc0759f484ad4e6547cc160ef3f08057cb05969242efd75a51525ab9bd92 + w_download https://download-new.utorrent.com/endpoint/utorrent/os/windows/track/stable/ 482cfc0759f484ad4e6547cc160ef3f08057cb05969242efd75a51525ab9bd92 uTorrent.exe + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + # If you don't use /PERFORMINSTALL, it just runs µTorrent + # FIXME: That's no longer a quiet option, though.. + "${WINE}" "${file1}" /PERFORMINSTALL /NORUN + + # dang installer exits with status 1 on success + status=$? + case ${status} in + 0|1) ;; + *) w_die "Note: utorrent installer returned status '${status}'. Aborting." ;; + esac +} + +#---------------------------------------------------------------- + +w_metadata vc2005express apps \ + title="MS Visual C++ 2005 Express" \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="VC.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Visual Studio 8/Common7/IDE/VCExpress.exe" + +load_vc2005express() +{ + # Thanks to https://blogs.msdn.microsoft.com/astebner/2006/03/14/how-to-create-an-installable-layout-for-visual-studio-2005-express-editions/ + # for the recipe + w_call dotnet20 + + # https://blogs.msdn.microsoft.com/astebner/2006/03/14/how-to-create-an-installable-layout-for-visual-studio-2005-express-editions/ + # https://go.microsoft.com/fwlink/?linkid=57034 + w_download https://download.microsoft.com/download/A/9/1/A91D6B2B-A798-47DF-9C7E-A97854B7DD18/VC.iso 5ae700d0285d94ec6df23828c7dc9f5634cd250363bed72e486916af22ff9545 + + # Unpack ISO (how handy that 7z can do this!) + w_try_7z "${W_TMP}" "${W_CACHE}"/vc2005express/VC.iso + + w_try_cd "${W_TMP}" + if [ -n "${W_OPT_UNATTENDED}" ]; then + chmod +x Ixpvc.exe + # Add /qn after ReallySuppress for a really silent install (but then you won't see any errors) + + w_try "${WINE}" Ixpvc.exe /t:"${W_TMP_WIN}" /q:a /c:"msiexec /i vcsetup.msi VSEXTUI=1 ADDLOCAL=ALL REBOOT=ReallySuppress" + + else + w_try "${WINE}" setup.exe + w_ahk_do " + SetTitleMatchMode, 2 + WinWait, Visual C++ 2005 Express Edition Setup + WinWaitClose, Visual C++ 2005 Express Edition Setup + " + fi +} + +#---------------------------------------------------------------- + +w_metadata vc2005expresssp1 apps \ + title="MS Visual C++ 2005 Express SP1" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + file1="VS80sp1-KB926748-X86-INTL.exe" + +load_vc2005expresssp1() +{ + w_call vc2005express + + # https://www.microsoft.com/en-us/download/details.aspx?id=804 + if w_workaround_wine_bug 37375; then + w_warn "Installer currently fails" + fi + w_download https://download.microsoft.com/download/7/7/3/7737290f-98e8-45bf-9075-85cc6ae34bf1/VS80sp1-KB926748-X86-INTL.exe a959d1ea52674b5338473be32a1370f9ec80df84629a2ed3471aa911b42d9e50 + w_try ${WINE} "${W_CACHE}"/vc2005expresssp1/VS80sp1-KB926748-X86-INTL.exe ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +w_metadata vc2005trial apps \ + title="MS Visual C++ 2005 Trial" \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="En_vs_2005_vsts_180_Trial.img" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Visual Studio 8/Common7/IDE/devenv.exe" + +load_vc2005trial() +{ + w_call dotnet20 + + # Without mfc42.dll, pidgen.dll won't load, and the app claims "A trial edition is already installed..." + w_call mfc42 + + w_download https://download.microsoft.com/download/6/f/5/6f5f7a01-50bb-422d-8742-c099c8896969/En_vs_2005_vsts_180_Trial.img 3ae9f611c60c64d82e1fa9c94714aa6b6c10f6c2c05446e14b5afb5a257f86dc + + # Unpack ISO (how handy that 7z can do this!) + # Only the Windows version of 7z can handle .img files? + WINETRICKS_OPT_SHAREDPREFIX=1 w_call 7zip + w_try_cd "${W_PROGRAMS_X86_UNIX}"/7-Zip + w_try "${WINE}" 7z.exe x -y -o"${W_TMP_WIN}" "${W_CACHE_WIN}\\vc2005trial\\En_vs_2005_vsts_180_Trial.img" + + w_try_cd "${W_TMP}" + + # Sanity check... + w_verify_sha256sum e1d5ddd4bad46c2efe8105f8d73bd62857f6218942d3b9ac5da0e1a6a0a217e0 vs/wcu/runmsi.exe + + w_try_cd vs/Setup + w_ahk_do " + SetTitleMatchMode 2 + run setup.exe + winwait, Visual Studio, Setup is loading + if ( w_opt_unattended > 0 ) { + winwait, Visual Studio, Loading completed + sleep 1000 + controlclick, button2 + winwait, Visual Studio, Select features + sleep 1000 + controlclick, button38 + sleep 1000 + controlclick, button40 + winwait, Visual Studio, You have chosen + sleep 1000 + controlclick, button1 + winwait, Visual Studio, Select features + sleep 1000 + controlclick, button11 + } + ; this can take a while + winwait, Finish Page + if ( w_opt_unattended > 0 ) { + sleep 1000 + controlclick, button2 + } + winwaitclose, Finish Page + " +} + +#---------------------------------------------------------------- + +w_metadata vc2008express apps \ + title="MS Visual C++ 2008 Express" \ + publisher="Microsoft" \ + year="2008" \ + media="download" \ + file1="VS2008ExpressENUX1397868.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Visual Studio 9.0/Common7/IDE/VCExpress.exe" + +load_vc2008express() +{ + w_verify_cabextract_available + + w_call dotnet35 + + # This is the version without SP1 baked in. (SP1 requires dotnet35sp1, which doesn't work yet.) + w_download https://download.microsoft.com/download/8/B/5/8B5804AD-4990-40D0-A6AA-CE894CBBB3DC/VS2008ExpressENUX1397868.iso 632318ef0df5bad58fcb99852bd251243610e7a4d84213c45b4f693605a13ead + + # Unpack ISO + w_try_7z "${W_TMP}" "${W_CACHE}"/vc2008express/VS2008ExpressENUX1397868.iso + + # See also https://blogs.msdn.microsoft.com/astebner/2008/04/25/a-simpler-way-to-silently-install-visual-studio-2008-express-editions-with-a-caveat/ + w_try_cd "${W_TMP}"/VCExpress + w_try "${WINE}" setup.exe ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +w_metadata vc2010express apps \ + title="MS Visual C++ 2010 Express" \ + publisher="Microsoft" \ + year="2010" \ + media="download" \ + file1="VS2010Express1.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Visual Studio 10.0/Common7/IDE/VCExpress.exe" + +load_vc2010express() +{ + # Originally at: https://download.microsoft.com/download/1/E/5/1E5F1C0A-0D5B-426A-A603-1798B951DDAE/VS2010Express1.iso + # Mirror list at: http://www.filewatcher.com/_/?q=VS2010Express1.iso + # Formerly at: ftp://www.daba.lv/pub/Programmeeshana/VisualStudio/VS2010Express1.iso a9d5dcdf55e539a06547a8ebbc63d55dc167113e09ee9e42096ab9098313039b + w_download https://debian.fmi.uni-sofia.bg/~aangelov/VS2010Express1.iso a9d5dcdf55e539a06547a8ebbc63d55dc167113e09ee9e42096ab9098313039b + + # Unpack ISO + w_try_7z "${W_TMP}" "${W_CACHE}"/vc2010express/VS2010Express1.iso + w_try_cd "${W_TMP}"/VCExpress + + # Uninstall wine-mono, installer doesn't attempt to install native .Net if mono is installed, + # Then the installer throws an exception and fails + # See https://github.com/Winetricks/winetricks/issues/1165 + w_call remove_mono + + # dotnet40 leaves winver at win2k, which causes vc2010 to abort on + # start because it looks for c:\users\$LOGNAME\Application Data + w_set_winver winxp + + if w_workaround_wine_bug 12501 "Installing mspatcha to work around bug in SQL Server install"; then + w_call mspatcha + fi + + w_try ${WINE} setup.exe ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +w_metadata vlc apps \ + title="VLC media player 2.2.1" \ + publisher="VideoLAN" \ + year="2015" \ + media="download" \ + file1="vlc-2.2.1-win32.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/VideoLAN/VLC/vlc.exe" \ + homepage="https://www.videolan.org/vlc/" + +load_vlc() +{ + w_download https://get.videolan.org/vlc/2.2.1/win32/vlc-2.2.1-win32.exe 2eaa3881b01a2464d2a155ad49cc78162571dececcef555400666c719a60794d + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ /S} +} + +#---------------------------------------------------------------- + +w_metadata winamp apps \ + title="Winamp" \ + publisher="Radionomy (AOL (Nullsoft))" \ + year="2013" \ + media="download" \ + file1="winamp5666_full_all_redux.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Winamp/winamp.exe" \ + homepage="https://www.winamp.com/" + +load_winamp() +{ + w_info "may send information while installing, see https://www.microsoft.com/security/portal/Threat/Encyclopedia/Entry.aspx?threatid=159633" + + # 2019/12/11: previously at https://winampplugins.co.uk/Winamp/winamp5666_full_all_redux.exe + w_download http://www.meggamusic.co.uk/winamp/winamp5666_full_all_redux.exe ea9a6ba81475d49876d0b8b300d93f28f7959b8e99ce4372dbde746567e14002 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if [ -n "${W_OPT_UNATTENDED}" ]; then + w_ahk_do " + SetWinDelay 500 + SetTitleMatchMode, 2 + Run ${file1} + WinWait, Installer Language, Please select + Sleep 500 + ControlClick, Button1 ; OK + WinWait, Winamp Installer, Welcome to the Winamp installer + Sleep 500 + ControlClick, Button2 ; Next + WinWait, Winamp Installer, License Agreement + Sleep 500 + ControlClick, Button2 ; I Agree + WinWait, Winamp Installer, Choose Install Location + Sleep 500 + ControlClick, Button2 ; Next + WinWait, Winamp Installer, Choose Components + Sleep 500 + ControlClick, Button2 ; Next for Full install + WinWait, Winamp Installer, Choose Start Options + Sleep 500 + ControlClick, Button4 ; uncheck start menu entry + Sleep 500 + ControlClick, Button5 ; uncheck ql icon + Sleep 500 + ControlClick, Button6 ; uncheck deskto icon + Sleep 500 + ControlClick, Button2 ; Install + WinWait, Winamp Installer, Installation Complete + Sleep 500 + ControlClick, Button4 ; uncheck launch when complete + Sleep 500 + ControlClick, Button2 ; Finish + WinWaitClose + " + else + w_try "${WINE}" "${file1}" + fi +} + +#---------------------------------------------------------------- + +w_metadata wme9 apps \ + title="MS Windows Media Encoder 9 (broken in Wine)" \ + publisher="Microsoft" \ + year="2002" \ + media="download" \ + file1="WMEncoder.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Windows Media Components/Encoder/wmenc.exe" + +load_wme9() +{ + w_package_unsupported_win64 + + # See also https://www.microsoft.com/en-us/download/details.aspx?id=17792 + # Formerly at: https://download.microsoft.com/download/8/1/f/81f9402f-efdd-439d-b2a4-089563199d47/WMEncoder.exe + # Mirror list: http://www.filewatcher.com/_/?q=WMEncoder.exe + # 2018-06-11: https://people.ok.ubc.ca/mberger/MiscSW/WMEncoder.exe + # 2022-03-31: http://galinet13.free.fr/codec/WMEncoder.exe + w_download http://galinet13.free.fr/codec/WMEncoder.exe 19d1610d12b51c969f64703c4d3a76aae30dee526bae715381b5f3369f717d76 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" WMEncoder.exe ${W_OPT_UNATTENDED:+/q} +} + +#---------------------------------------------------------------- + +# helper - not useful by itself +load_wm9codecs() +{ + # Note: must install WMP9 or 10 first, or installer will complain and abort. + + # The Microsoft page says that is supports XP, but in both 32/64 prefixes, it gives a message box saying it requires win98/winme/win2k + w_package_unsupported_win64 + + # See https://www.microsoft.com/en-us/download/details.aspx?id=507 + # Used by direct calls from load_wmp9, so we have to specify cache directory. + # http://birds.camden.rutgers.edu/ + w_download_to wm9codecs http://birds.camden.rutgers.edu/WM9Codecs9x.exe f25adf6529745a772c4fdd955505e7fcdc598b8a031bb0ce7e5856da5e5fcc95 + w_try_cd "${W_CACHE}/wm9codecs" + w_set_winver win2k + w_try "${WINE}" WM9Codecs9x.exe ${W_OPT_UNATTENDED:+/q} +} + +w_metadata wmp9 dlls \ + title="Windows Media Player 9" \ + publisher="Microsoft" \ + year="2003" \ + media="download" \ + file1="MPSetup.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}"/l3codeca.acm + +load_wmp9() +{ + w_skip_windows wmp9 && return + + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=52772" 6.6 + + # Not really expected to work well yet; see + # https://appdb.winehq.org/appview.php?versionId=1449 + + # This version of Windows Media Player can be installed only on Windows 98 Second Edition, Windows Millennium Edition, Windows 2000, Windows XP, and Windows .NET Server. + + w_call wsh57 + + w_set_winver winxp + + # See also https://support.microsoft.com/en-us/help/18612/windows-media-player + w_download https://web.archive.org/web/20180404022333if_/download.microsoft.com/download/1/b/c/1bc0b1a3-c839-4b36-8f3c-19847ba09299/MPSetup.exe 678c102847c18a92abf13c3fae404c3473a0770c871a046b45efe623c9938fc0 + + # remove builtin placeholders to allow update + rm -f "${W_SYSTEM32_DLLS}"/wmvcore.dll "${W_SYSTEM32_DLLS}"/wmp.dll + rm -f "${W_PROGRAMS_X86_UNIX}/Windows Media Player/wmplayer.exe" + # need native overrides to allow update and later checks to succeed + w_override_dlls native l3codeca.acm wmp wmplayer.exe wmvcore + + # FIXME: should we override quartz? Builtin crashes when you play + # anything, but maybe that's bug 30557 and only affects new systems? + # Wine's pidgen is too stubby, crashes, see Wine bug 31111 + w_override_app_dlls MPSetup.exe native pidgen + + w_try_cd "${W_CACHE}"/"${W_PACKAGE}" + if [ "${W_ARCH}" = "win64" ]; then + w_try cabextract -d "${W_TMP}" ./MPSetup.exe + w_try_cd "${W_TMP}" + w_try sed -i 's/IsWow64Process/IsNow64Process/' setup_wm.exe + w_try "${WINE}" setup_wm.exe ${W_OPT_UNATTENDED:+/Quiet} + w_warn "wm9codecs is not supported in win64 prefixes. If you need those codecs, reinstall wmp9 in a 32-bit prefix." + else + w_try "${WINE}" MPSetup.exe ${W_OPT_UNATTENDED:+/q} + load_wm9codecs + fi + + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata wmp10 dlls \ + title="Windows Media Player 10" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="MP10Setup.exe" \ + installed_file1="${W_SYSTEM32_DLLS_WIN}/l3codecp.acm" + +load_wmp10() +{ + w_package_unsupported_win64 + + # FIXME: what versions of Windows are really bundled with wmp10? + w_skip_windows wmp10 && return + + # See https://appdb.winehq.org/appview.php?iVersionId=3212 + w_call wsh57 + + # https://www.microsoft.com/en-us/download/details.aspx?id=20426 + w_download https://web.archive.org/web/20200803205216/https://download.microsoft.com/download/1/2/a/12a31f29-2fa9-4f50-b95d-e45ef7013f87/MP10Setup.exe c1e71784c530035916aad5b09fa002abfbb7569b75208dd79351f29c6d197e03 + + w_set_winver winxp + + # remove builtin placeholders to allow update + rm -f "${W_SYSTEM32_DLLS}"/wmvcore.dll "${W_SYSTEM32_DLLS}"/wmp.dll + rm -f "${W_PROGRAMS_X86_UNIX}/Windows Media Player/wmplayer.exe" + # need native overrides to allow update and later checks to succeed + w_override_dlls native l3codeca.acm wmp wmplayer.exe wmvcore + + # Crashes on exit, but otherwise ok; see https://bugs.winehq.org/show_bug.cgi?id=12633 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try cabextract -d "${W_TMP}" ./MP10Setup.exe + w_try_cd "${W_TMP}" + "${WINE}" setup_wm.exe ${W_OPT_UNATTENDED:+/Quiet} + + # Disable WMP's services, since they depend on unimplemented stuff, they trigger the GUI debugger several times + w_try_regedit /D "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\Cdr4_2K" + w_try_regedit /D "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\Cdralw2k" + + load_wm9codecs + + w_set_winver 'default' +} + +#---------------------------------------------------------------- + +w_metadata wmp11 dlls \ + title="Windows Media Player 11" \ + publisher="Microsoft" \ + year="2007" \ + media="download" \ + file1="wmp11-windowsxp-x86-enu.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Windows Media Player/wmplayer.exe" + +load_wmp11() +{ + # See https://appdb.winehq.org/objectManager.php?sClass=version&iId=32057 + w_call wsh57 + w_call gdiplus + + if [ "${W_ARCH}" = "win32" ]; then + # https://appdb.winehq.org/objectManager.php?sClass=version&iId=8150 + w_download https://web.archive.org/web/20170628063001/http://download.microsoft.com/download/0/9/5/0953e553-3bb6-44b1-8973-106f1b7e5049/wmp11-windowsxp-x86-enu.exe ffd321a441a67001a893f3bde4bb1afba07d4d2c9659bfdb0fbb057e7945d970 + installer_exe=wmp11-windowsxp-x86-enu.exe + wmf_exe=wmfdist11.exe + wmf_exe=wmp11.exe + elif [ "${W_ARCH}" = "win64" ]; then + # https://appdb.winehq.org/objectManager.php?sClass=version&iId=32057 + w_download https://web.archive.org/web/20190512112704/https://download.microsoft.com/download/3/0/8/3080C52C-2517-43DE-BDB4-B7EAFD88F084/wmp11-windowsxp-x64-enu.exe 5af407cf336849aff435044ec28f066dd523bbdc22d1ce7aaddb5263084f5526 + installer_exe=wmp11-windowsxp-x64-enu.exe + wmf_exe=wmfdist11-64.exe + wmp_exe=wmp11-64.exe + fi + + w_set_winver winxp + + # remove builtin placeholders to allow update + w_try rm -f "${W_PROGRAMS_UNIX}/Windows Media Player/wmplayer.exe" \ + "${W_SYSTEM32_DLLS}"/wmp.dll "${W_SYSTEM32_DLLS}"/wmvcore.dll "${W_SYSTEM32_DLLS}"/mfplat.dll "${W_SYSTEM32_DLLS}"/wmasf.dll \ + "${W_SYSTEM32_DLLS}"/wmpnssci.dll \ + "${W_SYSTEM64_DLLS}"/wmp.dll "${W_SYSTEM64_DLLS}"/wmvcore.dll "${W_SYSTEM64_DLLS}"/mfplat.dll "${W_SYSTEM64_DLLS}"/wmasf.dll \ + "${W_SYSTEM64_DLLS}"/wmpnssci.dll + + # need native overrides to allow update and later checks to succeed + w_override_dlls native l3codeca.acm mfplat wmasf wmp wmplayer.exe wmpnssci wmvcore + + w_try_cd "${W_TMP}" + + # https://bugs.winehq.org/show_bug.cgi?id=10219#c1 + w_try_cabextract "${W_CACHE}/${W_PACKAGE}/${installer_exe}" + "${WINE}" "${wmf_exe}" /quiet + "${WINE}" "${wmp_exe}" /quiet + + # Disable WMP's services, since they depend on unimplemented stuff, they trigger the GUI debugger several times + w_try_regedit /D "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\Cdr4_2K" + w_try_regedit /D "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\Cdralw2k" + + w_set_winver 'default' +} + +#---------------------------------------------------------------- +# Benchmarks +#---------------------------------------------------------------- + +w_metadata 3dmark2000 benchmarks \ + title="3DMark2000" \ + publisher="MadOnion.com" \ + year="2000" \ + media="download" \ + file1="3dmark2000_v11_100308.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/MadOnion.com/3DMark2000/3DMark2000.exe" + +load_3dmark2000() +{ + # https://www.futuremark.com/download/3dmark2000/ + if ! test -f "${W_CACHE}/${W_PACKAGE}/3dmark2000_v11_100308.exe"; then + w_download http://www.ocinside.de/download/3dmark2000_v11_100308.exe 1b392776fd377de8cc6db7c1d8b1565485e20816d1b053de3f16a743e629048d + fi + + w_try_unzip "${W_TMP}/${W_PACKAGE}" "${W_CACHE}/${W_PACKAGE}"/3dmark2000_v11_100308.exe + w_try_cd "${W_TMP}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run Setup.exe + WinWait Welcome + ;ControlClick Button1 ; Next + Sleep 1000 + Send {Enter} ; Next + WinWait License + ;ControlClick Button2 ; Yes + Sleep 1000 + Send {Enter} ; Yes + ;WinWaitClose ahk_class #32770 ; License + WinWait ahk_class #32770, Destination + ;ControlClick Button1 ; Next + Sleep 1000 + Send {Enter} ; Next + ;WinWaitClose ahk_class #32770 ; Destination + WinWait, Start + ;ControlClick Button1 ; Next + Sleep 1000 + Send {Enter} ; Next + WinWait Registration + ControlClick Button1 ; Next + WinWait Complete + Sleep 1000 + ControlClick Button1 ; Unclick View Readme + ;ControlClick Button4 ; Finish + Send {Enter} ; Finish + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata 3dmark2001 benchmarks \ + title="3DMark2001" \ + publisher="MadOnion.com" \ + year="2001" \ + media="download" \ + file1="3dmark2001se_330_100308.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/MadOnion.com/3DMark2001 SE/3DMark2001SE.exe" + +load_3dmark2001() +{ + # https://www.futuremark.com/download/3dmark2001/ + if ! test -f "${W_CACHE}/${W_PACKAGE}"/3dmark2001se_330_100308.exe; then + w_download http://www.ocinside.de/download/3dmark2001se_330_100308.exe e34dfd32ef8fe8018a6f41f33fc3ab6dba45f2e90881688ac75a18b97dcd8813 + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run 3dmark2001se_330_100308.exe + WinWait ahk_class #32770 ; welcome + if ( w_opt_unattended > 0 ) { + ControlClick Button2 ; Next + sleep 5000 + WinWait ahk_class #32770 ; License + ControlClick Button2 ; Next + WinWait ahk_class #32770, Destination + ControlClick Button1 ; Next + WinWait ahk_class #32770, Start + ControlClick Button1 ; Next + WinWait,, Registration + ControlClick Button2 ; Next + } + WinWait,, Complete + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; Unclick View Readme + ControlClick Button4 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata 3dmark03 benchmarks \ + title="3D Mark 03" \ + publisher="Futuremark" \ + year="2003" \ + media="manual_download" \ + file1="3DMark03_v360_1901.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Futuremark/3DMark03/3DMark03.exe" + +load_3dmark03() +{ + # https://www.futuremark.com/benchmarks/3dmark03/download/ + if ! test -f "${W_CACHE}/${W_PACKAGE}/3DMark03_v360_1901.exe"; then + w_download_manual https://www.futuremark.com/download/3dmark03/ 3DMark03_v360_1901.exe 86d7f73747944c553e47e6ab5a74138e8bbca07fab8216ae70a61ac7f9a1c468 + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_warn "Don't use mouse while this installer is running. Sorry..." + # This old installer doesn't seem to be scriptable the usual way, so spray and pray. + w_ahk_do " + SetTitleMatchMode, 2 + run 3DMark03_v360_1901.exe + WinWait 3DMark03 - InstallShield Wizard, Welcome + if ( w_opt_unattended > 0 ) { + WinActivate + Send {Enter} + Sleep 2000 + WinWait 3DMark03 - InstallShield Wizard, License + WinActivate + ; Accept license + Send a + Send {Enter} + Sleep 2000 + ; Choose Destination + Send {Enter} + Sleep 2000 + ; Begin install + Send {Enter} + ; Wait for install to finish + WinWait 3DMark03, Registration + ; Purchase later + Send {Tab} + Send {Tab} + Send {Enter} + } + WinWait, 3DMark03 - InstallShield Wizard, Complete + if ( w_opt_unattended > 0 ) { + ; Uncheck readme + Send {Space} + Send {Tab} + Send {Tab} + Send {Enter} + } + WinWaitClose, 3DMark03 - InstallShield Wizard, Complete + " +} + +#---------------------------------------------------------------- + +w_metadata 3dmark05 benchmarks \ + title="3D Mark 05" \ + publisher="Futuremark" \ + year="2005" \ + media="download" \ + file1="3dmark05_v130_1901.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Futuremark/3DMark05/3DMark05.exe" + +load_3dmark05() +{ + # https://www.futuremark.com/download/3dmark05/ + if ! test -f "${W_CACHE}/${W_PACKAGE}/3DMark05_v130_1901.exe"; then + w_download http://www.ocinside.de/download/3dmark05_v130_1901.exe af97f20665090985ee8a4ba83d137e796bfe12e0dfb7fe285712fae198b34334 + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + run 3DMark05_v130_1901.exe + WinWait ahk_class #32770, Welcome + if ( w_opt_unattended > 0 ) { + Send {Enter} + WinWait, ahk_class #32770, License + ControlClick Button1 ; Accept + ControlClick Button4 ; Next + WinWait, ahk_class #32770, Destination + ControlClick Button1 ; Next + WinWait, ahk_class #32770, Install + ControlClick Button1 ; Install + WinWait, ahk_class #32770, Purchase + ControlClick Button4 ; Later + } + WinWait, ahk_class #32770, Complete + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; Uncheck view readme + ControlClick Button3 ; Finish + } + WinWaitClose, ahk_class #32770, Complete + " + if w_workaround_wine_bug 22392; then + w_warn "You must run the app with the -nosysteminfo option to avoid a crash on startup" + fi +} + +#---------------------------------------------------------------- + +w_metadata 3dmark06 benchmarks \ + title="3D Mark 06" \ + publisher="Futuremark" \ + year="2006" \ + media="manual_download" \ + file1="3DMark06_v121_installer.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Futuremark/3DMark06/3DMark06.exe" + +load_3dmark06() +{ + w_download_manual https://www.futuremark.com/support/downloads 3DMark06_v121_installer.exe 362ebafd2b9c89a59a233e4328596438b74a32827feb65fe2837154c60a37da3 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + run ${file1} + WinWait ahk_class #32770, Welcome + if ( w_opt_unattended > 0 ) { + Send {Enter} + WinWait, ahk_class #32770, License + ControlClick Button1 ; Accept + ControlClick Button4 ; Next + WinWait, ahk_class #32770, Destination + ControlClick Button1 ; Next + WinWait, ahk_class #32770, Install + ControlClick Button1 ; Install + WinWait ahk_class OpenAL Installer + ControlClick Button2 ; OK + WinWait ahk_class #32770 + ControlClick Button1 ; OK + } + WinWait, ahk_class #32770, Complete + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; Uncheck view readme + ControlClick Button3 ; Finish + } + WinWaitClose, ahk_class #32770, Complete + " + + if w_workaround_wine_bug 24417 "Installing shader compiler..."; then + # "Demo" button doesn't work without this. d3dcompiler_43 related. + w_call d3dx9_28 + w_call d3dx9_36 + fi + + if w_workaround_wine_bug 22392; then + w_warn "You must run the app with the -nosysteminfo option to avoid a crash on startup" + fi +} + +#---------------------------------------------------------------- + +w_metadata stalker_pripyat_bench benchmarks \ + title="S.T.A.L.K.E.R.: Call of Pripyat benchmark" \ + publisher="GSC Game World" \ + year="2009" \ + media="manual_download" \ + file1="stkcop-bench-setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Call Of Pripyat Benchmark/Benchmark.exe" + +load_stalker_pripyat_bench() +{ + # Much faster + w_download_manual http://www.bigdownload.com/games/stalker-call-of-pripyat/pc/stalker-call-of-pripyat-benchmark stkcop-bench-setup.exe 8c810fba1bbb9c58fc01f4f602479886680c9f4b491dd0afe935e27083f54845 + #w_download https://files.gsc-game.com/st/bench/stkcop-bench-setup.exe 8c810fba1bbb9c58fc01f4f602479886680c9f4b491dd0afe935e27083f54845 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + # FIXME: a bit fragile, if you're browsing the web while installing, it sometimes gets stuck. + w_ahk_do " + SetTitleMatchMode, 2 + run ${file1} + WinWait,Setup - Call Of Pripyat Benchmark + if ( w_opt_unattended > 0 ) { + sleep 1000 + ControlClick TNewButton1 ; Next + WinWait,Setup - Call Of Pripyat Benchmark,License + sleep 1000 + ControlClick TNewRadioButton1 ; accept + sleep 1000 + ControlClick TNewButton2 ; Next + WinWait,Setup - Call Of Pripyat Benchmark,Destination + sleep 1000 + ControlClick TNewButton3 ; Next + WinWait,Setup - Call Of Pripyat Benchmark,shortcuts + sleep 1000 + ControlClick TNewButton4 ; Next + WinWait,Setup - Call Of Pripyat Benchmark,performed + sleep 1000 + ControlClick TNewButton4 ; Next + WinWait,Setup - Call Of Pripyat Benchmark,ready + sleep 1000 + ControlClick, TNewButton4 ; Next (nah, who reads doc?) + } + WinWait,Setup - Call Of Pripyat Benchmark,finished + if ( w_opt_unattended > 0 ) { + sleep 1000 + Send {Space} ; uncheck launch + sleep 1000 + ControlClick TNewButton4 ; Finish + } + WinWaitClose,Setup - Call Of Pripyat Benchmark,finished + " + + if w_workaround_wine_bug 24868; then + w_call d3dx9_31 + w_call d3dx9_42 + fi +} + +#---------------------------------------------------------------- + +w_metadata unigine_heaven benchmarks \ + title="Unigen Heaven 2.1 Benchmark" \ + publisher="Unigen" \ + year="2010" \ + media="manual_download" \ + file1="Unigine_Heaven-2.1.msi" + +load_unigine_heaven() +{ + w_download_manual "https://www.fileplanet.com/212489/210000/fileinfo/Unigine-'Heaven'-Benchmark-2.1-%28Windows%29" 47113b285253a1ebce04527a31d734c0dfce5724e8d2643c6c1b822a940e7073 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run msiexec /i ${file1} + if ( w_opt_unattended > 0 ) { + WinWait ahk_class MsiDialogCloseClass + Send {Enter} + WinWait ahk_class MsiDialogCloseClass, License + ControlClick Button1 ; Accept + ControlClick Button3 ; Accept + WinWait ahk_class MsiDialogCloseClass, Choose + ControlClick Button1 ; Typical + WinWait ahk_class MsiDialogCloseClass, Ready + ControlClick Button2 ; Install + ; FIXME: on systems with OpenAL already (Win7?), the next four lines + ; are not needed. We should somehow wait for either OpenAL window + ; *or* Completed window. + WinWait ahk_class OpenAL Installer + ControlClick Button2 ; OK + WinWait ahk_class #32770 + ControlClick Button1 ; OK + } + WinWait ahk_class MsiDialogCloseClass, Completed + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; Finish + Send {Enter} + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata wglgears benchmarks \ + title="wglgears" \ + publisher="Clinton L. Jeffery" \ + year="2005" \ + media="download" \ + file1="wglgears.exe" \ + installed_exe1="${W_SYSTEM32_DLLS_WIN}/wglgears.exe" + +load_wglgears() +{ + # Original site http://www2.cs.uidaho.edu/~jeffery/win32/wglgears.exe is 403 as of 2019/04/07 + w_download https://web.archive.org/web/20091001002702/http://www2.cs.uidaho.edu/~jeffery/win32/wglgears.exe 858ba95ea3c9af4ded1f4100e59b6e8e57024f3efef56304dbd48106e8f2f6f7 + cp "${W_CACHE}"/wglgears/wglgears.exe "${W_SYSTEM32_DLLS}" + chmod +x "${W_SYSTEM32_DLLS}/wglgears.exe" +} + +#---------------------------------------------------------------- +# Games +#---------------------------------------------------------------- + +w_metadata algodoo_demo games \ + title="Algodoo Demo" \ + publisher="Algoryx" \ + year="2009" \ + media="download" \ + file1="Algodoo_1_7_1-Win32.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Algodoo/Algodoo.exe" + +load_algodoo_demo() +{ + w_download http://www.algodoo.com/download/Algodoo_1_7_1-Win32.exe 99d3704ac35028fbc74fdf7c59df3f6caf636009bba19bcddf4f7e7797c14d71 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + ; This one's funny... on Wine, keyboard works once you click manually, but until then, only ControlClick seems to work. + run, Algodoo_1_7_1-Win32.exe + SetTitleMatchMode, 2 + winwait, Algodoo, Welcome + if ( w_opt_unattended > 0 ) { + ControlClick, TNewButton1 + winwait, Algodoo, License + ;send {Tab}a{Space}{Enter} + ControlClick, TNewRadioButton1 ; Accept + ControlClick, TNewButton2 ; Next + winwait, Algodoo, Destination + ;send {Enter} + ControlClick, TNewButton3 ; Next + winwait, Algodoo, Folder + ;send {Enter} + ControlClick, TNewButton4 ; Next + winwait, Algodoo, Select Additional Tasks + ;send {Enter} + ControlClick, TNewButton4 ; Next + winwait, Algodoo, Ready to Install + ;send {Enter} + ControlClick, TNewButton4 ; Next + } + winwait, Algodoo, Completing + if ( w_opt_unattended > 0 ) { + sleep 500 + send {Space}{Tab}{Space}{Tab}{Space}{Enter} ; decline to run app or view tutorials + } + WinWaitClose, Algodoo, Completing + " +} + +#---------------------------------------------------------------- + +w_metadata amnesia_tdd_demo games \ + title="Amnesia: The Dark Descent Demo" \ + publisher="Frictional Games" \ + year="2010" \ + media="manual_download" \ + file1="amnesia_tdd_demo_1.0.1.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Amnesia - The Dark Descent Demo/redist/Amnesia.exe" + +load_amnesia_tdd_demo() +{ + w_download_manual https://download.cnet.com/Amnesia-The-Dark-Descent-Demo/3000-2097_4-75312743.html amnesia_tdd_demo_1.0.1.exe ee4c07b40bfa59b506d2cee258c5c7a16028e11fc3a2bd243258c6bec8532dbc + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetTitleMatchMode, 2 + Run, amnesia_tdd_demo_1.0.1.exe + if ( w_opt_unattended > 0 ) { + WinWait,Select Setup Language, language + ControlClick, TNewButton1 + WinWait, Amnesia - The Dark Descent Demo, Welcome + ControlClick, TNewButton1 + WinWait, Amnesia - The Dark Descent Demo, License + ControlClick, TNewRadioButton1 + ControlClick, TNewButton2 + WinWait, Amnesia - The Dark Descent Demo, installed? + ControlClick, TNewButton3 + WinWait, Folder Does Not Exist, created + ControlClick, Button1 + WinWait, Amnesia - The Dark Descent Demo, shortcuts + ControlClick, TNewButton4 + WinWait, Amnesia - The Dark Descent Demo, additional tasks + ControlClick, TNewButton4 + WinWait, Amnesia - The Dark Descent Demo, ready to begin installing + ControlClick, TNewButton4 + WinWait, Amnesia - The Dark Descent Demo, finished + ControlClick, TNewButton4 + WinWaitClose, Amnesia - The Dark Descent Demo, finished + } + " +} + +#---------------------------------------------------------------- + +w_metadata aoe3_demo games \ + title="Age of Empires III Trial" \ + publisher="Microsoft" \ + year="2005" \ + media="download" \ + file1="aoe3trial.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Games/Age of Empires III Trial/age3.exe" + +load_aoe3_demo() +{ + + w_download https://http.download.nvidia.com/downloads/nZone/demos/aoe3trial.exe 4ef69289dfa0817ec14942d85ef597835a9d2b09e1506c60b9938b20daa274ad + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetTitleMatchMode, 2 + run aoe3trial.exe + WinWait,Empires,Welcome + if ( w_opt_unattended > 0 ) { + sleep 1000 + winactivate ; else next button click ignored on vista? + Sleep 500 + ControlClick Button1 ; Next + WinWait,Empires,Please + Sleep 500 + ControlClick Button4 ; Next + WinWait,Empires,Complete + Sleep 500 + ControlClick Button4 ; Finish + } + WinWaitClose + " + + if w_workaround_wine_bug 24912 "Killing off lingering installer" ,4.19; then + # kill off lingering installer + w_ahk_do " + SetTitleMatchMode, 2 + WinKill,Empires + " + # or should we just do w_wineserver -k, like fable_tlc does? + # shellcheck disable=SC2046 + kill $(pgrep -f IDriver) + fi +} + +#---------------------------------------------------------------- + +w_metadata acreedbro games \ + title="Assassin's Creed Brotherhood" \ + publisher="Ubisoft" \ + year="2011" \ + media="dvd" \ + file1="ACB.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Ubisoft/Assassin's Creed Brotherhood/AssassinsCreedBrotherhood.exe" + +load_acreedbro() +{ + w_mount ACB + w_read_key + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run ${W_ISO_MOUNT_LETTER}:setup.exe + winwait, Brotherhood, Choose + if ( w_opt_unattended > 0 ) { + WinActivate + send {Enter} + ;ControlClick, Button3 ; Accept default (english) + winwait, Brotherhood, Welcome + WinActivate + send {Enter} ; Next + winwait, Brotherhood, License + WinActivate + send a ; Agree + sleep 500 + send {Enter} ; Next + winwait, Brotherhood, begin + send {Enter} ; Install + } + winwait, Brotherhood, Finish + if ( w_opt_unattended > 0 ) { + ControlClick Button4 + send {Enter} ; Finish + } + WinWaitClose + " + + w_download https://static3.cdn.ubi.com/ac_brotherhood/ac_brotherhood_1.01_ww.exe a8027b08840a7438a0bd1a1c17f962fcc386a2cb9fd1d3055de2486bf95778c2 + + # FIXME: figure out why these executables don't exit, and do a proper workaround or fix + sleep 10 + # shellcheck disable=SC2009 + if ps augxw | grep -i exe | grep -E 'winemenubuilder.exe|setup.exe|PnkBstrA.exe | grep -v grep'; then + w_warn "Killing processes so patcher does not complain about game still running" + w_wineserver -k + sleep 10 + fi + + w_info "Applying patch ${W_CACHE}/${W_PACKAGE}/ac_brotherhood_1.01_ww.exe..." + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run ac_brotherhood_1.01_ww.exe + WinWait, Choose Setup Language, Select + if ( w_opt_unattended > 0 ) { + send {Enter} + winwait, Brotherhood 1.01, License + WinActivate + send a ; Agree + sleep 500 + send {Enter} ; Next + winwait, Brotherhood 1.01, Details + ControlClick Button1 ; Next + } + winwait, Brotherhood 1.01, Complete + if ( w_opt_unattended > 0 ) { + send {Enter} + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata avatar_demo games \ + title="James Camerons Avatar: The Game Demo" \ + publisher="Ubisoft" \ + year="2009" \ + media="manual_download" \ + file1="Avatar_The_Game_Demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Ubisoft/Demo/James Cameron's AVATAR - THE GAME (Demo)/bin/AvatarDemo.exe" + +load_avatar_demo() +{ + w_download_manual https://www.fileplanet.com/207386/200000/fileinfo/Avatar:-The-Game-Demo Avatar_The_Game_Demo.exe aec9cf718f9584edc23044ff94996d4e7309654d50fcea91cba4282576a1e9c8 + + if w_workaround_wine_bug 23094 "Installing Visual C++ 2005 runtime to avoid installer crash"; then + w_call vcrun2005 + fi + + w_try_cd "${W_TMP}" + w_try_unrar "${W_CACHE}/${W_PACKAGE}/Avatar_The_Game_Demo.exe" + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + run, setup.exe + winwait, Language + u = ${W_OPT_UNATTENDED} + if ( u > 0 ) { + WinActivate + controlclick, Button1 + winwait, AVATAR, Welcome + controlclick, Button1 + winwait, AVATAR, License + controlclick, Button5 + controlclick, Button2 + winwait, AVATAR, setup type + controlclick, Button2 + } + winwait AVATAR + if ( u > 0 ) { + ; Strange CRC error workaround. Will check this out. Stay tuned. + loop + { + ifwinexist, CRC Error + { + winactivate, CRC Error + controlclick, Button3, CRC Error ; ignore + } + ifwinexist, AVATAR, Complete + { + controlclick, Button4 + break + } + sleep 1000 + } + } + winwaitclose AVATAR + " +} + +#---------------------------------------------------------------- + +w_metadata bttf101 games \ + title="Back to the Future Episode 1" \ + publisher="Telltale" \ + year="2011" \ + media="manual_download" \ + file1="bttf_101_setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Telltale Games/Back to the Future The Game/Episode 1/BackToTheFuture101.exe" + +load_bttf101() +{ + w_download_manual "https://www.fileplanet.com/220151/220000/fileinfo/Back-to-the-Future:-The-Game---Episode-1-Client-%28Free-Game%29" bttf_101_setup.exe 8ad05063c5dae096697665ac36578f885937829ec7dac6a3a3644c76820e999c + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run, bttf_101_setup.exe + winwait, Back to the Future, Welcome + if ( w_opt_unattended > 0 ) { + ControlClick, Button2 ; Next + winwait, Back to the Future, Checking DirectX + ControlClick, Button5 ; Don't check + ControlClick, Button2 ; Next + winwait, Back to the Future, License + ControlClick, Button2 ; Agree + winwait, Back to the Future, Location + ControlClick, Button2 ; Install + } + winwait, Back to the Future, has been installed + if ( w_opt_unattended > 0 ) { + ControlClick Button4 ; Don't start now + ControlClick Button2 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata bioshock_demo games \ + title="Bioshock Demo" \ + publisher="2K Games" \ + year="2007" \ + media="download" \ + file1="nzd_BioShockPC.zip" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/2K Games/BioShock Demo/Builds/Release/Bioshock.exe" + +load_bioshock_demo() +{ + w_download https://us.download.nvidia.com/downloads/nZone/demos/nzd_BioShockPC.zip 36f73251c0c1c6f4b6a83af9b6e44c642b4fce127c2c28cb6d2b25bc95baa934 + + w_info "Unzipping demo, installer will start in about 30 seconds." + w_try unzip "${W_CACHE}/${W_PACKAGE}/nzd_BioShockPC.zip" -d "${W_TMP}/${W_PACKAGE}" + w_try_cd "${W_TMP}/${W_PACKAGE}/BioShock PC Demo" + + w_ahk_do " + SetTitleMatchMode, 2 + run setup.exe + winwait, BioShock Demo - InstallShield Wizard, Choose Setup Language + if ( w_opt_unattended > 0 ) { + sleep 2000 + ControlClick, Button3 + ControlClick, Button3 + winwait, BioShock Demo - InstallShield Wizard, Welcome + sleep 1000 + ControlClick, Button1 + winwait, BioShock Demo - InstallShield Wizard, Please read + sleep 1000 + ControlClick, Button5 + sleep 1000 + ControlClick, Button2 + winwait, BioShock Demo - InstallShield Wizard, Select the setup type + sleep 1000 + ControlClick, Button2 + winwait, BioShock Demo - InstallShield Wizard, Click Install to begin + ControlClick, Button1 + } + winwait, BioShock Demo - InstallShield Wizard, The InstallShield Wizard has successfully installed BioShock + if ( w_opt_unattended > 0 ) { + sleep 1000 + ControlClick, Button2 ; don't launch + ControlClick, Button6 ; don't show readme + send {Enter} ; finish + } + winwaitclose + sleep 3000 ; wait for splash screen to close + " +} + +#---------------------------------------------------------------- + +w_metadata bioshock2 games \ + title="Bioshock 2" \ + publisher="2K Games" \ + year="2010" \ + media="dvd" \ + file1="BIOSHOCK_2.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/2K Games/BioShock 2/SP/Builds/Binaries/Bioshock2Launcher.exe" \ + installed_exe2="${W_PROGRAMS_X86_WIN}/2K Games/BioShock 2/MP/Builds/Binaries/Bioshock2Launcher.exe" + +load_bioshock2() +{ + w_mount BIOSHOCK_2 + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run ${W_ISO_MOUNT_LETTER}:setup.exe + if ( w_opt_unattended > 0 ) { + winwait BioShock 2, Language + controlclick Button3 + winwait BioShock 2, Welcome + controlclick Button1 ; Accept + winwait BioShock 2, License + controlclick Button3 ; Accept + sleep 500 + controlclick Button1 ; Next + winwait BioShock 2, Setup Type + controlclick Button4 ; Next + winwait BioShock 2, Ready to Install + controlclick Button1 ; Install + } + winwait BioShock 2, Complete + if ( w_opt_unattended > 0 ) { + controlclick Button4 ; Finish + } + " +} + +#---------------------------------------------------------------- + +w_metadata bfbc2 games \ + title="Battlefield Bad Company 2" \ + publisher="EA" \ + year="2010" \ + media="dvd" \ + file1="BFBC2.iso" + +load_bfbc2() +{ + # Title of installer Window gets the TM symbol wrong, even in UTF-8 locales. + # Is it like that in Windows, too? + w_mount BFBC2 + w_read_key + w_ahk_do " + SetTitleMatchMode, 2 + run ${W_ISO_MOUNT_LETTER}:setup.exe + winwait, Bad Company, English + sleep 500 + ControlClick, Next, Bad Company + winwait, Bad Company, Registration Code + sleep 500 + send {RAW}${W_KEY} + ControlClick, Next, Bad Company, Registration Code + winwait, Bad Company, Setup Wizard will install + sleep 500 + ControlClick, Button1, Bad Company, Setup Wizard + winwait, Bad Company, License Agreement + sleep 500 + ControlClick, Button1, Bad Company, License Agreement + ControlClick, Button3, Bad Company, License Agreement + winwait, Bad Company, End-User License Agreement + sleep 500 + ControlClick, Button1, Bad Company, License Agreement + ControlClick, Button3, Bad Company, License Agreement + winwait, Bad Company, Destination Folder + sleep 500 + ControlClick, Button1, Bad Company, Destination Folder + winwait, Bad Company, Ready to install + sleep 500 + ControlClick, Install, Bad Company, Ready to install + winwait, Authenticate Battlefield + sleep 500 + ControlClick, Disc authentication, Authenticate Battlefield + ControlClick, Button4, Authenticate Battlefield + winwait, Bad Company, PunkBuster + sleep 500 + ControlClick, Button4, Bad Company, PunkBuster + ControlClick, Finish, Bad Company + winwaitclose + " + + w_warn "Patching to latest version..." + + w_try_cd "${W_PROGRAMS_X86_UNIX}/Electronic Arts/Battlefield Bad Company 2" + w_ahk_do " + SetTitleMatchMode, 2 + run, BFBC2Updater.exe + winwait, Updater, have to update to + sleep 500 + ControlClick, Yes, Updater, have to update + winwait, Updater, successfully updated + sleep 500 + ControlClick,No, Updater, successfully updated ; Button2 + " + + if w_workaround_wine_bug 22961; then + # shellcheck disable=SC2016 + w_warn 'If the game says "No CD/DVD error", try "sudo mount -o remount,unhide,uid=$(uid -u)". See https://bugs.winehq.org/show_bug.cgi?id=22961 for more info.' + fi +} + +#---------------------------------------------------------------- + +w_metadata cnc3_demo games \ + title="Command & Conquer 3 Demo" \ + publisher="EA" \ + year="2007" \ + media="download" \ + file1="CnC3Demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/Command & Conquer 3 Tiberium Wars Demo/CNC3Demo.exe" + +load_cnc3_demo() +{ + w_download "https://files.cncnz.com/cc3_tiberium_wars/demo/CnC3Demo.exe" 1e2499f441ef1fc3cbe447ac16361ad4247a02b9b8ec05f504161e7b5b1254e5 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run, CnC3Demo.exe + winwait, Conquer 3, free space to install + if ( w_opt_unattended > 0 ) { + controlclick, button1 + winwait, WinZip, After installation + controlclick, button1 + winwait, Conquer 3, InstallShield + controlclick, button1 + winwait, Conquer 3, license + controlclick, button3 + controlclick, button5 + winwait, Conquer 3, setup type + controlclick, button5 + winwait, Conquer 3, EA Link + controlclick, button1 + winwait, Conquer 3, GameSpy + controlclick, button1 + } + winwait, Conquer 3, Launch the program + if ( w_opt_unattended > 0 ) + controlclick, button1 + + winwaitclose, Conquer 3, Launch the program + " +} + +#---------------------------------------------------------------- + +w_metadata cnc_redalert3_demo games \ + title="Command & Conquer Red Alert 3 Demo" \ + publisher="EA" \ + year="2008" \ + media="manual_download" \ + file1="RedAlert3Demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/Red Alert 3 Demo/RA3Demo.exe" + +load_cnc_redalert3_demo() +{ + w_download_manual 'https://www.fileplanet.com/194888/190000/fileinfo/Command-&-Conquer:-Red-Alert-3-Demo' RedAlert3Demo.exe 9c2fb15076830f0e11d89be1847f4777262d8e6ee3d51ae765535f812a8a8cb2 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if test ! "${W_OPT_UNATTENDED}"; then + w_try "${WINE}" "${file1}" + else + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run ${file1} + winwait, Demo, readme + send {enter} ; Install button + winwait, Demo, Agreement + ControlFocus, TNewCheckListBox1, accept + send {space} ; accept license + sleep 1000 + send N ; Next + winwait, Demo, Agreement ; DirectX + ControlFocus, TNewCheckListBox1, accept + send {space} ; accept license + sleep 1000 + send N ; Next + winwait, Demo, Next + send N ; Next + winwait, Demo, Install + send {enter} ; Really install + winwait, Demo, Finish + send F ; finish + WinWaitClose + " + fi +} + +#---------------------------------------------------------------- + +# https://appdb.winehq.org/objectManager.php?sClass=version&iId=9320 + +w_metadata blobby_volley games \ + title="Blobby Volley" \ + publisher="Daniel Skoraszewsky" \ + year="2000" \ + media="manual_download" \ + file1="blobby.zip" \ + installed_exe1="c:/BlobbyVolley/volley.exe" + +load_blobby_volley() +{ + w_download_manual https://www.chip.de/downloads/Blobby-Volley_12990993.html blobby.zip ef7d2e61fabe5ac6a556fa7c254edc667df5a6659ea262ee2bc97ed61abc3f64 + w_try_unzip "${W_DRIVE_C}/BlobbyVolley" "${W_CACHE}/${W_PACKAGE}"/blobby.zip +} + +#---------------------------------------------------------------- + +w_metadata cim_demo games \ + title="Cities In Motion Demo" \ + publisher="Paradox Interactive" \ + year="2010" \ + media="manual_download" \ + file1="cim-demo-1-0-8.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Cities In Motion Demo/Cities In Motion.exe" + +load_cim_demo() +{ + # 29 Mar 2011 cf02066f496637c24f95cf0c4ddfae376951330802500fb11bd74cc6c8872995, Inno Setup installer + #w_download https://www.pcgamestore.com/games/cities-in-motion-nbsp/trial/cim-demo-1-0-8.exe cf02066f496637c24f95cf0c4ddfae376951330802500fb11bd74cc6c8872995 + w_download_manual https://www.fileplanet.com/218762/210000/fileinfo/Cities-in-Motion-Demo cim-demo-1-0-8.exe cf02066f496637c24f95cf0c4ddfae376951330802500fb11bd74cc6c8872995 + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" cim-demo-1-0-8.exe ${W_OPT_UNATTENDED:+ /sp- /silent /norestart} +} + +#---------------------------------------------------------------- + +w_metadata cod_demo games \ + title="Call of Duty demo" \ + publisher="Activision" \ + year="2003" \ + media="manual_download" \ + file1="call_of_duty_demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Call of Duty Single Player Demo/CoDSP.exe" + +load_cod_demo() +{ + w_download_manual https://www.gamefront.com/files/968870/call_of_duty_demo_exe Call_Of_Duty_Demo.exe a7773f1ddb0c9928f738a2be34614d52bc07ecc42c0fe704ab5a596da5421b08 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run Call_Of_Duty_Demo.exe + WinWait,Call of Duty Single Player Demo,Welcome + if ( w_opt_unattended > 0 ) { + sleep 1000 + ControlClick Button1 ; next + WinWait,Call of Duty Single Player Demo,License + sleep 1000 + WinActivate + send A ; I Agree + WinWait,Call of Duty Single Player Demo,System + sleep 1000 + send n ; Next + WinWait,Call of Duty Single Player Demo,Location + sleep 1000 + send {Enter} + WinWait,Call of Duty Single Player Demo,Select + sleep 1000 + send n + WinWait,Call of Duty Single Player Demo,Start + sleep 1000 + send i ; Install + WinWait,Create Shortcut + sleep 1000 + send n ; No + } + WinWait,Call of Duty Single Player Demo, Complete + if ( w_opt_unattended > 0 ) { + sleep 1000 + send {Enter} ; Finish + } + WinWaitClose + " + + if w_workaround_wine_bug 21558; then + # Work around a buffer overflow - not really Wine's fault + w_warn "If you get a buffer overflow error, set __GL_ExtensionStringVersion=17700 before starting Wine. See https://bugs.winehq.org/show_bug.cgi?id=21558." + fi +} + +#---------------------------------------------------------------- + +w_metadata cod1 games \ + title="Call of Duty" \ + publisher="Activision" \ + year="2003" \ + media="dvd" \ + file1="CoD1.iso" \ + file2="CoD2.iso" + +load_cod1() +{ + # FIXME: port load_harder from winetricks and use it when caching first disc + w_mount CoD1 + + w_read_key + + __GL_ExtensionStringVersion=17700 w_ahk_do " + SetTitleMatchMode, 2 + run ${W_ISO_MOUNT_LETTER}:setup.exe + WinWait, w_try_cd Key, enter + if ( w_opt_unattended > 0 ) { + send {Raw}${W_KEY} + ControlClick Button1 + WinWait, w_try_cd Key, valid + ControlClick Button1 + WinWait, Call of Duty, Welcome + ControlClick Button1 + WinWait, Call of Duty, License + ControlClick Button3 + WinWait, Call of Duty, Minimum + ControlClick Button4 + WinWait, Call of Duty, Location + ControlClick Button1 + WinWait, Call of Duty, Folder + ControlClick Button1 + WinWait, Call of Duty, Start + ControlClick Button1 + } + WinWait, Insert CD, Please insert the Call of Duty cd 2 + " + + "${WINE}" eject ${W_ISO_MOUNT_LETTER}: + w_mount CoD2 + + w_ahk_do " + SetTitleMatchMode, 2 + if ( w_opt_unattended > 0 ) { + Send {Enter} ;continue installation + } + WinWait, Insert CD, Please insert the Call of Duty cd 1 + " + + "${WINE}" eject ${W_ISO_MOUNT_LETTER}: + w_mount CoD1 + + w_ahk_do " + SetTitleMatchMode, 2 + if ( w_opt_unattended > 0 ) { + Send {Enter} ;finalize install + WinWait, Create Shortcut, Desktop + ControlClick Button1 + WinWait, DirectX, Call ;directx 9 + ControlClick Button6 + ControlClick Button1 + WinWait, Confirm DX settings, Are + ControlClick Button2 + } + ; handle crash here + WinWait, Installation Complete, Congratulations! + if ( w_opt_unattended > 0 ) { + ControlClick Button1 + } + WinWaitClose + " + "${WINE}" eject ${W_ISO_MOUNT_LETTER}: + + if w_workaround_wine_bug 21558; then + # Work around a buffer overflow - not really Wine's fault + w_warn "If you get a buffer overflow error, set __GL_ExtensionStringVersion=17700 before starting Wine. See https://bugs.winehq.org/show_bug.cgi?id=21558" + fi + w_warn "This game is copy-protected, and requires the real disc in a real drive to run." +} + +#---------------------------------------------------------------- + +w_metadata cod4mw_demo games \ + title="Call of Duty 4: Modern Warfare" \ + publisher="Activision" \ + year="2007" \ + media="manual_download" \ + file1="CoD4MWDemoSetup_v2.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Activision/Call of Duty 4 - Modern Warfare Demo/iw3sp.exe" + +load_cod4mw_demo() +{ + # 2017/03/28: Also at https://www.fileplanet.com/213663/210000/fileinfo/LEGO-Harry-Potter:-Years-1-4-Demo + w_download_manual https://download.cnet.com/Call-of-Duty-4-Modern-Warfare/3000-7441_4-11277584.html CoD4MWDemoSetup_v2.exe 715710678394e9b0edda5dd3a560c9711557297aa2849c83e5c109db9830fbbb + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run, CoD4MWDemoSetup_v2.exe + WinWait,Modern Warfare,Welcome + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick Button1 ; Next + WinWait,Modern Warfare, License + Sleep 500 + ControlClick Button5 ; accept + Sleep 2000 + ControlClick Button2 ; Next + WinWait,Modern Warfare, System Requirements + Sleep 500 + ControlClick Button1 ; Next + Sleep 500 + ControlClick Button4 ; Next + WinWait,Modern Warfare, Typical + Sleep 500 + ControlClick Button4 ; License + Sleep 500 + ControlClick Button1 ; Next + WinWait,Question, shortcut + Sleep 500 + ControlClick Button1 ; Yes + WinWait,Microsoft DirectX Setup, license + Sleep 500 + ControlClick Button1 ; Yes + WinWait,Modern Warfare, finished + Sleep 500 + ControlClick Button1 ; Finished + } + WinWaitClose,WinZip Self-Extractor - CoD4MWDemoSetup_v2 + " +} + +#---------------------------------------------------------------- + +w_metadata cod5_waw games \ + title="Call of Duty 5: World at War" \ + publisher="Activision" \ + year="2008" \ + media="dvd" \ + file1="5330161c7960f0770e6b05f498ab9fd13be4cfad.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Activision/Call of Duty - World at War/CoDWaW.exe" + +load_cod5_waw() +{ + w_mount CODWAW + + w_read_key + + w_ahk_do " + SetTitleMatchMode, 2 + run, ${W_ISO_MOUNT_LETTER}:setup.exe + winwait, Call of Duty, Key Code + sleep 1000 + Send ${W_KEY} + sleep 1000 + ControlClick, Button1, Call of Duty, Key Code + winwait, Key Code Check + sleep 1000 + controlclick, Button1, Key Code Check + winwait, Call of Duty, License Agreement + sleep 1000 + controlclick, Button5, Call of Duty, License Agreement + sleep 1000 + controlclick, Button2, Call of Duty, License Agreement + ; It wants to install PunkBuster here...OH BOY! Luckily, we can say no (see below) + winwait, PunkBuster, Anti-Cheat software system + sleep 1000 + controlclick, Button1, PunkBuster, Anti-Cheat software system + winwait, Call of Duty, install PunkBuster + sleep 1000 + ; Punkbuster: both are scripted below, so you can toggle which one you want. + ; No: + ; controlclick, Button2, Call of Duty, install PunkBuster + ; Yes: + controlclick, Button1, Call of Duty, install PunkBuster + winwait, PunkBuster, License + sleep 1000 + controlclick, Button5, PunkBuster, License + sleep 1000 + controlclick, Button2, PunkBuster, License + ; /end punkbuster + winwait, Call of Duty, Minimum System + sleep 1000 + controlclick, Button1, Call of Duty, Minimum System + winwait, Call of Duty, Setup Type + sleep 1000 + controlclick, Button1, Call of Duty, Setup Type + ; Exits silently after install + ; Need to wait here else next verb will run before this one is done + winwaitclose, Call of Duty + " + + # FIXME: Install latest updates + w_warn "This game is copy-protected, and requires the real disc in a real drive to run." +} + +#---------------------------------------------------------------- + +w_metadata civ4_demo games \ + title="Civilization IV Demo" \ + publisher="Firaxis Games" \ + year="2005" \ + media="manual_download" \ + file1="Civilization4_Demo.zip" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Firaxis Games/Sid Meier's Civilization 4 Demo/Civilization4.exe" + +load_civ4_demo() +{ + w_download_manual https://download.cnet.com/Civilization-IV-demo/3000-7489_4-10465206.html Civilization4_Demo.zip aaafc7fcbf0fc16c9b28c2422400721a40818b867e9291268877c5d3841122a2 + + w_try_unzip "${W_TMP}" "${W_CACHE}/${W_PACKAGE}"/Civilization4_Demo.zip + w_try_cd "${W_TMP}/${W_PACKAGE}" + chmod +x setup.exe + w_ahk_do " + SetTitleMatchMode, 2 + run, setup.exe + winwait, Choose Setup Language + if ( w_opt_unattended > 0 ) { + sleep 1000 + Send {enter} + winwait, Civilization 4, Welcome + ControlClick &Next >, Civilization 4 + winwait, Civilization 4, I &accept the terms of the license agreement + ControlClick I &accept, Civilization 4 + ControlClick &Next >, Civilization 4 + winwait, Civilization 4, Express Install + ControlClick &Next >, Civilization 4 + winwait, Civilization 4, begin installation + ControlClick &Install, Civilization 4 + winwait, Civilization 4, InstallShield Wizard Complete + ControlClick Finish, Civilization 4 + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata crayonphysics_demo games \ + title="Crayon Physics Deluxe demo" \ + publisher="Kloonigames" \ + year="2011" \ + media="download" \ + file1="crayon_release52demo.exe" \ + installed_exe1="${W_PROGRAMS_WIN}/Crayon Physics Deluxe Demo/crayon.exe" \ + homepage="http://crayonphysics.com" + +load_crayonphysics_demo() +{ + w_download https://crayonphysicsdeluxe.s3.amazonaws.com/crayon_release52demo.exe 3c221f4c4283d89c180337071b5d3f8b88b68cea0558e6f72abcb34ef954b923 + # Inno Setup installer + w_try "${WINE}" "${W_CACHE}/${W_PACKAGE}/${file1}" ${W_OPT_UNATTENDED:+ /sp- /silent /norestart} +} + +#---------------------------------------------------------------- + +w_metadata crysis2 games \ + title="Crysis 2" \ + publisher="EA" \ + year="2011" \ + media="dvd" \ + file1="Crysis2.exe" \ + installed_file1="${W_PROGRAMS_X86_WIN}/Electronic Arts/Crytek/Crysis 2/bin32/Crysis2.exe" + +load_crysis2() +{ + w_mount "Crysis 2" + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay, 1000 + run ${W_ISO_MOUNT_LETTER}:EASetup.exe + if ( w_opt_unattended > 0 ) { + Loop { + ; On Windows, this window does not pop up + ifWinExist, Microsoft Visual C++ 2008 Redistributable Setup + { + winwait, Microsoft Visual C++ 2008 Redistributable Setup + controlclick, Button12 ; Next + winwait, Visual C++, License + controlclick, Button11 ; Agree + controlclick, Button8 ; Install + winwait, Setup, configuring + winwaitclose + winwait, Visual C++, Complete + controlclick, Button2 ; Finish + break + } + ifWinExist, Setup, Please read the End User + { + break + } + sleep 1000 + } + winwait, Setup, Please read the End User + controlclick, Button1 ; accept + sleep 500 + ;controlclick, Button3 ; next + send {Enter} + ; Again for DirectX + winwait, Setup, Please read the following End + ;controlclick, Button1 ; accept + send a + sleep 1000 + ;controlclick, Button3 ; next + send {Enter} + winwait,Setup, Ready to install + controlclick, Button1 + } + winwait, Setup, Click the Finish button + if ( w_opt_unattended > 0 ) { + controlclick, Button5 ; Don't install EA Download Manager + controlclick, Button1 ; Finish + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata csi6_demo games \ + title="CSI: Fatal Conspiracy Demo" \ + publisher="Ubisoft" \ + year="2010" \ + media="manual_download" \ + file1="CSI6_PC_Demo_05.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Ubisoft/Telltale Games/CSI - Fatal Conspiracy Demo/CSI6Demo.exe" + +load_csi6_demo() +{ + w_download_manual https://www.fileplanet.com/217175/download/CSI:-Fatal-Conspiracy-Demo CSI6_PC_Demo_05.exe dd80e8e2ad2716a49ae292da99c4d069e2193d64ee62ca2941ce93fd7ee3b015 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run, CSI6_PC_Demo_05.exe + winwait, Installer Language, Please select + if ( w_opt_unattended > 0 ) { + ControlClick, Button1 ; Accept default (english) + ;send {Enter} ; Accept default (english) + winwait, CSI - Fatal Conspiracy Demo Setup + send {Enter} ; Next + winwait, CSI - Fatal Conspiracy Demo Setup, License + send {Enter} ; Agree + winwait, CSI - Fatal Conspiracy Demo Setup, Location + send {Enter} ; Install + } + winwait, CSI - Fatal Conspiracy Demo Setup, Finish + if ( w_opt_unattended > 0 ) { + ControlClick Button4 + send {Enter} ; Finish + WinWaitClose + } + " +} + +#---------------------------------------------------------------- + +w_metadata darknesswithin2_demo games \ + title="Darkness Within 2 Demo" \ + publisher="Zoetrope Interactive" \ + year="2010" \ + media="manual_download" \ + file1="DarknessWithin2Demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Iceberg Interactive/Darkness Within 2 Demo/DarkLineage.exe" + +load_darknesswithin2_demo() +{ + w_download_manual http://www.bigdownload.com/games/darkness-within-2-the-dark-lineage/pc/darkness-within-2-the-dark-lineage-demo DarknessWithin2Demo.exe + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run, DarknessWithin2Demo.exe + winwait, Darkness Within, will install + if ( w_opt_unattended > 0 ) { + ControlClick, TNewButton1 + winwait, Darkness, License + ControlClick, TNewRadioButton1 + ControlClick, TNewButton2 + winwait, Darkness, Location + ControlClick, TNewButton3 + winwait, Darkness, shortcuts + ControlClick, TNewButton4 + winwait, Darkness, additional + ControlClick, TNewButton4 + winwait, Darkness, Ready to Install + ControlClick, TNewButton4 + winwait, PhysX, License + ControlClick, Button3 + ControlClick, Button4 + winwait, PhysX, successfully + ControlClick, Button1 + } + winwait, Darkness, Setup has finished + if ( w_opt_unattended > 0 ) { + ControlClick, TNewListBoxButton1 + ControlClick, TNewButton4 + } + winwaitclose, Darkness, Setup has finished + " +} + +#---------------------------------------------------------------- + +w_metadata darkspore games \ + title="Darkspore" \ + publisher="EA" \ + year="2011" \ + media="dvd" \ + file1="DARKSPORE.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/Darkspore/DarksporeBin/Darkspore.exe" \ + homepage="http://darkspore.com/" + +load_darkspore() +{ + # Mount disc, verify that expected file is present + w_mount DARKSPORE Darkspore.ico + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run ${W_ISO_MOUNT_LETTER}:setup.exe + if ( w_opt_unattended > 0 ) { + winwait, Choose Setup Language + controlclick, Button1 ; ok (accept default, English) + winwait, InstallShield Wizard, Welcome + controlclick, Button1 ; Next + winwait, InstallShield Wizard, License Agreement + controlclick, Button3 ; Accept + sleep 1000 + controlclick, Button1 ; Next + winwait, InstallShield Wizard, Select Features + controlclick, Button5 ; Next + winwait, InstallShield Wizard, Ready to Install the Program + controlclick, Button1 ; Install + winwait, DirectX + controlclick, Button1 ; Accept + sleep 1000 + controlclick, Button4 ; Next + winwait, DirectX, DirectX setup + controlclick, Button4 + winwait, DirectX, components installed + controlclick, Button5 ; Finish + } + winwait, InstallShield Wizard, You are now ready + if ( w_opt_unattended > 0 ) { + controlclick, Button1 ; Uncheck View Readme.txt + controlclick, Button4 ; Finish + } + WinWaitClose, InstallShield Wizard + " +} + +#---------------------------------------------------------------- + +w_metadata dcuo games \ + title="DC Universe Online" \ + publisher="EA" \ + year="2011" \ + media="dvd" \ + file1="DCUO - Disc 1.iso" \ + file2="DCUO - Disc 2.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Sony Online Entertainment/Installed Games/DC Universe Online Live/LaunchPad.exe" + +load_dcuo() +{ + w_mount "DCUO - Disc 1" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run, ${W_ISO_MOUNT_LETTER}:setup.exe + if ( w_opt_unattended > 0 ) { + winwait, DC Universe, Anti-virus + ControlClick, Button1 ; next + winwait, DC Universe, License + ControlClick, Button5 ; accept + sleep 500 + ControlClick, Button2 ; next + winwait, DC Universe, Shortcut + ControlClick, Button3 ; next + Loop + { + IfWinExist, DC Universe, not enough space + { + exit 1 ; dang, have to quit + } + IfWinExist, DC Universe, Ready + { + break + } + Sleep 1000 + } + winwait, DC Universe, Ready + ControlClick, Button1 ; next + } + winwait, Setup Needs The Next Disk, Please insert disk 2 + " + + w_mount "DCUO - Disc 2" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + winwait, Setup Needs The Next Disk, Please insert disk 2 + if ( w_opt_unattended > 0 ) { + ControlClick, Button2 ; next + winwaitclose + Loop + { + IfWinExist, DirectX, Welcome + { + ControlClick, Button1 ; accept + Sleep 1000 + ControlClick, Button4 ; next + WinWait, DirectX, Runtime Install + ControlClick, Button4 ; next + WinWait, DirectX, Complete + ControlClick, Button4 ; next + sleep 1000 + process, close, dxsetup.exe ; work around strange 'next button does nothing' bug + } + IfWinExist, Flash ; a newer version of flash is already installed + { + ControlClick, Button3 ; quit + } + IfWinExist, DC Universe, Complete + { + break + } + Sleep 1000 + } + } + WinWait, DC Universe, Complete + if ( w_opt_unattended > 0 ) { + ControlClick, Button4 ; finish + } + winwaitclose + " + w_warn "Now let the wookie install itself, and then quit." +} + +#---------------------------------------------------------------- + +w_metadata deadspace games \ + title="Dead Space" \ + publisher="EA" \ + year="2008" \ + media="dvd" \ + file1="DEADSPACE.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/Dead Space/Dead Space.exe" + +load_deadspace() +{ + w_mount DEADSPACE + + if w_workaround_wine_bug 23324; then + msvcrun_me_harder=" + winwait, Microsoft + controlclick, Button1 + " + else + msvcrun_me_harder="" + fi + + w_read_key + + w_ahk_do " + SetTitleMatchMode, 2 + ; note: if this is the second run, the installer skips the registration code prompt + run, ${W_ISO_MOUNT_LETTER}:EASetup.exe + winwait, Dead + send {Enter} + winwait, Dead, Registration Code + send {RAW}${W_KEY} + Sleep 1000 + controlclick, Button2 + ${msvcrun_me_harder} + winwait, Setup, License + Sleep 1000 + controlclick, Button1 + Sleep 1000 + send {Enter} + winwait, Setup, License + Sleep 1000 + controlclick, Button1 + Sleep 1000 + send {Enter} + winwait, Setup, Destination + Sleep 1000 + controlclick, Button1 + winwait, Setup, begin + Sleep 1000 + controlclick, Button1 + winwait, Setup, Finish + Sleep 1000 + controlclick, Button5 + controlclick, Button1 + " +} + +#---------------------------------------------------------------- + +w_metadata deadspace2 games \ + title="Dead Space 2" \ + publisher="EA" \ + year="2011" \ + media="dvd" \ + file1="Disc1.iso" \ + file2="Disc2.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/EA Games/Dead Space 2/deadspace2.exe" \ + +load_deadspace2() +{ + w_read_key + + w_mount Disc1 + + # FIXME: this bug was fixed in 1.3.36, so this is unneccessary + # + # Work around bug 25963 (fails to switch discs) + w_warn "Copying discs to hard drive. This will take a few minutes." + w_try_cd "${W_TMP}" + # Copy takes a LONG time, so offer a way to avoid copy while debugging verb + # You'll need to comment out the five "rm -rf"'s, too. + if test ! -f easetup.exe; then + w_try cp -R "${W_ISO_MOUNT_ROOT}"/* . + # Make the directories writable, else 2nd disc copy will fail. + w_try chmod -R +w . + w_mount Disc2 + # On Linux, use symlinks for disc 2. (On Cygwin, we'd have to copy.) + w_try ln -s "${W_ISO_MOUNT_ROOT}"/*.dat . + mkdir -p movies/en movies/fr + w_try ln -s "${W_ISO_MOUNT_ROOT}"/movies/en/* movies/en/ + w_try ln -s "${W_ISO_MOUNT_ROOT}"/movies/fr/* movies/fr/ + # Make the files writable, otherwise you'll get errors when trying to remove the temp directory. + chmod -R +w . + fi + + # Install takes a long time, so offer a way to skip installation + # and go straight to activation while debugging that + if ! test -f "${W_PROGRAMS_X86_UNIX}/EA Games/Dead Space 2/deadspace2.exe"; then + w_ahk_do " + run easetup.exe + if ( w_opt_unattended > 0 ) { + SetTitleMatchMode, 2 + ; Not all systems need the Visual C++ runtime + loop + { + ifwinexist, Microsoft Visual C++ 2008 Redistributable Setup + { + sleep 500 + controlclick, Button12 ; Next + winwait, Visual C++, License + sleep 500 + controlclick, Button11 ; Agree + sleep 500 + controlclick, Button8 ; Install + winwait, Setup, configuring + winwaitclose + winwait, Visual C++, Complete + sleep 500 + controlclick, Button2 ; Finish + break + } + ifwinexist, Setup, Dead Space + { + break + } + sleep 1000 + } + winwait, Setup, License ; Dead Space license + sleep 500 + controlclick Button1 ; accept + controlclick Button3 ; next + SetTitleMatchMode, slow ; since word DirectX in next dialog can only be read 'slowly' + winwait, Setup, DirectX ; DirectX license + sleep 500 + controlclick Button1 ; accept + controlclick Button3 ; next + winwait, Setup, Ready to install + sleep 500 + controlclick Button1 ; Install + } + winwait, Setup, Completed + if ( w_opt_unattended > 0 ) { + controlclick Button5 ; (Don't) install EA Download Manager + controlclick Button1 ; Finish + } + winwaitclose + " + fi + + # Activate the game + w_try_cd "${W_PROGRAMS_X86}/EA Games/Dead Space 2" + w_ahk_do " + run activation.exe + if ( w_opt_unattended > 0 ) { + SetTitleMatchMode, 2 + WinWait, Product activation + sleep 500 + controlclick TBitBtn2 ; Next + WinWait, Product activation, Serial + sleep 500 + send ${W_KEY} + controlclick TBitBtn3 ; Next + WinWait, Information + sleep 4000 ; let user see what happened + send {Enter} + } + WinWaitClose, Product activation + " +} + +#---------------------------------------------------------------- + +w_metadata deusex2_demo games \ + title="Deus Ex 2 / Deus Ex: Invisible War Demo" \ + publisher="Eidos" \ + year="2003" \ + media="manual_download" \ + file1="dxiw_demo.zip" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Deus Ex - Invisible War Demo/System/DX2.exe" + +load_deusex2_demo() +{ + w_download_manual https://www.fileplanet.com/133479/130000/fileinfo/Deus-Ex:-INVISIBLE-WAR-Demo dxiw_demo.zip cd3804a03301afd582c9c9374a670944b8cc1470ad1c2e5f3cd602c60d70244f + + w_try unzip "${W_CACHE}/${W_PACKAGE}/dxiw_demo.zip" -d "${W_TMP}" + w_try_cd "${W_TMP}" + w_ahk_do " + SetTitleMatchMode 2 + SetWinDelay 500 + run setup.exe + winwait Deus Ex, Launch + if ( w_opt_unattended > 0 ) { + controlclick button2 + winwait Deus Ex, Welcome + controlclick button1 + winwait Deus Ex, License + controlclick button3 ;accept + controlclick button1 ;next + winwait Deus Ex, Setup Type + controlclick button4 + winwait Deus Ex, Install + controlclick button1 + winwait Question, Readme + controlclick button2 + winwait Question, play + controlclick button2 + } + winwait Deus Ex, Complete + if ( w_opt_unattended > 0 ) + controlclick button4 + winwaitclose Deus Ex, Complete + " +} + +#---------------------------------------------------------------- + +w_metadata diablo2 games \ + title="Diablo II" \ + publisher="Blizzard" \ + year="2000" \ + media="cd" \ + file1="INSTALL.iso" \ + file2="PLAYDISC.iso" \ + file3="CINEMATICS.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Diablo II/Diablo II.exe" + +load_diablo2() +{ + w_download http://ftp.blizzard.com/pub/diablo2/patches/PC/D2Patch_113c.exe 3d7a488c2a76a12e5a21fc71ca313cf9440f67ded6f65dc6bc49e30f6f557672 + + w_read_key + + w_mount INSTALL + w_ahk_do " + SetWinDelay 500 + run ${W_ISO_MOUNT_LETTER}:setup.exe + winwait, Diablo II Setup + send {i} + winwait, Choose Installation Size + send {u} + send {Enter} + send {Raw}${LOGNAME} + send {Tab}{Raw}${W_KEY} + send {Enter} + winwait, Diablo II - choose install directory + send {Enter} + winwait, Desktop Shortcut + send {N} + winwait, Insert Disc" + w_mount PLAYDISC + # Needed by patch 1.13c to avoid disc swapping + cp "${W_ISO_MOUNT_ROOT}"/d2music.mpq "${W_PROGRAMS_UNIX}/Diablo II/" + w_ahk_do " + send, {Enter} + Sleep 1000 + winwait, Insert Disc" + w_mount CINEMATICS + w_ahk_do " + send, {Enter} + Sleep 1000 + winwait, Insert Disc" + w_mount INSTALL + w_ahk_do " + send, {Enter} + Sleep 1000 + winwait, View ReadMe? + ControlClick &No, View ReadMe? + winwait, Register Diablo II Electronically? + send {N} + winwait, Diablo II Setup - Video Test + ControlClick &Cancel, Diablo II Setup - Video Test + winclose, Diablo II Setup" + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" D2Patch_113c.exe + w_ahk_do " + winwait, Blizzard Updater v2.72, has completed + Sleep 1000 + send {Enter} + winwait Diablo II + Sleep 1000 + ControlClick &Cancel, Diablo II" + # Dagnabbit, the darn updater starts the game after it updates, no matter what I do? + w_killall "Game.exe" +} + +w_metadata digitanks_demo games \ + title="Digitanks Demo" \ + publisher="Lunar Workshop" \ + year="2011" \ + media="download" \ + file1="digitanks.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Digitanks/digitanksdemo.exe" \ + homepage="http://www.digitanks.com" + +load_digitanks_demo() +{ + # 2011/11/11: bc98de67680e907a30ee1ab5d062e098c07a87292e3fb82ae62ad2d7175e94ff + w_download "http://static.digitanks.com/files/digitanks.exe" bc98de67680e907a30ee1ab5d062e098c07a87292e3fb82ae62ad2d7175e94ff + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_try "${WINE}" "${file1}" ${W_OPT_UNATTENDED:+ /S} + if w_workaround_wine_bug 8060 "installing corefonts"; then + w_call corefonts + fi +} + +w_metadata dirt2_demo games \ + title="Dirt 2 Demo" \ + publisher="Codemasters" \ + year="2009" \ + media="manual_download" \ + file1="Dirt2Demo.zip" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Codemasters/DiRT2 Demo/dirt2.exe" + +load_dirt2_demo() +{ + w_download_manual https://www.fileplanet.com/207823/200000/fileinfo/DiRT-2-Demo Dirt2Demo.zip fbae62d04e3e33790fe78803577efc8ef9ff7e552220c944023b53315e0db9de + + w_try_unzip "${W_TMP}/${W_PACKAGE}" "${W_CACHE}/${W_PACKAGE}/Dirt2Demo.zip" + + if w_workaround_wine_bug 23532; then + w_call gfw + fi + + if w_workaround_wine_bug 24868; then + w_call d3dx9_36 + fi + + w_try_cd "${W_TMP}/${W_PACKAGE}" + + w_ahk_do " + Run, Setup.exe + WinWait, Choose Setup Language, Select + if ( w_opt_unattended > 0 ) { + sleep 500 + ControlClick Button1 ;next + WinWait, DiRT2 Demo - InstallShield Wizard, Welcome + sleep 500 + ControlClick Button1 ;next + WinWait, DiRT2 Demo - InstallShield Wizard, License + sleep 500 + ControlClick Button3 ;i accept + sleep 500 + ControlClick Button1 ;next + WinWait, DiRT2 Demo - InstallShield Wizard, Setup + sleep 500 + ControlClick Button4 ;next + WinWait, InstallShield Wizard, In order + sleep 500 + ControlClick Button1 ;next + WinWait, DiRT2 Demo - InstallShield Wizard, Ready + sleep 500 + ControlClick Button1 ;next + } + WinWait, DiRT2 Demo - InstallShield Wizard, Complete + if ( w_opt_unattended > 0 ) { + sleep 500 + ControlClick Button4 ;finish + } + WinWaitClose, DiRT2 Demo - InstallShield Wizard, Complete + " +} + +#---------------------------------------------------------------- + +w_metadata demolition_company_demo games \ + title="Demolition Company demo" \ + publisher="Giants Software" \ + year="2010" \ + media="manual_download" \ + file1="DemolitionCompanyDemoENv2.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Demolition Company Demo/DemolitionCompany.exe" + +load_demolition_company_demo() +{ + w_download_manual https://www.demolitioncompany-thegame.com/demo.php DemolitionCompanyDemoENv2.exe + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run, DemolitionCompanyDemoENv2.exe + winwait, Setup - Demolition, This will install + if ( w_opt_unattended > 0 ) { + sleep 1000 + controlclick, TNewButton1, Setup - Demolition, This will install + winwait, Setup - Demolition, License Agreement + sleep 1000 + controlclick, TNewRadioButton1, Setup - Demolition, License Agreement + sleep 1000 + controlclick, TNewButton2, Setup - Demolition, License Agreement + winwait, Setup - Demolition, Setup Type + sleep 1000 + controlclick, TNewButton2, Setup - Demolition, Setup Type + winwait, Setup - Demolition, Ready to Install + sleep 1000 + controlclick, TNewButton2, Setup - Demolition, Ready to Install + winwait, Setup - Demolition, Completing + sleep 1000 + controlclick, TNewButton2, Setup - Demolition, Completing + } + winwaitclose, Setup - Demolition + " +} + +#---------------------------------------------------------------- + +w_metadata dragonage games \ + title="Dragon Age: Origins" \ + publisher="Bioware / EA" \ + year="2009" \ + media="dvd" \ + file1="DragonAge.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Dragon Age/bin_ship/daorigins.exe" + +load_dragonage() +{ + w_read_key + + # game can do this, why do we need to? + w_call physx + + w_mount DragonAge + + w_ahk_do " + SetWinDelay 1000 + Run, ${W_ISO_MOUNT_LETTER}:Setup.exe + SetTitleMatchMode, 2 + winwait, Installer Language + if ( w_opt_unattended > 0 ) { + WinActivate + send {Enter} + winwait, Dragon Age: Origins Setup + ControlClick Next, Dragon Age: Origins Setup + winwait, Dragon Age: Origins Setup, End User License + ;ControlClick Button4, Dragon Age: Origins Setup ; agree + send {Tab}a ; agree + ;ControlClick I agree, Dragon Age: Origins Setup + send {Enter} ; continue + SetTitleMatchMode, 1 + winwait, Dragon Age: Origins, Registration + send ${W_KEY} + send {Enter} + } + winwait, Dragon Age: Origins Setup, Install Type + if ( w_opt_unattended > 0 ) + send {Enter} + winwaitclose + " + # Since the installer explodes on exit, just wait for the + # last file it's known to create + while ! test -f "${W_PROGRAMS_X86_UNIX}/Dragon Age/bin_ship/DAOriginsLauncher-MCE.png"; do + w_info "Waiting for installer to finish..." + sleep 1 + done + + # FIXME: does this directory name change in Windows 7? + ini="${W_DRIVE_C}/users/${LOGNAME}/My Documents/BioWare/Dragon Age/Settings/DragonAge.ini" + if ! test -f "${ini}"; then + w_warn "${ini} not found?" + else + cp -f "${ini}" "${ini}.old" + fi + + if w_workaround_wine_bug 22557 "Setting UseVSync=0 to avoid black menu" ,4.15; then + sed 's,UseVSync=1,UseVSync=0,' < "${ini}" > "${ini}.new" + mv -f "${ini}.new" "${ini}" + fi +} + +#---------------------------------------------------------------- + +w_metadata dragonage_ue games \ + title="Dragon Age: Origins - Ultimate Edition" \ + publisher="Bioware / EA" \ + year="2010" \ + media="dvd" \ + file1="DRAGONAGE-1.iso" \ + file2="DRAGONAGE-2.iso" + +load_dragonage_ue() +{ + w_read_key + + w_mount DRAGONAGE Setup.exe 1 + + # Annoyingly, it runs a web browser so you can activate the extra stuff. Disable that, and w_warn the user after install: + WINEDLLOVERRIDES="winebrowser.exe=" + export WINEDLLOVERRIDES + + w_ahk_do " + SetTitleMatchMode, 2 + SetTitleMatchMode, slow + SetWinDelay 1000 + Run, ${W_ISO_MOUNT_LETTER}:Setup.exe + winwait, Installer, English + if ( w_opt_unattended > 0 ) { + ControlClick Button1, Installer, English + winwait, Dragon Age: Origins Setup + ControlClick Button2, Dragon Age: Origins Setup + winwait, Dragon Age: Origins Setup, License Agreement + ControlClick Button4, Dragon Age: Origins Setup + ControlClick Button2, Dragon Age: Origins Setup + winwait, Dragon Age: Origins, Registration + controlclick, Edit1 + sleep 1000 + send ${W_KEY} + send {Enter} + winwait, Dragon Age: Origins Setup, Install Type + controlclick, Button2, Dragon Age: Origins Setup, Install Type + winwait, Dragon Age: Origins Setup, expanded content + controlclick, Button1 + } + winwait, Insert Disc... + " + w_mount DRAGONAGE data/ultimate_en.rar 2 + + w_ahk_do " + sleep 5000 + SetTitleMatchMode, 2 + if ( w_opt_unattended > 0 ) { + controlclick, Button2, Insert Disc... + winwait, Dragon Age, Setup was completed successfully + controlclick, Button2, Dragon Age, Setup was completed successfully + } + winwait, Dragon Age, Click Finish to close + if ( w_opt_unattended > 0 ) { + controlclick, Button5, Dragon Age, Click Finish to close + controlclick, Button2, Dragon Age, Click Finish to close + } + winwaitclose + " + + if w_workaround_wine_bug 23730 "Run with WINEDEBUG=-all to reduce flickering" ,4.15; then + : + fi + + if w_workaround_wine_bug 23081 "If you still see flickering, try applying the patch from https://bugs.winehq.org/show_bug.cgi?id=23081" ,4.15; then + : + fi + + w_warn "To activate the additional content, visit https://social.bioware.com/redeem_code.php?path=/dragonage/pc/dlcactivate/en" +} + +#---------------------------------------------------------------- + +w_metadata dragonage2_demo games \ + title="Dragon Age II demo" \ + publisher="EA/Bioware" \ + year="2011" \ + media="download" \ + file1="DragonAge2Demo_F93M2qCj_EnEsItPlRu.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Dragon Age 2 Demo/bin_ship/DragonAge2Demo.exe" + +load_dragonage2_demo() +{ + w_download https://lvlt.bioware.cdn.ea.com/bioware/u/f/eagames/bioware/dragonage2/demo/DragonAge2Demo_F93M2qCj_EnEsItPlRu.exe 615c014deed9b97de5662774fe25074862a7873c430d5d3650d07c7ce2727e9d + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetWinDelay 500 + SetTitleMatchMode, 2 + run, DragonAge2Demo_F93M2qCj_EnEsItPlRu.exe + winwait, Installer Language + if ( w_opt_unattended > 0 ) { + send {Enter} + winwait, Dragon Age II Demo Setup + send {Enter} + winwait, Dragon Age II Demo Setup, License + send !a + send {Enter} + winwait, Dragon Age II Demo Setup, Select + send {Enter} + } + winwait, Dragon Age II Demo Setup, Complete, completed + if ( w_opt_unattended > 0 ) { + send {Enter} + winwait, Dragon Age II Demo Setup, Completing + send {Enter} + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata eve games \ + title="EVE Online Tyrannis" \ + publisher="CCP Games" \ + year="2017" \ + media="download" \ + file1="EveLauncher-1104888.exe" \ + installed_exe1="c:/EVE/eve.exe" + +load_eve() +{ + # https://community.eveonline.com/support/download/ + w_download https://binaries.eveonline.com/EveLauncher-1104888.exe d1d66ea0a0e4a476a926307dcdb3d7b5e777d7cff7feb172ce7779dac9fdae8f + + if test "${W_OPT_UNATTENDED}"; then + w_warn "Quiet mode doesn't work with latest eve update, button names don't appear in AHK." + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + run, ${file1} + WinWait, EVE Online + if ( w_opt_unattended > 0 ) { + WinActivate + send {Enter} ; Next + WinWait, EVE,License Agreement + WinActivate + send {Enter} ; Next + WinWait, EVE,Choose Install + WinActivate + send {Enter} ; Install + WinWait, EVE,has been installed + WinActivate + ;Send {Tab}{Tab}{Tab} ; select Launch + ;Send {Space} ; untick Launch + ControlClick Button4 ; untick Launch + Send {Enter} ; Finish (Button2) + } + WinWaitClose, EVE Online + " +} + +#---------------------------------------------------------------- + +w_metadata fable_tlc games \ + title="Fable: The Lost Chapters" \ + publisher="Microsoft" \ + year="2005" \ + media="cd" \ + file1="FABLE_DISC_1.iso" \ + file2="FABLE DISC 2.iso" \ + file3="FABLE DISC 3.iso" \ + file4="FABLE DISC 4.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Games/Fable - The Lost Chapters/Fable.exe" + +load_fable_tlc() +{ + w_read_key + + if w_workaround_wine_bug 657; then + w_call mfc42 + fi + + w_mount FABLE_DISK_1 + w_ahk_do " + SetTitleMatchMode, 2 + run, ${W_ISO_MOUNT_LETTER}:setup.exe + WinWait,Fable,Welcome + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick Button1 ; Next + WinWait,Fable,Please + Sleep 500 + ControlClick Button4 ; Next + WinWait,Fable,Product Key + Sleep 500 + Send ${W_KEY} + Send {Enter} + } + WinWait,Fable,Disk 2 + " + w_mount "FABLE DISK 2" + w_ahk_do " + SetTitleMatchMode, 2 + WinWait,Fable,Disk 2 + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick Button2 ; Retry + } + WinWait,Fable,Disk 3 + " + + w_mount "FABLE DISK 3" + w_ahk_do " + SetTitleMatchMode, 2 + WinWait,Fable,Disk 3 + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick Button2 ; Retry + } + WinWait,Fable,Disk 4 + " + + w_mount "FABLE DISK 4" + w_ahk_do " + SetTitleMatchMode, 2 + WinWait,Fable,Disk 4 + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick Button2 ; Retry + } + WinWait,Fable,Disk 1 + WinKill + " + + # Now tell game what the real disc is so user can insert disc 1 and run the game! + # FIXME: don't guess it's D: + cat > "${W_TMP}/${W_PACKAGE}.reg" <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products\\D3BE9C3CAF4226447B48E06CAACF2DDD\\InstallProperties] +"InstallSource"="D:\\" + +_EOF_ + try_regedit "${W_TMP_WIN}\\${W_PACKAGE}.reg" + + # Also accept EULA + cat > "${W_TMP}/${W_PACKAGE}.reg" <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft Games\\Fable TLC] +"FIRSTRUN"=dword:00000001 + +_EOF_ + try_regedit "${W_TMP_WIN}\\${W_PACKAGE}.reg" + + if w_workaround_wine_bug 24912 "Killing off lingering installer" ,4.19; then + # kill off lingering installer + w_ahk_do " + SetTitleMatchMode, 2 + WinKill,Fable + " + w_killall IDriverT.exe + w_killall IDriver.exe + fi + + if w_workaround_wine_bug 20074 "Installing native d3dx9_36" ,4.18; then + w_call d3dx9_36 + fi +} + +#---------------------------------------------------------------- + +w_metadata fifa11_demo games \ + title="FIFA 11 Demo" \ + publisher="EA Sports" \ + year="2010" \ + media="download" \ + file1="fifa11_pc_demo_NA.zip" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/EA Sports/FIFA 11 Demo/Game/fifa.exe" + +load_fifa11_demo() +{ + # From https://www.ea.com/uk/football/news/fifa11-download-2 + w_download "http://static.cdn.ea.com/fifa/u/f/fifa11_pc_demo_NA.zip" 8b51b5d7b017c4a198fdfae1c348666f99cd60271835d608357f2ad893e5be43 + + w_try unzip -d "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/fifa11_pc_demo_NA.zip" + w_try_cd "${W_TMP}" + + w_ahk_do " + SetTitleMatchMode, 2 + run, EASetup.exe + winwait, Microsoft Visual C++ 2008, wizard + if ( w_opt_unattended > 0 ) { + sleep 1000 + controlclick, Button12, Microsoft Visual C++ 2008, wizard + winwait, Microsoft Visual C++ 2008, License Terms + sleep 1000 + controlclick, Button11, Microsoft Visual C++ 2008, License Terms + sleep 1000 + controlclick, Button8, Microsoft Visual C++ 2008, License Terms + winwait, Setup, is configuring + winwaitclose + winwait, Microsoft Visual C++ 2008, Setup Complete + sleep 1000 + controlclick, Button2 + ; There are two license agreements...one is for Directx + winwait, FIFA 11, I &accept the terms in the End User License Agreement + sleep 1000 + controlclick, Button1 + sleep 1000 + controlclick, Button3 + winwaitclose + winwait, FIFA 11, I &accept the terms in the End User License Agreement + sleep 1000 + controlclick, Button1, FIFA 11, I &accept the terms in the End User License Agreement + sleep 1000 + controlclick, Button3, FIFA 11, I &accept the terms in the End User License Agreement + winwait, FIFA 11, Ready to install FIFA 11 + sleep 1000 + controlclick, Button1, FIFA 11, Ready to install FIFA 11 + } + winwait, FIFA 11, Click the Finish button to exit the Setup Wizard. + if ( w_opt_unattended > 0 ) { + sleep 1000 + controlclick, Button5, FIFA 11, Click the Finish button to exit the Setup Wizard. + sleep 1000 + controlclick, Button1, FIFA 11, Click the Finish button to exit the Setup Wizard. + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata hon games \ + title="Heroes of Newerth" \ + publisher="S2 Games" \ + year="2018" \ + media="download" \ + file1="HoNClient.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Heroes of Newerth/hon.exe" + +load_hon() +{ + # 2017/03/28: 0f3c3431a88964647fc4d9540490e43afedc2e48573c260892882ecf48172317 + # 2018/06/03: d4c82a3c5fdaee193675838e2fe6ade6b9fcdc4bdaf57848300c0eb09e71a945 + w_download http://dl.heroesofnewerth.com/installers/win32/HoNClient.exe d4c82a3c5fdaee193675838e2fe6ade6b9fcdc4bdaf57848300c0eb09e71a945 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run, ${file1} + winwait, Installer Language + if ( w_opt_unattended > 0 ) { + send {Enter} + winwait, Heroes of Newerth + sleep 1000 + controlclick, Button2, Heroes of Newerth + winwait, Heroes of Newerth, License + sleep 1000 + controlclick, Button2, Heroes of Newerth, License + winwait, Heroes of Newerth, Install Location + sleep 1000 + controlclick, Button2, Heroes of Newerth, Install Location + winwait, Heroes of Newerth, Start Menu + sleep 1000 + controlclick, Button2, Heroes of Newerth, Start Menu + winwait, Heroes of Newerth, Finish + sleep 1000 + controlclick, Button2, Heroes of Newerth, Finish + } + winwaitclose, Heroes of Newerth, Finish + " +} + +#---------------------------------------------------------------- + +w_metadata hordesoforcs2_demo games \ + title="Hordes of Orcs 2 Demo" \ + publisher="Freeverse" \ + year="2010" \ + media="manual_download" \ + file1="HoO2Demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Hordes of Orcs 2 Demo/HoO2.exe" + +load_hordesoforcs2_demo() +{ + w_download_manual https://www.fileplanet.com/216619/download/Hordes-of-Orcs-2-Demo HoO2Demo.exe 9c26e420c56268ca14e5cfa6552a9034fc2ea974714b5bfd427e611dfde197be + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + SetTitleMatchMode, slow + run HoO2Demo.exe + WinWait,Orcs + if ( w_opt_unattended > 0 ) { + WinActivate + ControlFocus, Button1, Hordes ; Next + sleep 500 + Send n ; next + WinWait,Orcs,conditions + ControlFocus, Button4, Hordes, agree + Send {Space} + Send {Enter} ; next + WinWait,Orcs,files + Send {Enter} ; next + WinWait,Orcs,exist ; Destination does not exist, create? + Send {Enter} ; yes + WinWait,Orcs,Start + Send {Enter} ; Start + } + WinWait,Orcs,successfully + if ( w_opt_unattended > 0 ) { + Send {Space} ; Finish + } + winwaitclose Orcs + " +} + +#---------------------------------------------------------------- + +w_metadata mfsxde games \ + title="Microsoft Flight Simulator X: Deluxe Edition" \ + publisher="Microsoft" \ + year="2006" \ + media="dvd" \ + file1="FSX DISK 1.iso" \ + file2="FSX DISK 2.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Games/Microsoft Flight Simulator X/fsx.exe" + +load_mfsxde() +{ + if w_workaround_wine_bug 25139 "Setting virtual desktop so license screen shows up on first run."; then + w_call vd=1024x768 + fi + + w_mount "FSX DISK 1" + + if w_workaround_wine_bug 25558 "Copying disc to hard drive. This will take a few minutes."; then + w_try_cd "${W_CACHE}/${W_PACKAGE}" + # Copy takes a LONG time, so offer a way to avoid copy while debugging verb + if test ! -f bothdiscs/setup.exe; then + mkdir bothdiscs + w_try_cd bothdiscs + w_try cp -R "${W_ISO_MOUNT_ROOT}"/* . + + # A few files are on both DVDs. Remove them manually so cp doesn't complain. + rm -f DVDCheck.exe autorun.inf fsx.ico vcredist_x86.exe + + # Make the directories writable, else 2nd disc copy will fail. + w_try chmod -R +w . + + w_mount "FSX DISK 2" + + # On Linux, use symlinks for disc 2. (On Cygwin, we'd have to copy.) + w_try ln -s "${W_ISO_MOUNT_ROOT}"/* . + + # Make the files writable, otherwise you'll get errors when trying to remove bothdiscs. + chmod -R +w . + + # If you leave it mounted, it doesn't ask for the second disk to be inserted. + # If you mount it without extracting though, the install fails. + # Apparently it uses the files from the cache, but does a disk check. + else + w_try_cd bothdiscs + fi + else + w_die "non-broken case not yet supported for this game" + fi + + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run setup.exe,,,mfs_pid + winwait, Microsoft Flight Simulator X, To continue, click Install + ControlClick, Button1, Microsoft Flight Simulator X, To continue + ; Accept license: + winwait, Flight Simulator X - End User License Agreement + controlclick, Button1, Flight Simulator X - End User License Agreement + winwait, Microsoft Flight Simulator X Product Activation Wizard + ; Activate later, currently broken on Wine, see https://bugs.winehq.org/show_bug.cgi?id=25579 + controlclick, Button2, Microsoft Flight Simulator X Product Activation Wizard + sleep 1000 + controlclick, Button5, Microsoft Flight Simulator X Product Activation Wizard + ; Close main window: + winwait, Microsoft Flight Simulator, LEARNING CENTER + ; A winclose/winkill isn't forceful enough: + process, close, fsx.exe + ; Setup doesn't close on its own, because this process doesn't exit cleanly + process, close, IDriver.exe + " +} + +#---------------------------------------------------------------- + +w_metadata mfsx_demo games \ + title="Microsoft Flight Simulator X Demo" \ + publisher="Microsoft" \ + year="2006" \ + media="download" \ + file1="FSXDemo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Games/Microsoft Flight Simulator X Demo/fsx.exe" + +load_mfsx_demo() +{ + if w_workaround_wine_bug 25139 "Setting virtual desktop so license screen shows up on first run"; then + w_call vd=1024x768 + fi + + # 2017/03/28: also available at http://www.gamewatcher.com/downloads/flight-simulator-x-download/flight-simulator-x-final-demo + w_download_manual "https://www.fileplanet.com/166127/160000/fileinfo/Microsoft-Flight-Simulator-X-Demo-[Final]" fsxdemo.exe 0d616d8fb6315c15e9919a29968f98b1feda14a2a284721dad114395154e58be + w_try_cd "${W_TMP}" + unzip "${W_CACHE}/${W_PACKAGE}"/FSXDemo.exe + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run setup.exe,,,mfs_pid + winwait, Microsoft Flight Simulator X, To continue, click Install + ControlClick, Button1, Microsoft Flight Simulator X, To continue + ; Accept license: + winwait, Flight Simulator X - End User License Agreement + controlclick, Button1, Flight Simulator X - End User License Agreement + winwait, Microsoft Flight Simulator X Product Activation Wizard + ; Activate later, currently broken on Wine, see https://bugs.winehq.org/show_bug.cgi?id=25579 + controlclick, Button2, Microsoft Flight Simulator X Product Activation Wizard + sleep 1000 + controlclick, Button5, Microsoft Flight Simulator X Product Activation Wizard + ; Close main window: + winwait, Microsoft Flight Simulator, LEARNING CENTER + ; A winclose/winkill isn't forceful enough: + process, close, fsx.exe + ; Setup doesn't close on its own, because this process doesn't exit cleanly + process, close, IDriver.exe + " +} + +#---------------------------------------------------------------- + +w_metadata gta_vc games \ + title="Grand Theft Auto: Vice City" \ + publisher="Rockstar" \ + year="2003" \ + media="cd" \ + file1="GTA_VICE_CITY.iso" \ + file2="VICE_CITY_PLAY.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Rockstar Games/Grand Theft Auto Vice City/gta-vc.exe" + +load_gta_vc() +{ + w_mount GTA_VICE_CITY + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + Run, ${W_ISO_MOUNT_LETTER}:Setup.exe + winwait, Choose Setup Language + if ( w_opt_unattended > 0 ) { + Send {enter} + winwait, Grand Theft Auto Vice City, Welcome to the InstallShield Wizard + Send {enter} + winwait, Grand Theft Auto Vice City, License Agreement + Send !a + send {enter} + winwait, Grand Theft Auto Vice City, Customer Information + controlclick, edit1 + send ${LOGNAME} + send {tab} + send company ; installer won't proceed without something here + send {enter} + winwait, Grand Theft Auto Vice City, Choose Destination Location + controlclick, Button1 + winwait, Grand Theft Auto Vice City, Select Components + controlclick, Button2 + winwait, Grand Theft Auto Vice City, Ready to Install the Program + send {enter} + } + winwait, Setup Needs The Next Disk, Please insert disk 2 + " + w_mount VICE_CITY_PLAY + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + winwait, Setup Needs The Next Disk, Please insert disk 2 + if ( w_opt_unattended > 0 ) { + controlclick, Button2 + } + winwait, Grand Theft Auto Vice City, InstallShield Wizard Complete + if ( w_opt_unattended > 0 ) { + send {enter} + } + winwaitclose + " + + if w_workaround_wine_bug 26322 "Setting virtual desktop"; then + w_call vd=800x600 + fi + + myexec="Exec=env WINEPREFIX=\"${WINEPREFIX}\" wine cmd /c 'C:\\\\\\\\Run-gta_vc.bat'" + mymenu="${XDG_DATA_HOME}/applications/wine/Programs/Rockstar Games/Grand Theft Auto Vice City/Play GTA Vice City.desktop" + if test -f "${mymenu}" && w_workaround_wine_bug 26304 "Fixing system menu"; then + # this is a hack, hopefully the wine bug will be fixed soon + sed -i "s,Exec=.*,${myexec}," "${mymenu}" + fi +} + +#---------------------------------------------------------------- + +w_metadata kotor1 games \ + title="Star Wars: Knights of the Old Republic" \ + publisher="LucasArts" \ + year="2003" \ + media="cd" \ + file1="KOTOR_1.iso" \ + file2="KOTOR_2.iso" \ + file3="KOTOR_3.iso" \ + file4="KOTOR_4.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/LucasArts/SWKotOR/swkotor.exe" + +load_kotor1() +{ + w_mount "KOTOR_1" + w_ahk_do " + SetTitleMatchMode 2 + SetWinDelay 500 + run ${W_ISO_MOUNT_LETTER}:setup.exe + winwait Star Wars, Welcome + if ( w_opt_unattended > 0 ) { + controlclick button1 + winwait Star Wars, Licensing Agreement + controlclick button2 + winwait Question, Licensing Agreement + controlclick button1 + winwait Star Wars, Destination Folder + controlclick button1 + winwait Star Wars, Program Folder + controlclick button2 + winwait Star Wars, Additional Shortcuts + ;unselect start menu shortcuts + controlclick button1 + controlclick button2 + controlclick button3 + controlclick button4 + controlclick button5 + controlclick button11 + winwait Star Wars, Review settings + controlclick button1 + } + winwait Next Disk, Please insert disk 2 + " + w_mount "KOTOR_2" + w_ahk_do " + SetTitleMatchMode 2 + if ( w_opt_unattended > 0 ) { + winwait Next Disk + controlclick button2 + } + winwait Next Disk, Please insert disk 3 + " + w_mount "KOTOR_3" + w_ahk_do " + SetTitleMatchMode 2 + if ( w_opt_unattended > 0 ) { + winwait Next Disk + controlclick button2 + } + winwait Next Disk, Please insert disk 4 + " + w_mount "KOTOR_4" + w_ahk_do " + SetTitleMatchMode 2 + if ( w_opt_unattended > 0 ) { + winwait Next Disk + controlclick button2 + winwait Question, Desktop + controlclick button2 + winwait Question, DirectX + controlclick button2 ;don't install directx + } + winwait Star Wars, Complete + if ( w_opt_unattended > 0 ) { + controlclick button1 ;don't launch game + controlclick button4 + } + winwaitclose Star Wars, Complete + " +} + +#---------------------------------------------------------------- + +w_metadata losthorizon_demo games \ + title="Lost Horizon Demo" \ + publisher="Deep Silver" \ + year="2010" \ + media="manual_download" \ + file1="Lost_Horizon_Demo_EN.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Deep Silver/Lost Horizon Demo/fsasgame.exe" + +load_losthorizon_demo() +{ + w_download_manual https://www.fileplanet.com/215704/download/Lost-Horizon-Demo Lost_Horizon_Demo_EN.exe + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetTitleMatchMode, 2 + run Lost_Horizon_Demo_EN.exe + WinWait,Lost Horizon Demo, Destination + # shellcheck disable=SC2086 + if ( w_opt_unattended > 0 ) { + Sleep 500 + Send {RAW}${W_TMP} + ControlClick Button2 ;Install + WinWaitClose,Lost Horizon Demo,Installation + Sleep 1000 + Click, Left, 169, 371 + WinWait,Lost Horizon Demo - InstallShield Wizard,Welcome + Sleep 500 + ControlClick Button1 ;Next + WinWait,Lost Horizon Demo - InstallShield Wizard,License + ControlFocus,Button3,Lost Horizon Demo + Sleep 500 + Send {Space} + ControlClick Button1 ;Next + WinWait,Lost Horizon Demo - InstallShield Wizard,program + Sleep 500 + ControlClick Button2 ;Next + WinWait,Lost Horizon Demo - InstallShield Wizard,features + Sleep 500 + ControlClick Button4 ;Next + WinWait,Lost Horizon Demo - InstallShield Wizard,begin + Sleep 500 + ControlClick Button1 ;Next + } + WinWaitClose + WinWait,Lost Horizon Demo - InstallShield Wizard,Complete + if ( w_opt_unattended > 0 ) { + ControlFocus,Button2,Lost Horizon + Sleep 500 + Send {Space} + Sleep 500 + ControlClick Button4 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata lhp_demo games \ + title="LEGO Harry Potter Demo [Years 1-4]" \ + publisher="Travellers Tales / WB" \ + year="2010" \ + media="manual_download" \ + file1="LEGOHarryPotterDEMO.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/WB Games/LEGO_Harry_Potter_DEMO/LEGOHarryPotterDEMO.exe" + +load_lhp_demo() +{ + case "${LANG}" in + *UTF-8*|*utf8*) ;; + pt*) + w_warn "O instalaou falhou em uma localização não utf-8. Utilize 'export LANG=en_US.UTF-8' para contornar." + LANG=en_US.UTF-8 + export LANG + ;; + *) + w_warn "This installer fails in non-utf-8 locales. Doing 'export LANG=en_US.UTF-8' is a workaround." + LANG=en_US.UTF-8 + export LANG + ;; + esac + + w_download_manual "https://www.fileplanet.com/213663/210000/fileinfo/LEGO-Harry-Potter:-Years-1-4-Demo" "${file1}" 01d8e88511d71f5dd1492034ea4b00eacdbbf891ef23cffa31413d232eee3647 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + run, ${file1} + winwait, LEGO, language + if ( w_opt_unattended > 0 ) { + controlclick, Button1 + winwait, LEGO, License + controlclick, Button1 + controlclick, Button2 + winwait, LEGO, installation method + controlclick, Button2 + } + winwait, LEGO, Finish + if ( w_opt_unattended > 0 ) + controlclick, Button1 + + winwaitclose, LEGO, Finish + " + + # Work around locale issues by symlinking the app's directory to not have a funny char + # Won't really work on Cygwin, but that's ok. + w_try_cd "${W_PROGRAMS_X86_UNIX}/WB Games" + ln -s LEGO*Harry\ Potter*DEMO LEGO_Harry_Potter_DEMO +} + +#---------------------------------------------------------------- + +w_metadata lswcs games \ + title="Lego Star Wars Complete Saga" \ + publisher="Lucasarts" \ + year="2009" \ + media="dvd" \ + file1="LEGOSAGA.iso" \ + installed_file1="${W_PROGRAMS_X86_WIN}/LucasArts/LEGO Star Wars - The Complete Saga/LEGOStarWarsSaga.exe" + +load_lswcs() +{ + w_mount LEGOSAGA + w_ahk_do " + run ${W_ISO_MOUNT_LETTER}:setup.exe + SetTitleMatchMode, 2 + winwait, Choose Setup Language + if ( w_opt_unattended > 0 ) { + send {Enter} + winwait, LEGO, License Agreement + send a{Enter} + } + winwait, LEGO, method + if ( w_opt_unattended > 0 ) { + ControlClick Easy Installation + sleep 1000 + } + winwaitclose, LEGO + " + w_warn "This game is copy-protected, and requires the real disc in a real drive to run." +} + +#---------------------------------------------------------------- + +w_metadata lemonysnicket games \ + title="Lemony Snicket: A Series of Unfortunate Events" \ + publisher="Activision" \ + year="2004" \ + media="cd" \ + file1="Lemony Snicket.iso" + +load_lemonysnicket() +{ + w_mount "Lemony Snicket" + w_ahk_do " + SetTitleMatchMode, 2 + Run, ${W_ISO_MOUNT_LETTER}:setup.exe + WinWait, Lemony, Welcome + if ( w_opt_unattended > 0 ) { + sleep 1000 + ControlClick, Button1 ; Next + WinWait, Lemony, License + sleep 1000 + ControlClick, Button2 ; Accept + WinWait, Lemony, Minimum System + sleep 1000 + ControlClick, Button2 ; Yes + WinWait, Lemony, Destination + sleep 1000 + ControlClick, Button1 ; Next + WinWait, Lemony, Select Program Folder + sleep 1000 + ControlClick, Button2 ; Next + WinWait, Lemony, Start Copying + sleep 1000 + ControlClick, Button1 ; Next + WinWait, Question, Would you like to add a desktop shortcut + sleep 1000 + ControlClick, Button2 ; No + WinWait, Question, Would you like to register + sleep 1000 + ControlClick, Button2 ; No + ;WinWait, Information, Please register + ;sleep 1000 + ;ControlClick, Button1 ; OK + WinWait, Lemony, Complete + sleep 1000 + ControlClick, Button4 ; Finish + WinWait, Lemony, Play + sleep 1000 + ControlClick, Button6 ; Exit + WinWait, Lemony, Are you sure + sleep 1000 + ControlClick, Button1 ; Yes already + } + WinWaitClose, Lemony + " +} + +#---------------------------------------------------------------- + +w_metadata luxor_ar games \ + title="Luxor Amun Rising" \ + publisher="MumboJumbo" \ + year="2006" \ + media="cd" \ + file1="LUXOR_AMUNRISING.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/MumboJumbo/Luxor Amun Rising/Luxor AR.exe" + +load_luxor_ar() +{ + w_mount LUXOR_AMUNRISING + + w_ahk_do " + SetWinDelay, 500 + SetTitleMatchMode, 2 + run, ${W_ISO_MOUNT_LETTER}:Luxor_AR_Setup.exe + winwait, Luxor + if ( w_opt_unattended > 0 ) { + ControlClick, Button2 ; Agree + winwait, Folder + ControlClick, Button2 ; Install + winwait, Completed + ControlClick, Button2 ; Next + } + winwait, Success + if ( w_opt_unattended > 0 ) { + ControlClick, Button6 ; Uncheck Play + ControlClick, Button2 ; Close + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata masseffect2 games \ + title="Mass Effect 2 (DRM broken on Wine)" \ + publisher="BioWare" \ + year="2010" \ + media="dvd" \ + file1="MassEffect2.iso" \ + file2="ME2_Disc2.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Mass Effect 2/Binaries/MassEffect2.exe" + +load_masseffect2() +{ + w_mount MassEffect2 + w_read_key + + w_ahk_do " + SetTitleMatchMode, 2 + run, ${W_ISO_MOUNT_LETTER}:Setup.exe + winwait, Installer Language + if ( w_opt_unattended > 0 ) { + send {Enter} + winwait, Mass Effect + send {Enter} + winwait, Mass Effect, License + ControlClick, Button4 + ControlClick, Button2 + winwait, Mass Effect, Registration Code + send ${W_KEY} + ControlClick, Button2 + winwait, Mass Effect, Install Type + ControlClick, Button2 + } + winwait, Insert Disc + " + sleep 5 + w_mount ME2_Disc2 + w_ahk_do " + SetTitleMatchMode, 2 + if ( w_opt_unattended > 0 ) { + winwait, Insert Disc + ControlClick, Button4 + ; on windows, the first click doesn't seem to do it, so press enter, too + sleep 1000 + send {Enter} + } + ; Some installs may not get to this point due to an installer hang/crash (bug 22919) + ; The hang/crash happens after the PhysX install but does not seem to affect gameplay + loop + { + ifwinexist, Mass Effect, Finish + { + if ( w_opt_unattended > 0 ) { + winkill, Mass Effect + } + break + } + Process, exist, Installer.exe + me2pid = %ErrorLevel% + if me2pid = 0 + break + sleep 1000 + } + " +} + +#---------------------------------------------------------------- + +w_metadata masseffect2_demo games \ + title="Mass Effect 2" \ + publisher="BioWare" \ + year="2010" \ + media="download" \ + file1="MassEffect2DemoEN.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Mass Effect 2 Demo/Binaries/MassEffect2.exe" + +load_masseffect2_demo() +{ + w_download http://static.cdn.ea.com/bioware/u/f/eagames/bioware/masseffect2/ME2_DEMO/MassEffect2DemoEN.exe 4ec5ce1dc90c10512324d24cba2b5b9ba1e1872ed4c23e3ede0fc0accc7d2ff2 + + # Don't let self-extractor write into $W_CACHE + case "${W_PLATFORM}" in + windows_cmd|wine_cmd) + cp "${W_CACHE}/${W_PACKAGE}/MassEffect2DemoEN.exe" "${W_TMP}" + chmod +x "${W_TMP}"/MassEffect2DemoEN.exe ;; + *) + ln -sf "${W_CACHE}/${W_PACKAGE}/MassEffect2DemoEN.exe" "${W_TMP}" ;; + esac + w_try_cd "${W_TMP}" + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run, MassEffect2DemoEN.exe + winwait, Mass Effect 2 Demo + if ( w_opt_unattended > 0 ) { + send {Enter} + winwait, Mass Effect 2 Demo, conflicts + send {Enter} + winwait, Mass Effect, License + ControlClick, Button4 + ;ControlClick, Button2 + send {Enter} + winwait, Mass Effect, Install Type + ControlClick, Button2 + } + ; Some installs may not get to this point due to an installer hang/crash (bug 22919) + ; The hang/crash happens after the PhysX install but does not seem to affect gameplay + loop + { + ifwinexist, Mass Effect, Finish + { + if ( w_opt_unattended > 0 ) { + winkill, Mass Effect + } + break + } + Process, exist, Installer.exe + me2pid = %ErrorLevel% + if me2pid = 0 + break + sleep 1000 + } + " +} + +#---------------------------------------------------------------- + +w_metadata maxmagicmarker_demo games \ + title="Max & the Magic Marker Demo" \ + publisher="Press Play" \ + year="2010" \ + media="download" \ + file1="max_demo_pc.zip" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/maxmagicmarker_demo/max and the magic markerdemo pc.exe" + +load_maxmagicmarker_demo() +{ + w_download https://www.maxandthemagicmarker.com/maxdemo/max_demo_pc.zip 6e2abd0cbd0ad04bfea9663402d7e9f24864d3f1c32df69eebf92dfc469fe6dd + + w_try_unzip "${W_PROGRAMS_X86_UNIX}/${W_PACKAGE}" "${W_CACHE}/${W_PACKAGE}"/max_demo_pc.zip + # Work around bug in game?! + w_try_cd "${W_PROGRAMS_X86_UNIX}/${W_PACKAGE}" + mv "max and the magic markerdemo pc" "max and the magic markerdemo pc"_Data +} + +#---------------------------------------------------------------- + +w_metadata mdk games \ + title="MDK (3dfx)" \ + publisher="Playmates International" \ + year="1997" \ + media="cd" \ + file1="MDK.iso" \ + installed_exe1="C:/SHINY/MDK/MDK3DFX.EXE" + +load_mdk() +{ + # Needed even on Windows, some people say. Haven't tried the D3D version on win7 yet. + w_call glidewrapper + + w_download http://www.falconfly.de/downloads/patch-mdk3dfx.zip 9b9413609ed147944fa44bb5f51b35cf6baa7657e7e1a9891ad68d858275e00b + + w_mount MDK + w_try_cd "${W_ISO_MOUNT_ROOT}" + w_ahk_do " + SetTitleMatchMode, 2 + SetTitleMatchMode, slow + run ${W_ISO_MOUNT_LETTER}:setup.exe + winwait, MDK + if ( w_opt_unattended > 0 ) { + click, left, 80, 80 ; USA + winwait, Welcome, purchasing MDK + ControlClick, Button1 ; Next + winwait, Select Target Platform + ControlClick, Button6 ; Next + winwait, Select Installation Options + ControlClick, Button3 ; Large + ControlClick, Button6 ; Next + winwait, Destination + ControlClick, Button1 ; Next + winwait, Program Folder + ControlClick, Button2 ; Next + winwait, Start + ControlClick, Button1 ; Next + Loop { + IfWinExist, Setup, ProgramFolder + send {Enter} + IfWinExist, Setup Complete + break + sleep 500 + } + } + WinWait, Setup Complete + if ( w_opt_unattended > 0 ) { + ControlClick, Button1 ; uncheck readme + ControlClick, Button4 ; Finish + WinWait, Question, DirectX + ControlClick, Button2 ; No + WinWait, Information, complete + ControlClick, Button1 ; No + } + WinWaitClose + " + w_try_cd "${W_DRIVE_C}/SHINY/MDK" + w_try_unzip . "${W_CACHE}/${W_PACKAGE}"/patch-mdk3dfx.zip + + # TODO: Wine fails to install menu items, add a workaround for that +} + +#---------------------------------------------------------------- + +w_metadata menofwar games \ + title="Men of War" \ + publisher="Aspyr Media" \ + year="2009" \ + media="dvd" \ + file1="Men of War.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Aspyr/Men of War/mow.exe" + +load_menofwar() +{ + w_mount "Men of War" + + w_try_cd "${W_ISO_MOUNT_ROOT}" + w_ahk_do " + SetTitleMatchMode, 2 + SetTitleMatchMode, slow + run ${W_ISO_MOUNT_LETTER}:setup.exe + winwait, Select Setup Language, Select the language + if ( w_opt_unattended > 0 ) { + sleep 1000 + ControlClick, TNewButton1, Select Setup Language, Select the language + winwait, Men of War + sleep 1000 + ControlClick, TButton4, Men of War + winwait, Setup - Men of War, ACCEPTANCE OF AGREEMENT + sleep 1000 + ControlClick, TNewRadioButton1, Setup - Men of War, ACCEPTANCE OF AGREEMENT + ControlClick, TNewButton1, Setup - Men of War, ACCEPTANCE OF AGREEMENT + } + winwait, Setup - Men of War, Setup has finished installing + if ( w_opt_unattended > 0 ) { + sleep 1000 + ControlClick, x242 y254 + ControlClick, x242 y278 + ControlClick, TNewButton1, Setup - Men of War, Setup has finished + } + " +} + +#---------------------------------------------------------------- + +w_metadata myth2_demo games \ + title="Myth II demo 1.8.0" \ + publisher="Project Magma" \ + year="2011" \ + media="download" \ + file1="Myth2_Demo_180.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Myth II Demo/Myth II Demo.exe" \ + homepage="https://projectmagma.net/" + +load_myth2_demo() +{ + # Originally a 1998 game by Bungie; according to Wikipedia, they handed the + # source code to Project Magma for further development. + + # 2017/03/27: 1a5e11be25c43491e2b4da5291b646ffe5330a6289bef236f404906e3b4f5e96 + w_download https://tain.totalcodex.net/items/download/myth-ii-demo-windows 1a5e11be25c43491e2b4da5291b646ffe5330a6289bef236f404906e3b4f5e96 "${file1}" + + w_try_cd "${W_TMP}" + w_try unzip "${W_CACHE}/${W_PACKAGE}/${file1}" + + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + run, ${file1} + winwait, Setup, Welcome + if ( w_opt_unattended > 0 ) { + winactivate + send {Enter} ; next + winwait, Setup, Components + send {Enter} ; next + winwait, Setup, Location + send {Enter} ; install + } + winwait, Setup, Complete + if ( w_opt_unattended > 0 ) { + controlclick, Button4 ; Do not run + controlclick, Button2 ; Finish + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata nfsshift_demo games \ + title="Need for Speed: SHIFT Demo" \ + publisher="EA" \ + year="2009" \ + media="download" \ + file1="NFSSHIFTPCDEMO.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/Need for Speed SHIFT Demo/shiftdemo.exe" + +load_nfsshift_demo() +{ + #w_download http://cdn.needforspeed.com/data/downloads/shift/NFSSHIFTPCDEMO.exe 5ad011e7dd42e3404e3191009cd81c05b891e7c138d61f958fce9506ff8c9de3 + w_download http://www.legendaryreviews.com/download-center/demos/NFSSHIFTPCDEMO.exe 5ad011e7dd42e3404e3191009cd81c05b891e7c138d61f958fce9506ff8c9de3 + + w_try cp "${W_CACHE}/${W_PACKAGE}/${file1}" "${W_TMP}" + + w_try_cd "${W_TMP}" + w_ahk_do " + SetTitleMatchMode, 2 + SetTitleMatchMode, slow + run, ${file1} + winwait, WinRAR + if ( w_opt_unattended > 0 ) { + ControlClick, Button2 + winwait, SHIFT, View the readme + controlclick, Button1 + ; Not all systems need the Visual C++ runtime + loop + { + ifwinexist, Visual C++ + { + controlclick, Button1 + break + } + ifwinexist, Setup, SHIFT Demo License + { + break + } + sleep 1000 + } + winwait, Setup, SHIFT Demo License + Sleep 1000 + send {Space} + Sleep 1000 + send {Enter} + winwait, Setup, DirectX + Sleep 1000 + send {Space} + Sleep 1000 + send {Enter} + winwait, Setup, Destination + Sleep 1000 + send {Enter} + winwait, Setup, begin + Sleep 1000 + controlclick, Button1 + } + winwait, Setup, Finish + if ( w_opt_unattended > 0 ) { + Sleep 1000 + controlclick, Button5 + controlclick, Button1 + } + winwaitclose, Setup, Finish + " +} + +#---------------------------------------------------------------- + +w_metadata oblivion games \ + title="Elder Scrolls: Oblivion" \ + publisher="Bethesda Game Studios" \ + year="2006" \ + media="dvd" \ + file1="Oblivion.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Bethesda Softworks/Oblivion/Oblivion.exe" + +load_oblivion() +{ + w_mount "Oblivion" + + w_try_cd "${W_ISO_MOUNT_ROOT}" + w_ahk_do " + SetTitleMatchMode, 2 + run, Setup.exe + winwait, Oblivion, Welcome to the + if ( w_opt_unattended > 0 ) { + sleep 500 + controlclick, Button1 + winwait, Oblivion, License Agreement + sleep 500 + controlclick, Button3 + sleep 500 + controlclick, Button1 + winwait, Oblivion, Choose Destination + sleep 500 + controlclick, Button1 + winwait, Oblivion, Ready to Install + sleep 500 + controlclick, Button1 + winwait, Oblivion, Complete + sleep 500 + controlclick, Button1 + sleep 500 + controlclick, Button2 + sleep 500 + controlclick, Button3 + } + winwaitclose, Oblivion, Complete + " + + if w_workaround_wine_bug 20074 "Installing native d3dx9_36" ,4.18; then + w_call d3dx9_36 + fi +} + +#---------------------------------------------------------------- + +w_metadata penpenxmas games \ + title="Pen-Pen Xmas Olympics" \ + publisher="Army of Trolls / Black Cat" \ + year="2007" \ + media="download" \ + file1="PenPenXmasOlympics100.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/PPO/PPO.exe" + +load_penpenxmas() +{ + W_BROWSERAGENT=1 \ + w_download http://retrospec.sgn.net/download/files/PenPenXmasOlympics100.exe c35c5c6a9a3fa62d6b099713e72390d0490320534dba958b57b94f0a6ab458db + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + "${WINE}" PenPenXmasOlympics100.exe ${W_OPT_UNATTENDED:+/S} +} + +#---------------------------------------------------------------- + +w_metadata popfs games \ + title="Prince of Persia: The Forgotten Sands" \ + publisher="Ubisoft" \ + year="2010" \ + media="dvd" \ + file1="PoP_TFS.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Ubisoft/Prince of Persia The Forgotten Sands/Prince of Persia.exe" + +load_popfs() +{ + w_mount PoP_TFS + + w_ahk_do " + SetTitleMatchMode, 2 + run, ${W_ISO_MOUNT_LETTER}:Setup.exe + winwait, Prince of Persia, Language + if ( w_opt_unattended > 0 ) { + sleep 500 + ControlClick, Button3 + winwait, Prince of Persia, Welcome + sleep 500 + ControlClick, Button1 + winwait, Prince of Persia, License + sleep 500 + ControlClick, Button5 + sleep 500 + ControlClick, Button2 + winwait, Prince of Persia, Click Install + sleep 500 + ControlClick, Button1 + ; Avoid error when creating desktop shortcut + Loop + { + IfWinActive, Prince of Persia, Click Finish + break + IfWinExist, Prince of Persia, desktop shortcut + { + sleep 500 + ControlClick, Button1, Prince of Persia, desktop shortcut + break + } + sleep 5000 + } + } + winwait, Prince of Persia, Click Finish + if ( w_opt_unattended > 0 ) { + sleep 500 + ControlClick, Button4 + } + " +} + +#---------------------------------------------------------------- + +w_metadata rct3deluxe games \ + title="RollerCoaster Tycoon 3 Deluxe (DRM broken on Wine)" \ + publisher="Atari" \ + year="2004" \ + media="cd" \ + file1="RCT3.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Atari/RollerCoaster Tycoon 3/RCT3.EXE" + +load_rct3deluxe() +{ + if w_workaround_wine_bug 21448; then + w_warn "DRM doesn't work, see https://bugs.winehq.org/show_bug.cgi?id=21448" + fi + + w_mount RCT3 + + # FIXME: make videos and music work + # Game still doesn't show .wmv logo videos nor play .wma background audio in menu + # though it does in Jake's screencast. Loading wmp9 and devenum gets it to + # try to load the .wmv logos, but it crashes in quartz :-( + # But at least it's playable without the logo videos and background. + + w_ahk_do " + SetWinDelay 500 + SetTitleMatchMode, 2 + run ${W_ISO_MOUNT_LETTER}:setup-rtc3.exe + if ( w_opt_unattended > 0 ) { + WinWait, Select Setup Language + controlclick, TButton1 ; accept + WinWait Setup - RollerCoaster Tycoon 3, Welcome + controlclick, TButton1 ; Next + WinWait Setup - RollerCoaster Tycoon 3, License + controlclick, TRadioButton1 ; Accept + sleep 500 + controlclick, TButton2 ; Next + WinWait Setup - RollerCoaster Tycoon 3, Destination + controlclick, TButton3 ; Next + WinWait Setup - RollerCoaster Tycoon 3, Start Menu + controlclick, TButton4 ; Next + WinWait Setup - RollerCoaster Tycoon 3, Additional + controlclick, TButton4 ; Next + WinWait Setup - RollerCoaster Tycoon 3, begin + controlclick, TButton4 ; Install + WinWait, Atari Product Registration + controlclick, Button6 ; Close + WinWait, Product Registration, skip + controlclick, Button2 ; Yes, skip + } + WinWait Setup - RollerCoaster Tycoon 3, finished + if ( w_opt_unattended > 0 ) { + controlclick, TNewCheckListBox1 ; uncheck Launch + controlclick, TButton4 ; Finish + } + WinWaitClose Setup - RollerCoaster Tycoon 3, finished + " +} + +#---------------------------------------------------------------- + +w_metadata riseofnations_demo games \ + title="Rise of Nations Trial" \ + publisher="Microsoft" \ + year="2003" \ + media="manual_download" \ + file1="RiseOfNationsTrial.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Microsoft Games/Rise of Nations Trial/nations.exe" + +load_riseofnations_demo() +{ + w_download_manual https://download.cnet.com/Rise-of-Nations-Trial-Version/3000-7562_4-10730812.html RiseOfNationsTrial.exe f0bd8be3999164e669aad33583e372ca0f530b1a2ac0194a4c13b265e9cdf744 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetTitleMatchMode, 2 + run RiseOfNationsTrial.exe + WinWait,Rise Of Nations Trial Setup + if ( w_opt_unattended > 0 ) { + sleep 2500 + ControlClick CButtonClassName2 + WinWait,Rise Of Nations Trial Setup, installed + sleep 2500 + ControlClick CButtonClassName7 + } + WinWaitClose + " + + if w_workaround_wine_bug 9027; then + w_call directmusic + fi +} + +#---------------------------------------------------------------- + +w_metadata secondlife games \ + title="Second Life Viewer" \ + publisher="Linden Labs" \ + year="2003-2011" \ + media="download" \ + file1="Second_Life_3-2-8-248931_Setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/SecondLifeViewer/SecondLife.exe" + +load_secondlife() +{ + w_download http://download.cloud.secondlife.com/Viewer-3/Second_Life_3-2-8-248931_Setup.exe d155366f16bfe23f33a6b6d63f366691be2d0554429916da875ea78d0e0de8a6 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + run, ${file1} + if ( w_opt_unattended > 0 ) { + winwait, Installer Language + send {Enter} + winwait, Installation Folder + send {Enter} + } + winwait, Second Life, Start Second Life now + if ( w_opt_unattended > 0 ) { + send {Tab}{Enter} + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata sims3 games \ + title="The Sims 3 (DRM broken on Wine)" \ + publisher="EA" \ + year="2009" \ + media="dvd" \ + file1="Sims3.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/The Sims 3/Game/Bin/TS3.exe" + +load_sims3() +{ + w_read_key + + w_mount Sims3 + # Default lang, USA, accept defaults, uncheck EA dl mgr, uncheck readme + w_ahk_do " + run ${W_ISO_MOUNT_LETTER}:Sims3Setup.exe + winwait, Choose Setup Language + if ( w_opt_unattended > 0 ) { + send {Enter} + SetTitleMatchMode, 2 + winwait, - InstallShield Wizard + sleep 1000 + ControlClick &Next >, - InstallShield Wizard + sleep 1000 + send uuuuuu{Tab}{Tab}{Enter} + sleep 1000 + send a{Enter} + sleep 1000 + send {Raw}${W_KEY} + send {Enter} + winwait, - InstallShield Wizard, Setup Type + send {Enter} + winwait, - InstallShield Wizard, Click Install to begin + send {Enter} + winwait, - InstallShield Wizard, EA Download Manager + ControlClick Yes, - InstallShield Wizard + send {Enter} + } + winwait, - InstallShield Wizard, Complete + if ( w_opt_unattended > 0 ) { + ControlClick View the readme file, - InstallShield Wizard + ControlClick Finish, - InstallShield Wizard + } + winwaitclose + " + w_umount + + # DVD region code is last digit. + # FIXME: download appropriate one rather than just US version. + w_download http://akamai.cdn.ea.com/eadownloads/u/f/sims/sims3/patches/TS3_1.19.44.010001_Update.exe 9428b32638108e51e63455b60f3cfd5b5aca07b55ce58a200087631a02b5336c + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + run TS3_1.19.44.010001_Update.exe + SetTitleMatchMode, 2 + winwait, - InstallShield Wizard, Complete + if ( w_opt_unattended > 0 ) { + ControlClick Finish, - InstallShield Wizard + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata simsmed games \ + title="The Sims Medieval (DRM broken on Wine)" \ + publisher="EA" \ + year="2011" \ + media="dvd" \ + file1="TSimsM.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/The Sims Medieval/Game/Bin/TSM.exe" + +load_simsmed() +{ + w_read_key + + w_mount TSimsM + # Default lang, USA, accept defaults, uncheck EA dl mgr, uncheck readme + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 1000 + run ${W_ISO_MOUNT_LETTER}:SimsMedievalSetup.exe + winwait, Choose Setup Language + if ( w_opt_unattended > 0 ) { + send {Enter} + SetTitleMatchMode, 2 + winwait, - InstallShield Wizard + ControlClick &Next >, - InstallShield Wizard + sleep 1000 + send uuuuuu{Tab}{Tab}{Enter} + WinWait, Sims, License + ControlClick Button3 ; Accept + sleep 1000 + ControlClick Button1 ; Next + sleep 1000 + send {Raw}${W_KEY} + send {Enter} + winwait, - InstallShield Wizard, Setup Type + ControlClick &Complete ; was not defaulting to complete? + send {Enter} + winwait, - InstallShield Wizard, Click Install to begin + send {Enter} + + ; Handle optional dialogs + ; In Wine-1.3.16 and lower, before + ; https://www.winehq.org/pipermail/wine-cvs/2011-March/076262.html, + ; wine didn't claim to already have .net 4 installed, + ; and ran into bug 25535. + Loop + { + ; .net 4 install sometimes fails nicely + ifWinExist,, .NET Framework 4 has not been installed + { + ControlClick Button3 ; Finish + } + ; .net 4 install sometimes explodes + ifWinExist .NET Framework Initialization Error + { + send {Enter} + } + ifWinExist, Sims, Customer Experience Improvement + { + send {Enter} ; Next + } + ifWinExist, - InstallShield Wizard, Complete + break + sleep 1000 + } + } + winwait, - InstallShield Wizard, Complete + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; Do not view readme + send {Enter} ; Finish + } + winwaitclose + " + + # DVD region code is last digit. + # FIXME: download appropriate one rather than just US version. + w_download http://akamai.cdn.ea.com/eadownloads/u/f/sims/sims/patches/TheSimsMedievalPatch_1.1.10.00001_Update.exe 01c0f9e3394d93869f67f1319b80a1257fe421bbdf911a15c8c7ab43f2e73683 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + run TheSimsMedievalPatch_1.1.10.00001_Update.exe + winwait, Medieval, will reset any in-progress quests + send {Enter} + winwait, Medieval, Welcome + if ( w_opt_unattended > 0 ) { + send {Enter} + } + winwait, - InstallShield Wizard, Complete + if ( w_opt_unattended > 0 ) { + ControlClick Finish, - InstallShield Wizard + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata sims3_gen games \ + title="The Sims 3: Generations (DRM broken on Wine)" \ + publisher="EA" \ + year="2011" \ + media="dvd" \ + file1="Sims3EP04.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/The Sims 3 Generations/Game/Bin/TS3EP04.exe" + +load_sims3_gen() +{ + if [ ! -f "${W_PROGRAMS_X86_WIN}/Electronic Arts/The Sims 3/Game/Bin/TS3.exe" ]; then + w_die "You must have sims3 installed to install sims3_gen!" + fi + + w_read_key + w_mount Sims3EP04 + + # Default lang, USA, accept defaults, uncheck EA dl mgr, uncheck readme + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 1000 + run ${W_ISO_MOUNT_LETTER}:Sims3EP04Setup.exe + winwait, - InstallShield Wizard + if ( w_opt_unattended > 0 ) { + send {Enter} + loop + { + SetTitleMatchMode, 2 + ifwinexist, - InstallShield Wizard, Setup will now attempt to update + { + ControlClick, Button1, - InstallShield Wizard + sleep 1000 + winwait, - InstallShield Wizard, Setup has finished updating The Sims + sleep 1000 + controlclick, Button1, - InstallShield Wizard + sleep 1000 + } + ifwinexist, Sims, License + { + winactivate, Sims, License + sleep 1000 + ControlClick, Button3 + sleep 1000 + ControlClick, Button1 + sleep 1000 + break + } + sleep 1000 + } + winwait, Sims, Please enter the entire Registration Code + sleep 1000 + send {Raw}${W_KEY} + send {Enter} + winwait, - InstallShield Wizard, Setup Type + ControlClick &Complete ; was not defaulting to complete? + send {Enter} + winwait, - InstallShield Wizard, Click Install to begin + send {Enter} + winwait, - InstallShield Wizard, Would you like to install the latest + sleep 1000 + ControlClick, Button4 ; No thanks + sleep 1000 + ControlClick, Button1 + sleep 1000 + } + winwait, - InstallShield Wizard, Complete + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; Do not view readme + send {Enter} ; Finish + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata splitsecond games \ + title="Split Second" \ + publisher="Disney" \ + year="2010" \ + media="dvd" \ + file1="SplitSecond.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Disney Interactive Studios/Split Second/SplitSecond.exe" + +load_splitsecond() +{ + # Key is used in first run activation, no need to read it here. + w_mount SplitSecond + + # Aborts with dialog about FirewallInstallHelper.dll if that's not on the path (e.g. in current dir) + w_try_cd "${W_ISO_MOUNT_ROOT}" + w_ahk_do " + SetTitleMatchMode, 2 + run setup.exe + winwait, Split, Language + sleep 500 + ControlClick, Next, Split, Language ; FIXME: Use button name + winwait, Split, game installation + sleep 500 + ControlClick, Button1, Split, game installation + winwait, Split, license + sleep 500 + ControlClick, Button5, Split, license + sleep 500 + ControlClick, Button2, Split, license + winwait, Split, DirectX + sleep 500 + ControlClick, Button5, Split, DirectX + sleep 500 + ControlClick, Button2, Split, DirectX + winwait, Split, installation method + sleep 500 + controlclick, Next, Split, installation method ; FIXME: Use button name + winwait, DirectX needs to be updated + sleep 500 + send {Enter} + winwait, Split, begin + sleep 500 + ControlClick, Button1 + winwait, Split, completed + sleep 500 + ControlClick, Button1, Split + sleep 500 + ControlClick, Button4, Split + " +} + +#---------------------------------------------------------------- + +w_metadata spore games \ + title="Spore" \ + publisher="EA" \ + year="2008" \ + media="dvd" \ + file1="SPORE.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/SPORE/Sporebin/SporeApp.exe" + +load_spore() +{ + w_mount SPORE + + w_read_key + + w_ahk_do " + SetTitleMatchMode, 2 + run, ${W_ISO_MOUNT_LETTER}:SPORESetup.exe + winwait, Language + if ( w_opt_unattended > 0 ) { + sleep 500 + controlclick, Button1 + winwait, SPORE, Welcome + sleep 500 + controlclick, Button1 + winwait, SPORE, License + sleep 500 + controlclick, Button3 + sleep 500 + controlclick, Button1 + winwait, SPORE, Registration Code + send {RAW}${W_KEY} + sleep 500 + controlclick, Button2 + winwait, SPORE, Setup Type + sleep 500 + controlclick, Button6 + winwait, SPORE, Shortcut + sleep 500 + controlclick, Button6 + winwait, SPORE, begin + sleep 500 + controlclick, Button1 + winwait, Question + ; download managers are usually a pain, so always say no to such questions + sleep 500 + controlclick, Button2 + } + winwait, SPORE, complete + sleep 500 + if ( w_opt_unattended > 0 ) { + controlclick, Button1 + sleep 500 + controlclick, Button2 + sleep 500 + controlclick, Button4 + } + winwaitclose, SPORE, complete + " +} + +#---------------------------------------------------------------- + +w_metadata spore_cc_demo games \ + title="Spore Creature Creator trial" \ + publisher="EA" \ + year="2008" \ + media="download" \ + file1="792248d6ad421d577132c2b648bbed45_scc_trial_na.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Electronic Arts/SPORE/Sporebin/SporeCreatureCreator.exe" + +load_spore_cc_demo() +{ + w_download http://akamai.cdn.ea.com/eamaster/u/f/eagames/spore/scc/promo/792248d6ad421d577132c2b648bbed45_scc_trial_na.exe a7fbc5ca02a49be9772b54caf3ab1a60bdda16e43e14051de407ace527bece15 + + w_info "The installer runs on for about a minute after it's done." + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + if test "${W_OPT_UNATTENDED}"; then + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + run ${file1} + winwait, Wizard, Welcome to the SPORE + send N + winwait, Wizard, Please read the following + send a + send N + winwait, Wizard, your setup + send N + winwait, Wizard, options below + send N + winwait, Wizard, We're ready + ;send i ; didn't take once? + ControlClick, Button1 + winwait, Question, do not install the latest + send N ; reject EA Download Manager + winwait, Wizard, Launch + send {SPACE}{DOWN}{SPACE}{ENTER} + winwaitclose + " + while pgrep -f "${file1}" > /dev/null; do + w_info "Waiting for installer to finish." + sleep 2 + done + else + w_try "${WINE}" "${file1}" + fi +} + +#---------------------------------------------------------------- + +w_metadata starcraft2_demo games \ + title="Starcraft II Demo" \ + publisher="Blizzard" \ + year="2010" \ + media="manual_download" \ + file1="SC2-WingsOfLiberty-enUS-Demo-Installer.zip" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/StarCraft II Demo/StarCraft II.exe" + +load_starcraft2_demo() +{ + w_download_manual https://www.fileplanet.com/217982/210000/fileinfo/Starcraft-2-Demo SC2-WingsOfLiberty-enUS-Demo-Installer.zip 6ba192a726fc8b58031a7de961ad9392f60df05cfb206342f02f7a80b57c0784 + + w_try_cd "${W_TMP}" + w_try_unzip . "${W_CACHE}/${W_PACKAGE}"/SC2-WingsOfLiberty-enUS-Demo-Installer.zip + + w_ahk_do " + SetTitleMatchMode, 2 + Run, Installer.exe + WinWait, StarCraft II Installer + if ( w_opt_unattended > 0 ) { + sleep 500 + ControlClick, x300 y200 + winwait, End User License Agreement + winactivate + ;MouseMove, 300, 300 + ;Click WheelDown, 70 + Sleep, 1000 + ControlClick, Button2 ; Accept + winwaitclose + winwait, StarCraft II Installer + sleep 1000 + ControlClick, x800 y500 + ; Is there any better wait to await completion? + Loop { + PixelGetColor, color, 473, 469 ; the 1 in 100% + ; The digits are drawn white, but because the whole + ; window is flickering, it cycles through about 20 + ; brightnesses. Check a bunch of them to reduce + ; chances of getting stuck for a long time. + ifEqual, color, 0xffffff + break + ifEqual, color, 0xf4f4f4 + break + ifEqual, color, 0xf1f1f1 + break + ifEqual, color, 0xf0f0f0 + break + ifEqual, color, 0xeeeeee + break + ifEqual, color, 0xebebeb + break + ifEqual, color, 0xe4e4e4 + break + sleep 500 ; changes rapidly, so sample often + } + ControlClick, x800 y500 ; Finish + winwaitclose + ; no way to tell game to not start? + process, wait, SC2.exe + sleep 2000 + process, close, SC2.exe + } + " +} + +#---------------------------------------------------------------- + +w_metadata theundergarden_demo games \ + title="The UnderGarden Demo" \ + publisher="Atari" \ + year="2010" \ + media="manual_download" \ + file1="TheUnderGarden_PC_B34_SRTB.30_28OCT10.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/The UnderGarden/TheUndergarden.exe" + +load_theundergarden_demo() +{ + w_download_manual http://www.bigdownload.com/games/the-undergarden/pc/the-undergarden-demo TheUnderGarden_PC_B34_SRTB.30_28OCT10.exe acf90c422ac2f2f242100f39bedfe7df0c95f7a + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetTitleMatchMode, 2 + Run, TheUnderGarden_PC_B34_SRTB.30_28OCT10.exe + WinWait,WinRAR + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick Button2 ; Install + WinWait,Select Setup Language, during + Sleep 500 + ControlClick TNewButton1 ;OK + WinWait,Setup - The UnderGarden, your + Sleep 500 + ControlClick TNewButton1 ;OK + WinWait,Setup - The UnderGarden, License + Sleep 500 + ControlClick TNewRadioButton1 ; accept + Sleep 500 + ControlClick TNewButton2 ; Next + WinWait,Setup - The UnderGarden, different + Sleep 500 + ControlClick TNewButton3 ;Next + WinWait,Setup - The UnderGarden, shortcuts + Sleep 500 + ControlClick TNewButton4 ;OK + WinWait,Setup - The UnderGarden, additional + Sleep 500 + ControlFocus,TNewCheckListBox1,desktop + Sleep 500 + Send {Space} + Sleep 500 + ControlClick TNewButton4 ; Next + WinWait,Setup - The UnderGarden, review + Sleep 500 + ControlClick TNewButton4 ;Install + WinWait,Microsoft Visual C, Visual + Sleep 500 + ControlClick Button13 ;Cancel + WinWait,Microsoft Visual C, want + Sleep 500 + ControlClick Button1 ;Yes + WinWait,Microsoft Visual C, chosen + Sleep 500 + ControlClick Button2 ;Finish + WinWait,Framework 3, Press + Sleep 500 + ControlClick Button21 ;Cancel + WinWait,Framework 3, want + Sleep 500 + ControlClick Button1 ;Yes + WinWait,Installing Microsoft, Runtime + Sleep 500 + ControlClick Button6 ;Cancel + } + WinWait,Setup,launched + if ( w_opt_unattended > 0 ) { + Sleep 500 + ControlClick TNewButton4 ;Finish + } + WinWaitClose,Setup,launched + " +} + +#---------------------------------------------------------------- + +w_metadata tmnationsforever games \ + title="TrackMania Nations Forever" \ + publisher="Nadeo" \ + year="2009" \ + media="download" \ + file1="tmnationsforever_setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/TmNationsForever/TmForever.exe" + +load_tmnationsforever() +{ + # 2011/03/29: 2f659138ed4409da404970841e18f03d29921beaf6a424824c8312ddb20f6355 + w_download "http://files.trackmaniaforever.com/tmnationsforever_setup.exe" 2f659138ed4409da404970841e18f03d29921beaf6a424824c8312ddb20f6355 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetTitleMatchMode, 2 + Run, tmnationsforever_setup.exe + WinWait,Select Setup Language + if ( w_opt_unattended > 0 ) { + Sleep 1000 + ControlClick TNewButton1 ; OK + WinWait,Setup - TmNationsForever,Welcome + Sleep 1000 + ControlClick TNewButton1 ; Next + WinWait,Setup - TmNationsForever,License + Sleep 1000 + ControlClick TNewRadioButton1 ; Accept + Sleep 1000 + ControlClick TNewButton2 ; Next + WinWait,Setup - TmNationsForever,Where + Sleep 1000 + ControlClick TNewButton3 ; Next + WinWait,Setup - TmNationsForever,shortcuts + Sleep 1000 + ControlClick TNewButton4 ; Next + WinWait,Setup - TmNationsForever,perform + Sleep 1000 + ControlClick TNewButton4 ; Next + WinWait,Setup - TmNationsForever,installing + Sleep 1000 + ControlClick TNewButton4 ; Install + } + WinWait,Setup - TmNationsForever,finished + if ( w_opt_unattended > 0 ) { + Sleep 1000 + ControlFocus, TNewCheckListBox1, TmNationsForever, finished + Sleep 1000 + Send {Space} ; don't start game + ControlClick TNewButton4 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata trainztcc_2004 games \ + title="Trainz: The Complete Collection: TRS2004" \ + publisher="Paradox Interactive" \ + year="2008" \ + media="dvd" \ + file1="TRS2006DVD.iso" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Auran/TRS2004/TRS2004.exe" + +load_trainztcc_2004() +{ + w_call mfc42 + + w_read_key + # yup, they got the volume name wrong + w_mount TRS2006DVD + w_try_cd ${W_ISO_MOUNT_ROOT}/TRS2004_SP4_DVD_Installer_BUILD_2370/Installer/Disk1 + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + run setup.exe + if ( w_opt_unattended > 0 ) { + winwait TRS2004 Setup, Please install the latest drivers + send {Enter} + winwait TRS2004, Welcome + send {Enter} + winwait TRS2004, License + ControlClick Button2 + winwait TRS2004, serial + winactivate + send ${W_RAW_KEY}{Enter} + winwait TRS2004, Destination + send {Enter} + winwait Install DirectX + send n + winwait Windows Update, Your computer already + send {Enter} + } + winwait TRS2004, Complete + if ( w_opt_unattended > 0 ) { + send {Space} ; uncheck View Readme + send {Enter} ; Finish + } + winwaitclose + " + + # And, while we're at it, also install the accompanying paint shed app + w_try_cd ${W_ISO_MOUNT_ROOT}/TRAINZ_PAINTSHED + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + run Trainz_Paint_Shed_Setup.exe + if ( w_opt_unattended > 0 ) { + winwait Trainz Paint Shed, Welcome + send {Enter} + winwait Trainz Paint Shed, License + send a ; accept + send {Enter} ; Next + winwait Trainz Paint Shed, Destination + send {Enter} + winwait Trainz Paint Shed, Install + send {Enter} + } + winwait Trainz Paint Shed, Complete + if ( w_opt_unattended > 0 ) { + send {Enter} ; Finish + } + winwaitclose + " +} + +#---------------------------------------------------------------- + +w_metadata sammax301_demo games \ + title="Sam & Max 301: The Penal Zone" \ + publisher="Telltale Games" \ + year="2010" \ + media="manual_download" \ + file1="SamMax301_PC_Setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Telltale Games/Sam and Max - The Devil's Playhouse/The Penal Zone/SamMax301.exe" + +load_sammax301_demo() +{ + w_download_manual "https://www.fileplanet.com/211314/210000/fileinfo/Sam-&-Max:-Devil's-Playhouse---Episode-One-Demo" SamMax301_PC_Setup.exe bed2c16c0254881e7770743f936b8926fa202b91d281bb8c2dd34305d0c0a84a + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + SetWinDelay 500 + run SamMax301_PC_Setup.exe + winwait Sam and Max The Penal Zone Setup, Welcome + if ( w_opt_unattended > 0 ) { + controlclick button2 ; Next + winwait Sam and Max The Penal Zone Setup, DirectX + controlclick button5 ; Uncheck check directx + controlclick button2 ; Next + winwait Sam and Max The Penal Zone Setup, License + controlclick button2 ; I Agree + winwait Sam and Max The Penal Zone Setup, Location + controlclick button2 ; Install + winwait Sam and Max The Penal Zone Setup, Finish + controlclick button4 ; Uncheck play now + controlclick button5 ; Uncheck create shortcut + controlclick button2 ; Finish + } + winwaitclose Sam and Max The Penal Zone Setup + " +} + +#---------------------------------------------------------------- + +w_metadata sammax304_demo games \ + title="Sam & Max 304: Beyond the Alley of the Dolls" \ + publisher="Telltale Games" \ + year="2010" \ + media="manual_download" \ + file1="SamMax304_PC_setup.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Telltale Games/Sam and Max - The Devil's Playhouse/Beyond the Alley of the Dolls/SamMax304.exe" + +load_sammax304_demo() +{ + w_download_manual "https://www.fileplanet.com/214770/210000/fileinfo/Sam-&-Max:-The-Devi's-Playhouse---Beyond-the-Alley-of-the-Dolls-Demo" SamMax304_PC_setup.exe 51c85e98857d15c59d9bb808ee16794cc0caf39799c50545bffdf359eac4c70a + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetTitleMatchMode, 2 + Run, ${file1} + WinWait,Sam and Max Beyond the Alley of the Dolls Setup + if ( w_opt_unattended > 0 ) { + ControlClick Button2 ; Next + WinWait,Sam and Max Beyond the Alley of the Dolls Setup,DirectX + ControlClick Button2 ; Next - Directx check defaulted + WinWait,Sam and Max Beyond the Alley of the Dolls Setup,License + ControlClick Button2 ; Agree + WinWait,Sam and Max Beyond the Alley of the Dolls Setup,Location + ControlClick Button2 ; Install + WinWait,Sam and Max Beyond the Alley of the Dolls Setup,Finish + ControlClick Button4 ; Uncheck Play Now + ControlClick Button2 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata tropico3_demo games \ + title="Tropico 3 Demo" \ + publisher="Kalypso Media GmbH" \ + year="2009" \ + media="manual_download" \ + file1="Tropico3Demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Kalypso/Tropico 3 Demo/Tropico3 Demo.exe" + +load_tropico3_demo() +{ + w_download_manual https://www.fileplanet.com/204947/200000/fileinfo/Tropico-3-Demo Tropico3Demo.exe c4c06858cb1e0b9ff29dc8de6ecb8eb9cf699ce31609fbfa848d5dbc83c9d3e0 + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetWinDelay 1000 + SetTitleMatchMode, 2 + Run, Tropico3Demo.exe + WinWait,Installer + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; OK + WinWait,Tropico,Welcome + ControlClick Button2 ; Next + WinWait,Tropico,License + ControlClick Button2 ; Agree + WinWait,Tropico,Typical + ControlClick Button2 ; Next + } + WinWait,Tropico,Completing + if ( w_opt_unattended > 0 ) { + ControlClick Button4 ; Uncheck Run Now + ControlClick Button2 ; Finish + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata singularity games \ + title="Singularity" \ + publisher="Activision" \ + year="2010" \ + media="dvd" \ + file1="SNG_DVD.iso" + +load_singularity() +{ + w_read_key + w_mount SNG_DVD + + w_ahk_do " + run ${W_ISO_MOUNT_LETTER}:setup.exe + winwait, Activision(R) - InstallShield, Select the language for the installation from the choices below. + if ( w_opt_unattended > 0 ) { + sleep 1000 + controlclick, Button1, Activision(R) - InstallShield, Select the language for the installation from the choices below. + sleep 1000 + winwait, Singularity(TM), Keycode Check + sleep 1000 + Send ${W_KEY} + sleep 1000 + Send {Enter} + ; Well this is annoying... + Winwait, Keycode Check, The Keycode you entered appears to be valid. + sleep 1000 + Send {Enter} + winwait, Singularity(TM), The InstallShield Wizard will install Singularity(TM) on your computer + sleep 1000 + controlclick, Button1, Singularity(TM), The InstallShield Wizard will install Singularity(TM) on your computer + winwait, Singularity(TM), Please read the following license agreement carefully + sleep 1000 + controlclick, Button5, Singularity(TM), Please read the following license agreement carefully + sleep 1000 + controlclick, Button2, Singularity(TM), Please read the following license agreement carefully + winwait, Singularity(TM), Minimum System Requirements + sleep 1000 + controlclick, Button1, Singularity(TM), Minimum System Requirements + winwait, Singularity(TM), Select the setup type to install + controlclick, Button4, Singularity(TM), Select the setup type to install + } + ; Loop until installer window has been gone for at least two seconds + Loop + { + sleep 1000 + IfWinExist, Singularity + continue + IfWinExist, Activision + continue + sleep 1000 + IfWinExist, Singularity + continue + IfWinExist, Activision + continue + break + } + " + + # Clean up crap left over in c:\ when the installer runs the vc 2008 redistributable installer + w_try_cd "${W_DRIVE_C}" + rm -f VC_RED.* eula.*.txt globdata.ini install.exe install.ini install.res.*.dll vcredist.bmp +} + +#---------------------------------------------------------------- + +w_metadata torchlight games \ + title="Torchlight - boxed version" \ + publisher="Runic Games" \ + year="2009" \ + media="dvd" \ + file1="Torchlight.iso" + +load_torchlight() +{ + w_mount "Torchlight" + w_ahk_do " + SetTitleMatchMode, 2 + Run, ${W_ISO_MOUNT_LETTER}:Torchlight.exe + WinWait, Torchlight Setup, This wizard will guide + if ( w_opt_unattended > 0 ) { + sleep 1000 + ControlClick, Button2, Torchlight Setup, This wizard will guide + WinWait, Torchlight Setup, Please review the license terms + sleep 1000 + ControlClick, Button2, Torchlight Setup, Please review the license terms + WinWait, Torchlight Setup, Choose Install Location + sleep 1000 + ControlClick, Button2, Torchlight Setup, Choose Install Location + WinWait, Torchlight Setup, Installation Complete + sleep 1000 + ControlClick, Button2, Torchlight Setup, Installation Complete + WinWait, Torchlight Setup, Completing the Torchlight Setup Wizard + sleep 1000 + ControlClick, Button4, Torchlight Setup, Completing the Torchlight Setup Wizard + ControlClick, Button2, Torchlight Setup, Completing the Torchlight Setup Wizard + } + WinWaitClose, Torchlight Setup + " +} + +#---------------------------------------------------------------- + +w_metadata twfc games \ + title="Transformers: War for Cybertron" \ + publisher="Activision" \ + year="2010" \ + media="dvd" \ + file1="TWFC_DVD.iso" + +load_twfc() +{ + w_read_key + w_mount TWFC_DVD + + w_ahk_do " + run ${W_ISO_MOUNT_LETTER}:setup.exe + SetTitleMatchMode, 2 + winwait, Activision, Select the language for the installation + if ( w_opt_unattended > 0 ) { + sleep 1000 + controlclick, Button1, Activision, Select the language for the installation + winwait, Transformers, Press NEXT to verify your key + sleep 1000 + send ${W_KEY} + send {Enter} + winwait, Keycode Check, The Keycode you entered appears to be valid + sleep 1000 + send {Enter} + winwait, Transformers, The InstallShield Wizard will install Transformers + sleep 1000 + controlclick, Button1, Transformers, The InstallShield Wizard will install Transformers + winwait, Transformers, License Agreement + sleep 1000 + controlclick, Button5, Transformers, License Agreement + sleep 1000 + controlclick, Button2, Transformers, License Agreement + winwait, Transformers, Minimum System Requirements + sleep 1000 + controlclick, Button1, Transformers, Minimum System Requirements + winwait, Transformers, Select the setup type to install + sleep 1000 + controlclick, Button4, Transformers, Select the setup type to install + } + ; Installer exits silently. Prevent an early umount + Loop + { + sleep 1000 + IfWinExist, Transformers + continue + IfWinExist, Activision + continue + sleep 1000 + IfWinExist, Transformers + continue + IfWinExist, Activision + continue + break + } + " + + # Clean up crap left over in c:\ when the installer runs the vc 2008 redistributable installer + w_try_cd "${W_DRIVE_C}" + rm -f VC_RED.* eula.*.txt globdata.ini install.exe install.ini install.res.*.dll vcredist.bmp +} + +#---------------------------------------------------------------- + +w_metadata typingofthedead_demo games \ + title="Typing of the Dead Demo" \ + publisher="Sega" \ + year="1999" \ + media="manual_download" \ + file1="Tod_e_demo.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/SEGA/TOD-Demo/Tod_e_demo.exe" + +load_typingofthedead_demo() +{ + w_download_manual "https://www.fileplanet.com/54947/50000/fileinfo/The-Typing-of-the-Dead-Demo" tod-demo.zip feb0888b6cf1d51af2bf3d752e1727b5d248c2704ca053561f384b55e86267ea + w_try_cd "${W_TMP}" + w_try_unzip . "${W_CACHE}/${W_PACKAGE}/tod-demo.zip" + w_ahk_do " + SetTitleMatchMode, 2 + run SETUP.EXE + if ( w_opt_unattended > 0 ) { + WinWait,InstallShield Wizard,where + sleep 1000 + ControlClick Button1 ; Next + WinWait,InstallShield Wizard,icons + sleep 1000 + ControlClick Button2 ; Next + } + ; installer crashes here? + Sleep 20000 + " +} + +#---------------------------------------------------------------- + +w_metadata ut3 games \ + title="Unreal Tournament 3" \ + publisher="Midway Games" \ + year="2007" \ + media="dvd" \ + file1="UT3_RC7.iso" \ + file2="UT3Patch5.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Unreal Tournament 3/Binaries/UT3.exe" + +load_ut3() +{ + w_download_manual "http://www.filefront.com/13709855/UT3Patch5.exe" UT3Patch5.exe + w_try w_mount UT3_RC7 + + w_ahk_do " + run ${W_ISO_MOUNT_LETTER}:SetupUT3.exe + SetTitleMatchMode, slow ; else can't see EULA text + SetTitleMatchMode, 2 + SetWinDelay 1000 + WinWait, Choose Setup Language + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; OK + WinWait, Unreal Tournament 3, GAMESPY ; License Agreement + ControlClick Button2 ; Yes + WinWait, Unreal Tournament 3, UnrealEd ; License Agreement + ControlClick Button2 ; Yes + WinWait, , Choose Destination + ControlClick Button1 ; Next + WinWait, AGEIA PhysX v7.09.13 Setup, License + ControlClick Button3 ; Accept + sleep 1000 + ControlClick Button4 ; Next + WinWait, AGEIA PhysX v7.09.13, Finish + ControlClick Button1 ; Finish + ; game now begins installing + } + WinWait, , InstallShield Wizard Complete + if ( w_opt_unattended > 0 ) { + ControlClick Button4 ; Finish + } + WinWaitClose + " + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + + w_ahk_do " + SetTitleMatchMode, 2 + run UT3Patch5.exe + WinWait, License + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; Accept + WinWait, End User License Agreement + ControlClick Button1 ; Accept + WinWait, Patch UT3 + ControlClick Button1 ; Yes + } + WinWait, , UT3 was successfully patched! + if ( w_opt_unattended > 0 ) { + ControlClick Button1 ; OK + } + WinWaitClose + " +} + +#---------------------------------------------------------------- + +w_metadata wog games \ + title="World of Goo Demo" \ + publisher="2D Boy" \ + year="2008" \ + media="download" \ + file1="WorldOfGooDemo.1.0.exe" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/WorldOfGooDemo/WorldOfGoo.exe" + +load_wog() +{ + if ! test -f "${W_CACHE}/wog/WorldOfGooDemo.1.0.exe"; then + # Get temporary download location + w_download "https://www.worldofgoo.com/dl2.php?lk=demo&filename=WorldOfGooDemo.1.0.exe" + URL=$(grep WorldOfGooDemo.1.0.exe "${W_CACHE}/wog/dl2.php?lk=demo&filename=WorldOfGooDemo.1.0.exe" \ + | sed 's,.*http,http,;s,".*,,') + w_try rm "${W_CACHE}/wog/dl2.php?lk=demo&filename=WorldOfGooDemo.1.0.exe" + + w_download "${URL}" 07892e927e0c403a178717b67928d3b4126dd0ed4f82afa20a4bd2496706c5e9 + fi + + w_try_cd "${W_CACHE}/${W_PACKAGE}" + w_ahk_do " + SetWinDelay 500 + run WorldOfGooDemo.1.0.exe + winwait, World of Goo Setup, License Agreement + if ( w_opt_unattended > 0 ) { + sleep 1000 + WinActivate + send {Enter} + winwait, World of Goo Setup, Choose Components + send {Enter} + winwait, World of Goo Setup, Choose Install Location + send {Enter} + winwait, World of Goo Setup, Thank you + ControlClick, Make me dirty right now, World of Goo Setup, Thank you + send {Enter} + } + winwaitclose, World of Goo Setup + " +} + +#---------------------------------------------------------------- +# Steam Games +#---------------------------------------------------------------- + +w_metadata alienswarm_steam games \ + title="Alien Swarm (Steam)" \ + publisher="Valve" \ + year="2010" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/alien swarm/swarm.exe" + +load_alienswarm_steam() +{ + w_steam_install_game 630 "Alien Swarm" +} + +#---------------------------------------------------------------- + +w_metadata bioshock2_steam games \ + title="Bioshock 2 (Steam)" \ + publisher="2k" \ + year="2010" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/bioshock2/blort.exe" + +load_bioshock2_steam() +{ + w_steam_install_game 8850 "BioShock 2" +} + +#---------------------------------------------------------------- + +w_metadata borderlands_steam games \ + title="Borderlands (Steam, non-free)" \ + publisher="2K Games" \ + year="2009" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/borderlands/Binaries/Borderlands.exe" + +load_borderlands_steam() +{ + w_steam_install_game 8980 "Borderlands" +} + +#---------------------------------------------------------------- + +w_metadata civ5_demo_steam games \ + title="Civilization V Demo (Steam)" \ + publisher="2K Games" \ + year="2010" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/sid meier's civilization v - demo/CivilizationV.exe" + +load_civ5_demo_steam() +{ + # Start AutoHotKey watching for DirectX 9 option in the background, and select it when it comes up + w_ahk_do " + SetWinDelay 500 + loop + { + ifWinExist, Sid Meier's Civilization V - Demo - Steam + { + winactivate + click 26,108 ; select directx9 + sleep 500 + click 200,150 ; Play + } + ifWinExist, Updating Sid Meier's Civilization V - Demo + { + break + } + sleep 1000 + } + " & + _job=$! + # While that's running, install the game. + # You'll see *two* AutoHotKey icons until that first script + # finds the dialog it's looking for, clicks, and exits. + w_info "If you already own the full Civ 5 game on Steam, the installer won't even appear." + w_steam_install_game 65900 "Sid Meier's Civilization V - Demo" + kill -s HUP "${_job}" # just in case +} + +#---------------------------------------------------------------- + +w_metadata ruse_demo_steam games \ + title="Ruse Demo (Steam)" \ + publisher="Ubisoft" \ + year="2010" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/r.u.s.e. demo/Ruse.exe" + +load_ruse_demo_steam() +{ + w_steam_install_game 33310 "R.U.S.E." +} + +#---------------------------------------------------------------- + +w_metadata supermeatboy_steam games \ + title="Super Meat Boy (Steam, non-free)" \ + publisher="Independent" \ + year="2010" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/super meat boy/SuperMeatBoy.exe" + +load_supermeatboy_steam() +{ + w_steam_install_game 40800 "Super Meat Boy" +} + +#---------------------------------------------------------------- + +w_metadata trine_steam games \ + title="Trine (Steam)" \ + publisher="Frozenbyte" \ + year="2009" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/trine/trine_launcher.exe" + +load_trine_steam() +{ + w_steam_install_game 35700 "Trine" +} + +#---------------------------------------------------------------- + +w_metadata trine_demo_steam games \ + title="Trine Demo (Steam)" \ + publisher="Frozenbyte" \ + year="2009" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/trine demo/trine_launcher.exe" + +load_trine_demo_steam() +{ + w_steam_install_game 35710 "Trine Demo" +} + +#---------------------------------------------------------------- + +w_metadata wormsreloaded_demo_steam games \ + title="Worms Reloaded Demo (Steam)" \ + publisher="Team17" \ + year="2010" \ + media="download" \ + installed_exe1="${W_PROGRAMS_X86_WIN}/Steam/steamapps/common/worms reloaded/WormsReloaded.exe" + +load_wormsreloaded_demo_steam() +{ + w_steam_install_game 22690 "Worms Reloaded Demo" +} + +####################### +# settings +####################### + +#### +# settings->desktop +#---------------------------------------------------------------- +# DirectInput settings + +w_metadata mwo=force settings \ + title_uk="Встановити примусове DirectInput MouseWarpOverride (необхідно для деяких ігор)" \ + title="Set DirectInput MouseWarpOverride to force (needed by some games)" +w_metadata mwo=enabled settings \ + title_uk="Увімкнути DirectInput MouseWarpOverride (за замовчуванням)" \ + title="Set DirectInput MouseWarpOverride to enabled (default)" +w_metadata mwo=disable settings \ + title_uk="Вимкнути DirectInput MouseWarpOverride" \ + title="Set DirectInput MouseWarpOverride to disable" + +load_mwo() +{ + # Filter out/correct bad or partial values + # Confusing because dinput uses 'disable', but d3d uses 'disabled' + # see alloc_device() in dlls/dinput/mouse.c + case "$1" in + enable*) arg=enabled;; + disable*) arg=disable;; + force) arg=force;; + *) w_die "illegal value $1 for MouseWarpOverride";; + esac + + echo "Setting MouseWarpOverride to ${arg}" + cat > "${W_TMP}"/set-mwo.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\DirectInput] +"MouseWarpOverride"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-mwo.reg +} + +#---------------------------------------------------------------- + +w_metadata fontfix settings \ + title_uk="Перевірка шрифтів" \ + title="Check for broken fonts" + +load_fontfix() +{ + # Focht says Samyak is bad news, and font substitution isn't a good workaround. + # I've seen psdkwin7 setup crash because of this; the symptom was a messagebox saying + # SDKSetup encountered an error: The type initializer for 'Microsoft.WizardFramework.WizardSettings' threw an exception + # and WINEDEBUG=+relay,+seh shows an exception very quickly after + # Call KERNEL32.CreateFileW(0c83b36c L"Z:\\USR\\SHARE\\FONTS\\TRUETYPE\\TTF-ORIYA-FONTS\\SAMYAK-ORIYA.TTF",80000000,00000001,00000000,00000003,00000080,00000000) ret=70d44091 + if [ -x "$(command -v xlsfonts 2>/dev/null)" ] ; then + if xlsfonts 2>/dev/null | grep -E -i "samyak.*oriya" ; then + w_die "Please uninstall the Samyak/Oriya font, e.g. 'sudo dpkg -r ttf-oriya-fonts', then log out and log in again. That font causes strange crashes in .net programs." + fi + else + w_warn "xlsfonts not found. If you have (older versions of) Samyak/Oriya fonts installed, you may get crashes/bugs. If so, uninstall, then logout/login again to resolve." + fi +} + +#---------------------------------------------------------------- + +w_metadata fontsmooth=disable settings \ + title_uk="Вимкнути згладжування шрифту" \ + title="Disable font smoothing" +w_metadata fontsmooth=bgr settings \ + title_uk="Увімкнути субпіксельне згладжування шрифту для BGR LCD моніторів" \ + title="Enable subpixel font smoothing for BGR LCDs" +w_metadata fontsmooth=rgb settings \ + title_uk="Увімкнути субпіксельне згладжування шрифту для RGB LCD моніторів" \ + title="Enable subpixel font smoothing for RGB LCDs" +w_metadata fontsmooth=gray settings \ + title_uk="Увімкнути субпіксельне згладжування шрифту" \ + title="Enable subpixel font smoothing" + +load_fontsmooth() +{ + case "$1" in + disable) FontSmoothing=0; FontSmoothingOrientation=1; FontSmoothingType=0;; + gray|grey) FontSmoothing=2; FontSmoothingOrientation=1; FontSmoothingType=1;; + bgr) FontSmoothing=2; FontSmoothingOrientation=0; FontSmoothingType=2;; + rgb) FontSmoothing=2; FontSmoothingOrientation=1; FontSmoothingType=2;; + *) w_die "unknown font smoothing type $1";; + esac + + echo "Setting font smoothing to $1" + + cat > "${W_TMP}"/fontsmooth.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Control Panel\\Desktop] +"FontSmoothing"="${FontSmoothing}" +"FontSmoothingGamma"=dword:00000578 +"FontSmoothingOrientation"=dword:0000000${FontSmoothingOrientation} +"FontSmoothingType"=dword:0000000${FontSmoothingType} + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\fontsmooth.reg +} + +#---------------------------------------------------------------- +# Mac Driver settings + +w_metadata macdriver=mac settings \ + title_uk="Увімкнути рідний Mac Quartz драйвер (за замовчуванням)" \ + title="Enable the Mac native Quartz driver (default)" +w_metadata macdriver=x11 settings \ + title_uk="Вимкнути рідний Mac Quartz драйвер та використовувати замість нього X11" \ + title="Disable the Mac native Quartz driver, use X11 instead" + +load_macdriver() +{ + echo "Setting MacDriver to ${arg}" + cat > "${W_TMP}"/set-mac.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Drivers] +"Graphics"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-mac.reg +} + +#---------------------------------------------------------------- + +w_metadata mackeyremap=both settings \ + title="Enable mapping opt->alt and cmd->ctrl keys for the Mac native driver" +w_metadata mackeyremap=left settings \ + title="Enable mapping of left opt->alt and cmd->ctrl keys for the Mac native driver" +w_metadata mackeyremap=none settings \ + title="Do not remap keys for the Mac native driver (default)" + +load_mackeyremap() +{ + case "$1" in + both|y) arg=both; _W_arg_l=y; _W_arg_r=y ;; + left) arg=left; _W_arg_l=y; _W_arg_r=n ;; + none|n) arg=none; _W_arg_l=n; _W_arg_r=n ;; + *) w_die "illegal value $1 for MacKeyRemap";; + esac + + echo "Setting MacKeyRemap to ${arg}" + cat > "${W_TMP}"/set-mackeyremap.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Mac Driver] +"LeftCommandIsCtrl"="${_W_arg_l}" +"LeftOptionIsAlt"="${_W_arg_l}" +"RightCommandIsCtrl"="${_W_arg_r}" +"RightOptionIsAlt"="${_W_arg_r}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-mackeyremap.reg + + unset _W_arg_l _W_arg_r +} + +#---------------------------------------------------------------- +# X11 Driver settings + +w_metadata grabfullscreen=y settings \ + title_uk="Примусове захоплення курсору для повноекранних вікон (необхідно для деяких ігор)" \ + title="Force cursor clipping for full-screen windows (needed by some games)" +w_metadata grabfullscreen=n settings \ + title_uk="Вимкнути примусове захоплення курсору для повноекранних вікон (за замовчуванням)" \ + title="Disable cursor clipping for full-screen windows (default)" + +load_grabfullscreen() +{ + case "$1" in + y|n) arg=$1;; + *) w_die "illegal value $1 for GrabFullscreen";; + esac + + echo "Setting GrabFullscreen to ${arg}" + cat > "${W_TMP}"/set-gfs.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver] +"GrabFullscreen"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-gfs.reg +} + +w_metadata windowmanagerdecorated=y settings \ + title_uk="Дозволити менеджеру вікон декорувати вікна (за замовчуванням)" \ + title="Allow the window manager to decorate windows (default)" +w_metadata windowmanagerdecorated=n settings \ + title_uk="Не дозволяти менеджеру вікон декорувати вікна" \ + title="Prevent the window manager from decorating windows" + +#---------------------------------------------------------------- + +w_metadata usetakefocus=y settings \ + title_cz="Aktivovat UseTakeFocus" \ + title_uk="Увімкнути фокусування на вікні" \ + title_sk="Aktivovať UseTakeFocus" \ + title_tlh="Qorwagh buSchoH \'e\' chu\'" \ + title="Enable UseTakeFocus" +w_metadata usetakefocus=n settings \ + title_cz="Deaktivovat UseTakeFocus (výchozí)" \ + title_uk="Вимкнути фокусування на вікні (за замовчуванням)" \ + title_sk="Deaktivovať UseTakeFocus (výchozí)" \ + title_tlh="Qorwagh buSchoH \'e\' chu\'Ha\' (DuH choHlu\'pu\'be\'bogh)" \ + title="Disable UseTakeFocus (default)" + +load_usetakefocus() +{ + case "$1" in + y) arg="Y";; + n) arg="N";; + *) w_die "illegal value $1 for UseTakeFocus";; + esac + + echo "Setting UseTakeFocus to ${arg}" + cat > "${W_TMP}"/set-usetakefocus.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver] +"UseTakeFocus"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-usetakefocus.reg +} + +#---------------------------------------------------------------- + +load_windowmanagerdecorated() +{ + case "$1" in + y|n) arg=$1;; + *) w_die "illegal value $1 for Decorated";; + esac + + echo "Setting Decorated to ${arg}" + cat > "${W_TMP}"/set-wmd.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver] +"Decorated"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-wmd.reg +} + +w_metadata windowmanagermanaged=y settings \ + title_uk="Дозволити менеджеру вікон керування вікнами (за замовчуванням)" \ + title="Allow the window manager to control windows (default)" +w_metadata windowmanagermanaged=n settings \ + title_uk="Не дозволяти менеджеру вікон керування вікнами" \ + title="Prevent the window manager from controlling windows" + +#---------------------------------------------------------------- + +load_windowmanagermanaged() +{ + case "$1" in + y|n) arg=$1;; + *) w_die "illegal value $1 for Managed";; + esac + + echo "Setting Managed to ${arg}" + cat > "${W_TMP}"/set-wmm.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver] +"Managed"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-wmm.reg +} + +#---------------------------------------------------------------- + +w_metadata vd=off settings \ + title_uk="Вимкнути віртуальний робочий стіл" \ + title="Disable virtual desktop" +w_metadata vd=640x480 settings \ + title_uk="Увімкнути віртуальний робочий стіл та встановити розмір 640x480" \ + title="Enable virtual desktop, set size to 640x480" +w_metadata vd=800x600 settings \ + title_uk="Увімкнути віртуальний робочий стіл та встановити розмір 800x600" \ + title="Enable virtual desktop, set size to 800x600" +w_metadata vd=1024x768 settings \ + title_uk="Увімкнути віртуальний робочий стіл та встановити розмір 1024x768" \ + title="Enable virtual desktop, set size to 1024x768" +w_metadata vd=1280x1024 settings \ + title_uk="Увімкнути віртуальний робочий стіл та встановити розмір 1280x1024" \ + title="Enable virtual desktop, set size to 1280x1024" +w_metadata vd=1440x900 settings \ + title_uk="Увімкнути віртуальний робочий стіл та встановити розмір 1440x900" \ + title="Enable virtual desktop, set size to 1440x900" + +load_vd() +{ + size="$1" + case ${size} in + off|disabled) + cat > "${W_TMP}"/vd.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Explorer] +"Desktop"=- +[HKEY_CURRENT_USER\\Software\\Wine\\Explorer\\Desktops] +"Default"=- + +_EOF_ + ;; + [1-9]*x[1-9]*) + cat > "${W_TMP}"/vd.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Explorer] +"Desktop"="Default" +[HKEY_CURRENT_USER\\Software\\Wine\\Explorer\\Desktops] +"Default"="${size}" + +_EOF_ + ;; + *) + w_die "you want a virtual desktop of ${size}? I don't understand." + ;; + esac + w_try_regedit "${W_TMP_WIN}"/vd.reg +} + +#---------------------------------------------------------------- +# MIME-type file associations settings + +w_metadata mimeassoc=on settings \ + title="Enable exporting MIME-type file associations to the native desktop (default)" +w_metadata mimeassoc=off settings \ + title="Disable exporting MIME-type file associations to the native desktop" + +load_mimeassoc() +{ + case "$1" in + off) arg=N;; + on) arg=Y;; + *) w_die "illegal value $1 for mimeassoc";; + esac + + echo "Setting mimeassoc to ${arg}" + cat > "${W_TMP}"/set-mimeassoc.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\FileOpenAssociations] +"Enable"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP}"/set-mimeassoc.reg +} + +#### +# settings->direct3d + +winetricks_set_wined3d_var() +{ + # Filter out/correct bad or partial values + # Confusing because dinput uses 'disable', but d3d uses 'disabled' + # see wined3d_dll_init() in dlls/wined3d/wined3d_main.c + # and DllMain() in dlls/ddraw/main.c + case $2 in + disable*) arg=disabled;; + enable*) arg=enabled;; + hard*) arg=hardware;; + repack) arg=repack;; + arb|backbuffer|fbo|gdi|gl|glsl|no3d|none|readdraw|readtex|texdraw|textex|vulkan|auto) arg=$2;; + [0-9]*) arg=$2;; + *) w_die "illegal value $2 for $1";; + esac + + echo "Setting Direct3D/$1 to ${arg}" + cat > "${W_TMP}"/set-wined3d.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Direct3D] +"$1"="${arg}" + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-wined3d.reg +} + +#---------------------------------------------------------------- +# CheckFloatConstants settings + +w_metadata cfc=enabled settings \ + title_uk="Увімкнути CheckFloatConstants" \ + title="Enable CheckFloatConstants" +w_metadata cfc=disabled settings \ + title_uk="Вимкнути CheckFloatConstants (за замовчуванням)" \ + title="Disable CheckFloatConstants (default)" + +load_cfc() +{ + winetricks_set_wined3d_var CheckFloatConstants "$1" +} +#---------------------------------------------------------------- +# CSMT settings + +w_metadata csmt=force settings \ + title_uk="Увімкнути та примусити серіалізацію команд OpenGL або Vulkan між кількома потоками команд в одній програмі" \ + title="Enable and force serialisation of OpenGL or Vulkan commands between multiple command streams in the same application" +w_metadata csmt=on settings \ + title_uk="Увімкнути Command Stream Multithreading (за замовчуванням)" \ + title="Enable Command Stream Multithreading (default)" +w_metadata csmt=off settings \ + title_uk="Вимкнути Command Stream Multithreading"\ + title="Disable Command Stream Multithreading" + +load_csmt() +{ + case "$1" in + off) arg=0;; + on) arg=1;; + force) arg=3;; + *) w_die "illegal value $1 for csmt";; + esac + + echo "Setting csmt to ${arg}" + cat > "${W_TMP}"/set-csmt.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Direct3D] +"csmt"=dword:${arg} + +_EOF_ + w_try_regedit "${W_TMP}"/set-csmt.reg +} + +#---------------------------------------------------------------- +# DirectDraw settings + +w_metadata gsm=0 settings \ + title_uk="Встановити MaxShaderModelGS на 0" \ + title="Set MaxShaderModelGS to 0" +w_metadata gsm=1 settings \ + title_uk="Встановити MaxShaderModelGS на 1" \ + title="Set MaxShaderModelGS to 1" +w_metadata gsm=2 settings \ + title_uk="Встановити MaxShaderModelGS на 2" \ + title="Set MaxShaderModelGS to 2" +w_metadata gsm=3 settings \ + title_uk="Встановити MaxShaderModelGS на 3" \ + title="Set MaxShaderModelGS to 3" + +load_gsm() +{ + winetricks_set_wined3d_var MaxShaderModelGS "$1" +} + +#---------------------------------------------------------------- + +w_metadata npm=repack settings \ + title_uk="Встановити NonPower2Mode на repack" \ + title="Set NonPower2Mode to repack" + +load_npm() +{ + winetricks_set_wined3d_var NonPower2Mode "$1" +} + +#---------------------------------------------------------------- + +w_metadata orm=fbo settings \ + title_uk="Встановити OffscreenRenderingMode=fbo (за замовчуванням)" \ + title="Set OffscreenRenderingMode=fbo (default)" +w_metadata orm=backbuffer settings \ + title_uk="Встановити OffscreenRenderingMode=backbuffer" \ + title="Set OffscreenRenderingMode=backbuffer" + +load_orm() +{ + winetricks_set_wined3d_var OffscreenRenderingMode "$1" +} + +#---------------------------------------------------------------- + +w_metadata psm=0 settings \ + title_uk="Встановити MaxShaderModelPS на 0" \ + title="Set MaxShaderModelPS to 0" +w_metadata psm=1 settings \ + title_uk="Встановити MaxShaderModelPS на 1" \ + title="Set MaxShaderModelPS to 1" +w_metadata psm=2 settings \ + title_uk="Встановити MaxShaderModelPS на 2" \ + title="Set MaxShaderModelPS to 2" +w_metadata psm=3 settings \ + title_uk="Встановити MaxShaderModelPS на 3" \ + title="Set MaxShaderModelPS to 3" + +load_psm() +{ + winetricks_set_wined3d_var MaxShaderModelPS "$1" +} + +#---------------------------------------------------------------- + +w_metadata shader_backend=glsl settings \ + title_uk="Встановити shader_backend на glsl" \ + title="Set shader_backend to glsl" +w_metadata shader_backend=arb settings \ + title_uk="Встановити shader_backend на arb" \ + title="Set shader_backend to arb" +w_metadata shader_backend=none settings \ + title_uk="Встановити shader_backend на none" \ + title="Set shader_backend to none" + +load_shader_backend() +{ + winetricks_set_wined3d_var shader_backend "$1" +} + +#---------------------------------------------------------------- + +w_metadata ssm=disabled settings \ + title_uk="Вимкнути Struct Shader Math (за замовчуванням)" \ + title="Disable Struct Shader Math (default)" +w_metadata ssm=enabled settings \ + title_uk="Увімкнути Struct Shader Math"\ + title="Enable Struct Shader Math" + +load_ssm() +{ + case "$1" in + disabled) arg=0;; + enabled) arg=1;; + *) w_die "illegal value $1 for csmt";; + esac + + echo "Setting strict_shader_math to ${arg}" + cat > "${W_TMP}"/set-ssm.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Direct3D] +"strict_shader_math"=dword:${arg} + +_EOF_ + w_try_regedit "${W_TMP}"/set-ssm.reg +} + +#---------------------------------------------------------------- + +w_metadata renderer=gdi settings \ + title_uk="Встановити renderer на gdi" \ + title="Set renderer to gdi" +w_metadata renderer=gl settings \ + title_uk="Встановити renderer на gl" \ + title="Set renderer to gl" +w_metadata renderer=no3d settings \ + title_uk="Встановити renderer на no3d" \ + title="Set renderer to no3d" +w_metadata renderer=vulkan settings \ + title_uk="Встановити renderer на vulkan" \ + title="Set renderer to vulkan" + +load_renderer() +{ + winetricks_set_wined3d_var renderer "$1" +} + +#----------------------------------------------------------------= + +w_metadata rtlm=auto settings \ + title_uk="Встановити RenderTargetLockMode на авто (за замовчуванням)" \ + title="Set RenderTargetLockMode to auto (default)" +w_metadata rtlm=disabled settings \ + title_uk="Вимкнути RenderTargetLockMode" \ + title="Set RenderTargetLockMode to disabled" +w_metadata rtlm=readdraw settings \ + title_uk="Встановити RenderTargetLockMode на readdraw" \ + title="Set RenderTargetLockMode to readdraw" +w_metadata rtlm=readtex settings \ + title_uk="Встановити RenderTargetLockMode на readtex" \ + title="Set RenderTargetLockMode to readtex" +w_metadata rtlm=texdraw settings \ + title_uk="Встановити RenderTargetLockMode на texdraw" \ + title="Set RenderTargetLockMode to texdraw" +w_metadata rtlm=textex settings \ + title_uk="Встановити RenderTargetLockMode на textex" \ + title="Set RenderTargetLockMode to textex" + +load_rtlm() +{ + winetricks_set_wined3d_var RenderTargetLockMode "$1" +} + +#---------------------------------------------------------------- + +w_metadata set_mididevice settings \ + title="Set MIDImap device to the value specified in the MIDI_DEVICE environment variable" + +load_set_mididevice() +{ + if [ -z "${MIDI_DEVICE}" ]; then + MIDI_DEVICE=$(w_question "Please specify MIDImap device: ") + [ -z "${MIDI_DEVICE}" ] && w_die "Please specify device in MIDI_DEVICE environment variable." + fi + + echo "Setting MIDI device to \"${MIDI_DEVICE}\"" + cat > "${W_TMP}"/set-mididevice.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap] +"CurrentInstrument"="${MIDI_DEVICE}" +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-mididevice.reg +} + +#---------------------------------------------------------------- + +w_metadata videomemorysize=default settings \ + title_uk="Дати можливість Wine визначити розмір відеопам'яті" \ + title="Let Wine detect amount of video card memory" +w_metadata videomemorysize=512 settings \ + title_uk="Повідомити Wine про 512МБ відеопам'яті" \ + title="Tell Wine your video card has 512MB RAM" +w_metadata videomemorysize=1024 settings \ + title_uk="Повідомити Wine про 1024МБ відеопам'яті" \ + title="Tell Wine your video card has 1024MB RAM" +w_metadata videomemorysize=2048 settings \ + title_uk="Повідомити Wine про 2048МБ відеопам'яті" \ + title="Tell Wine your video card has 2048MB RAM" + +load_videomemorysize() +{ + size="$1" + echo "Setting video memory size to ${size}" + + case ${size} in + default) + + cat > "${W_TMP}"/set-video.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Direct3D] +"VideoMemorySize"=- + +_EOF_ + ;; + *) + cat > "${W_TMP}"/set-video.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Direct3D] +"VideoMemorySize"="${size}" + +_EOF_ + ;; + esac + w_try_regedit "${W_TMP_WIN}"\\set-video.reg +} + +#---------------------------------------------------------------- + +w_metadata vsm=0 settings \ + title_uk="Встановити MaxShaderModelVS на 0" \ + title="Set MaxShaderModelVS to 0" +w_metadata vsm=1 settings \ + title_uk="Встановити MaxShaderModelVS на 1" \ + title="Set MaxShaderModelVS to 1" +w_metadata vsm=2 settings \ + title_uk="Встановити MaxShaderModelVS на 2" \ + title="Set MaxShaderModelVS to 2" +w_metadata vsm=3 settings \ + title_uk="Встановити MaxShaderModelVS на 3" \ + title="Set MaxShaderModelVS to 3" + +load_vsm() +{ + winetricks_set_wined3d_var MaxShaderModelVS "$1" +} + +#### +# settings->debug + +#---------------------------------------------------------------- + +w_metadata autostart_winedbg=enabled settings \ + title="Automatically launch winedbg when an unhandled exception occurs (default)" +w_metadata autostart_winedbg=disabled settings \ + title="Prevent winedbg from launching when an unhandled exception occurs" + +load_autostart_winedbg() +{ + case "${arg}" in + # accidentally commited as enable/disable, so accept that, but prefer enabled/disabled + enable|enabled) _W_debugger_value="winedbg --auto %ld %ld";; + disable|disabled) _W_debugger_value="false";; + *) w_die "Unexpected argument '${arg}'. Should be enable/disable";; + esac + + echo "Setting HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\Debugger to '${arg}'" + cat > "${W_TMP}"/autostart_winedbg.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug] +"Debugger"="${_W_debugger_value}" +_EOF_ + + w_try_regedit "${W_TMP_WIN}"\\autostart_winedbg.reg + w_backup_reg_file "${W_TMP}"/autostart_winedbg.reg + + unset _W_debugger_value +} + +#---------------------------------------------------------------- + +w_metadata heapcheck settings \ + title_uk="Увімкнути накопичувальну перевірку GlobalFlag" \ + title="Enable heap checking with GlobalFlag" + +load_heapcheck() +{ + cat > "${W_TMP}"/heapcheck.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager] +"GlobalFlag"=dword:00200030 + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\heapcheck.reg +} + +#---------------------------------------------------------------- + +w_metadata nocrashdialog settings \ + title_uk="Вимкнути діалог про помилку" \ + title="Disable crash dialog" + +load_nocrashdialog() +{ + echo "Disabling graphical crash dialog" + cat > "${W_TMP}"/crashdialog.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\WineDbg] +"ShowCrashDialog"=dword:00000000 + +_EOF_ + w_try_cd "${W_TMP}" + w_try_regedit crashdialog.reg +} + +w_metadata set_userpath settings \ + title_uk="" \ + title="set user PATH variable in wine prefix specified by native and/or wine paths in WINEPATH environment variable with ';' as path separator" + +load_set_userpath() +{ + wineuserpath=$(winepath -w "${WINEPATH}" | sed 's,\\,\\\\,g') + cat > "${W_TMP}"/setuserpath.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Environment] +"PATH"="${wineuserpath}" + +_EOF_ + w_try_cd "${W_TMP}" + w_try_regedit setuserpath.reg +} + +#### +# settings->misc + +w_metadata alldlls=default settings \ + title_uk="Видалити всі перевизначення DLL" \ + title="Remove all DLL overrides" +w_metadata alldlls=builtin settings \ + title_uk="Перевизначити найбільш поширені DLL на вбудовані" \ + title="Override most common DLLs to builtin" + +load_alldlls() +{ + case "$1" in + default) w_override_no_dlls ;; + builtin) w_override_all_dlls ;; + esac +} + +#---------------------------------------------------------------- + +w_metadata bad settings \ + title="Fake verb that always returns false" + +load_bad() +{ + w_die "${W_PACKAGE} failed!" +} + +#---------------------------------------------------------------- + +w_metadata forcemono settings \ + title_uk="Примусове використання mono замість .NET (для налагодження)" \ + title="Force using Mono instead of .NET (for debugging)" + +load_forcemono() +{ + w_override_dlls native mscoree + w_override_dlls disabled mscorsvw.exe +} + +#---------------------------------------------------------------- + +w_metadata good settings \ + title="Fake verb that always returns true" + +load_good() +{ + w_info "${W_PACKAGE} succeeded!" +} + +#---------------------------------------------------------------- + +w_metadata hidewineexports=enable settings \ + title="Enable hiding Wine exports from applications (wine-staging)" +w_metadata hidewineexports=disable settings \ + title="Disable hiding Wine exports from applications (wine-staging)" + +load_hidewineexports() +{ + # Wine exports some functions allowing apps to query the Wine version and + # information about the host environment. Using these functions, some apps + # will intentionally terminate if they can detect that they are running in + # a Wine environment. + # + # Hiding these Wine exports is only available in wine-staging. + # See https://bugs.winehq.org/show_bug.cgi?id=38656 + case ${arg} in + enable) + _W_registry_value="\"Y\"" + ;; + disable) + _W_registry_value="-" + ;; + *) w_die "Unexpected argument, ${arg}";; + esac + + cat > "${W_TMP}"/set-wineexports.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine] +"HideWineExports"=${_W_registry_value} + +_EOF_ + w_try_regedit "${W_TMP}"/set-wineexports.reg +} + +#---------------------------------------------------------------- + +w_metadata hosts settings \ + title_uk="Додати порожні файли у C:\\windows\\system32\\drivers\\etc\\{hosts,services}" \ + title="Add empty C:\\windows\\system32\\drivers\\etc\\{hosts,services} files" + +load_hosts() +{ + # Create fake system32\drivers\etc\hosts and system32\drivers\etc\services files. + # The hosts file is used to map network names to IP addresses without DNS. + # The services file is used map service names to network ports. + # Some apps depend on these files, but they're not implemented in Wine. + # Fortunately, empty files in the correct location satisfy those apps. + # See https://bugs.winehq.org/show_bug.cgi?id=12076 + + # It's in system32 for both win32/win64 + mkdir -p "${W_WINDIR_UNIX}"/system32/drivers/etc + touch "${W_WINDIR_UNIX}"/system32/drivers/etc/hosts + touch "${W_WINDIR_UNIX}"/system32/drivers/etc/services +} + +#---------------------------------------------------------------- + +w_metadata isolate_home settings \ + title_uk="Видалити посилання на вино преміум на \$HOME" \ + title="Remove wineprefix links to \$HOME" + +load_isolate_home() +{ + w_skip_windows isolate_home && return + + _olddir="$(pwd)" + w_try_cd "${WINEPREFIX}/drive_c/users/${USER}" + for x in *; do + if test -h "${x}" && test -d "${x}"; then + rm -f "${x}" + mkdir -p "${x}" + fi + done + w_try_cd "${_olddir}" + unset _olddir + + # Workaround for: + # https://bugs.winehq.org/show_bug.cgi?id=22450 (sandbox verb) + # https://bugs.winehq.org/show_bug.cgi?id=22974 (isolate_home, sandbox verbs) + echo disable > "${WINEPREFIX}/.update-timestamp" +} + +#---------------------------------------------------------------- + +w_metadata native_mdac settings \ + title_uk="Перевизначити odbc32, odbccp32 та oledb32" \ + title="Override odbc32, odbccp32 and oledb32" + +load_native_mdac() +{ + # Set those overrides globally so user programs get MDAC's ODBC + # instead of Wine's unixodbc + + # https://github.com/Winetricks/winetricks/issues/1447 + if w_wine_version_in 4.22, ; then + w_override_dlls native,builtin msado15 + fi + + # https://github.com/Winetricks/winetricks/issues/1448 + if w_wine_version_in ,4.22 ; then + w_override_dlls native,builtin odbccp32 + fi + + w_override_dlls native,builtin mtxdm odbc32 oledb32 +} + +#---------------------------------------------------------------- + +w_metadata native_oleaut32 settings \ + title_uk="Перевизначити oleaut32" \ + title="Override oleaut32" + +load_native_oleaut32() +{ + w_override_dlls native,builtin oleaut32 +} + +#---------------------------------------------------------------- + +w_metadata remove_mono settings \ + title_uk="Видалити вбудоване wine-mono" \ + title="Remove builtin wine-mono" + +load_remove_mono() +{ + # Wine before 4.6 installs 'Wine Mono' + # Beginning in 4.6, if using a shared install (i.e., a distro mono package or a tarball manually + # extracted to /usr/share/wine/mono, or equivalent), only 'Wine Mono Windows Support' will be installed. + # If using the old .msi installer, *both* tarballs are installed. + # + # So, we uninstall anything that has 'Wine Mono' in the name to handle both cases. + # If wine uninstaller can't find the application it will return 0 anyway. + mono_uuid="$("${WINE_ARCH}" uninstaller --list | grep 'Wine Mono' | cut -f1 -d\|)" + if test "${mono_uuid}"; then + for uuid in ${mono_uuid}; do + "${WINE_ARCH}" uninstaller --remove "${uuid}" + done + else + # Bail out if mono isn't installed, so we don't break .Net setups + w_warn "Mono does not appear to be installed." + return + fi + + # FIXME: verify on pristine Windows XP: + if w_workaround_wine_bug 34803; then + "${WINE_ARCH}" reg delete 'HKLM\\Software\\Microsoft\\.NETFramework\\v2.0.50727\\SBSDisabled' /f + fi + + "${WINE_ARCH}" reg delete "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP\\v3.5" /f || true + "${WINE_ARCH}" reg delete "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP\\v4" /f || true + + w_try rm -f "${W_WINDIR_UNIX}/system32/mscoree.dll" + if [ "${W_ARCH}" = "win64" ]; then + w_try rm -f "${W_WINDIR_UNIX}/syswow64/mscoree.dll" + fi +} + + +#---------------------------------------------------------------- + +w_metadata sandbox settings \ + title_uk="Пісочниця wineprefix - видалити посилання до HOME" \ + title="Sandbox the wineprefix - remove links to \$HOME" + +load_sandbox() +{ + w_skip_windows sandbox && return + + # Unmap drive Z + w_try rm -f "${WINEPREFIX}/dosdevices/z:" + + # Disable unixfs + # Unfortunately, when you run with a different version of Wine, Wine will recreate this key. + # See https://bugs.winehq.org/show_bug.cgi?id=22450 + w_try_regedit /D "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\Namespace\\{9D20AAE8-0625-44B0-9CA7-71889C2254D9}" + + w_call isolate_home +} + +#### +# settings->sound + +#---------------------------------------------------------------- + +w_metadata sound=alsa settings \ + title_uk="Встановити звуковий драйвер ALSA" \ + title="Set sound driver to ALSA" +w_metadata sound=coreaudio settings \ + title_uk="Встановити звуковий драйвер Mac CoreAudio" \ + title="Set sound driver to Mac CoreAudio" +w_metadata sound=disabled settings \ + title_uk="Вимкнути звуковий драйвер" \ + title="Set sound driver to disabled" +w_metadata sound=oss settings \ + title_uk="Встановити звуковий драйвер OSS" \ + title="Set sound driver to OSS" +w_metadata sound=pulse settings \ + title_uk="Встановити звуковий драйвер PulseAudio" \ + title="Set sound driver to PulseAudio" + +load_sound() +{ + echo "Setting sound driver to $1" + cat > "${W_TMP}"/set-sound.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\Drivers] +"Audio"="$1" + +_EOF_ + w_try_regedit "${W_TMP_WIN}"\\set-sound.reg +} + +# settings->winversions +#---------------------------------------------------------------- + +w_metadata nt351 settings \ + title_uk="Встановити версію Windows NT 3.51" \ + title="Set Windows version to Windows NT 3.51" + +load_nt351() +{ + w_package_unsupported_win64 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=41559" "" "5.7" + w_set_winver nt351 +} + +#---------------------------------------------------------------- + +w_metadata nt40 settings \ + title_uk="Встановити версію Windows NT 4.0" \ + title="Set Windows version to Windows NT 4.0" + +load_nt40() +{ + w_package_unsupported_win64 + w_set_winver nt40 +} + +#---------------------------------------------------------------- + +w_metadata vista settings \ + title_uk="Встановити версію Windows Vista" \ + title="Set Windows version to Windows Vista" + +load_vista() +{ + w_set_winver vista +} + +#---------------------------------------------------------------- + +w_metadata win20 settings \ + title_uk="Встановити версію Windows 2.0" \ + title="Set Windows version to Windows 2.0" + +load_win20() +{ + w_package_unsupported_win64 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=41559" "" "5.7" + w_set_winver win20 +} + +#---------------------------------------------------------------- + +w_metadata win2k settings \ + title_uk="Встановити версію Windows 2000" \ + title="Set Windows version to Windows 2000" + +load_win2k() +{ + w_package_unsupported_win64 + w_set_winver win2k +} + +#---------------------------------------------------------------- + +w_metadata win2k3 settings \ + title_uk="Встановити версію Windows 2003" \ + title="Set Windows version to Windows 2003" + +load_win2k3() +{ + w_set_winver win2k3 +} + +#---------------------------------------------------------------- + +w_metadata win2k8 settings \ + title_uk="Встановити версію Windows 2008" \ + title="Set Windows version to Windows 2008" + +load_win2k8() +{ + w_set_winver win2k8 +} + +#---------------------------------------------------------------- + +w_metadata win2k8r2 settings \ + title_uk="Встановити версію Windows 2008 R2" \ + title="Set Windows version to Windows 2008 R2" + +load_win2k8r2() +{ + w_set_winver win2k8r2 +} + +#---------------------------------------------------------------- + +w_metadata win30 settings \ + title_uk="Встановити версію Windows 3.0" \ + title="Set Windows version to Windows 3.0" + +load_win30() +{ + w_package_unsupported_win64 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=41559" "" "5.7" + w_set_winver win30 +} + +#---------------------------------------------------------------- + +w_metadata win31 settings \ + title_uk="Встановити версію Windows 3.1" \ + title="Set Windows version to Windows 3.1" + +load_win31() +{ + w_package_unsupported_win64 + w_set_winver win31 +} + +#---------------------------------------------------------------- + +w_metadata win7 settings \ + title_uk="Встановити версію Windows 7" \ + title="Set Windows version to Windows 7" + +load_win7() +{ + w_set_winver win7 +} + +#---------------------------------------------------------------- + +w_metadata win8 settings \ + title_uk="Встановити версію Windows 8" \ + title="Set Windows version to Windows 8" + +load_win8() +{ + w_set_winver win8 +} + +#---------------------------------------------------------------- + +w_metadata win81 settings \ + title_uk="Встановити версію Windows 8.1" \ + title="Set Windows version to Windows 8.1" + +load_win81() +{ + w_set_winver win81 +} + +#---------------------------------------------------------------- + +w_metadata win10 settings \ + title_uk="Встановити версію Windows 10" \ + title="Set Windows version to Windows 10" + +load_win10() +{ + w_set_winver win10 +} + +#---------------------------------------------------------------- + +w_metadata win95 settings \ + title_uk="Встановити версію Windows 95" \ + title="Set Windows version to Windows 95" + +load_win95() +{ + w_package_unsupported_win64 + w_set_winver win95 +} + +#---------------------------------------------------------------- + +w_metadata win98 settings \ + title_uk="Встановити версію Windows 98" \ + title="Set Windows version to Windows 98" + +load_win98() +{ + w_package_unsupported_win64 + w_set_winver win98 +} + +#---------------------------------------------------------------- + +w_metadata winme settings \ + title_uk="Встановити версію Windows ME" \ + title="Set Windows version to Windows ME" + +load_winme() +{ + w_package_unsupported_win64 + w_package_broken "https://bugs.winehq.org/show_bug.cgi?id=41559" "" "5.7" + w_set_winver winme +} + +#---------------------------------------------------------------- + +# Really, we should support other values, since winetricks did +w_metadata winver= settings \ + title_uk="Встановити версію Windows за замовчуванням (Windows 7)" \ + title="Set Windows version to default (win7)" + +load_winver() +{ + w_set_winver win7 +} + +#---------------------------------------------------------------- + +w_metadata winxp settings \ + title_uk="Встановити версію Windows XP" \ + title="Set Windows version to Windows XP" + +load_winxp() +{ + w_set_winver winxp +} + +#---- Main Program ---- + +winetricks_stats_save() +{ + # Save opt-in status + if test "${WINETRICKS_STATS_REPORT}"; then + if test ! -d "${W_CACHE}"; then + mkdir -p "${W_CACHE}" + fi + echo "${WINETRICKS_STATS_REPORT}" > "${W_CACHE}"/track_usage + fi +} + +winetricks_stats_init() +{ + # Load opt-in status if not already set by a command-line option + if test ! "${WINETRICKS_STATS_REPORT}" && test -f "${W_CACHE}"/track_usage; then + WINETRICKS_STATS_REPORT=$(cat "${W_CACHE}"/track_usage) + fi + + if test ! "${WINETRICKS_STATS_REPORT}"; then + # No opt-in status found. If GUI active, ask user whether they would like to opt in. + case ${WINETRICKS_GUI} in + zenity) + case ${LANG} in + de*) + title="Einmalige Frage zur Hilfe an der Winetricks Entwicklung" + question="Möchten Sie die Winetricks Entwicklung unterstützen indem Sie Winetricks Statistiken übermitteln lassen? Sie können die Übermittlung jederzeit mit 'winetricks --optout' ausschalten" + thanks="Danke! Sie bekommen diese Frage nicht mehr gestellt. Sie können die Übermittlung jederzeit mit 'winetricks --optout' wieder ausschalten" + declined="OK, Winetricks wird *keine* Statistiken übermitteln. Sie bekommen diese Frage nicht mehr gestellt." + ;; + pl*) + title="Jednorazowe pytanie dotyczące pomocy w rozwoju Winetricks" + question="Czy chcesz pomóc w rozwoju Winetricks pozwalając na wysyłanie statystyk przez program? Możesz wyłączyć tą opcję w każdej chwili z użyciem komendy 'winetricks --optout'." + thanks="Dziękujemy! Nie otrzymasz już tego pytania. Pamiętaj, ze możesz wyłączyć tą opcję komendą 'winetricks --optout'" + declined="OK, Winetricks *nie* będzie wysyłać statystyk. Nie otrzymasz już tego pytania." + ;; + pt*) + title="Pergunta única sobre ajudar no desenvolvimento do Winetricks" + question="Você gostaria de ajudar no desenvolvimento do winetricks, permitindo que o winetricks relate estatísticas? Você pode desativar o relatório a qualquer momento com o comando 'winetricks --optout'" + thanks="Obrigado! Esta pergunta não será feita novamente. Lembre-se, você pode desativar o relatório a qualquer momento com o comando 'winetricks --optout'" + declined="OK, winetricks *não* reportará estatísticas. Esta pergunta não será feita novamente." + ;; + ru*) + title="Помощь в разработке Winetricks" + question="Вы хотите помочь разработке winetricks, отправляя статистику? Вы можете отключить отправку статистики в любое время с помощью команды 'winetricks --optout'" + thanks="Спасибо! Этот вопрос больше не появится. Помните: вы можете отключить отправку статистики в любое время с помощью команды 'winetricks --optout'" + declined="OK, winetricks НЕ будет отправлять статистику. Этот вопрос больше не появится." + ;; + uk*) + title="Допомога в розробці Winetricks" + question="Ви хочете допомогти в розробці Winetricks дозволивши звітувати статистику?\\nВи можете в будь-який час вимкнути цю опцію за допомогою команди 'winetricks --optout'" + thanks="Дякуємо! Ви більше не отримуватиме це питання знову. Пам'ятайте, що ви можете будь-коли вимкнути звітність за допомогою команди 'winetricks --optout'" + declined="Надсилання звітності Winetricks вимкнено. Ви більше не отримуватиме це питання знову." + ;; + *) + title="One-time question about helping Winetricks development" + question="Would you like to help winetricks development by letting winetricks report statistics? You can turn reporting off at any time with the command 'winetricks --optout'" + thanks="Thanks! You won't be asked this question again. Remember, you can turn reporting off at any time with the command 'winetricks --optout'" + declined="OK, winetricks will *not* report statistics. You won't be asked this question again." + ;; + esac + if ${WINETRICKS_GUI} --question --text "${question}" --title "${title}"; then + ${WINETRICKS_GUI} --info --text "${thanks}" + WINETRICKS_STATS_REPORT=1 + else + ${WINETRICKS_GUI} --info --text "${declined}" + WINETRICKS_STATS_REPORT=0 + fi + winetricks_stats_save + ;; + esac + fi +} + +# Retrieve a short string with the operating system name and version +winetricks_os_description() +{ + ( + case "${W_PLATFORM}" in + windows_cmd) echo "windows" ;; + *) echo "${WINETRICKS_WINE_VERSION}" ;; + esac + ) | tr '\012' ' ' +} + +winetricks_stats_report() +{ + winetricks_download_setup + + # If user has opted in to usage tracking, report what he used (if anything) + case "${WINETRICKS_STATS_REPORT}" in + 1) ;; + *) return;; + esac + + BREADCRUMBS_FILE="${WINETRICKS_WORKDIR}"/breadcrumbs + if test -f "${BREADCRUMBS_FILE}"; then + WINETRICKS_STATS_BREADCRUMBS=$(tr '\012' ' ' < "${BREADCRUMBS_FILE}") + echo "You opted in, so reporting '${WINETRICKS_STATS_BREADCRUMBS}' to the winetricks maintainer so he knows which winetricks verbs get used and which don't. Use --optout to disable future reports." + + report="os=$(winetricks_os_description)&winetricks=${WINETRICKS_VERSION}&breadcrumbs=${WINETRICKS_STATS_BREADCRUMBS}" + report="$(echo "${report}" | sed 's/ /%20/g')" + + # Just do a HEAD request with the raw command line. + # Yes, this can be fooled by caches. That's ok. + + # Note: these downloads are expected to fail (the resource won't exist), so don't use w_try and use '|| true' to ignore the expected errors + if [ "${WINETRICKS_DOWNLOADER}" = "wget" ] ; then + ${torify} wget --timeout "${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --tries "${WINETRICKS_DOWNLOADER_RETRIES}" \ + --spider "http://kegel.com/data/winetricks-usage?${report}" > /dev/null 2>&1 || true + elif [ "${WINETRICKS_DOWNLOADER}" = "curl" ] ; then + ${torify} curl --connect-timeout "${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --retry "${WINETRICKS_DOWNLOADER_RETRIES}" \ + -I "http://kegel.com/data/winetricks-usage?${report}" > /dev/null 2>&1 || true + elif [ "${WINETRICKS_DOWNLOADER}" = "aria2c" ] ; then + ${torify} aria2c \ + ${aria2c_torify_opts:+"${aria2c_torify_opts}"} \ + --connect-timeout="${WINETRICKS_DOWNLOADER_TIMEOUT}" \ + --daemon=false \ + --enable-rpc=false \ + --input-file='' \ + --max-tries="${WINETRICKS_DOWNLOADER_RETRIES}" \ + --save-session='' \ + "http://kegel.com/data/winetricks-usage?${report}" > /dev/null 2>&1 || true + else + w_die "Here be dragons" + fi + fi +} + +winetricks_stats_log_command() +{ + # log what we execute for possible later statistics reporting + echo "$*" >> "${WINETRICKS_WORKDIR}"/breadcrumbs + + # and for the user's own reference later, when figuring out what he did + case "${W_PLATFORM}" in + windows_cmd) _W_LOGDIR="${W_WINDIR_UNIX}"/Temp ;; + *) _W_LOGDIR="${WINEPREFIX}" ;; + esac + + mkdir -p "${_W_LOGDIR}" + echo "$*" >> "${_W_LOGDIR}"/winetricks.log + unset _W_LOGDIR +} + +# Launch a new terminal window if in GUI, or +# spawn a shell in the current window if command line. +# New shell contains proper WINEPREFIX and WINE environment variables. +# May be useful when debugging verbs. +winetricks_shell() +{ + ( + w_try_cd "${W_DRIVE_C}" + export WINE + + case ${WINETRICKS_GUI} in + none) + ${SHELL} + ;; + *) + for term in gnome-terminal konsole Terminal xterm; do + if test "$(command -v ${term} 2>/dev/null)"; then + ${term} + break + fi + done + ;; + esac + ) +} + +# Usage: execute_command verb[=argument] +execute_command() +{ + case "$1" in + *=*) arg=$(echo "$1" | sed 's/.*=//'); cmd=$(echo "$1" | sed 's/=.*//');; + *) cmd="$1"; arg="" ;; + esac + + case "$1" in + # FIXME: avoid duplicated code + apps|benchmarks|dlls|fonts|games|prefix|settings) + WINETRICKS_CURMENU="$1" + ;; + + # Late options + -*) + if ! winetricks_handle_option "$1"; then + winetricks_usage + exit 1 + fi + ;; + + # Hard-coded verbs + main) WINETRICKS_CURMENU=main ;; + help) w_open_webpage https://github.com/Winetricks/winetricks/wiki ;; + list) winetricks_list_all ;; + list-cached) winetricks_list_cached ;; + list-download) winetricks_list_download ;; + list-manual-download) winetricks_list_manual_download ;; + list-installed) winetricks_list_installed ;; + list-all) + old_menu="${WINETRICKS_CURMENU}" + for WINETRICKS_CURMENU in apps benchmarks dlls fonts games prefix settings; do + echo "===== ${WINETRICKS_CURMENU} =====" + winetricks_list_all + done + WINETRICKS_CURMENU="${old_menu}" + ;; + unattended) winetricks_set_unattended 1 ;; + attended) winetricks_set_unattended 0 ;; + arch=*) winetricks_set_winearch "${arg}" ;; + prefix=*) winetricks_set_wineprefix "${arg}" ;; + annihilate) winetricks_annihilate_wineprefix ;; + folder) w_open_folder "${WINEPREFIX}" ;; + winecfg) "${WINE}" winecfg ;; + regedit) "${WINE}" regedit ;; + taskmgr) "${WINE}" taskmgr & ;; + explorer) "${WINE}" explorer & ;; + uninstaller) "${WINE}" uninstaller ;; + shell) winetricks_shell ;; + + # These have to come before *=disabled to avoid looking like DLLs + cfc=disable*) w_call cfc=disabled ;; + fontsmooth=disable*) w_call fontsmooth=disable ;; + mwo=disable*) w_call mwo=disable ;; # FIXME: relax matching so we can handle these spelling differences in verb instead of here + rtlm=disable*) w_call rtlm=disabled ;; + sound=disable*) w_call sound=disabled ;; + ssm=disable*) w_call ssm=disabled ;; + + # Hacks for backwards compatibility + # 2017/03/22: add deprecation notices + cc580) w_warn "Calling cc580 is deprecated, please use comctl32 instead" ; w_call comctl32 ;; + comdlg32.ocx) w_warn "Calling comdlg32.ocx is deprecated, please use comdlg32ocx instead" ; w_call comdlg32ocx ;; + dotnet1) w_warn "Calling dotnet1 is deprecated, please use dotnet11 instead" ; w_call dotnet11 ;; + dotnet2) w_warn "Calling dotnet2 is deprecated, please use dotnet20 instead" ; w_call dotnet20 ;; + ddr=gdi) w_warn "Calling ddr=gdi is deprecated, please use renderer=gdi or renderer=no3d instead" ; w_call renderer=gdi ;; + ddr=opengl) w_warn "Calling ddr=opengl is deprecated, please use renderer=gl instead" ; w_call renderer=gl ;; + dxvk054|dxvk54) w_warn "Calling $1 is deprecated, please use dxvk0054 instead" ; w_call dxvk0054 ;; + dxvk060|dxvk60) w_warn "Calling $1 is deprecated, please use dxvk0060 instead" ; w_call dxvk0060 ;; + dxvk061|dxvk61) w_warn "Calling $1 is deprecated, please use dxvk0061 instead" ; w_call dxvk0061 ;; + dxvk062|dxvk62) w_warn "Calling $1 is deprecated, please use dxvk0062 instead" ; w_call dxvk0062 ;; + dxvk063|dxvk63) w_warn "Calling $1 is deprecated, please use dxvk0063 instead" ; w_call dxvk0063 ;; + dxvk064|dxvk64) w_warn "Calling $1 is deprecated, please use dxvk0064 instead" ; w_call dxvk0064 ;; + dxvk065|dxvk65) w_warn "Calling $1 is deprecated, please use dxvk0065 instead" ; w_call dxvk0065 ;; + dxvk070|dxvk70) w_warn "Calling $1 is deprecated, please use dxvk0070 instead" ; w_call dxvk0070 ;; + dxvk071|dxvk71) w_warn "Calling $1 is deprecated, please use dxvk0071 instead" ; w_call dxvk0071 ;; + dxvk072|dxvk72) w_warn "Calling $1 is deprecated, please use dxvk0072 instead" ; w_call dxvk0072 ;; + dxvk080|dxvk80) w_warn "Calling $1 is deprecated, please use dxvk0080 instead" ; w_call dxvk0080 ;; + dxvk081|dxvk81) w_warn "Calling $1 is deprecated, please use dxvk0081 instead" ; w_call dxvk0081 ;; + dxvk090|dxvk90) w_warn "Calling $1 is deprecated, please use dxvk0090 instead" ; w_call dxvk0090 ;; + dxvk091|dxvk91) w_warn "Calling $1 is deprecated, please use dxvk0091 instead" ; w_call dxvk0091 ;; + dxvk092|dxvk92) w_warn "Calling $1 is deprecated, please use dxvk0092 instead" ; w_call dxvk0092 ;; + dxvk093|dxvk93) w_warn "Calling $1 is deprecated, please use dxvk0093 instead" ; w_call dxvk0093 ;; + dxvk094|dxvk94) w_warn "Calling $1 is deprecated, please use dxvk0094 instead" ; w_call dxvk0094 ;; + dxvk095|dxvk95) w_warn "Calling $1 is deprecated, please use dxvk0095 instead" ; w_call dxvk0095 ;; + dxvk096|dxvk96) w_warn "Calling $1 is deprecated, please use dxvk0096 instead" ; w_call dxvk0096 ;; + dxvk100) w_warn "Calling dxvk100 is deprecated, please use dxvk1000 instead" ; w_call dxvk1000 ;; + dxvk101) w_warn "Calling dxvk101 is deprecated, please use dxvk1001 instead" ; w_call dxvk1001 ;; + dxvk102) w_warn "Calling dxvk102 is deprecated, please use dxvk1002 instead" ; w_call dxvk1002 ;; + dxvk103) w_warn "Calling dxvk103 is deprecated, please use dxvk1003 instead" ; w_call dxvk1003 ;; + dxvk111) w_warn "Calling dxvk111 is deprecated, please use dxvk1011 instead" ; w_call dxvk1011 ;; + dxvk120) w_warn "Calling dxvk120 is deprecated, please use dxvk1020 instead" ; w_call dxvk1020 ;; + dxvk121) w_warn "Calling dxvk121 is deprecated, please use dxvk1021 instead" ; w_call dxvk1021 ;; + dxvk122) w_warn "Calling dxvk122 is deprecated, please use dxvk1022 instead" ; w_call dxvk1022 ;; + dxvk123) w_warn "Calling dxvk123 is deprecated, please use dxvk1023 instead" ; w_call dxvk1023 ;; + dxvk130) w_warn "Calling dxvk130 is deprecated, please use dxvk1030 instead" ; w_call dxvk1030 ;; + dxvk131) w_warn "Calling dxvk131 is deprecated, please use dxvk1031 instead" ; w_call dxvk1031 ;; + dxvk132) w_warn "Calling dxvk132 is deprecated, please use dxvk1032 instead" ; w_call dxvk1032 ;; + dxvk133) w_warn "Calling dxvk133 is deprecated, please use dxvk1033 instead" ; w_call dxvk1033 ;; + dxvk134) w_warn "Calling dxvk134 is deprecated, please use dxvk1034 instead" ; w_call dxvk1034 ;; + dxvk140) w_warn "Calling dxvk140 is deprecated, please use dxvk1040 instead" ; w_call dxvk1040 ;; + dxvk141) w_warn "Calling dxvk141 is deprecated, please use dxvk1041 instead" ; w_call dxvk1041 ;; + dxvk142) w_warn "Calling dxvk142 is deprecated, please use dxvk1042 instead" ; w_call dxvk1042 ;; + dxvk143) w_warn "Calling dxvk143 is deprecated, please use dxvk1043 instead" ; w_call dxvk1043 ;; + dxvk144) w_warn "Calling dxvk144 is deprecated, please use dxvk1044 instead" ; w_call dxvk1044 ;; + dxvk145) w_warn "Calling dxvk145 is deprecated, please use dxvk1045 instead" ; w_call dxvk1045 ;; + dxvk146) w_warn "Calling dxvk146 is deprecated, please use dxvk1046 instead" ; w_call dxvk1046 ;; + dxvk150) w_warn "Calling dxvk150 is deprecated, please use dxvk1050 instead" ; w_call dxvk1050 ;; + dxvk151) w_warn "Calling dxvk151 is deprecated, please use dxvk1051 instead" ; w_call dxvk1051 ;; + dxvk152) w_warn "Calling dxvk152 is deprecated, please use dxvk1052 instead" ; w_call dxvk1052 ;; + dxvk153) w_warn "Calling dxvk153 is deprecated, please use dxvk1053 instead" ; w_call dxvk1053 ;; + dxvk154) w_warn "Calling dxvk154 is deprecated, please use dxvk1054 instead" ; w_call dxvk1054 ;; + dxvk155) w_warn "Calling dxvk155 is deprecated, please use dxvk1055 instead" ; w_call dxvk1055 ;; + dxvk160) w_warn "Calling dxvk160 is deprecated, please use dxvk1060 instead" ; w_call dxvk1060 ;; + dxvk161) w_warn "Calling dxvk161 is deprecated, please use dxvk1061 instead" ; w_call dxvk1061 ;; + dxvk170) w_warn "Calling dxvk170 is deprecated, please use dxvk1070 instead" ; w_call dxvk1070 ;; + dxvk171) w_warn "Calling dxvk171 is deprecated, please use dxvk1071 instead" ; w_call dxvk1071 ;; + dxvk172) w_warn "Calling dxvk172 is deprecated, please use dxvk1072 instead" ; w_call dxvk1072 ;; + dxvk173) w_warn "Calling dxvk173 is deprecated, please use dxvk1073 instead" ; w_call dxvk1073 ;; + dxvk180) w_warn "Calling dxvk180 is deprecated, please use dxvk1080 instead" ; w_call dxvk1080 ;; + dxvk181) w_warn "Calling dxvk181 is deprecated, please use dxvk1081 instead" ; w_call dxvk1081 ;; + dxvk190) w_warn "Calling dxvk190 is deprecated, please use dxvk1090 instead" ; w_call dxvk1090 ;; + dxvk191) w_warn "Calling dxvk191 is deprecated, please use dxvk1091 instead" ; w_call dxvk1091 ;; + dxvk192) w_warn "Calling dxvk192 is deprecated, please use dxvk1092 instead" ; w_call dxvk1092 ;; + dxvk193) w_warn "Calling dxvk193 is deprecated, please use dxvk1093 instead" ; w_call dxvk1093 ;; + dxvk194) w_warn "Calling dxvk194 is deprecated, please use dxvk1094 instead" ; w_call dxvk1094 ;; + + # art2kmin also comes with fm20.dll + fm20) w_warn "Calling fm20 is deprecated, please use controlpad instead" ; w_call controlpad ;; + fontsmooth-bgr) w_warn "Calling fontsmooth-bgr is deprecated, please use fontsmooth=bgr instead" ; w_call fontsmooth=bgr ;; + fontsmooth-disable) w_warn "Calling fontsmooth-disable is deprecated, please use fontsmooth=disable instead" ; w_call fontsmooth=disable ;; + fontsmooth-gray) w_warn "Calling fontsmooth-gray is deprecated, please use fontsmooth=gray instead" ; w_call fontsmooth=gray ;; + fontsmooth-rgb) w_warn "Calling fontsmooth-rgb is deprecated, please use fontsmooth=rgb instead" ; w_call fontsmooth=rgb ;; + glsl=enabled) w_warn "Calling glsl=enabled is deprecated, please use shader_backend=glsl instead" ; w_call shader_backend=glsl ;; + glsl=disabled) w_warn "Calling glsl=disabled is deprecated, please use shader_backend=arb instead" ; w_call shader_backend=arb ;; + glsl-disable) w_warn "Calling glsl-disable is deprecated, please use glsl=disabled instead" ; w_call glsl=disabled ;; + glsl-enable) w_warn "Calling glsl-enable is deprecated, please use glsl=enabled instead" ; w_call glsl=enabled ;; + ie6_full) w_warn "Calling ie6_full is deprecated, please use ie6 instead" ; w_call ie6 ;; + # FIXME: use wsh57 instead? + jscript) w_warn "Calling jscript is deprecated, please use wsh57 instead" ; w_call wsh57 ;; + npm-repack) w_warn "Calling npm-repack is deprecated, please use npm=repack instead" ; w_call npm=repack ;; + oss) w_warn "Calling oss is deprecated, please use sound=oss instead" ; w_call sound=oss ;; + psdkwin7) w_warn "psdkwin7 has been removed, use psdkwin71 instead"; w_call psdkwin71 ;; + python) w_warn "Calling python is deprecated, please use python26 instead" ; w_call python26 ;; + strictdrawordering=enabled) w_warn "Calling strictdrawordering=enabled is deprecated, please use csmt=enabled instead" ; w_call csmt=enabled ;; + strictdrawordering=disabled) w_warn "Calling strictdrawordering=disabled is deprecated, please use csmt=disabled instead" ; w_call csmt=disabled ;; + vbrun60) w_warn "Calling vbrun60 is deprecated, please use vb6run instead" ; w_call vb6run ;; + vcrun2005sp1) w_warn "Calling vcrun2005sp1 is deprecated, please use vcrun2005 instead" ; w_call vcrun2005 ;; + vcrun2008sp1) w_warn "Calling vcrun2008sp1 is deprecated, please use vcrun2008 instead" ; w_call vcrun2008 ;; + wsh56|wsh56js|wsh56vb) w_warn "Calling wsh56 is deprecated, please use wsh57 instead" ; w_call wsh57 ;; + # See https://github.com/Winetricks/winetricks/issues/747 + xact_jun2010) w_warn "Calling xact_jun2010 is deprecated, please use xact instead" ; w_call xact ;; + xlive) w_warn "Calling xlive is deprecated, please use gfw instead" ; w_call gfw ;; + + # Use winecfg if you want a GUI for plain old DLL overrides + alldlls=*) w_call "$1" ;; + *=native) w_do_call native "${cmd}";; + *=builtin) w_do_call builtin "${cmd}";; + *=default) w_do_call default "${cmd}";; + *=disabled) w_do_call disabled "${cmd}";; + vd=*) w_do_call "${cmd}";; + + # Normal verbs, with metadata and load_ functions + *) + if winetricks_metadata_exists "$1"; then + w_call "$1" + else + echo "Unknown arg $1" + winetricks_usage + exit 1 + fi + ;; + esac +} + +if ! test "${WINETRICKS_LIB}"; then + # If user opted out, save that preference now. + winetricks_stats_save + + # If user specifies menu on command line, execute that command, but don't commit to command-line mode + # FIXME: this code is duplicated several times; unify it + if echo "${WINETRICKS_CATEGORIES}" | grep -w "$1" > /dev/null; then + WINETRICKS_CURMENU=$1 + shift + fi + + case "$1" in + die) w_die "we who are about to die salute you." ;; + volnameof=*) + # Debug code. Remove later? + # Since Linux's volname command can't handle DVDs, winetricks has its own, + # implemented using dd, old gum, and some string I had laying around. + # You can try it like this: + # winetricks volnameof=/dev/sr0 + # or + # winetricks volnameof=foo.iso + # This will read the volname from the given image and put it to stdout. + winetricks_volname "${1#volnameof=}" + ;; + "") + if [ -z "${DISPLAY}" ]; then + if [ "$(uname -s)" = "Darwin" ]; then + echo "Running on OSX, but DISPLAY is not set...probably using Mac Driver." + else + echo "DISPLAY not set, not defaulting to gui" + winetricks_usage + exit 0 + fi + fi + + # GUI case + # No non-option arguments given, so read them from GUI, and loop until user quits + if [ ${WINETRICKS_GUI} = "none" ]; then + winetricks_detect_gui + fi + winetricks_detect_sudo + test -z "${WINETRICKS_ISO_MOUNT}" && winetricks_detect_iso_mount + while true; do + case ${WINETRICKS_CURMENU} in + main) verbs=$(winetricks_mainmenu) ;; + prefix) + verbs=$(winetricks_prefixmenu); + # Cheezy hack: choosing 'attended' or 'unattended' leaves you in same menu + case "${verbs}" in + attended) winetricks_set_unattended 0 ; continue;; + unattended) winetricks_set_unattended 1 ; continue;; + esac + ;; + mkprefix) verbs=$(winetricks_mkprefixmenu) ;; + settings) verbs=$(winetricks_settings_menu) ;; + *) verbs="$(winetricks_showmenu)" ;; + esac + + if test "${verbs}" = ""; then + # "user didn't pick anything, back up a level in the menu" + case "${WINETRICKS_CURMENU}-${WINETRICKS_OPT_SHAREDPREFIX}" in + apps-0|benchmarks-0|games-0|main-*) WINETRICKS_CURMENU=prefix ;; + prefix-*) break ;; + *) WINETRICKS_CURMENU=main ;; + esac + elif echo "${WINETRICKS_CATEGORIES}" | grep -w "${verbs}" > /dev/null; then + WINETRICKS_CURMENU=${verbs} + else + winetricks_stats_init + # Otherwise user picked one or more real verbs. + case "${verbs}" in + prefix=*|arch=*) + # prefix menu is special, it only returns one verb, and the + # verb can contain spaces. If a 32bit wineprefix is created via + # the GUI, this may have an "arch=* " prefix + _W_arch=$(echo "${verbs}" | grep -o 'arch=.*' | cut -d' ' -f1) + _W_prefix=$(echo "${verbs}" | grep -o 'prefix=.*') + _W_prefix_name="${_W_prefix#*=}" + if [ -n "${_W_arch}" ]; then + execute_command "${_W_arch}" + fi + execute_command "${_W_prefix}" + # after picking a prefix, want to land in main. + WINETRICKS_CURMENU=main ;; + *) + for verb in ${verbs}; do + execute_command "${verb}" + done + + case "${WINETRICKS_CURMENU}-${WINETRICKS_OPT_SHAREDPREFIX}" in + prefix-*|apps-0|benchmarks-0|games-0) + # After installing isolated app, return to prefix picker + WINETRICKS_CURMENU=prefix + ;; + *) + # Otherwise go to main menu. + WINETRICKS_CURMENU=main + ;; + esac + ;; + esac + fi + done + ;; + *) + winetricks_stats_init + # Command-line case + winetricks_detect_sudo + test -z "${WINETRICKS_ISO_MOUNT}" && winetricks_detect_iso_mount + # User gave command-line arguments, so just run those verbs and exit + for verb; do + case ${verb} in + *.verb) + # Load the verb file + # shellcheck disable=SC1090 + case ${verb} in + */*) . "${verb}" ;; + *) . ./"${verb}" ;; + esac + + # And forget that the verb comes from a file + verb="$(echo "${verb}" | sed 's,.*/,,;s,.verb,,')" + ;; + esac + execute_command "${verb}" + done + ;; + esac + + winetricks_stats_report +fi + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/pandora_agents/plugins/windows/pandora_security_win/src/pandora_security_win.py b/pandora_agents/plugins/windows/pandora_security_win/src/pandora_security_win.py new file mode 100644 index 0000000000..d9ac15f978 --- /dev/null +++ b/pandora_agents/plugins/windows/pandora_security_win/src/pandora_security_win.py @@ -0,0 +1,406 @@ +import wmi, sys, winreg, os, subprocess, json, re +from datetime import datetime, timedelta + + +## Define modules +modules=[] + +def print_module(module, print_flag=None): + """Returns module in XML format. Accepts only {dict}.\n + - Only works with one module at a time: otherwise iteration is needed. + - Module "value" field accepts str type or [list] for datalists. + - Use print_flag to show modules' XML in STDOUT. + """ + data = dict(module) + module_xml = ("<module>\n" + "\t<name><![CDATA[" + str(data["name"]) + "]]></name>\n" + "\t<type>" + str(data["type"]) + "</type>\n" + ) + + if type(data["type"]) is not str and "string" not in data["type"]: #### Strip spaces if module not generic_data_string + data["value"] = data["value"].strip() + if isinstance(data["value"], list): # Checks if value is a list + module_xml += "\t<datalist>\n" + for value in data["value"]: + if type(value) is dict and "value" in value: + module_xml += "\t<data>\n" + module_xml += "\t\t<value><![CDATA[" + str(value["value"]) + "]]></value>\n" + if "timestamp" in value: + module_xml += "\t\t<timestamp><![CDATA[" + str(value["timestamp"]) + "]]></timestamp>\n" + module_xml += "\t</data>\n" + module_xml += "\t</datalist>\n" + else: + module_xml += "\t<data><![CDATA[" + str(data["value"]) + "]]></data>\n" + if "desc" in data: + module_xml += "\t<description><![CDATA[" + str(data["desc"]) + "]]></description>\n" + if "unit" in data: + module_xml += "\t<unit><![CDATA[" + str(data["unit"]) + "]]></unit>\n" + if "interval" in data: + module_xml += "\t<module_interval><![CDATA[" + str(data["interval"]) + "]]></module_interval>\n" + if "tags" in data: + module_xml += "\t<tags>" + str(data["tags"]) + "</tags>\n" + if "module_group" in data: + module_xml += "\t<module_group>" + str(data["module_group"]) + "</module_group>\n" + if "module_parent" in data: + module_xml += "\t<module_parent>" + str(data["module_parent"]) + "</module_parent>\n" + if "min_warning" in data: + module_xml += "\t<min_warning><![CDATA[" + str(data["min_warning"]) + "]]></min_warning>\n" + if "min_warning_forced" in data: + module_xml += "\t<min_warning_forced><![CDATA[" + str(data["min_warning_forced"]) + "]]></min_warning_forced>\n" + if "max_warning" in data: + module_xml += "\t<max_warning><![CDATA[" + str(data["max_warning"]) + "]]></max_warning>\n" + if "max_warning_forced" in data: + module_xml += "\t<max_warning_forced><![CDATA[" + str(data["max_warning_forced"]) + "]]></max_warning_forced>\n" + if "min_critical" in data: + module_xml += "\t<min_critical><![CDATA[" + str(data["min_critical"]) + "]]></min_critical>\n" + if "min_critical_forced" in data: + module_xml += "\t<min_critical_forced><![CDATA[" + str(data["min_critical_forced"]) + "]]></min_critical_forced>\n" + if "max_critical" in data: + module_xml += "\t<max_critical><![CDATA[" + str(data["max_critical"]) + "]]></max_critical>\n" + if "max_critical_forced" in data: + module_xml += "\t<max_critical_forced><![CDATA[" + str(data["max_critical_forced"]) + "]]></max_critical_forced>\n" + if "str_warning" in data: + module_xml += "\t<str_warning><![CDATA[" + str(data["str_warning"]) + "]]></str_warning>\n" + if "str_warning_forced" in data: + module_xml += "\t<str_warning_forced><![CDATA[" + str(data["str_warning_forced"]) + "]]></str_warning_forced>\n" + if "str_critical" in data: + module_xml += "\t<str_critical><![CDATA[" + str(data["str_critical"]) + "]]></str_critical>\n" + if "str_critical_forced" in data: + module_xml += "\t<str_critical_forced><![CDATA[" + str(data["str_critical_forced"]) + "]]></str_critical_forced>\n" + if "critical_inverse" in data: + module_xml += "\t<critical_inverse><![CDATA[" + str(data["critical_inverse"]) + "]]></critical_inverse>\n" + if "warning_inverse" in data: + module_xml += "\t<warning_inverse><![CDATA[" + str(data["warning_inverse"]) + "]]></warning_inverse>\n" + if "max" in data: + module_xml += "\t<max><![CDATA[" + str(data["max"]) + "]]></max>\n" + if "min" in data: + module_xml += "\t<min><![CDATA[" + str(data["min"]) + "]]></min>\n" + if "post_process" in data: + module_xml += "\t<post_process><![CDATA[" + str(data["post_process"]) + "]]></post_process>\n" + if "disabled" in data: + module_xml += "\t<disabled><![CDATA[" + str(data["disabled"]) + "]]></disabled>\n" + if "min_ff_event" in data: + module_xml += "\t<min_ff_event><![CDATA[" + str(data["min_ff_event"]) + "]]></min_ff_event>\n" + if "status" in data: + module_xml += "\t<status><![CDATA[" + str(data["status"]) + "]]></status>\n" + if "timestamp" in data: + module_xml += "\t<timestamp><![CDATA[" + str(data["timestamp"]) + "]]></timestamp>\n" + if "custom_id" in data: + module_xml += "\t<custom_id><![CDATA[" + str(data["custom_id"]) + "]]></custom_id>\n" + if "critical_instructions" in data: + module_xml += "\t<critical_instructions><![CDATA[" + str(data["critical_instructions"]) + "]]></critical_instructions>\n" + if "warning_instructions" in data: + module_xml += "\t<warning_instructions><![CDATA[" + str(data["warning_instructions"]) + "]]></warning_instructions>\n" + if "unknown_instructions" in data: + module_xml += "\t<unknown_instructions><![CDATA[" + str(data["unknown_instructions"]) + "]]></unknown_instructions>\n" + if "quiet" in data: + module_xml += "\t<quiet><![CDATA[" + str(data["quiet"]) + "]]></quiet>\n" + if "module_ff_interval" in data: + module_xml += "\t<module_ff_interval><![CDATA[" + str(data["module_ff_interval"]) + "]]></module_ff_interval>\n" + if "crontab" in data: + module_xml += "\t<crontab><![CDATA[" + str(data["crontab"]) + "]]></crontab>\n" + if "min_ff_event_normal" in data: + module_xml += "\t<min_ff_event_normal><![CDATA[" + str(data["min_ff_event_normal"]) + "]]></min_ff_event_normal>\n" + if "min_ff_event_warning" in data: + module_xml += "\t<min_ff_event_warning><![CDATA[" + str(data["min_ff_event_warning"]) + "]]></min_ff_event_warning>\n" + if "min_ff_event_critical" in data: + module_xml += "\t<min_ff_event_critical><![CDATA[" + str(data["min_ff_event_critical"]) + "]]></min_ff_event_critical>\n" + if "ff_type" in data: + module_xml += "\t<ff_type><![CDATA[" + str(data["ff_type"]) + "]]></ff_type>\n" + if "ff_timeout" in data: + module_xml += "\t<ff_timeout><![CDATA[" + str(data["ff_timeout"]) + "]]></ff_timeout>\n" + if "each_ff" in data: + module_xml += "\t<each_ff><![CDATA[" + str(data["each_ff"]) + "]]></each_ff>\n" + if "module_parent_unlink" in data: + module_xml += "\t<module_parent_unlink><![CDATA[" + str(data["parent_unlink"]) + "]]></module_parent_unlink>\n" + if "global_alerts" in data: + for alert in data["alert"]: + module_xml += "\t<alert_template><![CDATA[" + alert + "]]></alert_template>\n" + module_xml += "</module>\n" + + if print_flag: + print (module_xml) + + return (module_xml) + +def check_antivirus_status(): + try: + wmi_obj = wmi.WMI(namespace="root/SecurityCenter2") + antivirus_products = wmi_obj.query("SELECT * FROM AntivirusProduct") + + for product in antivirus_products: + display_name = product.displayName + product_state = product.productState + product_state_hex = hex(product_state) + last_update = product.timestamp + atv_status = int(product_state_hex[3:5]) + atv_uptodate = int(product_state_hex[5:7]) + atv_status = 1 if atv_status in [10, 11] else 0 + atv_uptodate = 1 if atv_uptodate in [00,] else 0 + + #print(f"{display_name}, product_state: {product_state}, product_state_hex: {product_state_hex}, last_update: {last_update}, status: {atv_status}, uptodate: {atv_uptodate}") + modules.append({ + "name" : f"{display_name} Antivirus status", + "type" : "generic_proc", + "value": atv_status, + "module_group": "security", + "desc" : f"{display_name} state: {product_state}, last update: {last_update}", + }) + modules.append({ + "name" : f"{display_name} Antivirus up to date", + "type" : "generic_proc", + "value": atv_uptodate, + "module_group": "security", + "desc" : f"{display_name} state: {product_state}, last update: {last_update}", + }) + + except Exception as e: + print(f"Error check antivirus: {e}", file=sys.stderr) + +def is_lock_screen_enabled(): + try: + # Open the registry key + key_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" + with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_path) as key: + # Query the value of the DisableLockScreen key + value_name = "DisableLockScreen" + value, _ = winreg.QueryValueEx(key, value_name) + + # Check if the lock screen is enabled (0 means enabled) + status = value == 0 + if status == False: return status + + except FileNotFoundError: + # If the registry key or value is not found, consider it as enabled + status = True + except Exception as e: + print(f"Error check lockscreen: {e}", file=sys.stderr) + status = False + + try: + # Define the registry key for the lock screen settings + reg_key_path = r"SOFTWARE\Policies\Microsoft\Windows\Personalization" + reg_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, reg_key_path) + + # Query the "NoLockScreen" DWORD value + value_name = "NoLockScreen" + value, _ = winreg.QueryValueEx(reg_key, value_name) + + # Check if the "NoLockScreen" value is 0 (enabled) + status = value == 0 + if status == False: return status + + except FileNotFoundError: + # If the registry key or value is not found, consider it as enabled + status = True + except Exception as e: + print(f"Error check lockscreen: {e}", file=sys.stderr) + status = False + + return status + +def check_locksreen_enables(): + status = is_lock_screen_enabled() + value = 1 if status == True else 0 + + modules.append({ + "name" : "Lockscreen status", + "type" : "generic_proc", + "value": value, + "module_group": "security", + "desc" : f"Check lockscreen enable", + }) + +def convert_to_human_readable_date(timestamp_str): + try: + # Parse the timestamp string without the time zone + timestamp = datetime.strptime(timestamp_str, '%Y%m%d%H%M%S') + + # Convert to a human-readable format + human_readable_date = timestamp.strftime('%Y-%m-%d %H:%M:%S %z') + + return human_readable_date.strip() + except Exception as e: + print(f"Error converting date: {e}", file=sys.stderr) + return None + +def check_time_difference(timestamp, timedays=10): + try: + # Convert the timestamp string to a datetime object + given_timestamp = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S') + + # Get the current time + current_time = datetime.now() + + #Calculate the time difference + time_difference = current_time - given_timestamp + + # Check if the time difference is greater than one hour + if time_difference < timedelta(days=timedays): + return "1" + else: + return "0" + except Exception as e: + print(f"Error check time difference: {e}", file=sys.stderr) + return 0 + + + +def get_windows_update_info(limit=5): + try: + # Connect to the Win32_ReliabilityRecords class in the root/cimv2 namespace + wmi_conn = wmi.WMI() + + # Query the Win32_ReliabilityRecords class for Windows Update information + query = "SELECT * FROM Win32_ReliabilityRecords WHERE sourcename = 'Microsoft-Windows-WindowsUpdateClient'" + result = wmi_conn.query(query) + + # Extract relevant information and format output + update_info = [ + { + "date": convert_to_human_readable_date(record.timegenerated.split('.')[0]), + "update": record.message + } + for record in result[:limit] + ] + + last_update_date=update_info[0]['date'] + value=check_time_difference(last_update_date) + + modules.append({ + "name" : "Microsoft Update system status", + "type" : "generic_proc", + "value": value, + "module_group": "security", + "desc" : f"Check if system was updated in the last 10 days. last update: {last_update_date}", + }) + return True + except Exception as e: + print(f"Error windows update check: {e}", file=sys.stderr) + return False + +def is_firewall_enabled(): + try: + # Run PowerShell command to check if the Windows Firewall is enabled + result = subprocess.run( + ['powershell', 'Get-NetFirewallProfile |Select-Object profile, enabled | ConvertTo-Json'], + capture_output=True, + text=True + ) + + result_json= json.loads(result.stdout) + for profile in result_json: + modules.append({ + "name" : f"Firewall profile: {profile['Profile']} status", + "type" : "generic_proc", + "value": profile["Enabled"], + "module_group": "security", + "desc" : f"Check if firewall profile {profile['Profile']} is enabled", + }) + return True + except Exception as e: + print(f"Error firewall check: {e}", file=sys.stderr) + return False + +def check_password_enforcement(): + enforce_pass = 1 + counter = 0 + try: + # Connect to the WMI service + wmi_service = wmi.WMI() + + # Query for user accounts + users = wmi_service.Win32_UserAccount() + + # Check if each user enforces password + for user in users: + # username = user.Name + # password_required = user.PasswordRequired + if user.PasswordRequired == False : + enforce_pass = 0 + counter += 1 + #print(f"User: {username}, Password Required: {password_required}") + + modules.append({ + "name" : "All users enforced password", + "type" : "generic_proc", + "value": enforce_pass, + "module_group": "security", + "desc" : f"Check if all users has enforced password, not secure users = {counter}", + }) + except Exception as e: + print(f"Error: {e}", file=sys.stderr) + print("Failed to check password enforcement for users.", file=sys.stderr) + + +def check_login_audit_policy(): + try: + # Run the auditpol command to check the audit policy for Logon/Logoff + cmd_command = "auditpol /get /subcategory:Logon" + result = subprocess.run(cmd_command, shell=True, capture_output=True, text=True, check=True) + last_line = result.stdout.strip().split('\n')[-1] + cleaned_line = re.sub(' +', ' ', last_line) + + # Interpret the result + if "Success and Failure" in result.stdout: + result = 1 + elif "Aciertos y errores" in result.stdout: + result = 1 + elif "No Auditing" in result.stdout: + result = 0 + elif "Sin auditoría" in result.stdout: + result = 0 + else: + print("Unable to determine audit policy for Logon/Logoff events.", file=sys.stderr) + result = 0 + modules.append({ + "name" : "Check logon event audited", + "type" : "generic_proc", + "value": result, + "module_group": "security", + "desc" : f"Check if the logon events audit log is enables, status:{cleaned_line}", + }) + + except subprocess.CalledProcessError as e: + print(f"Error: {e}") + print("Failed to check audit policy using auditpol command.", file=sys.stderr) + return + + +if __name__ == "__main__": + check_antivirus_status() + check_locksreen_enables() + get_windows_update_info() + is_firewall_enabled() + check_password_enforcement() + check_login_audit_policy() + + for module in modules: + print_module(module, True) + + +# Windows Defender status values: +# 0: No action needed +# 266240: Antivirus is up to date +# 266256: Antivirus is out of date +# 266304: Antivirus is not monitoring +# 393216 (0x60000): No action needed. +# 393232 (0x60010): Antivirus is up to date. +# 393240 (0x60018): Antivirus is out of date. +# 393216 (0x60030): Antivirus is not monitoring. +# 397312 (0x61000): Antivirus is disabled. + +# AVG Internet Security 2012 (from antivirusproduct WMI) +# 262144 (040000) = disabled and up to date +# 266240 (041000) = enabled and up to date +# AVG Internet Security 2012 (from firewallproduct WMI) +# 266256 (041010) = firewall enabled - (last two blocks not relevant it seems for firewall) +# 262160 (040010) = firewall disabled - (last two blocks not relevant it seems for firewall) + +# Windows Defender +# 393472 (060100) = disabled and up to date +# 397584 (061110) = enabled and out of date +# 397568 (061100) = enabled and up to date +# Microsoft Security Essentials +# 397312 (061000) = enabled and up to date +# 393216 (060000) = disabled and up to date diff --git a/pandora_agents/plugins/windows/pandora_security_win/src/requirements.txt b/pandora_agents/plugins/windows/pandora_security_win/src/requirements.txt new file mode 100644 index 0000000000..ebc010c452 --- /dev/null +++ b/pandora_agents/plugins/windows/pandora_security_win/src/requirements.txt @@ -0,0 +1 @@ +WMI==1.5.1 \ No newline at end of file diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index bbca6968aa..fbbaa70ba1 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.774-231215 +Version: 7.0NG.774-231219 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index c954d505ef..3bf1780faf 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.774-231215" +pandora_version="7.0NG.774-231219" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 359e76ee0a..4cbd08722d 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1039,7 +1039,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.774'; -use constant AGENT_BUILD => '231215'; +use constant AGENT_BUILD => '231219'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index c9549e3c9b..2e4dded04f 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.774 -%define release 231215 +%define release 231219 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec b/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec index 0925353598..bf5a84479e 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.774 -%define release 231215 +%define release 231219 %define debug_package %{nil} Summary: Pandora FMS Linux agent, binary version diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec b/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec index e1c50546ee..23ef1fb028 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.774 -%define release 231215 +%define release 231219 %define debug_package %{nil} Summary: Pandora FMS Linux agent, binary version diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.spec b/pandora_agents/unix/pandora_agent.redhat_bin.spec index 4e7907ea9d..ccd955eaa3 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.774 -%define release 231215 +%define release 231219 Summary: Pandora FMS Linux agent, binary version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 85ce06d693..c72125ad5b 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.774 -%define release 231215 +%define release 231219 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 2001864650..1360edcbbe 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.774" -PI_BUILD="231215" +PI_BUILD="231219" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/bin/pandora_agent.conf b/pandora_agents/win32/bin/pandora_agent.conf index c0a1560b38..4e77e220c5 100644 --- a/pandora_agents/win32/bin/pandora_agent.conf +++ b/pandora_agents/win32/bin/pandora_agent.conf @@ -538,3 +538,8 @@ module_plugin "%PROGRAMFILES%\Pandora_Agent\util\autodiscover.exe" --default #module_regexp C:\server\logs\xserver.log #module_pattern .* #module_end + +# Pandora basic security check plugin for windows. +#module_begin +#module_plugin "%PROGRAMFILES%\Pandora_Agent\util\pandora_security_win.exe" +#module_end diff --git a/pandora_agents/win32/bin/util/pandora_security_win.exe b/pandora_agents/win32/bin/util/pandora_security_win.exe new file mode 100755 index 0000000000..a21f40faf6 --- /dev/null +++ b/pandora_agents/win32/bin/util/pandora_security_win.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c58891fbd16bf80f288e0ff4751801aa02dbf4e6c914625b4d49a364c7e0b511 +size 7829249 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 38d741d818..444a657d98 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{231215} +{231219} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index d827c111a9..8a7783a7ba 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.774 Build 231215") +#define PANDORA_VERSION ("7.0NG.774 Build 231219") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 8eee99167d..3ee212d8ba 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Pandora FMS" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.774(Build 231215))" + VALUE "ProductVersion", "(7.0NG.774(Build 231219))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 6fbf3cd46e..635749427a 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.774-231215 +Version: 7.0NG.774-231219 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index c5fbbd0727..7a1099c7bc 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.774-231215" +pandora_version="7.0NG.774-231219" package_pear=0 package_pandora=1 diff --git a/pandora_console/extensions/agents_modules.php b/pandora_console/extensions/agents_modules.php index d6c4f3bb32..f372f45812 100644 --- a/pandora_console/extensions/agents_modules.php +++ b/pandora_console/extensions/agents_modules.php @@ -1007,7 +1007,7 @@ function mainAgentsModules() echo "<td class='center' style='text-align:left;'>"; $win_handle = dechex(crc32($module_id.$module['name'])); $graph_type = return_graphtype(modules_get_agentmodule_type($module_id)); - $link = "winopeng_var('".'operation/agentes/stat_win.php?'."type=$graph_type&".'period='.SECONDS_1DAY.'&'.'id='.$module_id.'&'.'refresh='.SECONDS_10MINUTES."', 'day_".$win_handle."', 800, 480)"; + $link = "winopeng_var('".'operation/agentes/stat_win.php?'."type=$graph_type&".'period='.SECONDS_1DAY.'&id='.$module_id.'&period_graph=0&refresh='.SECONDS_10MINUTES."', 'day_".$win_handle."', 800, 480)"; echo '<a href="javascript:'.$link.'">'; diff --git a/pandora_console/extensions/files_repo.php b/pandora_console/extensions/files_repo.php deleted file mode 100644 index a482a59669..0000000000 --- a/pandora_console/extensions/files_repo.php +++ /dev/null @@ -1,286 +0,0 @@ -<?php - -// Pandora FMS - https://pandorafms.com -// ================================================== -// Copyright (c) 2005-2023 Pandora FMS -// Please see https://pandorafms.com/community/ for full contribution list -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; version 2 -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -function pandora_files_repo_install() -{ - global $config; - - if (isset($config['files_repo_installed']) && $config['files_repo_installed'] == 1) { - return; - } - - $full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/'; - $full_sql_dir = $full_extensions_dir.'files_repo/sql/'; - - $file_path = ''; - switch ($config['dbtype']) { - case 'mysql': - $file_path = $full_sql_dir.'files_repo.sql'; - break; - - case 'postgresql': - $file_path = $full_sql_dir.'files_repo.postgreSQL.sql'; - break; - - case 'oracle': - $file_path = $full_sql_dir.'files_repo.oracle.sql'; - break; - } - - if (!empty($file_path)) { - $result = db_process_file($file_path); - - if ($result) { - // Configuration values - $values = [ - 'token' => 'files_repo_installed', - 'value' => 1, - ]; - db_process_sql_insert('tconfig', $values); - } - } -} - - -function pandora_files_repo_uninstall() -{ - global $config; - - switch ($config['dbtype']) { - case 'mysql': - db_process_sql('DROP TABLE `tfiles_repo_group`'); - db_process_sql('DROP TABLE `tfiles_repo`'); - db_process_sql( - 'DELETE FROM `tconfig` - WHERE `token` LIKE "files_repo_%"' - ); - break; - - case 'postgresql': - db_process_sql('DROP TABLE "tfiles_repo_group"'); - db_process_sql('DROP TABLE "tfiles_repo"'); - db_process_sql( - 'DELETE FROM "tconfig" - WHERE "token" LIKE \'files_repo_%\'' - ); - break; - - case 'oracle': - db_process_sql('DROP TRIGGER "tfiles_repo_group_inc"'); - db_process_sql('DROP SEQUENCE "tfiles_repo_group_s"'); - db_process_sql('DROP TABLE "tfiles_repo_group"'); - db_process_sql('DROP TRIGGER "tfiles_repo_inc"'); - db_process_sql('DROP SEQUENCE "tfiles_repo_s"'); - db_process_sql('DROP TABLE "tfiles_repo"'); - db_process_sql( - 'DELETE FROM tconfig - WHERE token LIKE \'files_repo_%\'' - ); - break; - } - - if (!empty($config['attachment_store'])) { - delete_dir($config['attachment_store'].'/files_repo'); - } -} - - -function pandora_files_repo_godmode() -{ - global $config; - - if (!isset($config['files_repo_installed']) || !$config['files_repo_installed']) { - ui_print_error_message(__('Extension not installed')); - } - - // ACL Check - check_login(); - if (! check_acl($config['id_user'], 0, 'PM')) { - db_pandora_audit( - AUDIT_LOG_ACL_VIOLATION, - 'Trying to access to Files repository' - ); - include 'general/noaccess.php'; - return; - } - - // Header tabs. - $godmode['text'] = '<a href="index.php?sec=godmode/extensions&sec2=extensions/files_repo">'.html_print_image('images/configuration@svg.svg', true, ['title' => __('Administration view'), 'class' => 'main_menu_icon invert_filter']).'</a>'; - $godmode['godmode'] = 1; - $godmode['active'] = 1; - - $operation['text'] = '<a href="index.php?sec=extensions&sec2=extensions/files_repo">'.html_print_image('images/see-details@svg.svg', true, ['title' => __('Operation view'), 'class' => 'main_menu_icon invert_filter']).'</a>'; - $operation['operation'] = 1; - - $onheader = [ - 'godmode' => $godmode, - 'operation' => $operation, - ]; - - // Header. - ui_print_standard_header( - __('Extensions'), - 'images/extensions.png', - false, - '', - true, - $onheader, - [ - [ - 'link' => '', - 'label' => __('Admin tools'), - ], - [ - 'link' => '', - 'label' => __('Extension manager'), - ], - [ - 'link' => '', - 'label' => __('Files repository manager'), - ], - ] - ); - - $full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/'; - include_once $full_extensions_dir.'files_repo/functions_files_repo.php'; - - // Directory files_repo check. - if (!files_repo_check_directory(true)) { - return; - } - - $server_content_length = 0; - if (isset($_SERVER['CONTENT_LENGTH'])) { - $server_content_length = $_SERVER['CONTENT_LENGTH']; - } - - // Check for an anoying error that causes the $_POST and $_FILES arrays. - // were empty if the file is larger than the post_max_size. - if (intval($server_content_length) > 0 && empty($_POST)) { - ui_print_error_message(__('Problem uploading. Please check this PHP runtime variable values: <pre> post_max_size (currently '.ini_get('post_max_size').')</pre>')); - } - - // GET and POST parameters. - $file_id = (int) get_parameter('file_id'); - $add_file = (bool) get_parameter('add_file'); - $update_file = (bool) get_parameter('update_file'); - $delete_file = (bool) get_parameter('delete'); - - // File add or update. - if ($add_file || ($update_file && $file_id > 0)) { - $groups = get_parameter('groups', []); - $public = (bool) get_parameter('public'); - $description = io_safe_output((string) get_parameter('description')); - if (mb_strlen($description, 'UTF-8') > 200) { - $description = mb_substr($description, 0, 200, 'UTF-8'); - } - - $description = io_safe_input($description); - - if ($add_file) { - $result = files_repo_add_file('upfile', $description, $groups, $public); - } else if ($update_file) { - $result = files_repo_update_file($file_id, $description, $groups, $public); - $file_id = 0; - } - - if ($result['status'] == false) { - ui_print_error_message($result['message']); - } - } - - // File delete. - if ($delete_file && $file_id > 0) { - $result = files_repo_delete_file($file_id); - if ($result !== -1) { - ui_print_result_message($result, __('Successfully deleted'), __('Could not be deleted')); - } - - $file_id = 0; - } - - // FORM. - include $full_extensions_dir.'files_repo/files_repo_form.php'; - if (!$file_id) { - // LIST. - $manage = true; - include $full_extensions_dir.'files_repo/files_repo_list.php'; - } -} - - -function pandora_files_repo_operation() -{ - global $config; - - // Header tabs. - $onheader = []; - if (check_acl($config['id_user'], 0, 'PM')) { - $godmode['text'] = '<a href="index.php?sec=godmode/extensions&sec2=extensions/files_repo">'.html_print_image('images/configuration@svg.svg', true, ['title' => __('Administration view'), 'class' => 'main_menu_icon invert_filter']).'</a>'; - $godmode['godmode'] = 1; - - $operation['text'] = '<a href="index.php?sec=extensions&sec2=extensions/files_repo">'.html_print_image('images/see-details@svg.svg', true, ['title' => __('Operation view'), 'class' => 'main_menu_icon invert_filter']).'</a>'; - $operation['operation'] = 1; - $operation['active'] = 1; - - $onheader = [ - 'godmode' => $godmode, - 'operation' => $operation, - ]; - } - - // Header. - ui_print_standard_header( - __('Files repository'), - 'images/extensions.png', - false, - '', - false, - $onheader, - [ - [ - 'link' => '', - 'label' => __('Admin tools'), - ], - [ - 'link' => '', - 'label' => __('Extension manager'), - ], - [ - 'link' => '', - 'label' => __('Files repository'), - ], - ] - ); - - $full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/'; - include_once $full_extensions_dir.'files_repo/functions_files_repo.php'; - - // Directory files_repo check. - if (!files_repo_check_directory(true)) { - return; - } - - // LIST. - $full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/'; - - include $full_extensions_dir.'files_repo/files_repo_list.php'; -} - - -extensions_add_operation_menu_option(__('Files repository'), null, null, 'v1r1'); -extensions_add_main_function('pandora_files_repo_operation'); -extensions_add_godmode_menu_option(__('Files repository manager'), 'PM', null, null, 'v1r1'); -extensions_add_godmode_function('pandora_files_repo_godmode'); - -pandora_files_repo_install(); diff --git a/pandora_console/extensions/files_repo/files_repo_list.php b/pandora_console/extensions/files_repo/files_repo_list.php deleted file mode 100644 index 6c08b8f505..0000000000 --- a/pandora_console/extensions/files_repo/files_repo_list.php +++ /dev/null @@ -1,168 +0,0 @@ -<?php - -// Pandora FMS - https://pandorafms.com -// ================================================== -// Copyright (c) 2005-2023 Pandora FMS -// Please see https://pandorafms.com/community/ for full contribution list -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; version 2 -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -global $config; - -$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/'; -require_once $full_extensions_dir.'files_repo/functions_files_repo.php'; - - - -$offset = (int) get_parameter('offset'); -$filter = []; -$filter['limit'] = $config['block_size']; -$filter['offset'] = $offset; -$filter['order'] = [ - 'field' => 'id', - 'order' => 'DESC', -]; - -$files = files_repo_get_files($filter); - - -if (!empty($files)) { - if (!isset($manage)) { - $manage = false; - } - - // Pagination - if ($manage) { - $url = ui_get_full_url('index.php?sec=godmode/extensions&sec2=extensions/files_repo'); - } else { - $url = ui_get_full_url('index.php?sec=extensions&sec2=extensions/files_repo'); - } - - $total_files = files_repo_get_files(false, true); - ui_pagination($total_files, $url, $offset); - - $table = new stdClass(); - $table->width = '100%'; - $table->class = 'info_table'; - $table->style = []; - $table->style[1] = 'max-width: 200px;'; - $table->style[4] = 'text-align: center;'; - $table->head = []; - $table->head[0] = __('Name'); - $table->head[1] = __('Description'); - $table->head[2] = __('Size'); - $table->head[3] = __('Last modification'); - $table->head[4] = ''; - $table->data = []; - - foreach ($files as $file_id => $file) { - $data = []; - - // Prepare the filename for the get_file.php script - $document_root = str_replace( - '\\', - '/', - io_safe_output($_SERVER['DOCUMENT_ROOT']) - ); - $file['location'] = str_replace( - '\\', - '/', - io_safe_output($file['location']) - ); - $relative_path = str_replace($document_root, '', $file['location']); - $file_name = explode('/', $file['location']); - $file_decoded = $file_name[(count($file_name) - 1)]; - $file_path = base64_encode($file_decoded); - $hash = md5($file_path.$config['server_unique_identifier']); - $url = ui_get_full_url( - 'include/get_file.php?file='.urlencode($file_path).'&hash='.$hash - ); - $date_format = ($config['date_format']) ? io_safe_output($config['date_format']) : 'F j, Y - H:m'; - - $data[0] = "<a href=\"$url\" target=\"_blank\">".$file['name'].'</a>'; - // Name - $data[1] = ui_print_truncate_text( - $file['description'], - 'description', - true, - true - ); - // Description - $data[2] = ui_format_filesize($file['size']); - // Size - $data[3] = date($date_format, $file['mtime']); - // Last modification - // Public URL - $data[4] = ''; - $table->cellclass[][4] = 'table_action_buttons'; - if (!empty($file['hash'])) { - $public_url = ui_get_full_url( - EXTENSIONS_DIR.'/files_repo/files_repo_get_file.php?file='.$file['hash'] - ); - $message = __('Copy to clipboard').': Ctrl+C -> Enter'; - $action = "window.prompt('$message', '$public_url');"; - $data[4] .= "<a href=\"javascript:;\" onclick=\"$action\">"; - $data[4] .= html_print_image( - 'images/world.png', - true, - ['title' => __('Public link')] - ); - // Public link image - $data[4] .= '</a> '; - } - - $data[4] .= "<a href=\"$url\" target=\"_blank\">"; - $data[4] .= html_print_image( - 'images/download.png', - true, - [ - 'title' => __('Download'), - 'style' => 'padding:3px', - ] - ); - // Download image - $data[4] .= '</a>'; - - if ($manage) { - $config_url = ui_get_full_url( - 'index.php?sec=godmode/extensions&sec2=extensions/files_repo&file_id='.$file_id - ); - $data[4] .= "<a href=\"$config_url\">"; - $data[4] .= html_print_image( - 'images/edit.svg', - true, - [ - 'title' => __('Edit'), - 'class' => 'main_menu_icon invert_filter', - ] - ); - // Edit image - $data[4] .= '</a>'; - - $delete_url = ui_get_full_url( - 'index.php?sec=godmode/extensions&sec2=extensions/files_repo&delete=1&file_id='.$file_id - ); - $data[4] .= " <a href=\"$delete_url\" onClick=\"if (!confirm('".__('Are you sure?')."')) return false;\">"; - $data[4] .= html_print_image( - 'images/delete.svg', - true, - [ - 'title' => __('Delete'), - 'class' => 'main_menu_icon invert_filter', - ] - ); - // Delete image - $data[4] .= '</a>'; - } - - $table->data[] = $data; - } - - html_print_table($table); -} else { - ui_print_info_message(__('No items')); -} diff --git a/pandora_console/extensions/files_repo/sql/files_repo.oracle.sql b/pandora_console/extensions/files_repo/sql/files_repo.oracle.sql deleted file mode 100644 index d86b775920..0000000000 --- a/pandora_console/extensions/files_repo/sql/files_repo.oracle.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE tfiles_repo ( - id NUMBER(5, 0) NOT NULL PRIMARY KEY, - name VARCHAR2(255) NOT NULL, - description VARCHAR2(500) NULL, - hash VARCHAR2(8) NULL -); -CREATE SEQUENCE tfiles_repo_s INCREMENT BY 1 START WITH 1; -CREATE OR REPLACE TRIGGER tfiles_repo_inc BEFORE INSERT ON tfiles_repo REFERENCING NEW AS NEW FOR EACH ROW BEGIN SELECT tfiles_repo_s.nextval INTO :NEW.ID FROM dual; END;; - -CREATE TABLE tfiles_repo_group ( - id NUMBER(10, 0) NOT NULL PRIMARY KEY, - id_file NUMBER(5, 0) NOT NULL REFERENCES tfiles_repo(id) ON DELETE CASCADE, - id_group NUMBER(4, 0) NOT NULL -); -CREATE SEQUENCE tfiles_repo_group_s INCREMENT BY 1 START WITH 1; -CREATE OR REPLACE TRIGGER tfiles_repo_group_inc BEFORE INSERT ON tfiles_repo_group REFERENCING NEW AS NEW FOR EACH ROW BEGIN SELECT tfiles_repo_group_s.nextval INTO :NEW.ID FROM dual; END;; \ No newline at end of file diff --git a/pandora_console/extensions/files_repo/sql/files_repo.postgreSQL.sql b/pandora_console/extensions/files_repo/sql/files_repo.postgreSQL.sql deleted file mode 100644 index 3f129e10cb..0000000000 --- a/pandora_console/extensions/files_repo/sql/files_repo.postgreSQL.sql +++ /dev/null @@ -1,2 +0,0 @@ -CREATE TABLE "tfiles_repo" ("id" SERIAL NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "description" VARCHAR(500) NULL default '', "hash" VARCHAR(8) NULL default ''); -CREATE TABLE "tfiles_repo_group" ("id" SERIAL NOT NULL PRIMARY KEY, "id_file" INTEGER NOT NULL REFERENCES tfiles_repo("id") ON DELETE CASCADE, "id_group" INTEGER NOT NULL); diff --git a/pandora_console/extensions/files_repo/sql/files_repo.sql b/pandora_console/extensions/files_repo/sql/files_repo.sql deleted file mode 100644 index d6dce31339..0000000000 --- a/pandora_console/extensions/files_repo/sql/files_repo.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE IF NOT EXISTS `tfiles_repo` ( - `id` int(5) unsigned NOT NULL auto_increment, - `name` varchar(255) NOT NULL, - `description` varchar(500) NULL default '', - `hash` varchar(8) NULL default '', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE IF NOT EXISTS `tfiles_repo_group` ( - `id` int(10) unsigned NOT NULL auto_increment, - `id_file` int(5) unsigned NOT NULL, - `id_group` int(4) unsigned NOT NULL, - PRIMARY KEY (`id`), - FOREIGN KEY (`id_file`) REFERENCES tfiles_repo(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/pandora_console/extras/delete_files/delete_files.txt b/pandora_console/extras/delete_files/delete_files.txt index 03db82db4e..f3eada8070 100644 --- a/pandora_console/extras/delete_files/delete_files.txt +++ b/pandora_console/extras/delete_files/delete_files.txt @@ -1720,4 +1720,19 @@ include/functions_integriaims.php include/ajax/integria_incidents.ajax.php enterprise/operation/log/log_source.php enterprise/include/class/LogSource.class.php -include/chart_generator.php \ No newline at end of file +include/chart_generator.php +enterprise/extensions/translate_string.php +enterprise/extensions/translate_string/functions.php +enterprise/extensions/translate_string/translate_string.oracle.sql +enterprise/extensions/translate_string/translate_string.postgresql.sql +enterprise/extensions/translate_string/translate_string.sql +enterprise/extensions/translate_string +extensions/files_repo.php +extensions/files_repo/files_repo_form.php +extensions/files_repo/files_repo_get_file.php +extensions/files_repo/files_repo_list.php +extensions/files_repo/functions_files_repo.php +extensions/files_repo/sql/files_repo.oracle.sql +extensions/files_repo/sql/files_repo.postgreSQL.sql +extensions/files_repo/sql/files_repo.sql +extensions/files_repo diff --git a/pandora_console/extras/discovery/DiscoveryApps.csv b/pandora_console/extras/discovery/DiscoveryApps.csv new file mode 100644 index 0000000000..ed4c110652 --- /dev/null +++ b/pandora_console/extras/discovery/DiscoveryApps.csv @@ -0,0 +1,18 @@ +pandorafms.aws.ec2;Amazon EC2;cloud;1;pandorafms.aws.ec2.png;https://pandorafms.com/library/aws-ec2-discovery/ +pandorafms.aws.rds;Amazon RDS;cloud;1;pandorafms.aws.rds.png;https://pandorafms.com/library/aws-rds-discovery/ +pandorafms.aws.s3;Amazon S3;cloud;1;pandorafms.aws.s3.png;https://pandorafms.com/library/aws-s3-discovery/ +pandorafms.azure.mc;Azure Microsoft Compute;cloud;1;pandorafms.azure.mc.png;https://pandorafms.com/library/aws-azure-discovery/ +pandorafms.db2;DB2;app;1;pandorafms.db2.png;https://pandorafms.com/library/db2-discovery/ +pandorafms.gcp.ce;Google Cloud Compute Engine;cloud;1;pandorafms.gcp.ce.png;https://pandorafms.com/library/google-cloud-discovery/ +pandorafms.mssql;Microsoft SQL Server;app;1;pandorafms.mssql.png;https://pandorafms.com/library/mssql-discovery/ +pandorafms.mysql;MySQL;app;1;pandorafms.mysql.png;https://pandorafms.com/library/mysql-discovery/ +pandorafms.oracle;Oracle;app;1;pandorafms.oracle.png;https://pandorafms.com/library/oracle-discovery/ +pandorafms.proxmox;Proxmox;app;0;pandorafms.proxmox.png;https://pandorafms.com/library/proxmox-discovery/ +pandorafms.sap.deset;SAP R3 - Deset;app;1;pandorafms.sap.deset.png;https://pandorafms.com/library/sap-discovery/ +pandorafms.vmware;VMware;app;1;pandorafms.vmware.png;https://pandorafms.com/library/vmware-discovery/ +pandorafms.kubernetes;Kubernetes;app;1;pandorafms.kubernetes.png;https://pandorafms.com/library/kubernetes-discovery/ +pandorafms.mongodb;MongoDB;app;1;pandorafms.mongodb.png;https://pandorafms.com/library/mongodb-discovery/ +pandorafms.ovh;OVH;cloud;1;pandorafms.ovh.png;https://pandorafms.com/library/ovh-discovery/ +pandorafms.vulnscan;Vulnerability Scanner;app;1;pandorafms.vulnscan.png;https://pandorafms.com/library/pandora-vulnerability-discovery/ +pandorafms.postgresql;PostgreSQL;app;1;pandorafms.postgresql.png;https://pandorafms.com/library/postgresql-discovery/ +pandorafms.xenserver;Xenserver;app;1;pandorafms.xenserver.png;https://pandorafms.com/library/xenserver-discovery/ diff --git a/pandora_console/extras/mr/67.sql b/pandora_console/extras/mr/67.sql index cf3177b158..f4fb6698e4 100644 --- a/pandora_console/extras/mr/67.sql +++ b/pandora_console/extras/mr/67.sql @@ -1,5 +1,34 @@ START TRANSACTION; +DELETE FROM `tconfig` WHERE `token` LIKE 'translate_string_extension_installed'; + +CREATE TABLE IF NOT EXISTS `textension_translate_string` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `lang` VARCHAR(10) NOT NULL , + `string` TEXT , + `translation` TEXT , + PRIMARY KEY (`id`), + KEY `lang_index` (`lang`) +) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; + +DELETE FROM `tconfig` WHERE `token` LIKE 'files_repo_installed'; + +CREATE TABLE IF NOT EXISTS `tfiles_repo` ( + `id` int(5) unsigned NOT NULL auto_increment, + `name` varchar(255) NOT NULL, + `description` varchar(500) NULL default '', + `hash` varchar(8) NULL default '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; + +CREATE TABLE IF NOT EXISTS `tfiles_repo_group` ( + `id` int(10) unsigned NOT NULL auto_increment, + `id_file` int(5) unsigned NOT NULL, + `id_group` int(4) unsigned NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (`id_file`) REFERENCES tfiles_repo(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; + ALTER TABLE `tncm_queue` ADD COLUMN `id_agent_data` bigint unsigned AFTER `id_script`; @@ -1068,6 +1097,10 @@ SET @sqlstmt = IF (@exist>0, 'ALTER TABLE `tagente` DROP COLUMN `transactional_a prepare stmt from @sqlstmt; execute stmt; +ALTER TABLE `tlayout_template_data` ADD COLUMN `title` TEXT default ''; +ALTER TABLE `tlayout_data` ADD COLUMN `period_chart_options` TEXT default ''; +ALTER TABLE `tlayout_template_data` ADD COLUMN `period_chart_options` TEXT default ''; + ALTER TABLE `tdashboard` ADD COLUMN `date_range` TINYINT NOT NULL DEFAULT 0 AFTER `cells_slideshow`, ADD COLUMN `date_from` INT NOT NULL DEFAULT 0 AFTER `date_range`, @@ -1109,4 +1142,10 @@ UPDATE talert_actions SET field2='[PANDORA] Alert FIRED on _agent_ / _module_ / UPDATE `tdiscovery_apps` SET `version` = '1.2' WHERE `short_name` = 'pandorafms.vmware'; +ALTER TABLE `tagente_modulo` ADD COLUMN `ignore_unknown` TINYINT NOT NULL DEFAULT 0; +ALTER TABLE `tpolicy_modules` ADD COLUMN `ignore_unknown` TINYINT NOT NULL DEFAULT 0; + +ALTER TABLE `tagente` ADD COLUMN `ignore_unknown` TINYINT NOT NULL DEFAULT 0; +ALTER TABLE `tmetaconsole_agent` ADD COLUMN `ignore_unknown` TINYINT NOT NULL DEFAULT 0; + COMMIT; diff --git a/pandora_console/general/header.php b/pandora_console/general/header.php index 102d8e3136..d5c34f70e8 100644 --- a/pandora_console/general/header.php +++ b/pandora_console/general/header.php @@ -235,6 +235,7 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass); $header_autorefresh = ''; $header_autorefresh_counter = ''; + $header_setup = ''; if (($_GET['sec2'] !== 'operation/visual_console/render_view')) { if ($autorefresh_list !== null @@ -352,7 +353,6 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass); $display_counter = 'display:none'; } - $header_setup = ''; if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { $header_setup .= '<div id="header_logout"><a class="white" href="'.ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=general').'">'; $header_setup .= html_print_image( @@ -927,8 +927,6 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass); <?php if (enterprise_installed() === false) { ?> $('.header_left').on('click', function(){ - // Hidden tips modal. - $(".window").css("display", "none"); jQuery.post( "ajax.php", { diff --git a/pandora_console/godmode/agentes/agent_manager.php b/pandora_console/godmode/agentes/agent_manager.php index 51893ca8a6..1af5e3d780 100644 --- a/pandora_console/godmode/agentes/agent_manager.php +++ b/pandora_console/godmode/agentes/agent_manager.php @@ -1074,6 +1074,17 @@ if (enterprise_installed() === true) { ); } +$tableAdvancedAgent->data['ignore_unknown'][] = html_print_label_input_block( + __('Ignore unknown').ui_print_help_tip(__('This disables the calculation of the unknown state in the agent and any of its modules, so it will never transition to unknown. The state it reflects is the last known status.'), true), + html_print_checkbox_switch( + 'ignore_unknown', + 1, + $ignore_unknown, + true, + false + ) +); + ui_toggle( html_print_table($tableAdvancedAgent, true), diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index cad6faad62..3da403ef80 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -232,6 +232,7 @@ if ($create_agent) { $cps = (int) get_parameter_switch('cps', -1); $fixed_ip = (int) get_parameter_switch('fixed_ip', 0); $vul_scan_enabled = (int) get_parameter_switch('vul_scan_enabled', 2); + $ignore_unknown = (int) get_parameter_switch('ignore_unknown', 0); $agent_version = $config['current_package']; $secondary_groups = (array) get_parameter('secondary_groups_selected', ''); $fields = db_get_all_fields_in_table('tagent_custom_fields'); @@ -300,6 +301,7 @@ if ($create_agent) { 'cps' => $cps, 'fixed_ip' => $fixed_ip, 'vul_scan_enabled' => $vul_scan_enabled, + 'ignore_unknown' => $ignore_unknown, 'agent_version' => $agent_version, ] ); @@ -1016,6 +1018,7 @@ if ($update_agent) { $satellite_server = (int) get_parameter('satellite_server', 0); $fixed_ip = (int) get_parameter_switch('fixed_ip', 0); $vul_scan_enabled = (int) get_parameter_switch('vul_scan_enabled', 2); + $ignore_unknown = (int) get_parameter_switch('ignore_unknown', 0); $security_vunerability = (int) get_parameter_switch('security_vunerability', 0); $security_hardening = (int) get_parameter_switch('security_hardening', 0); $security_monitoring = (int) get_parameter_switch('security_monitoring', 0); @@ -1150,6 +1153,7 @@ if ($update_agent) { 'satellite_server' => $satellite_server, 'fixed_ip' => $fixed_ip, 'vul_scan_enabled' => $vul_scan_enabled, + 'ignore_unknown' => $ignore_unknown, ]; if ($config['metaconsole_agent_cache'] == 1) { @@ -1383,6 +1387,7 @@ if ($id_agente) { $satellite_server = (int) $agent['satellite_server']; $fixed_ip = (int) $agent['fixed_ip']; $vul_scan_enabled = (int) $agent['vul_scan_enabled']; + $ignore_unknown = (int) $agent['ignore_unknown']; if (strpos($agent['agent_version'], '(')) { $agent_version = (int) explode('.', explode('(', $agent['agent_version'])[0])[2]; } else { @@ -1633,6 +1638,7 @@ if ($update_module === true || $create_module === true) { $custom_id = (string) get_parameter('custom_id'); $history_data = (int) get_parameter('history_data'); + $ignore_unknown = (int) get_parameter('ignore_unknown'); $dynamic_interval = (int) get_parameter('dynamic_interval'); $dynamic_max = (int) get_parameter('dynamic_max'); $dynamic_min = (int) get_parameter('dynamic_min'); @@ -1841,6 +1847,7 @@ if ($update_module) { 'max_retries' => $max_retries, 'custom_id' => $custom_id, 'history_data' => $history_data, + 'ignore_unknown' => $ignore_unknown, 'dynamic_interval' => $dynamic_interval, 'dynamic_max' => $dynamic_max, 'dynamic_min' => $dynamic_min, @@ -2042,6 +2049,7 @@ if ($create_module) { 'id_modulo' => $id_module, 'custom_id' => $custom_id, 'history_data' => $history_data, + 'ignore_unknown' => $ignore_unknown, 'dynamic_interval' => $dynamic_interval, 'dynamic_max' => $dynamic_max, 'dynamic_min' => $dynamic_min, diff --git a/pandora_console/godmode/agentes/module_manager_editor.php b/pandora_console/godmode/agentes/module_manager_editor.php index a52813fbf3..5fc4f12809 100644 --- a/pandora_console/godmode/agentes/module_manager_editor.php +++ b/pandora_console/godmode/agentes/module_manager_editor.php @@ -305,6 +305,7 @@ if ($id_agent_module) { $max_retries = $module['max_retries']; $custom_id = $module['custom_id']; $history_data = $module['history_data']; + $ignore_unknown = $module['ignore_unknown']; $dynamic_interval = $module['dynamic_interval']; $dynamic_max = $module['dynamic_max']; $dynamic_min = $module['dynamic_min']; @@ -443,6 +444,7 @@ if ($id_agent_module) { $plugin_parameter = ''; $custom_id = ''; $history_data = 1; + $ignore_unknown = 0; $dynamic_interval = 0; $dynamic_min = 0; $dynamic_max = 0; diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php index c396634f67..fbc0499e75 100644 --- a/pandora_console/godmode/agentes/module_manager_editor_common.php +++ b/pandora_console/godmode/agentes/module_manager_editor_common.php @@ -645,6 +645,15 @@ if ($disabledBecauseInPolicy) { ); } +$table_simple->data['caption_ignore_unknown'][0] = __('Ignore unknown').ui_print_help_tip(_('This disables the module\'s state calculation to unknown, so it will never transition to unknown. The state it reflects is the last known status.'), true); +$table_simple->data['ignore_unknown'][0] = html_print_checkbox_switch( + 'ignore_unknown', + 1, + $ignore_unknown, + true, + false +); + // Business Logic for Advanced Part. global $__code_from; // Code comes from module_editor. @@ -1426,7 +1435,7 @@ if ($__code_from === 'modules') { $throw_unknown_events_check = policy_module_is_disable_type_event($__id_pol_mod, EVENTS_GOING_UNKNOWN); } -$table_advanced->data['caption_discard_unknown'][0] = __('Discard unknown events'); +$table_advanced->data['caption_discard_unknown'][0] = __('Discard unknown events').ui_print_help_tip(__('With this mode, the unknown state will be detected, but it will not generate events.'), true); $table_advanced->data['discard_unknown'][0] = html_print_checkbox_switch( 'throw_unknown_events', 1, diff --git a/pandora_console/godmode/files_repo/files_repo.php b/pandora_console/godmode/files_repo/files_repo.php new file mode 100644 index 0000000000..cf22ee294c --- /dev/null +++ b/pandora_console/godmode/files_repo/files_repo.php @@ -0,0 +1,167 @@ +<?php +/** + * File repository + * + * @category Files repository + * @package Pandora FMS + * @subpackage Enterprise + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es + * This code is NOT free software. This code is NOT licenced under GPL2 licence + * You cannnot redistribute it without written permission of copyright holder. + * ============================================================================ + */ + +global $config; + +// ACL Check. +check_login(); +if (check_acl($config['id_user'], 0, 'PM') === false) { + db_pandora_audit( + AUDIT_LOG_ACL_VIOLATION, + 'Trying to access to Files repository' + ); + include 'general/noaccess.php'; + return; +} + +$tab = get_parameter('tab', ''); + +$url = 'index.php?sec=extensions&sec2=godmode/files_repo/files_repo'; + +// Header tabs. +$godmode['text'] = '<a href="'.$url.'&tab=configuration">'; +$godmode['text'] .= html_print_image( + 'images/configuration@svg.svg', + true, + [ + 'title' => __('Administration view'), + 'class' => 'main_menu_icon invert_filter', + ] +); +$godmode['text'] .= '</a>'; +$godmode['godmode'] = 1; + +$operation['text'] = '<a href="'.$url.'">'; +$operation['text'] .= html_print_image( + 'images/see-details@svg.svg', + true, + [ + 'title' => __('Operation view'), + 'class' => 'main_menu_icon invert_filter', + ] +); +$operation['text'] .= '</a>'; +$operation['operation'] = 1; + +$operation['active'] = 1; +$godmode['active'] = 0; +if ($tab === 'configuration') { + $godmode['active'] = 1; + $operation['active'] = 0; +} + +$onheader = [ + 'godmode' => $godmode, + 'operation' => $operation, +]; + +// Header. +ui_print_standard_header( + __('Extensions'), + 'images/extensions.png', + false, + '', + true, + $onheader, + [ + [ + 'link' => '', + 'label' => __('Tools'), + ], + [ + 'link' => '', + 'label' => __('Files repository'), + ], + ] +); + +require_once __DIR__.'/../../include/functions_files_repository.php'; + +// Directory files_repo check. +if (files_repo_check_directory() === false) { + return; +} + +$server_content_length = 0; +if (isset($_SERVER['CONTENT_LENGTH'])) { + $server_content_length = $_SERVER['CONTENT_LENGTH']; +} + +// Check for an anoying error that causes the $_POST and $_FILES arrays. +// were empty if the file is larger than the post_max_size. +if (intval($server_content_length) > 0 && empty($_POST)) { + ui_print_error_message( + __('Problem uploading. Please check this PHP runtime variable values: <pre> post_max_size (currently '.ini_get('post_max_size').')</pre>') + ); +} + +// GET and POST parameters. +$file_id = (int) get_parameter('file_id'); +$add_file = (bool) get_parameter('add_file'); +$update_file = (bool) get_parameter('update_file'); +$delete_file = (bool) get_parameter('delete'); + +// File add or update. +if ($add_file === true || ($update_file === true && $file_id > 0)) { + $groups = get_parameter('groups', []); + $public = (bool) get_parameter('public'); + $description = io_safe_output((string) get_parameter('description')); + if (mb_strlen($description, 'UTF-8') > 200) { + $description = mb_substr($description, 0, 200, 'UTF-8'); + } + + $description = io_safe_input($description); + + if ($add_file === true) { + $result = files_repo_add_file('upfile', $description, $groups, $public); + } else if ($update_file === true) { + $result = files_repo_update_file($file_id, $description, $groups, $public); + $file_id = 0; + } + + if ($result['status'] == false) { + ui_print_error_message($result['message']); + } else { + if ($add_file === true) { + ui_print_success_message(__('Successfully created')); + } else if ($update_file === true) { + ui_print_success_message(__('Successfully updated')); + } + } +} + +// File delete. +if ($delete_file === true && $file_id > 0) { + $result = files_repo_delete_file($file_id); + if ($result !== -1) { + ui_print_result_message($result, __('Successfully deleted'), __('Could not be deleted')); + } + + $file_id = 0; +} + +$operation['active'] = 1; +if ($tab === 'configuration') { + include_once __DIR__.'/files_repo_form.php'; +} else { + include_once __DIR__.'/files_repo_list.php'; +} diff --git a/pandora_console/extensions/files_repo/files_repo_form.php b/pandora_console/godmode/files_repo/files_repo_form.php similarity index 76% rename from pandora_console/extensions/files_repo/files_repo_form.php rename to pandora_console/godmode/files_repo/files_repo_form.php index d8bf6c6836..bf1bc81ca7 100644 --- a/pandora_console/extensions/files_repo/files_repo_form.php +++ b/pandora_console/godmode/files_repo/files_repo_form.php @@ -1,20 +1,27 @@ <?php +/** + * File repository Form + * + * @category Files repository + * @package Pandora FMS + * @subpackage Enterprise + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es + * This code is NOT free software. This code is NOT licenced under GPL2 licence + * You cannnot redistribute it without written permission of copyright holder. + * ============================================================================ + */ -// Pandora FMS - https://pandorafms.com -// ================================================== -// Copyright (c) 2005-2023 Pandora FMS -// Please see https://pandorafms.com/community/ for full contribution list -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; version 2 -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. global $config; -$full_extensions_dir = $config['homedir'].'/'.EXTENSIONS_DIR.'/'; -require_once $full_extensions_dir.'files_repo/functions_files_repo.php'; $file = []; $file['name'] = ''; @@ -117,6 +124,10 @@ if ($file_id > 0) { 'file_id', $file_id, true + ).html_print_input_hidden( + 'update_file', + 1, + true ) ); } else { @@ -150,8 +161,8 @@ if ($file_id > 0) { $table->data[] = $row; -$url = ui_get_full_url('index.php?sec=godmode/extensions&sec2=extensions/files_repo'); -echo "<form method='post' action='$url' enctype='multipart/form-data'>"; +$url = ui_get_full_url('index.php?sec=extensions&sec2=godmode/files_repo/files_repo'); +echo '<form method="post" action="'.$url.'" enctype="multipart/form-data">'; html_print_table($table); html_print_action_buttons($submit_button); echo '</form>'; diff --git a/pandora_console/extensions/files_repo/files_repo_get_file.php b/pandora_console/godmode/files_repo/files_repo_get_file.php similarity index 55% rename from pandora_console/extensions/files_repo/files_repo_get_file.php rename to pandora_console/godmode/files_repo/files_repo_get_file.php index 6d6595a01f..b9a5b4c821 100644 --- a/pandora_console/extensions/files_repo/files_repo_get_file.php +++ b/pandora_console/godmode/files_repo/files_repo_get_file.php @@ -1,54 +1,60 @@ <?php +/** + * Get public file repository. + * + * @category Files repository + * @package Pandora FMS + * @subpackage Enterprise + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es + * This code is NOT free software. This code is NOT licenced under GPL2 licence + * You cannnot redistribute it without written permission of copyright holder. + * ============================================================================ + */ -// Pandora FMS - https://pandorafms.com -// ================================================== -// Copyright (c) 2005-2023 Pandora FMS -// Please see https://pandorafms.com/community/ for full contribution list -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License -// as published by the Free Software Foundation; version 2 -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. require_once '../../include/config.php'; $file_hash = (string) get_parameter('file'); -// Only allow 1 parameter in the request +// Only allow 1 parameter in the request. $check_request = (count($_REQUEST) === 1) ? true : false; $check_get = (count($_GET) === 1) ? true : false; $check_post = (count($_POST) === 0) ? true : false; -// Only allow the parameter 'file' -$check_parameter = (!empty($file_hash)) ? true : false; + +// Only allow the parameter 'file'. +$check_parameter = (empty($file_hash) === false) ? true : false; $check_string = (preg_match('/^[0-9a-zA-Z]{8}$/', $file_hash) === 1) ? true : false; $checks = ($check_request && $check_get && $check_post && $check_parameter && $check_string); if (!$checks) { throw_error(15); - // ERROR } -// Get the db file row +// Get the db file row. $file = db_get_row_filter('tfiles_repo', ['hash' => $file_hash]); if (!$file) { throw_error(10); - // ERROR } -// Case sensitive check +// Case sensitive check. $check_hash = ($file['hash'] == $file_hash) ? true : false; if (!$check_hash) { throw_error(10); - // ERROR } -// Get the location +// Get the location. $files_repo_path = io_safe_output($config['attachment_store']).'/files_repo'; $location = $files_repo_path.'/'.$file['id'].'_'.$file['name']; if (!file_exists($location) || !is_readable($location) || !is_file($location)) { throw_error(5); - // ERROR } // All checks are fine. Download the file! @@ -58,6 +64,13 @@ header('Content-Disposition: attachment; filename="'.$file['name'].'"'); readfile($location); +/** + * Show errors + * + * @param integer $time Sleep. + * + * @return void + */ function throw_error($time=15) { sleep($time); diff --git a/pandora_console/godmode/files_repo/files_repo_list.php b/pandora_console/godmode/files_repo/files_repo_list.php new file mode 100644 index 0000000000..bc2fb4e1bf --- /dev/null +++ b/pandora_console/godmode/files_repo/files_repo_list.php @@ -0,0 +1,157 @@ +<?php +/** + * File repository List + * + * @category Files repository + * @package Pandora FMS + * @subpackage Enterprise + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es + * This code is NOT free software. This code is NOT licenced under GPL2 licence + * You cannnot redistribute it without written permission of copyright holder. + * ============================================================================ + */ + +global $config; + +$offset = (int) get_parameter('offset'); +$filter = []; +$filter['limit'] = $config['block_size']; +$filter['offset'] = $offset; +$filter['order'] = [ + 'field' => 'id', + 'order' => 'DESC', +]; + +$files = files_repo_get_files($filter); + +if (empty($files) === false) { + $url = ui_get_full_url('index.php?sec=extensions&sec2=godmode/files_repo/files_repo'); + + $total_files = files_repo_get_files(false, true); + ui_pagination($total_files, $url, $offset); + + $table = new stdClass(); + $table->width = '100%'; + $table->class = 'info_table'; + $table->style = []; + $table->style[1] = 'max-width: 200px;'; + $table->style[4] = 'text-align: center;'; + $table->head = []; + $table->head[0] = __('Name'); + $table->head[1] = __('Description'); + $table->head[2] = __('Size'); + $table->head[3] = __('Last modification'); + $table->head[4] = ''; + $table->data = []; + + foreach ($files as $file_id => $file) { + $data = []; + // Prepare the filename for the get_file.php script. + $document_root = str_replace( + '\\', + '/', + io_safe_output($_SERVER['DOCUMENT_ROOT']) + ); + $file['location'] = str_replace( + '\\', + '/', + io_safe_output($file['location']) + ); + $relative_path = str_replace($document_root, '', $file['location']); + $file_name = explode('/', $file['location']); + $file_decoded = $file_name[(count($file_name) - 1)]; + $file_path = base64_encode($file_decoded); + $hash = md5($file_path.$config['server_unique_identifier']); + $url_get_file = ui_get_full_url( + 'include/get_file.php?file='.urlencode($file_path).'&hash='.$hash + ); + + $date_format = (isset($config['date_format']) === true) ? io_safe_output($config['date_format']) : 'F j, Y - H:m'; + + $data[0] = '<a href="'.$url_get_file.'" target="_blank">'.$file['name'].'</a>'; + // Name. + $data[1] = ui_print_truncate_text( + $file['description'], + 'description', + true, + true + ); + // Description. + $data[2] = ui_format_filesize($file['size']); + // Size. + $data[3] = date($date_format, $file['mtime']); + // Last modification. + // Public URL. + $data[4] = ''; + $table->cellclass[][4] = 'table_action_buttons'; + if (empty($file['hash']) === false) { + $url_get_public_file = ui_get_full_url( + 'godmode/files_repo/files_repo_get_file.php?file='.$file['hash'] + ); + + $message = __('Copy to clipboard').': Ctrl+C -> Enter'; + $action = 'window.prompt(\''.$message.'\', \''.$url_get_public_file.'\');'; + $data[4] .= '<a href="javascript:;" onclick="'.$action.'">'; + $data[4] .= html_print_image( + 'images/world.png', + true, + ['title' => __('Public link')] + ); + // Public link image. + $data[4] .= '</a> '; + } + + $data[4] .= '<a href="'.$url_get_file.'" target="_blank">'; + $data[4] .= html_print_image( + 'images/download.png', + true, + [ + 'title' => __('Download'), + 'style' => 'padding:3px', + ] + ); + // Download image. + $data[4] .= '</a>'; + + $config_url = $url.'&tab=configuration&file_id='.$file_id; + $data[4] .= '<a href="'.$config_url.'">'; + $data[4] .= html_print_image( + 'images/edit.svg', + true, + [ + 'title' => __('Edit'), + 'class' => 'main_menu_icon invert_filter', + ] + ); + // Edit image. + $data[4] .= '</a>'; + + $delete_url = $url.'&delete=1&file_id='.$file_id; + $data[4] .= '<a href="'.$delete_url.'" onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'; + $data[4] .= html_print_image( + 'images/delete.svg', + true, + [ + 'title' => __('Delete'), + 'class' => 'main_menu_icon invert_filter', + ] + ); + // Delete image. + $data[4] .= '</a>'; + + $table->data[] = $data; + } + + html_print_table($table); +} else { + ui_print_info_message(__('No items')); +} diff --git a/pandora_console/godmode/massive/massive_edit_agents.php b/pandora_console/godmode/massive/massive_edit_agents.php index 25b04e7c48..82698266a1 100755 --- a/pandora_console/godmode/massive/massive_edit_agents.php +++ b/pandora_console/godmode/massive/massive_edit_agents.php @@ -194,6 +194,10 @@ if ($update_agents) { $values['safe_mode_module'] = '0'; } + if (get_parameter('ignore_unknown', '') != '') { + $values['ignore_unknown'] = get_parameter('ignore_unknown'); + } + $secondary_groups_added = (array) get_parameter( 'secondary_groups_added', [] @@ -1183,6 +1187,24 @@ $table->data[7][1] .= html_print_select( true ); +$table->data[8][0] = __('Ignore unknown').ui_print_help_tip(_('This disables the calculation of the unknown state in the agent and any of its modules, so it will never transition to unknown. The state it reflects is the last known status.'), true); +$table->data[8][1] = html_print_select( + [ + '' => __('No change'), + '1' => __('Yes'), + '0' => __('No'), + ], + 'ignore_unknown', + '', + '', + '', + '', + true, + false, + false, + 'w100p' +); + ui_toggle(html_print_table($table, true), __('Advanced options')); unset($table); diff --git a/pandora_console/godmode/massive/massive_edit_modules.php b/pandora_console/godmode/massive/massive_edit_modules.php index 156ca507d8..4711821c52 100755 --- a/pandora_console/godmode/massive/massive_edit_modules.php +++ b/pandora_console/godmode/massive/massive_edit_modules.php @@ -1319,7 +1319,7 @@ $table->data[29][0] = html_print_label_input_block( ); $table->data[29][1] = html_print_label_input_block( - __('Discard unknown events'), + __('Discard unknown events').ui_print_help_tip(__('With this mode, the unknown state will be detected, but it will not generate events.'), true), html_print_select( [ '' => __('No change'), @@ -1544,6 +1544,26 @@ $table->data[40][0] = html_print_label_input_block( ) ); +$table->data[40][1] = html_print_label_input_block( + __('Ignore unknown').ui_print_help_tip(_('This disables the module\'s state calculation to unknown, so it will never transition to unknown. The state it reflects is the last known status.'), true), + html_print_select( + [ + '' => __('No change'), + '1' => __('Yes'), + '0' => __('No'), + ], + 'ignore_unknown', + '', + '', + '', + '', + true, + false, + false, + 'w100p' + ) +); + echo '<form method="post" class="max_floating_element_size" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=edit_modules" id="form_edit">'; html_print_table($table); @@ -2358,6 +2378,7 @@ function process_manage_edit($module_name, $agents_select=null, $module_status=' 'plugin_pass', 'id_export', 'history_data', + 'ignore_unknown', 'critical_inverse', 'warning_inverse', 'percentage_warning', diff --git a/pandora_console/godmode/menu.php b/pandora_console/godmode/menu.php index ace5659ce7..a32b9dadc3 100644 --- a/pandora_console/godmode/menu.php +++ b/pandora_console/godmode/menu.php @@ -508,6 +508,8 @@ if ($access_console_node === true) { enterprise_hook('skins_submenu'); + enterprise_hook('translate_string_submenu'); + $menu_godmode['gsetup']['sub'] = $sub; } } @@ -711,15 +713,25 @@ if ($access_console_node === true) { } if ($access_console_node === true) { - // Tools + // Tools. $menu_godmode['tools']['text'] = __('Tools'); $menu_godmode['tools']['sec2'] = 'operation/extensions'; $menu_godmode['tools']['id'] = 'oper-extensions'; $sub = []; - $sub['operation/agentes/exportdata']['text'] = __('Export data'); - $sub['operation/agentes/exportdata']['id'] = 'export_data'; - $sub['extensions/files_repo']['text'] = __('File repository'); - $sub['extensions/files_repo']['id'] = 'file_repository'; + + if (check_acl($config['id_user'], 0, 'RR') + || check_acl($config['id_user'], 0, 'RW') + || check_acl($config['id_user'], 0, 'RM') + ) { + $sub['operation/agentes/exportdata']['text'] = __('Export data'); + $sub['operation/agentes/exportdata']['id'] = 'export_data'; + } + + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + $sub['godmode/files_repo/files_repo']['text'] = __('File repository'); + $sub['godmode/files_repo/files_repo']['id'] = 'file_repository'; + } + $menu_godmode['tools']['sub'] = $sub; // About. diff --git a/pandora_console/godmode/reporting/graph_builder.php b/pandora_console/godmode/reporting/graph_builder.php index 2e7b1f782e..7524b64861 100644 --- a/pandora_console/godmode/reporting/graph_builder.php +++ b/pandora_console/godmode/reporting/graph_builder.php @@ -236,17 +236,39 @@ if ($add_module === true) { $id_modules ); - $id_agent_modules = db_get_all_rows_sql( - 'SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente IN ('.implode(',', $id_agents).") AND nombre IN ('".implode("','", $id_modules)."')" + $sql = sprintf( + 'SELECT id_agente_modulo + FROM tagente_modulo + WHERE id_agente IN (%s) + AND nombre IN ("%s")', + implode(',', $id_agents), + implode('","', $id_modules) ); + $id_agent_modules = db_get_all_rows_sql($sql); + if (count($id_agent_modules) > 0 && $id_agent_modules != '') { - $order = db_get_row_sql("SELECT `field_order` from tgraph_source WHERE id_graph=$id_graph ORDER BY `field_order` DESC"); + $sql_order = sprintf( + 'SELECT `field_order` + FROM tgraph_source + WHERE id_graph=%d + ORDER BY `field_order` DESC', + $id_graph + ); + $order = db_get_row_sql($sql_order); $order = $order['field_order']; foreach ($id_agent_modules as $id_agent_module) { $order++; - $result = db_process_sql_insert('tgraph_source', ['id_graph' => $id_graph, 'id_agent_module' => $id_agent_module['id_agente_modulo'], 'weight' => $weight, 'field_order' => $order]); + $result = db_process_sql_insert( + 'tgraph_source', + [ + 'id_graph' => $id_graph, + 'id_agent_module' => $id_agent_module['id_agente_modulo'], + 'weight' => $weight, + 'field_order' => $order, + ] + ); } } else { $result = false; diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index 7199c5e15b..4eb6390fb2 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -154,6 +154,14 @@ $image_threshold = false; $time_compare_overlapped = false; $unknowns_graph = false; +$periodicity_chart = false; +$period_maximum = true; +$period_minimum = true; +$period_average = true; +$period_summatory = false; +$period_slice_chart = SECONDS_1HOUR; +$period_mode = CUSTOM_GRAPH_VBARS; + // Added for events items. $server_multiple = [0]; $show_summary_group = false; @@ -353,11 +361,19 @@ switch ($action) { break; case 'simple_graph': - $fullscale = isset($style['fullscale']) ? (bool) $style['fullscale'] : 0; + $fullscale = (isset($style['fullscale']) === true) ? (bool) $style['fullscale'] : 0; $percentil = isset($style['percentil']) ? (bool) $style['percentil'] : 0; $image_threshold = (isset($style['image_threshold']) === true) ? (bool) $style['image_threshold'] : false; $graph_render = $item['graph_render']; $unknowns_graph = $item['check_unknowns_graph']; + $periodicity_chart = (isset($style['periodicity_chart']) === true) ? $style['periodicity_chart'] : false; + $period_maximum = (isset($style['period_maximum']) === true) ? $style['period_maximum'] : true; + $period_minimum = (isset($style['period_minimum']) === true) ? $style['period_minimum'] : true; + $period_average = (isset($style['period_average']) === true) ? $style['period_average'] : true; + $period_summatory = (isset($style['period_summatory']) === true) ? $style['period_summatory'] : false; + $period_slice_chart = (isset($style['period_slice_chart']) === true) ? $style['period_slice_chart'] : SECONDS_1HOUR; + $period_mode = (isset($style['period_mode']) === true) ? $style['period_mode'] : CUSTOM_GRAPH_VBARS; + // The break hasn't be forgotten. case 'simple_baseline_graph': case 'projection_graph': @@ -3050,6 +3066,22 @@ if (is_metaconsole() === true) { </td> </tr> + <tr id="row_periodicity_chart" class="datos"> + <td class="bolder"><?php echo __('Sliced mode'); ?></td> + <td > + <?php + html_print_checkbox_switch( + 'periodicity_chart', + 1, + (bool) $periodicity_chart, + false, + false, + 'showPeriodicityOptions(this)' + ); + ?> + </td> + </tr> + <tr id="row_graph_render" class="datos"> <td class="bolder"> <?php @@ -3197,6 +3229,111 @@ if (is_metaconsole() === true) { </td> </tr> + <tr id="row_period_maximum" class="datos"> + <td class="bolder"><?php echo __('Maximum'); ?></td> + <td > + <?php + html_print_checkbox_switch( + 'period_maximum', + 1, + (bool) $period_maximum, + false + ); + ?> + </td> + </tr> + + <tr id="row_period_minimum" class="datos"> + <td class="bolder"><?php echo __('Minimum'); ?></td> + <td > + <?php + html_print_checkbox_switch( + 'period_minimum', + 1, + (bool) $period_minimum, + false + ); + ?> + </td> + </tr> + + <tr id="row_period_average" class="datos"> + <td class="bolder"><?php echo __('Average'); ?></td> + <td > + <?php + html_print_checkbox_switch( + 'period_average', + 1, + (bool) $period_average, + false + ); + ?> + </td> + </tr> + + <tr id="row_period_summatory" class="datos"> + <td class="bolder"><?php echo __('Summatory'); ?></td> + <td > + <?php + html_print_checkbox_switch( + 'period_summatory', + 1, + (bool) $period_summatory, + false + ); + ?> + </td> + </tr> + + <tr id="row_period_slice_chart" class="datos"> + <td class="bolder"><?php echo __('Slice'); ?></td> + <td > + <?php + html_print_extended_select_for_time( + 'period_slice_chart', + (string) $period_slice_chart, + '', + '', + 0, + 7, + false, + false, + true, + '', + false, + [ + SECONDS_1HOUR => __('1 hour'), + SECONDS_1DAY => __('1 day'), + SECONDS_1WEEK => __('1 week'), + SECONDS_1MONTH => __('1 month'), + ] + ); + ?> + </td> + </tr> + <tr id="row_period_mode" class="datos"> + <td class="bolder"><?php echo __('Mode'); ?></td> + <td > + <?php + $options_period_mode = [ + CUSTOM_GRAPH_AREA => __('Area'), + CUSTOM_GRAPH_LINE => __('Line'), + CUSTOM_GRAPH_VBARS => __('Vertical bars'), + ]; + html_print_select( + $options_period_mode, + 'period_mode', + $period_mode, + '', + '', + 0, + false, + false, + false + ); + ?> + </td> + </tr> <tr id="row_exception_condition" class="datos"> <td class="bolder"><?php echo __('Condition'); ?></td> <td> @@ -7305,6 +7442,13 @@ function chooseType() { $("#row_filter_search").hide(); $("#row_filter_exclude").hide(); $("#row_percentil").hide(); + $("#row_periodicity_chart").hide(); + $("#row_period_maximum").hide(); + $("#row_period_minimum").hide(); + $("#row_period_average").hide(); + $("#row_period_summatory").hide(); + $("#row_period_slice_chart").hide(); + $("#row_period_mode").hide(); $("#log_help_tip").css("visibility", "hidden"); $("#agents_row").hide(); $("#agents_modules_row").hide(); @@ -7448,12 +7592,23 @@ function chooseType() { break; case 'simple_graph': - $("#row_time_compare_overlapped").show(); - $("#row_fullscale").show(); - $("#row_image_threshold").show(); - $("#row_graph_render").show(); - $("#row_percentil").show(); - $("#row_unknowns_graph").show(); + $("#row_periodicity_chart").show(); + var periodicity_chart = $("input[name='periodicity_chart']").prop("checked"); + if(periodicity_chart){ + $("#row_period_maximum").show(); + $("#row_period_minimum").show(); + $("#row_period_average").show(); + $("#row_period_summatory").show(); + $("#row_period_slice_chart").show(); + $("#row_period_mode").show(); + } else { + $("#row_time_compare_overlapped").show(); + $("#row_fullscale").show(); + $("#row_image_threshold").show(); + $("#row_graph_render").show(); + $("#row_percentil").show(); + $("#row_unknowns_graph").show(); + } // Force type. if('<?php echo $action; ?>' === 'new'){ diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index 7d75b5bd27..842e05147d 100755 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -2523,6 +2523,15 @@ switch ($action) { $style['image_threshold'] = (int) get_parameter( 'image_threshold' ); + + $style['periodicity_chart'] = (int) get_parameter_checkbox('periodicity_chart', 0); + $style['period_maximum'] = (int) get_parameter_checkbox('period_maximum', 1); + $style['period_minimum'] = (int) get_parameter_checkbox('period_minimum', 1); + $style['period_average'] = (int) get_parameter_checkbox('period_average', 1); + $style['period_summatory'] = (int) get_parameter_checkbox('period_summatory', 0); + $style['period_slice_chart'] = get_parameter('period_slice_chart', SECONDS_1HOUR); + $style['period_mode'] = get_parameter('period_mode', CUSTOM_GRAPH_VBARS); + if ($label != '') { $style['label'] = $label; } else { @@ -3512,6 +3521,15 @@ switch ($action) { $style['image_threshold'] = (int) get_parameter( 'image_threshold' ); + + $style['periodicity_chart'] = (int) get_parameter_checkbox('periodicity_chart', 0); + $style['period_maximum'] = (int) get_parameter_checkbox('period_maximum', 1); + $style['period_minimum'] = (int) get_parameter_checkbox('period_minimum', 1); + $style['period_average'] = (int) get_parameter_checkbox('period_average', 1); + $style['period_summatory'] = (int) get_parameter_checkbox('period_summatory', 0); + $style['period_slice_chart'] = get_parameter('period_slice_chart', SECONDS_1HOUR); + $style['period_mode'] = get_parameter('period_mode', CUSTOM_GRAPH_VBARS); + if ($label != '') { $style['label'] = $label; } else { diff --git a/pandora_console/godmode/wizards/Applications.class.php b/pandora_console/godmode/wizards/Applications.class.php index 7458aea872..f92a8cf0d6 100644 --- a/pandora_console/godmode/wizards/Applications.class.php +++ b/pandora_console/godmode/wizards/Applications.class.php @@ -212,6 +212,27 @@ class Applications extends Wizard Wizard::printBigButtonsList($wiz_data); + $not_defined_extensions = $extensions->loadExtensions(true); + + $output = html_print_div( + [ + 'class' => 'agent_details_line', + 'content' => ui_toggle( + Wizard::printBigButtonsList($not_defined_extensions, true), + '<span class="subsection_header_title">'.__('Not installed').'</span>', + 'not_defined_apps', + 'not_defined_apps', + false, + true, + '', + '', + 'box-flat white_table_graph w100p' + ), + ], + ); + + echo $output; + echo '<div class="app_mssg"><i>*'.__('All company names used here are for identification purposes only. Use of these names, logos, and brands does not imply endorsement.').'</i></div>'; } diff --git a/pandora_console/godmode/wizards/Cloud.class.php b/pandora_console/godmode/wizards/Cloud.class.php index 2492322f3b..c464c49faa 100644 --- a/pandora_console/godmode/wizards/Cloud.class.php +++ b/pandora_console/godmode/wizards/Cloud.class.php @@ -232,6 +232,27 @@ class Cloud extends Wizard Wizard::printBigButtonsList($wiz_data); + $not_defined_extensions = $extensions->loadExtensions(true); + + $output = html_print_div( + [ + 'class' => 'agent_details_line', + 'content' => ui_toggle( + Wizard::printBigButtonsList($not_defined_extensions, true), + '<span class="subsection_header_title">'.__('Not installed').'</span>', + 'not_defined_apps', + 'not_defined_apps', + false, + true, + '', + '', + 'box-flat white_table_graph w100p' + ), + ], + ); + + echo $output; + echo '<div class="app_mssg"><i>*'.__('All company names used here are for identification purposes only. Use of these names, logos, and brands does not imply endorsement.').'</i></div>'; } diff --git a/pandora_console/godmode/wizards/Custom.class.php b/pandora_console/godmode/wizards/Custom.class.php index 41a177b3e3..516b8d1e80 100644 --- a/pandora_console/godmode/wizards/Custom.class.php +++ b/pandora_console/godmode/wizards/Custom.class.php @@ -135,6 +135,27 @@ class Custom extends Wizard Wizard::printBigButtonsList($wiz_data); + $not_defined_extensions = $extensions->loadExtensions(true); + + $output = html_print_div( + [ + 'class' => 'agent_details_line', + 'content' => ui_toggle( + Wizard::printBigButtonsList($not_defined_extensions, true), + '<span class="subsection_header_title">'.__('Not installed').'</span>', + 'not_defined_apps', + 'not_defined_apps', + false, + true, + '', + '', + 'box-flat white_table_graph w100p' + ), + ], + ); + + echo $output; + echo '<div class="app_mssg"><i>*'.__('All company names used here are for identification purposes only. Use of these names, logos, and brands does not imply endorsement.').'</i></div>'; return $result; } diff --git a/pandora_console/godmode/wizards/ManageExtensions.class.php b/pandora_console/godmode/wizards/ManageExtensions.class.php index 91ba1926e5..34c9950bc6 100644 --- a/pandora_console/godmode/wizards/ManageExtensions.class.php +++ b/pandora_console/godmode/wizards/ManageExtensions.class.php @@ -697,6 +697,9 @@ class ManageExtensions extends HTML $order, ); + $appsMetadata = self::loadDiscoveryAppsMetadata(); + $flattenMetadata = array_merge(...array_values($appsMetadata)); + $count = db_get_num_rows($sqlCount); foreach ($data as $key => $row) { @@ -705,6 +708,15 @@ class ManageExtensions extends HTML $logo = $this->defaultLogo; } + $metadataImage = $flattenMetadata[$row['short_name']]['image']; + + if (isset($metadataImage) === true + && file_exists($config['homedir'].'/images/discovery/'.$metadataImage) === true + && file_exists($this->path.'/'.$row['short_name'].'/logo.png') === false + ) { + $logo = '/images/discovery/'.$metadataImage; + } + $logo = html_print_image($logo, true, ['style' => 'max-width: 30px; margin-right: 15px;']); $data[$key]['name'] = $logo.io_safe_output($row['name']); $data[$key]['short_name'] = $row['short_name']; @@ -1490,4 +1502,55 @@ class ManageExtensions extends HTML } + /** + * Read metadata CSV from system and store data structure in memory. + * + * @return array Data structure. + */ + private static function loadDiscoveryAppsMetadata() + { + global $config; + + // Open the CSV file for reading. + $fileHandle = fopen($config['homedir'].'/extras/discovery/DiscoveryApps.csv', 'r'); + + // Check if the file was opened successfully. + if ($fileHandle !== false) { + $csvData = []; + + // Loop through each line in the CSV file. + while (($data = fgetcsv($fileHandle)) !== false) { + $csvData[] = explode(';', $data[0]); + } + + // Close the file handle. + fclose($fileHandle); + } + + $groupedArray = []; + + foreach ($csvData as $item) { + $key = $item[2]; + if (isset($groupedArray[$key]) === false) { + $groupedArray[$key] = []; + } + + $itemShortName = $item[0]; + unset($item[0]); + unset($item[2]); + + $itemIns = [ + 'name' => $item[1], + 'enterprise' => $item[3], + 'image' => $item[4], + 'url' => $item[5], + ]; + + $groupedArray[$key][$itemShortName] = $itemIns; + } + + return $groupedArray; + } + + } diff --git a/pandora_console/godmode/wizards/Wizard.main.php b/pandora_console/godmode/wizards/Wizard.main.php index a286b97fca..0b95a31ac7 100644 --- a/pandora_console/godmode/wizards/Wizard.main.php +++ b/pandora_console/godmode/wizards/Wizard.main.php @@ -492,14 +492,43 @@ class Wizard $data['url'] = '#'; } + $cnt_class = 'data_container'; + $ent_icon = ''; + $label_class = ''; + + if (isset($data['ghost_mode']) === true + && $data['ghost_mode'] === true + ) { + $cnt_class .= ' alpha50'; + } + + if (isset($data['mark_as_enterprise']) === true + && $data['mark_as_enterprise'] === true + ) { + $ent_icon .= html_print_div( + [ + 'class' => 'w20px inline margin-lr-10', + 'content' => html_print_image( + 'images/ent_icon.png', + true, + ['class' => 'max-width-100p height_auto_important'] + ), + ], + true + ); + + $label_class = 'inline'; + } + ?> <li class="discovery"> <a href="<?php echo $data['url']; ?>"> - <div class="data_container"> + <div class="<?php echo $cnt_class; ?> "> <?php html_print_image($data['icon']); ?> - <br><label id="text_wizard"> + <br><label id="text_wizard" class="<?php echo $label_class; ?>"> <?php echo io_safe_output($data['label']); ?> </label> + <?php echo $ent_icon; ?> </div> </a> </li> @@ -514,11 +543,19 @@ class Wizard * * @return void Print the full list. */ - public static function printBigButtonsList($list_data) + public static function printBigButtonsList($list_data, $return=false) { + if ($return === true) { + ob_start(); + } + echo '<ul class="bigbuttonlist">'; array_map('self::printBigButtonElement', $list_data); echo '</ul>'; + + if ($return === true) { + return ob_get_clean(); + } } diff --git a/pandora_console/images/discovery/pandorafms.aws.ec2.png b/pandora_console/images/discovery/pandorafms.aws.ec2.png new file mode 100644 index 0000000000..46ae12b266 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.aws.ec2.png differ diff --git a/pandora_console/images/discovery/pandorafms.aws.rds.png b/pandora_console/images/discovery/pandorafms.aws.rds.png new file mode 100644 index 0000000000..b118945b83 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.aws.rds.png differ diff --git a/pandora_console/images/discovery/pandorafms.aws.s3.png b/pandora_console/images/discovery/pandorafms.aws.s3.png new file mode 100644 index 0000000000..2a52510ca4 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.aws.s3.png differ diff --git a/pandora_console/images/discovery/pandorafms.azure.mc.png b/pandora_console/images/discovery/pandorafms.azure.mc.png new file mode 100644 index 0000000000..562cd52c66 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.azure.mc.png differ diff --git a/pandora_console/images/discovery/pandorafms.db2.png b/pandora_console/images/discovery/pandorafms.db2.png new file mode 100644 index 0000000000..c16329bdb5 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.db2.png differ diff --git a/pandora_console/images/discovery/pandorafms.gcp.ce.png b/pandora_console/images/discovery/pandorafms.gcp.ce.png new file mode 100644 index 0000000000..a971abc491 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.gcp.ce.png differ diff --git a/pandora_console/images/discovery/pandorafms.kubernetes.png b/pandora_console/images/discovery/pandorafms.kubernetes.png new file mode 100644 index 0000000000..c0ebe64a4a Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.kubernetes.png differ diff --git a/pandora_console/images/discovery/pandorafms.mongodb.png b/pandora_console/images/discovery/pandorafms.mongodb.png new file mode 100644 index 0000000000..1042463eda Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.mongodb.png differ diff --git a/pandora_console/images/discovery/pandorafms.mssql.png b/pandora_console/images/discovery/pandorafms.mssql.png new file mode 100644 index 0000000000..3556b48572 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.mssql.png differ diff --git a/pandora_console/images/discovery/pandorafms.mysql.png b/pandora_console/images/discovery/pandorafms.mysql.png new file mode 100644 index 0000000000..b24a84ceea Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.mysql.png differ diff --git a/pandora_console/images/discovery/pandorafms.oracle.png b/pandora_console/images/discovery/pandorafms.oracle.png new file mode 100644 index 0000000000..f8b41a81b4 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.oracle.png differ diff --git a/pandora_console/images/discovery/pandorafms.ovh.png b/pandora_console/images/discovery/pandorafms.ovh.png new file mode 100644 index 0000000000..69eddb9a31 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.ovh.png differ diff --git a/pandora_console/images/discovery/pandorafms.postgresql.png b/pandora_console/images/discovery/pandorafms.postgresql.png new file mode 100644 index 0000000000..e07c3b8871 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.postgresql.png differ diff --git a/pandora_console/images/discovery/pandorafms.proxmox.png b/pandora_console/images/discovery/pandorafms.proxmox.png new file mode 100644 index 0000000000..d44d290de7 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.proxmox.png differ diff --git a/pandora_console/images/discovery/pandorafms.sap.deset.png b/pandora_console/images/discovery/pandorafms.sap.deset.png new file mode 100644 index 0000000000..0132d8b8d3 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.sap.deset.png differ diff --git a/pandora_console/images/discovery/pandorafms.vmware.png b/pandora_console/images/discovery/pandorafms.vmware.png new file mode 100644 index 0000000000..c4887f12e3 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.vmware.png differ diff --git a/pandora_console/images/discovery/pandorafms.vulnscan.png b/pandora_console/images/discovery/pandorafms.vulnscan.png new file mode 100644 index 0000000000..63a118cc45 Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.vulnscan.png differ diff --git a/pandora_console/images/discovery/pandorafms.xenserver.png b/pandora_console/images/discovery/pandorafms.xenserver.png new file mode 100644 index 0000000000..0f9fd893fa Binary files /dev/null and b/pandora_console/images/discovery/pandorafms.xenserver.png differ diff --git a/pandora_console/images/ent_icon.png b/pandora_console/images/ent_icon.png new file mode 100644 index 0000000000..62dc5d22d7 Binary files /dev/null and b/pandora_console/images/ent_icon.png differ diff --git a/pandora_console/include/ajax/module.php b/pandora_console/include/ajax/module.php index 67e9ad648f..7b588d5fb8 100755 --- a/pandora_console/include/ajax/module.php +++ b/pandora_console/include/ajax/module.php @@ -1310,7 +1310,7 @@ if (check_login()) { } if (is_snapshot_data($module['datos']) === false) { - $link = 'winopeng_var(\'operation/agentes/stat_win.php?type='.$graph_type.'&period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&refresh='.SECONDS_10MINUTES.'&draw_events='.$draw_events.'\', \'day_'.$win_handle.'\', 800, 480)'; + $link = 'winopeng_var(\'operation/agentes/stat_win.php?type='.$graph_type.'&period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&refresh='.SECONDS_10MINUTES.'&period_graph=0&draw_events='.$draw_events.'\', \'day_'.$win_handle.'\', 800, 480)'; $graphButtons[] = html_print_anchor( [ 'href' => 'javascript:'.$link, @@ -1529,9 +1529,14 @@ if (check_login()) { $output = ''; $graph_data = get_parameter('graph_data', ''); $params = json_decode(base64_decode($graph_data), true); + $form_data = json_decode(base64_decode(get_parameter('form_data', [])), true); $server_id = (int) get_parameter('server_id', 0); include_once $config['homedir'].'/include/functions_graph.php'; + $tab_active = get_parameter('active', 'tabs-chart-module-graph'); + + $output .= draw_form_stat_win($form_data, $tab_active); + // Metaconsole connection to the node. if (is_metaconsole() === true && empty($server_id) === false) { $server = metaconsole_get_connection_by_id($server_id); @@ -1583,7 +1588,23 @@ if (check_login()) { $output .= $graph['chart']; $output .= '</div>'; } else { - $output .= grafico_modulo_sparse($params); + if ($tab_active === 'tabs-chart-module-graph') { + $output .= grafico_modulo_sparse($params); + } else { + $output .= '<div class="container-periodicity-graph">'; + $output .= '<div>'; + $output .= graphic_periodicity_module($params); + $output .= '</div>'; + $output .= '</div>'; + if ($params['compare'] === 'separated') { + $params['date'] = ($params['date'] - $params['period']); + $output .= '<div class="container-periodicity-graph">'; + $output .= '<div>'; + $output .= graphic_periodicity_module($params); + $output .= '</div>'; + $output .= '</div>'; + } + } } } diff --git a/pandora_console/include/class/ExtensionsDiscovery.class.php b/pandora_console/include/class/ExtensionsDiscovery.class.php index 7fa1bfdb96..84528c5bb1 100644 --- a/pandora_console/include/class/ExtensionsDiscovery.class.php +++ b/pandora_console/include/class/ExtensionsDiscovery.class.php @@ -195,28 +195,200 @@ class ExtensionsDiscovery extends Wizard /** * Return array extensions filtered by section * - * @return array Extensions for + * @param boolean $not_defined_only Get only those extensions that are defined in the metadata CSV and not in db. + * + * @return array Extensions */ - public function loadExtensions() + public function loadExtensions($not_defined_only=false) { global $config; // Check access. check_login(); $extensions = []; $rows = $this->getExtensionsApps(); - foreach ($rows as $key => $extension) { - $logo = $this->path.'/'.$extension['short_name'].'/'.$this->icon; - if (file_exists($config['homedir'].$logo) === false) { - $logo = $this->defaultLogo; + + define('NOT_FOUND_MSG', 1); + define('ENTERPRISE_MSG', 2); + define('URL_MSG', 3); + + $appsMetadata = self::loadDiscoveryAppsMetadata(); + $sectionMetadata = $appsMetadata[$this->section]; + + $anchor = html_print_anchor( + [ + 'href' => 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=alert', + 'content' => __('here'), + ], + true + ); + + // Print JS required for message management. + echo '<script> + function showExtensionMsg(msgs, url, title) { + var msgs_json = JSON.parse(msgs); + + var url_str = ""; + if (url != false) { + url_str = `<a target="_blank" class="link-important" href="${url}">'.__('here').'</a>`; } - $extensions[] = [ - 'icon' => $logo, - 'label' => $extension['name'], - 'url' => ui_get_full_url( + var markup = "<ul class=\'\'>"; + + if (msgs_json.includes('.NOT_FOUND_MSG.')) { + markup += "<li> '.__('The required files for the application were not found.').'</li>"; + } + + if (msgs_json.includes('.ENTERPRISE_MSG.')) { + markup += "<li> '.__('This discovery application is for Enterprise customers only.').'</li>"; + } + + if (msgs_json.includes('.URL_MSG.')) { + markup += \'<li> '.__('You can download this application from').' \'+url_str+\'.</li>\'; + } + + markup += "</ul>"; + + confirmDialog({ + title: title, + message: markup, + hideOkButton: true, + ok: "'.__('OK').'", + cancel: "'.__('Cancel').'", + size: 550, + maxHeight: 500 + }); + } + </script>'; + + if ($not_defined_only === true) { + // Case: search for those extensions defined in metadata CSV which are not in database. + $short_names_list = array_column($rows, 'short_name'); + + // Traverse apps in CSV metadata file and set properly those that do not exist in database. + foreach ($sectionMetadata as $short_name => $val) { + if (in_array($short_name, $short_names_list) === false) { + $logo = $this->path.'/'.$short_name.'/'.$val['image']; + if (file_exists($config['homedir'].$logo) === false) { + $logo = $this->defaultLogo; + } + + $error_msgs = []; + + if (isset($val['image']) === true + && file_exists($config['homedir'].'/images/discovery/'.$val['image']) === true + && file_exists($config['homedir'].$this->path.'/'.$short_name.'/'.$val['image']) === false + ) { + $logo = '/images/discovery/'.$val['image']; + } + + $url = ui_get_full_url( + 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz='.$this->section.'&mode='.$extension['short_name'] + ); + + if (enterprise_installed() === false && ((bool) $val['enterprise'] === true)) { + // Display enterprise message if console is open and extension is enterprise. + $error_msgs[] = ENTERPRISE_MSG; + } + + $url_href = false; + if (isset($val['url']) === true + && $val['url'] !== '' + ) { + $url_href = $val['url']; + // Display URL message if an URL is defined in the metadata. + $error_msgs[] = URL_MSG; + } + + if (empty($error_msgs) === false) { + $json_errors = json_encode($error_msgs); + // Display messages dialog if there are some. + $url = 'javascript: showExtensionMsg(\''.$json_errors.'\', \''.$url_href.'\', \''.io_safe_input($val['name']).'\');'; + } + + $extensions[] = [ + 'icon' => $logo, + 'label' => io_safe_input($val['name']), + 'url' => $url, + 'ghost_mode' => true, + 'mark_as_enterprise' => (bool) $val['enterprise'], + 'defined' => false, + ]; + } + } + } else { + foreach ($rows as $key => $extension) { + $error_msgs = []; + + $logo = $this->path.'/'.$extension['short_name'].'/'.$this->icon; + if (file_exists($config['homedir'].$logo) === false) { + $logo = $this->defaultLogo; + } + + $mark_as_enterprise = false; + $ghostMode = false; + $url = ui_get_full_url( 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz='.$this->section.'&mode='.$extension['short_name'] - ), - ]; + ); + $url_href = false; + + $iniFileExists = self::iniFileExists($extension['short_name']); + + // Access metadata for current extension. + if (isset($sectionMetadata[$extension['short_name']]) === true) { + $itemData = $sectionMetadata[$extension['short_name']]; + + if (isset($itemData) === true) { + if (isset($itemData['image']) === true + && file_exists($config['homedir'].'/images/discovery/'.$itemData['image']) === true + && file_exists($config['homedir'].$this->path.'/'.$extension['short_name'].'/'.$this->icon) === false + ) { + $logo = '/images/discovery/'.$itemData['image']; + } + + $mark_as_enterprise = (bool) $itemData['enterprise']; + + if ($iniFileExists === false + && isset($itemData['url']) === true + && $itemData['url'] !== '' + ) { + $url_href = $itemData['url']; + // Display URL message if an URL is defined in the metadata. + $error_msgs[] = URL_MSG; + } + + if (enterprise_installed() === false + && (bool) $itemData['enterprise'] === true + ) { + // Set ghost mode and display enterprise message if console is open and extension is enterprise. + $error_msgs[] = ENTERPRISE_MSG; + $ghostMode = true; + } + + $itemName = $itemData['name']; + } + } + + if ($iniFileExists === false) { + // Set ghost mode and display not found message if ini file does not exist for extension. + $error_msgs[] = NOT_FOUND_MSG; + $ghostMode = true; + } + + if (empty($error_msgs) === false) { + $json_errors = json_encode($error_msgs); + // Display messages dialog if there are some. + $url = 'javascript: showExtensionMsg(\''.$json_errors.'\', \''.$url_href.'\', \''.io_safe_input($itemName).'\');'; + } + + $extensions[] = [ + 'icon' => $logo, + 'label' => $extension['name'], + 'url' => $url, + 'ghost_mode' => $ghostMode, + 'mark_as_enterprise' => $mark_as_enterprise, + 'defined' => true, + ]; + } } return $extensions; @@ -2553,4 +2725,71 @@ class ExtensionsDiscovery extends Wizard } + /** + * Read metadata CSV from system and store data structure in memory. + * + * @return array Data structure. + */ + private static function loadDiscoveryAppsMetadata() + { + global $config; + + // Open the CSV file for reading. + $fileHandle = fopen($config['homedir'].'/extras/discovery/DiscoveryApps.csv', 'r'); + + // Check if the file was opened successfully. + if ($fileHandle !== false) { + $csvData = []; + + // Loop through each line in the CSV file. + while (($data = fgetcsv($fileHandle)) !== false) { + $csvData[] = explode(';', $data[0]); + } + + // Close the file handle. + fclose($fileHandle); + } + + $groupedArray = []; + + foreach ($csvData as $item) { + $key = $item[2]; + if (isset($groupedArray[$key]) === false) { + $groupedArray[$key] = []; + } + + $itemShortName = $item[0]; + unset($item[0]); + unset($item[2]); + + $itemIns = [ + 'name' => $item[1], + 'enterprise' => $item[3], + 'image' => $item[4], + 'url' => $item[5], + ]; + + $groupedArray[$key][$itemShortName] = $itemIns; + } + + return $groupedArray; + } + + + /** + * Check if ini file exists for extension. + * + * @param string $shortName Extension short name. + * + * @return boolean Whether or not ini file exists. + */ + public static function iniFileExists($shortName) + { + global $config; + + $path = $config['homedir'].'/attachment/discovery/'.$shortName.'/discovery_definition.ini'; + return file_exists($path); + } + + } diff --git a/pandora_console/include/class/HTML.class.php b/pandora_console/include/class/HTML.class.php index 5020538e26..b019b2c59e 100644 --- a/pandora_console/include/class/HTML.class.php +++ b/pandora_console/include/class/HTML.class.php @@ -492,6 +492,7 @@ class HTML $class = ''; } + $style_li = ''; if (empty($input['style']) === false) { $style_li = $input['style']; } diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 1a8f8f6cd9..b4b84339cd 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC231215'; +$build_version = 'PC231219'; $pandora_version = 'v7.0NG.774'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php index 0bb6612376..0df8f3ad3b 100644 --- a/pandora_console/include/functions.php +++ b/pandora_console/include/functions.php @@ -4049,6 +4049,7 @@ function series_type_graph_array($data, $show_elements_graph) $i = 0; if (isset($data) && is_array($data)) { foreach ($data as $key => $value) { + $str = ''; if ($show_elements_graph['compare'] == 'overlapped') { if ($key == 'sum2') { $str = ' ('.__('Previous').')'; @@ -4132,7 +4133,7 @@ function series_type_graph_array($data, $show_elements_graph) } else { $name_legend = ''; - if ($show_elements_graph['graph_analytics'] === true) { + if (isset($show_elements_graph['graph_analytics']) === true && $show_elements_graph['graph_analytics'] === true) { $name_legend .= '<div class="graph-analytics-legend-main">'; $name_legend .= '<div class="graph-analytics-legend-square" style="background-color: '.$color_series[$i]['color'].';">'; $name_legend .= '<span class="square-value">'; @@ -6799,3 +6800,169 @@ function csv_format_delimiter(?string $str) // TODO: a setup option that enables user to choose a delimiter character would probably be desirable in the future. return '"'.$str.'"'; } + + +/** + * Get List translate string. + * + * @param string $language Language. + * @param string $text Text. + * @param integer $page Page. + * + * @return array List. + */ +function getListStringsTranslate($language, $text='', $page=0) +{ + global $config; + + $fileLanguage = $config['homedir'].'/include/languages/'.$language.'.po'; + + $file = file($fileLanguage); + + $listStrings = []; + $readingOriginal = false; + $readingTranslation = false; + $original = ''; + $translation = ''; + foreach ($file as $line) { + // Jump empty lines. + if (strlen(trim($line)) == 0) { + continue; + } + + // Jump comment lines. + if (preg_match('/^#.*$/', $line) > 0) { + continue; + } + + if (preg_match('/^msgid "(.*)"/', $line, $match) == 1) { + if (empty($original) === false && (preg_match('/.*'.$text.'.*/', $original) >= 1)) { + $listStrings[$original] = []; + $listStrings[$original]['po'] = $translation; + $listStrings[$original]['ext'] = ''; + } + + $original = ''; + $readingOriginal = false; + $readingTranslation = false; + + if (strlen($match[1]) > 0) { + $original = $match[1]; + } else { + $readingOriginal = true; + } + } else if (preg_match('/^msgstr "(.*)"/', $line, $match) == 1) { + if (strlen($match[1]) > 0) { + $translation = $match[1]; + } else { + $readingOriginal = false; + $readingTranslation = true; + $translation = ''; + } + } else if (preg_match('/^"(.*)"/', $line, $match) == 1) { + if ($readingOriginal) { + $original = $original.$match[1]; + } else { + $translation = $translation.$match[1]; + } + } + } + + if (empty($original) === false && (preg_match('/.*'.$text.'.*/', $original) >= 1)) { + $listStrings[$original] = []; + $listStrings[$original]['po'] = $translation; + $listStrings[$original]['ext'] = ''; + } + + $sql = sprintf( + 'SELECT * + FROM textension_translate_string + WHERE lang = "%s"', + $language + ); + + $dbListStrings = db_get_all_rows_sql($sql); + if ($dbListStrings === false) { + $dbListStrings = []; + } + + foreach ($dbListStrings as $row) { + if (array_key_exists(io_safe_output($row['string']), $listStrings)) { + $listStrings[io_safe_output($row['string'])]['ext'] = io_safe_output($row['translation']); + } + } + + return $listStrings; +} + + +/** + * Translate. + * + * @param string $string String. + * + * @return mixed + */ +function get_defined_translation($string) +{ + global $config; + static $cache = []; + static $cache_translation = []; + + $language = get_user_language(); + + if (func_num_args() !== 1) { + $args = func_get_args(); + array_shift($args); + } + + // Try with the cache. + if (isset($cache[$language]) === true) { + if (isset($cache[$language][$string]) === true) { + if (func_num_args() === 1) { + return $cache[$language][$string]; + } else { + return vsprintf($cache[$language][$string], $args); + } + } + } + + if (is_array($cache_translation) === true && count($cache_translation) === 0) { + $cache_translation_all = db_get_all_rows_sql( + sprintf( + 'SELECT translation, string + FROM textension_translate_string + WHERE lang = "%s"', + $language + ) + ); + $cache_translation = false; + if ($cache_translation_all !== false) { + foreach ($cache_translation_all as $key => $value) { + $cache_translation[md5(io_safe_output($value['string']))] = $value['translation']; + } + } + } else { + if ($cache_translation === false) { + return false; + } + + if (empty($cache_translation[md5($string)]) === false) { + $translation = $cache_translation[md5($string)]; + } else { + return false; + } + } + + if (empty($translation) === true) { + return false; + } else { + $cache[$language][$string] = io_safe_output($translation); + + if (func_num_args() === 1) { + return $cache[$language][$string]; + } else { + return vsprintf($cache[$language][$string], $args); + } + } +} diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php index bf1c1b3004..7417a48125 100644 --- a/pandora_console/include/functions_api.php +++ b/pandora_console/include/functions_api.php @@ -3676,6 +3676,7 @@ function api_set_create_network_module($id, $thrash1, $other, $thrash3) 'critical_inverse' => $other['data'][28], 'warning_inverse' => $other['data'][29], 'ff_type' => $other['data'][30], + 'ignore_unknown' => $other['data'][32], ]; if (! $values['descripcion']) { @@ -3840,6 +3841,7 @@ function api_set_update_network_module($id_module, $thrash1, $other, $thrash3) 'warning_inverse', 'policy_linked', 'ff_type', + 'ignore_unknown', ]; $values = []; @@ -3853,7 +3855,6 @@ function api_set_update_network_module($id_module, $thrash1, $other, $thrash3) } $values['policy_linked'] = 0; - $result_update = modules_update_agent_module($id_module, $values); if ($result_update < 0) { @@ -3954,6 +3955,7 @@ function api_set_create_plugin_module($id, $thrash1, $other, $thrash3) 'critical_inverse' => $other['data'][33], 'warning_inverse' => $other['data'][34], 'ff_type' => $other['data'][35], + 'ignore_unknown' => $other['data'][37], ]; $plugin = db_get_row('tplugin', 'id', $values['id_plugin']); @@ -4115,6 +4117,7 @@ function api_set_update_plugin_module($id_module, $thrash1, $other, $thrash3) 'warning_inverse', 'policy_linked', 'ff_type', + 'ignore_unknown', ]; $values = []; @@ -4241,6 +4244,7 @@ function api_set_create_data_module($id, $thrash1, $other, $thrash3) 'critical_inverse' => $other['data'][24], 'warning_inverse' => $other['data'][25], 'ff_type' => $other['data'][26], + 'ignore_unknown' => $other['data'][27], ]; if (! $values['descripcion']) { @@ -4763,6 +4767,7 @@ function api_set_update_data_module($id_module, $thrash1, $other, $thrash3) 'warning_inverse', 'policy_linked', 'ff_type', + 'ignore_unknown', ]; $values = []; @@ -4903,6 +4908,7 @@ function api_set_create_snmp_module($id, $thrash1, $other, $thrash3) 'min_ff_event_warning' => $other['data'][32], 'min_ff_event_critical' => $other['data'][33], 'ff_type' => $other['data'][34], + 'ignore_unknown' => $other['data'][36], ]; } else { $values = [ @@ -4935,6 +4941,7 @@ function api_set_create_snmp_module($id, $thrash1, $other, $thrash3) 'min_ff_event_warning' => $other['data'][26], 'min_ff_event_critical' => $other['data'][27], 'ff_type' => $other['data'][28], + 'ignore_unknown' => $other['data'][29], ]; } @@ -5103,6 +5110,7 @@ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3) 'min_ff_event_critical', 'policy_linked', 'ff_type', + 'ignore_unknown', ]; } else { $snmp_module_fields = [ @@ -5135,6 +5143,7 @@ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3) 'min_ff_event_critical', 'policy_linked', 'ff_type', + 'ignore_unknown', ]; } @@ -7982,6 +7991,7 @@ function api_set_update_data_module_policy($id, $thrash1, $other, $thrash3) 'configuration_data', 'disabled_types_event', 'module_macros', + 'ignore_unknown', ]; $cont = 0; @@ -8120,6 +8130,7 @@ function api_set_add_network_module_policy($id, $thrash1, $other, $thrash3) $values['min_ff_event_warning'] = $other['data'][25]; $values['min_ff_event_critical'] = $other['data'][26]; $values['ff_type'] = $other['data'][27]; + $values['ignore_unknown'] = $other['data'][28]; if ($name_module_policy !== false) { if ($name_module_policy[0]['name'] == $other['data'][0]) { @@ -8222,6 +8233,7 @@ function api_set_update_network_module_policy($id, $thrash1, $other, $thrash3) 'custom_id', 'disabled_types_event', 'module_macros', + 'ignore_unknown', ]; $cont = 0; @@ -8338,6 +8350,7 @@ function api_set_add_plugin_module_policy($id, $thrash1, $other, $thrash3) $values['min_ff_event_warning'] = $other['data'][30]; $values['min_ff_event_critical'] = $other['data'][31]; $values['ff_type'] = $other['data'][32]; + $values['ignore_unknown'] = $other['data'][33]; if ($name_module_policy !== false) { if ($name_module_policy[0]['name'] == $other['data'][0]) { @@ -8464,6 +8477,7 @@ function api_set_update_plugin_module_policy($id, $thrash1, $other, $thrash3) 'disabled_types_event', 'macros', 'module_macros', + 'ignore_unknown', ]; $cont = 0; @@ -8782,6 +8796,7 @@ function api_set_add_snmp_module_policy($id, $thrash1, $other, $thrash3) 'min_ff_event_warning' => $other['data'][31], 'min_ff_event_critical' => $other['data'][32], 'ff_type' => $other['data'][33], + 'ignore_unknown' => $other['data'][34], ]; } else { $values = [ @@ -8812,6 +8827,7 @@ function api_set_add_snmp_module_policy($id, $thrash1, $other, $thrash3) 'min_ff_event_warning' => $other['data'][25], 'min_ff_event_critical' => $other['data'][26], 'ff_type' => $other['data'][27], + 'ignore_unknown' => $other['data'][28], ]; } @@ -8944,6 +8960,7 @@ function api_set_update_snmp_module_policy($id, $thrash1, $other, $thrash3) 'plugin_parameter', 'plugin_user', 'plugin_pass', + 'ignore_unknown', ]; } else { $fields_snmp_module = [ @@ -8968,6 +8985,7 @@ function api_set_update_snmp_module_policy($id, $thrash1, $other, $thrash3) 'max', 'custom_id', 'description', + 'ignore_unknown', ]; } diff --git a/pandora_console/include/functions_extensions.php b/pandora_console/include/functions_extensions.php index acecf194ec..f381484461 100755 --- a/pandora_console/include/functions_extensions.php +++ b/pandora_console/include/functions_extensions.php @@ -169,13 +169,21 @@ function extensions_get_extensions($enterprise=false, $rel_path='') $file = readdir($handle); } - // Load extensions in enterprise directory - if (! $enterprise && file_exists($master_dir)) { - return array_merge($extensions, extensions_get_extensions(true, $rel_path)); + if (isset($extensions['ipam.php']) === true) { + unset($extensions['ipam.php']); } - if (isset($extensions['ipam.php'])) { - unset($extensions['ipam.php']); + if (isset($extensions['translate_string.php']) === true) { + unset($extensions['translate_string.php']); + } + + if (isset($extensions['files_repo.php']) === true) { + unset($extensions['files_repo.php']); + } + + // Load extensions in enterprise directory. + if (! $enterprise && file_exists($master_dir)) { + return array_merge($extensions, extensions_get_extensions(true, $rel_path)); } return $extensions; diff --git a/pandora_console/extensions/files_repo/functions_files_repo.php b/pandora_console/include/functions_files_repository.php similarity index 69% rename from pandora_console/extensions/files_repo/functions_files_repo.php rename to pandora_console/include/functions_files_repository.php index 2989499350..18ac6ce8ad 100644 --- a/pandora_console/extensions/files_repo/functions_files_repo.php +++ b/pandora_console/include/functions_files_repository.php @@ -1,17 +1,34 @@ <?php +/** + * Functions File repository + * + * @category Files repository + * @package Pandora FMS + * @subpackage Enterprise + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es + * This code is NOT free software. This code is NOT licenced under GPL2 licence + * You cannnot redistribute it without written permission of copyright holder. + * ============================================================================ + */ -// Pandora FMS - https://pandorafms.com -// ================================================== -// Copyright (c) 2005-2023 Pandora FMS -// Please see https://pandorafms.com/community/ for full contribution list -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; version 2 -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -function files_repo_check_directory($print_messages=false) +global $config; + + +/** + * Check repository writable. + * + * @return mixed + */ +function files_repo_check_directory() { global $config; @@ -21,11 +38,18 @@ function files_repo_check_directory($print_messages=false) $result = false; $messages = ''; - // attachment/ check - if (!is_writable($attachment_path)) { + $msg_error = __('Attachment directory is not writable by HTTP Server'); + $msg_error .= '</h3><p>'; + $msg_error .= sprintf( + __('Please check that the web server has write rights on the %s directory'), + $attachment_path + ); + + // Attachment/ check. + if (is_writable($attachment_path) === false) { $messages .= ui_print_error_message( [ - 'message' => __('Attachment directory is not writable by HTTP Server').'</h3>'.'<p>'.sprinf(__('Please check that the web server has write rights on the %s directory'), $attachment_path), + 'message' => $msg_error, 'no_close' => true, 'force_style' => 'color: #000000 !important', ], @@ -33,17 +57,17 @@ function files_repo_check_directory($print_messages=false) true ); } else { - // attachment/agent_packages/ check - if (!file_exists($files_repo_path) || !is_writable($files_repo_path)) { - // Create the directoty if not exist - if (!file_exists($files_repo_path)) { + // Attachment/agent_packages/ check. + if (file_exists($files_repo_path) === false || is_writable($files_repo_path) === false) { + // Create the directoty if not exist. + if (file_exists($files_repo_path) === false) { mkdir($files_repo_path); } - if (!is_writable($files_repo_path)) { + if (is_writable($files_repo_path) === false) { $messages .= ui_print_error_message( [ - 'message' => __('Attachment directory is not writable by HTTP Server').'</h3>'.'<p>'.sprintf(__('Please check that the web server has write rights on the %s directory'), $attachment_path), + 'message' => $msg_error, 'no_close' => true, 'force_style' => 'color: #000000 !important', ], @@ -58,48 +82,60 @@ function files_repo_check_directory($print_messages=false) } } - if ($print_messages) { - echo $messages; - } + echo $messages; return $result; } -function files_repo_check_file_acl($file_id, $user_id=false, $file_groups=false, $user_groups=false) -{ +/** + * Check acl file + * + * @param integer $file_id ID. + * @param boolean $user_id Users. + * @param boolean $file_groups File Groups. + * @param boolean $user_groups User Groups. + * + * @return boolean + */ +function files_repo_check_file_acl( + $file_id, + $user_id=false, + $file_groups=false, + $user_groups=false +) { global $config; $result = false; - if (!$user_id) { + if (empty($user_id) === true) { $user_id = $config['id_user']; } - if (is_user_admin($user_id)) { + if (is_user_admin($user_id) === true) { return true; } if (!$file_groups) { $file_groups = files_repo_get_file_groups($file_id); - if (empty($file_groups)) { + if (empty($file_groups) === true) { $file_groups = []; } } - if (in_array(0, $file_groups)) { + if (in_array(0, $file_groups) === true) { return true; } if (!$user_groups) { $user_groups = users_get_groups($user_id, false, true); - if (empty($user_groups)) { + if (empty($user_groups) === true) { $user_groups = []; } } foreach ($file_groups as $group_id) { - // $user_groups has the id in the array keys - if (in_array($group_id, $user_groups)) { + // $user_groups has the id in the array keys. + if (in_array($group_id, $user_groups) === true) { $result = true; break; } @@ -109,13 +145,19 @@ function files_repo_check_file_acl($file_id, $user_id=false, $file_groups=false, } +/** + * File groups. + * + * @param integer $file_id File. + * + * @return array + */ function files_repo_get_file_groups($file_id) { $groups = []; $filter = ['id_file' => $file_id]; $result = db_get_all_rows_filter('tfiles_repo_group', $filter, 'id_group'); - - if (!empty($result)) { + if (empty($result) === false) { foreach ($result as $key => $value) { $groups[] = $value['id_group']; } @@ -125,13 +167,19 @@ function files_repo_get_file_groups($file_id) } +/** + * File user groups. + * + * @param string $user_id User id. + * + * @return array + */ function files_repo_get_user_groups($user_id) { $groups = []; $filter = ['id_usuario' => $user_id]; $result = db_get_all_rows_filter('tusuario_perfil', $filter, 'id_grupo'); - - if (!empty($result)) { + if (empty($result) === false) { foreach ($result as $key => $value) { $groups[] = $value['id_grupo']; } @@ -141,7 +189,15 @@ function files_repo_get_user_groups($user_id) } -function files_repo_get_files($filter=false, $count=false) +/** + * Get files. + * + * @param array $filter Filters. + * @param boolean $count Count. + * + * @return array + */ +function files_repo_get_files($filter=[], $count=false) { global $config; @@ -171,9 +227,9 @@ function files_repo_get_files($filter=false, $count=false) $data['name'] = $file['name']; $data['description'] = $file['description']; $data['location'] = $files_repo_path.'/'.$file['id'].'_'.$data['name']; - // Size in bytes + // Size in bytes. $data['size'] = filesize($data['location']); - // Last modification time in unix timestamp + // Last modification time in unix timestamp. $data['mtime'] = filemtime($data['location']); $data['groups'] = $file_groups; $data['hash'] = $file['hash']; @@ -188,6 +244,16 @@ function files_repo_get_files($filter=false, $count=false) } +/** + * Add file. + * + * @param string $file_input_name Name. + * @param string $description Description. + * @param array $groups Groups. + * @param boolean $public Mode. + * + * @return array + */ function files_repo_add_file($file_input_name='upfile', $description='', $groups=[], $public=false) { global $config; @@ -210,10 +276,10 @@ function files_repo_add_file($file_input_name='upfile', $description='', $groups $invalid_extensions = '/^(php|php1|php2|php3|php4|php5|php7|php8|phar|phptml|phps)$/i'; if (preg_match($invalid_extensions, $extension) === 0) { - // Replace conflictive characters + // Replace conflictive characters. $filename = str_replace([' ', '=', '?', '&'], '_', $filename); $filename = filter_var($filename, FILTER_SANITIZE_URL); - // The filename should not be larger than 200 characters + // The filename should not be larger than 200 characters. if (mb_strlen($filename, 'UTF-8') > 200) { $filename = mb_substr($filename, 0, 200, 'UTF-8'); } @@ -267,6 +333,16 @@ function files_repo_add_file($file_input_name='upfile', $description='', $groups } +/** + * Update file. + * + * @param string $file_id File Name. + * @param string $description Description. + * @param array $groups Groups. + * @param boolean $public Mode. + * + * @return array + */ function files_repo_update_file($file_id, $description='', $groups=[], $public=false) { global $config; @@ -308,6 +384,13 @@ function files_repo_update_file($file_id, $description='', $groups=[], $public=f } +/** + * Delete File + * + * @param string $file_id File Name. + * + * @return mixed + */ function files_repo_delete_file($file_id) { global $config; diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php index 58ed138259..5ac3f05644 100644 --- a/pandora_console/include/functions_graph.php +++ b/pandora_console/include/functions_graph.php @@ -2424,6 +2424,150 @@ function graphic_combined_module( } +/** + * Draw periodicity graph + * + * @param array $params Params for draw chart. + * + * @return string Html output. + */ +function graphic_periodicity_module(array $params): string +{ + if (isset($params['date']) === false || !$params['date']) { + $params['date'] = get_system_time(); + } + + $date_array = []; + $date_array['period'] = $params['period']; + $date_array['final_date'] = $params['date']; + $date_array['start_date'] = ($params['date'] - $params['period']); + + $array_data = fullscale_data( + $params['agent_module_id'], + $date_array, + false, + false, + 1, + false, + $params['period_slice_chart'], + 0 + ); + + if (empty($array_data) === false) { + $graph_labels = []; + $multiple_labels = []; + foreach ($array_data['sum1']['slice_data'] as $time => $array_data) { + $graph_labels[] = date('H:i', ($time / 1000)); + + $avg = [ + 'y' => $array_data['avg'], + 'x' => $time, + ]; + + $max = [ + 'y' => $array_data['max'], + 'x' => $time, + ]; + + $min = [ + 'y' => $array_data['min'], + 'x' => $time, + ]; + + $sum = [ + 'y' => $array_data['sum'], + 'x' => $time, + ]; + if ((int) $params['period_mode'] === CUSTOM_GRAPH_HBARS) { + $avg = [ + 'x' => $array_data['avg'], + 'y' => $time, + ]; + + $max = [ + 'x' => $array_data['max'], + 'y' => $time, + ]; + + $min = [ + 'x' => $array_data['min'], + 'y' => $time, + ]; + + $sum = [ + 'x' => $array_data['sum'], + 'y' => $time, + ]; + } + + $graph_values_avg[] = $avg; + $graph_values_max[] = $max; + $graph_values_min[] = $min; + $graph_values_sum[] = $sum; + } + + if ((bool) $params['period_average'] === true) { + $graph_values['avg'] = $graph_values_avg; + $multiple_labels['avg'] = [ + 'label' => __('Average'), + 'fill' => ((int) $params['period_mode'] === CUSTOM_GRAPH_AREA) ? true : false, + ]; + } + + if ((bool) $params['period_maximum'] === true) { + $graph_values['max'] = $graph_values_max; + $multiple_labels['max'] = [ + 'label' => __('Maximun'), + 'fill' => ((int) $params['period_mode'] === CUSTOM_GRAPH_AREA) ? true : false, + ]; + } + + if ((bool) $params['period_minimum'] === true) { + $graph_values['min'] = $graph_values_min; + $multiple_labels['min'] = [ + 'label' => __('Minimum'), + 'fill' => ((int) $params['period_mode'] === CUSTOM_GRAPH_AREA) ? true : false, + ]; + } + + if ((bool) $params['period_summatory'] === true) { + $graph_values['sum'] = $graph_values_sum; + $multiple_labels['sum'] = [ + 'label' => __('Summatory'), + 'fill' => ((int) $params['period_mode'] === CUSTOM_GRAPH_AREA) ? true : false, + ]; + } + } + + $options = [ + 'height' => (isset($params['height']) === true) ? $params['height'] : 200, + 'waterMark' => true, + 'legend' => ['display' => true], + 'labels' => $graph_labels, + 'multiple' => $multiple_labels, + 'legend' => [ + 'display' => (isset($params['show_legend'])) ? $params['show_legend'] : true, + ], + 'ttl' => (isset($params['ttl']) === true) ? $params['ttl'] : 1, + ]; + + if ((int) $params['period_mode'] === CUSTOM_GRAPH_HBARS + || (int) $params['period_mode'] === CUSTOM_GRAPH_VBARS + ) { + if ((int) $params['period_mode'] === CUSTOM_GRAPH_HBARS) { + $options['axis'] = 'y'; + } + + $output = vbar_graph($graph_values, $options); + } else { + $output = line_graph($graph_values, $options); + } + + return $output; + +} + + /** * Function for convert data summatory. * @@ -3847,6 +3991,7 @@ function fullscale_data( } $data['sum'.$series_suffix]['slice_data'][$real_date]['avg'] = ($sum_data / $count_data); + $data['sum'.$series_suffix]['slice_data'][$real_date]['sum'] = $sum_data; if ($max_value != (-PHP_INT_MAX)) { $data['sum'.$series_suffix]['slice_data'][$real_date]['max'] = $max_value; @@ -4112,6 +4257,7 @@ function fullscale_data( $data['sum'.$series_suffix]['slice_data'][($date_array['final_date'] * 1000)]['avg'] = 0; if (isset($count_data) === true) { $data['sum'.$series_suffix]['slice_data'][($date_array['final_date'] * 1000)]['avg'] = ($sum_data / $count_data); + $data['sum'.$series_suffix]['slice_data'][($date_array['final_date'] * 1000)]['sum'] = $sum_data; } $data['sum'.$series_suffix]['slice_data'][($date_array['final_date'] * 1000)]['max'] = $max_value; @@ -5300,3 +5446,397 @@ function graph_analytics_filter_select() return $result; } + + +function draw_form_stat_win(array $form_data, string $tab_active) +{ + $table = html_get_predefined_table('transparent', 2); + $table->width = '100%'; + $table->id = 'stat_win_form_div'; + $table->style[0] = 'text-align:left;font-weight: bold;font-size:8.5pt;line-height:30pt;'; + $table->style[1] = 'text-align:left;font-weight: bold;line-height:30pt;'; + $table->style[2] = 'text-align:left;font-weight: bold;line-height:30pt;'; + $table->style[3] = 'text-align:left;font-weight: bold;line-height:30pt;'; + $table->class = 'table_modal_alternate'; + $table->data = []; + + if ((bool) $form_data['histogram'] === true || $tab_active === 'tabs-chart-period-graph') { + $table->data[0][0] = __('Refresh time'); + $table->data[0][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( + 'refresh', + $form_data['refresh'], + '', + '', + 0, + 7, + true + ).'</div>'; + + $table->data[0][2] = ''; + $table->data[0][3] = ''; + + $table->data[1][0] = __('Begin date'); + $table->data[1][1] = html_print_input_text( + 'start_date', + $form_data['start_date'], + '', + 10, + 20, + true, + false, + false, + '', + 'small-input' + ); + + $table->data[1][2] = __('Begin time'); + $table->data[1][3] = html_print_input_text( + 'start_time', + $form_data['start_time'], + '', + 10, + 10, + true, + false, + false, + '', + 'small-input' + ); + + $table->data[2][0] = __('Time range'); + $table->data[2][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( + 'period', + $form_data['period'], + '', + '', + 0, + 7, + true + ).'</div>'; + + $table->data[3][0] = __('Time compare (Separated)'); + $table->data[3][1] = html_print_checkbox_switch( + 'time_compare_separated', + 1, + (bool) $form_data['time_compare_separated'], + true + ); + + $table->data[3][2] = ''; + $table->data[3][3] = ''; + + if ($tab_active === 'tabs-chart-period-graph') { + $table->data[4][0] = __('Maximum'); + $table->data[4][1] = html_print_checkbox_switch( + 'period_maximum', + 1, + (bool) $form_data['period_maximum'], + true + ); + + $table->data[4][2] = __('Minimum'); + $table->data[4][3] = html_print_checkbox_switch( + 'period_minimum', + 1, + (bool) $form_data['period_minimum'], + true + ); + + $table->data[5][0] = __('Average'); + $table->data[5][1] = html_print_checkbox_switch( + 'period_average', + 1, + (bool) $form_data['period_average'], + true + ); + + $table->data[5][2] = __('Summatory'); + $table->data[5][3] = html_print_checkbox_switch( + 'period_summatory', + 1, + (bool) $form_data['period_summatory'], + true + ); + + $table->data[6][0] = __('Slice'); + $table->data[6][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( + 'period_slice_chart', + (string) $form_data['period_slice_chart'], + '', + '', + 0, + 7, + true, + false, + true, + '', + false, + [ + SECONDS_1HOUR => __('1 hour'), + SECONDS_1DAY => __('1 day'), + SECONDS_1WEEK => __('1 week'), + SECONDS_1MONTH => __('1 month'), + ] + ).'</div>'; + + $table->data[6][2] = __('Mode'); + $options_period_mode = [ + CUSTOM_GRAPH_AREA => __('Area'), + CUSTOM_GRAPH_LINE => __('Line'), + // CUSTOM_GRAPH_HBARS => __('Horizontal bars'), + CUSTOM_GRAPH_VBARS => __('Vertical bars'), + ]; + + $table->data[6][3] = '<div class="small-input-select2">'.html_print_select( + $options_period_mode, + 'period_mode', + $form_data['period_mode'], + '', + '', + 0, + true, + false, + false + ).'</div>'; + } + } else { + $table->data[0][0] = __('Refresh time'); + $table->data[0][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( + 'refresh', + $form_data['refresh'], + '', + '', + 0, + 7, + true + ).'</div>'; + + $table->data[0][2] = __('Show events'); + $disabled = false; + + $table->data[0][3] = html_print_checkbox_switch( + 'draw_events', + 1, + (bool) $form_data['draw_events'], + true, + $disabled + ); + + $table->data[1][0] = __('Begin date'); + $table->data[1][1] = html_print_input_text( + 'start_date', + $form_data['start_date'], + '', + 10, + 20, + true, + false, + false, + '', + 'small-input' + ); + + $table->data[1][2] = __('Show alerts'); + $table->data[1][3] = html_print_checkbox_switch( + 'draw_alerts', + 1, + (bool) $form_data['draw_alerts'], + true + ); + + $table->data[2][0] = __('Begin time'); + $table->data[2][1] = html_print_input_text( + 'start_time', + $form_data['start_time'], + '', + 10, + 10, + true, + false, + false, + '', + 'small-input' + ); + + $table->data[2][2] = __('Show unknown graph'); + $table->data[2][3] = html_print_checkbox_switch( + 'unknown_graph', + 1, + (bool) $form_data['unknown_graph'], + true + ); + + $table->data[3][0] = __('Time range'); + $table->data[3][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( + 'period', + $form_data['period'], + '', + '', + 0, + 7, + true + ).'</div>'; + + $table->data[3][2] = ''; + $table->data[3][3] = ''; + + if (!modules_is_boolean($form_data['id'])) { + $table->data[4][0] = __('Zoom'); + $options = []; + $options[$form_data['zoom']] = 'x'.$form_data['zoom']; + $options[1] = 'x1'; + $options[2] = 'x2'; + $options[3] = 'x3'; + $options[4] = 'x4'; + $options[5] = 'x5'; + $table->data[4][1] = '<div class="small-input-select2">'.html_print_select( + $options, + 'zoom', + $form_data['zoom'], + '', + '', + 0, + true, + false, + false + ).'</div>'; + + $table->data[4][2] = __('Show percentil'); + $table->data[4][3] = html_print_checkbox_switch( + 'show_percentil', + 1, + (bool) $form_data['show_percentil'], + true + ); + } + + $table->data[5][0] = __('Time compare (Overlapped)'); + $table->data[5][1] = html_print_checkbox_switch( + 'time_compare_overlapped', + 1, + (bool) $form_data['time_compare_overlapped'], + true + ); + + $table->data[5][2] = __('Time compare (Separated)'); + $table->data[5][3] = html_print_checkbox_switch( + 'time_compare_separated', + 1, + (bool) $form_data['time_compare_separated'], + true + ); + + $table->data[6][0] = __('Show AVG/MAX/MIN data series in graph'); + $table->data[6][1] = html_print_checkbox_switch( + 'type_mode_graph', + 1, + (bool) $form_data['type_mode_graph'], + true, + false + ); + + $table->data[6][2] = __('Show full scale graph (TIP)'); + $table->data[6][2] .= ui_print_help_tip( + __('TIP mode charts do not support average - maximum - minimum series, you can only enable TIP or average, maximum or minimum series'), + true + ); + $table->data[6][3] = html_print_checkbox_switch( + 'fullscale', + 1, + (bool) $form_data['fullscale'], + true, + false + ); + + $table->data[7][0] = __('Projection graph'); + $table->data[7][0] .= ui_print_help_tip( + __('Projection graph take as begin date the current time'), + true + ); + $table->data[7][1] = html_print_checkbox_switch( + 'enable_projected_period', + 1, + (bool) $form_data['enable_projected_period'], + true + ); + + $table->data[7][2] = __('Projection period'); + $table->data[7][3] = '<div class="small-input-select2">'.html_print_extended_select_for_time( + 'period_projected', + $form_data['period_projected'], + '', + '', + 0, + 7, + true + ).'</div>'; + } + + $form_table = html_print_table($table, true); + $form_table .= html_print_div( + [ + 'class' => 'action-buttons-right-forced margin-top-10', + 'content' => html_print_submit_button( + __('Reload'), + 'submit', + false, + [ + 'icon' => 'search', + 'mode' => 'secondary mini', + 'class' => 'float-right', + ], + true + ), + ], + true + ); + + $output = '<form method="GET" action="stat_win.php" style="margin-bottom: 0">'; + $output .= html_print_input_hidden('id', $form_data['id'], true); + $output .= html_print_input_hidden('label', $form_data['label'], true); + + if (empty($server_id) === false) { + $output .= html_print_input_hidden('server', $form_data['server_id'], true); + } + + $output .= html_print_input_hidden('histogram', $form_data['histogram'], true); + $output .= html_print_input_hidden('period_graph', $form_data['period_graph'], true); + $output .= html_print_input_hidden('type', $form_data['type'], true); + + $output .= ui_toggle( + $form_table, + '<span class="subsection_header_title">'.__('Graph configuration menu').'</span>'.ui_print_help_tip( + __('In Pandora FMS, data is stored compressed. The data visualization in database, charts or CSV exported data won\'t match, because is interpreted at runtime. Please check \'Pandora FMS Engineering\' chapter from documentation.'), + true + ), + '', + '', + true, + true, + '', + 'white-box-content', + 'box-flat pdd_10px', + 'images/arrow@svg.svg', + 'images/arrow@svg.svg', + true + ); + $output .= '</form>'; + + return $output; +} + + +function draw_container_chart_stat_win(?string $name='stat-win-module-graph') +{ + $output = '<div class="margin-lr-10" id="'.$name.'">'; + $output .= '<div id="'.$name.'-spinner" class="stat-win-spinner">'; + $output .= html_print_image('images/spinner_charts.gif', true); + $output .= '</div>'; + + $output .= '<div id="'.$name.'-content">'; + $output .= '</div>'; + + $output .= '</div>'; + + return $output; +} diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 5b37dc51d2..06ab07598d 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -5871,7 +5871,7 @@ function html_print_input($data, $wrapper='div', $input_only=false) $output .= html_print_radio_button_extended( $data['name'], $data['value'], - $data['label'], + ((isset($data['label']) === true) ? $data['label'] : ''), ((isset($data['checkedvalue']) === true) ? $data['checkedvalue'] : 1), ((isset($data['disabled']) === true) ? $data['disabled'] : ''), ((isset($data['script']) === true) ? $data['script'] : ''), @@ -5928,7 +5928,7 @@ function html_print_input($data, $wrapper='div', $input_only=false) } $params = []; - $params['disabled'] = $data['disabled']; + $params['disabled'] = ($data['disabled'] ?? false); $params['return'] = $data['return']; $params['show_helptip'] = false; $params['input_name'] = $data['name']; @@ -5993,11 +5993,11 @@ function html_print_input($data, $wrapper='div', $input_only=false) ]; } else { $string_filter = ''; - if ($data['get_only_string_modules'] === true) { + if (isset($data['get_only_string_modules']) === true && $data['get_only_string_modules'] === true) { $string_filter = 'AND id_tipo_modulo IN (17,23,3,10,33,36)'; } - if ($data['from_wux'] === true) { + if (isset($data['from_wux']) === true && $data['from_wux'] === true) { $string_filter = ' AND id_tipo_modulo = 25'; } diff --git a/pandora_console/include/functions_io.php b/pandora_console/include/functions_io.php index 6264a75138..445504b11c 100755 --- a/pandora_console/include/functions_io.php +++ b/pandora_console/include/functions_io.php @@ -410,32 +410,14 @@ function __($string /*, variable arguments */) global $config; - if (defined('METACONSOLE')) { - enterprise_include_once('meta/include/functions_meta.php'); + enterprise_include_once('include/functions_setup.php'); + $tranlateString = call_user_func_array( + 'get_defined_translation', + array_values(func_get_args()) + ); - $tranlateString = call_user_func_array( - 'meta_get_defined_translation', - array_values(func_get_args()) - ); - - if ($tranlateString !== false) { - return $tranlateString; - } - } else if (enterprise_installed() - && isset($config['translate_string_extension_installed']) - && $config['translate_string_extension_installed'] == 1 - && array_key_exists('translate_string.php', $extensions) - ) { - enterprise_include_once('extensions/translate_string/functions.php'); - - $tranlateString = call_user_func_array( - 'get_defined_translation', - array_values(func_get_args()) - ); - - if ($tranlateString !== false) { - return $tranlateString; - } + if ($tranlateString !== false) { + return $tranlateString; } if ($string == '') { diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php index 27c3efe601..06ad796ea9 100644 --- a/pandora_console/include/functions_menu.php +++ b/pandora_console/include/functions_menu.php @@ -1338,8 +1338,9 @@ if (is_ajax()) { <tbody> <tr> <th style="width: 40%; border: 0px;"> - <a href="https://pandorafms.com/" target="_blank"> + <a href="javascript:christmas_click('.$config['eastern_eggs_disabled'].')"> <img src="'.$image_about.'" alt="logo" width="70%"> + <input id="count_click" type="hidden" value="0" /> </a> </th> <th style="width: 60%; text-align: left; border: 0px;"> diff --git a/pandora_console/include/functions_modules.php b/pandora_console/include/functions_modules.php index b5cf42d894..2d3b5676ec 100755 --- a/pandora_console/include/functions_modules.php +++ b/pandora_console/include/functions_modules.php @@ -3857,11 +3857,11 @@ function get_modules_agents( $modules = array_reduce( $modules, - function ($carry, $item) use ($id_agents, $selection) { + function ($carry, $item) use ($id_agents, $selection, $useName) { if (count($id_agents) > 1 && (bool) $selection === true) { - $carry[$item['id_agente_modulo']] = $item['alias'].' » '.$item['nombre']; + $carry[($useName === true) ? io_safe_output($item['nombre']) : $item['id_agente_modulo']] = $item['alias'].' » '.$item['nombre']; } else { - $carry[$item['id_agente_modulo']] = $item['nombre']; + $carry[($useName === true) ? io_safe_output($item['nombre']) : $item['id_agente_modulo']] = $item['nombre']; } return $carry; diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index bccada9cb8..c8a794cc1d 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -11370,6 +11370,41 @@ function reporting_simple_graph( $fullscale = (bool) $content['style']['fullscale']; } + $periodicity_chart = false; + if (isset($content['style']['periodicity_chart'])) { + $periodicity_chart = (bool) $content['style']['periodicity_chart']; + } + + $period_maximum = true; + if (isset($content['style']['period_maximum'])) { + $period_maximum = (bool) $content['style']['period_maximum']; + } + + $period_minimum = true; + if (isset($content['style']['period_minimum'])) { + $period_minimum = (bool) $content['style']['period_minimum']; + } + + $period_average = true; + if (isset($content['style']['period_average'])) { + $period_average = (bool) $content['style']['period_average']; + } + + $period_summatory = false; + if (isset($content['style']['period_summatory'])) { + $period_summatory = (bool) $content['style']['period_summatory']; + } + + $period_slice_chart = SECONDS_1HOUR; + if (isset($content['style']['period_slice_chart'])) { + $period_slice_chart = $content['style']['period_slice_chart']; + } + + $period_mode = CUSTOM_GRAPH_VBARS; + if (isset($content['style']['period_mode'])) { + $period_mode = $content['style']['period_mode']; + } + $image_threshold = false; if (isset($content['style']['image_threshold'])) { $image_threshold = (bool) $content['style']['image_threshold']; @@ -11432,10 +11467,28 @@ function reporting_simple_graph( 'image_threshold' => $image_threshold, ]; + if ((bool) $periodicity_chart === true) { + $params['width'] = null; + $params['period_maximum'] = $period_maximum; + $params['period_minimum'] = $period_minimum; + $params['period_average'] = $period_average; + $params['period_summatory'] = $period_summatory; + $params['period_slice_chart'] = $period_slice_chart; + $params['period_mode'] = $period_mode; + } + if ($only_image === false) { - $return['chart'] = grafico_modulo_sparse($params); + if ((bool) $periodicity_chart === false) { + $return['chart'] = \grafico_modulo_sparse($params); + } else { + $return['chart'] = \graphic_periodicity_module($params); + } } else { - $return['chart'] = '<img src="data:image/png;base64,'.grafico_modulo_sparse($params).'" />'; + if ((bool) $periodicity_chart === false) { + $return['chart'] = '<img src="data:image/png;base64,'.\grafico_modulo_sparse($params).'" />'; + } else { + $return['chart'] = '<img src="data:image/png;base64,'.\graphic_periodicity_module($params).'" />'; + } } break; diff --git a/pandora_console/include/get_file.php b/pandora_console/include/get_file.php index 679fdad5ad..435ac8dded 100644 --- a/pandora_console/include/get_file.php +++ b/pandora_console/include/get_file.php @@ -82,10 +82,9 @@ if (empty($file) === true || empty($hash) === true || $hash !== md5($file_raw.$c $downloadable_file = $_SERVER['DOCUMENT_ROOT'].'/pandora_console/'.$file; break; - case 'extensions/files_repo': + case 'godmode/files_repo/files_repo': $attachment_path = io_safe_output($config['attachment_store']); $downloadable_file = $attachment_path.'/files_repo/'.$file; - // $downloadable_file = $_SERVER['DOCUMENT_ROOT'].'/pandora_console/attachment/files_repo/'.$file; break; case 'godmode/servers/plugin': diff --git a/pandora_console/include/graphs/fgraph.php b/pandora_console/include/graphs/fgraph.php index 98f99aefe1..d8db7d64d9 100644 --- a/pandora_console/include/graphs/fgraph.php +++ b/pandora_console/include/graphs/fgraph.php @@ -697,6 +697,7 @@ function get_build_setup_charts($type, $options, $data) if (isset($options['waterMark']) === true && empty($options['waterMark']) === false + && isset($options['waterMark']['url']) === true ) { // WaterMark. $chart->defaults()->getWaterMark()->setWidth(88); @@ -1283,12 +1284,12 @@ function get_build_setup_charts($type, $options, $data) case 'BAR': if (isset($options['multiple']) === true && empty($options['multiple']) === false) { $i = 0; - foreach ($options['multiple'] as $key_label => $label) { + foreach ($options['multiple'] as $key_label => $info) { $dataSet = $chart->createDataSet(); - $dataSet->setLabel($label); - $dataSet->setBackgroundColor($colors[$i]); - $dataSet->setBorderColor($borders[$i]); - $dataSet->setBorderWidth(2); + $dataSet->setLabel(($info['label'] ?? '--')); + $dataSet->setBackgroundColor(($info['backgroundColor'] ?? $colors[$i])); + $dataSet->setBorderColor(($info['borderColor'] ?? $borders[$i])); + $dataSet->setBorderWidth(($info['borderWidth'] ?? 2)); $dataSet->data()->exchangeArray(array_values($data[$key_label])); $chart->addDataSet($dataSet); $i++; @@ -1338,19 +1339,32 @@ function get_build_setup_charts($type, $options, $data) break; case 'LINE': - $chart->labels()->exchangeArray($options['labels']); - - foreach ($data as $key => $dataset) { - $dataSet1 = $chart->createDataSet(); - $dataSet1->setLabel($dataset['label']); - $dataSet1->setBackgroundColor($dataset['backgroundColor']); - $dataSet1->setBorderColor($dataset['borderColor']); - $dataSet1->setPointBackgroundColor($dataset['pointBackgroundColor']); - $dataSet1->setPointBorderColor($dataset['pointBorderColor']); - $dataSet1->setPointHoverBackgroundColor($dataset['pointHoverBackgroundColor']); - $dataSet1->setPointHoverBorderColor($dataset['pointHoverBorderColor']); - $dataSet1->data()->exchangeArray($dataset['data']); - $chart->addDataSet($dataSet1); + if (isset($options['multiple']) === true && empty($options['multiple']) === false) { + $i = 0; + foreach ($options['multiple'] as $key_label => $info) { + $dataSet = $chart->createDataSet(); + $dataSet->setLabel(($info['label'] ?? '--')); + $dataSet->setBackgroundColor(($info['backgroundColor'] ?? $colors[$i])); + $dataSet->setBorderColor(($info['borderColorColor'] ?? $borders[$i])); + $dataSet->setFill(($info['fill'] ?? false)); + $dataSet->data()->exchangeArray(array_values($data[$key_label])); + $chart->addDataSet($dataSet); + $i++; + } + } else { + $chart->labels()->exchangeArray($options['labels']); + foreach ($data as $key => $dataset) { + $dataSet = $chart->createDataSet(); + $dataSet->setLabel($dataset['label']); + $dataSet->setBackgroundColor($dataset['backgroundColor']); + $dataSet->setBorderColor($dataset['borderColor']); + $dataSet->setPointBackgroundColor($dataset['pointBackgroundColor']); + $dataSet->setPointBorderColor($dataset['pointBorderColor']); + $dataSet->setPointHoverBackgroundColor($dataset['pointHoverBackgroundColor']); + $dataSet->setPointHoverBorderColor($dataset['pointHoverBorderColor']); + $dataSet->data()->exchangeArray($dataset['data']); + $chart->addDataSet($dataSet); + } } break; diff --git a/pandora_console/include/graphs/functions_flot.php b/pandora_console/include/graphs/functions_flot.php index ec524d58d7..c51e3283df 100644 --- a/pandora_console/include/graphs/functions_flot.php +++ b/pandora_console/include/graphs/functions_flot.php @@ -277,7 +277,7 @@ function flot_area_graph( '></div>"; $return .= "<div id='$graph_id' class='"; - if ($params['type'] == 'area_simple') { + if (isset($params['type']) === true && $params['type'] == 'area_simple') { $return .= 'noresizevc '; } @@ -287,10 +287,12 @@ function flot_area_graph( $width = 'width: '.$params['width'].';'; } - if (strpos($params['graph_width'], '%') === false) { - $width = 'width: '.$params['graph_width'].'px;'; - } else { - $width = 'width: '.$params['graph_width'].';'; + if (isset($params['graph_width']) === true) { + if (strpos($params['graph_width'], '%') === false) { + $width = 'width: '.$params['graph_width'].'px;'; + } else { + $width = 'width: '.$params['graph_width'].';'; + } } $return .= 'graph'.$params['adapt_key']."' @@ -346,10 +348,6 @@ function flot_area_graph( $array_events_alerts = json_encode($array_events_alerts); // Javascript code. - if ($font_size == '') { - $font_size = '\'\''; - } - $return .= "<script type='text/javascript'>"; $return .= "pandoraFlotArea(\n"; diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js index 72a13be79a..247a0a8eda 100644 --- a/pandora_console/include/javascript/pandora.js +++ b/pandora_console/include/javascript/pandora.js @@ -2566,6 +2566,40 @@ function WarningPeriodicityModal(title, message) { }); } +function showPeriodicityOptions(element) { + if ($(element).is(":checked") === true) { + $("#row_period_maximum").show(); + $("#row_period_minimum").show(); + $("#row_period_average").show(); + $("#row_period_summatory").show(); + $("#row_period_slice_chart").show(); + $("#row_period_mode").show(); + $("#li-row_period_type").show(); + $("#row_time_compare_overlapped").hide(); + $("#row_fullscale").hide(); + $("#row_image_threshold").hide(); + $("#row_graph_render").hide(); + $("#row_percentil").hide(); + $("#MGgraphType").hide(); + $("#row_unknowns_graph").hide(); + } else { + $("#row_time_compare_overlapped").show(); + $("#row_fullscale").show(); + $("#row_image_threshold").show(); + $("#row_graph_render").show(); + $("#row_percentil").show(); + $("#MGgraphType").show(); + $("#row_unknowns_graph").show(); + $("#row_period_maximum").hide(); + $("#row_period_minimum").hide(); + $("#row_period_average").hide(); + $("#row_period_summatory").hide(); + $("#row_period_slice_chart").hide(); + $("#row_period_mode").hide(); + $("#li-row_period_type").hide(); + } +} + function checkExistParameterUrl(url, parameter) { var regex = new RegExp( "[?&]" + encodeURIComponent(parameter) + "(=([^&#]*)|&|#|$)" @@ -2575,3 +2609,15 @@ function checkExistParameterUrl(url, parameter) { return exists; } + +function christmas_click(flagEasternEgg) { + let counter = $("#count_click").val(); + counter++; + $("#count_click").val(counter); + if (counter == 25 && flagEasternEgg == true) { + $("#container-snow").removeClass("invisible"); + setTimeout(() => { + $("#container-snow").addClass("invisible"); + }, 120000); + } +} diff --git a/pandora_console/include/javascript/pandora_dashboards.js b/pandora_console/include/javascript/pandora_dashboards.js index 33f41c03c4..7cfbf40e9c 100644 --- a/pandora_console/include/javascript/pandora_dashboards.js +++ b/pandora_console/include/javascript/pandora_dashboards.js @@ -1,4 +1,4 @@ -/* globals $, GridStack, load_modal, TreeController, forced_title_callback, createVisualConsole, tinyMCE*/ +/* globals $, GridStack, load_modal, TreeController, forced_title_callback, createVisualConsole, UndefineTinyMCE*/ // eslint-disable-next-line no-unused-vars function show_option_dialog(settings) { load_modal({ @@ -1034,6 +1034,7 @@ function processTreeSearch(settings) { }); } +// eslint-disable-next-line no-unused-vars function processServiceTree(settings) { var treeController = TreeController.getController(); @@ -1606,6 +1607,38 @@ function showManualThresholds(element) { } } +// eslint-disable-next-line no-unused-vars +function showPeriodicityOptions(element) { + if ($(element).is(":checked") === true) { + $("#div_projection_switch").hide(); + $("#div_type_mode_graph").hide(); + $("#div_color_chart").hide(); + $("#div_type_graph").hide(); + $("#div_period_maximum").show(); + $("#div_period_minimum").show(); + $("#div_period_average").show(); + $("#div_period_summatory").show(); + $("#div_period_slice_chart").show(); + $("#div_period_mode").show(); + } else { + $("#div_projection_switch").show(); + $("#div_type_mode_graph").show(); + $("#div_color_chart").show(); + $("#div_type_graph").show(); + if ($("#projection_switch").is(":checked")) { + $("#div_projection_period").show(); + } else { + $("#div_projection_period").hide(); + } + $("#div_period_maximum").hide(); + $("#div_period_minimum").hide(); + $("#div_period_average").hide(); + $("#div_period_summatory").hide(); + $("#div_period_slice_chart").hide(); + $("#div_period_mode").hide(); + } +} + /** * @return {void} */ @@ -1637,6 +1670,7 @@ function type_change() { } // Show/Hide period for projection on agent module graph. +// eslint-disable-next-line no-unused-vars function show_projection_period() { if ($("#projection_switch").is(":checked")) { $("#div_projection_period").show(); diff --git a/pandora_console/include/javascript/pandora_visual_console.js b/pandora_console/include/javascript/pandora_visual_console.js index 0e16bb303f..5ac0af0c82 100755 --- a/pandora_console/include/javascript/pandora_visual_console.js +++ b/pandora_console/include/javascript/pandora_visual_console.js @@ -648,41 +648,15 @@ function createVisualConsole( item.setMeta({ isUpdating: false }); - var itemRetrieved = item.props; - if (itemRetrieved["type"] == 13 || itemRetrieved["type"] == 21) { - var startIsLeft = - itemRetrieved["startPosition"]["x"] - - itemRetrieved["endPosition"]["x"] <= - 0; - var startIsTop = - itemRetrieved["startPosition"]["y"] - - itemRetrieved["endPosition"]["y"] <= - 0; - - itemRetrieved["startX"] = startIsLeft - ? itemRetrieved["x"] + 20 - : itemRetrieved["width"] + itemRetrieved["x"] + 20; - - itemRetrieved["startY"] = startIsTop - ? itemRetrieved["y"] + 20 - : itemRetrieved["height"] + itemRetrieved["y"] + 20; - - itemRetrieved["endX"] = startIsLeft - ? itemRetrieved["width"] + itemRetrieved["x"] + 20 - : itemRetrieved["x"] + 20; - - itemRetrieved["endY"] = startIsTop - ? itemRetrieved["height"] + itemRetrieved["y"] + 20 - : itemRetrieved["y"] + 20; - } else { - itemRetrieved["x"] = itemRetrieved["x"] + 20; - itemRetrieved["y"] = itemRetrieved["y"] + 20; - } - itemRetrieved["receivedAt"] = new Date(); - itemRetrieved["id"] = data; - - var newItem = visualConsole.addElement(itemRetrieved); - newItem.setMeta({ editMode: true, isSelected: true }); + var newItemData = JSON.parse(data); + newItemData["receivedAt"] = new Date(); + var newItem = visualConsole.addElement(newItemData); + newItem.setMeta({ + editMode: true, + isSelected: true, + isUpdating: false + }); + visualConsole.buildRelations(); visualConsole.selectItem(newItem.props.id); done(); @@ -1232,7 +1206,7 @@ function cleanupDOM() { $("#modalVCItemForm").empty(); } /* Defined in operations/visual_console/view.php */ -/* global $, load_modal, tinyMCE */ +/* global $, load_modal, UndefineTinyMCE */ function createOrUpdateVisualConsoleItem( visualConsole, asyncTaskManager, @@ -1415,12 +1389,23 @@ function typeModuleGraph(type) { $("#MGshowLegend").show(); $("#MGcustomGraph").hide(); $("#customGraphId").val(0); + $("#row_periodicity_chart").show(); + if ($("#periodicityChart").is(":checked") === true) { + $("#MGgraphType").hide(); + $("#li-row_period_type").show(); + $("#row_period_slice_chart").show(); + $("#row_period_mode").show(); + } } else if (type == "custom") { $("#MGautoCompleteAgent").hide(); $("#MGautoCompleteModule").hide(); $("#MGgraphType").hide(); $("#MGshowLegend").hide(); $("#MGcustomGraph").show(); + $("#row_periodicity_chart").hide(); + $("#li-row_period_type").hide(); + $("#row_period_slice_chart").hide(); + $("#row_period_mode").hide(); } } diff --git a/pandora_console/include/lib/Dashboard/Widgets/AgentHive.php b/pandora_console/include/lib/Dashboard/Widgets/AgentHive.php index 3b881ca344..0e426ed08a 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/AgentHive.php +++ b/pandora_console/include/lib/Dashboard/Widgets/AgentHive.php @@ -431,15 +431,34 @@ class AgentHive extends Widget $output .= '</div>'; + $style = 'font-size: 6pt; display: flex; justify-content: start; + align-items: start; color: #9FA5B1; font-weight: 600; + line-height:normal; text-align:left;'; + $style_div = $style.' margin-bottom: 15px;'; + // OS description. $output .= html_print_div( [ 'content' => (empty($data['os_version']) === true) - ? get_os_name((int) $data['id_os']) - : $data['os_version'], - 'style' => 'font-size: 6pt; display: - flex;justify-content: start;align-items: start; - color: #9FA5B1; font-weight: 600;margin-bottom: 5px', + ? ui_print_truncate_text( + get_os_name((int) $data['id_os']), + 32, + false, + true, + true, + '…', + $style + ) + : ui_print_truncate_text( + $data['os_version'], + 32, + false, + true, + true, + '…', + $style + ), + 'style' => $style_div, ], true ); @@ -455,8 +474,10 @@ class AgentHive extends Widget true, '…', ), - 'style' => 'text-align: left;min-height: 42px; - font-size: 8pt;max-height: 42px; margin-bottom: 10px', + 'style' => 'text-align: left; + min-height: 42px; font-size: 8pt; + max-height: 42px; line-height: normal; + margin: 2px 0px 2px 0px', ], true ); @@ -466,7 +487,9 @@ class AgentHive extends Widget [ 'content' => $data['direccion'], 'style' => 'font-size: 10pt;color: #14524f; - font-weight: 600; text-align: left', + font-weight: 600; + text-align: left; + margin-top: 5px', ], true ); diff --git a/pandora_console/include/lib/Dashboard/Widgets/single_graph.php b/pandora_console/include/lib/Dashboard/Widgets/single_graph.php index a718217a57..a9f242723d 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/single_graph.php +++ b/pandora_console/include/lib/Dashboard/Widgets/single_graph.php @@ -269,6 +269,10 @@ class SingleGraphWidget extends Widget $values['showLegend'] = $decoder['showLegend']; } + if (isset($decoder['type_mode_graph']) === true) { + $values['type_mode_graph'] = $decoder['type_mode_graph']; + } + if (isset($decoder['projection_switch']) === true) { $values['projection_switch'] = $decoder['projection_switch']; } @@ -277,6 +281,42 @@ class SingleGraphWidget extends Widget $values['period_projection'] = $decoder['period_projection']; } + if (isset($decoder['periodicity_chart']) === true) { + $values['periodicity_chart'] = $decoder['periodicity_chart']; + } + + if (isset($decoder['period_maximum']) === true) { + $values['period_maximum'] = $decoder['period_maximum']; + } + + if (isset($decoder['period_minimum']) === true) { + $values['period_minimum'] = $decoder['period_minimum']; + } + + if (isset($decoder['period_average']) === true) { + $values['period_average'] = $decoder['period_average']; + } + + if (isset($decoder['period_summatory']) === true) { + $values['period_summatory'] = $decoder['period_summatory']; + } + + if (isset($decoder['period_slice_chart']) === true) { + $values['period_slice_chart'] = $decoder['period_slice_chart']; + } + + if (isset($decoder['period_mode']) === true) { + $values['period_mode'] = $decoder['period_mode']; + } + + if (isset($decoder['color_chart']) === true) { + $values['color_chart'] = $decoder['color_chart']; + } + + if (isset($decoder['type_graph']) === true) { + $values['type_graph'] = $decoder['type_graph']; + } + return $values; } @@ -290,6 +330,7 @@ class SingleGraphWidget extends Widget */ public function getFormInputs(): array { + global $config; $values = $this->values; // Retrieve global - common inputs. @@ -308,8 +349,49 @@ class SingleGraphWidget extends Widget $values['showLegend'] = 1; } + if (isset($values['type_graph']) === false) { + $values['type_graph'] = CUSTOM_GRAPH_AREA; + } + + if (isset($values['period_maximum']) === false) { + $values['period_maximum'] = 1; + } + + if (isset($values['period_minimum']) === false) { + $values['period_minimum'] = 1; + } + + if (isset($values['period_average']) === false) { + $values['period_average'] = 1; + } + + if (isset($values['period_slice_chart']) === false) { + $values['period_slice_chart'] = SECONDS_1HOUR; + } + + if (isset($values['period_mode']) === false) { + $values['period_mode'] = CUSTOM_GRAPH_VBARS; + } + + if (empty($values['color_chart']) === true) { + $values['color_chart'] = $config['graph_color1']; + } + + $blocks = [ + 'row1', + 'row2', + ]; + + $inputs['blocks'] = $blocks; + + foreach ($inputs as $kInput => $vInput) { + $inputs['inputs']['row1'][] = $vInput; + } + + $display_periodicity_chart = ($values['periodicity_chart'] === true) ? '' : 'display:none'; + // Autocomplete agents. - $inputs[] = [ + $inputs['inputs']['row1'][] = [ 'label' => __('Agent'), 'arguments' => [ 'type' => 'autocomplete_agent', @@ -327,7 +409,7 @@ class SingleGraphWidget extends Widget ]; // Autocomplete module. - $inputs[] = [ + $inputs['inputs']['row1'][] = [ 'label' => __('Module').ui_print_help_tip(__('Warning, this requires to have data for a mid-term (days/weeks) of the source data, if not, projection will not be reliable.'), true), 'arguments' => [ 'type' => 'autocomplete_module', @@ -340,11 +422,12 @@ class SingleGraphWidget extends Widget 'style' => 'width: inherit;', 'nothing' => __('None'), 'nothing_value' => 0, + 'required' => 1, ], ]; // Show legend. - $inputs[] = [ + $inputs['inputs']['row1'][] = [ 'label' => __('Show legend'), 'arguments' => [ 'name' => 'showLegend', @@ -355,7 +438,7 @@ class SingleGraphWidget extends Widget ]; // Period. - $inputs[] = [ + $inputs['inputs']['row1'][] = [ 'label' => __('Interval'), 'arguments' => [ 'name' => 'period', @@ -369,9 +452,65 @@ class SingleGraphWidget extends Widget ], ]; + $inputs['inputs']['row1'][] = [ + 'label' => __('Sliced mode'), + 'arguments' => [ + 'name' => 'periodicity_chart', + 'id' => 'periodicity_chart', + 'type' => 'switch', + 'value' => $values['periodicity_chart'], + 'onclick' => 'showPeriodicityOptions(this)', + ], + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('Chart color'), + 'id' => 'div_color_chart', + 'style' => ($values['periodicity_chart'] === true) ? 'display:none' : '', + 'arguments' => [ + 'wrapper' => 'div', + 'name' => 'color_chart', + 'type' => 'color', + 'value' => $values['color_chart'], + 'return' => true, + ], + ]; + + $options_mode = [ + CUSTOM_GRAPH_AREA => __('Area'), + CUSTOM_GRAPH_LINE => __('Line'), + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('Type graph'), + 'id' => 'div_type_graph', + 'style' => ($values['periodicity_chart'] === true) ? 'display:none' : '', + 'arguments' => [ + 'type' => 'select', + 'fields' => $options_mode, + 'name' => 'type_graph', + 'selected' => $values['type_graph'], + 'return' => true, + ], + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('AVG/MAX/MIN'), + 'id' => 'div_type_mode_graph', + 'style' => ($values['periodicity_chart'] === true) ? 'display:none' : '', + 'arguments' => [ + 'name' => 'type_mode_graph', + 'id' => 'type_mode_graph', + 'type' => 'switch', + 'value' => $values['type_mode_graph'], + ], + ]; + // Projection. - $inputs[] = [ + $inputs['inputs']['row2'][] = [ 'label' => __('Projection Graph'), + 'id' => 'div_projection_switch', + 'style' => ($values['periodicity_chart'] === true) ? 'display:none' : '', 'arguments' => [ 'name' => 'projection_switch', 'id' => 'projection_switch', @@ -383,7 +522,7 @@ class SingleGraphWidget extends Widget // Period Projection. $display_projection = ($values['projection_switch'] === true) ? '' : 'display:none'; - $inputs[] = [ + $inputs['inputs']['row2'][] = [ 'label' => __('Period Projection'), 'id' => 'div_projection_period', 'style' => $display_projection, @@ -396,6 +535,90 @@ class SingleGraphWidget extends Widget ], ]; + $inputs['inputs']['row2'][] = [ + 'label' => __('Maximum'), + 'id' => 'div_period_maximum', + 'style' => $display_periodicity_chart, + 'arguments' => [ + 'name' => 'period_maximum', + 'id' => 'period_maximum', + 'type' => 'switch', + 'value' => $values['period_maximum'], + ], + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('Minimum'), + 'id' => 'div_period_minimum', + 'style' => $display_periodicity_chart, + 'arguments' => [ + 'name' => 'period_minimum', + 'id' => 'period_minimum', + 'type' => 'switch', + 'value' => $values['period_minimum'], + ], + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('Average'), + 'id' => 'div_period_average', + 'style' => $display_periodicity_chart, + 'arguments' => [ + 'name' => 'period_average', + 'id' => 'period_average', + 'type' => 'switch', + 'value' => $values['period_average'], + ], + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('Summatory'), + 'id' => 'div_period_summatory', + 'style' => $display_periodicity_chart, + 'arguments' => [ + 'name' => 'period_summatory', + 'id' => 'period_summatory', + 'type' => 'switch', + 'value' => $values['period_summatory'], + ], + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('Slice period'), + 'id' => 'div_period_slice_chart', + 'style' => $display_periodicity_chart, + 'arguments' => [ + 'name' => 'period_slice_chart', + 'type' => 'interval', + 'value' => (string) $values['period_slice_chart'], + 'custom_fields' => [ + SECONDS_1HOUR => __('1 hour'), + SECONDS_1DAY => __('1 day'), + SECONDS_1WEEK => __('1 week'), + SECONDS_1MONTH => __('1 month'), + ], + ], + ]; + + $options_period_mode = [ + CUSTOM_GRAPH_AREA => __('Area'), + CUSTOM_GRAPH_LINE => __('Line'), + CUSTOM_GRAPH_VBARS => __('Vertical bars'), + ]; + + $inputs['inputs']['row2'][] = [ + 'label' => __('Type chart'), + 'id' => 'div_period_mode', + 'style' => $display_periodicity_chart, + 'arguments' => [ + 'type' => 'select', + 'fields' => $options_period_mode, + 'name' => 'period_mode', + 'selected' => $values['period_mode'], + 'return' => true, + ], + ]; + return $inputs; } @@ -407,6 +630,7 @@ class SingleGraphWidget extends Widget */ public function getPost():array { + global $config; // Retrieve global - common inputs. $values = parent::getPost(); @@ -414,9 +638,21 @@ class SingleGraphWidget extends Widget $values['metaconsoleId'] = \get_parameter('metaconsoleId', 0); $values['moduleId'] = \get_parameter('moduleId', 0); $values['period'] = \get_parameter('period', 0); + $values['type_graph'] = \get_parameter('type_graph', CUSTOM_GRAPH_AREA); $values['showLegend'] = \get_parameter_switch('showLegend'); - $values['projection_switch'] = (boolean) get_parameter_switch('projection_switch'); + $values['type_mode_graph'] = \get_parameter_switch('type_mode_graph'); + $values['projection_switch'] = (boolean) \get_parameter_switch('projection_switch'); $values['period_projection'] = \get_parameter('period_projection', 0); + $values['color_chart'] = \get_parameter('color_chart', $config['graph_color1']); + + // Values periodicity chart. + $values['periodicity_chart'] = (boolean) \get_parameter_switch('periodicity_chart'); + $values['period_maximum'] = (boolean) \get_parameter_switch('period_maximum'); + $values['period_minimum'] = (boolean) \get_parameter_switch('period_minimum'); + $values['period_average'] = (boolean) \get_parameter_switch('period_average'); + $values['period_summatory'] = (boolean) \get_parameter_switch('period_summatory'); + $values['period_slice_chart'] = \get_parameter('period_slice_chart', SECONDS_1HOUR); + $values['period_mode'] = \get_parameter('period_mode', CUSTOM_GRAPH_VBARS); return $values; } @@ -447,7 +683,7 @@ class SingleGraphWidget extends Widget $trickHight = 0; if ($this->values['showLegend'] === 1) { // Needed for legend. - $trickHight = 60; + $trickHight = 30; } $output = '<div class="container-center widget-mrgn-0px">'; @@ -479,21 +715,69 @@ class SingleGraphWidget extends Widget ); $output .= $return['chart']; } else { + if ($this->values['showLegend'] === 1 && (bool) $this->values['type_mode_graph'] === true) { + $trickHight *= 3; + } + + if (isset($this->values['color_chart']) === false + || empty($this->values['color_chart']) === true + ) { + $this->values['color_chart'] = $config['graph_color1']; + } + + if (isset($this->values['type_graph']) === false + || empty($this->values['type_graph']) === true + ) { + $this->values['type_graph'] = CUSTOM_GRAPH_AREA; + } + $params = [ - 'agent_module_id' => $this->values['moduleId'], - 'width' => '100%', - 'height' => ((int) $size['height'] - $trickHight), - 'period' => $this->values['period'], - 'title' => $module_name, - 'unit' => $units_name, - 'homeurl' => $config['homeurl'], - 'backgroundColor' => 'transparent', - 'show_legend' => $this->values['showLegend'], - 'show_title' => $module_name, - 'menu' => false, - 'dashboard' => true, + 'agent_module_id' => $this->values['moduleId'], + 'width' => '100%', + 'height' => ((int) $size['height'] - $trickHight), + 'period' => $this->values['period'], + 'title' => $module_name, + 'unit' => $units_name, + 'homeurl' => $config['homeurl'], + 'backgroundColor' => 'transparent', + 'show_legend' => $this->values['showLegend'], + 'show_title' => $module_name, + 'menu' => false, + 'dashboard' => true, + 'type_graph' => (int) $this->values['type_graph'], + 'type_mode_graph' => $this->values['type_mode_graph'], + 'period_maximum' => $this->values['period_maximum'], + 'period_minimum' => $this->values['period_minimum'], + 'period_average' => $this->values['period_average'], + 'period_summatory' => $this->values['period_summatory'], + 'period_slice_chart' => $this->values['period_slice_chart'], + 'period_mode' => $this->values['period_mode'], + 'array_colors' => [ + [ + 'border' => '#000000', + 'color' => $this->values['color_chart'].'80', + 'alpha' => 75, + ], + [ + 'border' => '#000000', + 'color' => $this->values['color_chart'], + 'alpha' => 50, + ], + [ + 'border' => '#000000', + 'color' => $this->values['color_chart'].'60', + 'alpha' => 25, + ], + ], ]; - $output .= \grafico_modulo_sparse($params); + + if ((bool) $this->values['periodicity_chart'] === false) { + $output .= \grafico_modulo_sparse($params); + } else { + $params['width'] = null; + $params['height'] = (int) $size['height']; + $output .= \graphic_periodicity_module($params); + } } $output .= '</div>'; @@ -531,7 +815,7 @@ class SingleGraphWidget extends Widget public function getSizeModalConfiguration(): array { $size = [ - 'width' => 450, + 'width' => 800, 'height' => 430, ]; diff --git a/pandora_console/include/lib/Group.php b/pandora_console/include/lib/Group.php index 630d91d1c2..66317471f6 100644 --- a/pandora_console/include/lib/Group.php +++ b/pandora_console/include/lib/Group.php @@ -49,6 +49,7 @@ class Group extends Entity 'groupEventsByAgent', 'loadInfoAgent', 'getAgentsByGroup', + 'getGroupsName', ]; @@ -751,4 +752,30 @@ class Group extends Entity } + /** + * Get groups name. + * + * @return void + */ + public static function getGroupsName() + { + $groups = get_parameter('groups', []); + + $sql = sprintf( + 'SELECT id_grupo, nombre FROM tgrupo WHERE id_grupo IN (%s)', + implode(',', $groups) + ); + + $result = db_get_all_rows_sql($sql); + + $array_groups = []; + foreach ($result as $value) { + $array_groups[$value['id_grupo']] = $value['nombre']; + } + + echo json_encode($array_groups); + exit; + } + + } diff --git a/pandora_console/include/lib/TacticalView/GeneralTacticalView.php b/pandora_console/include/lib/TacticalView/GeneralTacticalView.php index d61b748bca..e00bc8fcf8 100644 --- a/pandora_console/include/lib/TacticalView/GeneralTacticalView.php +++ b/pandora_console/include/lib/TacticalView/GeneralTacticalView.php @@ -22,6 +22,7 @@ namespace PandoraFMS\TacticalView; +use DateTimeZone; use Exception; use PandoraFMS\View; @@ -163,17 +164,25 @@ class GeneralTacticalView private function getWelcomeMessage():string { global $config; - $user = users_get_user_by_id($config['id_user']); - if (is_array($user) === true && count($user) > 0) { - $name = $user['fullname']; - } else { - $name = ''; - } - if (empty($name) === true) { - $message = __('Welcome back! 👋'); + $flag_eastern_egg = $config['eastern_eggs_disabled']; + + if ((bool) $flag_eastern_egg === true) { + $message = $this->randomWelcomeMessage(); } else { - $message = __('Welcome back %s! 👋', $name); + $user = users_get_user_by_id($config['id_user']); + if (is_array($user) === true && count($user) > 0) { + $name = $user['fullname']; + } else { + $name = $user['firstname']; + } + + // 👋 + if (empty($name) === true) { + $message = __('Welcome back! 👋'); + } else { + $message = __('Welcome back %s! 👋', $name); + } } return html_print_div( @@ -186,4 +195,88 @@ class GeneralTacticalView } + /** + * Return random welcome message. + * + * @return string + */ + private function randomWelcomeMessage() : string + { + global $config; + $welcome = []; + + $user = users_get_user_by_id($config['id_user']); + if (is_array($user) === true && count($user) > 0) { + $name = $user['fullname']; + } else { + $name = $user['firstname']; + } + + // Config user time zone. + if (!empty($user['timezone'])) { + $timezone = $user['timezone']; + } else { + $timezone = date_default_timezone_get(); + } + + date_default_timezone_set($timezone); + $date_zone = new DateTimeZone($timezone); + $zone_location = $date_zone->getLocation(); + $latitude = $zone_location['latitude']; + + $emojiOptions = [ + 'have_good_day' => __('Have a good day %s ✌', $name), + 'welcome_back' => __('Welcome back! %s 👋', $name), + 'merry_christmas' => __('Welcome back! %s 🎅', $name), + 'good_morning' => __('Good morning, %s! ☕', $name), + 'good_evening' => __('Good evening, %s 🌇', $name), + 'good_night' => __('Good night, %s 🌕', $name), + 'happy_summer' => __('Happy summer, %s 🌞', $name), + 'happy_winter' => __('Happy winter, %s ⛄', $name), + 'happy_autumn' => __('Happy autumn, %s 🍂', $name), + 'happy_spring' => __('Happy spring, %s 🌻', $name), + ]; + + // Welcome back. + $user_last_connect = $user['last_connect']; + $user_last_day = date('d', $user_last_connect); + $day = date('d', strtotime('now')); + if ($user_last_day === $day) { + $welcome[] = $emojiOptions['welcome_back']; + } + + // Morning, evening, night. + $date = date('H'); + if ($date < 13) { + $welcome[] = $emojiOptions['good_morning']; + } else if ($date < 18) { + $welcome[] = $emojiOptions['good_evening']; + } else { + $welcome[] = $emojiOptions['good_night']; + } + + // Seasons. + $mes = date('m'); + if (($latitude > 0 && ($mes >= 3 && $mes <= 5)) || ($latitude < 0 && ($mes >= 9 && $mes <= 11))) { + $welcome[] = $emojiOptions['happy_spring']; + } else if (($latitude > 0 && ($mes >= 6 && $mes <= 8)) || ($latitude < 0 && ($mes >= 12 || $mes <= 2))) { + $welcome[] = $emojiOptions['happy_summer']; + } else if (($latitude > 0 && ($mes >= 9 && $mes <= 11)) || ($latitude < 0 && ($mes >= 3 && $mes <= 5))) { + $welcome[] = $emojiOptions['happy_autumn']; + } else { + $welcome[] = $emojiOptions['happy_winter']; + } + + if ($mes === '12' && $day === '25') { + unset($welcome); + $welcome[] = $emojiOptions['merry_christmas']; + } + + $length = count($welcome); + $possition = rand(0, ($length - 1)); + + return $welcome[$possition]; + } + + } diff --git a/pandora_console/include/rest-api/index.php b/pandora_console/include/rest-api/index.php index cc86978f48..743866d863 100644 --- a/pandora_console/include/rest-api/index.php +++ b/pandora_console/include/rest-api/index.php @@ -95,7 +95,7 @@ if ($doLogin === true) { if ($visualConsoleId) { // Retrieve the visual console. - $visualConsole = VisualConsole::fromDB(['id' => $visualConsoleId], $ratio); + $visualConsole = VisualConsole::fromDB(['id' => $visualConsoleId]); $visualConsoleData = $visualConsole->toArray(); $vcGroupId = $visualConsoleData['groupId']; @@ -307,18 +307,19 @@ if ($getVisualConsole === true) { } unset($data['id']); - $class = VisualConsole::getItemClass((int) $data['type']); try { // Save the new item. - $result = $class::create($data); + $itemId = $class::create($data); + $item = VisualConsole::getItemFromDB($itemId); + $result = $item->toArray(); } catch (\Throwable $th) { // There is no item in the database. echo false; return; } - echo $result; + echo json_encode($result); return; } else if ($getImagesVisualConsole) { $img = get_parameter('nameImg', 'appliance'); diff --git a/pandora_console/include/rest-api/models/VisualConsole/Item.php b/pandora_console/include/rest-api/models/VisualConsole/Item.php index 411d605c0e..e51b47c97e 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Item.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Item.php @@ -2515,7 +2515,7 @@ class Item extends CachedModel 'arguments' => [ 'name' => 'linkedLayoutStatusTypeWeight', 'type' => 'number', - 'value' => $values['linkedLayoutStatusTypeWeight'], + 'value' => ($values['linkedLayoutStatusTypeWeight'] ?? 0), 'return' => true, 'min' => 0, ], diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php b/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php index 31972f3830..04584efe93 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php @@ -60,9 +60,8 @@ final class ModuleGraph extends Item protected static function encode(array $data): array { $return = parent::encode($data); - $id_custom_graph = static::extractIdCustomGraph($data); - if (!empty($id_custom_graph)) { + if (empty($id_custom_graph) === false) { if (\is_metaconsole()) { $explode_custom_graph = explode('|', $id_custom_graph); $return['id_custom_graph'] = $explode_custom_graph[0]; @@ -82,6 +81,18 @@ final class ModuleGraph extends Item $return['show_statistics'] = static::parseBool($show_legend); } + $return['period_chart_options'] = json_encode( + [ + 'periodicityChart' => static::extractPeriodicityChart($data), + 'periodMaximum' => static::extractPeriodMaximum($data), + 'periodMinimum' => static::extractPeriodMinimum($data), + 'periodAverage' => static::extractPeriodAverage($data), + 'periodSummatory' => static::extractPeriodSummatory($data), + 'periodSliceChart' => static::extractPeriodSliceChart($data), + 'periodMode' => static::extractPeriodMode($data), + ] + ); + return $return; } @@ -149,6 +160,15 @@ final class ModuleGraph extends Item $return['period'] = static::extractPeriod($data); $return['showLegend'] = static::extractShowLegend($data); + $return['periodChartOptions'] = static::extractPeriodChartOptions($data); + $return['periodicityChart'] = static::extractPeriodicityChart($return['periodChartOptions']); + $return['periodMaximum'] = static::extractPeriodMaximum($return['periodChartOptions']); + $return['periodMinimum'] = static::extractPeriodMinimum($return['periodChartOptions']); + $return['periodAverage'] = static::extractPeriodAverage($return['periodChartOptions']); + $return['periodSummatory'] = static::extractPeriodSummatory($return['periodChartOptions']); + $return['periodSliceChart'] = static::extractPeriodSliceChart($return['periodChartOptions']); + $return['periodMode'] = static::extractPeriodMode($return['periodChartOptions']); + $customGraphId = static::extractCustomGraphId($data); if (empty($customGraphId) === false) { @@ -161,6 +181,30 @@ final class ModuleGraph extends Item } + /** + * Extract a dynamic data structure from the 'periodChartOptions' field. + * + * @param array $data Unknown input data structure. + * + * @return array Dynamic data structure. + * @throws \InvalidArgumentException If the structure cannot be built. + */ + private static function extractPeriodChartOptions(array $data): array + { + $periodChartOptions = static::notEmptyStringOr($data['period_chart_options'], null); + $result = []; + if ($periodChartOptions !== null) { + try { + $result = \json_decode($periodChartOptions, true); + } catch (\Throwable $e) { + throw new \InvalidArgumentException('invalid dynamic data'); + } + } + + return $result; + } + + /** * Extract a background type value. * @@ -216,6 +260,118 @@ final class ModuleGraph extends Item } + /** + * Extract the "type sliced" switch value. + * + * @param array $data Unknown input data structure. + * + * @return boolean + */ + private static function extractPeriodicityChart(array $data): bool + { + return static::parseBool( + static::issetInArray($data, ['periodicityChart']), + false + ); + } + + + /** + * Extract the "period maximum" switch value. + * + * @param array $data Unknown input data structure. + * + * @return boolean + */ + private static function extractPeriodMaximum(array $data): bool + { + return static::parseBool( + static::issetInArray($data, ['periodMaximum']), + true + ); + } + + + /** + * Extract the "period minimum" switch value. + * + * @param array $data Unknown input data structure. + * + * @return boolean + */ + private static function extractPeriodMinimum(array $data): bool + { + return static::parseBool( + static::issetInArray($data, ['periodMinimum']), + true + ); + } + + + /** + * Extract the "period average" switch value. + * + * @param array $data Unknown input data structure. + * + * @return boolean + */ + private static function extractPeriodAverage(array $data): bool + { + return static::parseBool( + static::issetInArray($data, ['periodAverage']), + true + ); + } + + + /** + * Extract the "period summatory" switch value. + * + * @param array $data Unknown input data structure. + * + * @return boolean + */ + private static function extractPeriodSummatory(array $data): bool + { + return static::parseBool( + static::issetInArray($data, ['periodSummatory']), + false + ); + } + + + /** + * Extract the "period Slice" switch value. + * + * @param array $data Unknown input data structure. + * + * @return boolean + */ + private static function extractPeriodSliceChart(array $data): int + { + return static::parseIntOr( + static::issetInArray($data, ['periodSliceChart']), + SECONDS_1HOUR + ); + } + + + /** + * Extract the "period mode" switch value. + * + * @param array $data Unknown input data structure. + * + * @return boolean + */ + private static function extractPeriodMode(array $data): int + { + return static::parseIntOr( + static::issetInArray($data, ['periodMode']), + CUSTOM_GRAPH_VBARS + ); + } + + /** * Extract a custom graph Id value. * @@ -289,6 +445,15 @@ final class ModuleGraph extends Item $period = static::extractPeriod($data); $showLegend = static::extractShowLegend($data); + $periodChartOptions = static::extractPeriodChartOptions($data); + $periodicityChart = static::extractPeriodicityChart($periodChartOptions); + $periodMaximum = static::extractPeriodMaximum($periodChartOptions); + $periodMinimum = static::extractPeriodMinimum($periodChartOptions); + $periodAverage = static::extractPeriodAverage($periodChartOptions); + $periodSummatory = static::extractPeriodSummatory($periodChartOptions); + $periodSliceChart = static::extractPeriodSliceChart($periodChartOptions); + $periodMode = static::extractPeriodMode($periodChartOptions); + $customGraphId = static::extractCustomGraphId($data); $graphType = static::extractGraphType($data); $linkedModule = static::extractLinkedModule($data); @@ -425,7 +590,23 @@ final class ModuleGraph extends Item 'server_id' => $metaconsoleId, ]; - $chart = \grafico_modulo_sparse($params); + if ($periodicityChart === true) { + $params['width'] = null; + $params['period_maximum'] = $periodMaximum; + $params['period_minimum'] = $periodMinimum; + $params['period_average'] = $periodAverage; + $params['period_summatory'] = $periodSummatory; + $params['period_slice_chart'] = $periodSliceChart; + $params['period_mode'] = $periodMode; + } + + if ($periodicityChart === false) { + $chart = \grafico_modulo_sparse($params); + } else { + $chart = '<div style="background:'.$params['backgroundColor'].'; width: inherit; height: inherit;">'; + $chart .= \graphic_periodicity_module($params); + $chart .= '</div>'; + } } $data['html'] = $chart; @@ -505,6 +686,26 @@ final class ModuleGraph extends Item $values['showLegend'] = true; } + if (isset($values['periodMaximum']) === false) { + $values['periodMaximum'] = true; + } + + if (isset($values['periodMinimum']) === false) { + $values['periodMinimum'] = true; + } + + if (isset($values['periodAverage']) === false) { + $values['periodAverage'] = true; + } + + if (isset($values['periodSliceChart']) === false) { + $values['periodSliceChart'] = SECONDS_1HOUR; + } + + if (isset($values['periodMode']) === false) { + $values['periodMode'] = CUSTOM_GRAPH_VBARS; + } + // Background color. $fields = [ 'white' => __('White'), @@ -608,9 +809,13 @@ final class ModuleGraph extends Item // Custom graph. $fields = self::getListCustomGraph(); - $selected_custom_graph = (\is_metaconsole() === true) - ? $values['customGraphId'].'|'.$values['metaconsoleId'] - : $values['customGraphId']; + $selected_custom_graph = 0; + if (isset($values['customGraphId']) === true) { + $selected_custom_graph = (\is_metaconsole() === true) + ? $values['customGraphId'].'|'.$values['metaconsoleId'] + : $values['customGraphId']; + } + $inputs[] = [ 'id' => 'MGcustomGraph', 'hidden' => $hiddenCustom, @@ -640,25 +845,6 @@ final class ModuleGraph extends Item ], ]; - // Graph Type. - $fields = [ - 'line' => __('Line'), - 'area' => __('Area'), - ]; - - $inputs[] = [ - 'id' => 'MGgraphType', - 'hidden' => $hiddenModule, - 'label' => __('Graph Type'), - 'arguments' => [ - 'type' => 'select', - 'fields' => $fields, - 'name' => 'graphType', - 'selected' => $values['graphType'], - 'return' => true, - ], - ]; - // Show legend. $inputs[] = [ 'id' => 'MGshowLegend', @@ -672,6 +858,124 @@ final class ModuleGraph extends Item ], ]; + $inputs[] = [ + 'label' => __('Sliced mode'), + 'id' => 'row_periodicity_chart', + 'hidden' => $hiddenModule, + 'arguments' => [ + 'name' => 'periodicityChart', + 'id' => 'periodicityChart', + 'type' => 'switch', + 'value' => $values['periodicityChart'], + 'onclick' => 'showPeriodicityOptions(this)', + ], + ]; + + // Graph Type. + $fields = [ + 'line' => __('Line'), + 'area' => __('Area'), + ]; + + $inputs[] = [ + 'label' => __('Graph Type'), + 'id' => 'MGgraphType', + 'style' => ($values['periodicityChart'] === false) ? '' : 'display:none', + 'hidden' => $hiddenModule, + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'graphType', + 'selected' => $values['graphType'], + 'return' => true, + ], + ]; + + $displayPeriodicityChart = ($values['periodicityChart'] === true) ? '' : 'display:none'; + $inputs[] = [ + 'block_id' => 'row_period_type', + 'class' => 'flex-row flex-start w100p', + 'style' => $displayPeriodicityChart, + 'hidden' => $hiddenModule, + 'direct' => 1, + 'block_content' => [ + [ + 'label' => __('Maximum'), + 'arguments' => [ + 'name' => 'periodMaximum', + 'id' => 'periodMaximum', + 'type' => 'switch', + 'value' => $values['periodMaximum'], + ], + ], + [ + 'label' => __('Minimum'), + 'arguments' => [ + 'name' => 'periodMinimum', + 'id' => 'periodMinimum', + 'type' => 'switch', + 'value' => $values['periodMinimum'], + ], + ], + [ + 'label' => __('Average'), + 'arguments' => [ + 'name' => 'periodAverage', + 'id' => 'periodAverage', + 'type' => 'switch', + 'value' => $values['periodAverage'], + ], + ], + [ + 'label' => __('Summatory'), + 'arguments' => [ + 'name' => 'periodSummatory', + 'id' => 'periodSummatory', + 'type' => 'switch', + 'value' => $values['periodSummatory'], + ], + ], + ], + ]; + + $inputs[] = [ + 'label' => __('Slice period'), + 'id' => 'row_period_slice_chart', + 'style' => $displayPeriodicityChart, + 'hidden' => $hiddenModule, + 'arguments' => [ + 'name' => 'periodSliceChart', + 'type' => 'interval', + 'value' => (string) $values['periodSliceChart'], + 'custom_fields' => [ + SECONDS_1HOUR => __('1 hour'), + SECONDS_1DAY => __('1 day'), + SECONDS_1WEEK => __('1 week'), + SECONDS_1MONTH => __('1 month'), + ], + ], + ]; + + $optionsPeriodMode = [ + CUSTOM_GRAPH_AREA => __('Area'), + CUSTOM_GRAPH_LINE => __('Line'), + CUSTOM_GRAPH_VBARS => __('Vertical bars'), + ]; + + $inputs[] = [ + 'label' => __('Type chart'), + 'id' => 'row_period_mode', + 'style' => $displayPeriodicityChart, + 'hidden' => $hiddenModule, + 'arguments' => [ + 'type' => 'select', + 'fields' => $optionsPeriodMode, + 'name' => 'periodMode', + 'selected' => $values['periodMode'], + 'return' => true, + ], + ]; + // Inputs LinkedVisualConsole. $inputsLinkedVisualConsole = self::inputsLinkedVisualConsole( $values diff --git a/pandora_console/include/rest-api/models/VisualConsole/View.php b/pandora_console/include/rest-api/models/VisualConsole/View.php index bbdf8fac71..9ff824c242 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/View.php +++ b/pandora_console/include/rest-api/models/VisualConsole/View.php @@ -341,6 +341,13 @@ class View extends \HTML $data['graphType'] = \get_parameter('graphType'); $data['showLegend'] = \get_parameter_switch('showLegend'); $data['period'] = \get_parameter('period'); + $data['periodicityChart'] = \get_parameter_switch('periodicityChart'); + $data['periodMaximum'] = \get_parameter_switch('periodMaximum'); + $data['periodMinimum'] = \get_parameter_switch('periodMinimum'); + $data['periodAverage'] = \get_parameter_switch('periodAverage'); + $data['periodSummatory'] = \get_parameter_switch('periodSummatory'); + $data['periodSliceChart'] = \get_parameter('periodSliceChart'); + $data['periodMode'] = \get_parameter('periodMode'); break; case SIMPLE_VALUE: diff --git a/pandora_console/include/styles/dashboards.css b/pandora_console/include/styles/dashboards.css index 3e674bc312..8786faa843 100644 --- a/pandora_console/include/styles/dashboards.css +++ b/pandora_console/include/styles/dashboards.css @@ -282,6 +282,8 @@ li#div-textarea label { .container-center:has(div.parent_graph) { display: initial; + width: 98%; + margin: 0 auto; } .content-widget .container-top { @@ -668,9 +670,9 @@ form.modal-dashboard justify-content: center; align-items: start; min-width: 150px; - max-width: 150px; + max-width: 160px; min-height: 150px; - max-height: 150px; + max-height: 160px; margin: 8px; padding: 5px; border: 1px solid #eceef2; diff --git a/pandora_console/include/styles/events.css b/pandora_console/include/styles/events.css index 78286c79f9..8bcdd7187f 100644 --- a/pandora_console/include/styles/events.css +++ b/pandora_console/include/styles/events.css @@ -109,21 +109,13 @@ td > input[id^="checkbox-multi"] { } .info_table.events tr > td span:not(.invisible) { - display: block; + display: inline-block; overflow: hidden; text-overflow: ellipsis; max-height: 6em; line-height: 2em; } -.info_table.events tr > td span:not(.invisible) { - display: block; - overflow: hidden; - text-overflow: ellipsis; - max-height: 6em; - line-height: 1.5em; -} - th.column-estado { padding: 0px 0px 0px 12px !important; max-width: fit-content; diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 53d559b1d0..94d337bdbe 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -8159,6 +8159,10 @@ div.graph div.legend table { height: auto; } +.height_auto_important { + height: auto !important; +} + .mx_height50px { max-height: 50px; } @@ -9623,9 +9627,19 @@ div.stat-win-spinner img { } .stat_win_histogram { - width: 95%; margin: 0 auto; - margin-top: 18%; +} + +.bg_general { + background-color: #ffffff; +} + +#tabs-chart-modal { + border: 0px; +} + +#tabs-chart-ul-graphs li a img { + margin-left: 20px; } #stat-win-module-graph .stat_win_histogram div.nodata_container { @@ -12198,6 +12212,14 @@ td[id^="table_info_box"] a { border-bottom: 1px solid #dedede !important; } +div#visual-console-container div.parent_graph > p.legend_background { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + margin: 0px; +} + div.parent_graph > p.legend_background > table > tbody { display: flex; flex-direction: row; @@ -12304,6 +12326,12 @@ div.parent_graph > p.legend_background > table > tbody > tr { color: #82b92e; text-decoration: none; } + +.link-important { + color: #82b92e !important; + text-decoration: none !important; +} + .signature a { color: #82b92e; text-decoration: none; @@ -12860,6 +12888,503 @@ tr.shown td.details-control { top: -92px; } +.container-periodicity-graph { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + align-content: center; + border: 1px solid #e5e9ed; + border-radius: 10px; + margin-top: 25px; + padding: 10px; +} + +.container-periodicity-graph > div { + flex: 0 0 auto; + width: 100%; + height: 300px; + background-color: transparent; +} + +@-moz-keyframes nieve { + from { + top: -40px; + } + to { + top: 101%; + } +} +@-webkit-keyframes nieve { + from { + top: -40px; + } + to { + top: 2000px; + } +} +@keyframes nieve { + from { + top: -40px; + } + to { + top: 2000px; + } +} + +@-moz-keyframes horiz2 { + 20% { + transform: translateX(0); + } + 50% { + transform: translateX(150px); + } + 80% { + transform: translateX(0); + } +} +@-webkit-keyframes horiz2 { + 20% { + transform: translateX(0); + } + 50% { + transform: translateX(150px); + } + 80% { + transform: translateX(0); + } +} +@keyframes horiz2 { + 20% { + transform: translateX(0); + } + 50% { + transform: translateX(-70px); + } + 80% { + transform: translateX(0); + } +} + +@-moz-keyframes horiz { + 20% { + transform: translateX(0); + } + 50% { + transform: translateX(150px); + } + 80% { + transform: translateX(0); + } +} +@-webkit-keyframes horiz { + 20% { + transform: translateX(0); + } + 50% { + transform: translateX(150px); + } + 80% { + transform: translateX(0); + } +} +@keyframes horiz { + 20% { + transform: translateX(0); + } + 50% { + transform: translateX(150px); + } + 80% { + transform: translateX(0); + } +} + +#container-snow > div { + position: fixed; + -webkit-animation: ease-in infinite normal; + -moz-animation: ease-in infinite normal; + animation: ease-in infinite normal; +} + +#container-snow > div { + z-index: 9999999999999; + width: 15px; + height: 15px; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + background-color: #e8ede5; + -webkit-animation-name: nieve, horiz; + -moz-animation-name: nieve, horiz; + animation-name: nieve, horiz; +} +#container-snow > div:nth-of-type(odd) { + width: 5px; + height: 5px; + -webkit-animation-name: nieve, horiz2; + -moz-animation-name: nieve, horiz2; + animation-name: nieve, horiz2; +} + +#container-snow > div:nth-of-type(1) { + left: 40px; + -webkit-animation-duration: 5.5s; + -moz-animation-duration: 5.5s; + animation-duration: 5.5s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(2) { + left: 120px; + -webkit-animation-duration: 7s; + -moz-animation-duration: 7s; + animation-duration: 7s; +} +#container-snow > div:nth-of-type(3) { + left: 200px; + -webkit-animation-duration: 8s; + -moz-animation-duration: 8s; + animation-duration: 8s; +} +#container-snow > div:nth-of-type(4) { + left: 20%; + -webkit-animation-duration: 6s; + -moz-animation-duration: 6s; + animation-duration: 6s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(5) { + left: 30%; + -webkit-animation-duration: 9s; + -moz-animation-duration: 9s; + animation-duration: 9s; +} +#container-snow > div:nth-of-type(6) { + left: 40%; + -webkit-animation-duration: 7.2s; + -moz-animation-duration: 7.2s; + animation-duration: 7.2s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(7) { + left: 50%; + -webkit-animation-duration: 10s; + -moz-animation-duration: 10s; + animation-duration: 10s; +} +#container-snow > div:nth-of-type(8) { + left: 60%; + -webkit-animation-duration: 6.4s; + -moz-animation-duration: 6.4s; + animation-duration: 6.4s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(9) { + left: 70%; + -webkit-animation-duration: 10s; + -moz-animation-duration: 10s; + animation-duration: 10s; + -webkit-animation-delay: 1.4s; + -moz-animation-delay: 1.4s; + animation-delay: 1.4s; +} +#container-snow > div:nth-of-type(10) { + left: 80%; + -webkit-animation-duration: 8s; + -moz-animation-duration: 8s; + animation-duration: 8s; +} +#container-snow > div:nth-of-type(11) { + left: 90%; + -webkit-animation-duration: 7.1s; + -moz-animation-duration: 7.1s; + animation-duration: 7.1s; + -webkit-animation-delay: 2s; + -moz-animation-delay: 2s; + animation-delay: 2s; +} +#container-snow > div:nth-of-type(12) { + left: 99%; + -webkit-animation-duration: 6.6s; + -moz-animation-duration: 6.6s; + animation-duration: 6.6s; + -webkit-animation-delay: 1.6s; + -moz-animation-delay: 1.6s; + animation-delay: 1.6s; +} +#container-snow > div:nth-of-type(13) { + left: 10px; + -webkit-animation-duration: 10.2s; + -moz-animation-duration: 10.2s; + animation-duration: 10.2s; +} +#container-snow > div:nth-of-type(14) { + left: 180px; + -webkit-animation-duration: 12s; + -moz-animation-duration: 12s; + animation-duration: 12s; +} +#container-snow > div:nth-of-type(15) { + left: 213px; + -webkit-animation-duration: 7.3s; + -moz-animation-duration: 7.3s; + animation-duration: 7.3s; + -webkit-animation-delay: 0.5s; + -moz-animation-delay: 0.5s; + animation-delay: 0.5s; +} +#container-snow > div:nth-of-type(16) { + left: 23%; + -webkit-animation-duration: 9.2s; + -moz-animation-duration: 9.2s; + animation-duration: 9.2s; +} +#container-snow > div:nth-of-type(17) { + left: 38%; + -webkit-animation-duration: 5s; + -moz-animation-duration: 5s; + animation-duration: 5s; +} +#container-snow > div:nth-of-type(18) { + left: 45%; + -webkit-animation-duration: 15s; + -moz-animation-duration: 15s; + animation-duration: 15s; +} +#container-snow > div:nth-of-type(19) { + left: 58%; + -webkit-animation-duration: 5s; + -moz-animation-duration: 5s; + animation-duration: 5s; +} +#container-snow > div:nth-of-type(20) { + left: 64%; + -webkit-animation-duration: 12s; + -moz-animation-duration: 12s; + animation-duration: 12s; +} +#container-snow > div:nth-of-type(21) { + left: 76%; + -webkit-animation-duration: 5.6s; + -moz-animation-duration: 5.6s; + animation-duration: 5.6s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(22) { + left: 86%; + -webkit-animation-duration: 8.5s; + -moz-animation-duration: 8.5s; + animation-duration: 8.5s; +} +#container-snow > div:nth-of-type(23) { + left: 83%; + -webkit-animation-duration: 14.4s; + -moz-animation-duration: 14.4s; + animation-duration: 14.4s; +} +#container-snow > div:nth-of-type(24) { + left: 95%; + -webkit-animation-duration: 12s; + -moz-animation-duration: 12s; + animation-duration: 12s; +} +#container-snow > div:nth-of-type(25) { + left: 55px; + -webkit-animation-duration: 8.7s; + -moz-animation-duration: 8.7s; + animation-duration: 8.7s; + -webkit-animation-delay: 1.2s; + -moz-animation-delay: 1.2s; + animation-delay: 1.2s; +} +#container-snow > div:nth-of-type(26) { + left: 133px; + -webkit-animation-duration: 5.2s; + -moz-animation-duration: 5.2s; + animation-duration: 5.2s; +} +#container-snow > div:nth-of-type(27) { + left: 215px; + -webkit-animation-duration: 10.4s; + -moz-animation-duration: 10.4s; + animation-duration: 10.4s; + -webkit-animation-delay: 1.6s; + -moz-animation-delay: 1.6s; + animation-delay: 1.6s; +} +#container-snow > div:nth-of-type(28) { + left: 26%; + -webkit-animation-duration: 9s; + -moz-animation-duration: 9s; + animation-duration: 9s; +} +#container-snow > div:nth-of-type(29) { + left: 33%; + -webkit-animation-duration: 12s; + -moz-animation-duration: 12s; + animation-duration: 12s; +} +#container-snow > div:nth-of-type(30) { + left: 49%; + -webkit-animation-duration: 9.4s; + -moz-animation-duration: 9.4s; + animation-duration: 9.4s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(31) { + left: 55%; + -webkit-animation-duration: 9.1s; + -moz-animation-duration: 9.1s; + animation-duration: 9.1s; +} +#container-snow > div:nth-of-type(32) { + left: 68%; + -webkit-animation-duration: 9.6s; + -moz-animation-duration: 9.6s; + animation-duration: 9.6s; + -webkit-animation-delay: 0.5s; + -moz-animation-delay: 0.5s; + animation-delay: 0.5s; +} +#container-snow > div:nth-of-type(33) { + left: 73%; + -webkit-animation-duration: 12.4s; + -moz-animation-duration: 12.4s; + animation-duration: 12.4s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(34) { + left: 85%; + -webkit-animation-duration: 9s; + -moz-animation-duration: 9s; + animation-duration: 9s; + -webkit-animation-delay: 1.5s; + -moz-animation-delay: 1.5s; + animation-delay: 1.5s; +} +#container-snow > div:nth-of-type(35) { + left: 93%; + -webkit-animation-duration: 5s; + -moz-animation-duration: 5s; + animation-duration: 5s; +} +#container-snow > div:nth-of-type(36) { + left: 99%; + -webkit-animation-duration: 10.6s; + -moz-animation-duration: 10.6s; + animation-duration: 10.6s; +} +#container-snow > div:nth-of-type(37) { + left: 15px; + -webkit-animation-duration: 9.6s; + -moz-animation-duration: 9.6s; + animation-duration: 9.6s; +} +#container-snow > div:nth-of-type(38) { + left: 99px; + -webkit-animation-duration: 7.5s; + -moz-animation-duration: 7.5s; + animation-duration: 7.5s; +} +#container-snow > div:nth-of-type(39) { + left: 260px; + -webkit-animation-duration: 11s; + -moz-animation-duration: 11s; + animation-duration: 11s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(40) { + left: 28%; + -webkit-animation-duration: 19s; + -moz-animation-duration: 19s; + animation-duration: 19s; +} +#container-snow > div:nth-of-type(41) { + left: 35%; + -webkit-animation-duration: 14s; + -moz-animation-duration: 14s; + animation-duration: 14s; +} +#container-snow > div:nth-of-type(42) { + left: 43%; + -webkit-animation-duration: 5.6s; + -moz-animation-duration: 5.6s; + animation-duration: 5.6s; +} +#container-snow > div:nth-of-type(43) { + left: 53%; + -webkit-animation-duration: 8.8s; + -moz-animation-duration: 8.8s; + animation-duration: 8.8s; + -webkit-animation-delay: 1s; + -moz-animation-delay: 1s; + animation-delay: 1s; +} +#container-snow > div:nth-of-type(44) { + left: 66%; + -webkit-animation-duration: 16s; + -moz-animation-duration: 16s; + animation-duration: 16s; +} +#container-snow > div:nth-of-type(45) { + left: 78%; + -webkit-animation-duration: 6s; + -moz-animation-duration: 6s; + animation-duration: 6s; +} +#container-snow > div:nth-of-type(46) { + left: 88%; + -webkit-animation-duration: 9.5s; + -moz-animation-duration: 9.5s; + animation-duration: 9.5s; + -webkit-animation-delay: 0.5s; + -moz-animation-delay: 0.5s; + animation-delay: 0.5s; +} +#container-snow > div:nth-of-type(47) { + left: 94%; + -webkit-animation-duration: 7.6s; + -moz-animation-duration: 7.6s; + animation-duration: 7.6s; +} +#container-snow > div:nth-of-type(48) { + left: 96%; + -webkit-animation-duration: 8.2s; + -moz-animation-duration: 8.2s; + animation-duration: 8.2s; + -webkit-animation-delay: 0.3s; + -moz-animation-delay: 0.3s; + animation-delay: 0.3s; +} + +@media (max-width: 600px) { + #container-snow > div:nth-of-type(24) ~ * { + display: none; + } +} + +@media (max-width: 800px) { + #container-snow > div:nth-of-type(36) ~ * { + display: none; + } +} + #ncm_backups > caption > h4 { color: black; } diff --git a/pandora_console/include/visual-console-client/vc.main.css b/pandora_console/include/visual-console-client/vc.main.css index f146c0fc94..ee6df12ef9 100644 --- a/pandora_console/include/visual-console-client/vc.main.css +++ b/pandora_console/include/visual-console-client/vc.main.css @@ -746,6 +746,7 @@ p { strong { font-size: inherit; } + /* Styles for the solid icons */ .fa { diff --git a/pandora_console/include/visual-console-client/vc.main.css.map b/pandora_console/include/visual-console-client/vc.main.css.map index fcf332155e..6d3c9bce8f 100644 --- a/pandora_console/include/visual-console-client/vc.main.css.map +++ b/pandora_console/include/visual-console-client/vc.main.css.map @@ -1 +1 @@ -{"version":3,"file":"vc.main.css","mappings":"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","sources":["webpack://pandora-fms-visual-console/./src/main.css","webpack://pandora-fms-visual-console/./src/lib/FontAwesomeIcon.styles.css","webpack://pandora-fms-visual-console/./src/lib/autocomplete.css","webpack://pandora-fms-visual-console/./src/items/Clock/styles.css"],"sourcesContent":["#visual-console-container {\n margin: 0px auto;\n position: relative;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n background-position: center;\n margin-top: 5px;\n}\n\n.is-maintenance {\n background-image: url(./lib/maintenanceMode.png) !important;\n}\n\n.is-maintenance :nth-child(1) {\n display: none;\n}\n\n.visual-console-item {\n position: absolute;\n display: flex;\n flex-direction: initial;\n justify-items: center;\n align-items: center;\n user-select: text;\n z-index: 1;\n}\n\n.visual-console-item.is-on-top {\n z-index: 2;\n}\n\n.visual-console-item * {\n overflow: visible;\n font-family: inherit;\n line-height: inherit;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\n.visual-console-item.is-editing {\n border: 2px dashed #b2b2b2;\n transform: translateX(-2px) translateY(-2px);\n user-select: none;\n}\n\n.visual-console-item.is-editing:hover {\n border-color: #2b2b2b;\n}\n\n.visual-console-item.is-editing.is-selected {\n border: 2px dashed #82b92e;\n cursor: move;\n z-index: 10;\n}\n.visual-console-item.is-editing > .resize-draggable {\n float: right;\n position: absolute;\n right: 0;\n bottom: 0;\n width: 15px;\n height: 15px;\n background: url(./resize-handle.svg);\n cursor: se-resize;\n z-index: 10;\n}\n\n.visual-console-item.is-editing :first-child {\n pointer-events: none;\n}\n\n@keyframes spinner-loading {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n}\n\n.visual-console-item.is-alert-triggered {\n border: 3px solid #f36201;\n}\n\n.visual-console-spinner {\n background-color: transparent;\n margin: 0px auto;\n border-top: 5px solid rgb(82, 85, 87);\n border-right: 5px solid rgb(82, 85, 87);\n border-bottom: 5px solid rgb(82, 85, 87);\n border-left: 5px solid rgba(82, 85, 87, 0.2);\n\n animation-name: spinner-loading;\n animation-duration: 0.8s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n}\n\n.visual-console-spinner,\n.visual-console-spinner :after {\n display: block;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n}\n\n.visual-console-spinner.small,\n.visual-console-spinner.small :after {\n width: 12px;\n height: 12px;\n}\n\n.div-visual-console-spinner {\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n opacity: 0.7;\n background: rgb(212, 215, 218);\n z-index: 10;\n}\n\n.show-elements {\n display: inline-block;\n}\n\n.hide-elements {\n display: none;\n}\n\n/*Forms*/\n.div-input-group label {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n font-size: 12pt;\n font-weight: 600;\n color: #343434;\n margin-right: 10px;\n}\n.div-input-group label img {\n margin-left: 4px;\n}\n\n.div-input-group input[type=\"text\"],\n.div-input-group input[type=\"number\"] {\n height: 25px;\n font-size: 10pt;\n background-color: transparent;\n border: none;\n border-radius: 0;\n border-bottom: 1px solid #ccc;\n font-weight: lighter;\n padding: 0px 0px 2px 0px;\n box-sizing: border-box;\n margin-right: 10px;\n padding-left: 2px;\n}\n\n.div-input-group input[type=\"radio\"] {\n margin-right: 10px;\n width: 17px;\n height: 17px;\n}\n\n.div-input-group select {\n font-weight: lighter;\n font-size: 10pt;\n}\n\n.input-groups {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n}\n\n.input-group {\n width: 100%;\n margin-bottom: 25px;\n padding-left: 20px;\n}\n\n.div-ranges-input-group {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: flex-start;\n}\n\n.div-ranges-input-group > div {\n padding-left: 20px;\n margin-top: 10px;\n}\n\n.div-input-group,\n.div-input-group div div {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.div-input-group h3 {\n text-transform: initial;\n text-align: center;\n font-style: italic;\n text-decoration: underline;\n margin: 0 auto;\n}\n\n.div-input-group div div a {\n margin-left: 10px;\n}\n\n.div-input-group-autocomplete-agent {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n height: 70px;\n}\n\n.div-input-group-inside {\n padding-left: 20px;\n}\n\n.input-group-link-console {\n height: 70px;\n}\n\n.show-elements > div.div-input-group-autocomplete-agent {\n margin-left: 20px;\n}\n\n.img-vc-elements {\n margin-left: 10px;\n}\n\ninput.error-input-validate[type=\"number\"],\ninput.error-input-validate[type=\"text\"],\nselect.error-input-validate {\n border: 1px solid #c00;\n}\n\nselect.error-input-validate:focus {\n outline-color: #c00;\n}\n\np.error-p-validate {\n width: 100%;\n color: #c00;\n}\n\n#modalVCItemForm #textarea_label_ifr {\n background-color: #c9cfcd;\n}\n\n/* Styles for the solid icons */\n\n.fa {\n display: inline-block;\n margin: 0;\n}\n\n.fa,\n.fa > svg,\n.fa.medium,\n.fa.medium > svg {\n width: 28px;\n height: 28px;\n}\n\n.fa.fa-small,\n.fa.fa-small > svg {\n width: 14px;\n height: 14px;\n}\n\n.fa.fa-large,\n.fa.fa-large > svg {\n width: 44px;\n height: 44px;\n}\n\n.fa-spin {\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n animation: fa-spin 1s infinite steps(8);\n}\n\n@keyframes fa-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.autocomplete {\n /*the container must be positioned relative:*/\n position: relative;\n display: inline-block;\n}\n.autocomplete input {\n /*background: pink;*/\n}\n.autocomplete-items {\n border: 1px solid #d4d4d4;\n border-bottom: none;\n border-top: none;\n /*position the autocomplete items to be the same width as the container:*/\n position: absolute;\n z-index: 1;\n overflow: auto;\n max-height: 150px;\n max-width: 250px;\n}\n.autocomplete-items div {\n width: 100%;\n padding: 10px;\n cursor: pointer;\n background-color: #fff;\n border-bottom: 1px solid #d4d4d4;\n border-top: 1px solid #d4d4d4;\n}\n.autocomplete-items div:hover {\n width: 100%;\n background-color: #e9e9e9;\n}\n.autocomplete-active {\n /*when navigating through the items using the arrow keys:*/\n background-color: DodgerBlue !important;\n color: #ffffff;\n}\n\n/* Digital clock */\n\n.visual-console-item .digital-clock {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n flex-direction: column;\n justify-content: center;\n justify-items: center;\n align-content: center;\n align-items: center;\n}\n\n.visual-console-item .digital-clock > span {\n /* To improve legibility */\n text-rendering: optimizeLegibility;\n text-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;\n}\n\n.visual-console-item .digital-clock > span.time {\n font-size: 50px;\n}\n\n.visual-console-item .digital-clock > span.date {\n font-size: 25px;\n}\n\n.visual-console-item .digital-clock > span.timezone {\n font-size: 25px;\n}\n\n/* Analog clock */\n\n.visual-console-item .analogic-clock {\n text-align: center;\n}\n\n.visual-console-item .analogic-clock .hour-hand {\n animation: rotate-hour 43200s infinite linear;\n}\n\n.visual-console-item .analogic-clock .minute-hand {\n animation: rotate-minute 3600s infinite linear;\n}\n\n.visual-console-item .analogic-clock .second-hand {\n animation: rotate-second 60s infinite linear;\n}\n\n#html-tabs .ui-widget-header {\n background-color: #ffffff;\n border: 0px;\n}\n\n#html-tabs .ui-tabs-anchor {\n float: none;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n}\n\n#html-tabs .ui-tabs-anchor img {\n margin-right: 10px;\n}\n\n#html-tabs .ui-tabs-nav li {\n border-radius: 5px 5px 0px 0px;\n}\n\nli.interval-color-ranges > label,\nli#li-default-ranges > label {\n margin-right: 15px;\n}\n\nli.interval-color-ranges > input[type=\"number\"],\nli#li-default-ranges > input[type=\"number\"] {\n width: 80px;\n}\n\nli.interval-color-ranges > label:not(:first-child),\nli#li-default-ranges > label:not(:first-child),\nli#li-size-item > label:not(:first-child),\nli#li-position-item > label:not(:first-child) {\n width: initial;\n margin-left: 15px;\n}\n\nli#li-image-item label {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n}\n\nli#li-image-item label img {\n flex: initial;\n}\n\n.discovery.modal * {\n font-weight: normal;\n color: #343434;\n}\n\n.discovery.modal select {\n width: 100px;\n}\n\n.discovery.modal div#period_manual select,\n.discovery.modal div#period_manual input,\n.discovery.modal div#period_default select,\n.discovery.modal div#cacheExpiration_manual select,\n.discovery.modal div#cacheExpiration_manual input,\n.discovery.modal div#cacheExpiration_default select {\n font-size: inherit !important;\n}\n.discovery.modal div#period_default select#period_select,\n.discovery.modal div#cacheExpiration_default select#cacheExpiration_select {\n max-width: 230px;\n width: inherit;\n}\n\nli#li-timeZone-item > label:not(:first-child),\n.discovery.modal li#div-textarea-label > label {\n flex: inherit;\n}\n\nli#li-timeZone-item > select:not(:first-child) {\n margin-left: 10px;\n}\n\n.discovery.modal li#div-textarea-label table tbody td.mceIframeContainer {\n background-color: #ededed;\n}\n\n/*style item group show statistic*/\n.group-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n}\n.group-container .group-item-title {\n width: 100%;\n height: 30%;\n background-color: #9d9ea0;\n color: black;\n font-weight: bold;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n.group-container .group-item-info {\n width: 100%;\n height: 70%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n padding: 2%;\n align-items: center;\n}\n\n.group-container .group-item-info .group-item-info-container {\n flex: 1 1 20%;\n display: flex;\n flex-direction: row;\n border-radius: 2px;\n max-height: 50px;\n min-height: 35px;\n margin: 1%;\n}\n\n.group-container .group-item-info .group-item-info-container .value-style {\n flex: 1;\n color: #fff;\n font-size: 100%;\n padding: 0%;\n width: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n\n.group-container .group-item-info .group-item-info-container .name-style {\n flex: 1;\n background-color: white;\n color: black;\n font-size: 100%;\n padding: 0%;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n\ndiv.label,\ndiv.simple-value {\n min-width: fit-content;\n min-height: fit-content;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\ndiv.simple-value > div {\n max-height: -webkit-fill-available;\n}\n\ndiv.module-graph .parent_graph p table tr {\n height: 25px;\n}\n\ndiv.module-graph {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n}\n\ndiv.basic-chart {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-end;\n justify-content: center;\n}\n\n.basic-chart-header {\n height: 40%;\n width: 100%;\n display: flex;\n}\n\n.basic-chart-header-name {\n margin: 0;\n padding: 0;\n height: 100%;\n width: 80%;\n display: flex;\n align-items: center;\n font-size: 2.5vmin;\n margin-left: 3%;\n}\n\n.basic-chart-header-value {\n margin: 0;\n padding: 0;\n height: 100%;\n width: 20%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2.5vmin;\n}\n\ndiv.module-graph .gauge_d3_class {\n flex: 1 1 100px;\n float: none !important;\n overflow: inherit !important;\n text-align: center;\n}\n\n.textDecorationNone:hover {\n text-decoration: none;\n}\n\n.vc-item-nl-label {\n border-radius: 5px;\n background-color: #fff;\n padding: 5px;\n padding-left: 1em;\n font-size: 14px;\n}\n\n.odometer {\n overflow: hidden !important;\n}\n\n.odometer-container {\n width: 100%;\n height: 100%;\n overflow: hidden;\n text-align: center;\n display: flex;\n align-items: flex-end;\n}\n\n.odometer-a {\n z-index: 5;\n position: absolute;\n width: 65%;\n height: 65%;\n left: calc(17.5%);\n border-radius: 1000px 1000px 0px 0px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-direction: column;\n line-height: 0px;\n}\n\n.odometer-b {\n z-index: 4;\n position: relative;\n width: 95%;\n height: 95%;\n border-radius: 0px 0px 1000px 1000px;\n transform-origin: center top;\n transition: all 1.3s ease-in-out;\n top: calc(95%);\n left: calc(2.5%);\n}\n\n.odometer-c {\n z-index: 3;\n position: absolute;\n width: 96%;\n height: 96%;\n left: calc(2%);\n background-color: #202226;\n margin-left: auto;\n margin-right: auto;\n border-radius: 1000px 1000px 0px 0px;\n transform-origin: center top;\n transition: all 1.3s ease-in-out;\n}\n\n.odometer-d {\n z-index: 0;\n position: absolute;\n width: 100%;\n height: 100%;\n background-color: #82b92e;\n margin-left: auto;\n margin-right: auto;\n border-radius: 1000px 1000px 0px 0px;\n transform-origin: center top;\n transition: all 1.3s ease-in-out;\n}\n\n.gauge-data {\n z-index: 4;\n color: #fff;\n font-size: 1.5em;\n width: 100%;\n height: 100%;\n transition: all 1s ease-out;\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: flex-end;\n}\n\n.svg_warning {\n fill: #f3b200;\n}\n\n.svg_warning_hide {\n fill: #fff !important;\n}\n\n.gauge-data #percent {\n color: #000;\n}\n\n.orange_background {\n background: #ffa631;\n}\n.red_background {\n background: #e63c52;\n}\n.yellow_background {\n background: #f3b200;\n}\n.grey_background {\n background: #b2b2b2;\n}\n.blue_background {\n background: #4a83f3;\n}\n.green_background {\n background: #82b92e;\n}\n\n#box-rectangle-selection {\n position: absolute;\n width: 0px;\n height: 0px;\n border: 2px solid #002f33;\n}\n\np {\n margin-block-start: 1em;\n margin-block-end: 1em;\n}\n\nstrong {\n font-size: inherit;\n}","/* Styles for the solid icons */\n\n.fa {\n display: inline-block;\n margin: 0;\n}\n\n.fa,\n.fa > svg,\n.fa.medium,\n.fa.medium > svg {\n width: 28px;\n height: 28px;\n}\n\n.fa.fa-small,\n.fa.fa-small > svg {\n width: 14px;\n height: 14px;\n}\n\n.fa.fa-large,\n.fa.fa-large > svg {\n width: 44px;\n height: 44px;\n}\n\n.fa-spin {\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n animation: fa-spin 1s infinite steps(8);\n}\n\n@keyframes fa-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n",".autocomplete {\n /*the container must be positioned relative:*/\n position: relative;\n display: inline-block;\n}\n.autocomplete input {\n /*background: pink;*/\n}\n.autocomplete-items {\n border: 1px solid #d4d4d4;\n border-bottom: none;\n border-top: none;\n /*position the autocomplete items to be the same width as the container:*/\n position: absolute;\n z-index: 1;\n overflow: auto;\n max-height: 150px;\n max-width: 250px;\n}\n.autocomplete-items div {\n width: 100%;\n padding: 10px;\n cursor: pointer;\n background-color: #fff;\n border-bottom: 1px solid #d4d4d4;\n border-top: 1px solid #d4d4d4;\n}\n.autocomplete-items div:hover {\n width: 100%;\n background-color: #e9e9e9;\n}\n.autocomplete-active {\n /*when navigating through the items using the arrow keys:*/\n background-color: DodgerBlue !important;\n color: #ffffff;\n}\n","/* Digital clock */\n\n.visual-console-item .digital-clock {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n justify-items: center;\n align-content: center;\n align-items: center;\n}\n\n.visual-console-item .digital-clock > span {\n /* To improve legibility */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n text-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;\n}\n\n.visual-console-item .digital-clock > span.time {\n font-size: 50px;\n}\n\n.visual-console-item .digital-clock > span.date {\n font-size: 25px;\n}\n\n.visual-console-item .digital-clock > span.timezone {\n font-size: 25px;\n}\n\n/* Analog clock */\n\n.visual-console-item .analogic-clock {\n text-align: center;\n}\n\n.visual-console-item .analogic-clock .hour-hand {\n animation: rotate-hour 43200s infinite linear;\n}\n\n.visual-console-item .analogic-clock .minute-hand {\n animation: rotate-minute 3600s infinite linear;\n}\n\n.visual-console-item .analogic-clock .second-hand {\n animation: rotate-second 60s infinite linear;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"vc.main.css","mappings":"AAAA;EACE,gBAAgB;EAChB,kBAAkB;EAClB,4BAA4B;EAC5B,0BAA0B;EAC1B,2BAA2B;EAC3B,eAAe;AACjB;;AAEA;EACE,oEAA2D;AAC7D;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,uBAAuB;EACvB,qBAAqB;EACrB,mBAAmB;EACnB,iBAAiB;EACjB,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,iBAAiB;EACjB,oBAAoB;EACpB,oBAAoB;EACpB,mCAAmC;EACnC,kCAAkC;EAClC,kCAAkC;AACpC;;AAEA;EACE,0BAA0B;EAC1B,4CAA4C;EAC5C,iBAAiB;AACnB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,0BAA0B;EAC1B,YAAY;EACZ,WAAW;AACb;AACA;EACE,YAAY;EACZ,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,WAAW;EACX,YAAY;EACZ,mDAAoC;EACpC,iBAAiB;EACjB,WAAW;AACb;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE;IACE,uBAAuB;EACzB;EACA;IACE,wBAAwB;EAC1B;AACF;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,6BAA6B;EAC7B,gBAAgB;EAChB,qCAAqC;EACrC,uCAAuC;EACvC,wCAAwC;EACxC,4CAA4C;;EAE5C,+BAA+B;EAC/B,wBAAwB;EACxB,mCAAmC;EACnC,iCAAiC;AACnC;;AAEA;;EAEE,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,8BAA8B;EAC9B,WAAW;AACb;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,aAAa;AACf;;AAEA,QAAQ;AACR;EACE,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,mBAAmB;EACnB,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,kBAAkB;AACpB;AACA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,YAAY;EACZ,eAAe;EACf,6BAA6B;EAC7B,YAAY;EACZ,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,wBAAwB;EACxB,sBAAsB;EACtB,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,YAAY;AACd;;AAEA;EACE,oBAAoB;EACpB,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,eAAe;EACf,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,mBAAmB;AACrB;;AAEA;EACE,uBAAuB;EACvB,kBAAkB;EAClB,kBAAkB;EAClB,0BAA0B;EAC1B,cAAc;AAChB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,eAAe;EACf,uBAAuB;EACvB,8BAA8B;EAC9B,YAAY;AACd;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,sBAAsB;AACxB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,WAAW;EACX,WAAW;AACb;;AAEA;EACE,yBAAyB;AAC3B;;AAEA,+BAA+B;;AAE/B;EACE,qBAAqB;EACrB,SAAS;AACX;;AAEA;;;;EAIE,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE;IACE,uBAAuB;EACzB;EACA;IACE,yBAAyB;EAC3B;AACF;;AAEA;EACE,6CAA6C;EAC7C,kBAAkB;EAClB,qBAAqB;AACvB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,yBAAyB;EACzB,mBAAmB;EACnB,gBAAgB;EAChB,yEAAyE;EACzE,kBAAkB;EAClB,UAAU;EACV,cAAc;EACd,iBAAiB;EACjB,gBAAgB;AAClB;AACA;EACE,WAAW;EACX,aAAa;EACb,eAAe;EACf,sBAAsB;EACtB,gCAAgC;EAChC,6BAA6B;AAC/B;AACA;EACE,WAAW;EACX,yBAAyB;AAC3B;AACA;EACE,0DAA0D;EAC1D,uCAAuC;EACvC,cAAc;AAChB;;AAEA,kBAAkB;;AAElB;EACE,oBAAoB;EACpB,oBAAoB;EACpB,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,qBAAqB;EACrB,qBAAqB;EACrB,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;EAC1B,kCAAkC;EAClC,wCAAwC;AAC1C;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA,iBAAiB;;AAEjB;EACE,kBAAkB;AACpB;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,8CAA8C;AAChD;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,yBAAyB;EACzB,WAAW;AACb;;AAEA;EACE,WAAW;EACX,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,8BAA8B;AAChC;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;;EAEE,kBAAkB;AACpB;;AAEA;;EAEE,WAAW;AACb;;AAEA;;;;EAIE,cAAc;EACd,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,yBAAyB;AAC3B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,YAAY;AACd;;AAEA;;;;;;EAME,6BAA6B;AAC/B;AACA;;EAEE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;;EAEE,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA,kCAAkC;AAClC;EACE,aAAa;EACb,sBAAsB;EACtB,WAAW;EACX,YAAY;AACd;AACA;EACE,WAAW;EACX,WAAW;EACX,yBAAyB;EACzB,YAAY;EACZ,iBAAiB;EACjB,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,WAAW;EACX,WAAW;EACX,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB,UAAU;AACZ;;AAEA;EACE,OAAO;EACP,WAAW;EACX,eAAe;EACf,WAAW;EACX,WAAW;EACX,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,OAAO;EACP,uBAAuB;EACvB,YAAY;EACZ,eAAe;EACf,WAAW;EACX,WAAW;EACX,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;;EAEE,sBAAsB;EACtB,uBAAuB;EACvB,aAAa;EACb,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,qBAAqB;EACrB,uBAAuB;AACzB;;AAEA;EACE,WAAW;EACX,WAAW;EACX,aAAa;AACf;;AAEA;EACE,SAAS;EACT,UAAU;EACV,YAAY;EACZ,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,YAAY;EACZ,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,sBAAsB;EACtB,4BAA4B;EAC5B,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB,YAAY;EACZ,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,kBAAkB;EAClB,aAAa;EACb,qBAAqB;AACvB;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,iBAAiB;EACjB,oCAAoC;EACpC,aAAa;EACb,mBAAmB;EACnB,yBAAyB;EACzB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,oCAAoC;EACpC,4BAA4B;EAC5B,gCAAgC;EAChC,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,cAAc;EACd,yBAAyB;EACzB,iBAAiB;EACjB,kBAAkB;EAClB,oCAAoC;EACpC,4BAA4B;EAC5B,gCAAgC;AAClC;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,yBAAyB;EACzB,iBAAiB;EACjB,kBAAkB;EAClB,oCAAoC;EACpC,4BAA4B;EAC5B,gCAAgC;AAClC;;AAEA;EACE,UAAU;EACV,WAAW;EACX,gBAAgB;EAChB,WAAW;EACX,YAAY;EACZ,2BAA2B;EAC3B,kBAAkB;EAClB,aAAa;EACb,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AC3uBA,+BAA+B;;AAE/B;EACE,qBAAqB;EACrB,SAAS;AACX;;AAEA;;;;EAIE,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE;IACE,uBAAuB;EACzB;EACA;IACE,yBAAyB;EAC3B;AACF;;AC1CA;EACE,6CAA6C;EAC7C,kBAAkB;EAClB,qBAAqB;AACvB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,yBAAyB;EACzB,mBAAmB;EACnB,gBAAgB;EAChB,yEAAyE;EACzE,kBAAkB;EAClB,UAAU;EACV,cAAc;EACd,iBAAiB;EACjB,gBAAgB;AAClB;AACA;EACE,WAAW;EACX,aAAa;EACb,eAAe;EACf,sBAAsB;EACtB,gCAAgC;EAChC,6BAA6B;AAC/B;AACA;EACE,WAAW;EACX,yBAAyB;AAC3B;AACA;EACE,0DAA0D;EAC1D,uCAAuC;EACvC,cAAc;AAChB;;ACnCA,kBAAkB;;AAElB;EACE,aAAa;EACb,sBAAsB;EACtB,6BAA6B;EAC7B,qBAAqB;EACrB,qBAAqB;EACrB,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;EAC1B,mCAAmC;EACnC,kCAAkC;EAClC,kCAAkC;EAClC,wCAAwC;AAC1C;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA,iBAAiB;;AAEjB;EACE,kBAAkB;AACpB;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,8CAA8C;AAChD;;AAEA;EACE,4CAA4C;AAC9C","sources":["webpack://pandora-fms-visual-console/./src/main.css","webpack://pandora-fms-visual-console/./src/lib/FontAwesomeIcon.styles.css","webpack://pandora-fms-visual-console/./src/lib/autocomplete.css","webpack://pandora-fms-visual-console/./src/items/Clock/styles.css"],"sourcesContent":["#visual-console-container {\n margin: 0px auto;\n position: relative;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n background-position: center;\n margin-top: 5px;\n}\n\n.is-maintenance {\n background-image: url(./lib/maintenanceMode.png) !important;\n}\n\n.is-maintenance :nth-child(1) {\n display: none;\n}\n\n.visual-console-item {\n position: absolute;\n display: flex;\n flex-direction: initial;\n justify-items: center;\n align-items: center;\n user-select: text;\n z-index: 1;\n}\n\n.visual-console-item.is-on-top {\n z-index: 2;\n}\n\n.visual-console-item * {\n overflow: visible;\n font-family: inherit;\n line-height: inherit;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\n.visual-console-item.is-editing {\n border: 2px dashed #b2b2b2;\n transform: translateX(-2px) translateY(-2px);\n user-select: none;\n}\n\n.visual-console-item.is-editing:hover {\n border-color: #2b2b2b;\n}\n\n.visual-console-item.is-editing.is-selected {\n border: 2px dashed #82b92e;\n cursor: move;\n z-index: 10;\n}\n.visual-console-item.is-editing > .resize-draggable {\n float: right;\n position: absolute;\n right: 0;\n bottom: 0;\n width: 15px;\n height: 15px;\n background: url(./resize-handle.svg);\n cursor: se-resize;\n z-index: 10;\n}\n\n.visual-console-item.is-editing :first-child {\n pointer-events: none;\n}\n\n@keyframes spinner-loading {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n}\n\n.visual-console-item.is-alert-triggered {\n border: 3px solid #f36201;\n}\n\n.visual-console-spinner {\n background-color: transparent;\n margin: 0px auto;\n border-top: 5px solid rgb(82, 85, 87);\n border-right: 5px solid rgb(82, 85, 87);\n border-bottom: 5px solid rgb(82, 85, 87);\n border-left: 5px solid rgba(82, 85, 87, 0.2);\n\n animation-name: spinner-loading;\n animation-duration: 0.8s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n}\n\n.visual-console-spinner,\n.visual-console-spinner :after {\n display: block;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n}\n\n.visual-console-spinner.small,\n.visual-console-spinner.small :after {\n width: 12px;\n height: 12px;\n}\n\n.div-visual-console-spinner {\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n opacity: 0.7;\n background: rgb(212, 215, 218);\n z-index: 10;\n}\n\n.show-elements {\n display: inline-block;\n}\n\n.hide-elements {\n display: none;\n}\n\n/*Forms*/\n.div-input-group label {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n font-size: 12pt;\n font-weight: 600;\n color: #343434;\n margin-right: 10px;\n}\n.div-input-group label img {\n margin-left: 4px;\n}\n\n.div-input-group input[type=\"text\"],\n.div-input-group input[type=\"number\"] {\n height: 25px;\n font-size: 10pt;\n background-color: transparent;\n border: none;\n border-radius: 0;\n border-bottom: 1px solid #ccc;\n font-weight: lighter;\n padding: 0px 0px 2px 0px;\n box-sizing: border-box;\n margin-right: 10px;\n padding-left: 2px;\n}\n\n.div-input-group input[type=\"radio\"] {\n margin-right: 10px;\n width: 17px;\n height: 17px;\n}\n\n.div-input-group select {\n font-weight: lighter;\n font-size: 10pt;\n}\n\n.input-groups {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n}\n\n.input-group {\n width: 100%;\n margin-bottom: 25px;\n padding-left: 20px;\n}\n\n.div-ranges-input-group {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: flex-start;\n}\n\n.div-ranges-input-group > div {\n padding-left: 20px;\n margin-top: 10px;\n}\n\n.div-input-group,\n.div-input-group div div {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.div-input-group h3 {\n text-transform: initial;\n text-align: center;\n font-style: italic;\n text-decoration: underline;\n margin: 0 auto;\n}\n\n.div-input-group div div a {\n margin-left: 10px;\n}\n\n.div-input-group-autocomplete-agent {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n height: 70px;\n}\n\n.div-input-group-inside {\n padding-left: 20px;\n}\n\n.input-group-link-console {\n height: 70px;\n}\n\n.show-elements > div.div-input-group-autocomplete-agent {\n margin-left: 20px;\n}\n\n.img-vc-elements {\n margin-left: 10px;\n}\n\ninput.error-input-validate[type=\"number\"],\ninput.error-input-validate[type=\"text\"],\nselect.error-input-validate {\n border: 1px solid #c00;\n}\n\nselect.error-input-validate:focus {\n outline-color: #c00;\n}\n\np.error-p-validate {\n width: 100%;\n color: #c00;\n}\n\n#modalVCItemForm #textarea_label_ifr {\n background-color: #c9cfcd;\n}\n\n/* Styles for the solid icons */\n\n.fa {\n display: inline-block;\n margin: 0;\n}\n\n.fa,\n.fa > svg,\n.fa.medium,\n.fa.medium > svg {\n width: 28px;\n height: 28px;\n}\n\n.fa.fa-small,\n.fa.fa-small > svg {\n width: 14px;\n height: 14px;\n}\n\n.fa.fa-large,\n.fa.fa-large > svg {\n width: 44px;\n height: 44px;\n}\n\n.fa-spin {\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n animation: fa-spin 1s infinite steps(8);\n}\n\n@keyframes fa-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.autocomplete {\n /*the container must be positioned relative:*/\n position: relative;\n display: inline-block;\n}\n.autocomplete input {\n /*background: pink;*/\n}\n.autocomplete-items {\n border: 1px solid #d4d4d4;\n border-bottom: none;\n border-top: none;\n /*position the autocomplete items to be the same width as the container:*/\n position: absolute;\n z-index: 1;\n overflow: auto;\n max-height: 150px;\n max-width: 250px;\n}\n.autocomplete-items div {\n width: 100%;\n padding: 10px;\n cursor: pointer;\n background-color: #fff;\n border-bottom: 1px solid #d4d4d4;\n border-top: 1px solid #d4d4d4;\n}\n.autocomplete-items div:hover {\n width: 100%;\n background-color: #e9e9e9;\n}\n.autocomplete-active {\n /*when navigating through the items using the arrow keys:*/\n background-color: DodgerBlue !important;\n color: #ffffff;\n}\n\n/* Digital clock */\n\n.visual-console-item .digital-clock {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n flex-direction: column;\n justify-content: center;\n justify-items: center;\n align-content: center;\n align-items: center;\n}\n\n.visual-console-item .digital-clock > span {\n /* To improve legibility */\n text-rendering: optimizeLegibility;\n text-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;\n}\n\n.visual-console-item .digital-clock > span.time {\n font-size: 50px;\n}\n\n.visual-console-item .digital-clock > span.date {\n font-size: 25px;\n}\n\n.visual-console-item .digital-clock > span.timezone {\n font-size: 25px;\n}\n\n/* Analog clock */\n\n.visual-console-item .analogic-clock {\n text-align: center;\n}\n\n.visual-console-item .analogic-clock .hour-hand {\n animation: rotate-hour 43200s infinite linear;\n}\n\n.visual-console-item .analogic-clock .minute-hand {\n animation: rotate-minute 3600s infinite linear;\n}\n\n.visual-console-item .analogic-clock .second-hand {\n animation: rotate-second 60s infinite linear;\n}\n\n#html-tabs .ui-widget-header {\n background-color: #ffffff;\n border: 0px;\n}\n\n#html-tabs .ui-tabs-anchor {\n float: none;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n}\n\n#html-tabs .ui-tabs-anchor img {\n margin-right: 10px;\n}\n\n#html-tabs .ui-tabs-nav li {\n border-radius: 5px 5px 0px 0px;\n}\n\nli.interval-color-ranges > label,\nli#li-default-ranges > label {\n margin-right: 15px;\n}\n\nli.interval-color-ranges > input[type=\"number\"],\nli#li-default-ranges > input[type=\"number\"] {\n width: 80px;\n}\n\nli.interval-color-ranges > label:not(:first-child),\nli#li-default-ranges > label:not(:first-child),\nli#li-size-item > label:not(:first-child),\nli#li-position-item > label:not(:first-child) {\n width: initial;\n margin-left: 15px;\n}\n\nli#li-image-item label {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n}\n\nli#li-image-item label img {\n flex: initial;\n}\n\n.discovery.modal * {\n font-weight: normal;\n color: #343434;\n}\n\n.discovery.modal select {\n width: 100px;\n}\n\n.discovery.modal div#period_manual select,\n.discovery.modal div#period_manual input,\n.discovery.modal div#period_default select,\n.discovery.modal div#cacheExpiration_manual select,\n.discovery.modal div#cacheExpiration_manual input,\n.discovery.modal div#cacheExpiration_default select {\n font-size: inherit !important;\n}\n.discovery.modal div#period_default select#period_select,\n.discovery.modal div#cacheExpiration_default select#cacheExpiration_select {\n max-width: 230px;\n width: inherit;\n}\n\nli#li-timeZone-item > label:not(:first-child),\n.discovery.modal li#div-textarea-label > label {\n flex: inherit;\n}\n\nli#li-timeZone-item > select:not(:first-child) {\n margin-left: 10px;\n}\n\n.discovery.modal li#div-textarea-label table tbody td.mceIframeContainer {\n background-color: #ededed;\n}\n\n/*style item group show statistic*/\n.group-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n}\n.group-container .group-item-title {\n width: 100%;\n height: 30%;\n background-color: #9d9ea0;\n color: black;\n font-weight: bold;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n.group-container .group-item-info {\n width: 100%;\n height: 70%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n padding: 2%;\n align-items: center;\n}\n\n.group-container .group-item-info .group-item-info-container {\n flex: 1 1 20%;\n display: flex;\n flex-direction: row;\n border-radius: 2px;\n max-height: 50px;\n min-height: 35px;\n margin: 1%;\n}\n\n.group-container .group-item-info .group-item-info-container .value-style {\n flex: 1;\n color: #fff;\n font-size: 100%;\n padding: 0%;\n width: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n\n.group-container .group-item-info .group-item-info-container .name-style {\n flex: 1;\n background-color: white;\n color: black;\n font-size: 100%;\n padding: 0%;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n\ndiv.label,\ndiv.simple-value {\n min-width: fit-content;\n min-height: fit-content;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\ndiv.simple-value > div {\n max-height: -webkit-fill-available;\n}\n\ndiv.module-graph .parent_graph p table tr {\n height: 25px;\n}\n\ndiv.module-graph {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n}\n\ndiv.basic-chart {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-end;\n justify-content: center;\n}\n\n.basic-chart-header {\n height: 40%;\n width: 100%;\n display: flex;\n}\n\n.basic-chart-header-name {\n margin: 0;\n padding: 0;\n height: 100%;\n width: 80%;\n display: flex;\n align-items: center;\n font-size: 2.5vmin;\n margin-left: 3%;\n}\n\n.basic-chart-header-value {\n margin: 0;\n padding: 0;\n height: 100%;\n width: 20%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2.5vmin;\n}\n\ndiv.module-graph .gauge_d3_class {\n flex: 1 1 100px;\n float: none !important;\n overflow: inherit !important;\n text-align: center;\n}\n\n.textDecorationNone:hover {\n text-decoration: none;\n}\n\n.vc-item-nl-label {\n border-radius: 5px;\n background-color: #fff;\n padding: 5px;\n padding-left: 1em;\n font-size: 14px;\n}\n\n.odometer {\n overflow: hidden !important;\n}\n\n.odometer-container {\n width: 100%;\n height: 100%;\n overflow: hidden;\n text-align: center;\n display: flex;\n align-items: flex-end;\n}\n\n.odometer-a {\n z-index: 5;\n position: absolute;\n width: 65%;\n height: 65%;\n left: calc(17.5%);\n border-radius: 1000px 1000px 0px 0px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-direction: column;\n line-height: 0px;\n}\n\n.odometer-b {\n z-index: 4;\n position: relative;\n width: 95%;\n height: 95%;\n border-radius: 0px 0px 1000px 1000px;\n transform-origin: center top;\n transition: all 1.3s ease-in-out;\n top: calc(95%);\n left: calc(2.5%);\n}\n\n.odometer-c {\n z-index: 3;\n position: absolute;\n width: 96%;\n height: 96%;\n left: calc(2%);\n background-color: #202226;\n margin-left: auto;\n margin-right: auto;\n border-radius: 1000px 1000px 0px 0px;\n transform-origin: center top;\n transition: all 1.3s ease-in-out;\n}\n\n.odometer-d {\n z-index: 0;\n position: absolute;\n width: 100%;\n height: 100%;\n background-color: #82b92e;\n margin-left: auto;\n margin-right: auto;\n border-radius: 1000px 1000px 0px 0px;\n transform-origin: center top;\n transition: all 1.3s ease-in-out;\n}\n\n.gauge-data {\n z-index: 4;\n color: #fff;\n font-size: 1.5em;\n width: 100%;\n height: 100%;\n transition: all 1s ease-out;\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: flex-end;\n}\n\n.svg_warning {\n fill: #f3b200;\n}\n\n.svg_warning_hide {\n fill: #fff !important;\n}\n\n.gauge-data #percent {\n color: #000;\n}\n\n.orange_background {\n background: #ffa631;\n}\n.red_background {\n background: #e63c52;\n}\n.yellow_background {\n background: #f3b200;\n}\n.grey_background {\n background: #b2b2b2;\n}\n.blue_background {\n background: #4a83f3;\n}\n.green_background {\n background: #82b92e;\n}\n\n#box-rectangle-selection {\n position: absolute;\n width: 0px;\n height: 0px;\n border: 2px solid #002f33;\n}\n\np {\n margin-block-start: 1em;\n margin-block-end: 1em;\n}\n\nstrong {\n font-size: inherit;\n}\n","/* Styles for the solid icons */\n\n.fa {\n display: inline-block;\n margin: 0;\n}\n\n.fa,\n.fa > svg,\n.fa.medium,\n.fa.medium > svg {\n width: 28px;\n height: 28px;\n}\n\n.fa.fa-small,\n.fa.fa-small > svg {\n width: 14px;\n height: 14px;\n}\n\n.fa.fa-large,\n.fa.fa-large > svg {\n width: 44px;\n height: 44px;\n}\n\n.fa-spin {\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n animation: fa-spin 1s infinite steps(8);\n}\n\n@keyframes fa-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n",".autocomplete {\n /*the container must be positioned relative:*/\n position: relative;\n display: inline-block;\n}\n.autocomplete input {\n /*background: pink;*/\n}\n.autocomplete-items {\n border: 1px solid #d4d4d4;\n border-bottom: none;\n border-top: none;\n /*position the autocomplete items to be the same width as the container:*/\n position: absolute;\n z-index: 1;\n overflow: auto;\n max-height: 150px;\n max-width: 250px;\n}\n.autocomplete-items div {\n width: 100%;\n padding: 10px;\n cursor: pointer;\n background-color: #fff;\n border-bottom: 1px solid #d4d4d4;\n border-top: 1px solid #d4d4d4;\n}\n.autocomplete-items div:hover {\n width: 100%;\n background-color: #e9e9e9;\n}\n.autocomplete-active {\n /*when navigating through the items using the arrow keys:*/\n background-color: DodgerBlue !important;\n color: #ffffff;\n}\n","/* Digital clock */\n\n.visual-console-item .digital-clock {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n justify-items: center;\n align-content: center;\n align-items: center;\n}\n\n.visual-console-item .digital-clock > span {\n /* To improve legibility */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n text-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;\n}\n\n.visual-console-item .digital-clock > span.time {\n font-size: 50px;\n}\n\n.visual-console-item .digital-clock > span.date {\n font-size: 25px;\n}\n\n.visual-console-item .digital-clock > span.timezone {\n font-size: 25px;\n}\n\n/* Analog clock */\n\n.visual-console-item .analogic-clock {\n text-align: center;\n}\n\n.visual-console-item .analogic-clock .hour-hand {\n animation: rotate-hour 43200s infinite linear;\n}\n\n.visual-console-item .analogic-clock .minute-hand {\n animation: rotate-minute 3600s infinite linear;\n}\n\n.visual-console-item .analogic-clock .second-hand {\n animation: rotate-second 60s infinite linear;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/pandora_console/include/visual-console-client/vc.main.min.js b/pandora_console/include/visual-console-client/vc.main.min.js index fdbe815957..b915558f86 100644 --- a/pandora_console/include/visual-console-client/vc.main.min.js +++ b/pandora_console/include/visual-console-client/vc.main.min.js @@ -1,2 +1,2 @@ -(function(){"use strict";var __webpack_modules__={630:function(t,e,n){n.r(e),n.d(e,{FormContainer:function(){return a},InputGroup:function(){return s}});var r=n(510),i=function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},i.apply(this,arguments)},o=function(t,e,n){if(n||2===arguments.length)for(var r,i=0,o=e.length;i<o;i++)!r&&i in e||(r||(r=Array.prototype.slice.call(e,0,i)),r[i]=e[i]);return t.concat(r||Array.prototype.slice.call(e))},s=function(){function t(t,e){this._name="",this.currentData={},this.dataRequestedEventManager=new r.Z,this.name=t,this.initialData=e}return Object.defineProperty(t.prototype,"name",{get:function(){return this._name},set:function(t){if(0===t.length)throw new RangeError("empty name");this._name=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"data",{get:function(){return i({},this.currentData)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){if(null==this._element){var t=document.createElement("div");t.className="input-group input-group-".concat(this.name);var e=this.createContent();e instanceof Array?e.forEach(t.appendChild):t.appendChild(e),this._element=t}return this._element},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this.currentData={}},t.prototype.updateData=function(t){this.currentData=i(i({},this.currentData),t)},t.prototype.requestData=function(t,e,n){this.dataRequestedEventManager.emit({identifier:t,params:e,done:n})},t.prototype.onDataRequested=function(t){return this.dataRequestedEventManager.on(t)},t}(),a=function(){function t(t,e,n){void 0===e&&(e=[]),void 0===n&&(n=[]);var i=this;this.inputGroupsByName={},this.enabledInputGroupNames=[],this.submitEventManager=new r.Z,this.itemDataRequestedEventManager=new r.Z,this.handleItemDataRequested=this.itemDataRequestedEventManager.emit,this.title=t,e.length>0&&(this.inputGroupsByName=e.reduce((function(t,e){return e.onDataRequested(i.handleItemDataRequested),t[e.name]=e,t}),this.inputGroupsByName)),n.length>0&&(this.enabledInputGroupNames=o(o([],this.enabledInputGroupNames,!0),n.filter((function(t){return null!=i.inputGroupsByName[t]})),!0))}return t.prototype.getInputGroup=function(t){return this.inputGroupsByName[t]||null},t.prototype.addInputGroup=function(t,e){return void 0===e&&(e=null),t.onDataRequested(this.handleItemDataRequested),this.inputGroupsByName[t.name]=t,this.enabledInputGroupNames=this.enabledInputGroupNames.filter((function(e){return e!==t.name})),null!==e?e<=0?this.enabledInputGroupNames=o([t.name],this.enabledInputGroupNames,!0):e>=this.enabledInputGroupNames.length?this.enabledInputGroupNames=o(o([],this.enabledInputGroupNames,!0),[t.name],!1):this.enabledInputGroupNames=o(o(o([],this.enabledInputGroupNames.slice(0,e),!0),[t.name],!1),this.enabledInputGroupNames.slice(e),!0):this.enabledInputGroupNames=o(o([],this.enabledInputGroupNames,!0),[t.name],!1),this},t.prototype.removeInputGroup=function(t){return delete this.inputGroupsByName[t],this.enabledInputGroupNames=this.enabledInputGroupNames.filter((function(e){return e!==t})),this},t.prototype.getFormElement=function(t){var e=this;void 0===t&&(t="update");var n=document.createElement("form");n.id="visual-console-item-edition",n.className="visual-console-item-edition",n.addEventListener("submit",(function(t){t.preventDefault(),e.submitEventManager.emit({nativeEvent:t,data:e.enabledInputGroupNames.reduce((function(t,n){return e.inputGroupsByName[n]&&(t=i(i({},t),e.inputGroupsByName[n].data)),t}),{})})}));var r=document.createElement("div");return r.className="input-groups",this.enabledInputGroupNames.forEach((function(t){e.inputGroupsByName[t]&&r.appendChild(e.inputGroupsByName[t].element)})),n.appendChild(r),n},t.prototype.reset=function(){var t=this;this.enabledInputGroupNames.forEach((function(e){t.inputGroupsByName[e]&&t.inputGroupsByName[e].reset()}))},t.prototype.onSubmit=function(t){return this.submitEventManager.on(t)},t.prototype.onInputGroupDataRequested=function(t){return this.itemDataRequestedEventManager.on(t)},t}()},478:function(t,e,n){n.d(e,{TB:function(){return l}});var r=n(541),i=n(510),o=n(630),s=function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},s.apply(this,arguments)},a=function(t){switch(t){case"up":case"right":case"down":case"left":return t;default:return"down"}};function l(t){if(null==t.id||isNaN(parseInt(t.id)))throw new TypeError("invalid id.");if(null==t.type||isNaN(parseInt(t.type)))throw new TypeError("invalid type.");return s(s({id:parseInt(t.id),type:parseInt(t.type),label:(0,r.JW)(t.label,null),labelPosition:a(t.labelPosition),isLinkEnabled:(0,r.gx)(t.isLinkEnabled),link:(0,r.JW)(t.link,null),isOnTop:(0,r.gx)(t.isOnTop),parentId:(0,r.I1)(t.parentId,null),aclGroupId:(0,r.I1)(t.aclGroupId,null),cacheExpiration:(0,r.I1)(t.cacheExpiration,null),colorStatus:(0,r.JW)(t.colorStatus,"#CCC"),cellId:(0,r.JW)(t.cellId,""),alertOutline:(0,r.gx)(t.alertOutline),ratio:(0,r.xn)(t.ratio,null)},(0,r.HY)(t)),(0,r.oF)(t))}var c=function(){function t(t,e,n){void 0===n&&(n=!1);var o=this;this.elementRef=document.createElement("div"),this.labelElementRef=document.createElement("div"),this.childElementRef=document.createElement("div"),this.clickEventManager=new i.Z,this.dblClickEventManager=new i.Z,this.movedEventManager=new i.Z,this.movementFinishedEventManager=new i.Z,this.resizedEventManager=new i.Z,this.resizeFinishedEventManager=new i.Z,this.removeEventManager=new i.Z,this.selectionChangedEventManager=new i.Z,this.disposables=[],this.debouncedMovementSave=(0,r.Ds)(500,(function(t,e){o._metadata.isBeingMoved=!1;var n={x:o.props.x,y:o.props.y},r={x:t,y:e};o.positionChanged(n,r)&&(o.move(t,e),o.movementFinishedEventManager.emit({item:o,prevPosition:n,newPosition:r}))})),this.removeMovement=null,this.debouncedResizementSave=(0,r.Ds)(500,(function(t,e){o._metadata.isBeingResized=!1;var n={width:o.props.width,height:o.props.height},r={width:t,height:e};o.sizeChanged(n,r)&&(o.resize(t,e),o.resizeFinishedEventManager.emit({item:o,prevSize:n,newSize:r}))})),this.removeResizement=null,this.itemProps=t,this._metadata=e,n||this.init()}return t.prototype.initMovementListener=function(t){var e=this;13!=this.props.type&&21!=this.props.type&&(this.removeMovement=(0,r.Dw)(t,(function(t,n){var r={x:e.props.x,y:e.props.y},i={x:t,y:n};e.meta=s(s({},e.meta),{isSelected:!0}),e.positionChanged(r,i)&&(e._metadata.isBeingMoved=!0,e.moveElement(t,n),e.movedEventManager.emit({item:e,prevPosition:r,newPosition:i}),e.debouncedMovementSave(t,n))})))},t.prototype.stopMovementListener=function(){this.removeMovement&&(this.removeMovement(),this.removeMovement=null)},t.prototype.initResizementListener=function(t){var e=this;13!=this.props.type&&21!=this.props.type&&(this.removeResizement=(0,r.Aq)(t,(function(t,n){if(e._metadata.isBeingResized=!0,e.props.label&&e.props.label.length>0){var r=e.labelElementRef.getBoundingClientRect(),i=r.width,o=r.height;switch(e.props.labelPosition){case"up":case"down":n-=o;break;case"left":case"right":t-=i}}var s={width:e.props.width,height:e.props.height},a={width:t,height:n};e.sizeChanged(s,a)&&(e.resizeElement(t,n),e.resizedEventManager.emit({item:e,prevSize:s,newSize:a}),e.debouncedResizementSave(t,n))})))},t.prototype.stopResizementListener=function(){this.removeResizement&&(this.removeResizement(),this.removeResizement=null)},t.prototype.init=function(){this.elementRef=this.createContainerDomElement(),this.labelElementRef=this.createLabelDomElement(),this.childElementRef=this.createDomElement(),this.elementRef.appendChild(this.childElementRef),this.elementRef.appendChild(this.labelElementRef),this.resizeElement(this.itemProps.width,this.itemProps.height),this.changeLabelPosition(this.itemProps.labelPosition)},t.prototype.createContainerDomElement=function(){var t,e=this;return this.props.isLinkEnabled?(t=document.createElement("a"),this.props.link?t.href=this.props.link:t.className="textDecorationNone"):(t=document.createElement("div")).className="textDecorationNone",t.classList.add("visual-console-item"),this.props.isOnTop&&t.classList.add("is-on-top"),t.style.left="".concat(this.props.x,"px"),t.style.top="".concat(this.props.y,"px"),this.props.alertOutline&&t.classList.add("is-alert-triggered"),t.addEventListener("dblclick",(function(t){e.meta.isBeingMoved||e.meta.isBeingResized||(e.unSelectItem(),e.selectItem(),e.dblClickEventManager.emit({item:e,nativeEvent:t}))})),t.addEventListener("click",(function(t){if(e.meta.editMode)t.preventDefault(),t.stopPropagation();else if(e.itemProps.isLinkEnabled&&null!=e.itemProps.link){var n=document.createElement("div");n.className="div-visual-console-spinner";var r=document.createElement("div");r.className="visual-console-spinner",n.appendChild(r);for(var i=t.composedPath(),o="visual-console-container",s=0;s<i.length;s++){var a=i[s];if(null!=a.id&&null!=a.id&&""!=a.id&&!0===a.id.includes(o)){o=a.id;break}}var l=document.getElementById(o);null!=l&&(l.classList.add("is-updating"),l.appendChild(n))}e.meta.isBeingMoved||e.meta.isBeingResized||e.clickEventManager.emit({item:e,nativeEvent:t})})),this.meta.maintenanceMode&&t.classList.add("is-maintenance"),this.meta.editMode&&t.classList.add("is-editing"),this.meta.isFetching&&t.classList.add("is-fetching"),this.meta.isUpdating&&t.classList.add("is-updating"),this.meta.isSelected&&t.classList.add("is-selected"),t},t.prototype.createLabelDomElement=function(){var t=document.createElement("div");t.className="visual-console-item-label";var e=this.getLabelWithMacrosReplaced();if(e.length>0){var n=document.createElement("table"),r=document.createElement("tr"),i=document.createElement("tr"),o=document.createElement("tr"),s=document.createElement("td");s.innerHTML=e,r.appendChild(s),n.appendChild(i),n.appendChild(r),n.appendChild(o),n.style.textAlign="center",t.appendChild(n)}return t},t.prototype.getLabelWithMacrosReplaced=function(){var t=this.props;return(0,r.No)([{macro:"_date_",value:(0,r.rN)(new Date)},{macro:"_time_",value:(0,r.bc)(new Date)},{macro:"_agent_",value:null!=t.agentAlias?t.agentAlias:""},{macro:"_agentdescription_",value:null!=t.agentDescription?t.agentDescription:""},{macro:"_address_",value:null!=t.agentAddress?t.agentAddress:""},{macro:"_module_",value:null!=t.moduleName?t.moduleName:""},{macro:"_moduledescription_",value:null!=t.moduleDescription?t.moduleDescription:""}],this.props.label||"")},t.prototype.updateDomElement=function(t){t.innerHTML=this.createDomElement().innerHTML},Object.defineProperty(t.prototype,"props",{get:function(){return s({},this.itemProps)},set:function(t){this.setProps(t)},enumerable:!1,configurable:!0}),t.prototype.setProps=function(t){var e=this.props;this.itemProps=t,this.shouldBeUpdated(e,t)&&this.render(e,this._metadata)},Object.defineProperty(t.prototype,"meta",{get:function(){return s({},this._metadata)},set:function(t){this.setMeta(t)},enumerable:!1,configurable:!0}),t.prototype.setMeta=function(t){var e=this._metadata;this._metadata=s(s({},e),t),void 0!==t.isSelected&&e.isSelected!==t.isSelected&&this.selectionChangedEventManager.emit({selected:t.isSelected}),this.render(this.itemProps,e)},t.prototype.shouldBeUpdated=function(t,e){return t!==e},t.prototype.render=function(t,e){void 0===t&&(t=null),void 0===e&&(e=null),t&&(1!==this.props.ratio&&13!=this.props.type&&(this.elementRef.style.transform="scale(".concat(this.props.ratio?this.props.ratio:1,")"),this.elementRef.style.transformOrigin="left top",this.elementRef.style.minWidth="max-content",this.elementRef.style.minHeight="max-content"),this.updateDomElement(this.childElementRef)),t&&!this.positionChanged(t,this.props)||(this.moveElement(this.props.x,this.props.y),t&&13!=t.type&&21!=t.type&&this.updateDomElement(this.childElementRef)),t&&!this.sizeChanged(t,this.props)||(this.resizeElement(this.props.width,this.props.height),t&&13!=t.type&&21!=t.type&&this.updateDomElement(this.childElementRef));var n=this.labelElementRef.innerHTML,r=this.createLabelDomElement().innerHTML;if(n!==r&&(this.labelElementRef.innerHTML=r),t&&t.labelPosition===this.props.labelPosition||this.changeLabelPosition(this.props.labelPosition),t&&t.isOnTop===this.props.isOnTop||(this.props.isOnTop?this.elementRef.classList.add("is-on-top"):this.elementRef.classList.remove("is-on-top")),t&&t.isLinkEnabled!==this.props.isLinkEnabled){var i=this.createContainerDomElement();i.innerHTML=this.elementRef.innerHTML;for(var o=this.elementRef.attributes,s=0;s<o.length;s++)if("id"!==o[s].nodeName){var a=this.elementRef.getAttributeNode(o[s].nodeName);null!==a&&i.setAttributeNode(a.cloneNode())}null!==this.elementRef.parentNode&&this.elementRef.parentNode.replaceChild(i,this.elementRef),this.elementRef=i}if(t&&this.props.isLinkEnabled&&t.link!==this.props.link&&null!==this.props.link&&this.elementRef.setAttribute("href",this.props.link),e&&e.editMode===this.meta.editMode&&e.maintenanceMode===this.meta.maintenanceMode||(this.meta.editMode&&!1===this.meta.maintenanceMode?(this.elementRef.classList.add("is-editing"),this.elementRef.classList.remove("is-alert-triggered")):(this.elementRef.classList.remove("is-editing"),this.props.alertOutline&&this.elementRef.classList.add("is-alert-triggered"))),e&&e.isFetching===this.meta.isFetching||(this.meta.isFetching?this.elementRef.classList.add("is-fetching"):this.elementRef.classList.remove("is-fetching")),!e||e.isUpdating!==this.meta.isUpdating){if(this.meta.isUpdating){this.elementRef.classList.add("is-updating");var l=document.createElement("div");l.className="div-visual-console-spinner";var c=document.createElement("div");c.className="visual-console-spinner",l.appendChild(c),this.elementRef.appendChild(l)}else{this.elementRef.classList.remove("is-updating");var p=this.elementRef.querySelector(".div-visual-console-spinner");if(null!==p){var u=p.parentElement;null!==u&&u.removeChild(p)}}this.updateDomElement(this.childElementRef)}e&&e.isSelected===this.meta.isSelected||(this.meta.isSelected?(this.elementRef.classList.add("is-selected"),this.elementRef.setAttribute("id","item-selected-move")):(this.elementRef.classList.remove("is-selected"),this.elementRef.removeAttribute("id")))},t.prototype.remove=function(){this.removeEventManager.emit({item:this}),this.disposables.forEach((function(t){try{t.dispose()}catch(t){}})),this.elementRef.remove()},t.prototype.positionChanged=function(t,e){return t.x!==e.x||t.y!==e.y},t.prototype.changeLabelPosition=function(t){switch(t){case"up":this.elementRef.style.flexDirection="column-reverse";break;case"left":this.elementRef.style.flexDirection="row-reverse";break;case"right":this.elementRef.style.flexDirection="row";break;default:this.elementRef.style.flexDirection="column"}var e=this.labelElementRef.getElementsByTagName("table"),n=e.length>0?e.item(0):null;if(n)switch(this.props.labelPosition){case"up":case"down":this.props.width>0&&(n.style.width="".concat(this.props.width,"px"),n.style.height="");break;case"left":case"right":this.props.height>0&&(n.style.width="",n.style.height="".concat(this.props.height,"px"))}},t.prototype.moveElement=function(t,e){this.elementRef.style.left="".concat(t,"px"),this.elementRef.style.top="".concat(e,"px")},t.prototype.move=function(t,e){this.moveElement(t,e),this.itemProps=s(s({},this.props),{x:t,y:e})},t.prototype.sizeChanged=function(t,e){return t.width!==e.width||t.height!==e.height},t.prototype.resizeElement=function(t,e){if(13!=this.props.type&&21!=this.props.type&&(this.childElementRef.style.width=t>0?"".concat(t,"px"):"",this.childElementRef.style.height=e>0?"".concat(e,"px"):""),this.props.label&&this.props.label.length>0){var n=this.labelElementRef.getElementsByTagName("table"),r=n.length>0?n.item(0):null;if(r)switch(this.props.labelPosition){case"up":case"down":r.style.width=t>0?"".concat(t,"px"):"";break;case"left":case"right":r.style.height=e>0?"".concat(e,"px"):""}}},t.prototype.resize=function(t,e){this.resizeElement(t,e),this.itemProps=s(s({},this.props),{width:t,height:e})},t.prototype.onClick=function(t){var e=this.clickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onDblClick=function(t){var e=this.dblClickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onMoved=function(t){var e=this.movedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onMovementFinished=function(t){var e=this.movementFinishedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onResized=function(t){var e=this.resizedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onResizeFinished=function(t){var e=this.resizeFinishedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onRemove=function(t){var e=this.removeEventManager.on(t);return this.disposables.push(e),e},t.prototype.onSelectionChanged=function(t){var e=this.selectionChangedEventManager.on(t);return this.disposables.push(e),e},t.prototype.selectItem=function(){this.meta=s(s({},this.meta),{isSelected:!0}),this.initMovementListener(this.elementRef),13!==this.props.type&&21!==this.props.type&&this.initResizementListener(this.elementRef)},t.prototype.unSelectItem=function(){this.meta=s(s({},this.meta),{isSelected:!1}),this.stopMovementListener(),13!==this.props.type&&this.stopResizementListener()},t.prototype.getFormContainer=function(){return t.getFormContainer(this.props)},t.getFormContainer=function(t){var e=t.type?function(t){var e="";switch(t){case 0:e=(0,r.t)("Static image");break;case 1:e=(0,r.t)("Module graph");break;case 2:case 6:case 7:case 8:e=(0,r.t)("Simple value");break;case 3:case 9:case 15:case 16:e=(0,r.t)("Percentile item");break;case 4:e=(0,r.t)("Label");break;case 5:e=(0,r.t)("Icon");break;case 10:e=(0,r.t)("Service");break;case 11:e=(0,r.t)("Group");break;case 12:e=(0,r.t)("Box");break;case 13:e=(0,r.t)("Line");break;case 14:e=(0,r.t)("Event history graph");break;case 17:e=(0,r.t)("Serialized pie graph");break;case 18:e=(0,r.t)("Bars graph");break;case 19:e=(0,r.t)("Clock");break;case 20:e=(0,r.t)("Color cloud");break;case 21:e=(0,r.t)("Network link");break;case 22:e=(0,r.t)("Odometer");break;case 23:e=(0,r.t)("Basic chart");break;default:e=(0,r.t)("Item")}return e}(t.type):(0,r.t)("Item");return new o.FormContainer(e,[],[])},t}();e.ZP=c},709:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{K:function(){return barsGraphPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)},parseBarsGraphProps=function(t){switch(t){case"white":case"black":case"transparent":return t;default:return"transparent"}},parseTypeGraph=function(t){switch(t){case"horizontal":case"vertical":return t;default:return"vertical"}};function barsGraphPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:18,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,backgroundColor:parseBarsGraphProps(t.backgroundColor),typeGraph:parseTypeGraph(t.typeGraph),gridColor:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.gridColor)?"#000000":t.gridColor}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t))}var BarsGraph=function(_super){function BarsGraph(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(BarsGraph,_super),BarsGraph.prototype.createDomElement=function(){var element=document.createElement("div");element.innerHTML=this.props.html,element.className="bars-graph",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element},BarsGraph.prototype.updateDomElement=function(element){element.innerHTML=this.props.html,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},BarsGraph}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=BarsGraph},880:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{u:function(){return basicChartPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)};function basicChartPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:23,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,period:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.period,null),value:parseFloat(t.value),status:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.status)?"#B2B2B2":t.status,moduleNameColor:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.moduleNameColor)?"#3f3f3f":t.moduleNameColor}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t)),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.bs)(t))}var BasicChart=function(_super){function BasicChart(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(BasicChart,_super),BasicChart.prototype.createDomElement=function(){var element=document.createElement("div"),header=document.createElement("div");header.className="basic-chart-header";var moduleName=document.createElement("h2");moduleName.className="basic-chart-header-name",moduleName.textContent=this.props.moduleName,moduleName.style.color="".concat(this.props.moduleNameColor),header.appendChild(moduleName);var value="";null!==this.props.value&&(value=this.numberFormat(this.props.value,!1,"",2,1e3));var moduleValue=document.createElement("h2");moduleValue.className="basic-chart-header-value",moduleValue.textContent="".concat(value),moduleValue.style.color=this.props.status,header.appendChild(moduleValue),element.innerHTML=this.props.html,element.className="basic-chart",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var legendP=element.getElementsByTagName("p"),i=0;i<legendP.length;i++)legendP[i].style.margin="0px";for(var overviewGraphs=element.getElementsByClassName("overview_graph"),i=0;i<overviewGraphs.length;i++)overviewGraphs[i].remove();for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element.innerHTML=this.props.html,element.insertBefore(header,element.firstChild),element},BasicChart.prototype.updateDomElement=function(element){var header=document.createElement("div");header.className="basic-chart-header";var moduleName=document.createElement("h2");moduleName.className="basic-chart-header-name",moduleName.textContent=this.props.moduleName,moduleName.style.color="".concat(this.props.moduleNameColor),header.appendChild(moduleName);var value="";null!==this.props.value&&(value=this.numberFormat(this.props.value,!1,"",2,1e3));var moduleValue=document.createElement("h2");moduleValue.className="basic-chart-header-value",moduleValue.textContent="".concat(value),moduleValue.style.color=this.props.status,header.appendChild(moduleValue),element.innerHTML=this.props.html,element.insertBefore(header,element.firstChild);for(var legendP=element.getElementsByTagName("p"),i=0;i<legendP.length;i++)legendP[i].style.margin="0px";for(var overviewGraphs=element.getElementsByClassName("overview_graph"),i=0;i<overviewGraphs.length;i++)overviewGraphs[i].remove();for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},BasicChart.prototype.numberFormat=function(t,e,n,r,i){if(i=void 0!==i?i:1e3,r||(r=99),e){if(Math.round(t)!=t)return""}else{r++;var o=this.pad("1",r,0);t=Math.round(t*Number.parseInt(o))/Number.parseInt(o)}for(var s=0;Math.abs(t)>=i;)s++,t/=i;return t=i?Math.round(2*t)/2:Math.round(2*t),isNaN(t)&&(t=0),t+" "+["","K","M","G","T","P","E","Z","Y"][s]+n},BasicChart.prototype.pad=function(t,e,n){var r=t+"";return e<=r.length?r:this.pad(r+n,e,n)},BasicChart}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=BasicChart},369:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{p:function(){return donutGraphPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)};function donutGraphPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:17,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,legendBackgroundColor:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.legendBackgroundColor)?"#ffffff":t.legendBackgroundColor}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t)),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.bs)(t))}var DonutGraph=function(_super){function DonutGraph(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(DonutGraph,_super),DonutGraph.prototype.createDomElement=function(){var element=document.createElement("div");element.className="donut-graph",element.innerHTML=this.props.html,element.style.backgroundColor=this.props.legendBackgroundColor,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element},DonutGraph.prototype.updateDomElement=function(element){element.innerHTML=this.props.html,element.style.backgroundColor=this.props.legendBackgroundColor,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},DonutGraph}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=DonutGraph},280:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{o:function(){return eventsHistoryPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)};function eventsHistoryPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:14,maxTime:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.maxTime,null),legendColor:t.legendColor,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t))}var EventsHistory=function(_super){function EventsHistory(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(EventsHistory,_super),EventsHistory.prototype.createDomElement=function(){var element=document.createElement("div");element.className="events-history",element.innerHTML=this.props.html,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);var flotText=element.getElementsByClassName("noresizevc");return flotText[0].style.color=this.props.legendColor,element},EventsHistory.prototype.updateDomElement=function(element){element.innerHTML=this.props.html;var aux=document.createElement("div");aux.innerHTML=this.props.html;for(var scripts=aux.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim());var flotText=element.getElementsByClassName("noresizevc");flotText[0].style.color=this.props.legendColor},EventsHistory}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=EventsHistory},600:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{C:function(){return moduleGraphPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)},parseBackgroundType=function(t){switch(t){case"white":case"black":case"transparent":return t;default:return"transparent"}},parseGraphType=function(t){switch(t){case"line":case"area":return t;default:return"line"}};function moduleGraphPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:1,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,backgroundType:parseBackgroundType(t.backgroundType),period:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.period,null),graphType:parseGraphType(t.graphType),customGraphId:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.customGraphId,null)}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t)),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.bs)(t))}var ModuleGraph=function(_super){function ModuleGraph(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(ModuleGraph,_super),ModuleGraph.prototype.createDomElement=function(){var element=document.createElement("div");element.innerHTML=this.props.html,element.className="module-graph",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element},ModuleGraph.prototype.updateDomElement=function(element){element.innerHTML=this.props.html,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},ModuleGraph}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=ModuleGraph},830:function(t,e){var n="http://www.w3.org/2000/svg";e.Z=function(t,e,r){var i=void 0===r?{}:r,o=i.size,s=i.color,a=i.spin,l=i.pulse,c=document.createElement("figure");c.title=e,c.className="fa fa-".concat(t.iconName),o&&c.classList.add("fa-".concat(o)),a?c.classList.add("fa-spin"):l&&c.classList.add("fa-pulse");var p=document.createElementNS(n,"svg");p.setAttribute("viewBox","0 0 ".concat(t.icon[0]," ").concat(t.icon[1])),s&&p.setAttribute("fill",s);var u=document.createElementNS(n,"path"),d="string"==typeof t.icon[4]?t.icon[4]:t.icon[4][0];return u.setAttribute("d",d),p.appendChild(u),c.appendChild(p),c}},510:function(t,e){e.Z=function(){var t=this;this.listeners=[],this.listenersOncer=[],this.on=function(e){return t.listeners.push(e),{dispose:function(){return t.off(e)}}},this.once=function(e){t.listenersOncer.push(e)},this.off=function(e){var n=t.listeners.indexOf(e);n>-1&&t.listeners.splice(n,1)},this.emit=function(e){t.listeners.forEach((function(t){return t(e)})),t.listenersOncer.forEach((function(t){return t(e)})),t.listenersOncer=[]},this.pipe=function(e){return t.on((function(t){return e.emit(t)}))}}},541:function(t,e,n){n.d(e,{Dw:function(){return M},Aq:function(){return x},Ds:function(){return E},NV:function(){return _},fk:function(){return k},rN:function(){return y},bc:function(){return v},SM:function(){return m},bs:function(){return h},MH:function(){return d},JW:function(){return a},gx:function(){return l},xn:function(){return o},I1:function(){return i},oF:function(){return p},OR:function(){return f},No:function(){return g},HY:function(){return u},VJ:function(){return s},t:function(){return C}});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};function i(t,e){return"number"==typeof t?t:"string"==typeof t&&t.length>0&&!isNaN(parseInt(t))?parseInt(t):e}function o(t,e){return"number"==typeof t?t:"string"==typeof t&&t.length>0&&!isNaN(parseFloat(t))?parseFloat(t):e}function s(t){return null==t||0===t.length}function a(t,e){return"string"==typeof t&&t.length>0?t:e}function l(t){return"boolean"==typeof t?t:"number"==typeof t?t>0:"string"==typeof t&&("1"===t||"true"===t)}function c(t,e,n){void 0===n&&(n=" "),"number"==typeof t&&(t="".concat(t)),"number"==typeof n&&(n="".concat(n));var r=e-t.length;if(0===r)return t;if(r<0)return t.substr(Math.abs(r));if(r===n.length)return"".concat(n).concat(t);if(r<n.length)return"".concat(n.substring(0,r)).concat(t);for(var i=Math.floor(r/n.length),o=r-n.length*i,s="",a=0;a<i;a++)s+=n;return 0===o?"".concat(s).concat(t):"".concat(s).concat(n.substring(0,o)).concat(t)}function p(t){return{x:i(t.x,0),y:i(t.y,0)}}function u(t){if(null==t.width||isNaN(parseInt(t.width))||null==t.height||isNaN(parseInt(t.height)))throw new TypeError("invalid size.");return{width:parseInt(t.width),height:parseInt(t.height)}}function d(t){return r({moduleId:i(t.moduleId,null),moduleName:a(t.moduleName,null),moduleDescription:a(t.moduleDescription,null),moduleDisabled:l(t.moduleDisabled)},function(t){var e={agentId:i(t.agentId,null),agentName:a(t.agentName,null),agentAlias:a(t.agentAlias,null),agentDescription:a(t.agentDescription,null),agentAddress:a(t.agentAddress,null),agentDisabled:l(t.agentDisabled)};return null!=t.metaconsoleId?r({metaconsoleId:t.metaconsoleId},e):e}(t))}function h(t){var e={linkedLayoutStatusType:"default"};switch(t.linkedLayoutStatusType){case"weight":var n=i(t.linkedLayoutStatusTypeWeight,null);if(null==n)throw new TypeError("invalid status calculation properties.");t.linkedLayoutStatusTypeWeight&&(e={linkedLayoutStatusType:"weight",linkedLayoutStatusTypeWeight:n});break;case"service":var o=i(t.linkedLayoutStatusTypeWarningThreshold,null),s=i(t.linkedLayoutStatusTypeCriticalThreshold,null);if(null==o||null==s)throw new TypeError("invalid status calculation properties.");e={linkedLayoutStatusType:"service",linkedLayoutStatusTypeWarningThreshold:o,linkedLayoutStatusTypeCriticalThreshold:s}}return r({linkedLayoutId:i(t.linkedLayoutId,null),linkedLayoutNodeId:i(t.linkedLayoutNodeId,null)},e)}function m(t){var e,n=(null,(e=t.receivedAt)instanceof Date?e:"number"==typeof e?new Date(1e3*e):"string"!=typeof e||Number.isNaN(new Date(e).getTime())?null:new Date(e));if(null===n)throw new TypeError("invalid meta structure");var r=null;return t.error instanceof Error?r=t.error:"string"==typeof t.error&&(r=new Error(t.error)),{receivedAt:n,error:r,editMode:l(t.editMode),maintenanceMode:l(t.maintenanceMode),isFromCache:l(t.isFromCache),isFetching:!1,isUpdating:!1,isBeingMoved:!1,isBeingResized:!1,isSelected:!1,lineMode:!1}}function f(t,e){var n="".concat(t,": ").concat(e,";");return["-webkit-".concat(n),"-moz-".concat(n),"-ms-".concat(n),"-o-".concat(n),"".concat(n)]}function _(t){return decodeURIComponent(escape(window.atob(t)))}function y(t,e){if(void 0===e&&(e=null),e&&Intl&&Intl.DateTimeFormat)return Intl.DateTimeFormat(e,{day:"2-digit",month:"2-digit",year:"numeric"}).format(t);var n=c(t.getDate(),2,0),r=c(t.getMonth()+1,2,0),i=c(t.getFullYear(),4,0);return"".concat(n,"/").concat(r,"/").concat(i)}function v(t){var e=c(t.getHours(),2,0),n=c(t.getMinutes(),2,0),r=c(t.getSeconds(),2,0);return"".concat(e,":").concat(n,":").concat(r)}function g(t,e){return t.reduce((function(t,e){var n=e.macro,r=e.value;return t.replace(n,r)}),e)}function b(t,e){var n=0;return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];var o=Date.now();if(!(o-n<t))return n=o,e.apply(void 0,r)}}function E(t,e){var n=null;return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];null!==n&&window.clearTimeout(n),n=window.setTimeout((function(){e.apply(void 0,r),n=null}),t)}}function w(t,e){for(var n=0,r=0;t&&!Number.isNaN(t.offsetLeft)&&!Number.isNaN(t.offsetTop)&&t!==e;)n+=t.offsetLeft-t.scrollLeft,r+=t.offsetTop-t.scrollTop,t=t.offsetParent;return{top:r,left:n}}function M(t,e,n){var r=n||t.parentElement,i=t.draggable,o=0,s=0,a=0,l=0,c=0,p=0,u=r.getBoundingClientRect(),d=w(r),h=d.top,m=h+u.height,f=d.left,_=f+u.width,y=t.getBoundingClientRect(),v=window.getComputedStyle(t).borderWidth||"0",g=2*Number.parseInt(v),M=E(32,e),x=b(16,e),C=function(t){var e=0,n=0,r=t.pageX,i=t.pageY,d=r-a,v=i-l,b=u.width-y.width+g,E=u.height-y.height+g,w=r<f||0===o&&d>0&&r<f+c,C=r>_||d+o+y.width-g>u.width||o===b&&d<0&&r>f+b+c,k=i<h||0===s&&v>0&&i<h+p,P=i>m||v+s+y.height-g>u.height||s===E&&v<0&&i>h+E+p;(e=w?0:C?b:d+o)<0&&(e=0),(n=k?0:P?E:v+s)<0&&(n=0),a=r,l=i,e===o&&n===s||(x(e,n),M(e,n),o=e,s=n)},k=function(){o=0,s=0,a=0,l=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",k),t.draggable=i,document.body.style.userSelect="auto"},P=function(e){if(2!==e.button){e.stopPropagation(),t.draggable=!1,t.setAttribute("ondragstart","return false;"),t.setAttribute("draggable","false");var n=w(t,r);o=n.left,s=n.top,a=e.pageX,l=e.pageY,c=e.offsetX,p=e.offsetY,u=r.getBoundingClientRect(),d=w(r),h=d.top,m=h+u.height,f=d.left,_=f+u.width,y=t.getBoundingClientRect(),v=window.getComputedStyle(t).borderWidth||"0",g=2*Number.parseInt(v),document.addEventListener("mousemove",C),document.addEventListener("mouseup",k),document.body.style.userSelect="none"}};return t.addEventListener("mousedown",P),function(){t.removeEventListener("mousedown",P),k()}}function x(t,e){var n=document.createElement("div");n.className="resize-draggable",t.appendChild(n);var r=t.parentElement,i=t.draggable,o=0,s=0,a=0,l=0,c=0,p=r.getBoundingClientRect(),u=w(r),d=u.top,h=d+p.height,m=u.left,f=m+p.width,_=w(t),y=_.top,v=_.left,g=window.getComputedStyle(t).borderWidth||"0",M=Number.parseInt(g),x=E(32,e),C=b(16,e),k=function(t){var e=o+(t.pageX-a),n=s+(t.pageY-l);e===o&&n===s||e<o&&t.pageX>v+(o-c)||(e<15?e=15:e+v-M/2>=f&&(e=f-v),n<15?n=15:n+y-M/2>=h&&(n=h-y),C(e,n),x(e,n),o=e,s=n,a=t.pageX,l=t.pageY)},P=function(){o=0,s=0,a=0,l=0,c=0,document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",P),t.draggable=i,document.body.style.userSelect="auto"};return n.addEventListener("mousedown",(function(e){e.stopPropagation(),t.draggable=!1;var n=t.getBoundingClientRect(),i=n.width,g=n.height;o=i,s=g,a=e.pageX,l=e.pageY,c=e.offsetX,e.offsetY,p=r.getBoundingClientRect(),u=w(r),d=u.top,h=d+p.height,m=u.left,f=m+p.width,_=w(t),y=_.top,v=_.left,document.addEventListener("mousemove",k),document.addEventListener("mouseup",P),document.body.style.userSelect="none"})),function(){n.remove(),P()}}function C(t){return t}function k(t,e,n){return void 0===e&&(e=140),void 0===n&&(n="…"),t.trim().length>e?t.substr(0,e).trim()+n:t}}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var n=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t](n,n.exports,__webpack_require__),n.exports}__webpack_require__.d=function(t,e){for(var n in e)__webpack_require__.o(e,n)&&!__webpack_require__.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},__webpack_require__.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var __webpack_exports__={};!function(){var t,e=__webpack_require__(541),n=__webpack_require__(478),r=(t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)},function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}),i=function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},i.apply(this,arguments)},o=function(t){switch(t){case"default":case"enabled":case"disabled":return t;default:return"default"}};function s(t){if("string"!=typeof t.imageSrc||0===t.imageSrc.length)throw new TypeError("invalid image src.");return i(i(i(i({},(0,n.TB)(t)),{type:0,imageSrc:t.imageSrc,showLastValueTooltip:o(t.showLastValueTooltip),statusImageSrc:(0,e.JW)(t.statusImageSrc,null),lastValue:(0,e.JW)(t.lastValue,null)}),(0,e.MH)(t)),(0,e.bs)(t))}var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.createDomElement=function(){var t=this.props.statusImageSrc||this.props.imageSrc,e=document.createElement("div");return e.className="static-graph",e.setAttribute("ondragstart","return false;"),e.setAttribute("draggable","false"),e.style.backgroundImage="url(".concat(t,")"),e.style.backgroundRepeat="no-repeat",e.style.backgroundSize="contain",e.style.backgroundPosition="center",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(e.style.opacity="0.2"),null!==this.props.lastValue&&"disabled"!==this.props.showLastValueTooltip&&(e.className="static-graph image forced_title",e.setAttribute("data-use_title_for_force_title","1"),e.setAttribute("data-title",this.props.lastValue)),e},e.prototype.updateDomElement=function(t){var e=this.props.statusImageSrc||this.props.imageSrc;t.style.backgroundImage="url(".concat(e,")")},e}(n.ZP),l=a,c=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),p=function(){return p=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},p.apply(this,arguments)};function u(t){if("string"!=typeof t.imageSrc||0===t.imageSrc.length)throw new TypeError("invalid image src.");if("string"!=typeof t.image||0===t.image.length)throw new TypeError("invalid image.");return p(p(p({},(0,n.TB)(t)),{type:5,image:t.image,imageSrc:t.imageSrc}),(0,e.bs)(t))}var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return c(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="icon "+this.props.image,t.style.backgroundImage="url(".concat(this.props.imageSrc,")"),t.style.backgroundRepeat="no-repeat",t.style.backgroundSize="contain",t.style.backgroundPosition="center",t},e.prototype.updateDomElement=function(t){t.style.backgroundImage="url(".concat(this.props.imageSrc,")")},e}(n.ZP),h=d,m=__webpack_require__(630),f=__webpack_require__(830),_={prefix:"fas",iconName:"plus-circle",icon:[512,512,[],"f055","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"]},y={prefix:"fas",iconName:"trash-alt",icon:[448,512,[],"f2ed","M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]},v=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),g=function(){return g=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},g.apply(this,arguments)},b=function(t,e,n){if(n||2===arguments.length)for(var r,i=0,o=e.length;i<o;i++)!r&&i in e||(r||(r=Array.prototype.slice.call(e,0,i)),r[i]=e[i]);return t.concat(r||Array.prototype.slice.call(e))};function E(t){if("string"!=typeof t.color||0===t.color.length)throw new TypeError("invalid color.");return g(g(g(g({},(0,n.TB)(t)),{type:20,color:t.color,defaultColor:t.defaultColor,colorRanges:t.colorRanges}),(0,e.MH)(t)),(0,e.bs)(t))}var w=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return v(n,t),n.prototype.createContent=function(){var t=this,n=document.createElement("div");n.className="div-input-group";var r=document.createElement("label");r.textContent=(0,e.t)("Default color"),n.appendChild(r);var i=document.createElement("input");return i.type="color",i.required=!0,i.value="".concat(this.currentData.defaultColor||this.initialData.defaultColor||"#000000"),i.addEventListener("change",(function(e){t.updateData({defaultColor:e.target.value})})),n.appendChild(i),n},n}(m.InputGroup),M=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return v(n,t),n.prototype.createContent=function(){var t=this,e=document.createElement("div");e.className="div-input-group div-ranges-input-group";var n=this.createLabel("Ranges");e.appendChild(n);var r=document.createElement("div"),i=document.createElement("div");e.appendChild(i),e.appendChild(r);var o,s=this.currentData.colorRanges||this.initialData.colorRanges||[];return o=function(e){i.innerHTML="",e.forEach((function(e,n){return i.appendChild(t.rangeContainer(e,function(e){return function(n){var r=t.currentData.colorRanges||t.initialData.colorRanges||[];t.updateData({colorRanges:b(b(b([],r.slice(0,e),!0),[n],!1),r.slice(e+1),!0)})}}(n),function(e){return function(){var n=t.currentData.colorRanges||t.initialData.colorRanges||[],r=b(b([],n.slice(0,e),!0),n.slice(e+1),!0);t.updateData({colorRanges:r}),o(r)}}(n)))}))},o(s),r.appendChild(this.initialRangeContainer((function(e){var n=t.currentData.colorRanges||t.initialData.colorRanges||[],r=b(b([],n,!0),[e],!1);t.updateData({colorRanges:r}),o(r)}))),e},n.prototype.initialRangeContainer=function(t){var n={color:"#ffffff"},r=g({},n),i=document.createElement("div"),o=document.createElement("div"),s=this.createLabel("From Value"),a=this.createInputNumber(null,(function(t){r.fromValue=t}));o.appendChild(s),o.appendChild(a),i.appendChild(o);var l=document.createElement("div"),c=this.createLabel("To Value"),p=this.createInputNumber(null,(function(t){r.toValue=t}));o.appendChild(c),o.appendChild(p),i.appendChild(l);var u=document.createElement("div"),d=this.createLabel("Color"),h=this.createInputColor(n.color,(function(t){r.color=t}));o.appendChild(d),o.appendChild(h),i.appendChild(u);var m=document.createElement("a");return m.appendChild((0,f.Z)(_,(0,e.t)("Create color range"),{size:"small",color:"#565656"})),m.addEventListener("click",(function(){var e;void 0!==(e=r).color&&void 0!==e.toValue&&void 0!==e.fromValue&&t(r),r=n,a.value="".concat(r.fromValue||""),p.value="".concat(r.toValue||""),h.value="".concat(r.color)})),i.appendChild(m),i},n.prototype.rangeContainer=function(t,n,r){var i=g({},t),o=document.createElement("div"),s=document.createElement("div"),a=this.createLabel("From Value"),l=this.createInputNumber(t.fromValue,(function(t){i.fromValue=t,n(g({},i))}));s.appendChild(a),s.appendChild(l),o.appendChild(s);var c=document.createElement("div"),p=this.createLabel("To Value"),u=this.createInputNumber(t.toValue,(function(t){i.toValue=t,n(g({},i))}));s.appendChild(p),s.appendChild(u),o.appendChild(c);var d=document.createElement("div"),h=this.createLabel("Color"),m=this.createInputColor(t.color,(function(t){i.color=t,n(g({},i))}));s.appendChild(h),s.appendChild(m),o.appendChild(d);var _=document.createElement("a");return _.appendChild((0,f.Z)(y,(0,e.t)("Delete color range"),{size:"small",color:"#565656"})),_.addEventListener("click",r),o.appendChild(_),o},n.prototype.createLabel=function(t){var n=document.createElement("label");return n.textContent=(0,e.t)(t),n},n.prototype.createInputNumber=function(t,e){var n=document.createElement("input");return n.type="number",null!==t&&(n.value="".concat(t)),n.addEventListener("change",(function(t){var n=parseInt(t.target.value);isNaN(n)||e(n)})),n},n.prototype.createInputColor=function(t,e){var n=document.createElement("input");return n.type="color",null!==t&&(n.value=t),n.addEventListener("change",(function(t){return e(t.target.value)})),n},n}(m.InputGroup),x="http://www.w3.org/2000/svg",C=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return v(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="color-cloud",t.append(this.createSvgElement()),t},e.prototype.resizeElement=function(e){t.prototype.resizeElement.call(this,e,e)},e.prototype.createSvgElement=function(){var t="grad_".concat(this.props.id),e=document.createElementNS(x,"svg");e.setAttribute("viewBox","0 0 100 100");var n=document.createElementNS(x,"defs"),r=document.createElementNS(x,"radialGradient");r.setAttribute("id",t),r.setAttribute("cx","50%"),r.setAttribute("cy","50%"),r.setAttribute("r","50%"),r.setAttribute("fx","50%"),r.setAttribute("fy","50%");var i=document.createElementNS(x,"stop");i.setAttribute("offset","0%"),i.setAttribute("style","stop-color:".concat(this.props.color,";stop-opacity:0.9"));var o=document.createElementNS(x,"stop");o.setAttribute("offset","100%"),o.setAttribute("style","stop-color:".concat(this.props.color,";stop-opacity:0"));var s=document.createElementNS(x,"circle");return s.setAttribute("fill","url(#".concat(t,")")),s.setAttribute("cx","50%"),s.setAttribute("cy","50%"),s.setAttribute("r","50%"),r.append(i,o),n.append(r),e.append(n,s),!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||e.setAttribute("opacity","0.2"),e},e.prototype.getFormContainer=function(){return e.getFormContainer(this.props)},e.getFormContainer=function(e){var n=t.getFormContainer.call(this,e);return n.removeInputGroup("label"),n.addInputGroup(new w("color-cloud",e),3),n.addInputGroup(new M("ranges-cloud",e),4),n},e}(n.ZP),k=C,P=__webpack_require__(510),I=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),A=function(){return A=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},A.apply(this,arguments)};function O(t){var r=A(A({},(0,n.TB)(A(A({},t),{width:1,height:1}))),{type:13,label:null,isLinkEnabled:!1,parentId:null,aclGroupId:null,x:0,y:0,width:0,height:0,startPosition:{x:(0,e.I1)(t.startX,0),y:(0,e.I1)(t.startY,0)},endPosition:{x:(0,e.I1)(t.endX,0),y:(0,e.I1)(t.endY,0)},lineWidth:(0,e.I1)(t.lineWidth||t.borderWidth,1),color:(0,e.JW)(t.borderColor||t.color,null),viewportOffsetX:0,viewportOffsetY:0,labelEnd:(0,e.JW)(t.labelEnd,""),labelEndWidth:(0,e.I1)(t.labelEndWidth,0),linkedEnd:t.linkedEnd,linkedStart:t.linkedStart,labelEndHeight:(0,e.I1)(t.labelEndHeight,0),labelStart:(0,e.JW)(t.labelStart,""),labelStartWidth:(0,e.I1)(t.labelStartWidth,0),labelStartHeight:(0,e.I1)(t.labelStartHeight,0)});return A(A({},r),S.extractBoxSizeAndPosition(r.startPosition,r.endPosition))}var T="http://www.w3.org/2000/svg",S=function(t){function n(r,i){var o=t.call(this,A(A({},r),n.extractBoxSizeAndPosition(r.startPosition,r.endPosition)),A({},i),!0)||this;return o.circleRadius=8,o.moveMode=!1,o.isMoving=!1,o.lineMovedEventManager=new P.Z,o.lineMovedEventDisposables=[],o.debouncedStartPositionMovementSave=(0,e.Ds)(500,(function(t,e){o.isMoving=!1;var n={x:t,y:e};o.lineMovedEventManager.emit({item:o,startPosition:n,endPosition:o.props.endPosition})})),o.removeStartPositionMovement=null,o.debouncedEndPositionMovementSave=(0,e.Ds)(500,(function(t,e){o.isMoving=!1;var n={x:t,y:e};o.lineMovedEventManager.emit({item:o,endPosition:n,startPosition:o.props.startPosition})})),o.removeEndPositionMovement=null,o.moveMode=i.editMode,o.init(),t.prototype.resizeElement.call(o,Math.max(r.width,r.viewportOffsetX),Math.max(r.height,r.viewportOffsetY)),o}return I(n,t),n.prototype.initStartPositionMovementListener=function(t,n){var r=this;this.removeStartPositionMovement=(0,e.Dw)(t,(function(t,e){var n={x:t+=r.circleRadius-r.props.viewportOffsetX/2,y:e+=r.circleRadius-r.props.viewportOffsetY/2};r.isMoving=!0,r.props=A(A({},r.props),{startPosition:n}),r.debouncedStartPositionMovementSave(t,e)}),n)},n.prototype.stopStartPositionMovementListener=function(){this.removeStartPositionMovement&&(this.removeStartPositionMovement(),this.removeStartPositionMovement=null)},n.prototype.initEndPositionMovementListener=function(t,n){var r=this;this.removeEndPositionMovement=(0,e.Dw)(t,(function(t,e){t+=r.circleRadius-r.props.viewportOffsetX/2,e+=r.circleRadius-r.props.viewportOffsetY/2,r.isMoving=!0,r.props=A(A({},r.props),{endPosition:{x:t,y:e}}),r.debouncedEndPositionMovementSave(t,e)}),n)},n.prototype.stopEndPositionMovementListener=function(){this.removeEndPositionMovement&&(this.removeEndPositionMovement(),this.removeEndPositionMovement=null)},n.prototype.setProps=function(e){t.prototype.setProps.call(this,A(A({},e),n.extractBoxSizeAndPosition(e.startPosition,e.endPosition)))},n.prototype.setMeta=function(e){this.moveMode=e.editMode,t.prototype.setMeta.call(this,A(A({},e),{lineMode:!0}))},n.prototype.createDomElement=function(){var t=document.createElement("div");t.className="line";var e=this.props,n=e.x,r=e.y,i=e.width,o=e.height,s=e.lineWidth,a=e.viewportOffsetX,l=e.viewportOffsetY,c=e.startPosition,p=e.endPosition,u=e.color;i+=a,o+=l;var d=c.x-n+s/2+a/2,h=c.y-r+s/2+l/2,m=p.x-n+s/2+a/2,f=p.y-r+s/2+l/2,_=document.createElementNS(T,"svg");_.setAttribute("width","".concat(i+s)),_.setAttribute("height","".concat(o+s));var y=document.createElementNS(T,"line");return y.setAttribute("x1","".concat(d)),y.setAttribute("y1","".concat(h)),y.setAttribute("x2","".concat(m)),y.setAttribute("y2","".concat(f)),y.setAttribute("stroke",u||"black"),y.setAttribute("stroke-width","".concat(s)),_.append(y),t.append(_),t},n.prototype.updateDomElement=function(t){null!=t.parentElement&&(t.parentElement.style.cursor="default");var e=this.props,n=e.x,r=e.y,i=e.width,o=e.height,s=e.lineWidth,a=e.viewportOffsetX,l=e.viewportOffsetY,c=e.startPosition,p=e.endPosition,u=e.color;i+=a,o+=l;var d=c.x-n+s/2+a/2,h=c.y-r+s/2+l/2,m=p.x-n+s/2+a/2,f=p.y-r+s/2+l/2,_=t.getElementsByTagName("svg");if(_.length>0){var y=_.item(0);if(null!=y){y.setAttribute("width","".concat(i+s)),y.setAttribute("height","".concat(o+s));var v=y.getElementsByTagNameNS(T,"line");if(v.length>0){var g=v.item(0);null!=g&&(g.setAttribute("x1","".concat(d)),g.setAttribute("y1","".concat(h)),g.setAttribute("x2","".concat(m)),g.setAttribute("y2","".concat(f)),g.setAttribute("stroke",u||"black"),g.setAttribute("stroke-width","".concat(s)))}}}if(this.moveMode){var b=document.createElement("div"),E=document.createElement("div");if(this.isMoving){var w=t.getElementsByClassName("visual-console-item-line-circle-start");w.length>0&&(C=w.item(0))&&(b=C);var M=t.getElementsByClassName("visual-console-item-line-circle-end");M.length>0&&(C=M.item(0))&&(E=C)}if(b.classList.add("visual-console-item-line-circle","visual-console-item-line-circle-start"),b.style.width="".concat(2*this.circleRadius,"px"),b.style.height="".concat(2*this.circleRadius,"px"),b.style.borderRadius="50%",b.style.backgroundColor="".concat(u),b.style.position="absolute",b.style.left="".concat(d-this.circleRadius,"px"),b.style.top="".concat(h-this.circleRadius,"px"),b.style.cursor="move",E.classList.add("visual-console-item-line-circle","visual-console-item-line-circle-end"),E.style.width="".concat(2*this.circleRadius,"px"),E.style.height="".concat(2*this.circleRadius,"px"),E.style.borderRadius="50%",E.style.backgroundColor="".concat(u),E.style.position="absolute",E.style.left="".concat(m-this.circleRadius,"px"),E.style.top="".concat(f-this.circleRadius,"px"),E.style.cursor="move",null!==t.parentElement){for(var x=t.parentElement.getElementsByClassName("visual-console-item-line-circle");x.length>0;)(C=x.item(0))&&C.remove();t.parentElement.appendChild(b),t.parentElement.appendChild(E)}this.initStartPositionMovementListener(b,this.elementRef.parentElement),this.initEndPositionMovementListener(E,this.elementRef.parentElement)}else if(this.moveMode)this.stopStartPositionMovementListener();else if(this.stopStartPositionMovementListener(),null!==t.parentElement)for(x=t.parentElement.getElementsByClassName("visual-console-item-line-circle");x.length>0;){var C;(C=x.item(0))&&C.remove()}},n.extractBoxSizeAndPosition=function(t,e){return{width:Math.abs(t.x-e.x),height:Math.abs(t.y-e.y),x:Math.min(t.x,e.x),y:Math.min(t.y,e.y)}},n.prototype.move=function(e,n){t.prototype.moveElement.call(this,e,n);var r=this.props.startPosition.x-this.props.endPosition.x<=0,i=this.props.startPosition.y-this.props.endPosition.y<=0,o={x:r?e:this.props.width+e,y:i?n:this.props.height+n},s={x:r?this.props.width+e:e,y:i?this.props.height+n:n};this.props=A(A({},this.props),{startPosition:o,endPosition:s})},n.prototype.remove=function(){this.stopStartPositionMovementListener(),t.prototype.remove.call(this)},n.prototype.onLineMovementFinished=function(t){var e=this.lineMovedEventManager.on(t);return this.lineMovedEventDisposables.push(e),e},n}(n.ZP),L=S,D=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),R=function(){return R=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},R.apply(this,arguments)},N="http://www.w3.org/2000/svg";function B(t){return R(R({},O(t)),{type:21,viewportOffsetX:0,viewportOffsetY:0,labelEnd:(0,e.JW)(t.labelEnd,""),labelEndWidth:(0,e.I1)(t.labelEndWidth,0),labelEndHeight:(0,e.I1)(t.labelEndHeight,0),labelStart:(0,e.JW)(t.labelStart,""),labelStartWidth:(0,e.I1)(t.labelStartWidth,0),labelStartHeight:(0,e.I1)(t.labelStartHeight,0)})}var z=function(t){function n(n,r){var i=t.call(this,R({},n),R({},r))||this;return i.debouncedStartPositionMovementSave=(0,e.Ds)(50,(function(t,e){i.isMoving=!1;var n={x:t,y:e};i.render(),i.lineMovedEventManager.emit({item:i,startPosition:n,endPosition:i.props.endPosition})})),i.debouncedEndPositionMovementSave=(0,e.Ds)(50,(function(t,e){i.isMoving=!1;var n={x:t,y:e};i.render(),i.lineMovedEventManager.emit({item:i,endPosition:n,startPosition:i.props.startPosition})})),i.render(),i}return D(n,t),n.prototype.updateDomElement=function(e){null!=this.itemProps.ratio&&(this.itemProps.x/=this.itemProps.ratio,this.itemProps.y/=this.itemProps.ratio),t.prototype.updateDomElement.call(this,e);var n=this.props,r=n.x,i=n.y,o=n.lineWidth,s=n.viewportOffsetX,a=n.viewportOffsetY,l=n.startPosition,c=n.endPosition,p=n.color,u=n.labelEnd,d=n.labelStart,h=n.labelEndWidth,m=n.labelEndHeight,f=n.labelStartWidth,_=n.labelStartHeight;null!=this.itemProps.ratio&&(this.itemProps.x*=this.itemProps.ratio,this.itemProps.y*=this.itemProps.ratio);var y,v,g=e.getElementsByTagName("svg");if(g.length>0){if(null!=(v=g.item(0))){for(var b=v.getElementsByTagNameNS(N,"line"),E=v.getElementsByTagNameNS(N,"g");E.length>0;)E[0].remove();b.length>0&&(y=b.item(0))}if(null!=v&&null!=y){var w=25,M=l.x-r+o/2+s/2,x=l.y-i+o/2+a/2,C=c.x-r+o/2+s/2,k=c.y-i+o/2+a/2,P=l.x-r+o/2+s/2,I=l.y-i+o/2+a/2,A=c.x-r+o/2+s/2,O=c.y-i+o/2+a/2,T=180*Math.atan2(k-x,C-M)/Math.PI;if(f<=0&&(b=d.split("<br>"),f=0,b.forEach((function(t){t.length>f&&(f=10*t.length)})),_<=0&&(_=25*b.length)),h<=0&&(b=u.split("<br>"),h=0,b.forEach((function(t){t.length>h&&(h=10*t.length)})),m<=0&&(m=25*b.length)),P<A&&(P+=w,A-=w+h),P>A&&(P-=w+f,A+=w),I<O&&(I+=w,O-=w+m),I>O&&(I-=w+_,O+=w),void 0===p&&(p="#000"),null!==e.parentElement){for(var S=e.parentElement.getElementsByClassName("vc-item-nl-label");S.length>0;){var L=S.item(0);L&&L.remove()}for(var D=e.parentElement.getElementsByClassName("vc-item-nl-arrow");D.length>0;){var R=D.item(0);R&&R.remove()}}var B=2*o,z=M+(C-M)/2-B,W=x+(k-x)/2-B,j=document.createElement("div");j.classList.add("vc-item-nl-arrow"),j.style.position="absolute",j.style.border="".concat(B,"px solid transparent"),j.style.borderBottom="".concat(B,"px solid ").concat(p),j.style.left="".concat(z,"px"),j.style.top="".concat(W,"px"),j.style.transform="rotate(".concat(90+T,"deg)");var H=document.createElement("div");if(H.classList.add("vc-item-nl-arrow"),H.style.position="absolute",H.style.border="".concat(B,"px solid transparent"),H.style.borderBottom="".concat(B,"px solid ").concat(p),H.style.left="".concat(z,"px"),H.style.top="".concat(W,"px"),H.style.transform="rotate(".concat(270+T,"deg)"),null!==e.parentElement&&(e.parentElement.appendChild(j),e.parentElement.appendChild(H)),""!=d){var V=document.createElement("div");try{V.innerHTML=d,V.style.position="absolute",V.style.left="".concat(P,"px"),V.style.top="".concat(I,"px"),V.style.width="".concat(f,"px"),V.style.border="2px solid ".concat(p),V.classList.add("vc-item-nl-label","label-start")}catch(t){console.error(t)}null!==e.parentElement&&e.parentElement.appendChild(V)}if(""!=u){var G=document.createElement("div");try{G.innerHTML=u,G.style.position="absolute",G.style.left="".concat(A,"px"),G.style.top="".concat(O,"px"),G.style.width="".concat(h,"px"),G.style.border="2px solid ".concat(p),G.classList.add("vc-item-nl-label","label-end")}catch(t){console.error(t)}null!==e.parentElement&&e.parentElement.appendChild(G)}}}},n}(L),W=z,j=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),H=function(){return H=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},H.apply(this,arguments)};function V(t){if(("string"!=typeof t.imageSrc||0===t.imageSrc.length)&&null===t.encodedHtml)throw new TypeError("invalid image src.");if(null===(0,e.I1)(t.groupId,null))throw new TypeError("invalid group Id.");var r=(0,e.gx)(t.showStatistics),i=r?function(t){return(0,e.VJ)(t.html)?(0,e.VJ)(t.encodedHtml)?null:(0,e.NV)(t.encodedHtml):t.html}(t):null;return H(H(H({},(0,n.TB)(t)),{type:11,groupId:parseInt(t.groupId),imageSrc:(0,e.JW)(t.imageSrc,null),statusImageSrc:(0,e.JW)(t.statusImageSrc,null),showStatistics:r,html:i}),(0,e.bs)(t))}var G=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return j(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="group",this.props.showStatistics||null===this.props.statusImageSrc?this.props.showStatistics&&null!=this.props.html&&(t.style.backgroundImage="none",t.innerHTML=this.props.html):(t.style.backgroundImage="url(".concat(this.props.statusImageSrc,")"),t.style.backgroundRepeat="no-repeat",t.style.backgroundSize="contain",t.style.backgroundPosition="center"),t},e.prototype.updateDomElement=function(t){this.props.showStatistics||null===this.props.statusImageSrc?this.props.showStatistics&&null!=this.props.html&&(t.style.backgroundImage="none",t.innerHTML=this.props.html):(t.style.backgroundImage="url(".concat(this.props.statusImageSrc,")"),t.style.backgroundRepeat="no-repeat",t.style.backgroundSize="contain",t.style.backgroundPosition="center",t.innerHTML="")},e}(n.ZP),U=G,F=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),K=function(){return K=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},K.apply(this,arguments)},Z=function(t){switch(t){case"analogic":case"digital":return t;default:return"analogic"}},q=function(t){switch(t){case"datetime":case"time":return t;default:return"datetime"}};function J(t){if("string"!=typeof t.clockTimezone||0===t.clockTimezone.length)throw new TypeError("invalid timezone.");return K(K(K({},(0,n.TB)(t)),{type:19,clockType:Z(t.clockType),clockFormat:q(t.clockFormat),clockTimezone:t.clockTimezone,clockTimezoneOffset:(0,e.I1)(t.clockTimezoneOffset,0),showClockTimezone:(0,e.gx)(t.showClockTimezone),color:(0,e.JW)(t.color,null)}),(0,e.bs)(t))}var Y=function(t){function n(e,r){var i=t.call(this,e,r)||this;return i.intervalRef=null,i.startTick((function(){i.childElementRef.innerHTML=i.createClock().innerHTML}),"analogic"===i.props.clockType?2e4:n.TICK_INTERVAL),i}return F(n,t),n.prototype.stopTick=function(){null!==this.intervalRef&&(window.clearInterval(this.intervalRef),this.intervalRef=null)},n.prototype.startTick=function(t,e){void 0===e&&(e=n.TICK_INTERVAL),this.stopTick(),this.intervalRef=window.setInterval(t,e)},n.prototype.createDomElement=function(){return this.createClock()},n.prototype.updateDomElement=function(e){var n=this.getElementSize(this.props.width,this.props.height),r=n.width,i=n.height;"digital"===this.props.clockType?(!1===this.meta.isBeingResized&&t.prototype.resizeElement.call(this,this.props.width,this.props.height),e.classList.replace("analogic-clock","digital-clock")):(!1===this.meta.isBeingResized&&t.prototype.resizeElement.call(this,r,i),e.classList.replace("digital-clock","analogic-clock")),e.innerHTML=this.createDomElement().innerHTML},n.prototype.remove=function(){this.stopTick(),t.prototype.remove.call(this)},n.prototype.resizeElement=function(e,n){var r=this.getElementSize(e,n),i=r.width,o=r.height;"digital"===this.props.clockType?t.prototype.resizeElement.call(this,e,n):t.prototype.resizeElement.call(this,i,o)},n.prototype.createClock=function(){switch(this.props.clockType){case"analogic":return this.createAnalogicClock();case"digital":return this.createDigitalClock();default:throw new Error("invalid clock type.")}},n.prototype.createAnalogicClock=function(){var t="http://www.w3.org/2000/svg",n="#FFFFF0",r="#242124",i="#242124",o="#525252",s="#DC143C",a=this.getElementSize(),l=a.width,c=a.height,p=10*l/100,u=document.createElement("div");u.className="analogic-clock",u.style.width="".concat(l,"px"),u.style.height="".concat(c,"px");var d=document.createElementNS(t,"svg");d.setAttribute("viewBox","0 0 100 100");var h=document.createElementNS(t,"g");h.setAttribute("class","clockface");var m=document.createElementNS(t,"circle");m.setAttribute("cx","50"),m.setAttribute("cy","50"),m.setAttribute("r","48"),m.setAttribute("fill",n),m.setAttribute("stroke","#242124"),m.setAttribute("stroke-width","2"),m.setAttribute("stroke-linecap","round"),h.append(m);var f=this.getHumanTimezone();if(f.length>0){var _=document.createElementNS(t,"text");_.setAttribute("text-anchor","middle"),_.setAttribute("font-size","8"),_.setAttribute("transform","translate(30 50) rotate(90)"),_.setAttribute("fill",r),_.textContent=f,h.append(_)}var y=document.createElementNS(t,"g");y.setAttribute("class","marks");var v=document.createElementNS(t,"g");v.setAttribute("class","mark"),v.setAttribute("transform","translate(50 50)");var g=document.createElementNS(t,"line");g.setAttribute("x1","36"),g.setAttribute("y1","0"),g.setAttribute("x2","46"),g.setAttribute("y2","0"),g.setAttribute("stroke",r),g.setAttribute("stroke-width","5");var b=document.createElementNS(t,"line");b.setAttribute("x1","36"),b.setAttribute("y1","0"),b.setAttribute("x2","46"),b.setAttribute("y2","0"),b.setAttribute("stroke",n),b.setAttribute("stroke-width","1"),v.append(g,b),y.append(v);for(var E=1;E<60;E++){var w=document.createElementNS(t,"line");w.setAttribute("y1","0"),w.setAttribute("y2","0"),w.setAttribute("stroke",r),w.setAttribute("transform","translate(50 50) rotate(".concat(6*E,")")),E%5==0?(w.setAttribute("x1","38"),w.setAttribute("x2","46"),w.setAttribute("stroke-width",E%15==0?"2":"1")):(w.setAttribute("x1","42"),w.setAttribute("x2","46"),w.setAttribute("stroke-width","0.5")),y.append(w)}var M=document.createElementNS(t,"g");M.setAttribute("class","hour-hand"),M.setAttribute("transform","translate(50 50)");var x=document.createElementNS(t,"line");x.setAttribute("class","hour-hand-a"),x.setAttribute("x1","0"),x.setAttribute("y1","0"),x.setAttribute("x2","30"),x.setAttribute("y2","0"),x.setAttribute("stroke",o),x.setAttribute("stroke-width","4"),x.setAttribute("stroke-linecap","round");var C=document.createElementNS(t,"line");C.setAttribute("class","hour-hand-b"),C.setAttribute("x1","0"),C.setAttribute("y1","0"),C.setAttribute("x2","29.9"),C.setAttribute("y2","0"),C.setAttribute("stroke",i),C.setAttribute("stroke-width","3.1"),C.setAttribute("stroke-linecap","round"),M.append(x,C);var k=document.createElementNS(t,"g");k.setAttribute("class","minute-hand"),k.setAttribute("transform","translate(50 50)");var P=document.createElementNS(t,"line");P.setAttribute("class","minute-hand-a"),P.setAttribute("x1","0"),P.setAttribute("y1","0"),P.setAttribute("x2","40"),P.setAttribute("y2","0"),P.setAttribute("stroke",o),P.setAttribute("stroke-width","2"),P.setAttribute("stroke-linecap","round");var I=document.createElementNS(t,"line");I.setAttribute("class","minute-hand-b"),I.setAttribute("x1","0"),I.setAttribute("y1","0"),I.setAttribute("x2","39.9"),I.setAttribute("y2","0"),I.setAttribute("stroke",i),I.setAttribute("stroke-width","1.5"),I.setAttribute("stroke-linecap","round");var A=document.createElementNS(t,"circle");A.setAttribute("r","3"),A.setAttribute("fill",i),k.append(P,I,A);var O=document.createElementNS(t,"g");O.setAttribute("class","second-hand"),O.setAttribute("transform","translate(50 50)");var T=document.createElementNS(t,"line");T.setAttribute("x1","0"),T.setAttribute("y1","0"),T.setAttribute("x2","46"),T.setAttribute("y2","0"),T.setAttribute("stroke",s),T.setAttribute("stroke-width","1"),T.setAttribute("stroke-linecap","round");var S=document.createElementNS(t,"circle");S.setAttribute("r","2"),S.setAttribute("fill",s),O.append(T,S);var L=document.createElementNS(t,"circle");L.setAttribute("cx","50"),L.setAttribute("cy","50"),L.setAttribute("r","0.3"),L.setAttribute("fill",i);var D=this.getOriginDate(),R=D.getSeconds(),N=D.getMinutes(),B=6*R,z=6*N+R/60*6,W=30*D.getHours()+N/60*30;if(M.setAttribute("transform","translate(50 50) rotate(".concat(W,")")),k.setAttribute("transform","translate(50 50) rotate(".concat(z,")")),O.setAttribute("transform","translate(50 50) rotate(".concat(B,")")),d.append(h,y,M,k,O,L),d.setAttribute("transform","rotate(-90)"),u.innerHTML="\n <style>\n @keyframes rotate-hour {\n from {\n ".concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(W,"deg)")).join("\n"),"\n }\n to {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(W+360,"deg)")).join("\n"),"\n }\n }\n @keyframes rotate-minute {\n from {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(z,"deg)")).join("\n"),"\n }\n to {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(z+360,"deg)")).join("\n"),"\n }\n }\n @keyframes rotate-second {\n from {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(B,"deg)")).join("\n"),"\n }\n to {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(B+360,"deg)")).join("\n"),"\n }\n }\n </style>\n "),u.append(d),"datetime"===this.props.clockFormat){var j=document.createElement("span");j.className="date",j.textContent=(0,e.rN)(D,"default"),j.style.fontSize="".concat(p,"px"),this.props.color&&(j.style.color=this.props.color),u.append(j)}return u},n.prototype.createDigitalClock=function(){var t=document.createElement("div");t.className="digital-clock";var n=this.getElementSize(),r=n.width,i=n.height,o=r;i<r&&(o=i);var s=6/this.props.clockTimezone.length,a=35*o/100,l=17.5*o/100,c=Math.min(35*s*o/100,r/100*10),p=this.getOriginDate();if("datetime"===this.props.clockFormat){var u=document.createElement("span");u.className="date",u.textContent=(0,e.rN)(p,"default"),u.style.fontSize="".concat(l,"px"),this.props.color&&(u.style.color=this.props.color),t.append(u)}var d=document.createElement("span");d.className="time",d.textContent=(0,e.bc)(p),d.style.fontSize="".concat(a,"px"),this.props.color&&(d.style.color=this.props.color),t.append(d);var h=this.getHumanTimezone();if(h.length>0){var m=document.createElement("span");m.className="timezone",m.textContent=h,m.style.fontSize="".concat(c,"px"),this.props.color&&(m.style.color=this.props.color),t.append(m)}return t},n.prototype.getOriginDate=function(t){void 0===t&&(t=null);var e=t||new Date,n=1e3*this.props.clockTimezoneOffset,r=60*e.getTimezoneOffset()*1e3,i=e.getTime()+n+r;return new Date(i)},n.prototype.getHumanTimezone=function(t){void 0===t&&(t=this.props.clockTimezone);var e=t.split("/")[1];return(void 0===e?"":e).replace("_"," ")},n.prototype.getElementSize=function(t,e){switch(void 0===t&&(t=this.props.width),void 0===e&&(e=this.props.height),this.props.clockType){case"analogic":var n=100;t>0&&e>0?n=Math.min(t,e):t>0?n=t:e>0&&(n=e);var r=0;return"datetime"===this.props.clockFormat&&(r=e/8),{width:n,height:n+r};case"digital":return t>0&&e>0?e=t/2<e?t/2:e:t>0?e=t/2:e>0?t=2*e:(t=100,e=50),{width:t,height:e};default:throw new Error("invalid clock type.")}},n.TICK_INTERVAL=1e3,n}(n.ZP),X=Y,Q=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),$=function(){return $=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},$.apply(this,arguments)};function tt(t){return $($({},(0,n.TB)(t)),{type:12,label:null,isLinkEnabled:!1,parentId:null,aclGroupId:null,borderWidth:(0,e.I1)(t.borderWidth,0),borderColor:(0,e.JW)(t.borderColor,null),fillColor:(0,e.JW)(t.fillColor,null),fillTransparent:t.fillTransparent})}var et=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Q(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");if(t.className="box",t.style.boxSizing="border-box",this.props.fillTransparent?t.style.backgroundColor="transparent":this.props.fillColor&&(t.style.backgroundColor=this.props.fillColor),this.props.borderWidth>0){t.style.borderStyle="solid";var e=Math.min(this.props.width,this.props.height)/2,n=Math.min(this.props.borderWidth,e);t.style.borderWidth="".concat(n,"px"),this.props.borderColor&&(t.style.borderColor=this.props.borderColor)}return t},e.prototype.updateDomElement=function(t){if(this.props.fillTransparent?t.style.backgroundColor="transparent":this.props.fillColor&&(t.style.backgroundColor=this.props.fillColor),this.props.borderWidth>0){t.style.borderStyle="solid";var e=Math.min(this.props.width,this.props.height)/2,n=Math.min(this.props.borderWidth,e);t.style.borderWidth="".concat(n,"px"),this.props.borderColor&&(t.style.borderColor=this.props.borderColor)}},e}(n.ZP),nt=et,rt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),it=function(){return it=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},it.apply(this,arguments)};function ot(t){return it(it(it({},(0,n.TB)(t)),{type:4}),(0,e.bs)(t))}var st=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return rt(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="label",t.innerHTML=this.getLabelWithMacrosReplaced(),t},e.prototype.createLabelDomElement=function(){var t=document.createElement("div");return t.className="visual-console-item-label",t},e}(n.ZP),at=st,lt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ct=function(){return ct=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},ct.apply(this,arguments)},pt=function(t){switch(t){case"string":case"image":return t;default:return"string"}};function ut(t){if("string"!=typeof t.value||0===t.value.length)throw new TypeError("invalid value");var r=function(t){switch(t){case"none":case"avg":case"max":case"min":return t;default:return"none"}}(t.processValue);return ct(ct(ct(ct(ct({},(0,n.TB)(t)),{type:2,valueType:pt(t.valueType),value:t.value}),"none"===r?{processValue:r}:{processValue:r,period:(0,e.I1)(t.period,0)}),(0,e.MH)(t)),(0,e.bs)(t))}var dt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return lt(n,t),n.prototype.createDomElement=function(){var t=document.createElement("div");if(t.className="simple-value",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(t.style.opacity="0.2"),"image"===this.props.valueType){var n=document.createElement("img");n.src=this.props.value,t.append(n)}else{var r=this.props.value,i=this.getLabelWithMacrosReplaced();i.length>0&&(r=(0,e.No)([{macro:/\(?_VALUE_\)?/i,value:r}],i)),t.innerHTML=r}return t},n.prototype.createLabelDomElement=function(){var t=document.createElement("div");return t.className="visual-console-item-label",t},n}(n.ZP),ht=dt,mt=__webpack_require__(280),ft=Math.PI,_t=2*ft,yt=1e-6,vt=_t-yt;function gt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function bt(){return new gt}gt.prototype=bt.prototype={constructor:gt,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,o){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(t,e,n,r,i){t=+t,e=+e,n=+n,r=+r,i=+i;var o=this._x1,s=this._y1,a=n-t,l=r-e,c=o-t,p=s-e,u=c*c+p*p;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(u>yt)if(Math.abs(p*a-l*c)>yt&&i){var d=n-o,h=r-s,m=a*a+l*l,f=d*d+h*h,_=Math.sqrt(m),y=Math.sqrt(u),v=i*Math.tan((ft-Math.acos((m+u-f)/(2*_*y)))/2),g=v/y,b=v/_;Math.abs(g-1)>yt&&(this._+="L"+(t+g*c)+","+(e+g*p)),this._+="A"+i+","+i+",0,0,"+ +(p*d>c*h)+","+(this._x1=t+b*a)+","+(this._y1=e+b*l)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,o){t=+t,e=+e,o=!!o;var s=(n=+n)*Math.cos(r),a=n*Math.sin(r),l=t+s,c=e+a,p=1^o,u=o?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+l+","+c:(Math.abs(this._x1-l)>yt||Math.abs(this._y1-c)>yt)&&(this._+="L"+l+","+c),n&&(u<0&&(u=u%_t+_t),u>vt?this._+="A"+n+","+n+",0,1,"+p+","+(t-s)+","+(e-a)+"A"+n+","+n+",0,1,"+p+","+(this._x1=l)+","+(this._y1=c):u>yt&&(this._+="A"+n+","+n+",0,"+ +(u>=ft)+","+p+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Et=bt;function wt(t){return function(){return t}}var Mt=Math.abs,xt=Math.atan2,Ct=Math.cos,kt=Math.max,Pt=Math.min,It=Math.sin,At=Math.sqrt,Ot=1e-12,Tt=Math.PI,St=Tt/2,Lt=2*Tt;function Dt(t){return t>1?0:t<-1?Tt:Math.acos(t)}function Rt(t){return t>=1?St:t<=-1?-St:Math.asin(t)}function Nt(t){return t.innerRadius}function Bt(t){return t.outerRadius}function zt(t){return t.startAngle}function Wt(t){return t.endAngle}function jt(t){return t&&t.padAngle}function Ht(t,e,n,r,i,o,s,a){var l=n-t,c=r-e,p=s-i,u=a-o,d=u*l-p*c;if(!(d*d<Ot))return[t+(d=(p*(e-o)-u*(t-i))/d)*l,e+d*c]}function Vt(t,e,n,r,i,o,s){var a=t-n,l=e-r,c=(s?o:-o)/At(a*a+l*l),p=c*l,u=-c*a,d=t+p,h=e+u,m=n+p,f=r+u,_=(d+m)/2,y=(h+f)/2,v=m-d,g=f-h,b=v*v+g*g,E=i-o,w=d*f-m*h,M=(g<0?-1:1)*At(kt(0,E*E*b-w*w)),x=(w*g-v*M)/b,C=(-w*v-g*M)/b,k=(w*g+v*M)/b,P=(-w*v+g*M)/b,I=x-_,A=C-y,O=k-_,T=P-y;return I*I+A*A>O*O+T*T&&(x=k,C=P),{cx:x,cy:C,x01:-p,y01:-u,x11:x*(i/E-1),y11:C*(i/E-1)}}var Gt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Ut=function(){return Ut=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},Ut.apply(this,arguments)};function Ft(t){switch(t){case"progress-bar":case"bubble":case"circular-progress-bar":case"circular-progress-bar-alt":return t;default:case 3:return"progress-bar";case 9:return"bubble";case 15:return"circular-progress-bar";case 16:return"circular-progress-bar-alt"}}function Kt(t){switch(t){case"percent":case"value":return t;default:return"percent"}}function Zt(t){return Ut(Ut(Ut(Ut({},(0,n.TB)(t)),{type:3,percentileType:Ft(t.percentileType||t.type),valueType:Kt(t.valueType),minValue:(0,e.I1)(t.minValue,null),maxValue:(0,e.I1)(t.maxValue,null),color:(0,e.JW)(t.color,null),labelColor:(0,e.JW)(t.labelColor,null),value:(0,e.xn)(t.value,null),unit:(0,e.JW)(t.unit,null)}),(0,e.MH)(t)),(0,e.bs)(t))}var qt="http://www.w3.org/2000/svg",Jt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Gt(e,t),e.prototype.createDomElement=function(){var t,e={background:"#000000",progress:this.props.color||"#000000",text:this.props.labelColor||"#bcbcbc"},n=this.getProgress(),r=document.createElement("div");null!=this.props.value&&(t=Intl?Intl.NumberFormat("en-EN").format(this.props.value):this.props.value);var i=document.createElementNS(qt,"svg");switch(this.props.percentileType){case"progress-bar":var o=document.createElementNS(qt,"rect");o.setAttribute("fill",e.background),o.setAttribute("fill-opacity","0.5"),o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.setAttribute("rx","5"),o.setAttribute("ry","5");var s=document.createElementNS(qt,"rect");s.setAttribute("fill",e.progress),s.setAttribute("fill-opacity","1"),s.setAttribute("width","".concat(n,"%")),s.setAttribute("height","100%"),s.setAttribute("rx","5"),s.setAttribute("ry","5"),(u=document.createElementNS(qt,"text")).setAttribute("text-anchor","middle"),u.setAttribute("alignment-baseline","middle"),u.setAttribute("font-size","15"),u.setAttribute("font-family","lato"),u.setAttribute("font-weight","bold"),u.setAttribute("text-anchor","middle"),u.setAttribute("alignment-baseline","middle"),u.setAttribute("x","50%"),u.setAttribute("y","50%"),u.setAttribute("fill",e.text),"value"===this.props.valueType?(u.style.fontSize="6pt",u.textContent=this.props.unit?"".concat(t," ").concat(this.props.unit):"".concat(t)):u.textContent="".concat(n,"%"),i.setAttribute("width","100%"),i.setAttribute("height","100%"),i.append(o,s,u);break;case"bubble":case"circular-progress-bar":case"circular-progress-bar-alt":if(i.setAttribute("viewBox","0 0 100 100"),"bubble"===this.props.percentileType)(a=document.createElementNS(qt,"circle")).setAttribute("transform","translate(50 50)"),a.setAttribute("fill",e.background),a.setAttribute("fill-opacity","0.5"),a.setAttribute("r","50"),(l=document.createElementNS(qt,"circle")).setAttribute("transform","translate(50 50)"),l.setAttribute("fill",e.progress),l.setAttribute("fill-opacity","1"),l.setAttribute("r","".concat(n/2)),i.append(a,l);else{var a,l,c={innerRadius:"circular-progress-bar"===this.props.percentileType?30:0,outerRadius:50,startAngle:0,endAngle:2*Math.PI},p=function(){var t=Nt,e=Bt,n=wt(0),r=null,i=zt,o=Wt,s=jt,a=null;function l(){var l,c,p=+t.apply(this,arguments),u=+e.apply(this,arguments),d=i.apply(this,arguments)-St,h=o.apply(this,arguments)-St,m=Mt(h-d),f=h>d;if(a||(a=l=Et()),u<p&&(c=u,u=p,p=c),u>Ot)if(m>Lt-Ot)a.moveTo(u*Ct(d),u*It(d)),a.arc(0,0,u,d,h,!f),p>Ot&&(a.moveTo(p*Ct(h),p*It(h)),a.arc(0,0,p,h,d,f));else{var _,y,v=d,g=h,b=d,E=h,w=m,M=m,x=s.apply(this,arguments)/2,C=x>Ot&&(r?+r.apply(this,arguments):At(p*p+u*u)),k=Pt(Mt(u-p)/2,+n.apply(this,arguments)),P=k,I=k;if(C>Ot){var A=Rt(C/p*It(x)),O=Rt(C/u*It(x));(w-=2*A)>Ot?(b+=A*=f?1:-1,E-=A):(w=0,b=E=(d+h)/2),(M-=2*O)>Ot?(v+=O*=f?1:-1,g-=O):(M=0,v=g=(d+h)/2)}var T=u*Ct(v),S=u*It(v),L=p*Ct(E),D=p*It(E);if(k>Ot){var R,N=u*Ct(g),B=u*It(g),z=p*Ct(b),W=p*It(b);if(m<Tt&&(R=Ht(T,S,z,W,N,B,L,D))){var j=T-R[0],H=S-R[1],V=N-R[0],G=B-R[1],U=1/It(Dt((j*V+H*G)/(At(j*j+H*H)*At(V*V+G*G)))/2),F=At(R[0]*R[0]+R[1]*R[1]);P=Pt(k,(p-F)/(U-1)),I=Pt(k,(u-F)/(U+1))}}M>Ot?I>Ot?(_=Vt(z,W,T,S,u,I,f),y=Vt(N,B,L,D,u,I,f),a.moveTo(_.cx+_.x01,_.cy+_.y01),I<k?a.arc(_.cx,_.cy,I,xt(_.y01,_.x01),xt(y.y01,y.x01),!f):(a.arc(_.cx,_.cy,I,xt(_.y01,_.x01),xt(_.y11,_.x11),!f),a.arc(0,0,u,xt(_.cy+_.y11,_.cx+_.x11),xt(y.cy+y.y11,y.cx+y.x11),!f),a.arc(y.cx,y.cy,I,xt(y.y11,y.x11),xt(y.y01,y.x01),!f))):(a.moveTo(T,S),a.arc(0,0,u,v,g,!f)):a.moveTo(T,S),p>Ot&&w>Ot?P>Ot?(_=Vt(L,D,N,B,p,-P,f),y=Vt(T,S,z,W,p,-P,f),a.lineTo(_.cx+_.x01,_.cy+_.y01),P<k?a.arc(_.cx,_.cy,P,xt(_.y01,_.x01),xt(y.y01,y.x01),!f):(a.arc(_.cx,_.cy,P,xt(_.y01,_.x01),xt(_.y11,_.x11),!f),a.arc(0,0,p,xt(_.cy+_.y11,_.cx+_.x11),xt(y.cy+y.y11,y.cx+y.x11),f),a.arc(y.cx,y.cy,P,xt(y.y11,y.x11),xt(y.y01,y.x01),!f))):a.arc(0,0,p,E,b,f):a.lineTo(L,D)}else a.moveTo(0,0);if(a.closePath(),l)return a=null,l+""||null}return l.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +o.apply(this,arguments))/2-Tt/2;return[Ct(r)*n,It(r)*n]},l.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:wt(+e),l):t},l.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:wt(+t),l):e},l.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:wt(+t),l):n},l.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:wt(+t),l):r},l.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:wt(+t),l):i},l.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:wt(+t),l):o},l.padAngle=function(t){return arguments.length?(s="function"==typeof t?t:wt(+t),l):s},l.context=function(t){return arguments.length?(a=null==t?null:t,l):a},l}();(a=document.createElementNS(qt,"path")).setAttribute("transform","translate(50 50)"),a.setAttribute("fill",e.background),a.setAttribute("fill-opacity","0.5"),a.setAttribute("d","".concat(p(c))),(l=document.createElementNS(qt,"path")).setAttribute("transform","translate(50 50)"),l.setAttribute("fill",e.progress),l.setAttribute("fill-opacity","1"),l.setAttribute("d","".concat(p(Ut(Ut({},c),{endAngle:c.endAngle*(n/100)})))),i.append(a,l)}var u;if((u=document.createElementNS(qt,"text")).setAttribute("text-anchor","middle"),u.setAttribute("alignment-baseline","middle"),u.setAttribute("font-size","16"),u.setAttribute("font-family","lato"),u.setAttribute("font-weight","bold"),u.setAttribute("fill",e.text),"value"===this.props.valueType&&null!=this.props.value)if(this.props.unit&&this.props.unit.length>0){var d=document.createElementNS(qt,"tspan");d.setAttribute("x","0"),d.setAttribute("dy","1em"),d.textContent="".concat(t),d.style.fontSize="8pt";var h=document.createElementNS(qt,"tspan");h.setAttribute("x","0"),h.setAttribute("dy","1em"),h.textContent="".concat(this.props.unit),h.style.fontSize="8pt",u.append(d,h),u.setAttribute("transform","translate(50 33)")}else u.textContent="".concat(t),u.style.fontSize="8pt",u.setAttribute("transform","translate(50 50)");else u.textContent="".concat(n,"%"),u.setAttribute("transform","translate(50 50)");i.append(u)}return!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||i.setAttribute("opacity","0.2"),null!==i&&r.append(i),r},e.prototype.updateDomElement=function(t){!1===this.meta.isBeingResized&&this.resizeElement(this.props.width,this.props.height),t.innerHTML=this.createDomElement().innerHTML},e.prototype.resizeElement=function(e,n){"progress-bar"===this.props.percentileType?t.prototype.resizeElement.call(this,e,35):t.prototype.resizeElement.call(this,e,e)},e.prototype.resize=function(e){this.resizeElement(e,e);var n=this.props.maxValue||0;"progress-bar"===this.props.percentileType&&(n=35),t.prototype.setProps.call(this,Ut(Ut({},this.props),{width:e,height:n}))},e.prototype.getProgress=function(){var t=this.props.minValue||0,e=this.props.maxValue||100,n=null==this.props.value?0:this.props.value;return n<=t?0:n>=e?100:Math.trunc((n-t)/(e-t)*100)},e}(n.ZP),Yt=Jt,Xt=__webpack_require__(369),Qt=__webpack_require__(709),$t=__webpack_require__(600),te=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ee=function(){return ee=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},ee.apply(this,arguments)};function ne(t){if(null!==t.imageSrc){if("string"!=typeof t.statusImageSrc||0===t.imageSrc.statusImageSrc)throw new TypeError("invalid status image src.")}else if((0,e.VJ)(t.encodedTitle))throw new TypeError("missing encode tittle content.");if(null===(0,e.I1)(t.serviceId,null))throw new TypeError("invalid service id.");return ee(ee({},(0,n.TB)(t)),{type:10,serviceId:t.serviceId,imageSrc:(0,e.JW)(t.imageSrc,null),statusImageSrc:(0,e.JW)(t.statusImageSrc,null),encodedTitle:(0,e.JW)(t.encodedTitle,null)})}var re=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return te(n,t),n.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="service",null!==this.props.statusImageSrc?(t.style.background="url(".concat(this.props.statusImageSrc,") no-repeat"),t.style.backgroundSize="contain",t.style.backgroundPosition="center",null!==this.props.encodedTitle&&(t.className="service image forced_title",t.setAttribute("data-use_title_for_force_title","1"),t.setAttribute("data-title",(0,e.NV)(this.props.encodedTitle)))):null!==this.props.encodedTitle&&(t.innerHTML=(0,e.NV)(this.props.encodedTitle)),t},n.prototype.updateDomElement=function(t){null!==this.props.statusImageSrc?(t.style.background="url(".concat(this.props.statusImageSrc,") no-repeat"),t.style.backgroundSize="contain",t.style.backgroundPosition="center",null!==this.props.encodedTitle&&(t.className="service image forced_title",t.setAttribute("data-use_title_for_force_title","1"),t.setAttribute("data-title",(0,e.NV)(this.props.encodedTitle))),t.innerHTML=""):null!==this.props.encodedTitle&&(t.innerHTML=(0,e.NV)(this.props.encodedTitle))},n}(n.ZP),ie=re,oe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),se=function(){return se=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},se.apply(this,arguments)};function ae(t){return se(se(se({},(0,n.TB)(t)),{type:22,value:(0,e.I1)(t.value,0),status:(0,e.VJ)(t.status)?"#B2B2B2":t.status,titleColor:(0,e.VJ)(t.titleColor)?"#3f3f3f":t.titleColor,title:(0,e.VJ)(t.title)?"":t.title,titleModule:(0,e.VJ)(t.titleModule)?"":t.titleModule,thresholds:(0,e.VJ)(t.thresholds)?"":t.thresholds,minMaxValue:(0,e.VJ)(t.minMaxValue)?"":t.minMaxValue,odometerType:(0,e.VJ)(t.odometerType)?"percent":t.odometerType}),(0,e.MH)(t))}var le,ce=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return oe(e,t),e.prototype.createDomElement=function(){var t="",e="",n="",r="";if(""!==this.props.thresholds){var i=JSON.parse(this.props.thresholds);null!==i&&(0==i.min_warning&&0==i.max_warning||(t=this.getCoords(i.min_warning,this.props.width/2),e=0==i.max_warning?this.getCoords(100,this.props.width/2):this.getCoords(i.max_warning,this.props.width/2)),0==i.min_critical&&0==i.max_critical||(n=this.getCoords(i.min_critical,this.props.width/2),r=0==i.max_critical?this.getCoords(100,this.props.width/2):this.getCoords(i.max_critical,this.props.width/2)))}var o,s="";Number(this.props.value)===this.props.value&&this.props.value%1!=0?o=this.props.value.toFixed(1):(s=""===this.props.minMaxValue?" %":this.getSubfix(this.props.value),o=new Intl.NumberFormat("es",{maximumSignificantDigits:4,maximumFractionDigits:3}).format(this.props.value));var a=o.match(/\d*\.\d/);null!==a&&(o=a[0]);var l=this.getRotate(this.props.value),c=document.getElementById("visual-console-container");null===c&&(c=document.getElementById("visual-console-container-".concat(this.props.cellId))),""==c.style.backgroundColor&&(c.style.backgroundColor="#fff");var p=.7*this.props.width,u=document.createElement("div");u.className="odometer",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(u.style.opacity="0.2");var d=document.createElement("div");d.className="odometer-container";var h=document.createElement("div");h.className="odometer-a",h.style.backgroundColor="".concat(c.style.backgroundColor);var m=document.createElement("div");m.className="odometer-b",m.id="odometerB-".concat(this.props.id),m.style.backgroundColor="".concat(this.props.status);var f=document.createElement("div");f.className="odometer-c";var _=document.createElement("div");_.className="odometer-d";var y="http://www.w3.org/2000/svg";if(""!=t){var v=document.createElementNS(y,"svg");v.setAttributeNS(null,"width","100%"),v.setAttributeNS(null,"height","100%"),v.setAttributeNS(null,"style","position:absolute;z-index:1");var g=document.createElementNS(y,"path");g.setAttributeNS(null,"id","svgWarning-".concat(this.props.id)),g.setAttributeNS(null,"d","M".concat(this.props.width/2,",").concat(this.props.width/2,"L").concat(t,"A").concat(this.props.width/2,",").concat(this.props.width/2,",0,0,1,").concat(e,"Z")),g.setAttributeNS(null,"class","svg_warning"),v.appendChild(g),d.appendChild(v)}if(""!=n){var b=document.createElementNS(y,"svg");b.setAttributeNS(null,"width","100%"),b.setAttributeNS(null,"height","100%"),b.setAttributeNS(null,"style","position:absolute;z-index:2");var E=document.createElementNS(y,"path");E.setAttributeNS(null,"id","svgCritical-".concat(this.props.id)),E.setAttributeNS(null,"d","M".concat(this.props.width/2,",").concat(this.props.width/2,"L").concat(n,"A").concat(this.props.width/2,",").concat(this.props.width/2,",0,0,1,").concat(r,"Z")),E.setAttributeNS(null,"fill","#E63C52"),b.appendChild(E),d.appendChild(b)}var w=document.createElement("h1");w.innerText=o+s,w.style.fontSize="".concat(.17*p,"px"),w.style.color="".concat(this.props.status),w.style.lineHeight="0";var M=document.createElement("h2");""==this.props.title?M.textContent=this.truncateTitle(this.props.moduleName):M.textContent=this.truncateTitle(this.props.title),M.title=this.props.titleModule,M.setAttribute("title",this.props.titleModule),M.style.fontSize="".concat(.06*p,"px"),M.style.color="".concat(this.props.titleColor),M.style.lineHeight="0";var x=document.createElement("script");x.type="text/javascript",x.onload=function(){m.style.transform="rotate(".concat(l,"turn)")};var C=window.location.pathname.split("/")[1];return x.src="".concat(document.dir,"/").concat(C,"/include/javascript/pandora_alerts.js"),h.appendChild(w),h.appendChild(M),d.appendChild(m),d.appendChild(f),d.appendChild(_),d.appendChild(h),d.appendChild(x),u.appendChild(d),u},e.prototype.updateDomElement=function(t){var e=this;t.innerHTML=this.createDomElement().innerHTML;var n=this.getRotate(this.props.value),r=document.getElementById("svgWarning-".concat(this.props.id));null!=r&&(r.style.display="none");var i=document.getElementById("svgCritical-".concat(this.props.id));null!=i&&(i.style.display="none"),setTimeout((function(){null!=r&&(r.style.display="block"),null!=i&&(i.style.display="block");var t=document.getElementById("odometerB-".concat(e.props.id));t&&(t.style.transform="rotate(".concat(n,"turn)"))}),500)},e.prototype.resizeElement=function(e){t.prototype.resizeElement.call(this,e,e/2)},e.prototype.resize=function(t){this.resizeElement(this.props.width)},e.prototype.getRotate=function(t){var e=0;if(""===this.props.minMaxValue)e=t/2/100;else{var n=JSON.parse(this.props.minMaxValue);if(n.min===t)e=0;else if(n.max===t)e=.5;else{var r=n.max-n.min;e=(100-100*(n.max-t)/r)/100/2}}return e},e.prototype.getSubfix=function(t){var e="",n=(t+"").length;return n>3&&n<=6?e=" K":n>6&&n<=9?e=" M":n>9&&n<=12?e=" G":n>12&&n<=15&&(e=" T"),e},e.prototype.getCoords=function(t,e){if(""!==this.props.minMaxValue){var n=JSON.parse(this.props.minMaxValue);if(n.min===t)t=0;else if(n.max===t||100===t)t=100;else{var r=n.max-n.min;t=100-100*(n.max-t)/r}}t=180-1.8*t;var i=e+Math.cos(t*Math.PI/180)*e,o=e-Math.sin(t*Math.PI/180)*e;return"".concat(i,",").concat(o)},e.prototype.truncateTitle=function(t){if(null!=t&&t.length>22){var e=t.length/2,n=e-9,r=t.substr(0,e-n),i=t.substr(e+n);return"".concat(r,"...").concat(i)}return t},e}(n.ZP),pe=ce,ue=__webpack_require__(880),de=function(){return de=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},de.apply(this,arguments)};function he(t){var n=(0,e.I1)(t.type,null);if(null==n)throw new TypeError("missing item type.");switch(n){case 0:return s(t);case 1:return(0,$t.C)(t);case 2:case 6:case 7:case 8:return ut(t);case 3:case 9:case 15:case 16:return Zt(t);case 4:return ot(t);case 5:return u(t);case 10:return ne(t);case 11:return V(t);case 12:return tt(t);case 13:return O(t);case 14:return(0,mt.o)(t);case 17:return(0,Xt.p)(t);case 18:return(0,Qt.K)(t);case 19:return J(t);case 20:return E(t);case 21:return B(t);case 22:return ae(t);case 23:return(0,ue.u)(t);default:throw new TypeError("decoder not found")}}var me=function(){function t(t,n,r){var i=this;this.elementsById={},this.elementIds=[],this.relations={},this.lineLinks={},this.lines={},this.clickEventManager=new P.Z,this.dblClickEventManager=new P.Z,this.movedEventManager=new P.Z,this.lineMovedEventManager=new P.Z,this.resizedEventManager=new P.Z,this.selectionChangedEventManager=new P.Z,this.disposables=[],this.handleElementClick=function(t){i.clickEventManager.emit(t)},this.handleElementDblClick=function(t){i.dblClickEventManager.emit(t)},this.handleElementMovement=function(t){var e=t.item.itemProps.type;if(13===e||21===e||void 0!==i.props.gridSelected&&!1!==i.props.gridSelected||i.elements.forEach((function(e){if(!0===e.meta.isSelected&&t.item.itemProps.id!==e.itemProps.id&&13!==e.props.type&&21!==e.props.type){var n=t.newPosition.x-t.item.props.x,r=t.newPosition.y-t.item.props.y,o=e.props.x+n,s=e.props.y+r;o>i.props.width?o=i.props.width:o<=0&&(o=0),s>i.props.height?s=i.props.height:s<=0&&(s=0),e.moveElement(o,s),e.debouncedMovementSave(o,s)}})),13!==e&&21!==e&&!0===i.props.gridSelected){var n=i.props.gridSize,r=t.newPosition.x,o=t.newPosition.y;if(r%n!=0||o%n!=0){var s=Math.floor(r/n)*n,a=Math.floor(o/n)*n;return void document.getElementById("item-selected-move").setAttribute("style","top:"+a+"px !important; left:"+s+"px !important")}}var l=t.item.props.id;i.getItemRelations(l).forEach((function(e){e.parentId===l?e.line.props=de(de({},e.line.props),{startPosition:i.getVisualCenter(t.newPosition,t.item)}):e.childId===l&&(e.line.props=de(de({},e.line.props),{endPosition:i.getVisualCenter(t.newPosition,t.item)}))})),i.updateLinesConnected(t.item.props,t.newPosition,!1)},this.handleElementMovementFinished=function(t){i.movedEventManager.emit(t),i.updateLinesConnected(t.item.props,t.newPosition,!0)},this.handleLineElementMovementFinished=function(t){i.refreshLink(t.item),i.lineMovedEventManager.emit(t)},this.handleElementResizement=function(t){13===t.item.props.type||21===t.item.props.type||void 0!==i.props.gridSelected&&!1!==i.props.gridSelected||i.elements.forEach((function(e){!0===e.meta.isSelected&&t.item.itemProps.id!==e.itemProps.id&&13!==e.props.type&&21!==e.props.type&&(e.setMeta({isUpdating:!0}),e.resizeElement(t.newSize.width,t.newSize.height),e.debouncedResizementSave(t.newSize.width,t.newSize.height))}));var e=t.item,n=e.props,r=n.id,o=i.getItemRelations(r),s={x:n.x,y:n.y},a=i.elementsById[r].meta;i.elementsById[r].meta=de(de({},a),{isUpdating:!0}),o.forEach((function(t){t.parentId===r?t.line.props=de(de({},t.line.props),{startPosition:i.getVisualCenter(s,e)}):t.childId===r&&(t.line.props=de(de({},t.line.props),{endPosition:i.getVisualCenter(s,e)}))}))},this.handleElementResizementFinished=function(t){i.resizedEventManager.emit(t)},this.handleElementRemove=function(t){i.elementIds=i.elementIds.filter((function(e){return e!==t.item.props.id})),delete i.elementsById[t.item.props.id],i.clearRelations(t.item.props.id)},this.handleElementSelectionChanged=function(t){i.elements.filter((function(t){return 1==t.meta.isSelected})).length>0?t.selected=!0:t.selected=!1,i.selectionChangedEventManager.emit(t)},this.handleContainerClick=function(){i.unSelectItems()},this.containerRef=t,this._props=function(t){var n=t.id,r=t.name,i=t.groupId,o=t.backgroundURL,s=t.backgroundColor,a=t.isFavorite,l=t.relationLineWidth,c=t.maintenanceMode,p=t.gridSize;if(t.gridSelected,null==n||isNaN(parseInt(n)))throw new TypeError("invalid Id.");if("string"!=typeof r||0===r.length)throw new TypeError("invalid name.");if(null==i||isNaN(parseInt(i)))throw new TypeError("invalid group Id.");return de({id:parseInt(n),name:r,groupId:parseInt(i),backgroundURL:(0,e.JW)(o,null),backgroundColor:(0,e.JW)(s,null),isFavorite:(0,e.gx)(a),relationLineWidth:(0,e.I1)(l,0),maintenanceMode:c,gridSize:(0,e.I1)(p,10),gridSelected:!1},(0,e.HY)(t))}(n),this.render(),(r=r.sort((function(t,e){return null==t.id||null==e.id?0:t.id>e.id?1:-1}))).forEach((function(t){return i.addElement(t,i)})),this.buildRelations(),this.elements.forEach((function(t){t instanceof L&&i.refreshLink(t)})),this.containerRef.addEventListener("click",this.handleContainerClick)}return t.prototype.coordinatesInItem=function(t,e,n){return 13!=n.type&&21!=n.type&&t>n.x&&t<n.x+n.width&&e>n.y&&e<n.y+n.height},t.prototype.refreshLink=function(t){var e=t.props.id,n=0,r=0;try{for(var i in this.elementsById)this.coordinatesInItem(t.props.startPosition.x,t.props.startPosition.y,this.elementsById[i].props)&&(n=parseInt(i)),this.coordinatesInItem(t.props.endPosition.x,t.props.endPosition.y,this.elementsById[i].props)&&(r=parseInt(i));for(var i in null==this.lineLinks&&(this.lineLinks={}),null==this.lines&&(this.lines={}),n==e&&(n=0),r==e&&(r=0),null==this.lines[e]&&(this.lines[e]={start:n,end:r}),n>0?(null==this.lineLinks[n]&&(this.lineLinks[n]={}),this.lineLinks[n][e]={start:n,end:r}):this.lines[e].start>0&&(this.lineLinks[this.lines[e].start][e].start=0,this.lines[e].start=0),r>0?(null==this.lineLinks[r]&&(this.lineLinks[r]={}),this.lineLinks[r][e]={start:n,end:r}):this.lines[e].end>0&&(this.lineLinks[this.lines[e].end][e].end=0,this.lines[e].end=0),this.lines[e]={start:n,end:r},this.lineLinks)this.lineLinks[i][e]&&(0==this.lineLinks[i][e].start&&0==this.lineLinks[i][e].end&&(delete this.lineLinks[i][e],0===Object.keys(this.lineLinks[i]).length&&delete this.lineLinks[i]),(this.lineLinks[i][e].start!=n&&this.lineLinks[i][e].end==r||this.lineLinks[i][e].start==n&&this.lineLinks[i][e].end!=r)&&(delete this.lineLinks[i][e],0===Object.keys(this.lineLinks[i]).length&&delete this.lineLinks[i]))}catch(t){console.error(t)}},t.prototype.updateLinesConnected=function(t,n,r){var i=this;null!=this.lineLinks[t.id]&&(Object.keys(this.lineLinks[t.id]).forEach((function(o){var s=parseInt(o);if(-1!==i.elementIds.indexOf(s)){var a=i.elementsById[s];if(a.props){var l=a.props.startPosition.x,c=a.props.startPosition.y,p=a.props.endPosition.x,u=a.props.endPosition.y;t.id==i.lineLinks[t.id][s].start&&(l=n.x+t.width/2,c=n.y+t.height/2),t.id==i.lineLinks[t.id][s].end&&(p=n.x+t.width/2,u=n.y+t.height/2),i.updateElement(de(de({},a.props),{startX:l,startY:c,endX:p,endY:u})),r&&(0,e.Ds)(500,(function(t){i.lineMovedEventManager.emit({item:t.line,startPosition:{x:t.startX,y:t.startY},endPosition:{x:t.endX,y:t.endY}})}))({line:a,startX:l,startY:c,endX:p,endY:u})}}})),this.buildRelations(t.id,n.x+t.width/2,n.y+t.height/2))},Object.defineProperty(t.prototype,"elements",{get:function(){var t=this;return this.elementIds.map((function(e){return t.elementsById[e]})).filter((function(t){return null!=t}))},enumerable:!1,configurable:!0}),t.prototype.addElement=function(t,n){void 0===n&&(n=this);try{null==t.ratio&&(t.ratio=1),t.x*=t.ratio,t.y*=t.ratio,13==t.type&&(t.startX*=t.ratio,t.startY*=t.ratio,t.endX*=t.ratio,t.endY*=t.ratio);var r=function(t){var n=(0,e.I1)(t.type,null);if(null==n)throw new TypeError("missing item type.");var r=(0,e.SM)(t);switch(n){case 0:return new l(s(t),r);case 1:return new $t.Z((0,$t.C)(t),r);case 2:case 6:case 7:case 8:return new ht(ut(t),r);case 3:case 9:case 15:case 16:return new Yt(Zt(t),r);case 4:return new at(ot(t),r);case 5:return new h(u(t),r);case 10:return new ie(ne(t),r);case 11:return new U(V(t),r);case 12:return new nt(tt(t),r);case 13:return new L(O(t),r);case 14:return new mt.Z((0,mt.o)(t),r);case 17:return new Xt.Z((0,Xt.p)(t),r);case 18:return new Qt.Z((0,Qt.K)(t),r);case 19:return new X(J(t),r);case 20:return new k(E(t),r);case 21:return new W(B(t),r);case 22:return new pe(ae(t),r);case 23:return new ue.Z((0,ue.u)(t),r);default:throw new TypeError("item not found")}}(t);return n.elementsById[r.props.id]=r,n.elementIds.push(r.props.id),r.onRemove(n.handleElementRemove),r.onSelectionChanged(n.handleElementSelectionChanged),r.onClick(n.handleElementClick),r.onDblClick(n.handleElementDblClick),r instanceof L?(r.onLineMovementFinished(n.handleLineElementMovementFinished),this.refreshLink(r)):(r.onMoved(n.handleElementMovement),r.onMovementFinished(n.handleElementMovementFinished),r.onResized(n.handleElementResizement),r.onResizeFinished(n.handleElementResizementFinished)),1!==t.ratio&&13!=t.type&&(r.elementRef.style.transform="scale(".concat(t.ratio?t.ratio:1,")"),r.elementRef.style.transformOrigin="left top",r.elementRef.style.minWidth="max-content",r.elementRef.style.minHeight="max-content"),n.containerRef.append(r.elementRef),r}catch(t){console.error("Error creating a new element:",t.message)}},t.prototype.updateElements=function(t){var e=this,n=t.map((function(t){return t.id||null})).filter((function(t){return null!=t}));this.elementIds.filter((function(t){return n.indexOf(t)<0})).forEach((function(t){null!=e.elementsById[t]&&(e.elementsById[t].remove(),delete e.elementsById[t])})),this.elementIds=n,t.forEach((function(t){if(t.id)if(null==e.elementsById[t.id])e.addElement(t);else try{null!=t.ratio&&(t.x*=t.ratio,t.y*=t.ratio,13==t.type&&(t.startX*=t.ratio,t.startY*=t.ratio,t.endX*=t.ratio,t.endY*=t.ratio)),e.elementsById[t.id].props=he(t)}catch(t){console.error("Error updating an element:",t.message)}})),this.buildRelations()},t.prototype.updateElement=function(t){try{this.elementsById[t.id].props=de({},he(t))}catch(t){console.error("Error updating element:",t.message)}this.buildRelations()},Object.defineProperty(t.prototype,"props",{get:function(){return de({},this._props)},set:function(t){var e=this.props;this._props=t,this.render(e)},enumerable:!1,configurable:!0}),t.prototype.render=function(t){void 0===t&&(t=null),t?(t.backgroundURL!==this.props.backgroundURL&&(this.containerRef.style.backgroundImage=null!==this.props.backgroundURL?"url(".concat(this.props.backgroundURL,")"):""),null!=this.props.backgroundColor&&t.backgroundColor!==this.props.backgroundColor&&(this.containerRef.style.backgroundColor=this.props.backgroundColor),this.sizeChanged(t,this.props)&&this.resizeElement(this.props.width,this.props.height)):(this.props.backgroundURL&&(this.containerRef.style.backgroundImage=null!==this.props.backgroundURL?"url(".concat(this.props.backgroundURL,")"):""),this.props.backgroundColor&&(this.containerRef.style.backgroundColor=this.props.backgroundColor),this.resizeElement(this.props.width,this.props.height))},t.prototype.sizeChanged=function(t,e){return t.width!==e.width||t.height!==e.height},t.prototype.resizeElement=function(t,e){this.containerRef.style.width="".concat(t,"px"),this.containerRef.style.height="".concat(e,"px")},t.prototype.resize=function(t,e){this.props=de(de({},this.props),{width:t,height:e})},t.prototype.remove=function(){this.disposables.forEach((function(t){return t.dispose()})),this.elements.forEach((function(t){return t.remove()})),this.elementsById={},this.elementIds=[],this.clearRelations(),this.containerRef.removeEventListener("click",this.handleContainerClick),this.containerRef.innerHTML=""},t.prototype.buildRelations=function(t,e,n){var r=this;this.clearRelations(),this.elements.forEach((function(i){if(null!==i.props.parentId){var o=r.elementsById[i.props.parentId],s=r.elementsById[i.props.id];o&&s&&(null!=t?i.props.parentId==t?r.addRelationLine(o,s,e,n):i.props.id==t?r.addRelationLine(o,s,void 0,void 0,e,n):r.addRelationLine(o,s):r.addRelationLine(o,s))}}))},t.prototype.clearRelations=function(t){if(null!=t)for(var e in this.relations){var n=e.split("|"),r=Number.parseInt(n[0]),i=Number.parseInt(n[1]);t!==r&&t!==i||(this.relations[e].remove(),delete this.relations[e])}else for(var e in this.relations)this.relations[e].remove(),delete this.relations[e]},t.prototype.getRelationLine=function(t,e){var n="".concat(t,"|").concat(e);return this.relations[n]||null},t.prototype.getItemRelations=function(t){var e=[];for(var n in this.relations){var r=n.split("|"),i=Number.parseInt(r[0]),o=Number.parseInt(r[1]);t!==i&&t!==o||e.push({parentId:i,childId:o,line:this.relations[n]})}return e},t.prototype.getVisualCenter=function(t,e){var n=1;null!=e.props.ratio&&(n=e.props.ratio);var r=t.x+e.elementRef.clientWidth/2*n,i=t.y+e.elementRef.clientHeight/2*n;if(void 0!==e.props.label||""!==e.props.label||null!==e.props.label)switch(e.props.labelPosition){case"up":i=t.y+(e.elementRef.clientHeight+e.labelElementRef.clientHeight)/2*n;break;case"down":i=t.y+(e.elementRef.clientHeight-e.labelElementRef.clientHeight)/2*n;break;case"right":r=t.x+(e.elementRef.clientWidth-e.labelElementRef.clientWidth)/2*n;break;case"left":r=t.x+(e.elementRef.clientWidth+e.labelElementRef.clientWidth)/2*n}return{x:r,y:i}},t.prototype.addRelationLine=function(t,n,r,i,o,s){var a="".concat(t.props.id,"|").concat(n.props.id);null!=this.relations[a]&&this.relations[a].remove();var l=this.getVisualCenter(t.props,t),c=l.x,p=l.y,u=this.getVisualCenter(n.props,n),d=u.x,h=u.y;null!=r&&(c=r),null!=i&&(p=i),null!=o&&(d=o),null!=s&&(h=s);var m=new L(O({id:0,type:13,startX:c,startY:p,endX:d,endY:h,width:0,height:0,lineWidth:this.props.relationLineWidth,color:(0,e.JW)(n.props.colorStatus,"#CCC"),ratio:t.props.ratio}),(0,e.SM)({receivedAt:new Date}));return this.relations[a]=m,m.elementRef.style.zIndex="0",this.containerRef.append(m.elementRef),m},t.prototype.onItemClick=function(t){var e=this.clickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemDblClick=function(t){var e=this.dblClickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemMoved=function(t){var e=this.movedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onLineMoved=function(t){var e=this.lineMovedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemResized=function(t){var e=this.resizedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemSelectionChanged=function(t){var e=this.selectionChangedEventManager.on(t);return this.disposables.push(e),e},t.prototype.enableEditMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{editMode:!0})})),this.containerRef.classList.add("is-editing")},t.prototype.disableEditMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{editMode:!1})})),this.containerRef.classList.remove("is-editing")},t.prototype.enableMaintenanceMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{maintenanceMode:!0})})),this.containerRef.classList.add("is-maintenance"),this.containerRef.classList.remove("is-editing")},t.prototype.disableMaintenanceMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{maintenanceMode:!1})})),this.containerRef.classList.remove("is-maintenance"),this.containerRef.classList.add("is-editing")},t.prototype.updateGridSize=function(t){this._props.gridSize=parseInt(t),this.props.gridSize=parseInt(t)},t.prototype.updateGridSelected=function(t){this._props.gridSelected=t,this.props.gridSelected=t},t.prototype.selectItem=function(t,e){var n=this;void 0===e&&(e=!1),e?this.elementIds.forEach((function(e){var r=n.elementsById[e].meta;e!==t&&r.isSelected?n.elementsById[e].unSelectItem():e!==t||r.isSelected||n.elementsById[e].selectItem()})):this.elementsById[t]&&this.elementsById[t].selectItem()},t.prototype.unSelectItem=function(t){this.elementsById[t]&&this.elementsById[t].meta.isSelected&&this.elementsById[t].unSelectItem()},t.prototype.unSelectItems=function(){var t=this;this.elementIds.forEach((function(e){t.elementsById[e]&&t.elementsById[e].unSelectItem()}))},t.itemDescriptiveName=function(t){var n;switch(t.props.type){case 0:n="".concat((0,e.t)("Static graph")," - ").concat(t.props.imageSrc);break;case 1:n=(0,e.t)("Module graph");break;case 19:n=(0,e.t)("Clock");break;case 18:n=(0,e.t)("Bars graph");break;case 14:n=(0,e.t)("Event history graph");break;case 3:n=(0,e.t)("Percentile bar");break;case 15:n=(0,e.t)("Circular progress bar");break;case 16:n=(0,e.t)("Circular progress bar (interior)");break;case 2:n=(0,e.t)("Simple Value");break;case 4:n=(0,e.t)("Label");break;case 11:n=(0,e.t)("Group");break;case 20:n=(0,e.t)("Color cloud");break;case 5:n="".concat((0,e.t)("Icon")," - ").concat(t.props.imageSrc);break;case 22:n=(0,e.t)("Odometer");break;case 23:n=(0,e.t)("BasicChart");break;default:n=(0,e.t)("Item")}var r=t.props;return null!=r.agentAlias&&null!=r.moduleName?n+=" (".concat((0,e.fk)(r.agentAlias,18)," - ").concat((0,e.fk)(r.moduleName,25),")"):null!=r.agentAlias&&(n+=" (".concat((0,e.fk)(r.agentAlias,25),")")),n},t.items=((le={})[0]=l,le[1]=$t.Z,le[2]=ht,le[6]=ht,le[7]=ht,le[8]=ht,le[3]=Yt,le[9]=Yt,le[15]=Yt,le[16]=Yt,le[4]=at,le[5]=h,le[10]=ie,le[11]=U,le[12]=nt,le[13]=L,le[14]=mt.Z,le[17]=Xt.Z,le[18]=Qt.Z,le[19]=X,le[20]=k,le[21]=W,le[22]=pe,le[23]=ue.Z,le),t}(),fe=function(){function t(t){this.cancellable={cancel:function(){}},this._status="waiting",this.statusChangeEventManager=new P.Z,this.disposables=[],this.taskInitiator=t}return Object.defineProperty(t.prototype,"status",{get:function(){return this._status},set:function(t){this._status=t,this.statusChangeEventManager.emit(t)},enumerable:!1,configurable:!0}),t.prototype.init=function(){var t=this;this.cancellable=this.taskInitiator((function(){t.status="finished"})),this.status="started"},t.prototype.cancel=function(){this.cancellable.cancel(),this.status="cancelled"},t.prototype.onStatusChange=function(t){var e=this.statusChangeEventManager.on(t);return this.disposables.push(e),e},t}(),_e=function(){function t(){this.tasks={}}return t.prototype.add=function(t,e,n){void 0===n&&(n=0),this.tasks[t]&&"started"===this.tasks[t].status&&this.tasks[t].cancel();var r=n>0?function(t,e){return new fe((function(){var n=null;return t.onStatusChange((function(r){"finished"===r&&(n=window.setTimeout((function(){t.init()}),e))})),t.init(),{cancel:function(){n&&clearTimeout(n),t.cancel()}}}))}(new fe(e),n):new fe(e);return this.tasks[t]=r,this.tasks[t]},t.prototype.init=function(t){!this.tasks[t]||"waiting"!==this.tasks[t].status&&"cancelled"!==this.tasks[t].status&&"finished"!==this.tasks[t].status||this.tasks[t].init()},t.prototype.cancel=function(t){this.tasks[t]&&"started"===this.tasks[t].status&&this.tasks[t].cancel()},t}();window.VisualConsole=me,window.VisualConsole.Form=m,window.AsyncTaskManager=_e}()})(); +(function(){"use strict";var __webpack_modules__={630:function(t,e,n){n.r(e),n.d(e,{FormContainer:function(){return a},InputGroup:function(){return s}});var r=n(510),i=function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},i.apply(this,arguments)},o=function(t,e,n){if(n||2===arguments.length)for(var r,i=0,o=e.length;i<o;i++)!r&&i in e||(r||(r=Array.prototype.slice.call(e,0,i)),r[i]=e[i]);return t.concat(r||Array.prototype.slice.call(e))},s=function(){function t(t,e){this._name="",this.currentData={},this.dataRequestedEventManager=new r.Z,this.name=t,this.initialData=e}return Object.defineProperty(t.prototype,"name",{get:function(){return this._name},set:function(t){if(0===t.length)throw new RangeError("empty name");this._name=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"data",{get:function(){return i({},this.currentData)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){if(null==this._element){var t=document.createElement("div");t.className="input-group input-group-".concat(this.name);var e=this.createContent();e instanceof Array?e.forEach(t.appendChild):t.appendChild(e),this._element=t}return this._element},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this.currentData={}},t.prototype.updateData=function(t){this.currentData=i(i({},this.currentData),t)},t.prototype.requestData=function(t,e,n){this.dataRequestedEventManager.emit({identifier:t,params:e,done:n})},t.prototype.onDataRequested=function(t){return this.dataRequestedEventManager.on(t)},t}(),a=function(){function t(t,e,n){void 0===e&&(e=[]),void 0===n&&(n=[]);var i=this;this.inputGroupsByName={},this.enabledInputGroupNames=[],this.submitEventManager=new r.Z,this.itemDataRequestedEventManager=new r.Z,this.handleItemDataRequested=this.itemDataRequestedEventManager.emit,this.title=t,e.length>0&&(this.inputGroupsByName=e.reduce((function(t,e){return e.onDataRequested(i.handleItemDataRequested),t[e.name]=e,t}),this.inputGroupsByName)),n.length>0&&(this.enabledInputGroupNames=o(o([],this.enabledInputGroupNames,!0),n.filter((function(t){return null!=i.inputGroupsByName[t]})),!0))}return t.prototype.getInputGroup=function(t){return this.inputGroupsByName[t]||null},t.prototype.addInputGroup=function(t,e){return void 0===e&&(e=null),t.onDataRequested(this.handleItemDataRequested),this.inputGroupsByName[t.name]=t,this.enabledInputGroupNames=this.enabledInputGroupNames.filter((function(e){return e!==t.name})),null!==e?e<=0?this.enabledInputGroupNames=o([t.name],this.enabledInputGroupNames,!0):e>=this.enabledInputGroupNames.length?this.enabledInputGroupNames=o(o([],this.enabledInputGroupNames,!0),[t.name],!1):this.enabledInputGroupNames=o(o(o([],this.enabledInputGroupNames.slice(0,e),!0),[t.name],!1),this.enabledInputGroupNames.slice(e),!0):this.enabledInputGroupNames=o(o([],this.enabledInputGroupNames,!0),[t.name],!1),this},t.prototype.removeInputGroup=function(t){return delete this.inputGroupsByName[t],this.enabledInputGroupNames=this.enabledInputGroupNames.filter((function(e){return e!==t})),this},t.prototype.getFormElement=function(t){var e=this;void 0===t&&(t="update");var n=document.createElement("form");n.id="visual-console-item-edition",n.className="visual-console-item-edition",n.addEventListener("submit",(function(t){t.preventDefault(),e.submitEventManager.emit({nativeEvent:t,data:e.enabledInputGroupNames.reduce((function(t,n){return e.inputGroupsByName[n]&&(t=i(i({},t),e.inputGroupsByName[n].data)),t}),{})})}));var r=document.createElement("div");return r.className="input-groups",this.enabledInputGroupNames.forEach((function(t){e.inputGroupsByName[t]&&r.appendChild(e.inputGroupsByName[t].element)})),n.appendChild(r),n},t.prototype.reset=function(){var t=this;this.enabledInputGroupNames.forEach((function(e){t.inputGroupsByName[e]&&t.inputGroupsByName[e].reset()}))},t.prototype.onSubmit=function(t){return this.submitEventManager.on(t)},t.prototype.onInputGroupDataRequested=function(t){return this.itemDataRequestedEventManager.on(t)},t}()},478:function(t,e,n){n.d(e,{TB:function(){return l}});var r=n(541),i=n(510),o=n(630),s=function(){return s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},s.apply(this,arguments)},a=function(t){switch(t){case"up":case"right":case"down":case"left":return t;default:return"down"}};function l(t){if(null==t.id||isNaN(parseInt(t.id)))throw new TypeError("invalid id.");if(null==t.type||isNaN(parseInt(t.type)))throw new TypeError("invalid type.");return s(s({id:parseInt(t.id),type:parseInt(t.type),label:(0,r.JW)(t.label,null),labelPosition:a(t.labelPosition),isLinkEnabled:(0,r.gx)(t.isLinkEnabled),link:(0,r.JW)(t.link,null),isOnTop:(0,r.gx)(t.isOnTop),parentId:(0,r.I1)(t.parentId,null),aclGroupId:(0,r.I1)(t.aclGroupId,null),cacheExpiration:(0,r.I1)(t.cacheExpiration,null),colorStatus:(0,r.JW)(t.colorStatus,"#CCC"),cellId:(0,r.JW)(t.cellId,""),alertOutline:(0,r.gx)(t.alertOutline),ratio:(0,r.xn)(t.ratio,null)},(0,r.HY)(t)),(0,r.oF)(t))}var c=function(){function t(t,e,n){void 0===n&&(n=!1);var o=this;this.elementRef=document.createElement("div"),this.labelElementRef=document.createElement("div"),this.childElementRef=document.createElement("div"),this.clickEventManager=new i.Z,this.dblClickEventManager=new i.Z,this.movedEventManager=new i.Z,this.movementFinishedEventManager=new i.Z,this.resizedEventManager=new i.Z,this.resizeFinishedEventManager=new i.Z,this.removeEventManager=new i.Z,this.selectionChangedEventManager=new i.Z,this.disposables=[],this.debouncedMovementSave=(0,r.Ds)(500,(function(t,e){o._metadata.isBeingMoved=!1;var n={x:o.props.x,y:o.props.y},r={x:t,y:e};o.positionChanged(n,r)&&(o.move(t,e),o.movementFinishedEventManager.emit({item:o,prevPosition:n,newPosition:r}))})),this.removeMovement=null,this.debouncedResizementSave=(0,r.Ds)(500,(function(t,e){o._metadata.isBeingResized=!1;var n={width:o.props.width,height:o.props.height},r={width:t,height:e};o.sizeChanged(n,r)&&(o.resize(t,e),o.resizeFinishedEventManager.emit({item:o,prevSize:n,newSize:r}))})),this.removeResizement=null,this.itemProps=t,this._metadata=e,n||this.init()}return t.prototype.initMovementListener=function(t){var e=this;13!=this.props.type&&21!=this.props.type&&(this.removeMovement=(0,r.Dw)(t,(function(t,n){var r={x:e.props.x,y:e.props.y},i={x:t,y:n};e.meta=s(s({},e.meta),{isSelected:!0}),e.positionChanged(r,i)&&(e._metadata.isBeingMoved=!0,e.moveElement(t,n),e.movedEventManager.emit({item:e,prevPosition:r,newPosition:i}),e.debouncedMovementSave(t,n))})))},t.prototype.stopMovementListener=function(){this.removeMovement&&(this.removeMovement(),this.removeMovement=null)},t.prototype.initResizementListener=function(t){var e=this;13!=this.props.type&&21!=this.props.type&&(this.removeResizement=(0,r.Aq)(t,(function(t,n){if(e._metadata.isBeingResized=!0,e.props.label&&e.props.label.length>0){var r=e.labelElementRef.getBoundingClientRect(),i=r.width,o=r.height;switch(e.props.labelPosition){case"up":case"down":n-=o;break;case"left":case"right":t-=i}}var s={width:e.props.width,height:e.props.height},a={width:t,height:n};e.sizeChanged(s,a)&&(e.resizeElement(t,n),e.resizedEventManager.emit({item:e,prevSize:s,newSize:a}),e.debouncedResizementSave(t,n))})))},t.prototype.stopResizementListener=function(){this.removeResizement&&(this.removeResizement(),this.removeResizement=null)},t.prototype.init=function(){this.elementRef=this.createContainerDomElement(),this.labelElementRef=this.createLabelDomElement(),this.childElementRef=this.createDomElement(),this.elementRef.appendChild(this.childElementRef),this.elementRef.appendChild(this.labelElementRef),this.resizeElement(this.itemProps.width,this.itemProps.height),this.changeLabelPosition(this.itemProps.labelPosition)},t.prototype.createContainerDomElement=function(){var t,e=this;return this.props.isLinkEnabled?(t=document.createElement("a"),this.props.link?t.href=this.props.link:t.className="textDecorationNone"):(t=document.createElement("div")).className="textDecorationNone",t.classList.add("visual-console-item"),this.props.isOnTop&&t.classList.add("is-on-top"),t.style.left="".concat(this.props.x,"px"),t.style.top="".concat(this.props.y,"px"),this.props.alertOutline&&t.classList.add("is-alert-triggered"),t.addEventListener("dblclick",(function(t){e.meta.isBeingMoved||e.meta.isBeingResized||(e.unSelectItem(),e.selectItem(),e.dblClickEventManager.emit({item:e,nativeEvent:t}))})),t.addEventListener("click",(function(t){if(e.meta.editMode)t.preventDefault(),t.stopPropagation();else if(e.itemProps.isLinkEnabled&&null!=e.itemProps.link){var n=document.createElement("div");n.className="div-visual-console-spinner";var r=document.createElement("div");r.className="visual-console-spinner",n.appendChild(r);for(var i=t.composedPath(),o="visual-console-container",s=0;s<i.length;s++){var a=i[s];if(null!=a.id&&null!=a.id&&""!=a.id&&!0===a.id.includes(o)){o=a.id;break}}var l=document.getElementById(o);null!=l&&(l.classList.add("is-updating"),l.appendChild(n))}e.meta.isBeingMoved||e.meta.isBeingResized||e.clickEventManager.emit({item:e,nativeEvent:t})})),this.meta.maintenanceMode&&t.classList.add("is-maintenance"),this.meta.editMode&&t.classList.add("is-editing"),this.meta.isFetching&&t.classList.add("is-fetching"),this.meta.isUpdating&&t.classList.add("is-updating"),this.meta.isSelected&&t.classList.add("is-selected"),t},t.prototype.createLabelDomElement=function(){var t=document.createElement("div");t.className="visual-console-item-label";var e=this.getLabelWithMacrosReplaced();if(e.length>0){var n=document.createElement("table"),r=document.createElement("tr"),i=document.createElement("tr"),o=document.createElement("tr"),s=document.createElement("td");s.innerHTML=e,r.appendChild(s),n.appendChild(i),n.appendChild(r),n.appendChild(o),n.style.textAlign="center",t.appendChild(n)}return t},t.prototype.getLabelWithMacrosReplaced=function(){var t=this.props;return(0,r.No)([{macro:"_date_",value:(0,r.rN)(new Date)},{macro:"_time_",value:(0,r.bc)(new Date)},{macro:"_agent_",value:null!=t.agentAlias?t.agentAlias:""},{macro:"_agentdescription_",value:null!=t.agentDescription?t.agentDescription:""},{macro:"_address_",value:null!=t.agentAddress?t.agentAddress:""},{macro:"_module_",value:null!=t.moduleName?t.moduleName:""},{macro:"_moduledescription_",value:null!=t.moduleDescription?t.moduleDescription:""}],this.props.label||"")},t.prototype.updateDomElement=function(t){t.innerHTML=this.createDomElement().innerHTML},Object.defineProperty(t.prototype,"props",{get:function(){return s({},this.itemProps)},set:function(t){this.setProps(t)},enumerable:!1,configurable:!0}),t.prototype.setProps=function(t){var e=this.props;this.itemProps=t,this.shouldBeUpdated(e,t)&&this.render(e,this._metadata)},Object.defineProperty(t.prototype,"meta",{get:function(){return s({},this._metadata)},set:function(t){this.setMeta(t)},enumerable:!1,configurable:!0}),t.prototype.setMeta=function(t){var e=this._metadata;this._metadata=s(s({},e),t),void 0!==t.isSelected&&e.isSelected!==t.isSelected&&this.selectionChangedEventManager.emit({selected:t.isSelected}),this.render(this.itemProps,e)},t.prototype.shouldBeUpdated=function(t,e){return t!==e},t.prototype.render=function(t,e){void 0===t&&(t=null),void 0===e&&(e=null),t&&(1!==this.props.ratio&&13!=this.props.type&&(this.elementRef.style.transform="scale(".concat(this.props.ratio?this.props.ratio:1,")"),this.elementRef.style.transformOrigin="left top",this.elementRef.style.minWidth="max-content",this.elementRef.style.minHeight="max-content"),13!=t.type&&21!=t.type||this.updateDomElement(this.childElementRef)),t&&!this.positionChanged(t,this.props)||(this.moveElement(this.props.x,this.props.y),t&&13!=t.type&&21!=t.type&&this.updateDomElement(this.childElementRef)),t&&!this.sizeChanged(t,this.props)||(this.resizeElement(this.props.width,this.props.height),t&&13!=t.type&&21!=t.type&&this.updateDomElement(this.childElementRef));var n=this.labelElementRef.innerHTML,r=this.createLabelDomElement().innerHTML;if(n!==r&&(this.labelElementRef.innerHTML=r),t&&t.labelPosition===this.props.labelPosition||this.changeLabelPosition(this.props.labelPosition),t&&t.isOnTop===this.props.isOnTop||(this.props.isOnTop?this.elementRef.classList.add("is-on-top"):this.elementRef.classList.remove("is-on-top")),t&&t.isLinkEnabled!==this.props.isLinkEnabled){for(var i=this.createContainerDomElement(),o=this.elementRef.attributes,s=0;s<o.length;s++)if("id"!==o[s].nodeName){var a=this.elementRef.getAttributeNode(o[s].nodeName);if(null!==a){var l=a.cloneNode(!0);i.setAttributeNode(l)}}null!==this.elementRef.parentNode&&this.elementRef.parentNode.replaceChild(i,this.elementRef),this.elementRef=i,this.elementRef.appendChild(this.childElementRef),this.elementRef.appendChild(this.labelElementRef)}if(t&&this.props.isLinkEnabled&&t.link!==this.props.link&&null!==this.props.link&&this.elementRef.setAttribute("href",this.props.link),e&&e.editMode===this.meta.editMode&&e.maintenanceMode===this.meta.maintenanceMode||(this.meta.editMode&&!1===this.meta.maintenanceMode?(this.elementRef.classList.add("is-editing"),this.elementRef.classList.remove("is-alert-triggered")):(this.elementRef.classList.remove("is-editing"),this.props.alertOutline&&this.elementRef.classList.add("is-alert-triggered"))),e&&e.isFetching===this.meta.isFetching||(this.meta.isFetching?this.elementRef.classList.add("is-fetching"):this.elementRef.classList.remove("is-fetching")),!e||e.isUpdating!==this.meta.isUpdating){if(this.meta.isUpdating){this.elementRef.classList.add("is-updating");var c=document.createElement("div");c.className="div-visual-console-spinner";var p=document.createElement("div");p.className="visual-console-spinner",c.appendChild(p),this.elementRef.appendChild(c)}else{this.elementRef.classList.remove("is-updating");var u=this.elementRef.querySelector(".div-visual-console-spinner");if(null!==u){var d=u.parentElement;null!==d&&d.removeChild(u)}}this.updateDomElement(this.childElementRef)}e&&e.isSelected===this.meta.isSelected||(this.meta.isSelected?(this.elementRef.classList.add("is-selected"),this.elementRef.setAttribute("id","item-selected-move")):(this.elementRef.classList.remove("is-selected"),this.elementRef.removeAttribute("id")))},t.prototype.remove=function(){this.removeEventManager.emit({item:this}),this.disposables.forEach((function(t){try{t.dispose()}catch(t){}})),this.elementRef.remove()},t.prototype.positionChanged=function(t,e){return t.x!==e.x||t.y!==e.y},t.prototype.changeLabelPosition=function(t){switch(t){case"up":this.elementRef.style.flexDirection="column-reverse";break;case"left":this.elementRef.style.flexDirection="row-reverse";break;case"right":this.elementRef.style.flexDirection="row";break;default:this.elementRef.style.flexDirection="column"}var e=this.labelElementRef.getElementsByTagName("table"),n=e.length>0?e.item(0):null;if(n)switch(this.props.labelPosition){case"up":case"down":this.props.width>0&&(n.style.width="".concat(this.props.width,"px"),n.style.height="");break;case"left":case"right":this.props.height>0&&(n.style.width="",n.style.height="".concat(this.props.height,"px"))}},t.prototype.moveElement=function(t,e){this.elementRef.style.left="".concat(t,"px"),this.elementRef.style.top="".concat(e,"px")},t.prototype.move=function(t,e){this.moveElement(t,e),this.itemProps=s(s({},this.props),{x:t,y:e})},t.prototype.sizeChanged=function(t,e){return t.width!==e.width||t.height!==e.height},t.prototype.resizeElement=function(t,e){if(13!=this.props.type&&21!=this.props.type&&(this.childElementRef.style.width=t>0?"".concat(t,"px"):"",this.childElementRef.style.height=e>0?"".concat(e,"px"):""),this.props.label&&this.props.label.length>0){var n=this.labelElementRef.getElementsByTagName("table"),r=n.length>0?n.item(0):null;if(r)switch(this.props.labelPosition){case"up":case"down":r.style.width=t>0?"".concat(t,"px"):"";break;case"left":case"right":r.style.height=e>0?"".concat(e,"px"):""}}},t.prototype.resize=function(t,e){this.resizeElement(t,e),this.itemProps=s(s({},this.props),{width:t,height:e})},t.prototype.onClick=function(t){var e=this.clickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onDblClick=function(t){var e=this.dblClickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onMoved=function(t){var e=this.movedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onMovementFinished=function(t){var e=this.movementFinishedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onResized=function(t){var e=this.resizedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onResizeFinished=function(t){var e=this.resizeFinishedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onRemove=function(t){var e=this.removeEventManager.on(t);return this.disposables.push(e),e},t.prototype.onSelectionChanged=function(t){var e=this.selectionChangedEventManager.on(t);return this.disposables.push(e),e},t.prototype.selectItem=function(){this.meta=s(s({},this.meta),{isSelected:!0}),this.initMovementListener(this.elementRef),13!==this.props.type&&21!==this.props.type&&this.initResizementListener(this.elementRef)},t.prototype.unSelectItem=function(){this.meta=s(s({},this.meta),{isSelected:!1}),this.stopMovementListener(),13!==this.props.type&&this.stopResizementListener()},t.prototype.getFormContainer=function(){return t.getFormContainer(this.props)},t.getFormContainer=function(t){var e=t.type?function(t){var e="";switch(t){case 0:e=(0,r.t)("Static image");break;case 1:e=(0,r.t)("Module graph");break;case 2:case 6:case 7:case 8:e=(0,r.t)("Simple value");break;case 3:case 9:case 15:case 16:e=(0,r.t)("Percentile item");break;case 4:e=(0,r.t)("Label");break;case 5:e=(0,r.t)("Icon");break;case 10:e=(0,r.t)("Service");break;case 11:e=(0,r.t)("Group");break;case 12:e=(0,r.t)("Box");break;case 13:e=(0,r.t)("Line");break;case 14:e=(0,r.t)("Event history graph");break;case 17:e=(0,r.t)("Serialized pie graph");break;case 18:e=(0,r.t)("Bars graph");break;case 19:e=(0,r.t)("Clock");break;case 20:e=(0,r.t)("Color cloud");break;case 21:e=(0,r.t)("Network link");break;case 22:e=(0,r.t)("Odometer");break;case 23:e=(0,r.t)("Basic chart");break;default:e=(0,r.t)("Item")}return e}(t.type):(0,r.t)("Item");return new o.FormContainer(e,[],[])},t}();e.ZP=c},709:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{K:function(){return barsGraphPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)},parseBarsGraphProps=function(t){switch(t){case"white":case"black":case"transparent":return t;default:return"transparent"}},parseTypeGraph=function(t){switch(t){case"horizontal":case"vertical":return t;default:return"vertical"}};function barsGraphPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:18,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,backgroundColor:parseBarsGraphProps(t.backgroundColor),typeGraph:parseTypeGraph(t.typeGraph),gridColor:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.gridColor)?"#000000":t.gridColor}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t))}var BarsGraph=function(_super){function BarsGraph(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(BarsGraph,_super),BarsGraph.prototype.createDomElement=function(){var element=document.createElement("div");element.innerHTML=this.props.html,element.className="bars-graph",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element},BarsGraph.prototype.updateDomElement=function(element){element.innerHTML=this.props.html,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},BarsGraph}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=BarsGraph},880:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{u:function(){return basicChartPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)};function basicChartPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:23,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,period:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.period,null),value:parseFloat(t.value),status:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.status)?"#B2B2B2":t.status,moduleNameColor:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.moduleNameColor)?"#3f3f3f":t.moduleNameColor}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t)),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.bs)(t))}var BasicChart=function(_super){function BasicChart(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(BasicChart,_super),BasicChart.prototype.createDomElement=function(){var element=document.createElement("div"),header=document.createElement("div");header.className="basic-chart-header";var moduleName=document.createElement("h2");moduleName.className="basic-chart-header-name",moduleName.textContent=this.props.moduleName,moduleName.style.color="".concat(this.props.moduleNameColor),header.appendChild(moduleName);var value="";null!==this.props.value&&(value=this.numberFormat(this.props.value,!1,"",2,1e3));var moduleValue=document.createElement("h2");moduleValue.className="basic-chart-header-value",moduleValue.textContent="".concat(value),moduleValue.style.color=this.props.status,header.appendChild(moduleValue),element.innerHTML=this.props.html,element.className="basic-chart",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var legendP=element.getElementsByTagName("p"),i=0;i<legendP.length;i++)legendP[i].style.margin="0px";for(var overviewGraphs=element.getElementsByClassName("overview_graph"),i=0;i<overviewGraphs.length;i++)overviewGraphs[i].remove();for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element.innerHTML=this.props.html,element.insertBefore(header,element.firstChild),element},BasicChart.prototype.updateDomElement=function(element){var header=document.createElement("div");header.className="basic-chart-header";var moduleName=document.createElement("h2");moduleName.className="basic-chart-header-name",moduleName.textContent=this.props.moduleName,moduleName.style.color="".concat(this.props.moduleNameColor),header.appendChild(moduleName);var value="";null!==this.props.value&&(value=this.numberFormat(this.props.value,!1,"",2,1e3));var moduleValue=document.createElement("h2");moduleValue.className="basic-chart-header-value",moduleValue.textContent="".concat(value),moduleValue.style.color=this.props.status,header.appendChild(moduleValue),element.innerHTML=this.props.html,element.insertBefore(header,element.firstChild);for(var legendP=element.getElementsByTagName("p"),i=0;i<legendP.length;i++)legendP[i].style.margin="0px";for(var overviewGraphs=element.getElementsByClassName("overview_graph"),i=0;i<overviewGraphs.length;i++)overviewGraphs[i].remove();for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},BasicChart.prototype.numberFormat=function(t,e,n,r,i){if(i=void 0!==i?i:1e3,r||(r=99),e){if(Math.round(t)!=t)return""}else{r++;var o=this.pad("1",r,0);t=Math.round(t*Number.parseInt(o))/Number.parseInt(o)}for(var s=0;Math.abs(t)>=i;)s++,t/=i;return t=i?Math.round(2*t)/2:Math.round(2*t),isNaN(t)&&(t=0),t+" "+["","K","M","G","T","P","E","Z","Y"][s]+n},BasicChart.prototype.pad=function(t,e,n){var r=t+"";return e<=r.length?r:this.pad(r+n,e,n)},BasicChart}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=BasicChart},369:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{p:function(){return donutGraphPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)};function donutGraphPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:17,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,legendBackgroundColor:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.legendBackgroundColor)?"#ffffff":t.legendBackgroundColor}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t)),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.bs)(t))}var DonutGraph=function(_super){function DonutGraph(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(DonutGraph,_super),DonutGraph.prototype.createDomElement=function(){var element=document.createElement("div");element.className="donut-graph",element.innerHTML=this.props.html,element.style.backgroundColor=this.props.legendBackgroundColor,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element},DonutGraph.prototype.updateDomElement=function(element){element.innerHTML=this.props.html,element.style.backgroundColor=this.props.legendBackgroundColor,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},DonutGraph}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=DonutGraph},280:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{o:function(){return eventsHistoryPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)};function eventsHistoryPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:14,maxTime:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.maxTime,null),legendColor:t.legendColor,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t))}var EventsHistory=function(_super){function EventsHistory(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(EventsHistory,_super),EventsHistory.prototype.createDomElement=function(){var element=document.createElement("div");element.className="events-history",element.innerHTML=this.props.html,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);var flotText=element.getElementsByClassName("noresizevc");return flotText[0].style.color=this.props.legendColor,element},EventsHistory.prototype.updateDomElement=function(element){element.innerHTML=this.props.html;var aux=document.createElement("div");aux.innerHTML=this.props.html;for(var scripts=aux.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim());var flotText=element.getElementsByClassName("noresizevc");flotText[0].style.color=this.props.legendColor},EventsHistory}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=EventsHistory},600:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{C:function(){return moduleGraphPropsDecoder}});var _lib__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(541),_Item__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(478),__extends=(extendStatics=function(t,e){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},extendStatics(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}extendStatics(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),extendStatics,__assign=function(){return __assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},__assign.apply(this,arguments)},parseBackgroundType=function(t){switch(t){case"white":case"black":case"transparent":return t;default:return"transparent"}},parseGraphType=function(t){switch(t){case"line":case"area":return t;default:return"line"}};function moduleGraphPropsDecoder(t){if((0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)&&(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.encodedHtml))throw new TypeError("missing html content.");return __assign(__assign(__assign(__assign({},(0,_Item__WEBPACK_IMPORTED_MODULE_1__.TB)(t)),{type:1,html:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.VJ)(t.html)?(0,_lib__WEBPACK_IMPORTED_MODULE_0__.NV)(t.encodedHtml):t.html,backgroundType:parseBackgroundType(t.backgroundType),period:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.period,null),graphType:parseGraphType(t.graphType),customGraphId:(0,_lib__WEBPACK_IMPORTED_MODULE_0__.I1)(t.customGraphId,null)}),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.MH)(t)),(0,_lib__WEBPACK_IMPORTED_MODULE_0__.bs)(t))}var ModuleGraph=function(_super){function ModuleGraph(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(ModuleGraph,_super),ModuleGraph.prototype.createDomElement=function(){var element=document.createElement("div");element.innerHTML=this.props.html,element.className="module-graph",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),_loop_1=function(i){0===scripts[i].src.length&&setTimeout((function(){try{eval(scripts[i].innerHTML.trim())}catch(t){}}),0)},i=0;i<scripts.length;i++)_loop_1(i);return element},ModuleGraph.prototype.updateDomElement=function(element){element.innerHTML=this.props.html,!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(element.style.opacity="0.2");for(var scripts=element.getElementsByTagName("script"),i=0;i<scripts.length;i++)0===scripts[i].src.length&&eval(scripts[i].innerHTML.trim())},ModuleGraph}(_Item__WEBPACK_IMPORTED_MODULE_1__.ZP);__webpack_exports__.Z=ModuleGraph},830:function(t,e){var n="http://www.w3.org/2000/svg";e.Z=function(t,e,r){var i=void 0===r?{}:r,o=i.size,s=i.color,a=i.spin,l=i.pulse,c=document.createElement("figure");c.title=e,c.className="fa fa-".concat(t.iconName),o&&c.classList.add("fa-".concat(o)),a?c.classList.add("fa-spin"):l&&c.classList.add("fa-pulse");var p=document.createElementNS(n,"svg");p.setAttribute("viewBox","0 0 ".concat(t.icon[0]," ").concat(t.icon[1])),s&&p.setAttribute("fill",s);var u=document.createElementNS(n,"path"),d="string"==typeof t.icon[4]?t.icon[4]:t.icon[4][0];return u.setAttribute("d",d),p.appendChild(u),c.appendChild(p),c}},510:function(t,e){e.Z=function(){var t=this;this.listeners=[],this.listenersOncer=[],this.on=function(e){return t.listeners.push(e),{dispose:function(){return t.off(e)}}},this.once=function(e){t.listenersOncer.push(e)},this.off=function(e){var n=t.listeners.indexOf(e);n>-1&&t.listeners.splice(n,1)},this.emit=function(e){t.listeners.forEach((function(t){return t(e)})),t.listenersOncer.forEach((function(t){return t(e)})),t.listenersOncer=[]},this.pipe=function(e){return t.on((function(t){return e.emit(t)}))}}},541:function(t,e,n){n.d(e,{Dw:function(){return M},Aq:function(){return x},Ds:function(){return E},NV:function(){return _},fk:function(){return k},rN:function(){return y},bc:function(){return v},SM:function(){return m},bs:function(){return h},MH:function(){return d},JW:function(){return a},gx:function(){return l},xn:function(){return o},I1:function(){return i},oF:function(){return p},OR:function(){return f},No:function(){return g},HY:function(){return u},VJ:function(){return s},t:function(){return C}});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};function i(t,e){return"number"==typeof t?t:"string"==typeof t&&t.length>0&&!isNaN(parseInt(t))?parseInt(t):e}function o(t,e){return"number"==typeof t?t:"string"==typeof t&&t.length>0&&!isNaN(parseFloat(t))?parseFloat(t):e}function s(t){return null==t||0===t.length}function a(t,e){return"string"==typeof t&&t.length>0?t:e}function l(t){return"boolean"==typeof t?t:"number"==typeof t?t>0:"string"==typeof t&&("1"===t||"true"===t)}function c(t,e,n){void 0===n&&(n=" "),"number"==typeof t&&(t="".concat(t)),"number"==typeof n&&(n="".concat(n));var r=e-t.length;if(0===r)return t;if(r<0)return t.substr(Math.abs(r));if(r===n.length)return"".concat(n).concat(t);if(r<n.length)return"".concat(n.substring(0,r)).concat(t);for(var i=Math.floor(r/n.length),o=r-n.length*i,s="",a=0;a<i;a++)s+=n;return 0===o?"".concat(s).concat(t):"".concat(s).concat(n.substring(0,o)).concat(t)}function p(t){return{x:i(t.x,0),y:i(t.y,0)}}function u(t){if(null==t.width||isNaN(parseInt(t.width))||null==t.height||isNaN(parseInt(t.height)))throw new TypeError("invalid size.");return{width:parseInt(t.width),height:parseInt(t.height)}}function d(t){return r({moduleId:i(t.moduleId,null),moduleName:a(t.moduleName,null),moduleDescription:a(t.moduleDescription,null),moduleDisabled:l(t.moduleDisabled)},function(t){var e={agentId:i(t.agentId,null),agentName:a(t.agentName,null),agentAlias:a(t.agentAlias,null),agentDescription:a(t.agentDescription,null),agentAddress:a(t.agentAddress,null),agentDisabled:l(t.agentDisabled)};return null!=t.metaconsoleId?r({metaconsoleId:t.metaconsoleId},e):e}(t))}function h(t){var e={linkedLayoutStatusType:"default"};switch(t.linkedLayoutStatusType){case"weight":var n=i(t.linkedLayoutStatusTypeWeight,null);if(null==n)throw new TypeError("invalid status calculation properties.");t.linkedLayoutStatusTypeWeight&&(e={linkedLayoutStatusType:"weight",linkedLayoutStatusTypeWeight:n});break;case"service":var o=i(t.linkedLayoutStatusTypeWarningThreshold,null),s=i(t.linkedLayoutStatusTypeCriticalThreshold,null);if(null==o||null==s)throw new TypeError("invalid status calculation properties.");e={linkedLayoutStatusType:"service",linkedLayoutStatusTypeWarningThreshold:o,linkedLayoutStatusTypeCriticalThreshold:s}}return r({linkedLayoutId:i(t.linkedLayoutId,null),linkedLayoutNodeId:i(t.linkedLayoutNodeId,null)},e)}function m(t){var e,n=(null,(e=t.receivedAt)instanceof Date?e:"number"==typeof e?new Date(1e3*e):"string"!=typeof e||Number.isNaN(new Date(e).getTime())?null:new Date(e));if(null===n)throw new TypeError("invalid meta structure");var r=null;return t.error instanceof Error?r=t.error:"string"==typeof t.error&&(r=new Error(t.error)),{receivedAt:n,error:r,editMode:l(t.editMode),maintenanceMode:l(t.maintenanceMode),isFromCache:l(t.isFromCache),isFetching:!1,isUpdating:!1,isBeingMoved:!1,isBeingResized:!1,isSelected:!1,lineMode:!1}}function f(t,e){var n="".concat(t,": ").concat(e,";");return["-webkit-".concat(n),"-moz-".concat(n),"-ms-".concat(n),"-o-".concat(n),"".concat(n)]}function _(t){return decodeURIComponent(escape(window.atob(t)))}function y(t,e){if(void 0===e&&(e=null),e&&Intl&&Intl.DateTimeFormat)return Intl.DateTimeFormat(e,{day:"2-digit",month:"2-digit",year:"numeric"}).format(t);var n=c(t.getDate(),2,0),r=c(t.getMonth()+1,2,0),i=c(t.getFullYear(),4,0);return"".concat(n,"/").concat(r,"/").concat(i)}function v(t){var e=c(t.getHours(),2,0),n=c(t.getMinutes(),2,0),r=c(t.getSeconds(),2,0);return"".concat(e,":").concat(n,":").concat(r)}function g(t,e){return t.reduce((function(t,e){var n=e.macro,r=e.value;return t.replace(n,r)}),e)}function b(t,e){var n=0;return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];var o=Date.now();if(!(o-n<t))return n=o,e.apply(void 0,r)}}function E(t,e){var n=null;return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];null!==n&&window.clearTimeout(n),n=window.setTimeout((function(){e.apply(void 0,r),n=null}),t)}}function w(t,e){for(var n=0,r=0;t&&!Number.isNaN(t.offsetLeft)&&!Number.isNaN(t.offsetTop)&&t!==e;)n+=t.offsetLeft-t.scrollLeft,r+=t.offsetTop-t.scrollTop,t=t.offsetParent;return{top:r,left:n}}function M(t,e,n){var r=n||t.parentElement,i=t.draggable,o=0,s=0,a=0,l=0,c=0,p=0,u=r.getBoundingClientRect(),d=w(r),h=d.top,m=h+u.height,f=d.left,_=f+u.width,y=t.getBoundingClientRect(),v=window.getComputedStyle(t).borderWidth||"0",g=2*Number.parseInt(v),M=E(32,e),x=b(16,e),C=function(t){var e=0,n=0,r=t.pageX,i=t.pageY,d=r-a,v=i-l,b=u.width-y.width+g,E=u.height-y.height+g,w=r<f||0===o&&d>0&&r<f+c,C=r>_||d+o+y.width-g>u.width||o===b&&d<0&&r>f+b+c,k=i<h||0===s&&v>0&&i<h+p,P=i>m||v+s+y.height-g>u.height||s===E&&v<0&&i>h+E+p;(e=w?0:C?b:d+o)<0&&(e=0),(n=k?0:P?E:v+s)<0&&(n=0),a=r,l=i,e===o&&n===s||(x(e,n),M(e,n),o=e,s=n)},k=function(){o=0,s=0,a=0,l=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",k),t.draggable=i,document.body.style.userSelect="auto"},P=function(e){if(2!==e.button){e.stopPropagation(),t.draggable=!1,t.setAttribute("ondragstart","return false;"),t.setAttribute("draggable","false");var n=w(t,r);o=n.left,s=n.top,a=e.pageX,l=e.pageY,c=e.offsetX,p=e.offsetY,u=r.getBoundingClientRect(),d=w(r),h=d.top,m=h+u.height,f=d.left,_=f+u.width,y=t.getBoundingClientRect(),v=window.getComputedStyle(t).borderWidth||"0",g=2*Number.parseInt(v),document.addEventListener("mousemove",C),document.addEventListener("mouseup",k),document.body.style.userSelect="none"}};return t.addEventListener("mousedown",P),function(){t.removeEventListener("mousedown",P),k()}}function x(t,e){var n=document.createElement("div");n.className="resize-draggable",t.appendChild(n);var r=t.parentElement,i=t.draggable,o=0,s=0,a=0,l=0,c=0,p=r.getBoundingClientRect(),u=w(r),d=u.top,h=d+p.height,m=u.left,f=m+p.width,_=w(t),y=_.top,v=_.left,g=window.getComputedStyle(t).borderWidth||"0",M=Number.parseInt(g),x=E(32,e),C=b(16,e),k=function(t){var e=o+(t.pageX-a),n=s+(t.pageY-l);e===o&&n===s||e<o&&t.pageX>v+(o-c)||(e<15?e=15:e+v-M/2>=f&&(e=f-v),n<15?n=15:n+y-M/2>=h&&(n=h-y),C(e,n),x(e,n),o=e,s=n,a=t.pageX,l=t.pageY)},P=function(){o=0,s=0,a=0,l=0,c=0,document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",P),t.draggable=i,document.body.style.userSelect="auto"};return n.addEventListener("mousedown",(function(e){e.stopPropagation(),t.draggable=!1;var n=t.getBoundingClientRect(),i=n.width,g=n.height;o=i,s=g,a=e.pageX,l=e.pageY,c=e.offsetX,e.offsetY,p=r.getBoundingClientRect(),u=w(r),d=u.top,h=d+p.height,m=u.left,f=m+p.width,_=w(t),y=_.top,v=_.left,document.addEventListener("mousemove",k),document.addEventListener("mouseup",P),document.body.style.userSelect="none"})),function(){n.remove(),P()}}function C(t){return t}function k(t,e,n){return void 0===e&&(e=140),void 0===n&&(n="…"),t.trim().length>e?t.substr(0,e).trim()+n:t}}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var n=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t](n,n.exports,__webpack_require__),n.exports}__webpack_require__.d=function(t,e){for(var n in e)__webpack_require__.o(e,n)&&!__webpack_require__.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},__webpack_require__.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var __webpack_exports__={};!function(){var t,e=__webpack_require__(541),n=__webpack_require__(478),r=(t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)},function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}),i=function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},i.apply(this,arguments)},o=function(t){switch(t){case"default":case"enabled":case"disabled":return t;default:return"default"}};function s(t){if("string"!=typeof t.imageSrc||0===t.imageSrc.length)throw new TypeError("invalid image src.");return i(i(i(i({},(0,n.TB)(t)),{type:0,imageSrc:t.imageSrc,showLastValueTooltip:o(t.showLastValueTooltip),statusImageSrc:(0,e.JW)(t.statusImageSrc,null),lastValue:(0,e.JW)(t.lastValue,null)}),(0,e.MH)(t)),(0,e.bs)(t))}var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.createDomElement=function(){var t=this.props.statusImageSrc||this.props.imageSrc,e=document.createElement("div");return e.className="static-graph",e.setAttribute("ondragstart","return false;"),e.setAttribute("draggable","false"),e.style.backgroundImage="url(".concat(t,")"),e.style.backgroundRepeat="no-repeat",e.style.backgroundSize="contain",e.style.backgroundPosition="center",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(e.style.opacity="0.2"),null!==this.props.lastValue&&"disabled"!==this.props.showLastValueTooltip&&(e.className="static-graph image forced_title",e.setAttribute("data-use_title_for_force_title","1"),e.setAttribute("data-title",this.props.lastValue)),e},e.prototype.updateDomElement=function(t){var e=this.props.statusImageSrc||this.props.imageSrc;t.style.backgroundImage="url(".concat(e,")")},e}(n.ZP),l=a,c=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),p=function(){return p=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},p.apply(this,arguments)};function u(t){if("string"!=typeof t.imageSrc||0===t.imageSrc.length)throw new TypeError("invalid image src.");if("string"!=typeof t.image||0===t.image.length)throw new TypeError("invalid image.");return p(p(p({},(0,n.TB)(t)),{type:5,image:t.image,imageSrc:t.imageSrc}),(0,e.bs)(t))}var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return c(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="icon "+this.props.image,t.style.backgroundImage="url(".concat(this.props.imageSrc,")"),t.style.backgroundRepeat="no-repeat",t.style.backgroundSize="contain",t.style.backgroundPosition="center",t},e.prototype.updateDomElement=function(t){t.style.backgroundImage="url(".concat(this.props.imageSrc,")")},e}(n.ZP),h=d,m=__webpack_require__(630),f=__webpack_require__(830),_={prefix:"fas",iconName:"plus-circle",icon:[512,512,[],"f055","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"]},y={prefix:"fas",iconName:"trash-alt",icon:[448,512,[],"f2ed","M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]},v=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),g=function(){return g=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},g.apply(this,arguments)},b=function(t,e,n){if(n||2===arguments.length)for(var r,i=0,o=e.length;i<o;i++)!r&&i in e||(r||(r=Array.prototype.slice.call(e,0,i)),r[i]=e[i]);return t.concat(r||Array.prototype.slice.call(e))};function E(t){if("string"!=typeof t.color||0===t.color.length)throw new TypeError("invalid color.");return g(g(g(g({},(0,n.TB)(t)),{type:20,color:t.color,defaultColor:t.defaultColor,colorRanges:t.colorRanges}),(0,e.MH)(t)),(0,e.bs)(t))}var w=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return v(n,t),n.prototype.createContent=function(){var t=this,n=document.createElement("div");n.className="div-input-group";var r=document.createElement("label");r.textContent=(0,e.t)("Default color"),n.appendChild(r);var i=document.createElement("input");return i.type="color",i.required=!0,i.value="".concat(this.currentData.defaultColor||this.initialData.defaultColor||"#000000"),i.addEventListener("change",(function(e){t.updateData({defaultColor:e.target.value})})),n.appendChild(i),n},n}(m.InputGroup),M=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return v(n,t),n.prototype.createContent=function(){var t=this,e=document.createElement("div");e.className="div-input-group div-ranges-input-group";var n=this.createLabel("Ranges");e.appendChild(n);var r=document.createElement("div"),i=document.createElement("div");e.appendChild(i),e.appendChild(r);var o,s=this.currentData.colorRanges||this.initialData.colorRanges||[];return o=function(e){i.innerHTML="",e.forEach((function(e,n){return i.appendChild(t.rangeContainer(e,function(e){return function(n){var r=t.currentData.colorRanges||t.initialData.colorRanges||[];t.updateData({colorRanges:b(b(b([],r.slice(0,e),!0),[n],!1),r.slice(e+1),!0)})}}(n),function(e){return function(){var n=t.currentData.colorRanges||t.initialData.colorRanges||[],r=b(b([],n.slice(0,e),!0),n.slice(e+1),!0);t.updateData({colorRanges:r}),o(r)}}(n)))}))},o(s),r.appendChild(this.initialRangeContainer((function(e){var n=t.currentData.colorRanges||t.initialData.colorRanges||[],r=b(b([],n,!0),[e],!1);t.updateData({colorRanges:r}),o(r)}))),e},n.prototype.initialRangeContainer=function(t){var n={color:"#ffffff"},r=g({},n),i=document.createElement("div"),o=document.createElement("div"),s=this.createLabel("From Value"),a=this.createInputNumber(null,(function(t){r.fromValue=t}));o.appendChild(s),o.appendChild(a),i.appendChild(o);var l=document.createElement("div"),c=this.createLabel("To Value"),p=this.createInputNumber(null,(function(t){r.toValue=t}));o.appendChild(c),o.appendChild(p),i.appendChild(l);var u=document.createElement("div"),d=this.createLabel("Color"),h=this.createInputColor(n.color,(function(t){r.color=t}));o.appendChild(d),o.appendChild(h),i.appendChild(u);var m=document.createElement("a");return m.appendChild((0,f.Z)(_,(0,e.t)("Create color range"),{size:"small",color:"#565656"})),m.addEventListener("click",(function(){var e;void 0!==(e=r).color&&void 0!==e.toValue&&void 0!==e.fromValue&&t(r),r=n,a.value="".concat(r.fromValue||""),p.value="".concat(r.toValue||""),h.value="".concat(r.color)})),i.appendChild(m),i},n.prototype.rangeContainer=function(t,n,r){var i=g({},t),o=document.createElement("div"),s=document.createElement("div"),a=this.createLabel("From Value"),l=this.createInputNumber(t.fromValue,(function(t){i.fromValue=t,n(g({},i))}));s.appendChild(a),s.appendChild(l),o.appendChild(s);var c=document.createElement("div"),p=this.createLabel("To Value"),u=this.createInputNumber(t.toValue,(function(t){i.toValue=t,n(g({},i))}));s.appendChild(p),s.appendChild(u),o.appendChild(c);var d=document.createElement("div"),h=this.createLabel("Color"),m=this.createInputColor(t.color,(function(t){i.color=t,n(g({},i))}));s.appendChild(h),s.appendChild(m),o.appendChild(d);var _=document.createElement("a");return _.appendChild((0,f.Z)(y,(0,e.t)("Delete color range"),{size:"small",color:"#565656"})),_.addEventListener("click",r),o.appendChild(_),o},n.prototype.createLabel=function(t){var n=document.createElement("label");return n.textContent=(0,e.t)(t),n},n.prototype.createInputNumber=function(t,e){var n=document.createElement("input");return n.type="number",null!==t&&(n.value="".concat(t)),n.addEventListener("change",(function(t){var n=parseInt(t.target.value);isNaN(n)||e(n)})),n},n.prototype.createInputColor=function(t,e){var n=document.createElement("input");return n.type="color",null!==t&&(n.value=t),n.addEventListener("change",(function(t){return e(t.target.value)})),n},n}(m.InputGroup),x="http://www.w3.org/2000/svg",C=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return v(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="color-cloud",t.append(this.createSvgElement()),t},e.prototype.resizeElement=function(e){t.prototype.resizeElement.call(this,e,e)},e.prototype.createSvgElement=function(){var t="grad_".concat(this.props.id),e=document.createElementNS(x,"svg");e.setAttribute("viewBox","0 0 100 100");var n=document.createElementNS(x,"defs"),r=document.createElementNS(x,"radialGradient");r.setAttribute("id",t),r.setAttribute("cx","50%"),r.setAttribute("cy","50%"),r.setAttribute("r","50%"),r.setAttribute("fx","50%"),r.setAttribute("fy","50%");var i=document.createElementNS(x,"stop");i.setAttribute("offset","0%"),i.setAttribute("style","stop-color:".concat(this.props.color,";stop-opacity:0.9"));var o=document.createElementNS(x,"stop");o.setAttribute("offset","100%"),o.setAttribute("style","stop-color:".concat(this.props.color,";stop-opacity:0"));var s=document.createElementNS(x,"circle");return s.setAttribute("fill","url(#".concat(t,")")),s.setAttribute("cx","50%"),s.setAttribute("cy","50%"),s.setAttribute("r","50%"),r.append(i,o),n.append(r),e.append(n,s),!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||e.setAttribute("opacity","0.2"),e},e.prototype.getFormContainer=function(){return e.getFormContainer(this.props)},e.getFormContainer=function(e){var n=t.getFormContainer.call(this,e);return n.removeInputGroup("label"),n.addInputGroup(new w("color-cloud",e),3),n.addInputGroup(new M("ranges-cloud",e),4),n},e}(n.ZP),k=C,P=__webpack_require__(510),I=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),A=function(){return A=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},A.apply(this,arguments)};function O(t){var r=A(A({},(0,n.TB)(A(A({},t),{width:1,height:1}))),{type:13,label:null,isLinkEnabled:!1,parentId:null,aclGroupId:null,x:0,y:0,width:0,height:0,startPosition:{x:(0,e.I1)(t.startX,0),y:(0,e.I1)(t.startY,0)},endPosition:{x:(0,e.I1)(t.endX,0),y:(0,e.I1)(t.endY,0)},lineWidth:(0,e.I1)(t.lineWidth||t.borderWidth,1),color:(0,e.JW)(t.borderColor||t.color,null),viewportOffsetX:0,viewportOffsetY:0,labelEnd:(0,e.JW)(t.labelEnd,""),labelEndWidth:(0,e.I1)(t.labelEndWidth,0),linkedEnd:t.linkedEnd,linkedStart:t.linkedStart,labelEndHeight:(0,e.I1)(t.labelEndHeight,0),labelStart:(0,e.JW)(t.labelStart,""),labelStartWidth:(0,e.I1)(t.labelStartWidth,0),labelStartHeight:(0,e.I1)(t.labelStartHeight,0)});return A(A({},r),S.extractBoxSizeAndPosition(r.startPosition,r.endPosition))}var T="http://www.w3.org/2000/svg",S=function(t){function n(r,i){var o=t.call(this,A(A({},r),n.extractBoxSizeAndPosition(r.startPosition,r.endPosition)),A({},i),!0)||this;return o.circleRadius=8,o.moveMode=!1,o.isMoving=!1,o.lineMovedEventManager=new P.Z,o.lineMovedEventDisposables=[],o.debouncedStartPositionMovementSave=(0,e.Ds)(500,(function(t,e){o.isMoving=!1;var n={x:t,y:e};o.lineMovedEventManager.emit({item:o,startPosition:n,endPosition:o.props.endPosition})})),o.removeStartPositionMovement=null,o.debouncedEndPositionMovementSave=(0,e.Ds)(500,(function(t,e){o.isMoving=!1;var n={x:t,y:e};o.lineMovedEventManager.emit({item:o,endPosition:n,startPosition:o.props.startPosition})})),o.removeEndPositionMovement=null,o.moveMode=i.editMode,o.init(),t.prototype.resizeElement.call(o,Math.max(r.width,r.viewportOffsetX),Math.max(r.height,r.viewportOffsetY)),o}return I(n,t),n.prototype.initStartPositionMovementListener=function(t,n){var r=this;this.removeStartPositionMovement=(0,e.Dw)(t,(function(t,e){var n={x:t+=r.circleRadius-r.props.viewportOffsetX/2,y:e+=r.circleRadius-r.props.viewportOffsetY/2};r.isMoving=!0,r.props=A(A({},r.props),{startPosition:n}),r.debouncedStartPositionMovementSave(t,e)}),n)},n.prototype.stopStartPositionMovementListener=function(){this.removeStartPositionMovement&&(this.removeStartPositionMovement(),this.removeStartPositionMovement=null)},n.prototype.initEndPositionMovementListener=function(t,n){var r=this;this.removeEndPositionMovement=(0,e.Dw)(t,(function(t,e){t+=r.circleRadius-r.props.viewportOffsetX/2,e+=r.circleRadius-r.props.viewportOffsetY/2,r.isMoving=!0,r.props=A(A({},r.props),{endPosition:{x:t,y:e}}),r.debouncedEndPositionMovementSave(t,e)}),n)},n.prototype.stopEndPositionMovementListener=function(){this.removeEndPositionMovement&&(this.removeEndPositionMovement(),this.removeEndPositionMovement=null)},n.prototype.setProps=function(e){t.prototype.setProps.call(this,A(A({},e),n.extractBoxSizeAndPosition(e.startPosition,e.endPosition)))},n.prototype.setMeta=function(e){this.moveMode=e.editMode,t.prototype.setMeta.call(this,A(A({},e),{lineMode:!0}))},n.prototype.createDomElement=function(){var t=document.createElement("div");t.className="line";var e=this.props,n=e.x,r=e.y,i=e.width,o=e.height,s=e.lineWidth,a=e.viewportOffsetX,l=e.viewportOffsetY,c=e.startPosition,p=e.endPosition,u=e.color;i+=a,o+=l;var d=c.x-n+s/2+a/2,h=c.y-r+s/2+l/2,m=p.x-n+s/2+a/2,f=p.y-r+s/2+l/2,_=document.createElementNS(T,"svg");_.setAttribute("width","".concat(i+s)),_.setAttribute("height","".concat(o+s));var y=document.createElementNS(T,"line");return y.setAttribute("x1","".concat(d)),y.setAttribute("y1","".concat(h)),y.setAttribute("x2","".concat(m)),y.setAttribute("y2","".concat(f)),y.setAttribute("stroke",u||"black"),y.setAttribute("stroke-width","".concat(s)),_.append(y),t.append(_),t},n.prototype.updateDomElement=function(t){null!=t.parentElement&&(t.parentElement.style.cursor="default");var e=this.props,n=e.x,r=e.y,i=e.width,o=e.height,s=e.lineWidth,a=e.viewportOffsetX,l=e.viewportOffsetY,c=e.startPosition,p=e.endPosition,u=e.color;i+=a,o+=l;var d=c.x-n+s/2+a/2,h=c.y-r+s/2+l/2,m=p.x-n+s/2+a/2,f=p.y-r+s/2+l/2,_=t.getElementsByTagName("svg");if(_.length>0){var y=_.item(0);if(null!=y){y.setAttribute("width","".concat(i+s)),y.setAttribute("height","".concat(o+s));var v=y.getElementsByTagNameNS(T,"line");if(v.length>0){var g=v.item(0);null!=g&&(g.setAttribute("x1","".concat(d)),g.setAttribute("y1","".concat(h)),g.setAttribute("x2","".concat(m)),g.setAttribute("y2","".concat(f)),g.setAttribute("stroke",u||"black"),g.setAttribute("stroke-width","".concat(s)))}}}if(this.moveMode){var b=document.createElement("div"),E=document.createElement("div");if(this.isMoving){var w=t.getElementsByClassName("visual-console-item-line-circle-start");w.length>0&&(C=w.item(0))&&(b=C);var M=t.getElementsByClassName("visual-console-item-line-circle-end");M.length>0&&(C=M.item(0))&&(E=C)}if(b.classList.add("visual-console-item-line-circle","visual-console-item-line-circle-start"),b.style.width="".concat(2*this.circleRadius,"px"),b.style.height="".concat(2*this.circleRadius,"px"),b.style.borderRadius="50%",b.style.backgroundColor="".concat(u),b.style.position="absolute",b.style.left="".concat(d-this.circleRadius,"px"),b.style.top="".concat(h-this.circleRadius,"px"),b.style.cursor="move",E.classList.add("visual-console-item-line-circle","visual-console-item-line-circle-end"),E.style.width="".concat(2*this.circleRadius,"px"),E.style.height="".concat(2*this.circleRadius,"px"),E.style.borderRadius="50%",E.style.backgroundColor="".concat(u),E.style.position="absolute",E.style.left="".concat(m-this.circleRadius,"px"),E.style.top="".concat(f-this.circleRadius,"px"),E.style.cursor="move",null!==t.parentElement){for(var x=t.parentElement.getElementsByClassName("visual-console-item-line-circle");x.length>0;)(C=x.item(0))&&C.remove();t.parentElement.appendChild(b),t.parentElement.appendChild(E)}this.initStartPositionMovementListener(b,this.elementRef.parentElement),this.initEndPositionMovementListener(E,this.elementRef.parentElement)}else if(this.moveMode)this.stopStartPositionMovementListener();else if(this.stopStartPositionMovementListener(),null!==t.parentElement)for(x=t.parentElement.getElementsByClassName("visual-console-item-line-circle");x.length>0;){var C;(C=x.item(0))&&C.remove()}},n.extractBoxSizeAndPosition=function(t,e){return{width:Math.abs(t.x-e.x),height:Math.abs(t.y-e.y),x:Math.min(t.x,e.x),y:Math.min(t.y,e.y)}},n.prototype.move=function(e,n){t.prototype.moveElement.call(this,e,n);var r=this.props.startPosition.x-this.props.endPosition.x<=0,i=this.props.startPosition.y-this.props.endPosition.y<=0,o={x:r?e:this.props.width+e,y:i?n:this.props.height+n},s={x:r?this.props.width+e:e,y:i?this.props.height+n:n};this.props=A(A({},this.props),{startPosition:o,endPosition:s})},n.prototype.remove=function(){this.stopStartPositionMovementListener(),t.prototype.remove.call(this)},n.prototype.onLineMovementFinished=function(t){var e=this.lineMovedEventManager.on(t);return this.lineMovedEventDisposables.push(e),e},n}(n.ZP),L=S,R=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),D=function(){return D=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},D.apply(this,arguments)},N="http://www.w3.org/2000/svg";function B(t){return D(D({},O(t)),{type:21,viewportOffsetX:0,viewportOffsetY:0,labelEnd:(0,e.JW)(t.labelEnd,""),labelEndWidth:(0,e.I1)(t.labelEndWidth,0),labelEndHeight:(0,e.I1)(t.labelEndHeight,0),labelStart:(0,e.JW)(t.labelStart,""),labelStartWidth:(0,e.I1)(t.labelStartWidth,0),labelStartHeight:(0,e.I1)(t.labelStartHeight,0)})}var z=function(t){function n(n,r){var i=t.call(this,D({},n),D({},r))||this;return i.debouncedStartPositionMovementSave=(0,e.Ds)(50,(function(t,e){i.isMoving=!1;var n={x:t,y:e};i.render(),i.lineMovedEventManager.emit({item:i,startPosition:n,endPosition:i.props.endPosition})})),i.debouncedEndPositionMovementSave=(0,e.Ds)(50,(function(t,e){i.isMoving=!1;var n={x:t,y:e};i.render(),i.lineMovedEventManager.emit({item:i,endPosition:n,startPosition:i.props.startPosition})})),i.render(),i}return R(n,t),n.prototype.updateDomElement=function(e){null!=this.itemProps.ratio&&(this.itemProps.x/=this.itemProps.ratio,this.itemProps.y/=this.itemProps.ratio),t.prototype.updateDomElement.call(this,e);var n=this.props,r=n.x,i=n.y,o=n.lineWidth,s=n.viewportOffsetX,a=n.viewportOffsetY,l=n.startPosition,c=n.endPosition,p=n.color,u=n.labelEnd,d=n.labelStart,h=n.labelEndWidth,m=n.labelEndHeight,f=n.labelStartWidth,_=n.labelStartHeight;null!=this.itemProps.ratio&&(this.itemProps.x*=this.itemProps.ratio,this.itemProps.y*=this.itemProps.ratio);var y,v,g=e.getElementsByTagName("svg");if(g.length>0){if(null!=(v=g.item(0))){for(var b=v.getElementsByTagNameNS(N,"line"),E=v.getElementsByTagNameNS(N,"g");E.length>0;)E[0].remove();b.length>0&&(y=b.item(0))}if(null!=v&&null!=y){var w=25,M=l.x-r+o/2+s/2,x=l.y-i+o/2+a/2,C=c.x-r+o/2+s/2,k=c.y-i+o/2+a/2,P=l.x-r+o/2+s/2,I=l.y-i+o/2+a/2,A=c.x-r+o/2+s/2,O=c.y-i+o/2+a/2,T=180*Math.atan2(k-x,C-M)/Math.PI;if(f<=0&&(b=d.split("<br>"),f=0,b.forEach((function(t){t.length>f&&(f=10*t.length)})),_<=0&&(_=25*b.length)),h<=0&&(b=u.split("<br>"),h=0,b.forEach((function(t){t.length>h&&(h=10*t.length)})),m<=0&&(m=25*b.length)),P<A&&(P+=w,A-=w+h),P>A&&(P-=w+f,A+=w),I<O&&(I+=w,O-=w+m),I>O&&(I-=w+_,O+=w),void 0===p&&(p="#000"),null!==e.parentElement){for(var S=e.parentElement.getElementsByClassName("vc-item-nl-label");S.length>0;){var L=S.item(0);L&&L.remove()}for(var R=e.parentElement.getElementsByClassName("vc-item-nl-arrow");R.length>0;){var D=R.item(0);D&&D.remove()}}var B=2*o,z=M+(C-M)/2-B,W=x+(k-x)/2-B,j=document.createElement("div");j.classList.add("vc-item-nl-arrow"),j.style.position="absolute",j.style.border="".concat(B,"px solid transparent"),j.style.borderBottom="".concat(B,"px solid ").concat(p),j.style.left="".concat(z,"px"),j.style.top="".concat(W,"px"),j.style.transform="rotate(".concat(90+T,"deg)");var H=document.createElement("div");if(H.classList.add("vc-item-nl-arrow"),H.style.position="absolute",H.style.border="".concat(B,"px solid transparent"),H.style.borderBottom="".concat(B,"px solid ").concat(p),H.style.left="".concat(z,"px"),H.style.top="".concat(W,"px"),H.style.transform="rotate(".concat(270+T,"deg)"),null!==e.parentElement&&(e.parentElement.appendChild(j),e.parentElement.appendChild(H)),""!=d){var V=document.createElement("div");try{V.innerHTML=d,V.style.position="absolute",V.style.left="".concat(P,"px"),V.style.top="".concat(I,"px"),V.style.width="".concat(f,"px"),V.style.border="2px solid ".concat(p),V.classList.add("vc-item-nl-label","label-start")}catch(t){console.error(t)}null!==e.parentElement&&e.parentElement.appendChild(V)}if(""!=u){var G=document.createElement("div");try{G.innerHTML=u,G.style.position="absolute",G.style.left="".concat(A,"px"),G.style.top="".concat(O,"px"),G.style.width="".concat(h,"px"),G.style.border="2px solid ".concat(p),G.classList.add("vc-item-nl-label","label-end")}catch(t){console.error(t)}null!==e.parentElement&&e.parentElement.appendChild(G)}}}},n}(L),W=z,j=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),H=function(){return H=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},H.apply(this,arguments)};function V(t){if(("string"!=typeof t.imageSrc||0===t.imageSrc.length)&&null===t.encodedHtml)throw new TypeError("invalid image src.");if(null===(0,e.I1)(t.groupId,null))throw new TypeError("invalid group Id.");var r=(0,e.gx)(t.showStatistics),i=r?function(t){return(0,e.VJ)(t.html)?(0,e.VJ)(t.encodedHtml)?null:(0,e.NV)(t.encodedHtml):t.html}(t):null;return H(H(H({},(0,n.TB)(t)),{type:11,groupId:parseInt(t.groupId),imageSrc:(0,e.JW)(t.imageSrc,null),statusImageSrc:(0,e.JW)(t.statusImageSrc,null),showStatistics:r,html:i}),(0,e.bs)(t))}var G=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return j(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="group",this.props.showStatistics||null===this.props.statusImageSrc?this.props.showStatistics&&null!=this.props.html&&(t.style.backgroundImage="none",t.innerHTML=this.props.html):(t.style.backgroundImage="url(".concat(this.props.statusImageSrc,")"),t.style.backgroundRepeat="no-repeat",t.style.backgroundSize="contain",t.style.backgroundPosition="center"),t},e.prototype.updateDomElement=function(t){this.props.showStatistics||null===this.props.statusImageSrc?this.props.showStatistics&&null!=this.props.html&&(t.style.backgroundImage="none",t.innerHTML=this.props.html):(t.style.backgroundImage="url(".concat(this.props.statusImageSrc,")"),t.style.backgroundRepeat="no-repeat",t.style.backgroundSize="contain",t.style.backgroundPosition="center",t.innerHTML="")},e}(n.ZP),U=G,F=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),K=function(){return K=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},K.apply(this,arguments)},Z=function(t){switch(t){case"analogic":case"digital":return t;default:return"analogic"}},q=function(t){switch(t){case"datetime":case"time":return t;default:return"datetime"}};function J(t){if("string"!=typeof t.clockTimezone||0===t.clockTimezone.length)throw new TypeError("invalid timezone.");return K(K(K({},(0,n.TB)(t)),{type:19,clockType:Z(t.clockType),clockFormat:q(t.clockFormat),clockTimezone:t.clockTimezone,clockTimezoneOffset:(0,e.I1)(t.clockTimezoneOffset,0),showClockTimezone:(0,e.gx)(t.showClockTimezone),color:(0,e.JW)(t.color,null)}),(0,e.bs)(t))}var Y=function(t){function n(e,r){var i=t.call(this,e,r)||this;return i.intervalRef=null,i.startTick((function(){i.childElementRef.innerHTML=i.createClock().innerHTML}),"analogic"===i.props.clockType?2e4:n.TICK_INTERVAL),i}return F(n,t),n.prototype.stopTick=function(){null!==this.intervalRef&&(window.clearInterval(this.intervalRef),this.intervalRef=null)},n.prototype.startTick=function(t,e){void 0===e&&(e=n.TICK_INTERVAL),this.stopTick(),this.intervalRef=window.setInterval(t,e)},n.prototype.createDomElement=function(){return this.createClock()},n.prototype.updateDomElement=function(e){var n=this.getElementSize(this.props.width,this.props.height),r=n.width,i=n.height;"digital"===this.props.clockType?(!1===this.meta.isBeingResized&&t.prototype.resizeElement.call(this,this.props.width,this.props.height),e.classList.replace("analogic-clock","digital-clock")):(!1===this.meta.isBeingResized&&t.prototype.resizeElement.call(this,r,i),e.classList.replace("digital-clock","analogic-clock")),e.innerHTML=this.createDomElement().innerHTML},n.prototype.remove=function(){this.stopTick(),t.prototype.remove.call(this)},n.prototype.resizeElement=function(e,n){var r=this.getElementSize(e,n),i=r.width,o=r.height;"digital"===this.props.clockType?t.prototype.resizeElement.call(this,e,n):t.prototype.resizeElement.call(this,i,o)},n.prototype.createClock=function(){switch(this.props.clockType){case"analogic":return this.createAnalogicClock();case"digital":return this.createDigitalClock();default:throw new Error("invalid clock type.")}},n.prototype.createAnalogicClock=function(){var t="http://www.w3.org/2000/svg",n="#FFFFF0",r="#242124",i="#242124",o="#525252",s="#DC143C",a=this.getElementSize(),l=a.width,c=a.height,p=10*l/100,u=document.createElement("div");u.className="analogic-clock",u.style.width="".concat(l,"px"),u.style.height="".concat(c,"px");var d=document.createElementNS(t,"svg");d.setAttribute("viewBox","0 0 100 100");var h=document.createElementNS(t,"g");h.setAttribute("class","clockface");var m=document.createElementNS(t,"circle");m.setAttribute("cx","50"),m.setAttribute("cy","50"),m.setAttribute("r","48"),m.setAttribute("fill",n),m.setAttribute("stroke","#242124"),m.setAttribute("stroke-width","2"),m.setAttribute("stroke-linecap","round"),h.append(m);var f=this.getHumanTimezone();if(f.length>0){var _=document.createElementNS(t,"text");_.setAttribute("text-anchor","middle"),_.setAttribute("font-size","8"),_.setAttribute("transform","translate(30 50) rotate(90)"),_.setAttribute("fill",r),_.textContent=f,h.append(_)}var y=document.createElementNS(t,"g");y.setAttribute("class","marks");var v=document.createElementNS(t,"g");v.setAttribute("class","mark"),v.setAttribute("transform","translate(50 50)");var g=document.createElementNS(t,"line");g.setAttribute("x1","36"),g.setAttribute("y1","0"),g.setAttribute("x2","46"),g.setAttribute("y2","0"),g.setAttribute("stroke",r),g.setAttribute("stroke-width","5");var b=document.createElementNS(t,"line");b.setAttribute("x1","36"),b.setAttribute("y1","0"),b.setAttribute("x2","46"),b.setAttribute("y2","0"),b.setAttribute("stroke",n),b.setAttribute("stroke-width","1"),v.append(g,b),y.append(v);for(var E=1;E<60;E++){var w=document.createElementNS(t,"line");w.setAttribute("y1","0"),w.setAttribute("y2","0"),w.setAttribute("stroke",r),w.setAttribute("transform","translate(50 50) rotate(".concat(6*E,")")),E%5==0?(w.setAttribute("x1","38"),w.setAttribute("x2","46"),w.setAttribute("stroke-width",E%15==0?"2":"1")):(w.setAttribute("x1","42"),w.setAttribute("x2","46"),w.setAttribute("stroke-width","0.5")),y.append(w)}var M=document.createElementNS(t,"g");M.setAttribute("class","hour-hand"),M.setAttribute("transform","translate(50 50)");var x=document.createElementNS(t,"line");x.setAttribute("class","hour-hand-a"),x.setAttribute("x1","0"),x.setAttribute("y1","0"),x.setAttribute("x2","30"),x.setAttribute("y2","0"),x.setAttribute("stroke",o),x.setAttribute("stroke-width","4"),x.setAttribute("stroke-linecap","round");var C=document.createElementNS(t,"line");C.setAttribute("class","hour-hand-b"),C.setAttribute("x1","0"),C.setAttribute("y1","0"),C.setAttribute("x2","29.9"),C.setAttribute("y2","0"),C.setAttribute("stroke",i),C.setAttribute("stroke-width","3.1"),C.setAttribute("stroke-linecap","round"),M.append(x,C);var k=document.createElementNS(t,"g");k.setAttribute("class","minute-hand"),k.setAttribute("transform","translate(50 50)");var P=document.createElementNS(t,"line");P.setAttribute("class","minute-hand-a"),P.setAttribute("x1","0"),P.setAttribute("y1","0"),P.setAttribute("x2","40"),P.setAttribute("y2","0"),P.setAttribute("stroke",o),P.setAttribute("stroke-width","2"),P.setAttribute("stroke-linecap","round");var I=document.createElementNS(t,"line");I.setAttribute("class","minute-hand-b"),I.setAttribute("x1","0"),I.setAttribute("y1","0"),I.setAttribute("x2","39.9"),I.setAttribute("y2","0"),I.setAttribute("stroke",i),I.setAttribute("stroke-width","1.5"),I.setAttribute("stroke-linecap","round");var A=document.createElementNS(t,"circle");A.setAttribute("r","3"),A.setAttribute("fill",i),k.append(P,I,A);var O=document.createElementNS(t,"g");O.setAttribute("class","second-hand"),O.setAttribute("transform","translate(50 50)");var T=document.createElementNS(t,"line");T.setAttribute("x1","0"),T.setAttribute("y1","0"),T.setAttribute("x2","46"),T.setAttribute("y2","0"),T.setAttribute("stroke",s),T.setAttribute("stroke-width","1"),T.setAttribute("stroke-linecap","round");var S=document.createElementNS(t,"circle");S.setAttribute("r","2"),S.setAttribute("fill",s),O.append(T,S);var L=document.createElementNS(t,"circle");L.setAttribute("cx","50"),L.setAttribute("cy","50"),L.setAttribute("r","0.3"),L.setAttribute("fill",i);var R=this.getOriginDate(),D=R.getSeconds(),N=R.getMinutes(),B=6*D,z=6*N+D/60*6,W=30*R.getHours()+N/60*30;if(M.setAttribute("transform","translate(50 50) rotate(".concat(W,")")),k.setAttribute("transform","translate(50 50) rotate(".concat(z,")")),O.setAttribute("transform","translate(50 50) rotate(".concat(B,")")),d.append(h,y,M,k,O,L),d.setAttribute("transform","rotate(-90)"),u.innerHTML="\n <style>\n @keyframes rotate-hour {\n from {\n ".concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(W,"deg)")).join("\n"),"\n }\n to {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(W+360,"deg)")).join("\n"),"\n }\n }\n @keyframes rotate-minute {\n from {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(z,"deg)")).join("\n"),"\n }\n to {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(z+360,"deg)")).join("\n"),"\n }\n }\n @keyframes rotate-second {\n from {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(B,"deg)")).join("\n"),"\n }\n to {\n ").concat((0,e.OR)("transform","translate(50px, 50px) rotate(".concat(B+360,"deg)")).join("\n"),"\n }\n }\n </style>\n "),u.append(d),"datetime"===this.props.clockFormat){var j=document.createElement("span");j.className="date",j.textContent=(0,e.rN)(R,"default"),j.style.fontSize="".concat(p,"px"),this.props.color&&(j.style.color=this.props.color),u.append(j)}return u},n.prototype.createDigitalClock=function(){var t=document.createElement("div");t.className="digital-clock";var n=this.getElementSize(),r=n.width,i=n.height,o=r;i<r&&(o=i);var s=6/this.props.clockTimezone.length,a=35*o/100,l=17.5*o/100,c=Math.min(35*s*o/100,r/100*10),p=this.getOriginDate();if("datetime"===this.props.clockFormat){var u=document.createElement("span");u.className="date",u.textContent=(0,e.rN)(p,"default"),u.style.fontSize="".concat(l,"px"),this.props.color&&(u.style.color=this.props.color),t.append(u)}var d=document.createElement("span");d.className="time",d.textContent=(0,e.bc)(p),d.style.fontSize="".concat(a,"px"),this.props.color&&(d.style.color=this.props.color),t.append(d);var h=this.getHumanTimezone();if(h.length>0){var m=document.createElement("span");m.className="timezone",m.textContent=h,m.style.fontSize="".concat(c,"px"),this.props.color&&(m.style.color=this.props.color),t.append(m)}return t},n.prototype.getOriginDate=function(t){void 0===t&&(t=null);var e=t||new Date,n=1e3*this.props.clockTimezoneOffset,r=60*e.getTimezoneOffset()*1e3,i=e.getTime()+n+r;return new Date(i)},n.prototype.getHumanTimezone=function(t){void 0===t&&(t=this.props.clockTimezone);var e=t.split("/")[1];return(void 0===e?"":e).replace("_"," ")},n.prototype.getElementSize=function(t,e){switch(void 0===t&&(t=this.props.width),void 0===e&&(e=this.props.height),this.props.clockType){case"analogic":var n=100;t>0&&e>0?n=Math.min(t,e):t>0?n=t:e>0&&(n=e);var r=0;return"datetime"===this.props.clockFormat&&(r=e/8),{width:n,height:n+r};case"digital":return t>0&&e>0?e=t/2<e?t/2:e:t>0?e=t/2:e>0?t=2*e:(t=100,e=50),{width:t,height:e};default:throw new Error("invalid clock type.")}},n.TICK_INTERVAL=1e3,n}(n.ZP),X=Y,Q=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),$=function(){return $=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},$.apply(this,arguments)};function tt(t){return $($({},(0,n.TB)(t)),{type:12,label:null,isLinkEnabled:!1,parentId:null,aclGroupId:null,borderWidth:(0,e.I1)(t.borderWidth,0),borderColor:(0,e.JW)(t.borderColor,null),fillColor:(0,e.JW)(t.fillColor,null),fillTransparent:t.fillTransparent})}var et=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Q(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");if(t.className="box",t.style.boxSizing="border-box",this.props.fillTransparent?t.style.backgroundColor="transparent":this.props.fillColor&&(t.style.backgroundColor=this.props.fillColor),this.props.borderWidth>0){t.style.borderStyle="solid";var e=Math.min(this.props.width,this.props.height)/2,n=Math.min(this.props.borderWidth,e);t.style.borderWidth="".concat(n,"px"),this.props.borderColor&&(t.style.borderColor=this.props.borderColor)}return t},e.prototype.updateDomElement=function(t){if(this.props.fillTransparent?t.style.backgroundColor="transparent":this.props.fillColor&&(t.style.backgroundColor=this.props.fillColor),this.props.borderWidth>0){t.style.borderStyle="solid";var e=Math.min(this.props.width,this.props.height)/2,n=Math.min(this.props.borderWidth,e);t.style.borderWidth="".concat(n,"px"),this.props.borderColor&&(t.style.borderColor=this.props.borderColor)}},e}(n.ZP),nt=et,rt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),it=function(){return it=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},it.apply(this,arguments)};function ot(t){return it(it(it({},(0,n.TB)(t)),{type:4}),(0,e.bs)(t))}var st=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return rt(e,t),e.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="label",t.innerHTML=this.getLabelWithMacrosReplaced(),t},e.prototype.createLabelDomElement=function(){var t=document.createElement("div");return t.className="visual-console-item-label",t},e}(n.ZP),at=st,lt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ct=function(){return ct=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},ct.apply(this,arguments)},pt=function(t){switch(t){case"string":case"image":return t;default:return"string"}};function ut(t){if("string"!=typeof t.value||0===t.value.length)throw new TypeError("invalid value");var r=function(t){switch(t){case"none":case"avg":case"max":case"min":return t;default:return"none"}}(t.processValue);return ct(ct(ct(ct(ct({},(0,n.TB)(t)),{type:2,valueType:pt(t.valueType),value:t.value}),"none"===r?{processValue:r}:{processValue:r,period:(0,e.I1)(t.period,0)}),(0,e.MH)(t)),(0,e.bs)(t))}var dt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return lt(n,t),n.prototype.createDomElement=function(){var t=document.createElement("div");if(t.className="simple-value",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(t.style.opacity="0.2"),"image"===this.props.valueType){var n=document.createElement("img");n.src=this.props.value,t.append(n)}else{var r=this.props.value,i=this.getLabelWithMacrosReplaced();i.length>0&&(r=(0,e.No)([{macro:/\(?_VALUE_\)?/i,value:r}],i)),t.innerHTML=r}return t},n.prototype.createLabelDomElement=function(){var t=document.createElement("div");return t.className="visual-console-item-label",t},n}(n.ZP),ht=dt,mt=__webpack_require__(280),ft=Math.PI,_t=2*ft,yt=1e-6,vt=_t-yt;function gt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function bt(){return new gt}gt.prototype=bt.prototype={constructor:gt,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,o){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(t,e,n,r,i){t=+t,e=+e,n=+n,r=+r,i=+i;var o=this._x1,s=this._y1,a=n-t,l=r-e,c=o-t,p=s-e,u=c*c+p*p;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(u>yt)if(Math.abs(p*a-l*c)>yt&&i){var d=n-o,h=r-s,m=a*a+l*l,f=d*d+h*h,_=Math.sqrt(m),y=Math.sqrt(u),v=i*Math.tan((ft-Math.acos((m+u-f)/(2*_*y)))/2),g=v/y,b=v/_;Math.abs(g-1)>yt&&(this._+="L"+(t+g*c)+","+(e+g*p)),this._+="A"+i+","+i+",0,0,"+ +(p*d>c*h)+","+(this._x1=t+b*a)+","+(this._y1=e+b*l)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,o){t=+t,e=+e,o=!!o;var s=(n=+n)*Math.cos(r),a=n*Math.sin(r),l=t+s,c=e+a,p=1^o,u=o?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+l+","+c:(Math.abs(this._x1-l)>yt||Math.abs(this._y1-c)>yt)&&(this._+="L"+l+","+c),n&&(u<0&&(u=u%_t+_t),u>vt?this._+="A"+n+","+n+",0,1,"+p+","+(t-s)+","+(e-a)+"A"+n+","+n+",0,1,"+p+","+(this._x1=l)+","+(this._y1=c):u>yt&&(this._+="A"+n+","+n+",0,"+ +(u>=ft)+","+p+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Et=bt;function wt(t){return function(){return t}}var Mt=Math.abs,xt=Math.atan2,Ct=Math.cos,kt=Math.max,Pt=Math.min,It=Math.sin,At=Math.sqrt,Ot=1e-12,Tt=Math.PI,St=Tt/2,Lt=2*Tt;function Rt(t){return t>1?0:t<-1?Tt:Math.acos(t)}function Dt(t){return t>=1?St:t<=-1?-St:Math.asin(t)}function Nt(t){return t.innerRadius}function Bt(t){return t.outerRadius}function zt(t){return t.startAngle}function Wt(t){return t.endAngle}function jt(t){return t&&t.padAngle}function Ht(t,e,n,r,i,o,s,a){var l=n-t,c=r-e,p=s-i,u=a-o,d=u*l-p*c;if(!(d*d<Ot))return[t+(d=(p*(e-o)-u*(t-i))/d)*l,e+d*c]}function Vt(t,e,n,r,i,o,s){var a=t-n,l=e-r,c=(s?o:-o)/At(a*a+l*l),p=c*l,u=-c*a,d=t+p,h=e+u,m=n+p,f=r+u,_=(d+m)/2,y=(h+f)/2,v=m-d,g=f-h,b=v*v+g*g,E=i-o,w=d*f-m*h,M=(g<0?-1:1)*At(kt(0,E*E*b-w*w)),x=(w*g-v*M)/b,C=(-w*v-g*M)/b,k=(w*g+v*M)/b,P=(-w*v+g*M)/b,I=x-_,A=C-y,O=k-_,T=P-y;return I*I+A*A>O*O+T*T&&(x=k,C=P),{cx:x,cy:C,x01:-p,y01:-u,x11:x*(i/E-1),y11:C*(i/E-1)}}var Gt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Ut=function(){return Ut=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},Ut.apply(this,arguments)};function Ft(t){switch(t){case"progress-bar":case"bubble":case"circular-progress-bar":case"circular-progress-bar-alt":return t;default:case 3:return"progress-bar";case 9:return"bubble";case 15:return"circular-progress-bar";case 16:return"circular-progress-bar-alt"}}function Kt(t){switch(t){case"percent":case"value":return t;default:return"percent"}}function Zt(t){return Ut(Ut(Ut(Ut({},(0,n.TB)(t)),{type:3,percentileType:Ft(t.percentileType||t.type),valueType:Kt(t.valueType),minValue:(0,e.I1)(t.minValue,null),maxValue:(0,e.I1)(t.maxValue,null),color:(0,e.JW)(t.color,null),labelColor:(0,e.JW)(t.labelColor,null),value:(0,e.xn)(t.value,null),unit:(0,e.JW)(t.unit,null)}),(0,e.MH)(t)),(0,e.bs)(t))}var qt="http://www.w3.org/2000/svg",Jt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Gt(e,t),e.prototype.createDomElement=function(){var t,e={background:"#000000",progress:this.props.color||"#000000",text:this.props.labelColor||"#bcbcbc"},n=this.getProgress(),r=document.createElement("div");null!=this.props.value&&(t=Intl?Intl.NumberFormat("en-EN").format(this.props.value):this.props.value);var i=document.createElementNS(qt,"svg");switch(this.props.percentileType){case"progress-bar":var o=document.createElementNS(qt,"rect");o.setAttribute("fill",e.background),o.setAttribute("fill-opacity","0.5"),o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.setAttribute("rx","5"),o.setAttribute("ry","5");var s=document.createElementNS(qt,"rect");s.setAttribute("fill",e.progress),s.setAttribute("fill-opacity","1"),s.setAttribute("width","".concat(n,"%")),s.setAttribute("height","100%"),s.setAttribute("rx","5"),s.setAttribute("ry","5"),(u=document.createElementNS(qt,"text")).setAttribute("text-anchor","middle"),u.setAttribute("alignment-baseline","middle"),u.setAttribute("font-size","15"),u.setAttribute("font-family","lato"),u.setAttribute("font-weight","bold"),u.setAttribute("text-anchor","middle"),u.setAttribute("alignment-baseline","middle"),u.setAttribute("x","50%"),u.setAttribute("y","50%"),u.setAttribute("fill",e.text),"value"===this.props.valueType?(u.style.fontSize="6pt",u.textContent=this.props.unit?"".concat(t," ").concat(this.props.unit):"".concat(t)):u.textContent="".concat(n,"%"),i.setAttribute("width","100%"),i.setAttribute("height","100%"),i.append(o,s,u);break;case"bubble":case"circular-progress-bar":case"circular-progress-bar-alt":if(i.setAttribute("viewBox","0 0 100 100"),"bubble"===this.props.percentileType)(a=document.createElementNS(qt,"circle")).setAttribute("transform","translate(50 50)"),a.setAttribute("fill",e.background),a.setAttribute("fill-opacity","0.5"),a.setAttribute("r","50"),(l=document.createElementNS(qt,"circle")).setAttribute("transform","translate(50 50)"),l.setAttribute("fill",e.progress),l.setAttribute("fill-opacity","1"),l.setAttribute("r","".concat(n/2)),i.append(a,l);else{var a,l,c={innerRadius:"circular-progress-bar"===this.props.percentileType?30:0,outerRadius:50,startAngle:0,endAngle:2*Math.PI},p=function(){var t=Nt,e=Bt,n=wt(0),r=null,i=zt,o=Wt,s=jt,a=null;function l(){var l,c,p=+t.apply(this,arguments),u=+e.apply(this,arguments),d=i.apply(this,arguments)-St,h=o.apply(this,arguments)-St,m=Mt(h-d),f=h>d;if(a||(a=l=Et()),u<p&&(c=u,u=p,p=c),u>Ot)if(m>Lt-Ot)a.moveTo(u*Ct(d),u*It(d)),a.arc(0,0,u,d,h,!f),p>Ot&&(a.moveTo(p*Ct(h),p*It(h)),a.arc(0,0,p,h,d,f));else{var _,y,v=d,g=h,b=d,E=h,w=m,M=m,x=s.apply(this,arguments)/2,C=x>Ot&&(r?+r.apply(this,arguments):At(p*p+u*u)),k=Pt(Mt(u-p)/2,+n.apply(this,arguments)),P=k,I=k;if(C>Ot){var A=Dt(C/p*It(x)),O=Dt(C/u*It(x));(w-=2*A)>Ot?(b+=A*=f?1:-1,E-=A):(w=0,b=E=(d+h)/2),(M-=2*O)>Ot?(v+=O*=f?1:-1,g-=O):(M=0,v=g=(d+h)/2)}var T=u*Ct(v),S=u*It(v),L=p*Ct(E),R=p*It(E);if(k>Ot){var D,N=u*Ct(g),B=u*It(g),z=p*Ct(b),W=p*It(b);if(m<Tt&&(D=Ht(T,S,z,W,N,B,L,R))){var j=T-D[0],H=S-D[1],V=N-D[0],G=B-D[1],U=1/It(Rt((j*V+H*G)/(At(j*j+H*H)*At(V*V+G*G)))/2),F=At(D[0]*D[0]+D[1]*D[1]);P=Pt(k,(p-F)/(U-1)),I=Pt(k,(u-F)/(U+1))}}M>Ot?I>Ot?(_=Vt(z,W,T,S,u,I,f),y=Vt(N,B,L,R,u,I,f),a.moveTo(_.cx+_.x01,_.cy+_.y01),I<k?a.arc(_.cx,_.cy,I,xt(_.y01,_.x01),xt(y.y01,y.x01),!f):(a.arc(_.cx,_.cy,I,xt(_.y01,_.x01),xt(_.y11,_.x11),!f),a.arc(0,0,u,xt(_.cy+_.y11,_.cx+_.x11),xt(y.cy+y.y11,y.cx+y.x11),!f),a.arc(y.cx,y.cy,I,xt(y.y11,y.x11),xt(y.y01,y.x01),!f))):(a.moveTo(T,S),a.arc(0,0,u,v,g,!f)):a.moveTo(T,S),p>Ot&&w>Ot?P>Ot?(_=Vt(L,R,N,B,p,-P,f),y=Vt(T,S,z,W,p,-P,f),a.lineTo(_.cx+_.x01,_.cy+_.y01),P<k?a.arc(_.cx,_.cy,P,xt(_.y01,_.x01),xt(y.y01,y.x01),!f):(a.arc(_.cx,_.cy,P,xt(_.y01,_.x01),xt(_.y11,_.x11),!f),a.arc(0,0,p,xt(_.cy+_.y11,_.cx+_.x11),xt(y.cy+y.y11,y.cx+y.x11),f),a.arc(y.cx,y.cy,P,xt(y.y11,y.x11),xt(y.y01,y.x01),!f))):a.arc(0,0,p,E,b,f):a.lineTo(L,R)}else a.moveTo(0,0);if(a.closePath(),l)return a=null,l+""||null}return l.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +o.apply(this,arguments))/2-Tt/2;return[Ct(r)*n,It(r)*n]},l.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:wt(+e),l):t},l.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:wt(+t),l):e},l.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:wt(+t),l):n},l.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:wt(+t),l):r},l.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:wt(+t),l):i},l.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:wt(+t),l):o},l.padAngle=function(t){return arguments.length?(s="function"==typeof t?t:wt(+t),l):s},l.context=function(t){return arguments.length?(a=null==t?null:t,l):a},l}();(a=document.createElementNS(qt,"path")).setAttribute("transform","translate(50 50)"),a.setAttribute("fill",e.background),a.setAttribute("fill-opacity","0.5"),a.setAttribute("d","".concat(p(c))),(l=document.createElementNS(qt,"path")).setAttribute("transform","translate(50 50)"),l.setAttribute("fill",e.progress),l.setAttribute("fill-opacity","1"),l.setAttribute("d","".concat(p(Ut(Ut({},c),{endAngle:c.endAngle*(n/100)})))),i.append(a,l)}var u;if((u=document.createElementNS(qt,"text")).setAttribute("text-anchor","middle"),u.setAttribute("alignment-baseline","middle"),u.setAttribute("font-size","16"),u.setAttribute("font-family","lato"),u.setAttribute("font-weight","bold"),u.setAttribute("fill",e.text),"value"===this.props.valueType&&null!=this.props.value)if(this.props.unit&&this.props.unit.length>0){var d=document.createElementNS(qt,"tspan");d.setAttribute("x","0"),d.setAttribute("dy","1em"),d.textContent="".concat(t),d.style.fontSize="8pt";var h=document.createElementNS(qt,"tspan");h.setAttribute("x","0"),h.setAttribute("dy","1em"),h.textContent="".concat(this.props.unit),h.style.fontSize="8pt",u.append(d,h),u.setAttribute("transform","translate(50 33)")}else u.textContent="".concat(t),u.style.fontSize="8pt",u.setAttribute("transform","translate(50 50)");else u.textContent="".concat(n,"%"),u.setAttribute("transform","translate(50 50)");i.append(u)}return!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||i.setAttribute("opacity","0.2"),null!==i&&r.append(i),r},e.prototype.updateDomElement=function(t){!1===this.meta.isBeingResized&&this.resizeElement(this.props.width,this.props.height),t.innerHTML=this.createDomElement().innerHTML},e.prototype.resizeElement=function(e,n){"progress-bar"===this.props.percentileType?t.prototype.resizeElement.call(this,e,35):t.prototype.resizeElement.call(this,e,e)},e.prototype.resize=function(e){this.resizeElement(e,e);var n=this.props.maxValue||0;"progress-bar"===this.props.percentileType&&(n=35),t.prototype.setProps.call(this,Ut(Ut({},this.props),{width:e,height:n}))},e.prototype.getProgress=function(){var t=this.props.minValue||0,e=this.props.maxValue||100,n=null==this.props.value?0:this.props.value;return n<=t?0:n>=e?100:Math.trunc((n-t)/(e-t)*100)},e}(n.ZP),Yt=Jt,Xt=__webpack_require__(369),Qt=__webpack_require__(709),$t=__webpack_require__(600),te=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ee=function(){return ee=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},ee.apply(this,arguments)};function ne(t){if(null!==t.imageSrc){if("string"!=typeof t.statusImageSrc||0===t.imageSrc.statusImageSrc)throw new TypeError("invalid status image src.")}else if((0,e.VJ)(t.encodedTitle))throw new TypeError("missing encode tittle content.");if(null===(0,e.I1)(t.serviceId,null))throw new TypeError("invalid service id.");return ee(ee({},(0,n.TB)(t)),{type:10,serviceId:t.serviceId,imageSrc:(0,e.JW)(t.imageSrc,null),statusImageSrc:(0,e.JW)(t.statusImageSrc,null),encodedTitle:(0,e.JW)(t.encodedTitle,null)})}var re=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return te(n,t),n.prototype.createDomElement=function(){var t=document.createElement("div");return t.className="service",null!==this.props.statusImageSrc?(t.style.background="url(".concat(this.props.statusImageSrc,") no-repeat"),t.style.backgroundSize="contain",t.style.backgroundPosition="center",null!==this.props.encodedTitle&&(t.className="service image forced_title",t.setAttribute("data-use_title_for_force_title","1"),t.setAttribute("data-title",(0,e.NV)(this.props.encodedTitle)))):null!==this.props.encodedTitle&&(t.innerHTML=(0,e.NV)(this.props.encodedTitle)),t},n.prototype.updateDomElement=function(t){null!==this.props.statusImageSrc?(t.style.background="url(".concat(this.props.statusImageSrc,") no-repeat"),t.style.backgroundSize="contain",t.style.backgroundPosition="center",null!==this.props.encodedTitle&&(t.className="service image forced_title",t.setAttribute("data-use_title_for_force_title","1"),t.setAttribute("data-title",(0,e.NV)(this.props.encodedTitle))),t.innerHTML=""):null!==this.props.encodedTitle&&(t.innerHTML=(0,e.NV)(this.props.encodedTitle))},n}(n.ZP),ie=re,oe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),se=function(){return se=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},se.apply(this,arguments)};function ae(t){return se(se(se({},(0,n.TB)(t)),{type:22,value:(0,e.I1)(t.value,0),status:(0,e.VJ)(t.status)?"#B2B2B2":t.status,titleColor:(0,e.VJ)(t.titleColor)?"#3f3f3f":t.titleColor,title:(0,e.VJ)(t.title)?"":t.title,titleModule:(0,e.VJ)(t.titleModule)?"":t.titleModule,thresholds:(0,e.VJ)(t.thresholds)?"":t.thresholds,minMaxValue:(0,e.VJ)(t.minMaxValue)?"":t.minMaxValue,odometerType:(0,e.VJ)(t.odometerType)?"percent":t.odometerType}),(0,e.MH)(t))}var le,ce=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return oe(e,t),e.prototype.createDomElement=function(){var t="",e="",n="",r="";if(""!==this.props.thresholds){var i=JSON.parse(this.props.thresholds);null!==i&&(0==i.min_warning&&0==i.max_warning||(t=this.getCoords(i.min_warning,this.props.width/2),e=0==i.max_warning?this.getCoords(100,this.props.width/2):this.getCoords(i.max_warning,this.props.width/2)),0==i.min_critical&&0==i.max_critical||(n=this.getCoords(i.min_critical,this.props.width/2),r=0==i.max_critical?this.getCoords(100,this.props.width/2):this.getCoords(i.max_critical,this.props.width/2)))}var o,s="";Number(this.props.value)===this.props.value&&this.props.value%1!=0?o=this.props.value.toFixed(1):(s=""===this.props.minMaxValue?" %":this.getSubfix(this.props.value),o=new Intl.NumberFormat("es",{maximumSignificantDigits:4,maximumFractionDigits:3}).format(this.props.value));var a=o.match(/\d*\.\d/);null!==a&&(o=a[0]);var l=this.getRotate(this.props.value),c=document.getElementById("visual-console-container");null===c&&(c=document.getElementById("visual-console-container-".concat(this.props.cellId))),""==c.style.backgroundColor&&(c.style.backgroundColor="#fff");var p=.7*this.props.width,u=document.createElement("div");u.className="odometer",!0!==this.props.agentDisabled&&!0!==this.props.moduleDisabled||(u.style.opacity="0.2");var d=document.createElement("div");d.className="odometer-container";var h=document.createElement("div");h.className="odometer-a",h.style.backgroundColor="".concat(c.style.backgroundColor);var m=document.createElement("div");m.className="odometer-b",m.id="odometerB-".concat(this.props.id),m.style.backgroundColor="".concat(this.props.status);var f=document.createElement("div");f.className="odometer-c";var _=document.createElement("div");_.className="odometer-d";var y="http://www.w3.org/2000/svg";if(""!=t){var v=document.createElementNS(y,"svg");v.setAttributeNS(null,"width","100%"),v.setAttributeNS(null,"height","100%"),v.setAttributeNS(null,"style","position:absolute;z-index:1");var g=document.createElementNS(y,"path");g.setAttributeNS(null,"id","svgWarning-".concat(this.props.id)),g.setAttributeNS(null,"d","M".concat(this.props.width/2,",").concat(this.props.width/2,"L").concat(t,"A").concat(this.props.width/2,",").concat(this.props.width/2,",0,0,1,").concat(e,"Z")),g.setAttributeNS(null,"class","svg_warning"),v.appendChild(g),d.appendChild(v)}if(""!=n){var b=document.createElementNS(y,"svg");b.setAttributeNS(null,"width","100%"),b.setAttributeNS(null,"height","100%"),b.setAttributeNS(null,"style","position:absolute;z-index:2");var E=document.createElementNS(y,"path");E.setAttributeNS(null,"id","svgCritical-".concat(this.props.id)),E.setAttributeNS(null,"d","M".concat(this.props.width/2,",").concat(this.props.width/2,"L").concat(n,"A").concat(this.props.width/2,",").concat(this.props.width/2,",0,0,1,").concat(r,"Z")),E.setAttributeNS(null,"fill","#E63C52"),b.appendChild(E),d.appendChild(b)}var w=document.createElement("h1");w.innerText=o+s,w.style.fontSize="".concat(.17*p,"px"),w.style.color="".concat(this.props.status),w.style.lineHeight="0";var M=document.createElement("h2");""==this.props.title?M.textContent=this.truncateTitle(this.props.moduleName):M.textContent=this.truncateTitle(this.props.title),M.title=this.props.titleModule,M.setAttribute("title",this.props.titleModule),M.style.fontSize="".concat(.06*p,"px"),M.style.color="".concat(this.props.titleColor),M.style.lineHeight="0";var x=document.createElement("script");x.type="text/javascript",x.onload=function(){m.style.transform="rotate(".concat(l,"turn)")};var C=window.location.pathname.split("/")[1];return x.src="".concat(document.dir,"/").concat(C,"/include/javascript/pandora_alerts.js"),h.appendChild(w),h.appendChild(M),d.appendChild(m),d.appendChild(f),d.appendChild(_),d.appendChild(h),d.appendChild(x),u.appendChild(d),u},e.prototype.updateDomElement=function(t){var e=this;t.innerHTML=this.createDomElement().innerHTML;var n=this.getRotate(this.props.value),r=document.getElementById("svgWarning-".concat(this.props.id));null!=r&&(r.style.display="none");var i=document.getElementById("svgCritical-".concat(this.props.id));null!=i&&(i.style.display="none"),setTimeout((function(){null!=r&&(r.style.display="block"),null!=i&&(i.style.display="block");var t=document.getElementById("odometerB-".concat(e.props.id));t&&(t.style.transform="rotate(".concat(n,"turn)"))}),500)},e.prototype.resizeElement=function(e){t.prototype.resizeElement.call(this,e,e/2)},e.prototype.resize=function(t){this.resizeElement(this.props.width)},e.prototype.getRotate=function(t){var e=0;if(""===this.props.minMaxValue)e=t/2/100;else{var n=JSON.parse(this.props.minMaxValue);if(n.min===t)e=0;else if(n.max===t)e=.5;else{var r=n.max-n.min;e=(100-100*(n.max-t)/r)/100/2}}return e},e.prototype.getSubfix=function(t){var e="",n=(t+"").length;return n>3&&n<=6?e=" K":n>6&&n<=9?e=" M":n>9&&n<=12?e=" G":n>12&&n<=15&&(e=" T"),e},e.prototype.getCoords=function(t,e){if(""!==this.props.minMaxValue){var n=JSON.parse(this.props.minMaxValue);if(n.min===t)t=0;else if(n.max===t||100===t)t=100;else{var r=n.max-n.min;t=100-100*(n.max-t)/r}}t=180-1.8*t;var i=e+Math.cos(t*Math.PI/180)*e,o=e-Math.sin(t*Math.PI/180)*e;return"".concat(i,",").concat(o)},e.prototype.truncateTitle=function(t){if(null!=t&&t.length>22){var e=t.length/2,n=e-9,r=t.substr(0,e-n),i=t.substr(e+n);return"".concat(r,"...").concat(i)}return t},e}(n.ZP),pe=ce,ue=__webpack_require__(880),de=function(){return de=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},de.apply(this,arguments)};function he(t){var n=(0,e.I1)(t.type,null);if(null==n)throw new TypeError("missing item type.");switch(n){case 0:return s(t);case 1:return(0,$t.C)(t);case 2:case 6:case 7:case 8:return ut(t);case 3:case 9:case 15:case 16:return Zt(t);case 4:return ot(t);case 5:return u(t);case 10:return ne(t);case 11:return V(t);case 12:return tt(t);case 13:return O(t);case 14:return(0,mt.o)(t);case 17:return(0,Xt.p)(t);case 18:return(0,Qt.K)(t);case 19:return J(t);case 20:return E(t);case 21:return B(t);case 22:return ae(t);case 23:return(0,ue.u)(t);default:throw new TypeError("decoder not found")}}var me=function(){function t(t,n,r){var i=this;this.elementsById={},this.elementIds=[],this.relations={},this.lineLinks={},this.lines={},this.clickEventManager=new P.Z,this.dblClickEventManager=new P.Z,this.movedEventManager=new P.Z,this.lineMovedEventManager=new P.Z,this.resizedEventManager=new P.Z,this.selectionChangedEventManager=new P.Z,this.disposables=[],this.handleElementClick=function(t){i.clickEventManager.emit(t)},this.handleElementDblClick=function(t){i.dblClickEventManager.emit(t)},this.handleElementMovement=function(t){var e=t.item.itemProps.type;if(13===e||21===e||void 0!==i.props.gridSelected&&!1!==i.props.gridSelected||i.elements.forEach((function(e){if(!0===e.meta.isSelected&&t.item.itemProps.id!==e.itemProps.id&&13!==e.props.type&&21!==e.props.type){var n=t.newPosition.x-t.item.props.x,r=t.newPosition.y-t.item.props.y,o=e.props.x+n,s=e.props.y+r;o>i.props.width?o=i.props.width:o<=0&&(o=0),s>i.props.height?s=i.props.height:s<=0&&(s=0),e.moveElement(o,s),e.debouncedMovementSave(o,s)}})),13!==e&&21!==e&&!0===i.props.gridSelected){var n=i.props.gridSize,r=t.newPosition.x,o=t.newPosition.y;if(r%n!=0||o%n!=0){var s=Math.floor(r/n)*n,a=Math.floor(o/n)*n;return void document.getElementById("item-selected-move").setAttribute("style","top:"+a+"px !important; left:"+s+"px !important")}}var l=t.item.props.id;i.getItemRelations(l).forEach((function(e){e.parentId===l?e.line.props=de(de({},e.line.props),{startPosition:i.getVisualCenter(t.newPosition,t.item)}):e.childId===l&&(e.line.props=de(de({},e.line.props),{endPosition:i.getVisualCenter(t.newPosition,t.item)}))})),i.updateLinesConnected(t.item.props,t.newPosition,!1)},this.handleElementMovementFinished=function(t){i.movedEventManager.emit(t),i.updateLinesConnected(t.item.props,t.newPosition,!0)},this.handleLineElementMovementFinished=function(t){i.refreshLink(t.item),i.lineMovedEventManager.emit(t)},this.handleElementResizement=function(t){13===t.item.props.type||21===t.item.props.type||void 0!==i.props.gridSelected&&!1!==i.props.gridSelected||i.elements.forEach((function(e){!0===e.meta.isSelected&&t.item.itemProps.id!==e.itemProps.id&&13!==e.props.type&&21!==e.props.type&&(e.setMeta({isUpdating:!0}),e.resizeElement(t.newSize.width,t.newSize.height),e.debouncedResizementSave(t.newSize.width,t.newSize.height))}));var e=t.item,n=e.props,r=n.id,o=i.getItemRelations(r),s={x:n.x,y:n.y},a=i.elementsById[r].meta;i.elementsById[r].meta=de(de({},a),{isUpdating:!0}),o.forEach((function(t){t.parentId===r?t.line.props=de(de({},t.line.props),{startPosition:i.getVisualCenter(s,e)}):t.childId===r&&(t.line.props=de(de({},t.line.props),{endPosition:i.getVisualCenter(s,e)}))}))},this.handleElementResizementFinished=function(t){i.resizedEventManager.emit(t)},this.handleElementRemove=function(t){i.elementIds=i.elementIds.filter((function(e){return e!==t.item.props.id})),delete i.elementsById[t.item.props.id],i.clearRelations(t.item.props.id)},this.handleElementSelectionChanged=function(t){i.elements.filter((function(t){return 1==t.meta.isSelected})).length>0?t.selected=!0:t.selected=!1,i.selectionChangedEventManager.emit(t)},this.handleContainerClick=function(){i.unSelectItems()},this.containerRef=t,this._props=function(t){var n=t.id,r=t.name,i=t.groupId,o=t.backgroundURL,s=t.backgroundColor,a=t.isFavorite,l=t.relationLineWidth,c=t.maintenanceMode,p=t.gridSize;if(t.gridSelected,null==n||isNaN(parseInt(n)))throw new TypeError("invalid Id.");if("string"!=typeof r||0===r.length)throw new TypeError("invalid name.");if(null==i||isNaN(parseInt(i)))throw new TypeError("invalid group Id.");return de({id:parseInt(n),name:r,groupId:parseInt(i),backgroundURL:(0,e.JW)(o,null),backgroundColor:(0,e.JW)(s,null),isFavorite:(0,e.gx)(a),relationLineWidth:(0,e.I1)(l,0),maintenanceMode:c,gridSize:(0,e.I1)(p,10),gridSelected:!1},(0,e.HY)(t))}(n),this.render(),(r=r.sort((function(t,e){return null==t.id||null==e.id?0:t.id>e.id?1:-1}))).forEach((function(t){return i.addElement(t,i)})),this.buildRelations(),this.elements.forEach((function(t){t instanceof L&&i.refreshLink(t)})),this.containerRef.addEventListener("click",this.handleContainerClick)}return t.prototype.coordinatesInItem=function(t,e,n){return 13!=n.type&&21!=n.type&&t>n.x&&t<n.x+n.width&&e>n.y&&e<n.y+n.height},t.prototype.refreshLink=function(t){var e=t.props.id,n=0,r=0;try{for(var i in this.elementsById)this.coordinatesInItem(t.props.startPosition.x,t.props.startPosition.y,this.elementsById[i].props)&&(n=parseInt(i)),this.coordinatesInItem(t.props.endPosition.x,t.props.endPosition.y,this.elementsById[i].props)&&(r=parseInt(i));for(var i in null==this.lineLinks&&(this.lineLinks={}),null==this.lines&&(this.lines={}),n==e&&(n=0),r==e&&(r=0),null==this.lines[e]&&(this.lines[e]={start:n,end:r}),n>0?(null==this.lineLinks[n]&&(this.lineLinks[n]={}),this.lineLinks[n][e]={start:n,end:r}):this.lines[e].start>0&&(this.lineLinks[this.lines[e].start][e].start=0,this.lines[e].start=0),r>0?(null==this.lineLinks[r]&&(this.lineLinks[r]={}),this.lineLinks[r][e]={start:n,end:r}):this.lines[e].end>0&&(this.lineLinks[this.lines[e].end][e].end=0,this.lines[e].end=0),this.lines[e]={start:n,end:r},this.lineLinks)this.lineLinks[i][e]&&(0==this.lineLinks[i][e].start&&0==this.lineLinks[i][e].end&&(delete this.lineLinks[i][e],0===Object.keys(this.lineLinks[i]).length&&delete this.lineLinks[i]),(this.lineLinks[i][e].start!=n&&this.lineLinks[i][e].end==r||this.lineLinks[i][e].start==n&&this.lineLinks[i][e].end!=r)&&(delete this.lineLinks[i][e],0===Object.keys(this.lineLinks[i]).length&&delete this.lineLinks[i]))}catch(t){console.error(t)}},t.prototype.updateLinesConnected=function(t,n,r){var i=this;null!=this.lineLinks[t.id]&&(Object.keys(this.lineLinks[t.id]).forEach((function(o){var s=parseInt(o);if(-1!==i.elementIds.indexOf(s)){var a=i.elementsById[s];if(a.props){var l=a.props.startPosition.x,c=a.props.startPosition.y,p=a.props.endPosition.x,u=a.props.endPosition.y;t.id==i.lineLinks[t.id][s].start&&(l=n.x+t.width/2,c=n.y+t.height/2),t.id==i.lineLinks[t.id][s].end&&(p=n.x+t.width/2,u=n.y+t.height/2),i.updateElement(de(de({},a.props),{startX:l,startY:c,endX:p,endY:u})),r&&(0,e.Ds)(500,(function(t){i.lineMovedEventManager.emit({item:t.line,startPosition:{x:t.startX,y:t.startY},endPosition:{x:t.endX,y:t.endY}})}))({line:a,startX:l,startY:c,endX:p,endY:u})}}})),this.buildRelations(t.id,n.x+t.width/2,n.y+t.height/2))},Object.defineProperty(t.prototype,"elements",{get:function(){var t=this;return this.elementIds.map((function(e){return t.elementsById[e]})).filter((function(t){return null!=t}))},enumerable:!1,configurable:!0}),t.prototype.addElement=function(t,n){void 0===n&&(n=this);try{null==t.ratio&&(t.ratio=1),t.x*=t.ratio,t.y*=t.ratio,13==t.type&&(t.startX*=t.ratio,t.startY*=t.ratio,t.endX*=t.ratio,t.endY*=t.ratio);var r=function(t){var n=(0,e.I1)(t.type,null);if(null==n)throw new TypeError("missing item type.");var r=(0,e.SM)(t);switch(n){case 0:return new l(s(t),r);case 1:return new $t.Z((0,$t.C)(t),r);case 2:case 6:case 7:case 8:return new ht(ut(t),r);case 3:case 9:case 15:case 16:return new Yt(Zt(t),r);case 4:return new at(ot(t),r);case 5:return new h(u(t),r);case 10:return new ie(ne(t),r);case 11:return new U(V(t),r);case 12:return new nt(tt(t),r);case 13:return new L(O(t),r);case 14:return new mt.Z((0,mt.o)(t),r);case 17:return new Xt.Z((0,Xt.p)(t),r);case 18:return new Qt.Z((0,Qt.K)(t),r);case 19:return new X(J(t),r);case 20:return new k(E(t),r);case 21:return new W(B(t),r);case 22:return new pe(ae(t),r);case 23:return new ue.Z((0,ue.u)(t),r);default:throw new TypeError("item not found")}}(t);return n.elementsById[r.props.id]=r,n.elementIds.push(r.props.id),r.onRemove(n.handleElementRemove),r.onSelectionChanged(n.handleElementSelectionChanged),r.onClick(n.handleElementClick),r.onDblClick(n.handleElementDblClick),r instanceof L?(r.onLineMovementFinished(n.handleLineElementMovementFinished),this.refreshLink(r)):(r.onMoved(n.handleElementMovement),r.onMovementFinished(n.handleElementMovementFinished),r.onResized(n.handleElementResizement),r.onResizeFinished(n.handleElementResizementFinished)),1!==t.ratio&&13!=t.type&&(r.elementRef.style.transform="scale(".concat(t.ratio?t.ratio:1,")"),r.elementRef.style.transformOrigin="left top",r.elementRef.style.minWidth="max-content",r.elementRef.style.minHeight="max-content"),n.containerRef.append(r.elementRef),r}catch(t){console.error("Error creating a new element:",t.message)}},t.prototype.updateElements=function(t){var e=this,n=t.map((function(t){return t.id||null})).filter((function(t){return null!=t}));this.elementIds.filter((function(t){return n.indexOf(t)<0})).forEach((function(t){null!=e.elementsById[t]&&(e.elementsById[t].remove(),delete e.elementsById[t])})),this.elementIds=n,t.forEach((function(t){if(t.id)if(null==e.elementsById[t.id])e.addElement(t);else try{null!=t.ratio&&(t.x*=t.ratio,t.y*=t.ratio,13==t.type&&(t.startX*=t.ratio,t.startY*=t.ratio,t.endX*=t.ratio,t.endY*=t.ratio)),e.elementsById[t.id].props=he(t)}catch(t){console.error("Error updating an element:",t.message)}})),this.buildRelations()},t.prototype.updateElement=function(t){try{this.elementsById[t.id].props=de({},he(t))}catch(t){console.error("Error updating element:",t.message)}this.buildRelations()},Object.defineProperty(t.prototype,"props",{get:function(){return de({},this._props)},set:function(t){var e=this.props;this._props=t,this.render(e)},enumerable:!1,configurable:!0}),t.prototype.render=function(t){void 0===t&&(t=null),t?(t.backgroundURL!==this.props.backgroundURL&&(this.containerRef.style.backgroundImage=null!==this.props.backgroundURL?"url(".concat(this.props.backgroundURL,")"):""),null!=this.props.backgroundColor&&t.backgroundColor!==this.props.backgroundColor&&(this.containerRef.style.backgroundColor=this.props.backgroundColor),this.sizeChanged(t,this.props)&&this.resizeElement(this.props.width,this.props.height)):(this.props.backgroundURL&&(this.containerRef.style.backgroundImage=null!==this.props.backgroundURL?"url(".concat(this.props.backgroundURL,")"):""),this.props.backgroundColor&&(this.containerRef.style.backgroundColor=this.props.backgroundColor),this.resizeElement(this.props.width,this.props.height))},t.prototype.sizeChanged=function(t,e){return t.width!==e.width||t.height!==e.height},t.prototype.resizeElement=function(t,e){this.containerRef.style.width="".concat(t,"px"),this.containerRef.style.height="".concat(e,"px")},t.prototype.resize=function(t,e){this.props=de(de({},this.props),{width:t,height:e})},t.prototype.remove=function(){this.disposables.forEach((function(t){return t.dispose()})),this.elements.forEach((function(t){return t.remove()})),this.elementsById={},this.elementIds=[],this.clearRelations(),this.containerRef.removeEventListener("click",this.handleContainerClick),this.containerRef.innerHTML=""},t.prototype.buildRelations=function(t,e,n){var r=this;this.clearRelations(),this.elements.forEach((function(i){if(null!==i.props.parentId){var o=r.elementsById[i.props.parentId],s=r.elementsById[i.props.id];o&&s&&(null!=t?i.props.parentId==t?r.addRelationLine(o,s,e,n):i.props.id==t?r.addRelationLine(o,s,void 0,void 0,e,n):r.addRelationLine(o,s):r.addRelationLine(o,s))}}))},t.prototype.clearRelations=function(t){if(null!=t)for(var e in this.relations){var n=e.split("|"),r=Number.parseInt(n[0]),i=Number.parseInt(n[1]);t!==r&&t!==i||(this.relations[e].remove(),delete this.relations[e])}else for(var e in this.relations)this.relations[e].remove(),delete this.relations[e]},t.prototype.getRelationLine=function(t,e){var n="".concat(t,"|").concat(e);return this.relations[n]||null},t.prototype.getItemRelations=function(t){var e=[];for(var n in this.relations){var r=n.split("|"),i=Number.parseInt(r[0]),o=Number.parseInt(r[1]);t!==i&&t!==o||e.push({parentId:i,childId:o,line:this.relations[n]})}return e},t.prototype.getVisualCenter=function(t,e){var n=1;null!=e.props.ratio&&(n=e.props.ratio);var r=t.x+e.elementRef.clientWidth/2*n,i=t.y+e.elementRef.clientHeight/2*n;if(void 0!==e.props.label||""!==e.props.label||null!==e.props.label)switch(e.props.labelPosition){case"up":i=t.y+(e.elementRef.clientHeight+e.labelElementRef.clientHeight)/2*n;break;case"down":i=t.y+(e.elementRef.clientHeight-e.labelElementRef.clientHeight)/2*n;break;case"right":r=t.x+(e.elementRef.clientWidth-e.labelElementRef.clientWidth)/2*n;break;case"left":r=t.x+(e.elementRef.clientWidth+e.labelElementRef.clientWidth)/2*n}return{x:r,y:i}},t.prototype.addRelationLine=function(t,n,r,i,o,s){var a="".concat(t.props.id,"|").concat(n.props.id);null!=this.relations[a]&&this.relations[a].remove();var l=this.getVisualCenter(t.props,t),c=l.x,p=l.y,u=this.getVisualCenter(n.props,n),d=u.x,h=u.y;null!=r&&(c=r),null!=i&&(p=i),null!=o&&(d=o),null!=s&&(h=s);var m=new L(O({id:0,type:13,startX:c,startY:p,endX:d,endY:h,width:0,height:0,lineWidth:this.props.relationLineWidth,color:(0,e.JW)(n.props.colorStatus,"#CCC"),ratio:t.props.ratio}),(0,e.SM)({receivedAt:new Date}));return this.relations[a]=m,m.elementRef.style.zIndex="0",this.containerRef.append(m.elementRef),m},t.prototype.onItemClick=function(t){var e=this.clickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemDblClick=function(t){var e=this.dblClickEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemMoved=function(t){var e=this.movedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onLineMoved=function(t){var e=this.lineMovedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemResized=function(t){var e=this.resizedEventManager.on(t);return this.disposables.push(e),e},t.prototype.onItemSelectionChanged=function(t){var e=this.selectionChangedEventManager.on(t);return this.disposables.push(e),e},t.prototype.enableEditMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{editMode:!0})})),this.containerRef.classList.add("is-editing")},t.prototype.disableEditMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{editMode:!1})})),this.containerRef.classList.remove("is-editing")},t.prototype.enableMaintenanceMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{maintenanceMode:!0})})),this.containerRef.classList.add("is-maintenance"),this.containerRef.classList.remove("is-editing")},t.prototype.disableMaintenanceMode=function(){this.elements.forEach((function(t){t.meta=de(de({},t.meta),{maintenanceMode:!1})})),this.containerRef.classList.remove("is-maintenance"),this.containerRef.classList.add("is-editing")},t.prototype.updateGridSize=function(t){this._props.gridSize=parseInt(t),this.props.gridSize=parseInt(t)},t.prototype.updateGridSelected=function(t){this._props.gridSelected=t,this.props.gridSelected=t},t.prototype.selectItem=function(t,e){var n=this;void 0===e&&(e=!1),e?this.elementIds.forEach((function(e){var r=n.elementsById[e].meta;e!==t&&r.isSelected?n.elementsById[e].unSelectItem():e!==t||r.isSelected||n.elementsById[e].selectItem()})):this.elementsById[t]&&this.elementsById[t].selectItem()},t.prototype.unSelectItem=function(t){this.elementsById[t]&&this.elementsById[t].meta.isSelected&&this.elementsById[t].unSelectItem()},t.prototype.unSelectItems=function(){var t=this;this.elementIds.forEach((function(e){t.elementsById[e]&&t.elementsById[e].unSelectItem()}))},t.itemDescriptiveName=function(t){var n;switch(t.props.type){case 0:n="".concat((0,e.t)("Static graph")," - ").concat(t.props.imageSrc);break;case 1:n=(0,e.t)("Module graph");break;case 19:n=(0,e.t)("Clock");break;case 18:n=(0,e.t)("Bars graph");break;case 14:n=(0,e.t)("Event history graph");break;case 3:n=(0,e.t)("Percentile bar");break;case 15:n=(0,e.t)("Circular progress bar");break;case 16:n=(0,e.t)("Circular progress bar (interior)");break;case 2:n=(0,e.t)("Simple Value");break;case 4:n=(0,e.t)("Label");break;case 11:n=(0,e.t)("Group");break;case 20:n=(0,e.t)("Color cloud");break;case 5:n="".concat((0,e.t)("Icon")," - ").concat(t.props.imageSrc);break;case 22:n=(0,e.t)("Odometer");break;case 23:n=(0,e.t)("BasicChart");break;default:n=(0,e.t)("Item")}var r=t.props;return null!=r.agentAlias&&null!=r.moduleName?n+=" (".concat((0,e.fk)(r.agentAlias,18)," - ").concat((0,e.fk)(r.moduleName,25),")"):null!=r.agentAlias&&(n+=" (".concat((0,e.fk)(r.agentAlias,25),")")),n},t.items=((le={})[0]=l,le[1]=$t.Z,le[2]=ht,le[6]=ht,le[7]=ht,le[8]=ht,le[3]=Yt,le[9]=Yt,le[15]=Yt,le[16]=Yt,le[4]=at,le[5]=h,le[10]=ie,le[11]=U,le[12]=nt,le[13]=L,le[14]=mt.Z,le[17]=Xt.Z,le[18]=Qt.Z,le[19]=X,le[20]=k,le[21]=W,le[22]=pe,le[23]=ue.Z,le),t}(),fe=function(){function t(t){this.cancellable={cancel:function(){}},this._status="waiting",this.statusChangeEventManager=new P.Z,this.disposables=[],this.taskInitiator=t}return Object.defineProperty(t.prototype,"status",{get:function(){return this._status},set:function(t){this._status=t,this.statusChangeEventManager.emit(t)},enumerable:!1,configurable:!0}),t.prototype.init=function(){var t=this;this.cancellable=this.taskInitiator((function(){t.status="finished"})),this.status="started"},t.prototype.cancel=function(){this.cancellable.cancel(),this.status="cancelled"},t.prototype.onStatusChange=function(t){var e=this.statusChangeEventManager.on(t);return this.disposables.push(e),e},t}(),_e=function(){function t(){this.tasks={}}return t.prototype.add=function(t,e,n){void 0===n&&(n=0),this.tasks[t]&&"started"===this.tasks[t].status&&this.tasks[t].cancel();var r=n>0?function(t,e){return new fe((function(){var n=null;return t.onStatusChange((function(r){"finished"===r&&(n=window.setTimeout((function(){t.init()}),e))})),t.init(),{cancel:function(){n&&clearTimeout(n),t.cancel()}}}))}(new fe(e),n):new fe(e);return this.tasks[t]=r,this.tasks[t]},t.prototype.init=function(t){!this.tasks[t]||"waiting"!==this.tasks[t].status&&"cancelled"!==this.tasks[t].status&&"finished"!==this.tasks[t].status||this.tasks[t].init()},t.prototype.cancel=function(t){this.tasks[t]&&"started"===this.tasks[t].status&&this.tasks[t].cancel()},t}();window.VisualConsole=me,window.VisualConsole.Form=m,window.AsyncTaskManager=_e}()})(); //# sourceMappingURL=vc.main.min.js.map \ No newline at end of file diff --git a/pandora_console/include/visual-console-client/vc.main.min.js.map b/pandora_console/include/visual-console-client/vc.main.min.js.map index 0421a15e54..6638395037 100644 --- a/pandora_console/include/visual-console-client/vc.main.min.js.map +++ b/pandora_console/include/visual-console-client/vc.main.min.js.map @@ -1 +1 @@ -{"version":3,"file":"vc.main.min.js","mappings":"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","sources":["webpack://pandora-fms-visual-console/./src/Form.ts","webpack://pandora-fms-visual-console/./src/Item.ts","webpack://pandora-fms-visual-console/./src/items/BarsGraph.ts","webpack://pandora-fms-visual-console/./src/items/BasicChart.ts","webpack://pandora-fms-visual-console/./src/items/DonutGraph.ts","webpack://pandora-fms-visual-console/./src/items/EventsHistory.ts","webpack://pandora-fms-visual-console/./src/items/ModuleGraph.ts","webpack://pandora-fms-visual-console/./src/lib/FontAwesomeIcon.ts","webpack://pandora-fms-visual-console/./src/lib/TypedEvent.ts","webpack://pandora-fms-visual-console/./src/lib/index.ts","webpack://pandora-fms-visual-console/webpack/bootstrap","webpack://pandora-fms-visual-console/webpack/runtime/define property getters","webpack://pandora-fms-visual-console/webpack/runtime/hasOwnProperty shorthand","webpack://pandora-fms-visual-console/webpack/runtime/make namespace object","webpack://pandora-fms-visual-console/./src/items/StaticGraph.ts","webpack://pandora-fms-visual-console/./src/items/Icon.ts","webpack://pandora-fms-visual-console/./node_modules/@fortawesome/free-solid-svg-icons/index.es.js","webpack://pandora-fms-visual-console/./src/items/ColorCloud.ts","webpack://pandora-fms-visual-console/./src/items/Line.ts","webpack://pandora-fms-visual-console/./src/items/NetworkLink.ts","webpack://pandora-fms-visual-console/./src/items/Group.ts","webpack://pandora-fms-visual-console/./src/items/Clock/index.ts","webpack://pandora-fms-visual-console/./src/items/Box.ts","webpack://pandora-fms-visual-console/./src/items/Label.ts","webpack://pandora-fms-visual-console/./src/items/SimpleValue.ts","webpack://pandora-fms-visual-console/./node_modules/d3-path/src/path.js","webpack://pandora-fms-visual-console/./node_modules/d3-shape/src/constant.js","webpack://pandora-fms-visual-console/./node_modules/d3-shape/src/math.js","webpack://pandora-fms-visual-console/./node_modules/d3-shape/src/arc.js","webpack://pandora-fms-visual-console/./src/items/Percentile.ts","webpack://pandora-fms-visual-console/./src/items/Service.ts","webpack://pandora-fms-visual-console/./src/items/Odometer.ts","webpack://pandora-fms-visual-console/./src/VisualConsole.ts","webpack://pandora-fms-visual-console/./src/lib/AsyncTaskManager.ts","webpack://pandora-fms-visual-console/./src/index.ts"],"sourcesContent":["import TypedEvent, { Listener, Disposable } from \"./lib/TypedEvent\";\nimport { AnyObject, UnknownObject } from \"./lib/types\";\nimport { t } from \"./lib\";\n\ninterface InputGroupDataRequestedEvent {\n identifier: string;\n params: UnknownObject;\n done: (error: Error | null, data?: unknown) => void;\n}\n\n// TODO: Document\nexport abstract class InputGroup<Data extends {} = {}> {\n private _name: string = \"\";\n private _element?: HTMLElement;\n public readonly initialData: Data;\n protected currentData: Partial<Data> = {};\n // Event manager for data requests.\n private readonly dataRequestedEventManager = new TypedEvent<\n InputGroupDataRequestedEvent\n >();\n\n public constructor(name: string, initialData: Data) {\n this.name = name;\n this.initialData = initialData;\n }\n\n public set name(name: string) {\n if (name.length === 0) throw new RangeError(\"empty name\");\n this._name = name;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get data(): Partial<Data> {\n return { ...this.currentData };\n }\n\n public get element(): HTMLElement {\n if (this._element == null) {\n const element = document.createElement(\"div\");\n element.className = `input-group input-group-${this.name}`;\n\n const content = this.createContent();\n\n if (content instanceof Array) {\n content.forEach(element.appendChild);\n } else {\n element.appendChild(content);\n }\n\n this._element = element;\n }\n\n return this._element;\n }\n\n public reset(): void {\n this.currentData = {};\n }\n\n protected updateData(data: Partial<Data>): void {\n this.currentData = {\n ...this.currentData,\n ...data\n };\n // TODO: Update item.\n }\n\n protected requestData(\n identifier: string,\n params: UnknownObject,\n done: (error: Error | null, data?: unknown) => void\n ): void {\n this.dataRequestedEventManager.emit({ identifier, params, done });\n }\n\n public onDataRequested(\n listener: Listener<InputGroupDataRequestedEvent>\n ): Disposable {\n return this.dataRequestedEventManager.on(listener);\n }\n\n protected abstract createContent(): HTMLElement | HTMLElement[];\n\n // public abstract get isValid(): boolean;\n}\n\nexport interface SubmitFormEvent {\n nativeEvent: Event;\n data: AnyObject;\n}\n\n// TODO: Document\nexport class FormContainer {\n public readonly title: string;\n private inputGroupsByName: { [name: string]: InputGroup } = {};\n private enabledInputGroupNames: string[] = [];\n // Event manager for submit events.\n private readonly submitEventManager = new TypedEvent<SubmitFormEvent>();\n // Event manager for item data requests.\n private readonly itemDataRequestedEventManager = new TypedEvent<\n InputGroupDataRequestedEvent\n >();\n private handleItemDataRequested = this.itemDataRequestedEventManager.emit;\n\n public constructor(\n title: string,\n inputGroups: InputGroup[] = [],\n enabledInputGroups: string[] = []\n ) {\n this.title = title;\n\n if (inputGroups.length > 0) {\n this.inputGroupsByName = inputGroups.reduce((prevVal, inputGroup) => {\n // Add event handlers.\n inputGroup.onDataRequested(this.handleItemDataRequested);\n prevVal[inputGroup.name] = inputGroup;\n return prevVal;\n }, this.inputGroupsByName);\n }\n\n if (enabledInputGroups.length > 0) {\n this.enabledInputGroupNames = [\n ...this.enabledInputGroupNames,\n ...enabledInputGroups.filter(\n name => this.inputGroupsByName[name] != null\n )\n ];\n }\n }\n\n public getInputGroup(inputGroupName: string): InputGroup | null {\n return this.inputGroupsByName[inputGroupName] || null;\n }\n\n public addInputGroup(\n inputGroup: InputGroup,\n index: number | null = null\n ): FormContainer {\n // Add event handlers.\n inputGroup.onDataRequested(this.handleItemDataRequested);\n this.inputGroupsByName[inputGroup.name] = inputGroup;\n\n // Remove the current stored name if exist.\n this.enabledInputGroupNames = this.enabledInputGroupNames.filter(\n name => name !== inputGroup.name\n );\n\n if (index !== null) {\n if (index <= 0) {\n this.enabledInputGroupNames = [\n inputGroup.name,\n ...this.enabledInputGroupNames\n ];\n } else if (index >= this.enabledInputGroupNames.length) {\n this.enabledInputGroupNames = [\n ...this.enabledInputGroupNames,\n inputGroup.name\n ];\n } else {\n this.enabledInputGroupNames = [\n // part of the array before the specified index\n ...this.enabledInputGroupNames.slice(0, index),\n // inserted item\n inputGroup.name,\n // part of the array after the specified index\n ...this.enabledInputGroupNames.slice(index)\n ];\n }\n } else {\n this.enabledInputGroupNames = [\n ...this.enabledInputGroupNames,\n inputGroup.name\n ];\n }\n\n return this;\n }\n\n public removeInputGroup(inputGroupName: string): FormContainer {\n delete this.inputGroupsByName[inputGroupName];\n // Remove the current stored name.\n this.enabledInputGroupNames = this.enabledInputGroupNames.filter(\n name => name !== inputGroupName\n );\n\n return this;\n }\n\n public getFormElement(\n type: \"creation\" | \"update\" = \"update\"\n ): HTMLFormElement {\n const form = document.createElement(\"form\");\n form.id = \"visual-console-item-edition\";\n form.className = \"visual-console-item-edition\";\n form.addEventListener(\"submit\", e => {\n e.preventDefault();\n this.submitEventManager.emit({\n nativeEvent: e,\n data: this.enabledInputGroupNames.reduce((data, name) => {\n if (this.inputGroupsByName[name]) {\n data = {\n ...data,\n ...this.inputGroupsByName[name].data\n };\n }\n return data;\n }, {})\n });\n });\n\n const formContent = document.createElement(\"div\");\n formContent.className = \"input-groups\";\n\n this.enabledInputGroupNames.forEach(name => {\n if (this.inputGroupsByName[name]) {\n formContent.appendChild(this.inputGroupsByName[name].element);\n }\n });\n\n form.appendChild(formContent);\n\n return form;\n }\n\n public reset(): void {\n this.enabledInputGroupNames.forEach(name => {\n if (this.inputGroupsByName[name]) {\n this.inputGroupsByName[name].reset();\n }\n });\n }\n\n // public get isValid(): boolean {\n // for (let i = 0; i < this.enabledInputGroupNames.length; i++) {\n // const inputGroup = this.inputGroupsByName[this.enabledInputGroupNames[i]];\n // if (inputGroup && !inputGroup.isValid) return false;\n // }\n\n // return true;\n // }\n\n public onSubmit(listener: Listener<SubmitFormEvent>): Disposable {\n return this.submitEventManager.on(listener);\n }\n\n public onInputGroupDataRequested(\n listener: Listener<InputGroupDataRequestedEvent>\n ): Disposable {\n return this.itemDataRequestedEventManager.on(listener);\n }\n}\n","import {\n Position,\n Size,\n AnyObject,\n WithModuleProps,\n ItemMeta,\n LinkedVisualConsoleProps,\n WithAgentProps\n} from \"./lib/types\";\nimport {\n sizePropsDecoder,\n positionPropsDecoder,\n parseIntOr,\n parseBoolean,\n notEmptyStringOr,\n replaceMacros,\n humanDate,\n humanTime,\n addMovementListener,\n debounce,\n addResizementListener,\n t,\n parseFloatOr\n} from \"./lib\";\nimport TypedEvent, { Listener, Disposable } from \"./lib/TypedEvent\";\nimport { FormContainer, InputGroup } from \"./Form\";\n\n// Enum: https://www.typescriptlang.org/docs/handbook/enums.html.\nexport const enum ItemType {\n STATIC_GRAPH = 0,\n MODULE_GRAPH = 1,\n SIMPLE_VALUE = 2,\n PERCENTILE_BAR = 3,\n LABEL = 4,\n ICON = 5,\n SIMPLE_VALUE_MAX = 6,\n SIMPLE_VALUE_MIN = 7,\n SIMPLE_VALUE_AVG = 8,\n PERCENTILE_BUBBLE = 9,\n SERVICE = 10,\n GROUP_ITEM = 11,\n BOX_ITEM = 12,\n LINE_ITEM = 13,\n AUTO_SLA_GRAPH = 14,\n CIRCULAR_PROGRESS_BAR = 15,\n CIRCULAR_INTERIOR_PROGRESS_BAR = 16,\n DONUT_GRAPH = 17,\n BARS_GRAPH = 18,\n CLOCK = 19,\n COLOR_CLOUD = 20,\n NETWORK_LINK = 21,\n ODOMETER = 22,\n BASIC_CHART = 23\n}\n\n// Base item properties. This interface should be extended by the item implementations.\nexport interface ItemProps extends Position, Size {\n readonly id: number;\n readonly type: ItemType;\n label: string | null;\n labelPosition: \"up\" | \"right\" | \"down\" | \"left\";\n isLinkEnabled: boolean;\n link: string | null;\n isOnTop: boolean;\n parentId: number | null;\n aclGroupId: number | null;\n cacheExpiration: number | null;\n colorStatus: string;\n cellId: string | null;\n alertOutline: boolean;\n ratio: number | null;\n}\n\nexport interface ItemClickEvent {\n item: VisualConsoleItem<ItemProps>;\n nativeEvent: Event;\n}\n\n// FIXME: Fix type compatibility.\nexport interface ItemRemoveEvent {\n // data: Props;\n item: VisualConsoleItem<ItemProps>;\n}\n\nexport interface ItemMovedEvent {\n item: VisualConsoleItem<ItemProps>;\n prevPosition: Position;\n newPosition: Position;\n}\n\nexport interface ItemResizedEvent {\n item: VisualConsoleItem<ItemProps>;\n prevSize: Size;\n newSize: Size;\n}\n\nexport interface ItemSelectionChangedEvent {\n selected: boolean;\n}\n\n/**\n * Extract a valid enum value from a raw label position value.\n * @param labelPosition Raw value.\n */\nconst parseLabelPosition = (\n labelPosition: unknown\n): ItemProps[\"labelPosition\"] => {\n switch (labelPosition) {\n case \"up\":\n case \"right\":\n case \"down\":\n case \"left\":\n return labelPosition;\n default:\n return \"down\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function itemBasePropsDecoder(data: AnyObject): ItemProps | never {\n if (data.id == null || isNaN(parseInt(data.id))) {\n throw new TypeError(\"invalid id.\");\n }\n if (data.type == null || isNaN(parseInt(data.type))) {\n throw new TypeError(\"invalid type.\");\n }\n\n return {\n id: parseInt(data.id),\n type: parseInt(data.type),\n label: notEmptyStringOr(data.label, null),\n labelPosition: parseLabelPosition(data.labelPosition),\n isLinkEnabled: parseBoolean(data.isLinkEnabled),\n link: notEmptyStringOr(data.link, null),\n isOnTop: parseBoolean(data.isOnTop),\n parentId: parseIntOr(data.parentId, null),\n aclGroupId: parseIntOr(data.aclGroupId, null),\n cacheExpiration: parseIntOr(data.cacheExpiration, null),\n colorStatus: notEmptyStringOr(data.colorStatus, \"#CCC\"),\n cellId: notEmptyStringOr(data.cellId, \"\"),\n alertOutline: parseBoolean(data.alertOutline),\n ratio: parseFloatOr(data.ratio, null),\n ...sizePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...positionPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\n//TODO: Document\nexport function titleItem(id: number): string {\n let title = \"\";\n switch (id) {\n case ItemType.STATIC_GRAPH:\n title = t(\"Static image\");\n break;\n case ItemType.MODULE_GRAPH:\n title = t(\"Module graph\");\n break;\n case ItemType.SIMPLE_VALUE:\n title = t(\"Simple value\");\n break;\n case ItemType.PERCENTILE_BAR:\n title = t(\"Percentile item\");\n break;\n case ItemType.LABEL:\n title = t(\"Label\");\n break;\n case ItemType.ICON:\n title = t(\"Icon\");\n break;\n case ItemType.SIMPLE_VALUE_MAX:\n title = t(\"Simple value\");\n break;\n case ItemType.SIMPLE_VALUE_MIN:\n title = t(\"Simple value\");\n break;\n case ItemType.SIMPLE_VALUE_AVG:\n title = t(\"Simple value\");\n break;\n case ItemType.PERCENTILE_BUBBLE:\n title = t(\"Percentile item\");\n break;\n case ItemType.SERVICE:\n title = t(\"Service\");\n break;\n case ItemType.GROUP_ITEM:\n title = t(\"Group\");\n break;\n case ItemType.BOX_ITEM:\n title = t(\"Box\");\n break;\n case ItemType.LINE_ITEM:\n title = t(\"Line\");\n break;\n case ItemType.AUTO_SLA_GRAPH:\n title = t(\"Event history graph\");\n break;\n case ItemType.CIRCULAR_PROGRESS_BAR:\n title = t(\"Percentile item\");\n break;\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n title = t(\"Percentile item\");\n break;\n case ItemType.DONUT_GRAPH:\n title = t(\"Serialized pie graph\");\n break;\n case ItemType.BARS_GRAPH:\n title = t(\"Bars graph\");\n break;\n case ItemType.CLOCK:\n title = t(\"Clock\");\n break;\n case ItemType.COLOR_CLOUD:\n title = t(\"Color cloud\");\n break;\n case ItemType.NETWORK_LINK:\n title = t(\"Network link\");\n break;\n case ItemType.ODOMETER:\n title = t(\"Odometer\");\n break;\n case ItemType.BASIC_CHART:\n title = t(\"Basic chart\");\n break;\n default:\n title = t(\"Item\");\n break;\n }\n\n return title;\n}\n\n/**\n * Base class of the visual console items. Should be extended to use its capabilities.\n */\nabstract class VisualConsoleItem<Props extends ItemProps> {\n // Properties of the item.\n public itemProps: Props;\n // Metadata of the item.\n private _metadata: ItemMeta;\n // Reference to the DOM element which will contain the item.\n public elementRef: HTMLElement = document.createElement(\"div\");\n public labelElementRef: HTMLElement = document.createElement(\"div\");\n // Reference to the DOM element which will contain the view of the item which extends this class.\n protected childElementRef: HTMLElement = document.createElement(\"div\");\n // Event manager for click events.\n private readonly clickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for double click events.\n private readonly dblClickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for moved events.\n private readonly movedEventManager = new TypedEvent<ItemMovedEvent>();\n // Event manager for stopped movement events.\n private readonly movementFinishedEventManager = new TypedEvent<\n ItemMovedEvent\n >();\n // Event manager for resized events.\n private readonly resizedEventManager = new TypedEvent<ItemResizedEvent>();\n // Event manager for resize finished events.\n private readonly resizeFinishedEventManager = new TypedEvent<\n ItemResizedEvent\n >();\n // Event manager for remove events.\n private readonly removeEventManager = new TypedEvent<ItemRemoveEvent>();\n // Event manager for selection change events.\n private readonly selectionChangedEventManager = new TypedEvent<\n ItemSelectionChangedEvent\n >();\n // List of references to clean the event listeners.\n private readonly disposables: Disposable[] = [];\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n public debouncedMovementSave = debounce(\n 500, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingMoved = false;\n\n const prevPosition = {\n x: this.props.x,\n y: this.props.y\n };\n const newPosition = {\n x: x,\n y: y\n };\n\n if (!this.positionChanged(prevPosition, newPosition)) return;\n\n // Save the new position to the props.\n this.move(x, y);\n // Emit the movement event.\n this.movementFinishedEventManager.emit({\n item: this,\n prevPosition: prevPosition,\n newPosition: newPosition\n });\n }\n );\n // This property will store the function\n // to clean the movement listener.\n private removeMovement: Function | null = null;\n\n /**\n * Start the movement funtionality.\n * @param element Element to move inside its container.\n */\n private initMovementListener(element: HTMLElement): void {\n // Avoid line movement as 'block' force using circles.\n if (\n this.props.type == ItemType.LINE_ITEM ||\n this.props.type == ItemType.NETWORK_LINK\n ) {\n return;\n }\n\n this.removeMovement = addMovementListener(\n element,\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n const prevPosition = {\n x: this.props.x,\n y: this.props.y\n };\n const newPosition = { x, y };\n\n this.meta = {\n ...this.meta,\n isSelected: true\n };\n\n if (!this.positionChanged(prevPosition, newPosition)) return;\n\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingMoved = true;\n // Move the DOM element.\n this.moveElement(x, y);\n // Emit the movement event.\n this.movedEventManager.emit({\n item: this,\n prevPosition: prevPosition,\n newPosition: newPosition\n });\n // Run the save function.\n this.debouncedMovementSave(x, y);\n }\n );\n }\n /**\n * Stop the movement fun\n */\n private stopMovementListener(): void {\n if (this.removeMovement) {\n this.removeMovement();\n this.removeMovement = null;\n }\n }\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n public debouncedResizementSave = debounce(\n 500, // ms.\n (width: Size[\"width\"], height: Size[\"height\"]) => {\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingResized = false;\n\n const prevSize = {\n width: this.props.width,\n height: this.props.height\n };\n const newSize = { width, height };\n\n if (!this.sizeChanged(prevSize, newSize)) return;\n\n // Save the new position to the props.\n this.resize(width, height);\n\n // Emit the resize finished event.\n this.resizeFinishedEventManager.emit({\n item: this,\n prevSize: prevSize,\n newSize: newSize\n });\n }\n );\n // This property will store the function\n // to clean the resizement listener.\n private removeResizement: Function | null = null;\n\n /**\n * Start the resizement funtionality.\n * @param element Element to move inside its container.\n */\n protected initResizementListener(element: HTMLElement): void {\n if (\n this.props.type == ItemType.LINE_ITEM ||\n this.props.type == ItemType.NETWORK_LINK\n ) {\n return;\n }\n this.removeResizement = addResizementListener(\n element,\n (width: Size[\"width\"], height: Size[\"height\"]) => {\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingResized = true;\n\n // The label it's outside the item's size, so we need\n // to get rid of its size to get the real size of the\n // item's content.\n if (this.props.label && this.props.label.length > 0) {\n const {\n width: labelWidth,\n height: labelHeight\n } = this.labelElementRef.getBoundingClientRect();\n\n switch (this.props.labelPosition) {\n case \"up\":\n case \"down\":\n height -= labelHeight;\n break;\n case \"left\":\n case \"right\":\n width -= labelWidth;\n break;\n }\n }\n\n const prevSize = {\n width: this.props.width,\n height: this.props.height\n };\n const newSize = { width, height };\n\n if (!this.sizeChanged(prevSize, newSize)) return;\n\n // Move the DOM element.\n this.resizeElement(width, height);\n // Emit the resizement event.\n this.resizedEventManager.emit({\n item: this,\n prevSize,\n newSize\n });\n // Run the save function.\n this.debouncedResizementSave(width, height);\n }\n );\n }\n /**\n * Stop the resizement functionality.\n */\n private stopResizementListener(): void {\n if (this.removeResizement) {\n this.removeResizement();\n this.removeResizement = null;\n }\n }\n\n /**\n * To create a new element which will be inside the item box.\n * @return Item.\n */\n protected abstract createDomElement(): HTMLElement;\n\n public constructor(\n props: Props,\n metadata: ItemMeta,\n deferInit: boolean = false\n ) {\n this.itemProps = props;\n this._metadata = metadata;\n\n if (!deferInit) this.init();\n }\n\n /**\n * To create and append the DOM elements.\n */\n protected init(): void {\n /*\n * Get a HTMLElement which represents the container box\n * of the Visual Console item. This element will manage\n * all the common things like click events, show a border\n * when hovered, etc.\n */\n this.elementRef = this.createContainerDomElement();\n this.labelElementRef = this.createLabelDomElement();\n\n /*\n * Get a HTMLElement which represents the custom view\n * of the Visual Console item. This element will be\n * different depending on the item implementation.\n */\n this.childElementRef = this.createDomElement();\n\n // Insert the elements into the container.\n this.elementRef.appendChild(this.childElementRef);\n this.elementRef.appendChild(this.labelElementRef);\n\n // Resize element.\n this.resizeElement(this.itemProps.width, this.itemProps.height);\n\n // Set label position.\n this.changeLabelPosition(this.itemProps.labelPosition);\n }\n\n /**\n * To create a new box for the visual console item.\n * @return Item box.\n */\n private createContainerDomElement(): HTMLElement {\n let box;\n if (this.props.isLinkEnabled) {\n box = document.createElement(\"a\") as HTMLAnchorElement;\n\n if (this.props.link) {\n box.href = this.props.link;\n } else {\n box.className = \"textDecorationNone\";\n }\n } else {\n box = document.createElement(\"div\") as HTMLDivElement;\n box.className = \"textDecorationNone\";\n }\n\n box.classList.add(\"visual-console-item\");\n if (this.props.isOnTop) {\n box.classList.add(\"is-on-top\");\n }\n\n box.style.left = `${this.props.x}px`;\n box.style.top = `${this.props.y}px`;\n\n if (this.props.alertOutline) {\n box.classList.add(\"is-alert-triggered\");\n }\n\n // Init the click listeners.\n box.addEventListener(\"dblclick\", e => {\n if (!this.meta.isBeingMoved && !this.meta.isBeingResized) {\n this.unSelectItem();\n this.selectItem();\n\n this.dblClickEventManager.emit({\n item: this,\n nativeEvent: e\n });\n }\n });\n box.addEventListener(\"click\", e => {\n if (this.meta.editMode) {\n e.preventDefault();\n e.stopPropagation();\n } else {\n // Add loading click item.\n if (this.itemProps.isLinkEnabled && this.itemProps.link != null) {\n const divParent = document.createElement(\"div\");\n divParent.className = \"div-visual-console-spinner\";\n const divSpinner = document.createElement(\"div\");\n divSpinner.className = \"visual-console-spinner\";\n divParent.appendChild(divSpinner);\n let path = e.composedPath();\n let containerId = \"visual-console-container\";\n for (let index = 0; index < path.length; index++) {\n const element = path[index] as HTMLInputElement;\n if (\n element.id != undefined &&\n element.id != null &&\n element.id != \"\"\n ) {\n if (element.id.includes(containerId) === true) {\n containerId = element.id;\n break;\n }\n }\n }\n\n const containerVC = document.getElementById(containerId);\n if (containerVC != null) {\n containerVC.classList.add(\"is-updating\");\n containerVC.appendChild(divParent);\n }\n }\n }\n\n if (!this.meta.isBeingMoved && !this.meta.isBeingResized) {\n this.clickEventManager.emit({\n item: this,\n nativeEvent: e\n });\n }\n });\n\n // Metadata state.\n if (this.meta.maintenanceMode) {\n box.classList.add(\"is-maintenance\");\n }\n if (this.meta.editMode) {\n box.classList.add(\"is-editing\");\n }\n if (this.meta.isFetching) {\n box.classList.add(\"is-fetching\");\n }\n if (this.meta.isUpdating) {\n box.classList.add(\"is-updating\");\n }\n if (this.meta.isSelected) {\n box.classList.add(\"is-selected\");\n }\n\n return box;\n }\n\n /**\n * To create a new label for the visual console item.\n * @return Item label.\n */\n protected createLabelDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"visual-console-item-label\";\n // Add the label if it exists.\n const label = this.getLabelWithMacrosReplaced();\n if (label.length > 0) {\n // Ugly table we need to use to replicate the legacy style.\n const table = document.createElement(\"table\");\n const row = document.createElement(\"tr\");\n const emptyRow1 = document.createElement(\"tr\");\n const emptyRow2 = document.createElement(\"tr\");\n const cell = document.createElement(\"td\");\n\n cell.innerHTML = label;\n row.appendChild(cell);\n table.appendChild(emptyRow1);\n table.appendChild(row);\n table.appendChild(emptyRow2);\n table.style.textAlign = \"center\";\n element.appendChild(table);\n }\n\n return element;\n }\n\n /**\n * Return the label stored into the props with some macros replaced.\n */\n protected getLabelWithMacrosReplaced(): string {\n // We assert that the props may have some needed properties.\n const props = this.props as Partial<WithModuleProps>;\n\n return replaceMacros(\n [\n {\n macro: \"_date_\",\n value: humanDate(new Date())\n },\n {\n macro: \"_time_\",\n value: humanTime(new Date())\n },\n {\n macro: \"_agent_\",\n value: props.agentAlias != null ? props.agentAlias : \"\"\n },\n {\n macro: \"_agentdescription_\",\n value: props.agentDescription != null ? props.agentDescription : \"\"\n },\n {\n macro: \"_address_\",\n value: props.agentAddress != null ? props.agentAddress : \"\"\n },\n {\n macro: \"_module_\",\n value: props.moduleName != null ? props.moduleName : \"\"\n },\n {\n macro: \"_moduledescription_\",\n value: props.moduleDescription != null ? props.moduleDescription : \"\"\n }\n ],\n this.props.label || \"\"\n );\n }\n\n /**\n * To update the content element.\n * @return Item.\n */\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.createDomElement().innerHTML;\n }\n\n /**\n * Public accessor of the `props` property.\n * @return Properties.\n */\n public get props(): Props {\n return { ...this.itemProps }; // Return a copy.\n }\n\n /**\n * Public setter of the `props` property.\n * If the new props are different enough than the\n * stored props, a render would be fired.\n * @param newProps\n */\n public set props(newProps: Props) {\n this.setProps(newProps);\n }\n\n /**\n * Clasic and protected version of the setter of the `props` property.\n * Useful to override it from children classes.\n * @param newProps\n */\n protected setProps(newProps: Props) {\n const prevProps = this.props;\n // Update the internal props.\n this.itemProps = newProps;\n\n // From this point, things which rely on this.props can access to the changes.\n\n // Check if we should re-render.\n if (this.shouldBeUpdated(prevProps, newProps))\n this.render(prevProps, this._metadata);\n }\n\n /**\n * Public accessor of the `meta` property.\n * @return Properties.\n */\n public get meta(): ItemMeta {\n return { ...this._metadata }; // Return a copy.\n }\n\n /**\n * Public setter of the `meta` property.\n * If the new meta are different enough than the\n * stored meta, a render would be fired.\n * @param newProps\n */\n public set meta(newMetadata: ItemMeta) {\n this.setMeta(newMetadata);\n }\n\n /**\n * Classic version of the setter of the `meta` property.\n * Useful to override it from children classes.\n * @param newProps\n */\n public setMeta(newMetadata: Partial<ItemMeta>): void {\n const prevMetadata = this._metadata;\n // Update the internal meta.\n this._metadata = {\n ...prevMetadata,\n ...newMetadata\n };\n\n if (\n typeof newMetadata.isSelected !== \"undefined\" &&\n prevMetadata.isSelected !== newMetadata.isSelected\n ) {\n this.selectionChangedEventManager.emit({\n selected: newMetadata.isSelected\n });\n }\n\n // From this point, things which rely on this.props can access to the changes.\n\n // Check if we should re-render.\n // if (this.shouldBeUpdated(prevMetadata, newMetadata))\n this.render(this.itemProps, prevMetadata);\n }\n\n /**\n * To compare the previous and the new props and returns a boolean value\n * in case the difference is meaningfull enough to perform DOM changes.\n *\n * Here, the only comparision is done by reference.\n *\n * Override this function to perform a different comparision depending on the item needs.\n *\n * @param prevProps\n * @param newProps\n * @return Whether the difference is meaningful enough to perform DOM changes or not.\n */\n protected shouldBeUpdated(prevProps: Props, newProps: Props): boolean {\n return prevProps !== newProps;\n }\n\n /**\n * To recreate or update the HTMLElement which represents the item into the DOM.\n * @param prevProps If exists it will be used to only perform DOM updates instead of a full replace.\n */\n public render(\n prevProps: Props | null = null,\n prevMeta: ItemMeta | null = null\n ): void {\n if (prevProps) {\n if (this.props.ratio !== 1 && this.props.type != ItemType.LINE_ITEM) {\n this.elementRef.style.transform = `scale(${\n this.props.ratio ? this.props.ratio : 1\n })`;\n this.elementRef.style.transformOrigin = \"left top\";\n this.elementRef.style.minWidth = \"max-content\";\n this.elementRef.style.minHeight = \"max-content\";\n }\n this.updateDomElement(this.childElementRef);\n }\n // Move box.\n if (!prevProps || this.positionChanged(prevProps, this.props)) {\n this.moveElement(this.props.x, this.props.y);\n if (\n prevProps &&\n prevProps.type != ItemType.LINE_ITEM &&\n prevProps.type != ItemType.NETWORK_LINK\n ) {\n this.updateDomElement(this.childElementRef);\n }\n }\n\n // Resize box.\n if (!prevProps || this.sizeChanged(prevProps, this.props)) {\n this.resizeElement(this.props.width, this.props.height);\n if (\n prevProps &&\n prevProps.type != ItemType.LINE_ITEM &&\n prevProps.type != ItemType.NETWORK_LINK\n ) {\n this.updateDomElement(this.childElementRef);\n }\n }\n // Change label.\n const oldLabelHtml = this.labelElementRef.innerHTML;\n const newLabelHtml = this.createLabelDomElement().innerHTML;\n if (oldLabelHtml !== newLabelHtml) {\n this.labelElementRef.innerHTML = newLabelHtml;\n }\n\n // Change label position.\n if (!prevProps || prevProps.labelPosition !== this.props.labelPosition) {\n this.changeLabelPosition(this.props.labelPosition);\n }\n //Change z-index class is-on-top\n if (!prevProps || prevProps.isOnTop !== this.props.isOnTop) {\n if (this.props.isOnTop) {\n this.elementRef.classList.add(\"is-on-top\");\n } else {\n this.elementRef.classList.remove(\"is-on-top\");\n }\n }\n\n // Change link.\n if (prevProps && prevProps.isLinkEnabled !== this.props.isLinkEnabled) {\n const container = this.createContainerDomElement();\n // Add the children of the old element.\n container.innerHTML = this.elementRef.innerHTML;\n // Copy the attributes.\n const attrs = this.elementRef.attributes;\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].nodeName !== \"id\") {\n let cloneIsNeeded = this.elementRef.getAttributeNode(\n attrs[i].nodeName\n );\n if (cloneIsNeeded !== null) {\n container.setAttributeNode(<any>cloneIsNeeded.cloneNode());\n }\n }\n }\n // Replace the reference.\n if (this.elementRef.parentNode !== null) {\n this.elementRef.parentNode.replaceChild(container, this.elementRef);\n }\n\n // Changed the reference to the main element. It's ugly, but needed.\n this.elementRef = container;\n }\n\n if (\n prevProps &&\n this.props.isLinkEnabled &&\n prevProps.link !== this.props.link\n ) {\n if (this.props.link !== null) {\n this.elementRef.setAttribute(\"href\", this.props.link);\n }\n }\n\n // Change metadata related things.\n if (\n !prevMeta ||\n prevMeta.editMode !== this.meta.editMode ||\n prevMeta.maintenanceMode !== this.meta.maintenanceMode\n ) {\n if (this.meta.editMode && this.meta.maintenanceMode === false) {\n this.elementRef.classList.add(\"is-editing\");\n this.elementRef.classList.remove(\"is-alert-triggered\");\n } else {\n this.elementRef.classList.remove(\"is-editing\");\n\n if (this.props.alertOutline) {\n this.elementRef.classList.add(\"is-alert-triggered\");\n }\n }\n }\n\n if (!prevMeta || prevMeta.isFetching !== this.meta.isFetching) {\n if (this.meta.isFetching) {\n this.elementRef.classList.add(\"is-fetching\");\n } else {\n this.elementRef.classList.remove(\"is-fetching\");\n }\n }\n\n if (!prevMeta || prevMeta.isUpdating !== this.meta.isUpdating) {\n if (this.meta.isUpdating) {\n this.elementRef.classList.add(\"is-updating\");\n\n const divParent = document.createElement(\"div\");\n divParent.className = \"div-visual-console-spinner\";\n const divSpinner = document.createElement(\"div\");\n divSpinner.className = \"visual-console-spinner\";\n divParent.appendChild(divSpinner);\n this.elementRef.appendChild(divParent);\n } else {\n this.elementRef.classList.remove(\"is-updating\");\n\n const div = this.elementRef.querySelector(\n \".div-visual-console-spinner\"\n );\n if (div !== null) {\n const parent = div.parentElement;\n if (parent !== null) {\n parent.removeChild(div);\n }\n }\n }\n\n this.updateDomElement(this.childElementRef);\n }\n if (!prevMeta || prevMeta.isSelected !== this.meta.isSelected) {\n if (this.meta.isSelected) {\n this.elementRef.classList.add(\"is-selected\");\n this.elementRef.setAttribute(\"id\", \"item-selected-move\");\n } else {\n this.elementRef.classList.remove(\"is-selected\");\n this.elementRef.removeAttribute(\"id\");\n }\n }\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n */\n public remove(): void {\n // Call the remove event.\n this.removeEventManager.emit({ item: this });\n // Event listeners.\n this.disposables.forEach(disposable => {\n try {\n disposable.dispose();\n } catch (ignored) {} // eslint-disable-line no-empty\n });\n // VisualConsoleItem DOM element.\n this.elementRef.remove();\n }\n\n /**\n * Compare the previous and the new position and return\n * a boolean value in case the position changed.\n * @param prevPosition\n * @param newPosition\n * @return Whether the position changed or not.\n */\n protected positionChanged(\n prevPosition: Position,\n newPosition: Position\n ): boolean {\n return prevPosition.x !== newPosition.x || prevPosition.y !== newPosition.y;\n }\n\n /**\n * Move the label around the item content.\n * @param position Label position.\n */\n protected changeLabelPosition(position: Props[\"labelPosition\"]): void {\n switch (position) {\n case \"up\":\n this.elementRef.style.flexDirection = \"column-reverse\";\n break;\n case \"left\":\n this.elementRef.style.flexDirection = \"row-reverse\";\n break;\n case \"right\":\n this.elementRef.style.flexDirection = \"row\";\n break;\n case \"down\":\n default:\n this.elementRef.style.flexDirection = \"column\";\n break;\n }\n\n // Ugly table to show the label as its legacy counterpart.\n const tables = this.labelElementRef.getElementsByTagName(\"table\");\n const table = tables.length > 0 ? tables.item(0) : null;\n // Change the table size depending on its position.\n if (table) {\n switch (this.props.labelPosition) {\n case \"up\":\n case \"down\":\n if (this.props.width > 0) {\n table.style.width = `${this.props.width}px`;\n table.style.height = \"\";\n }\n break;\n case \"left\":\n case \"right\":\n if (this.props.height > 0) {\n table.style.width = \"\";\n table.style.height = `${this.props.height}px`;\n }\n break;\n }\n }\n }\n\n /**\n * Move the DOM container.\n * @param x Horizontal axis position.\n * @param y Vertical axis position.\n */\n public moveElement(x: number, y: number): void {\n this.elementRef.style.left = `${x}px`;\n this.elementRef.style.top = `${y}px`;\n }\n\n /**\n * Update the position into the properties and move the DOM container.\n * @param x Horizontal axis position.\n * @param y Vertical axis position.\n */\n public move(x: number, y: number): void {\n this.moveElement(x, y);\n this.itemProps = {\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n x,\n y\n };\n }\n\n /**\n * Compare the previous and the new size and return\n * a boolean value in case the size changed.\n * @param prevSize\n * @param newSize\n * @return Whether the size changed or not.\n */\n protected sizeChanged(prevSize: Size, newSize: Size): boolean {\n return (\n prevSize.width !== newSize.width || prevSize.height !== newSize.height\n );\n }\n\n /**\n * Resize the DOM content container.\n * @param width\n * @param height\n */\n public resizeElement(width: number, height: number): void {\n // The most valuable size is the content size.\n if (\n this.props.type != ItemType.LINE_ITEM &&\n this.props.type != ItemType.NETWORK_LINK\n ) {\n this.childElementRef.style.width = width > 0 ? `${width}px` : \"\";\n this.childElementRef.style.height = height > 0 ? `${height}px` : \"\";\n }\n\n if (this.props.label && this.props.label.length > 0) {\n // Ugly table to show the label as its legacy counterpart.\n const tables = this.labelElementRef.getElementsByTagName(\"table\");\n const table = tables.length > 0 ? tables.item(0) : null;\n\n if (table) {\n switch (this.props.labelPosition) {\n case \"up\":\n case \"down\":\n table.style.width = width > 0 ? `${width}px` : \"\";\n break;\n case \"left\":\n case \"right\":\n table.style.height = height > 0 ? `${height}px` : \"\";\n break;\n }\n }\n }\n }\n\n /**\n * Update the size into the properties and resize the DOM container.\n * @param width\n * @param height\n */\n public resize(width: number, height: number): void {\n this.resizeElement(width, height);\n this.itemProps = {\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n width,\n height\n };\n }\n\n /**\n * To add an event handler to the click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is clicked.\n */\n public onClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.clickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the double click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is double clicked.\n */\n public onDblClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.dblClickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the movement of visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onMoved(listener: Listener<ItemMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.movedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the movement stopped of visual console elements.\n * @param listener Function which is going to be executed when a linked console's movement is finished.\n */\n public onMovementFinished(listener: Listener<ItemMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.movementFinishedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the resizement of visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onResized(listener: Listener<ItemResizedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.resizedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the resizement finish of visual console elements.\n * @param listener Function which is going to be executed when a linked console is finished resizing.\n */\n public onResizeFinished(listener: Listener<ItemResizedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.resizeFinishedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the removal of the item.\n * @param listener Function which is going to be executed when a item is removed.\n */\n public onRemove(listener: Listener<ItemRemoveEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.removeEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to item selection.\n * @param listener Function which is going to be executed when a item is removed.\n */\n public onSelectionChanged(\n listener: Listener<ItemSelectionChangedEvent>\n ): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.selectionChangedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Select an item.\n * @param itemId Item Id.\n * @param unique To remove the selection of other items or not.\n */\n public selectItem(): void {\n this.meta = {\n ...this.meta,\n isSelected: true\n };\n\n this.initMovementListener(this.elementRef);\n if (\n this.props.type !== ItemType.LINE_ITEM &&\n this.props.type !== ItemType.NETWORK_LINK\n ) {\n this.initResizementListener(this.elementRef);\n }\n }\n\n /**\n * Unselect an item.\n * @param itemId Item Id.\n */\n public unSelectItem(): void {\n this.meta = {\n ...this.meta,\n isSelected: false\n };\n\n this.stopMovementListener();\n if (this.props.type !== ItemType.LINE_ITEM) {\n this.stopResizementListener();\n }\n }\n\n // TODO: Document\n public getFormContainer(): FormContainer {\n return VisualConsoleItem.getFormContainer(this.props);\n }\n\n // TODO: Document\n public static getFormContainer(props: Partial<ItemProps>): FormContainer {\n const title: string = props.type ? titleItem(props.type) : t(\"Item\");\n return new FormContainer(title, [], []);\n }\n}\n\nexport default VisualConsoleItem;\n","import { AnyObject, WithModuleProps } from \"../lib/types\";\nimport { modulePropsDecoder, decodeBase64, stringIsEmpty, t } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type BarsGraphProps = {\n type: ItemType.BARS_GRAPH;\n html: string;\n backgroundColor: \"white\" | \"black\" | \"transparent\";\n typeGraph: \"horizontal\" | \"vertical\";\n gridColor: string;\n} & ItemProps &\n WithModuleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param BarsGraphProps Raw value.\n */\nconst parseBarsGraphProps = (\n backgroundColor: unknown\n): BarsGraphProps[\"backgroundColor\"] => {\n switch (backgroundColor) {\n case \"white\":\n case \"black\":\n case \"transparent\":\n return backgroundColor;\n default:\n return \"transparent\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param typeGraph Raw value.\n */\nconst parseTypeGraph = (typeGraph: unknown): BarsGraphProps[\"typeGraph\"] => {\n switch (typeGraph) {\n case \"horizontal\":\n case \"vertical\":\n return typeGraph;\n default:\n return \"vertical\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the bars graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function barsGraphPropsDecoder(data: AnyObject): BarsGraphProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.BARS_GRAPH,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n backgroundColor: parseBarsGraphProps(data.backgroundColor),\n typeGraph: parseTypeGraph(data.typeGraph),\n gridColor: stringIsEmpty(data.gridColor) ? \"#000000\" : data.gridColor,\n ...modulePropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class BarsGraph extends Item<BarsGraphProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.innerHTML = this.props.html;\n element.className = \"bars-graph\";\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n decodeBase64,\n stringIsEmpty,\n parseIntOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type BasicChartProps = {\n type: ItemType.BASIC_CHART;\n html: string;\n period: number | null;\n value: number | null;\n status: string;\n moduleNameColor: string;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the basic chart props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function basicChartPropsDecoder(\n data: AnyObject\n): BasicChartProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.BASIC_CHART,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n period: parseIntOr(data.period, null),\n value: parseFloat(data.value),\n status: stringIsEmpty(data.status) ? \"#B2B2B2\" : data.status,\n moduleNameColor: stringIsEmpty(data.moduleNameColor)\n ? \"#3f3f3f\"\n : data.moduleNameColor,\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class BasicChart extends Item<BasicChartProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n\n const header = document.createElement(\"div\");\n header.className = \"basic-chart-header\";\n\n const moduleName = document.createElement(\"h2\");\n moduleName.className = \"basic-chart-header-name\";\n moduleName.textContent = this.props.moduleName;\n moduleName.style.color = `${this.props.moduleNameColor}`;\n header.appendChild(moduleName);\n\n let value = \"\";\n if (this.props.value !== null) {\n value = this.numberFormat(this.props.value, false, \"\", 2, 1000);\n }\n\n const moduleValue = document.createElement(\"h2\");\n moduleValue.className = \"basic-chart-header-value\";\n moduleValue.textContent = `${value}`;\n moduleValue.style.color = this.props.status;\n header.appendChild(moduleValue);\n\n element.innerHTML = this.props.html;\n element.className = \"basic-chart\";\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Remove the overview graph.\n const legendP = element.getElementsByTagName(\"p\");\n for (let i = 0; i < legendP.length; i++) {\n legendP[i].style.margin = \"0px\";\n }\n\n // Remove the overview graph.\n const overviewGraphs = element.getElementsByClassName(\"overview_graph\");\n for (let i = 0; i < overviewGraphs.length; i++) {\n overviewGraphs[i].remove();\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n element.innerHTML = this.props.html;\n element.insertBefore(header, element.firstChild);\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n const header = document.createElement(\"div\");\n header.className = \"basic-chart-header\";\n\n const moduleName = document.createElement(\"h2\");\n moduleName.className = \"basic-chart-header-name\";\n moduleName.textContent = this.props.moduleName;\n moduleName.style.color = `${this.props.moduleNameColor}`;\n header.appendChild(moduleName);\n\n let value = \"\";\n if (this.props.value !== null) {\n value = this.numberFormat(this.props.value, false, \"\", 2, 1000);\n }\n\n const moduleValue = document.createElement(\"h2\");\n moduleValue.className = \"basic-chart-header-value\";\n moduleValue.textContent = `${value}`;\n moduleValue.style.color = this.props.status;\n header.appendChild(moduleValue);\n\n element.innerHTML = this.props.html;\n element.insertBefore(header, element.firstChild);\n\n // Remove the overview graph.\n const legendP = element.getElementsByTagName(\"p\");\n for (let i = 0; i < legendP.length; i++) {\n legendP[i].style.margin = \"0px\";\n }\n\n // Remove the overview graph.\n const overviewGraphs = element.getElementsByClassName(\"overview_graph\");\n for (let i = 0; i < overviewGraphs.length; i++) {\n overviewGraphs[i].remove();\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n\n protected numberFormat(\n number: number,\n forceInteger: boolean,\n unit: string,\n shortData: number,\n divisor: number\n ) {\n divisor = typeof divisor !== \"undefined\" ? divisor : 1000;\n var decimals = 2;\n\n // Set maximum decimal precision to 99 in case shortData is not set.\n if (!shortData) {\n shortData = 99;\n }\n\n if (forceInteger) {\n if (Math.round(number) != number) {\n return \"\";\n }\n } else {\n shortData++;\n const auxDecimals = this.pad(\"1\", shortData, 0);\n number =\n Math.round(number * Number.parseInt(auxDecimals)) /\n Number.parseInt(auxDecimals);\n }\n\n var shorts = [\"\", \"K\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"];\n var pos = 0;\n\n while (Math.abs(number) >= divisor) {\n // As long as the number can be divided by 1000 or 1024.\n pos++;\n number = number / divisor;\n }\n\n if (divisor) {\n number = Math.round(number * decimals) / decimals;\n } else {\n number = Math.round(number * decimals);\n }\n\n if (isNaN(number)) {\n number = 0;\n }\n\n return number + \" \" + shorts[pos] + unit;\n }\n\n protected pad(input: string, length: number, padding: number): string {\n var str = input + \"\";\n return length <= str.length\n ? str\n : this.pad(str + padding, length, padding);\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n decodeBase64,\n stringIsEmpty,\n t\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type DonutGraphProps = {\n type: ItemType.DONUT_GRAPH;\n html: string;\n legendBackgroundColor: string;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the donut graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function donutGraphPropsDecoder(\n data: AnyObject\n): DonutGraphProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.DONUT_GRAPH,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n legendBackgroundColor: stringIsEmpty(data.legendBackgroundColor)\n ? \"#ffffff\"\n : data.legendBackgroundColor,\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class DonutGraph extends Item<DonutGraphProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"donut-graph\";\n element.innerHTML = this.props.html;\n element.style.backgroundColor = this.props.legendBackgroundColor;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n element.style.backgroundColor = this.props.legendBackgroundColor;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n}\n","import { AnyObject, WithModuleProps } from \"../lib/types\";\nimport {\n modulePropsDecoder,\n parseIntOr,\n decodeBase64,\n stringIsEmpty,\n t\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type EventsHistoryProps = {\n type: ItemType.AUTO_SLA_GRAPH;\n maxTime: number | null;\n legendColor: string;\n html: string;\n} & ItemProps &\n WithModuleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the events history props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function eventsHistoryPropsDecoder(\n data: AnyObject\n): EventsHistoryProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.AUTO_SLA_GRAPH,\n maxTime: parseIntOr(data.maxTime, null),\n legendColor: data.legendColor,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n ...modulePropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class EventsHistory extends Item<EventsHistoryProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"events-history\";\n element.innerHTML = this.props.html;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n var flotText = element.getElementsByClassName(\n \"noresizevc\"\n ) as HTMLCollectionOf<HTMLElement>;\n flotText[0].style.color = this.props.legendColor;\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const aux = document.createElement(\"div\");\n aux.innerHTML = this.props.html;\n const scripts = aux.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n\n var flotText = element.getElementsByClassName(\n \"noresizevc\"\n ) as HTMLCollectionOf<HTMLElement>;\n flotText[0].style.color = this.props.legendColor;\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n decodeBase64,\n stringIsEmpty,\n parseIntOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type ModuleGraphProps = {\n type: ItemType.MODULE_GRAPH;\n html: string;\n backgroundType: \"white\" | \"black\" | \"transparent\";\n graphType: \"line\" | \"area\";\n period: number | null;\n customGraphId: number | null;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param backgroundType Raw value.\n */\nconst parseBackgroundType = (\n backgroundType: unknown\n): ModuleGraphProps[\"backgroundType\"] => {\n switch (backgroundType) {\n case \"white\":\n case \"black\":\n case \"transparent\":\n return backgroundType;\n default:\n return \"transparent\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param graphType Raw value.\n */\nconst parseGraphType = (graphType: unknown): ModuleGraphProps[\"graphType\"] => {\n switch (graphType) {\n case \"line\":\n case \"area\":\n return graphType;\n default:\n return \"line\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the module graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function moduleGraphPropsDecoder(\n data: AnyObject\n): ModuleGraphProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.MODULE_GRAPH,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n backgroundType: parseBackgroundType(data.backgroundType),\n period: parseIntOr(data.period, null),\n graphType: parseGraphType(data.graphType),\n customGraphId: parseIntOr(data.customGraphId, null),\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class ModuleGraph extends Item<ModuleGraphProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n\n element.innerHTML = this.props.html;\n element.className = \"module-graph\";\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n}\n","import { IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\nimport \"./FontAwesomeIcon.styles.css\";\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\ninterface ExtraProps {\n size?: \"small\" | \"medium\" | \"large\";\n color?: string;\n spin?: boolean;\n pulse?: boolean;\n}\n\nconst fontAwesomeIcon = (\n iconDefinition: IconDefinition,\n title: string,\n { size, color, spin, pulse }: ExtraProps = {}\n): HTMLElement => {\n const container = document.createElement(\"figure\");\n container.title = title;\n container.className = `fa fa-${iconDefinition.iconName}`;\n\n if (size) container.classList.add(`fa-${size}`);\n\n if (spin) container.classList.add(\"fa-spin\");\n else if (pulse) container.classList.add(\"fa-pulse\");\n\n const icon = document.createElementNS(svgNS, \"svg\");\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n icon.setAttribute(\n \"viewBox\",\n `0 0 ${iconDefinition.icon[0]} ${iconDefinition.icon[1]}`\n );\n if (color) icon.setAttribute(\"fill\", color);\n\n // Path\n const path = document.createElementNS(svgNS, \"path\");\n const pathData =\n typeof iconDefinition.icon[4] === \"string\"\n ? iconDefinition.icon[4]\n : iconDefinition.icon[4][0];\n path.setAttribute(\"d\", pathData);\n\n icon.appendChild(path);\n container.appendChild(icon);\n\n return container;\n};\n\nexport default fontAwesomeIcon;\n","export interface Listener<T> {\n (event: T): void;\n}\n\nexport interface Disposable {\n dispose: () => void;\n}\n\n/** passes through events as they happen. You will not get events from before you start listening */\nexport default class TypedEvent<T> {\n private listeners: Listener<T>[] = [];\n private listenersOncer: Listener<T>[] = [];\n\n public on = (listener: Listener<T>): Disposable => {\n this.listeners.push(listener);\n return {\n dispose: () => this.off(listener)\n };\n };\n\n public once = (listener: Listener<T>): void => {\n this.listenersOncer.push(listener);\n };\n\n public off = (listener: Listener<T>): void => {\n const callbackIndex = this.listeners.indexOf(listener);\n if (callbackIndex > -1) this.listeners.splice(callbackIndex, 1);\n };\n\n public emit = (event: T): void => {\n /** Update any general listeners */\n this.listeners.forEach(listener => listener(event));\n\n /** Clear the `once` queue */\n this.listenersOncer.forEach(listener => listener(event));\n this.listenersOncer = [];\n };\n\n public pipe = (te: TypedEvent<T>): Disposable => this.on(e => te.emit(e));\n}\n","import {\n AnyObject,\n Position,\n Size,\n WithAgentProps,\n WithModuleProps,\n LinkedVisualConsoleProps,\n LinkedVisualConsolePropsStatus,\n UnknownObject,\n ItemMeta\n} from \"./types\";\n\nimport helpTipIcon from \"./help-tip.png\";\nimport fontAwesomeIcon from \"./FontAwesomeIcon\";\nimport { faPencilAlt, faListAlt } from \"@fortawesome/free-solid-svg-icons\";\nimport \"./autocomplete.css\";\n\n/**\n * Return a number or a default value from a raw value.\n * @param value Raw value from which we will try to extract a valid number.\n * @param defaultValue Default value to use if we cannot extract a valid number.\n * @return A valid number or the default value.\n */\nexport function parseIntOr<T>(value: unknown, defaultValue: T): number | T {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\" && value.length > 0 && !isNaN(parseInt(value)))\n return parseInt(value);\n else return defaultValue;\n}\n\n/**\n * Return a number or a default value from a raw value.\n * @param value Raw value from which we will try to extract a valid number.\n * @param defaultValue Default value to use if we cannot extract a valid number.\n * @return A valid number or the default value.\n */\nexport function parseFloatOr<T>(value: unknown, defaultValue: T): number | T {\n if (typeof value === \"number\") return value;\n if (\n typeof value === \"string\" &&\n value.length > 0 &&\n !isNaN(parseFloat(value))\n )\n return parseFloat(value);\n else return defaultValue;\n}\n\n/**\n * Check if a string exists and it's not empty.\n * @param value Value to check.\n * @return The check result.\n */\nexport function stringIsEmpty(value?: string | null): boolean {\n return value == null || value.length === 0;\n}\n\n/**\n * Return a not empty string or a default value from a raw value.\n * @param value Raw value from which we will try to extract a non empty string.\n * @param defaultValue Default value to use if we cannot extract a non empty string.\n * @return A non empty string or the default value.\n */\nexport function notEmptyStringOr<T>(\n value: unknown,\n defaultValue: T\n): string | T {\n return typeof value === \"string\" && value.length > 0 ? value : defaultValue;\n}\n\n/**\n * Return a boolean from a raw value.\n * @param value Raw value from which we will try to extract the boolean.\n * @return A valid boolean value. false by default.\n */\nexport function parseBoolean(value: unknown): boolean {\n if (typeof value === \"boolean\") return value;\n else if (typeof value === \"number\") return value > 0;\n else if (typeof value === \"string\") return value === \"1\" || value === \"true\";\n else return false;\n}\n\n/**\n * Return a valid date or a default value from a raw value.\n * @param value Raw value from which we will try to extract a valid date.\n * @param defaultValue Default value to use if we cannot extract a valid date.\n * @return A valid date or the default value.\n */\nexport function parseDateOr<T>(value: unknown, defaultValue: T): Date | T {\n if (value instanceof Date) return value;\n else if (typeof value === \"number\") return new Date(value * 1000);\n else if (\n typeof value === \"string\" &&\n !Number.isNaN(new Date(value).getTime())\n )\n return new Date(value);\n else return defaultValue;\n}\n\n/**\n * Pad the current string with another string (multiple times, if needed)\n * until the resulting string reaches the given length.\n * The padding is applied from the start (left) of the current string.\n * @param value Text that needs to be padded.\n * @param length Length of the returned text.\n * @param pad Text to add.\n * @return Padded text.\n */\nexport function leftPad(\n value: string | number,\n length: number,\n pad: string | number = \" \"\n): string {\n if (typeof value === \"number\") value = `${value}`;\n if (typeof pad === \"number\") pad = `${pad}`;\n\n const diffLength = length - value.length;\n if (diffLength === 0) return value;\n if (diffLength < 0) return value.substr(Math.abs(diffLength));\n\n if (diffLength === pad.length) return `${pad}${value}`;\n if (diffLength < pad.length) return `${pad.substring(0, diffLength)}${value}`;\n\n const repeatTimes = Math.floor(diffLength / pad.length);\n const restLength = diffLength - pad.length * repeatTimes;\n\n let newPad = \"\";\n for (let i = 0; i < repeatTimes; i++) newPad += pad;\n\n if (restLength === 0) return `${newPad}${value}`;\n return `${newPad}${pad.substring(0, restLength)}${value}`;\n}\n\n/* Decoders */\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the position.\n */\nexport function positionPropsDecoder(data: AnyObject): Position {\n return {\n x: parseIntOr(data.x, 0),\n y: parseIntOr(data.y, 0)\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the size.\n * @throws Will throw a TypeError if the width and height are not valid numbers.\n */\nexport function sizePropsDecoder(data: AnyObject): Size | never {\n if (\n data.width == null ||\n isNaN(parseInt(data.width)) ||\n data.height == null ||\n isNaN(parseInt(data.height))\n ) {\n throw new TypeError(\"invalid size.\");\n }\n\n return {\n width: parseInt(data.width),\n height: parseInt(data.height)\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the agent properties.\n */\nexport function agentPropsDecoder(data: AnyObject): WithAgentProps {\n const agentProps: WithAgentProps = {\n agentId: parseIntOr(data.agentId, null),\n agentName: notEmptyStringOr(data.agentName, null),\n agentAlias: notEmptyStringOr(data.agentAlias, null),\n agentDescription: notEmptyStringOr(data.agentDescription, null),\n agentAddress: notEmptyStringOr(data.agentAddress, null),\n agentDisabled: parseBoolean(data.agentDisabled)\n };\n\n return data.metaconsoleId != null\n ? {\n metaconsoleId: data.metaconsoleId,\n ...agentProps // Object spread: http://es6-features.org/#SpreadOperator\n }\n : agentProps;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the module and agent properties.\n */\nexport function modulePropsDecoder(data: AnyObject): WithModuleProps {\n return {\n moduleId: parseIntOr(data.moduleId, null),\n moduleName: notEmptyStringOr(data.moduleName, null),\n moduleDescription: notEmptyStringOr(data.moduleDescription, null),\n moduleDisabled: parseBoolean(data.moduleDisabled),\n ...agentPropsDecoder(data) // Object spread: http://es6-features.org/#SpreadOperator\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the linked visual console properties.\n * @throws Will throw a TypeError if the status calculation properties are invalid.\n */\nexport function linkedVCPropsDecoder(\n data: AnyObject\n): LinkedVisualConsoleProps | never {\n let linkedLayoutStatusProps: LinkedVisualConsolePropsStatus = {\n linkedLayoutStatusType: \"default\"\n };\n switch (data.linkedLayoutStatusType) {\n case \"weight\": {\n const weight = parseIntOr(data.linkedLayoutStatusTypeWeight, null);\n if (weight == null)\n throw new TypeError(\"invalid status calculation properties.\");\n\n if (data.linkedLayoutStatusTypeWeight)\n linkedLayoutStatusProps = {\n linkedLayoutStatusType: \"weight\",\n linkedLayoutStatusTypeWeight: weight\n };\n break;\n }\n case \"service\": {\n const warningThreshold = parseIntOr(\n data.linkedLayoutStatusTypeWarningThreshold,\n null\n );\n const criticalThreshold = parseIntOr(\n data.linkedLayoutStatusTypeCriticalThreshold,\n null\n );\n if (warningThreshold == null || criticalThreshold == null) {\n throw new TypeError(\"invalid status calculation properties.\");\n }\n\n linkedLayoutStatusProps = {\n linkedLayoutStatusType: \"service\",\n linkedLayoutStatusTypeWarningThreshold: warningThreshold,\n linkedLayoutStatusTypeCriticalThreshold: criticalThreshold\n };\n break;\n }\n }\n\n return {\n linkedLayoutId: parseIntOr(data.linkedLayoutId, null),\n linkedLayoutNodeId: parseIntOr(data.linkedLayoutNodeId, null),\n ...linkedLayoutStatusProps // Object spread: http://es6-features.org/#SpreadOperator\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the item's meta properties.\n */\nexport function itemMetaDecoder(data: UnknownObject): ItemMeta | never {\n const receivedAt = parseDateOr(data.receivedAt, null);\n if (receivedAt === null) throw new TypeError(\"invalid meta structure\");\n\n let error = null;\n if (data.error instanceof Error) error = data.error;\n else if (typeof data.error === \"string\") error = new Error(data.error);\n\n return {\n receivedAt,\n error,\n editMode: parseBoolean(data.editMode),\n maintenanceMode: parseBoolean(data.maintenanceMode),\n isFromCache: parseBoolean(data.isFromCache),\n isFetching: false,\n isUpdating: false,\n isBeingMoved: false,\n isBeingResized: false,\n isSelected: false,\n lineMode: false\n };\n}\n\n/**\n * To get a CSS rule with the most used prefixes.\n * @param ruleName Name of the CSS rule.\n * @param ruleValue Value of the CSS rule.\n * @return An array of rules with the prefixes applied.\n */\nexport function prefixedCssRules(\n ruleName: string,\n ruleValue: string\n): string[] {\n const rule = `${ruleName}: ${ruleValue};`;\n return [\n `-webkit-${rule}`,\n `-moz-${rule}`,\n `-ms-${rule}`,\n `-o-${rule}`,\n `${rule}`\n ];\n}\n\n/**\n * Decode a base64 string.\n * @param input Data encoded using base64.\n * @return Decoded data.\n */\nexport function decodeBase64(input: string): string {\n return decodeURIComponent(escape(window.atob(input)));\n}\n\n/**\n * Generate a date representation with the format 'd/m/Y'.\n * @param initialDate Date to be used instead of a generated one.\n * @param locale Locale to use if localization is required and available.\n * @example 24/02/2020.\n * @return Date representation.\n */\nexport function humanDate(date: Date, locale: string | null = null): string {\n if (locale && Intl && Intl.DateTimeFormat) {\n // Format using the user locale.\n const options: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\"\n };\n return Intl.DateTimeFormat(locale, options).format(date);\n } else {\n // Use getDate, getDay returns the week day.\n const day = leftPad(date.getDate(), 2, 0);\n // The getMonth function returns the month starting by 0.\n const month = leftPad(date.getMonth() + 1, 2, 0);\n const year = leftPad(date.getFullYear(), 4, 0);\n\n // Format: 'd/m/Y'.\n return `${day}/${month}/${year}`;\n }\n}\n\n/**\n * Generate a time representation with the format 'hh:mm:ss'.\n * @param initialDate Date to be used instead of a generated one.\n * @example 01:34:09.\n * @return Time representation.\n */\nexport function humanTime(date: Date): string {\n const hours = leftPad(date.getHours(), 2, 0);\n const minutes = leftPad(date.getMinutes(), 2, 0);\n const seconds = leftPad(date.getSeconds(), 2, 0);\n\n return `${hours}:${minutes}:${seconds}`;\n}\n\ninterface Macro {\n macro: string | RegExp;\n value: string;\n}\n/**\n * Replace the macros of a text.\n * @param macros List of macros and their replacements.\n * @param text Text in which we need to replace the macros.\n */\nexport function replaceMacros(macros: Macro[], text: string): string {\n return macros.reduce(\n (acc, { macro, value }) => acc.replace(macro, value),\n text\n );\n}\n\n/**\n * Create a function which will limit the rate of execution of\n * the selected function to one time for the selected interval.\n * @param delay Interval.\n * @param fn Function to be executed at a limited rate.\n */\nexport function throttle<T, R>(delay: number, fn: (...args: T[]) => R) {\n let last = 0;\n return (...args: T[]) => {\n const now = Date.now();\n if (now - last < delay) return;\n last = now;\n return fn(...args);\n };\n}\n\n/**\n * Create a function which will call the selected function only\n * after the interval time has passed after its last execution.\n * @param delay Interval.\n * @param fn Function to be executed after the last call.\n */\nexport function debounce<T>(delay: number, fn: (...args: T[]) => void) {\n let timerRef: number | null = null;\n return (...args: T[]) => {\n if (timerRef !== null) window.clearTimeout(timerRef);\n timerRef = window.setTimeout(() => {\n fn(...args);\n timerRef = null;\n }, delay);\n };\n}\n\n/**\n * Retrieve the offset of an element relative to the page.\n * @param el Node used to calculate the offset.\n */\nfunction getOffset(el: HTMLElement | null, parent?: HTMLElement) {\n let x = 0;\n let y = 0;\n while (\n el &&\n !Number.isNaN(el.offsetLeft) &&\n !Number.isNaN(el.offsetTop) &&\n el !== parent\n ) {\n x += el.offsetLeft - el.scrollLeft;\n y += el.offsetTop - el.scrollTop;\n el = el.offsetParent as HTMLElement | null;\n }\n return { top: y, left: x };\n}\n\n/**\n * Add the grab & move functionality to a certain element inside it's container.\n *\n * @param element Element to move.\n * @param onMoved Function to execute when the element moves.\n * @param altContainer Alternative element to contain the moved element.\n *\n * @return A function which will clean the event handlers when executed.\n */\nexport function addMovementListener(\n element: HTMLElement,\n onMoved: (x: Position[\"x\"], y: Position[\"y\"]) => void,\n altContainer?: HTMLElement\n): Function {\n const container = altContainer || (element.parentElement as HTMLElement);\n\n // Store the initial draggable state.\n const isDraggable = element.draggable;\n // Init the coordinates.\n let lastX: Position[\"x\"] = 0;\n let lastY: Position[\"y\"] = 0;\n let lastMouseX: Position[\"x\"] = 0;\n let lastMouseY: Position[\"y\"] = 0;\n let mouseElementOffsetX: Position[\"x\"] = 0;\n let mouseElementOffsetY: Position[\"y\"] = 0;\n // Bounds.\n let containerBounds = container.getBoundingClientRect();\n let containerOffset = getOffset(container);\n let containerTop = containerOffset.top;\n let containerBottom = containerTop + containerBounds.height;\n let containerLeft = containerOffset.left;\n let containerRight = containerLeft + containerBounds.width;\n let elementBounds = element.getBoundingClientRect();\n let borderWidth = window.getComputedStyle(element).borderWidth || \"0\";\n let borderFix = Number.parseInt(borderWidth) * 2;\n\n // Will run onMoved 32ms after its last execution.\n const debouncedMovement = debounce(32, onMoved);\n // Will run onMoved one time max every 16ms.\n const throttledMovement = throttle(16, onMoved);\n\n const handleMove = (e: MouseEvent) => {\n // Calculate the new element coordinates.\n let x = 0;\n let y = 0;\n\n const mouseX = e.pageX;\n const mouseY = e.pageY;\n const mouseDeltaX = mouseX - lastMouseX;\n const mouseDeltaY = mouseY - lastMouseY;\n\n const minX = 0;\n const maxX = containerBounds.width - elementBounds.width + borderFix;\n const minY = 0;\n const maxY = containerBounds.height - elementBounds.height + borderFix;\n\n const outOfBoundsLeft =\n mouseX < containerLeft ||\n (lastX === 0 &&\n mouseDeltaX > 0 &&\n mouseX < containerLeft + mouseElementOffsetX);\n const outOfBoundsRight =\n mouseX > containerRight ||\n mouseDeltaX + lastX + elementBounds.width - borderFix >\n containerBounds.width ||\n (lastX === maxX &&\n mouseDeltaX < 0 &&\n mouseX > containerLeft + maxX + mouseElementOffsetX);\n const outOfBoundsTop =\n mouseY < containerTop ||\n (lastY === 0 &&\n mouseDeltaY > 0 &&\n mouseY < containerTop + mouseElementOffsetY);\n const outOfBoundsBottom =\n mouseY > containerBottom ||\n mouseDeltaY + lastY + elementBounds.height - borderFix >\n containerBounds.height ||\n (lastY === maxY &&\n mouseDeltaY < 0 &&\n mouseY > containerTop + maxY + mouseElementOffsetY);\n\n if (outOfBoundsLeft) x = minX;\n else if (outOfBoundsRight) x = maxX;\n else x = mouseDeltaX + lastX;\n\n if (outOfBoundsTop) y = minY;\n else if (outOfBoundsBottom) y = maxY;\n else y = mouseDeltaY + lastY;\n\n if (x < 0) x = minX;\n if (y < 0) y = minY;\n\n // Store the last mouse coordinates.\n lastMouseX = mouseX;\n lastMouseY = mouseY;\n\n if (x === lastX && y === lastY) return;\n\n // Run the movement events.\n throttledMovement(x, y);\n debouncedMovement(x, y);\n\n // Store the coordinates of the element.\n lastX = x;\n lastY = y;\n };\n const handleEnd = () => {\n // Reset the positions.\n lastX = 0;\n lastY = 0;\n lastMouseX = 0;\n lastMouseY = 0;\n // Remove the move event.\n document.removeEventListener(\"mousemove\", handleMove);\n // Clean itself.\n document.removeEventListener(\"mouseup\", handleEnd);\n // Reset the draggable property to its initial state.\n element.draggable = isDraggable;\n // Reset the body selection property to a default state.\n document.body.style.userSelect = \"auto\";\n };\n const handleStart = (e: MouseEvent) => {\n // Avoid starting the movement on right click.\n if (e.button === 2) return;\n\n e.stopPropagation();\n\n // Disable the drag temporarily.\n element.draggable = false;\n\n // Fix for Firefox browser.\n element.setAttribute(\"ondragstart\", \"return false;\");\n element.setAttribute(\"draggable\", \"false\");\n\n // Store the difference between the cursor and\n // the initial coordinates of the element.\n const elementOffset = getOffset(element, container);\n lastX = elementOffset.left;\n lastY = elementOffset.top;\n\n // Store the mouse position.\n lastMouseX = e.pageX;\n lastMouseY = e.pageY;\n // Store the relative position between the mouse and the element.\n mouseElementOffsetX = e.offsetX;\n mouseElementOffsetY = e.offsetY;\n\n // Initialize the bounds.\n containerBounds = container.getBoundingClientRect();\n containerOffset = getOffset(container);\n containerTop = containerOffset.top;\n containerBottom = containerTop + containerBounds.height;\n containerLeft = containerOffset.left;\n containerRight = containerLeft + containerBounds.width;\n elementBounds = element.getBoundingClientRect();\n borderWidth = window.getComputedStyle(element).borderWidth || \"0\";\n borderFix = Number.parseInt(borderWidth) * 2;\n\n // Listen to the mouse movement.\n document.addEventListener(\"mousemove\", handleMove);\n // Listen to the moment when the mouse click is not pressed anymore.\n document.addEventListener(\"mouseup\", handleEnd);\n // Limit the mouse selection of the body.\n document.body.style.userSelect = \"none\";\n };\n\n // Event to listen the init of the movement.\n element.addEventListener(\"mousedown\", handleStart);\n\n // Returns a function to clean the event listeners.\n return () => {\n element.removeEventListener(\"mousedown\", handleStart);\n handleEnd();\n };\n}\n\n/**\n * Add the grab & resize functionality to a certain element.\n *\n * @param element Element to move.\n * @param onResized Function to execute when the element is resized.\n *\n * @return A function which will clean the event handlers when executed.\n */\nexport function addResizementListener(\n element: HTMLElement,\n onResized: (x: Position[\"x\"], y: Position[\"y\"]) => void\n): Function {\n const minWidth = 15;\n const minHeight = 15;\n\n const resizeDraggable = document.createElement(\"div\");\n resizeDraggable.className = \"resize-draggable\";\n element.appendChild(resizeDraggable);\n\n // Container of the resizable element.\n const container = element.parentElement as HTMLElement;\n // Store the initial draggable state.\n const isDraggable = element.draggable;\n // Init the coordinates.\n let lastWidth: Size[\"width\"] = 0;\n let lastHeight: Size[\"height\"] = 0;\n let lastMouseX: Position[\"x\"] = 0;\n let lastMouseY: Position[\"y\"] = 0;\n let mouseElementOffsetX: Position[\"x\"] = 0;\n let mouseElementOffsetY: Position[\"y\"] = 0;\n // Init the bounds.\n let containerBounds = container.getBoundingClientRect();\n let containerOffset = getOffset(container);\n let containerTop = containerOffset.top;\n let containerBottom = containerTop + containerBounds.height;\n let containerLeft = containerOffset.left;\n let containerRight = containerLeft + containerBounds.width;\n let elementOffset = getOffset(element);\n let elementTop = elementOffset.top;\n let elementLeft = elementOffset.left;\n let borderWidth = window.getComputedStyle(element).borderWidth || \"0\";\n let borderFix = Number.parseInt(borderWidth);\n\n // Will run onResized 32ms after its last execution.\n const debouncedResizement = debounce(32, onResized);\n // Will run onResized one time max every 16ms.\n const throttledResizement = throttle(16, onResized);\n\n const handleResize = (e: MouseEvent) => {\n // Calculate the new element coordinates.\n let width = lastWidth + (e.pageX - lastMouseX);\n let height = lastHeight + (e.pageY - lastMouseY);\n\n if (width === lastWidth && height === lastHeight) return;\n\n if (\n width < lastWidth &&\n e.pageX > elementLeft + (lastWidth - mouseElementOffsetX)\n )\n return;\n\n if (width < minWidth) {\n // Minimum value.\n width = minWidth;\n } else if (width + elementLeft - borderFix / 2 >= containerRight) {\n // Limit the size to the container.\n width = containerRight - elementLeft;\n }\n if (height < minHeight) {\n // Minimum value.\n height = minHeight;\n } else if (height + elementTop - borderFix / 2 >= containerBottom) {\n // Limit the size to the container.\n height = containerBottom - elementTop;\n }\n\n // Run the movement events.\n throttledResizement(width, height);\n debouncedResizement(width, height);\n\n // Store the coordinates of the element.\n lastWidth = width;\n lastHeight = height;\n // Store the last mouse coordinates.\n lastMouseX = e.pageX;\n lastMouseY = e.pageY;\n };\n const handleEnd = () => {\n // Reset the positions.\n lastWidth = 0;\n lastHeight = 0;\n lastMouseX = 0;\n lastMouseY = 0;\n mouseElementOffsetX = 0;\n mouseElementOffsetY = 0;\n // Remove the move event.\n document.removeEventListener(\"mousemove\", handleResize);\n // Clean itself.\n document.removeEventListener(\"mouseup\", handleEnd);\n // Reset the draggable property to its initial state.\n element.draggable = isDraggable;\n // Reset the body selection property to a default state.\n document.body.style.userSelect = \"auto\";\n };\n const handleStart = (e: MouseEvent) => {\n e.stopPropagation();\n\n // Disable the drag temporarily.\n element.draggable = false;\n\n // Store the difference between the cursor and\n // the initial coordinates of the element.\n const { width, height } = element.getBoundingClientRect();\n lastWidth = width;\n lastHeight = height;\n // Store the mouse position.\n lastMouseX = e.pageX;\n lastMouseY = e.pageY;\n // Store the relative position between the mouse and the element.\n mouseElementOffsetX = e.offsetX;\n mouseElementOffsetY = e.offsetY;\n\n // Initialize the bounds.\n containerBounds = container.getBoundingClientRect();\n containerOffset = getOffset(container);\n containerTop = containerOffset.top;\n containerBottom = containerTop + containerBounds.height;\n containerLeft = containerOffset.left;\n containerRight = containerLeft + containerBounds.width;\n elementOffset = getOffset(element);\n elementTop = elementOffset.top;\n elementLeft = elementOffset.left;\n\n // Listen to the mouse movement.\n document.addEventListener(\"mousemove\", handleResize);\n // Listen to the moment when the mouse click is not pressed anymore.\n document.addEventListener(\"mouseup\", handleEnd);\n // Limit the mouse selection of the body.\n document.body.style.userSelect = \"none\";\n };\n\n // Event to listen the init of the movement.\n resizeDraggable.addEventListener(\"mousedown\", handleStart);\n\n // Returns a function to clean the event listeners.\n return () => {\n resizeDraggable.remove();\n handleEnd();\n };\n}\n\n// TODO: Document and code\nexport function t(text: string): string {\n return text;\n}\n\nexport function helpTip(text: string): HTMLElement {\n const container = document.createElement(\"a\");\n container.className = \"tip\";\n const icon = document.createElement(\"img\");\n icon.src = helpTipIcon;\n icon.className = \"forced_title\";\n icon.setAttribute(\"alt\", text);\n icon.setAttribute(\"data-title\", text);\n icon.setAttribute(\"data-use_title_for_force_title\", \"1\");\n\n container.appendChild(icon);\n\n return container;\n}\n\ninterface PeriodSelectorOption {\n value: number;\n text: string;\n}\nexport function periodSelector(\n selectedValue: PeriodSelectorOption[\"value\"] | null,\n emptyOption: PeriodSelectorOption | null,\n options: PeriodSelectorOption[],\n onChange: (value: PeriodSelectorOption[\"value\"]) => void\n): HTMLElement {\n if (selectedValue === null) selectedValue = 0;\n const initialValue = emptyOption ? emptyOption.value : 0;\n let currentValue: number =\n selectedValue != null ? selectedValue : initialValue;\n // Main container.\n const container = document.createElement(\"div\");\n // Container for the period selector.\n const periodsContainer = document.createElement(\"div\");\n const selectPeriods = document.createElement(\"select\");\n const useManualPeriodsBtn = document.createElement(\"a\");\n // Container for the custom period input.\n const manualPeriodsContainer = document.createElement(\"div\");\n const inputTimeValue = document.createElement(\"input\");\n const unitsSelect = document.createElement(\"select\");\n const usePeriodsBtn = document.createElement(\"a\");\n // Units to multiply the custom period input.\n const unitOptions: { value: string; text: string }[] = [\n { value: \"1\", text: t(\"Seconds\").toLowerCase() },\n { value: \"60\", text: t(\"Minutes\").toLowerCase() },\n { value: \"3600\", text: t(\"Hours\").toLowerCase() },\n { value: \"86400\", text: t(\"Days\").toLowerCase() },\n { value: \"604800\", text: t(\"Weeks\").toLowerCase() },\n { value: `${86400 * 30}`, text: t(\"Months\").toLowerCase() },\n { value: `${86400 * 30 * 12}`, text: t(\"Years\").toLowerCase() }\n ];\n\n // Will be executed every time the value changes.\n const handleChange = (value: number) => {\n currentValue = value;\n onChange(currentValue);\n };\n // Will return the first period option smaller than the value.\n const findPeriodsOption = (value: number) =>\n options\n .sort((a, b) => (a.value < b.value ? 1 : -1))\n .find(optionVal => value >= optionVal.value);\n // Will return the first multiple of the value using the custom input multipliers.\n const findManualPeriodsOptionValue = (value: number) =>\n unitOptions\n .map(unitOption => Number.parseInt(unitOption.value))\n .sort((a, b) => (a < b ? 1 : -1))\n .find(optionVal => value % optionVal === 0);\n // Will find and set a valid option for the period selector.\n const setPeriodsValue = (value: number) => {\n let option = findPeriodsOption(value);\n selectPeriods.value = `${option ? option.value : initialValue}`;\n };\n // Will transform the value to show the perfect fit for the custom input period.\n const setManualPeriodsValue = (value: number) => {\n const optionVal = findManualPeriodsOptionValue(value);\n if (optionVal) {\n inputTimeValue.value = `${value / optionVal}`;\n unitsSelect.value = `${optionVal}`;\n } else {\n inputTimeValue.value = `${value}`;\n unitsSelect.value = \"1\";\n }\n };\n\n // Will modify the value to show the perfect fit for this element and show its container.\n const showPeriods = () => {\n let option = findPeriodsOption(currentValue);\n const newValue = option ? option.value : initialValue;\n selectPeriods.value = `${newValue}`;\n\n if (newValue !== currentValue) handleChange(newValue);\n\n container.replaceChild(periodsContainer, manualPeriodsContainer);\n };\n // Will modify the value to show the perfect fit for this element and show its container.\n const showManualPeriods = () => {\n const optionVal = findManualPeriodsOptionValue(currentValue);\n\n if (optionVal) {\n inputTimeValue.value = `${currentValue / optionVal}`;\n unitsSelect.value = `${optionVal}`;\n } else {\n inputTimeValue.value = `${currentValue}`;\n unitsSelect.value = \"1\";\n }\n\n container.replaceChild(manualPeriodsContainer, periodsContainer);\n };\n\n // Append the elements\n\n periodsContainer.appendChild(selectPeriods);\n periodsContainer.appendChild(useManualPeriodsBtn);\n\n manualPeriodsContainer.appendChild(inputTimeValue);\n manualPeriodsContainer.appendChild(unitsSelect);\n manualPeriodsContainer.appendChild(usePeriodsBtn);\n\n if (\n options.find(option => option.value === selectedValue) ||\n (emptyOption && emptyOption.value === selectedValue)\n ) {\n // Start with the custom periods select.\n container.appendChild(periodsContainer);\n } else {\n // Start with the manual time input\n container.appendChild(manualPeriodsContainer);\n }\n\n // Set and fill the elements.\n\n // Periods selector.\n\n selectPeriods.addEventListener(\"change\", (e: Event) =>\n handleChange(\n parseIntOr((e.target as HTMLSelectElement).value, initialValue)\n )\n );\n if (emptyOption) {\n const optionElem = document.createElement(\"option\");\n optionElem.value = `${emptyOption.value}`;\n optionElem.text = emptyOption.text;\n selectPeriods.appendChild(optionElem);\n }\n options.forEach(option => {\n const optionElem = document.createElement(\"option\");\n optionElem.value = `${option.value}`;\n optionElem.text = option.text;\n selectPeriods.appendChild(optionElem);\n });\n\n setPeriodsValue(selectedValue);\n\n useManualPeriodsBtn.appendChild(\n fontAwesomeIcon(faPencilAlt, t(\"Show manual period input\"), {\n size: \"small\"\n })\n );\n useManualPeriodsBtn.addEventListener(\"click\", e => {\n e.preventDefault();\n showManualPeriods();\n });\n\n // Manual periods input.\n\n inputTimeValue.type = \"number\";\n inputTimeValue.min = \"0\";\n inputTimeValue.required = true;\n inputTimeValue.addEventListener(\"change\", (e: Event) =>\n handleChange(\n parseIntOr((e.target as HTMLSelectElement).value, 0) *\n parseIntOr(unitsSelect.value, 1)\n )\n );\n // Select for time units.\n unitsSelect.addEventListener(\"change\", (e: Event) =>\n handleChange(\n parseIntOr(inputTimeValue.value, 0) *\n parseIntOr((e.target as HTMLSelectElement).value, 1)\n )\n );\n unitOptions.forEach(option => {\n const optionElem = document.createElement(\"option\");\n optionElem.value = `${option.value}`;\n optionElem.text = option.text;\n unitsSelect.appendChild(optionElem);\n });\n\n setManualPeriodsValue(selectedValue);\n\n usePeriodsBtn.appendChild(\n fontAwesomeIcon(faListAlt, t(\"Show periods selector\"), { size: \"small\" })\n );\n usePeriodsBtn.addEventListener(\"click\", e => {\n e.preventDefault();\n showPeriods();\n });\n\n return container;\n}\n\n/**\n * Cuts the text if their length is greater than the selected max length\n * and applies the selected ellipse to the result text.\n * @param str Text to cut\n * @param max Maximum length after cutting the text\n * @param ellipse String to be added to the cutted text\n * @returns Full text or text cutted with the ellipse\n */\nexport function ellipsize(\n str: string,\n max: number = 140,\n ellipse: string = \"…\"\n): string {\n return str.trim().length > max ? str.substr(0, max).trim() + ellipse : str;\n}\n\n// TODO: Document\nexport function autocompleteInput<T>(\n initialValue: string | null,\n onDataRequested: (value: string, done: (data: T[]) => void) => void,\n renderListElement: (data: T) => HTMLElement,\n onSelected: (data: T) => string\n): HTMLElement {\n const container = document.createElement(\"div\");\n container.classList.add(\"autocomplete\");\n\n const input = document.createElement(\"input\");\n input.type = \"text\";\n input.required = true;\n if (initialValue !== null) input.value = initialValue;\n\n const list = document.createElement(\"div\");\n list.classList.add(\"autocomplete-items\");\n\n const cleanList = () => {\n list.innerHTML = \"\";\n };\n\n input.addEventListener(\"keyup\", e => {\n const value = (e.target as HTMLInputElement).value;\n if (value) {\n onDataRequested(value, data => {\n cleanList();\n if (data instanceof Array) {\n data.forEach(item => {\n const listElement = renderListElement(item);\n listElement.addEventListener(\"click\", () => {\n input.value = onSelected(item);\n cleanList();\n });\n list.appendChild(listElement);\n });\n }\n });\n } else {\n cleanList();\n }\n });\n\n container.appendChild(input);\n container.appendChild(list);\n\n return container;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n WithModuleProps,\n LinkedVisualConsoleProps,\n AnyObject\n} from \"../lib/types\";\n\nimport {\n modulePropsDecoder,\n linkedVCPropsDecoder,\n notEmptyStringOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type StaticGraphProps = {\n type: ItemType.STATIC_GRAPH;\n imageSrc: string; // URL?\n showLastValueTooltip: \"default\" | \"enabled\" | \"disabled\";\n statusImageSrc: string | null; // URL?\n lastValue: string | null;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param showLastValueTooltip Raw value.\n */\nconst parseShowLastValueTooltip = (\n showLastValueTooltip: unknown\n): StaticGraphProps[\"showLastValueTooltip\"] => {\n switch (showLastValueTooltip) {\n case \"default\":\n case \"enabled\":\n case \"disabled\":\n return showLastValueTooltip;\n default:\n return \"default\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the static graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function staticGraphPropsDecoder(\n data: AnyObject\n): StaticGraphProps | never {\n if (typeof data.imageSrc !== \"string\" || data.imageSrc.length === 0) {\n throw new TypeError(\"invalid image src.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.STATIC_GRAPH,\n imageSrc: data.imageSrc,\n showLastValueTooltip: parseShowLastValueTooltip(data.showLastValueTooltip),\n statusImageSrc: notEmptyStringOr(data.statusImageSrc, null),\n lastValue: notEmptyStringOr(data.lastValue, null),\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class StaticGraph extends Item<StaticGraphProps> {\n protected createDomElement(): HTMLElement {\n const imgSrc = this.props.statusImageSrc || this.props.imageSrc;\n const element = document.createElement(\"div\");\n element.className = \"static-graph\";\n element.setAttribute(\"ondragstart\", \"return false;\");\n element.setAttribute(\"draggable\", \"false\");\n element.style.backgroundImage = `url(${imgSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Show last value in a tooltip.\n if (\n this.props.lastValue !== null &&\n this.props.showLastValueTooltip !== \"disabled\"\n ) {\n element.className = \"static-graph image forced_title\";\n element.setAttribute(\"data-use_title_for_force_title\", \"1\");\n element.setAttribute(\"data-title\", this.props.lastValue);\n }\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n const imgSrc = this.props.statusImageSrc || this.props.imageSrc;\n element.style.backgroundImage = `url(${imgSrc})`;\n }\n}\n","import { LinkedVisualConsoleProps, AnyObject } from \"../lib/types\";\nimport { linkedVCPropsDecoder } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type IconProps = {\n type: ItemType.ICON;\n image: string;\n imageSrc: string; // URL?\n} & ItemProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the icon props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function iconPropsDecoder(data: AnyObject): IconProps | never {\n if (typeof data.imageSrc !== \"string\" || data.imageSrc.length === 0) {\n throw new TypeError(\"invalid image src.\");\n }\n\n if (typeof data.image !== \"string\" || data.image.length === 0) {\n throw new TypeError(\"invalid image.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.ICON,\n image: data.image,\n imageSrc: data.imageSrc,\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Icon extends Item<IconProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"icon \" + this.props.image;\n element.style.backgroundImage = `url(${this.props.imageSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n element.style.backgroundImage = `url(${this.props.imageSrc})`;\n }\n}\n","/*!\n * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\nvar prefix = \"fas\";\nvar faAd = {\n prefix: 'fas',\n iconName: 'ad',\n icon: [512, 512, [], \"f641\", \"M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z\"]\n};\nvar faAddressBook = {\n prefix: 'fas',\n iconName: 'address-book',\n icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faAddressCard = {\n prefix: 'fas',\n iconName: 'address-card',\n icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faAdjust = {\n prefix: 'fas',\n iconName: 'adjust',\n icon: [512, 512, [], \"f042\", \"M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z\"]\n};\nvar faAirFreshener = {\n prefix: 'fas',\n iconName: 'air-freshener',\n icon: [512, 512, [], \"f5d0\", \"M224 160H96C43 160 0 203 0 256V480C0 497.625 14.375 512 32 512H288C305.625 512 320 497.625 320 480V256C320 203 277 160 224 160ZM160 416C115.875 416 80 380.125 80 336S115.875 256 160 256S240 291.875 240 336S204.125 416 160 416ZM224 32C224 14.375 209.625 0 192 0H128C110.375 0 96 14.375 96 32V128H224V32ZM381.781 51.578C383 50.969 384 49.359 384 48C384 46.625 383 45.031 381.781 44.422L352 32L339.562 2.219C338.969 1 337.375 0 336 0S333.031 1 332.406 2.219L320 32L290.219 44.422C289 45.031 288 46.625 288 48C288 49.359 289 50.969 290.219 51.578L320 64L332.406 93.781C333.031 95 334.625 96 336 96S338.969 95 339.562 93.781L352 64L381.781 51.578ZM448 64L460.406 93.781C461.031 95 462.625 96 464 96S466.969 95 467.562 93.781L480 64L509.781 51.578C511 50.969 512 49.359 512 48C512 46.625 511 45.031 509.781 44.422L480 32L467.562 2.219C466.969 1 465.375 0 464 0S461.031 1 460.406 2.219L448 32L418.219 44.422C417 45.031 416 46.625 416 48C416 49.359 417 50.969 418.219 51.578L448 64ZM480 224L467.562 194.219C466.969 193 465.375 192 464 192S461.031 193 460.406 194.219L448 224L418.219 236.422C417 237.031 416 238.625 416 240C416 241.359 417 242.969 418.219 243.578L448 256L460.406 285.781C461.031 287 462.625 288 464 288S466.969 287 467.562 285.781L480 256L509.781 243.578C511 242.969 512 241.359 512 240C512 238.625 511 237.031 509.781 236.422L480 224ZM445.781 147.578C447 146.969 448 145.359 448 144C448 142.625 447 141.031 445.781 140.422L416 128L403.562 98.219C402.969 97 401.375 96 400 96S397.031 97 396.406 98.219L384 128L354.219 140.422C353 141.031 352 142.625 352 144C352 145.359 353 146.969 354.219 147.578L384 160L396.406 189.781C397.031 191 398.625 192 400 192S402.969 191 403.562 189.781L416 160L445.781 147.578Z\"]\n};\nvar faAlignCenter = {\n prefix: 'fas',\n iconName: 'align-center',\n icon: [448, 512, [], \"f037\", \"M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z\"]\n};\nvar faAlignJustify = {\n prefix: 'fas',\n iconName: 'align-justify',\n icon: [448, 512, [], \"f039\", \"M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faAlignLeft = {\n prefix: 'fas',\n iconName: 'align-left',\n icon: [448, 512, [], \"f036\", \"M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faAlignRight = {\n prefix: 'fas',\n iconName: 'align-right',\n icon: [448, 512, [], \"f038\", \"M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z\"]\n};\nvar faAllergies = {\n prefix: 'fas',\n iconName: 'allergies',\n icon: [448, 512, [], \"f461\", \"M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faAmbulance = {\n prefix: 'fas',\n iconName: 'ambulance',\n icon: [640, 512, [], \"f0f9\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faAmericanSignLanguageInterpreting = {\n prefix: 'fas',\n iconName: 'american-sign-language-interpreting',\n icon: [640, 512, [], \"f2a3\", \"M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z\"]\n};\nvar faAnchor = {\n prefix: 'fas',\n iconName: 'anchor',\n icon: [576, 512, [], \"f13d\", \"M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z\"]\n};\nvar faAngleDoubleDown = {\n prefix: 'fas',\n iconName: 'angle-double-down',\n icon: [320, 512, [], \"f103\", \"M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z\"]\n};\nvar faAngleDoubleLeft = {\n prefix: 'fas',\n iconName: 'angle-double-left',\n icon: [448, 512, [], \"f100\", \"M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z\"]\n};\nvar faAngleDoubleRight = {\n prefix: 'fas',\n iconName: 'angle-double-right',\n icon: [448, 512, [], \"f101\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"]\n};\nvar faAngleDoubleUp = {\n prefix: 'fas',\n iconName: 'angle-double-up',\n icon: [320, 512, [], \"f102\", \"M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z\"]\n};\nvar faAngleDown = {\n prefix: 'fas',\n iconName: 'angle-down',\n icon: [320, 512, [], \"f107\", \"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"]\n};\nvar faAngleLeft = {\n prefix: 'fas',\n iconName: 'angle-left',\n icon: [256, 512, [], \"f104\", \"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z\"]\n};\nvar faAngleRight = {\n prefix: 'fas',\n iconName: 'angle-right',\n icon: [256, 512, [], \"f105\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"]\n};\nvar faAngleUp = {\n prefix: 'fas',\n iconName: 'angle-up',\n icon: [320, 512, [], \"f106\", \"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"]\n};\nvar faAngry = {\n prefix: 'fas',\n iconName: 'angry',\n icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z\"]\n};\nvar faAnkh = {\n prefix: 'fas',\n iconName: 'ankh',\n icon: [320, 512, [], \"f644\", \"M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z\"]\n};\nvar faAppleAlt = {\n prefix: 'fas',\n iconName: 'apple-alt',\n icon: [448, 512, [], \"f5d1\", \"M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z\"]\n};\nvar faArchive = {\n prefix: 'fas',\n iconName: 'archive',\n icon: [512, 512, [], \"f187\", \"M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z\"]\n};\nvar faArchway = {\n prefix: 'fas',\n iconName: 'archway',\n icon: [576, 512, [], \"f557\", \"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faArrowAltCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-down',\n icon: [512, 512, [], \"f358\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-left',\n icon: [512, 512, [], \"f359\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z\"]\n};\nvar faArrowAltCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-right',\n icon: [512, 512, [], \"f35a\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z\"]\n};\nvar faArrowAltCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-up',\n icon: [512, 512, [], \"f35b\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z\"]\n};\nvar faArrowCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-circle-down',\n icon: [512, 512, [], \"f0ab\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z\"]\n};\nvar faArrowCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-circle-left',\n icon: [512, 512, [], \"f0a8\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z\"]\n};\nvar faArrowCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-circle-right',\n icon: [512, 512, [], \"f0a9\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z\"]\n};\nvar faArrowCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-circle-up',\n icon: [512, 512, [], \"f0aa\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z\"]\n};\nvar faArrowDown = {\n prefix: 'fas',\n iconName: 'arrow-down',\n icon: [448, 512, [], \"f063\", \"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z\"]\n};\nvar faArrowLeft = {\n prefix: 'fas',\n iconName: 'arrow-left',\n icon: [448, 512, [], \"f060\", \"M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z\"]\n};\nvar faArrowRight = {\n prefix: 'fas',\n iconName: 'arrow-right',\n icon: [448, 512, [], \"f061\", \"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"]\n};\nvar faArrowUp = {\n prefix: 'fas',\n iconName: 'arrow-up',\n icon: [448, 512, [], \"f062\", \"M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z\"]\n};\nvar faArrowsAlt = {\n prefix: 'fas',\n iconName: 'arrows-alt',\n icon: [512, 512, [], \"f0b2\", \"M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z\"]\n};\nvar faArrowsAltH = {\n prefix: 'fas',\n iconName: 'arrows-alt-h',\n icon: [512, 512, [], \"f337\", \"M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z\"]\n};\nvar faArrowsAltV = {\n prefix: 'fas',\n iconName: 'arrows-alt-v',\n icon: [256, 512, [], \"f338\", \"M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z\"]\n};\nvar faAssistiveListeningSystems = {\n prefix: 'fas',\n iconName: 'assistive-listening-systems',\n icon: [512, 512, [], \"f2a2\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z\"]\n};\nvar faAsterisk = {\n prefix: 'fas',\n iconName: 'asterisk',\n icon: [512, 512, [], \"f069\", \"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z\"]\n};\nvar faAt = {\n prefix: 'fas',\n iconName: 'at',\n icon: [512, 512, [], \"f1fa\", \"M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z\"]\n};\nvar faAtlas = {\n prefix: 'fas',\n iconName: 'atlas',\n icon: [448, 512, [], \"f558\", \"M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z\"]\n};\nvar faAtom = {\n prefix: 'fas',\n iconName: 'atom',\n icon: [448, 512, [], \"f5d2\", \"M223.99908,224a32,32,0,1,0,32.00782,32A32.06431,32.06431,0,0,0,223.99908,224Zm214.172-96c-10.877-19.5-40.50979-50.75-116.27544-41.875C300.39168,34.875,267.63386,0,223.99908,0s-76.39066,34.875-97.89653,86.125C50.3369,77.375,20.706,108.5,9.82907,128-6.54984,157.375-5.17484,201.125,34.958,256-5.17484,310.875-6.54984,354.625,9.82907,384c29.13087,52.375,101.64652,43.625,116.27348,41.875C147.60842,477.125,180.36429,512,223.99908,512s76.3926-34.875,97.89652-86.125c14.62891,1.75,87.14456,10.5,116.27544-41.875C454.55,354.625,453.175,310.875,413.04017,256,453.175,201.125,454.55,157.375,438.171,128ZM63.33886,352c-4-7.25-.125-24.75,15.00391-48.25,6.87695,6.5,14.12891,12.875,21.88087,19.125,1.625,13.75,4,27.125,6.75,40.125C82.34472,363.875,67.09081,358.625,63.33886,352Zm36.88478-162.875c-7.752,6.25-15.00392,12.625-21.88087,19.125-15.12891-23.5-19.00392-41-15.00391-48.25,3.377-6.125,16.37891-11.5,37.88478-11.5,1.75,0,3.875.375,5.75.375C104.09864,162.25,101.84864,175.625,100.22364,189.125ZM223.99908,64c9.50195,0,22.25586,13.5,33.88282,37.25-11.252,3.75-22.50391,8-33.88282,12.875-11.377-4.875-22.62892-9.125-33.88283-12.875C201.74516,77.5,214.49712,64,223.99908,64Zm0,384c-9.502,0-22.25392-13.5-33.88283-37.25,11.25391-3.75,22.50587-8,33.88283-12.875C235.378,402.75,246.62994,407,257.8819,410.75,246.25494,434.5,233.501,448,223.99908,448Zm0-112a80,80,0,1,1,80-80A80.00023,80.00023,0,0,1,223.99908,336ZM384.6593,352c-3.625,6.625-19.00392,11.875-43.63479,11,2.752-13,5.127-26.375,6.752-40.125,7.75195-6.25,15.00391-12.625,21.87891-19.125C384.7843,327.25,388.6593,344.75,384.6593,352ZM369.65538,208.25c-6.875-6.5-14.127-12.875-21.87891-19.125-1.625-13.5-3.875-26.875-6.752-40.25,1.875,0,4.002-.375,5.752-.375,21.50391,0,34.50782,5.375,37.88283,11.5C388.6593,167.25,384.7843,184.75,369.65538,208.25Z\"]\n};\nvar faAudioDescription = {\n prefix: 'fas',\n iconName: 'audio-description',\n icon: [512, 512, [], \"f29e\", \"M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z\"]\n};\nvar faAward = {\n prefix: 'fas',\n iconName: 'award',\n icon: [384, 512, [], \"f559\", \"M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z\"]\n};\nvar faBaby = {\n prefix: 'fas',\n iconName: 'baby',\n icon: [384, 512, [], \"f77c\", \"M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z\"]\n};\nvar faBabyCarriage = {\n prefix: 'fas',\n iconName: 'baby-carriage',\n icon: [512, 512, [], \"f77d\", \"M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z\"]\n};\nvar faBackspace = {\n prefix: 'fas',\n iconName: 'backspace',\n icon: [640, 512, [], \"f55a\", \"M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z\"]\n};\nvar faBackward = {\n prefix: 'fas',\n iconName: 'backward',\n icon: [512, 512, [], \"f04a\", \"M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z\"]\n};\nvar faBacon = {\n prefix: 'fas',\n iconName: 'bacon',\n icon: [576, 512, [], \"f7e5\", \"M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z\"]\n};\nvar faBacteria = {\n prefix: 'fas',\n iconName: 'bacteria',\n icon: [640, 512, [], \"e059\", \"M272.35,226.4A17.71,17.71,0,0,0,281.46,203l-4-9.08a121.29,121.29,0,0,1,12.36-3.08A83.34,83.34,0,0,0,323.57,177l10,9a17.76,17.76,0,1,0,23.92-26.27l-9.72-8.76a83.12,83.12,0,0,0,11.65-48.18l11.85-3.51a17.73,17.73,0,1,0-10.15-34l-11.34,3.36a84,84,0,0,0-36.38-35.57l2.84-10.85a17.8,17.8,0,0,0-34.47-8.93l-2.82,10.78a83.25,83.25,0,0,0-16.74,1.1C250.83,27,240,30.22,229.1,33.39l-3.38-9.46a17.8,17.8,0,0,0-33.56,11.89l3.49,9.8a286.74,286.74,0,0,0-43.94,23.57l-6.32-8.43a17.9,17.9,0,0,0-24.94-3.6A17.69,17.69,0,0,0,116.84,82l6.45,8.61a286.59,286.59,0,0,0-34.95,35.33l-8.82-6.42a17.84,17.84,0,0,0-24.89,3.86,17.66,17.66,0,0,0,3.88,24.77l8.88,6.47a286.6,286.6,0,0,0-23,43.91l-10.48-3.59a17.73,17.73,0,1,0-11.59,33.52L32.67,232c-2.79,10-5.79,19.84-7.52,30.22a83.16,83.16,0,0,0-.82,19l-11.58,3.43a17.73,17.73,0,1,0,10.13,34l11.27-3.33a83.51,83.51,0,0,0,36.39,35.43l-2.88,11.06a17.81,17.81,0,0,0,34.48,8.92l2.87-11c1,0,2.07.26,3.1.26a83.39,83.39,0,0,0,45.65-13.88l8.59,8.8a17.77,17.77,0,0,0,25.56-24.7l-9.14-9.37a83.41,83.41,0,0,0,12.08-31.05,119.08,119.08,0,0,1,3.87-15.53l9,4.22a17.74,17.74,0,1,0,15.15-32.09l-8.8-4.11c.67-1,1.2-2.08,1.9-3.05a119.89,119.89,0,0,1,7.87-9.41,121.73,121.73,0,0,1,11.65-11.4,119.49,119.49,0,0,1,9.94-7.82c1.12-.77,2.32-1.42,3.47-2.15l3.92,8.85a17.86,17.86,0,0,0,16.32,10.58A18.14,18.14,0,0,0,272.35,226.4ZM128,256a32,32,0,1,1,32-32A32,32,0,0,1,128,256Zm80-96a16,16,0,1,1,16-16A16,16,0,0,1,208,160Zm431.26,45.3a17.79,17.79,0,0,0-17.06-12.69,17.55,17.55,0,0,0-5.08.74l-11.27,3.33a83.61,83.61,0,0,0-36.39-35.43l2.88-11.06a17.81,17.81,0,0,0-34.48-8.91l-2.87,11c-1,0-2.07-.26-3.1-.26a83.32,83.32,0,0,0-45.65,13.89l-8.59-8.81a17.77,17.77,0,0,0-25.56,24.7l9.14,9.37a83.28,83.28,0,0,0-12.08,31.06,119.34,119.34,0,0,1-3.87,15.52l-9-4.22a17.74,17.74,0,1,0-15.15,32.09l8.8,4.11c-.67,1-1.2,2.08-1.89,3.05a117.71,117.71,0,0,1-7.94,9.47,119,119,0,0,1-11.57,11.33,121.59,121.59,0,0,1-10,7.83c-1.12.77-2.32,1.42-3.47,2.15l-3.92-8.85a17.86,17.86,0,0,0-16.32-10.58,18.14,18.14,0,0,0-7.18,1.5A17.71,17.71,0,0,0,358.54,309l4,9.08a118.71,118.71,0,0,1-12.36,3.08,83.34,83.34,0,0,0-33.77,13.9l-10-9a17.77,17.77,0,1,0-23.92,26.28l9.72,8.75a83.12,83.12,0,0,0-11.65,48.18l-11.86,3.51a17.73,17.73,0,1,0,10.16,34l11.34-3.36A84,84,0,0,0,326.61,479l-2.84,10.85a17.8,17.8,0,0,0,34.47,8.93L361.06,488a83.3,83.3,0,0,0,16.74-1.1c11.37-1.89,22.24-5.07,33.1-8.24l3.38,9.46a17.8,17.8,0,0,0,33.56-11.89l-3.49-9.79a287.66,287.66,0,0,0,43.94-23.58l6.32,8.43a17.88,17.88,0,0,0,24.93,3.6A17.67,17.67,0,0,0,523.16,430l-6.45-8.61a287.37,287.37,0,0,0,34.95-35.34l8.82,6.42a17.76,17.76,0,1,0,21-28.63l-8.88-6.46a287.17,287.17,0,0,0,23-43.92l10.48,3.59a17.73,17.73,0,1,0,11.59-33.52L607.33,280c2.79-10,5.79-19.84,7.52-30.21a83.27,83.27,0,0,0,.82-19.05l11.58-3.43A17.7,17.7,0,0,0,639.26,205.3ZM416,416a32,32,0,1,1,32-32A32,32,0,0,1,416,416Z\"]\n};\nvar faBacterium = {\n prefix: 'fas',\n iconName: 'bacterium',\n icon: [512, 512, [], \"e05a\", \"M511,102.93A23.76,23.76,0,0,0,481.47,87l-15.12,4.48a111.85,111.85,0,0,0-48.5-47.42l3.79-14.47a23.74,23.74,0,0,0-46-11.91l-3.76,14.37a111.94,111.94,0,0,0-22.33,1.47,386.74,386.74,0,0,0-44.33,10.41l-4.3-12a23.74,23.74,0,0,0-44.75,15.85l4.3,12.05a383.4,383.4,0,0,0-58.69,31.83l-8-10.63a23.85,23.85,0,0,0-33.24-4.8,23.57,23.57,0,0,0-4.83,33.09l8,10.63a386.14,386.14,0,0,0-46.7,47.44l-11-8a23.68,23.68,0,1,0-28,38.17l11.09,8.06a383.45,383.45,0,0,0-30.92,58.75l-12.93-4.43a23.65,23.65,0,1,0-15.47,44.69l13,4.48a385.81,385.81,0,0,0-9.3,40.53A111.58,111.58,0,0,0,32.44,375L17,379.56a23.64,23.64,0,0,0,13.51,45.31l15-4.44a111.49,111.49,0,0,0,48.53,47.24l-3.85,14.75a23.66,23.66,0,0,0,17,28.83,24.7,24.7,0,0,0,6,.75,23.73,23.73,0,0,0,23-17.7L140,479.67c1.37.05,2.77.35,4.13.35A111.22,111.22,0,0,0,205,461.5l11.45,11.74a23.7,23.7,0,0,0,34.08-32.93l-12.19-12.5a111,111,0,0,0,16.11-41.4,158.69,158.69,0,0,1,5.16-20.71l12,5.64a23.66,23.66,0,1,0,20.19-42.79l-11.72-5.49c.89-1.32,1.59-2.77,2.52-4.06a157.86,157.86,0,0,1,10.46-12.49,159.5,159.5,0,0,1,15.59-15.28,162.18,162.18,0,0,1,13.23-10.4c1.5-1,3.1-1.89,4.63-2.87l5.23,11.8a23.74,23.74,0,0,0,43.48-19.08l-5.36-12.11a158.87,158.87,0,0,1,16.49-4.1,111,111,0,0,0,45-18.54l13.33,12a23.69,23.69,0,1,0,31.88-35l-12.94-11.67A110.83,110.83,0,0,0,479.21,137L495,132.32A23.61,23.61,0,0,0,511,102.93ZM160,368a48,48,0,1,1,48-48A48,48,0,0,1,160,368Zm80-136a24,24,0,1,1,24-24A24,24,0,0,1,240,232Z\"]\n};\nvar faBahai = {\n prefix: 'fas',\n iconName: 'bahai',\n icon: [512, 512, [], \"f666\", \"M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z\"]\n};\nvar faBalanceScale = {\n prefix: 'fas',\n iconName: 'balance-scale',\n icon: [640, 512, [], \"f24e\", \"M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faBalanceScaleLeft = {\n prefix: 'fas',\n iconName: 'balance-scale-left',\n icon: [640, 512, [], \"f515\", \"M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z\"]\n};\nvar faBalanceScaleRight = {\n prefix: 'fas',\n iconName: 'balance-scale-right',\n icon: [640, 512, [], \"f516\", \"M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z\"]\n};\nvar faBan = {\n prefix: 'fas',\n iconName: 'ban',\n icon: [512, 512, [], \"f05e\", \"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"]\n};\nvar faBandAid = {\n prefix: 'fas',\n iconName: 'band-aid',\n icon: [640, 512, [], \"f462\", \"M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"]\n};\nvar faBarcode = {\n prefix: 'fas',\n iconName: 'barcode',\n icon: [512, 512, [], \"f02a\", \"M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z\"]\n};\nvar faBars = {\n prefix: 'fas',\n iconName: 'bars',\n icon: [448, 512, [], \"f0c9\", \"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faBaseballBall = {\n prefix: 'fas',\n iconName: 'baseball-ball',\n icon: [496, 512, [], \"f433\", \"M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z\"]\n};\nvar faBasketballBall = {\n prefix: 'fas',\n iconName: 'basketball-ball',\n icon: [496, 512, [], \"f434\", \"M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z\"]\n};\nvar faBath = {\n prefix: 'fas',\n iconName: 'bath',\n icon: [512, 512, [], \"f2cd\", \"M32,384a95.4,95.4,0,0,0,32,71.09V496a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V480H384v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V455.09A95.4,95.4,0,0,0,480,384V336H32ZM496,256H80V69.25a21.26,21.26,0,0,1,36.28-15l19.27,19.26c-13.13,29.88-7.61,59.11,8.62,79.73l-.17.17A16,16,0,0,0,144,176l11.31,11.31a16,16,0,0,0,22.63,0L283.31,81.94a16,16,0,0,0,0-22.63L272,48a16,16,0,0,0-22.62,0l-.17.17c-20.62-16.23-49.83-21.75-79.73-8.62L150.22,20.28A69.25,69.25,0,0,0,32,69.25V256H16A16,16,0,0,0,0,272v16a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V272A16,16,0,0,0,496,256Z\"]\n};\nvar faBatteryEmpty = {\n prefix: 'fas',\n iconName: 'battery-empty',\n icon: [640, 512, [], \"f244\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z\"]\n};\nvar faBatteryFull = {\n prefix: 'fas',\n iconName: 'battery-full',\n icon: [640, 512, [], \"f240\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z\"]\n};\nvar faBatteryHalf = {\n prefix: 'fas',\n iconName: 'battery-half',\n icon: [640, 512, [], \"f242\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z\"]\n};\nvar faBatteryQuarter = {\n prefix: 'fas',\n iconName: 'battery-quarter',\n icon: [640, 512, [], \"f243\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z\"]\n};\nvar faBatteryThreeQuarters = {\n prefix: 'fas',\n iconName: 'battery-three-quarters',\n icon: [640, 512, [], \"f241\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z\"]\n};\nvar faBed = {\n prefix: 'fas',\n iconName: 'bed',\n icon: [640, 512, [], \"f236\", \"M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z\"]\n};\nvar faBeer = {\n prefix: 'fas',\n iconName: 'beer',\n icon: [448, 512, [], \"f0fc\", \"M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z\"]\n};\nvar faBell = {\n prefix: 'fas',\n iconName: 'bell',\n icon: [448, 512, [], \"f0f3\", \"M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z\"]\n};\nvar faBellSlash = {\n prefix: 'fas',\n iconName: 'bell-slash',\n icon: [640, 512, [], \"f1f6\", \"M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBezierCurve = {\n prefix: 'fas',\n iconName: 'bezier-curve',\n icon: [640, 512, [], \"f55b\", \"M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faBible = {\n prefix: 'fas',\n iconName: 'bible',\n icon: [448, 512, [], \"f647\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faBicycle = {\n prefix: 'fas',\n iconName: 'bicycle',\n icon: [640, 512, [], \"f206\", \"M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z\"]\n};\nvar faBiking = {\n prefix: 'fas',\n iconName: 'biking',\n icon: [640, 512, [], \"f84a\", \"M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z\"]\n};\nvar faBinoculars = {\n prefix: 'fas',\n iconName: 'binoculars',\n icon: [512, 512, [], \"f1e5\", \"M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z\"]\n};\nvar faBiohazard = {\n prefix: 'fas',\n iconName: 'biohazard',\n icon: [576, 512, [], \"f780\", \"M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faBirthdayCake = {\n prefix: 'fas',\n iconName: 'birthday-cake',\n icon: [448, 512, [], \"f1fd\", \"M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z\"]\n};\nvar faBlender = {\n prefix: 'fas',\n iconName: 'blender',\n icon: [512, 512, [], \"f517\", \"M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z\"]\n};\nvar faBlenderPhone = {\n prefix: 'fas',\n iconName: 'blender-phone',\n icon: [576, 512, [], \"f6b6\", \"M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBlind = {\n prefix: 'fas',\n iconName: 'blind',\n icon: [384, 512, [], \"f29d\", \"M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z\"]\n};\nvar faBlog = {\n prefix: 'fas',\n iconName: 'blog',\n icon: [512, 512, [], \"f781\", \"M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faBold = {\n prefix: 'fas',\n iconName: 'bold',\n icon: [384, 512, [], \"f032\", \"M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z\"]\n};\nvar faBolt = {\n prefix: 'fas',\n iconName: 'bolt',\n icon: [320, 512, [], \"f0e7\", \"M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z\"]\n};\nvar faBomb = {\n prefix: 'fas',\n iconName: 'bomb',\n icon: [512, 512, [], \"f1e2\", \"M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z\"]\n};\nvar faBone = {\n prefix: 'fas',\n iconName: 'bone',\n icon: [640, 512, [], \"f5d7\", \"M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z\"]\n};\nvar faBong = {\n prefix: 'fas',\n iconName: 'bong',\n icon: [448, 512, [], \"f55c\", \"M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z\"]\n};\nvar faBook = {\n prefix: 'fas',\n iconName: 'book',\n icon: [448, 512, [], \"f02d\", \"M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z\"]\n};\nvar faBookDead = {\n prefix: 'fas',\n iconName: 'book-dead',\n icon: [448, 512, [], \"f6b7\", \"M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z\"]\n};\nvar faBookMedical = {\n prefix: 'fas',\n iconName: 'book-medical',\n icon: [448, 512, [], \"f7e6\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z\"]\n};\nvar faBookOpen = {\n prefix: 'fas',\n iconName: 'book-open',\n icon: [576, 512, [], \"f518\", \"M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z\"]\n};\nvar faBookReader = {\n prefix: 'fas',\n iconName: 'book-reader',\n icon: [512, 512, [], \"f5da\", \"M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z\"]\n};\nvar faBookmark = {\n prefix: 'fas',\n iconName: 'bookmark',\n icon: [384, 512, [], \"f02e\", \"M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z\"]\n};\nvar faBorderAll = {\n prefix: 'fas',\n iconName: 'border-all',\n icon: [448, 512, [], \"f84c\", \"M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z\"]\n};\nvar faBorderNone = {\n prefix: 'fas',\n iconName: 'border-none',\n icon: [448, 512, [], \"f850\", \"M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faBorderStyle = {\n prefix: 'fas',\n iconName: 'border-style',\n icon: [448, 512, [], \"f853\", \"M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faBowlingBall = {\n prefix: 'fas',\n iconName: 'bowling-ball',\n icon: [496, 512, [], \"f436\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faBox = {\n prefix: 'fas',\n iconName: 'box',\n icon: [512, 512, [], \"f466\", \"M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z\"]\n};\nvar faBoxOpen = {\n prefix: 'fas',\n iconName: 'box-open',\n icon: [640, 512, [], \"f49e\", \"M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z\"]\n};\nvar faBoxTissue = {\n prefix: 'fas',\n iconName: 'box-tissue',\n icon: [512, 512, [], \"e05b\", \"M383.88,287.82l64-192H338.47a70.2,70.2,0,0,1-66.59-48,70.21,70.21,0,0,0-66.6-48H63.88l64,288Zm-384,192a32,32,0,0,0,32,32h448a32,32,0,0,0,32-32v-64H-.12Zm480-256H438.94l-21.33,64h14.27a16,16,0,0,1,0,32h-352a16,16,0,1,1,0-32H95.09l-14.22-64h-49a32,32,0,0,0-32,32v128h512v-128A32,32,0,0,0,479.88,223.82Z\"]\n};\nvar faBoxes = {\n prefix: 'fas',\n iconName: 'boxes',\n icon: [576, 512, [], \"f468\", \"M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z\"]\n};\nvar faBraille = {\n prefix: 'fas',\n iconName: 'braille',\n icon: [640, 512, [], \"f2a1\", \"M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faBrain = {\n prefix: 'fas',\n iconName: 'brain',\n icon: [576, 512, [], \"f5dc\", \"M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z\"]\n};\nvar faBreadSlice = {\n prefix: 'fas',\n iconName: 'bread-slice',\n icon: [576, 512, [], \"f7ec\", \"M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z\"]\n};\nvar faBriefcase = {\n prefix: 'fas',\n iconName: 'briefcase',\n icon: [512, 512, [], \"f0b1\", \"M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z\"]\n};\nvar faBriefcaseMedical = {\n prefix: 'fas',\n iconName: 'briefcase-medical',\n icon: [512, 512, [], \"f469\", \"M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z\"]\n};\nvar faBroadcastTower = {\n prefix: 'fas',\n iconName: 'broadcast-tower',\n icon: [640, 512, [], \"f519\", \"M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z\"]\n};\nvar faBroom = {\n prefix: 'fas',\n iconName: 'broom',\n icon: [640, 512, [], \"f51a\", \"M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z\"]\n};\nvar faBrush = {\n prefix: 'fas',\n iconName: 'brush',\n icon: [384, 512, [], \"f55d\", \"M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z\"]\n};\nvar faBug = {\n prefix: 'fas',\n iconName: 'bug',\n icon: [512, 512, [], \"f188\", \"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\"]\n};\nvar faBuilding = {\n prefix: 'fas',\n iconName: 'building',\n icon: [448, 512, [], \"f1ad\", \"M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z\"]\n};\nvar faBullhorn = {\n prefix: 'fas',\n iconName: 'bullhorn',\n icon: [576, 512, [], \"f0a1\", \"M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z\"]\n};\nvar faBullseye = {\n prefix: 'fas',\n iconName: 'bullseye',\n icon: [496, 512, [], \"f140\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z\"]\n};\nvar faBurn = {\n prefix: 'fas',\n iconName: 'burn',\n icon: [384, 512, [], \"f46a\", \"M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z\"]\n};\nvar faBus = {\n prefix: 'fas',\n iconName: 'bus',\n icon: [512, 512, [], \"f207\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusAlt = {\n prefix: 'fas',\n iconName: 'bus-alt',\n icon: [512, 512, [], \"f55e\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusinessTime = {\n prefix: 'fas',\n iconName: 'business-time',\n icon: [640, 512, [], \"f64a\", \"M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z\"]\n};\nvar faCalculator = {\n prefix: 'fas',\n iconName: 'calculator',\n icon: [448, 512, [], \"f1ec\", \"M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z\"]\n};\nvar faCalendar = {\n prefix: 'fas',\n iconName: 'calendar',\n icon: [448, 512, [], \"f133\", \"M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z\"]\n};\nvar faCalendarAlt = {\n prefix: 'fas',\n iconName: 'calendar-alt',\n icon: [448, 512, [], \"f073\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarCheck = {\n prefix: 'fas',\n iconName: 'calendar-check',\n icon: [448, 512, [], \"f274\", \"M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z\"]\n};\nvar faCalendarDay = {\n prefix: 'fas',\n iconName: 'calendar-day',\n icon: [448, 512, [], \"f783\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarMinus = {\n prefix: 'fas',\n iconName: 'calendar-minus',\n icon: [448, 512, [], \"f272\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z\"]\n};\nvar faCalendarPlus = {\n prefix: 'fas',\n iconName: 'calendar-plus',\n icon: [448, 512, [], \"f271\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z\"]\n};\nvar faCalendarTimes = {\n prefix: 'fas',\n iconName: 'calendar-times',\n icon: [448, 512, [], \"f273\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z\"]\n};\nvar faCalendarWeek = {\n prefix: 'fas',\n iconName: 'calendar-week',\n icon: [448, 512, [], \"f784\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCamera = {\n prefix: 'fas',\n iconName: 'camera',\n icon: [512, 512, [], \"f030\", \"M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z\"]\n};\nvar faCameraRetro = {\n prefix: 'fas',\n iconName: 'camera-retro',\n icon: [512, 512, [], \"f083\", \"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"]\n};\nvar faCampground = {\n prefix: 'fas',\n iconName: 'campground',\n icon: [640, 512, [], \"f6bb\", \"M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z\"]\n};\nvar faCandyCane = {\n prefix: 'fas',\n iconName: 'candy-cane',\n icon: [512, 512, [], \"f786\", \"M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z\"]\n};\nvar faCannabis = {\n prefix: 'fas',\n iconName: 'cannabis',\n icon: [512, 512, [], \"f55f\", \"M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z\"]\n};\nvar faCapsules = {\n prefix: 'fas',\n iconName: 'capsules',\n icon: [576, 512, [], \"f46b\", \"M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z\"]\n};\nvar faCar = {\n prefix: 'fas',\n iconName: 'car',\n icon: [512, 512, [], \"f1b9\", \"M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarAlt = {\n prefix: 'fas',\n iconName: 'car-alt',\n icon: [480, 512, [], \"f5de\", \"M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarBattery = {\n prefix: 'fas',\n iconName: 'car-battery',\n icon: [512, 512, [], \"f5df\", \"M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faCarCrash = {\n prefix: 'fas',\n iconName: 'car-crash',\n icon: [640, 512, [], \"f5e1\", \"M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z\"]\n};\nvar faCarSide = {\n prefix: 'fas',\n iconName: 'car-side',\n icon: [640, 512, [], \"f5e4\", \"M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faCaravan = {\n prefix: 'fas',\n iconName: 'caravan',\n icon: [640, 512, [], \"f8ff\", \"M416,208a16,16,0,1,0,16,16A16,16,0,0,0,416,208ZM624,320H576V160A160,160,0,0,0,416,0H64A64,64,0,0,0,0,64V320a64,64,0,0,0,64,64H96a96,96,0,0,0,192,0H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM192,432a48,48,0,1,1,48-48A48.05,48.05,0,0,1,192,432Zm64-240a32,32,0,0,1-32,32H96a32,32,0,0,1-32-32V128A32,32,0,0,1,96,96H224a32,32,0,0,1,32,32ZM448,320H320V128a32,32,0,0,1,32-32h64a32,32,0,0,1,32,32Z\"]\n};\nvar faCaretDown = {\n prefix: 'fas',\n iconName: 'caret-down',\n icon: [320, 512, [], \"f0d7\", \"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"]\n};\nvar faCaretLeft = {\n prefix: 'fas',\n iconName: 'caret-left',\n icon: [192, 512, [], \"f0d9\", \"M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z\"]\n};\nvar faCaretRight = {\n prefix: 'fas',\n iconName: 'caret-right',\n icon: [192, 512, [], \"f0da\", \"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\"]\n};\nvar faCaretSquareDown = {\n prefix: 'fas',\n iconName: 'caret-square-down',\n icon: [448, 512, [], \"f150\", \"M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z\"]\n};\nvar faCaretSquareLeft = {\n prefix: 'fas',\n iconName: 'caret-square-left',\n icon: [448, 512, [], \"f191\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z\"]\n};\nvar faCaretSquareRight = {\n prefix: 'fas',\n iconName: 'caret-square-right',\n icon: [448, 512, [], \"f152\", \"M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z\"]\n};\nvar faCaretSquareUp = {\n prefix: 'fas',\n iconName: 'caret-square-up',\n icon: [448, 512, [], \"f151\", \"M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z\"]\n};\nvar faCaretUp = {\n prefix: 'fas',\n iconName: 'caret-up',\n icon: [320, 512, [], \"f0d8\", \"M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z\"]\n};\nvar faCarrot = {\n prefix: 'fas',\n iconName: 'carrot',\n icon: [512, 512, [], \"f787\", \"M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z\"]\n};\nvar faCartArrowDown = {\n prefix: 'fas',\n iconName: 'cart-arrow-down',\n icon: [576, 512, [], \"f218\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z\"]\n};\nvar faCartPlus = {\n prefix: 'fas',\n iconName: 'cart-plus',\n icon: [576, 512, [], \"f217\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z\"]\n};\nvar faCashRegister = {\n prefix: 'fas',\n iconName: 'cash-register',\n icon: [512, 512, [], \"f788\", \"M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z\"]\n};\nvar faCat = {\n prefix: 'fas',\n iconName: 'cat',\n icon: [512, 512, [], \"f6be\", \"M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faCertificate = {\n prefix: 'fas',\n iconName: 'certificate',\n icon: [512, 512, [], \"f0a3\", \"M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z\"]\n};\nvar faChair = {\n prefix: 'fas',\n iconName: 'chair',\n icon: [448, 512, [], \"f6c0\", \"M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z\"]\n};\nvar faChalkboard = {\n prefix: 'fas',\n iconName: 'chalkboard',\n icon: [640, 512, [], \"f51b\", \"M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChalkboardTeacher = {\n prefix: 'fas',\n iconName: 'chalkboard-teacher',\n icon: [640, 512, [], \"f51c\", \"M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z\"]\n};\nvar faChargingStation = {\n prefix: 'fas',\n iconName: 'charging-station',\n icon: [576, 512, [], \"f5e7\", \"M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z\"]\n};\nvar faChartArea = {\n prefix: 'fas',\n iconName: 'chart-area',\n icon: [512, 512, [], \"f1fe\", \"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z\"]\n};\nvar faChartBar = {\n prefix: 'fas',\n iconName: 'chart-bar',\n icon: [512, 512, [], \"f080\", \"M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChartLine = {\n prefix: 'fas',\n iconName: 'chart-line',\n icon: [512, 512, [], \"f201\", \"M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z\"]\n};\nvar faChartPie = {\n prefix: 'fas',\n iconName: 'chart-pie',\n icon: [544, 512, [], \"f200\", \"M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z\"]\n};\nvar faCheck = {\n prefix: 'fas',\n iconName: 'check',\n icon: [512, 512, [], \"f00c\", \"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"]\n};\nvar faCheckCircle = {\n prefix: 'fas',\n iconName: 'check-circle',\n icon: [512, 512, [], \"f058\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\"]\n};\nvar faCheckDouble = {\n prefix: 'fas',\n iconName: 'check-double',\n icon: [512, 512, [], \"f560\", \"M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z\"]\n};\nvar faCheckSquare = {\n prefix: 'fas',\n iconName: 'check-square',\n icon: [448, 512, [], \"f14a\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z\"]\n};\nvar faCheese = {\n prefix: 'fas',\n iconName: 'cheese',\n icon: [512, 512, [], \"f7ef\", \"M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z\"]\n};\nvar faChess = {\n prefix: 'fas',\n iconName: 'chess',\n icon: [512, 512, [], \"f439\", \"M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z\"]\n};\nvar faChessBishop = {\n prefix: 'fas',\n iconName: 'chess-bishop',\n icon: [320, 512, [], \"f43a\", \"M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessBoard = {\n prefix: 'fas',\n iconName: 'chess-board',\n icon: [512, 512, [], \"f43c\", \"M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z\"]\n};\nvar faChessKing = {\n prefix: 'fas',\n iconName: 'chess-king',\n icon: [448, 512, [], \"f43f\", \"M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z\"]\n};\nvar faChessKnight = {\n prefix: 'fas',\n iconName: 'chess-knight',\n icon: [384, 512, [], \"f441\", \"M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessPawn = {\n prefix: 'fas',\n iconName: 'chess-pawn',\n icon: [320, 512, [], \"f443\", \"M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessQueen = {\n prefix: 'fas',\n iconName: 'chess-queen',\n icon: [512, 512, [], \"f445\", \"M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z\"]\n};\nvar faChessRook = {\n prefix: 'fas',\n iconName: 'chess-rook',\n icon: [384, 512, [], \"f447\", \"M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChevronCircleDown = {\n prefix: 'fas',\n iconName: 'chevron-circle-down',\n icon: [512, 512, [], \"f13a\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z\"]\n};\nvar faChevronCircleLeft = {\n prefix: 'fas',\n iconName: 'chevron-circle-left',\n icon: [512, 512, [], \"f137\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z\"]\n};\nvar faChevronCircleRight = {\n prefix: 'fas',\n iconName: 'chevron-circle-right',\n icon: [512, 512, [], \"f138\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z\"]\n};\nvar faChevronCircleUp = {\n prefix: 'fas',\n iconName: 'chevron-circle-up',\n icon: [512, 512, [], \"f139\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z\"]\n};\nvar faChevronDown = {\n prefix: 'fas',\n iconName: 'chevron-down',\n icon: [448, 512, [], \"f078\", \"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"]\n};\nvar faChevronLeft = {\n prefix: 'fas',\n iconName: 'chevron-left',\n icon: [320, 512, [], \"f053\", \"M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z\"]\n};\nvar faChevronRight = {\n prefix: 'fas',\n iconName: 'chevron-right',\n icon: [320, 512, [], \"f054\", \"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"]\n};\nvar faChevronUp = {\n prefix: 'fas',\n iconName: 'chevron-up',\n icon: [448, 512, [], \"f077\", \"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"]\n};\nvar faChild = {\n prefix: 'fas',\n iconName: 'child',\n icon: [384, 512, [], \"f1ae\", \"M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z\"]\n};\nvar faChurch = {\n prefix: 'fas',\n iconName: 'church',\n icon: [640, 512, [], \"f51d\", \"M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z\"]\n};\nvar faCircle = {\n prefix: 'fas',\n iconName: 'circle',\n icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z\"]\n};\nvar faCircleNotch = {\n prefix: 'fas',\n iconName: 'circle-notch',\n icon: [512, 512, [], \"f1ce\", \"M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z\"]\n};\nvar faCity = {\n prefix: 'fas',\n iconName: 'city',\n icon: [640, 512, [], \"f64f\", \"M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z\"]\n};\nvar faClinicMedical = {\n prefix: 'fas',\n iconName: 'clinic-medical',\n icon: [576, 512, [], \"f7f2\", \"M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z\"]\n};\nvar faClipboard = {\n prefix: 'fas',\n iconName: 'clipboard',\n icon: [384, 512, [], \"f328\", \"M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z\"]\n};\nvar faClipboardCheck = {\n prefix: 'fas',\n iconName: 'clipboard-check',\n icon: [384, 512, [], \"f46c\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z\"]\n};\nvar faClipboardList = {\n prefix: 'fas',\n iconName: 'clipboard-list',\n icon: [384, 512, [], \"f46d\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faClock = {\n prefix: 'fas',\n iconName: 'clock',\n icon: [512, 512, [], \"f017\", \"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm92.49,313h0l-20,25a16,16,0,0,1-22.49,2.5h0l-67-49.72a40,40,0,0,1-15-31.23V112a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V256l58,42.5A16,16,0,0,1,348.49,321Z\"]\n};\nvar faClone = {\n prefix: 'fas',\n iconName: 'clone',\n icon: [512, 512, [], \"f24d\", \"M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z\"]\n};\nvar faClosedCaptioning = {\n prefix: 'fas',\n iconName: 'closed-captioning',\n icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z\"]\n};\nvar faCloud = {\n prefix: 'fas',\n iconName: 'cloud',\n icon: [640, 512, [], \"f0c2\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z\"]\n};\nvar faCloudDownloadAlt = {\n prefix: 'fas',\n iconName: 'cloud-download-alt',\n icon: [640, 512, [], \"f381\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z\"]\n};\nvar faCloudMeatball = {\n prefix: 'fas',\n iconName: 'cloud-meatball',\n icon: [512, 512, [], \"f73b\", \"M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z\"]\n};\nvar faCloudMoon = {\n prefix: 'fas',\n iconName: 'cloud-moon',\n icon: [576, 512, [], \"f6c3\", \"M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z\"]\n};\nvar faCloudMoonRain = {\n prefix: 'fas',\n iconName: 'cloud-moon-rain',\n icon: [576, 512, [], \"f73c\", \"M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudRain = {\n prefix: 'fas',\n iconName: 'cloud-rain',\n icon: [512, 512, [], \"f73d\", \"M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z\"]\n};\nvar faCloudShowersHeavy = {\n prefix: 'fas',\n iconName: 'cloud-showers-heavy',\n icon: [512, 512, [], \"f740\", \"M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z\"]\n};\nvar faCloudSun = {\n prefix: 'fas',\n iconName: 'cloud-sun',\n icon: [640, 512, [], \"f6c4\", \"M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z\"]\n};\nvar faCloudSunRain = {\n prefix: 'fas',\n iconName: 'cloud-sun-rain',\n icon: [576, 512, [], \"f743\", \"M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudUploadAlt = {\n prefix: 'fas',\n iconName: 'cloud-upload-alt',\n icon: [640, 512, [], \"f382\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\"]\n};\nvar faCocktail = {\n prefix: 'fas',\n iconName: 'cocktail',\n icon: [576, 512, [], \"f561\", \"M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z\"]\n};\nvar faCode = {\n prefix: 'fas',\n iconName: 'code',\n icon: [640, 512, [], \"f121\", \"M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z\"]\n};\nvar faCodeBranch = {\n prefix: 'fas',\n iconName: 'code-branch',\n icon: [384, 512, [], \"f126\", \"M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z\"]\n};\nvar faCoffee = {\n prefix: 'fas',\n iconName: 'coffee',\n icon: [640, 512, [], \"f0f4\", \"M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z\"]\n};\nvar faCog = {\n prefix: 'fas',\n iconName: 'cog',\n icon: [512, 512, [], \"f013\", \"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faCogs = {\n prefix: 'fas',\n iconName: 'cogs',\n icon: [640, 512, [], \"f085\", \"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"]\n};\nvar faCoins = {\n prefix: 'fas',\n iconName: 'coins',\n icon: [512, 512, [], \"f51e\", \"M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z\"]\n};\nvar faColumns = {\n prefix: 'fas',\n iconName: 'columns',\n icon: [512, 512, [], \"f0db\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z\"]\n};\nvar faComment = {\n prefix: 'fas',\n iconName: 'comment',\n icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z\"]\n};\nvar faCommentAlt = {\n prefix: 'fas',\n iconName: 'comment-alt',\n icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z\"]\n};\nvar faCommentDollar = {\n prefix: 'fas',\n iconName: 'comment-dollar',\n icon: [512, 512, [], \"f651\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z\"]\n};\nvar faCommentDots = {\n prefix: 'fas',\n iconName: 'comment-dots',\n icon: [512, 512, [], \"f4ad\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faCommentMedical = {\n prefix: 'fas',\n iconName: 'comment-medical',\n icon: [512, 512, [], \"f7f5\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z\"]\n};\nvar faCommentSlash = {\n prefix: 'fas',\n iconName: 'comment-slash',\n icon: [640, 512, [], \"f4b3\", \"M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faComments = {\n prefix: 'fas',\n iconName: 'comments',\n icon: [576, 512, [], \"f086\", \"M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z\"]\n};\nvar faCommentsDollar = {\n prefix: 'fas',\n iconName: 'comments-dollar',\n icon: [576, 512, [], \"f653\", \"M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z\"]\n};\nvar faCompactDisc = {\n prefix: 'fas',\n iconName: 'compact-disc',\n icon: [496, 512, [], \"f51f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faCompass = {\n prefix: 'fas',\n iconName: 'compass',\n icon: [496, 512, [], \"f14e\", \"M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z\"]\n};\nvar faCompress = {\n prefix: 'fas',\n iconName: 'compress',\n icon: [448, 512, [], \"f066\", \"M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faCompressAlt = {\n prefix: 'fas',\n iconName: 'compress-alt',\n icon: [448, 512, [], \"f422\", \"M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z\"]\n};\nvar faCompressArrowsAlt = {\n prefix: 'fas',\n iconName: 'compress-arrows-alt',\n icon: [512, 512, [], \"f78c\", \"M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z\"]\n};\nvar faConciergeBell = {\n prefix: 'fas',\n iconName: 'concierge-bell',\n icon: [512, 512, [], \"f562\", \"M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faCookie = {\n prefix: 'fas',\n iconName: 'cookie',\n icon: [512, 512, [], \"f563\", \"M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCookieBite = {\n prefix: 'fas',\n iconName: 'cookie-bite',\n icon: [512, 512, [], \"f564\", \"M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCopy = {\n prefix: 'fas',\n iconName: 'copy',\n icon: [448, 512, [], \"f0c5\", \"M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z\"]\n};\nvar faCopyright = {\n prefix: 'fas',\n iconName: 'copyright',\n icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z\"]\n};\nvar faCouch = {\n prefix: 'fas',\n iconName: 'couch',\n icon: [640, 512, [], \"f4b8\", \"M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z\"]\n};\nvar faCreditCard = {\n prefix: 'fas',\n iconName: 'credit-card',\n icon: [576, 512, [], \"f09d\", \"M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z\"]\n};\nvar faCrop = {\n prefix: 'fas',\n iconName: 'crop',\n icon: [512, 512, [], \"f125\", \"M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faCropAlt = {\n prefix: 'fas',\n iconName: 'crop-alt',\n icon: [512, 512, [], \"f565\", \"M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z\"]\n};\nvar faCross = {\n prefix: 'fas',\n iconName: 'cross',\n icon: [384, 512, [], \"f654\", \"M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faCrosshairs = {\n prefix: 'fas',\n iconName: 'crosshairs',\n icon: [512, 512, [], \"f05b\", \"M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z\"]\n};\nvar faCrow = {\n prefix: 'fas',\n iconName: 'crow',\n icon: [640, 512, [], \"f520\", \"M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faCrown = {\n prefix: 'fas',\n iconName: 'crown',\n icon: [640, 512, [], \"f521\", \"M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z\"]\n};\nvar faCrutch = {\n prefix: 'fas',\n iconName: 'crutch',\n icon: [512, 512, [], \"f7f7\", \"M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z\"]\n};\nvar faCube = {\n prefix: 'fas',\n iconName: 'cube',\n icon: [512, 512, [], \"f1b2\", \"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"]\n};\nvar faCubes = {\n prefix: 'fas',\n iconName: 'cubes',\n icon: [512, 512, [], \"f1b3\", \"M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z\"]\n};\nvar faCut = {\n prefix: 'fas',\n iconName: 'cut',\n icon: [448, 512, [], \"f0c4\", \"M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faDatabase = {\n prefix: 'fas',\n iconName: 'database',\n icon: [448, 512, [], \"f1c0\", \"M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z\"]\n};\nvar faDeaf = {\n prefix: 'fas',\n iconName: 'deaf',\n icon: [512, 512, [], \"f2a4\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z\"]\n};\nvar faDemocrat = {\n prefix: 'fas',\n iconName: 'democrat',\n icon: [640, 512, [], \"f747\", \"M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z\"]\n};\nvar faDesktop = {\n prefix: 'fas',\n iconName: 'desktop',\n icon: [576, 512, [], \"f108\", \"M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z\"]\n};\nvar faDharmachakra = {\n prefix: 'fas',\n iconName: 'dharmachakra',\n icon: [512, 512, [], \"f655\", \"M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z\"]\n};\nvar faDiagnoses = {\n prefix: 'fas',\n iconName: 'diagnoses',\n icon: [640, 512, [], \"f470\", \"M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDice = {\n prefix: 'fas',\n iconName: 'dice',\n icon: [640, 512, [], \"f522\", \"M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faDiceD20 = {\n prefix: 'fas',\n iconName: 'dice-d20',\n icon: [480, 512, [], \"f6cf\", \"M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z\"]\n};\nvar faDiceD6 = {\n prefix: 'fas',\n iconName: 'dice-d6',\n icon: [448, 512, [], \"f6d1\", \"M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z\"]\n};\nvar faDiceFive = {\n prefix: 'fas',\n iconName: 'dice-five',\n icon: [448, 512, [], \"f523\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceFour = {\n prefix: 'fas',\n iconName: 'dice-four',\n icon: [448, 512, [], \"f524\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceOne = {\n prefix: 'fas',\n iconName: 'dice-one',\n icon: [448, 512, [], \"f525\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceSix = {\n prefix: 'fas',\n iconName: 'dice-six',\n icon: [448, 512, [], \"f526\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceThree = {\n prefix: 'fas',\n iconName: 'dice-three',\n icon: [448, 512, [], \"f527\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceTwo = {\n prefix: 'fas',\n iconName: 'dice-two',\n icon: [448, 512, [], \"f528\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDigitalTachograph = {\n prefix: 'fas',\n iconName: 'digital-tachograph',\n icon: [640, 512, [], \"f566\", \"M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z\"]\n};\nvar faDirections = {\n prefix: 'fas',\n iconName: 'directions',\n icon: [512, 512, [], \"f5eb\", \"M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z\"]\n};\nvar faDisease = {\n prefix: 'fas',\n iconName: 'disease',\n icon: [512, 512, [], \"f7fa\", \"M472.29 195.9l-67.06-23c-19.28-6.6-33.54-20.92-38.14-38.31l-16-60.45c-11.58-43.77-76.57-57.13-110-22.62L195 99.24c-13.26 13.71-33.54 20.93-54.2 19.31l-71.9-5.62c-52-4.07-86.93 44.89-59 82.84l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24l-28.43 57C4 396.67 47.46 440.29 98.11 429.23l70-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101 7.57 104.45-37.22l4.7-61.86c1.35-17.8 12.8-33.87 30.63-43l62-31.74c44.84-22.96 39.55-80.17-8.99-96.79zM160 256a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm128 96a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm16-128a16 16 0 1 1 16-16 16 16 0 0 1-16 16z\"]\n};\nvar faDivide = {\n prefix: 'fas',\n iconName: 'divide',\n icon: [448, 512, [], \"f529\", \"M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faDizzy = {\n prefix: 'fas',\n iconName: 'dizzy',\n icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z\"]\n};\nvar faDna = {\n prefix: 'fas',\n iconName: 'dna',\n icon: [448, 512, [], \"f471\", \"M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z\"]\n};\nvar faDog = {\n prefix: 'fas',\n iconName: 'dog',\n icon: [576, 512, [], \"f6d3\", \"M298.06,224,448,277.55V496a16,16,0,0,1-16,16H368a16,16,0,0,1-16-16V384H192V496a16,16,0,0,1-16,16H112a16,16,0,0,1-16-16V282.09C58.84,268.84,32,233.66,32,192a32,32,0,0,1,64,0,32.06,32.06,0,0,0,32,32ZM544,112v32a64,64,0,0,1-64,64H448v35.58L320,197.87V48c0-14.25,17.22-21.39,27.31-11.31L374.59,64h53.63c10.91,0,23.75,7.92,28.62,17.69L464,96h64A16,16,0,0,1,544,112Zm-112,0a16,16,0,1,0-16,16A16,16,0,0,0,432,112Z\"]\n};\nvar faDollarSign = {\n prefix: 'fas',\n iconName: 'dollar-sign',\n icon: [288, 512, [], \"f155\", \"M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z\"]\n};\nvar faDolly = {\n prefix: 'fas',\n iconName: 'dolly',\n icon: [576, 512, [], \"f472\", \"M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faDollyFlatbed = {\n prefix: 'fas',\n iconName: 'dolly-flatbed',\n icon: [640, 512, [], \"f474\", \"M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDonate = {\n prefix: 'fas',\n iconName: 'donate',\n icon: [512, 512, [], \"f4b9\", \"M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z\"]\n};\nvar faDoorClosed = {\n prefix: 'fas',\n iconName: 'door-closed',\n icon: [640, 512, [], \"f52a\", \"M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z\"]\n};\nvar faDoorOpen = {\n prefix: 'fas',\n iconName: 'door-open',\n icon: [640, 512, [], \"f52b\", \"M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z\"]\n};\nvar faDotCircle = {\n prefix: 'fas',\n iconName: 'dot-circle',\n icon: [512, 512, [], \"f192\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z\"]\n};\nvar faDove = {\n prefix: 'fas',\n iconName: 'dove',\n icon: [512, 512, [], \"f4ba\", \"M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faDownload = {\n prefix: 'fas',\n iconName: 'download',\n icon: [512, 512, [], \"f019\", \"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faDraftingCompass = {\n prefix: 'fas',\n iconName: 'drafting-compass',\n icon: [512, 512, [], \"f568\", \"M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z\"]\n};\nvar faDragon = {\n prefix: 'fas',\n iconName: 'dragon',\n icon: [640, 512, [], \"f6d5\", \"M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z\"]\n};\nvar faDrawPolygon = {\n prefix: 'fas',\n iconName: 'draw-polygon',\n icon: [448, 512, [], \"f5ee\", \"M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z\"]\n};\nvar faDrum = {\n prefix: 'fas',\n iconName: 'drum',\n icon: [512, 512, [], \"f569\", \"M431.34 122.05l73.53-47.42a16 16 0 0 0 4.44-22.19l-8.87-13.31a16 16 0 0 0-22.19-4.44l-110.06 71C318.43 96.91 271.22 96 256 96 219.55 96 0 100.55 0 208.15v160.23c0 30.27 27.5 57.68 72 77.86v-101.9a24 24 0 1 1 48 0v118.93c33.05 9.11 71.07 15.06 112 16.73V376.39a24 24 0 1 1 48 0V480c40.93-1.67 78.95-7.62 112-16.73V344.34a24 24 0 1 1 48 0v101.9c44.5-20.18 72-47.59 72-77.86V208.15c0-43.32-35.76-69.76-80.66-86.1zM256 272.24c-114.88 0-208-28.69-208-64.09s93.12-64.08 208-64.08c17.15 0 33.73.71 49.68 1.91l-72.81 47a16 16 0 0 0-4.43 22.19l8.87 13.31a16 16 0 0 0 22.19 4.44l118.64-76.52C430.09 168 464 186.84 464 208.15c0 35.4-93.13 64.09-208 64.09z\"]\n};\nvar faDrumSteelpan = {\n prefix: 'fas',\n iconName: 'drum-steelpan',\n icon: [576, 512, [], \"f56a\", \"M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z\"]\n};\nvar faDrumstickBite = {\n prefix: 'fas',\n iconName: 'drumstick-bite',\n icon: [512, 512, [], \"f6d7\", \"M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z\"]\n};\nvar faDumbbell = {\n prefix: 'fas',\n iconName: 'dumbbell',\n icon: [640, 512, [], \"f44b\", \"M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z\"]\n};\nvar faDumpster = {\n prefix: 'fas',\n iconName: 'dumpster',\n icon: [576, 512, [], \"f793\", \"M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDumpsterFire = {\n prefix: 'fas',\n iconName: 'dumpster-fire',\n icon: [640, 512, [], \"f794\", \"M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z\"]\n};\nvar faDungeon = {\n prefix: 'fas',\n iconName: 'dungeon',\n icon: [512, 512, [], \"f6d9\", \"M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z\"]\n};\nvar faEdit = {\n prefix: 'fas',\n iconName: 'edit',\n icon: [576, 512, [], \"f044\", \"M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z\"]\n};\nvar faEgg = {\n prefix: 'fas',\n iconName: 'egg',\n icon: [384, 512, [], \"f7fb\", \"M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z\"]\n};\nvar faEject = {\n prefix: 'fas',\n iconName: 'eject',\n icon: [448, 512, [], \"f052\", \"M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z\"]\n};\nvar faEllipsisH = {\n prefix: 'fas',\n iconName: 'ellipsis-h',\n icon: [512, 512, [], \"f141\", \"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"]\n};\nvar faEllipsisV = {\n prefix: 'fas',\n iconName: 'ellipsis-v',\n icon: [192, 512, [], \"f142\", \"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z\"]\n};\nvar faEnvelope = {\n prefix: 'fas',\n iconName: 'envelope',\n icon: [512, 512, [], \"f0e0\", \"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"]\n};\nvar faEnvelopeOpen = {\n prefix: 'fas',\n iconName: 'envelope-open',\n icon: [512, 512, [], \"f2b6\", \"M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z\"]\n};\nvar faEnvelopeOpenText = {\n prefix: 'fas',\n iconName: 'envelope-open-text',\n icon: [512, 512, [], \"f658\", \"M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z\"]\n};\nvar faEnvelopeSquare = {\n prefix: 'fas',\n iconName: 'envelope-square',\n icon: [448, 512, [], \"f199\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z\"]\n};\nvar faEquals = {\n prefix: 'fas',\n iconName: 'equals',\n icon: [448, 512, [], \"f52c\", \"M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faEraser = {\n prefix: 'fas',\n iconName: 'eraser',\n icon: [512, 512, [], \"f12d\", \"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z\"]\n};\nvar faEthernet = {\n prefix: 'fas',\n iconName: 'ethernet',\n icon: [512, 512, [], \"f796\", \"M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z\"]\n};\nvar faEuroSign = {\n prefix: 'fas',\n iconName: 'euro-sign',\n icon: [320, 512, [], \"f153\", \"M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z\"]\n};\nvar faExchangeAlt = {\n prefix: 'fas',\n iconName: 'exchange-alt',\n icon: [512, 512, [], \"f362\", \"M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faExclamation = {\n prefix: 'fas',\n iconName: 'exclamation',\n icon: [192, 512, [], \"f12a\", \"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"]\n};\nvar faExclamationCircle = {\n prefix: 'fas',\n iconName: 'exclamation-circle',\n icon: [512, 512, [], \"f06a\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExclamationTriangle = {\n prefix: 'fas',\n iconName: 'exclamation-triangle',\n icon: [576, 512, [], \"f071\", \"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExpand = {\n prefix: 'fas',\n iconName: 'expand',\n icon: [448, 512, [], \"f065\", \"M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z\"]\n};\nvar faExpandAlt = {\n prefix: 'fas',\n iconName: 'expand-alt',\n icon: [448, 512, [], \"f424\", \"M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z\"]\n};\nvar faExpandArrowsAlt = {\n prefix: 'fas',\n iconName: 'expand-arrows-alt',\n icon: [448, 512, [], \"f31e\", \"M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z\"]\n};\nvar faExternalLinkAlt = {\n prefix: 'fas',\n iconName: 'external-link-alt',\n icon: [512, 512, [], \"f35d\", \"M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z\"]\n};\nvar faExternalLinkSquareAlt = {\n prefix: 'fas',\n iconName: 'external-link-square-alt',\n icon: [448, 512, [], \"f360\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z\"]\n};\nvar faEye = {\n prefix: 'fas',\n iconName: 'eye',\n icon: [576, 512, [], \"f06e\", \"M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z\"]\n};\nvar faEyeDropper = {\n prefix: 'fas',\n iconName: 'eye-dropper',\n icon: [512, 512, [], \"f1fb\", \"M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z\"]\n};\nvar faEyeSlash = {\n prefix: 'fas',\n iconName: 'eye-slash',\n icon: [640, 512, [], \"f070\", \"M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z\"]\n};\nvar faFan = {\n prefix: 'fas',\n iconName: 'fan',\n icon: [512, 512, [], \"f863\", \"M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faFastBackward = {\n prefix: 'fas',\n iconName: 'fast-backward',\n icon: [512, 512, [], \"f049\", \"M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z\"]\n};\nvar faFastForward = {\n prefix: 'fas',\n iconName: 'fast-forward',\n icon: [512, 512, [], \"f050\", \"M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z\"]\n};\nvar faFaucet = {\n prefix: 'fas',\n iconName: 'faucet',\n icon: [512, 512, [], \"e005\", \"M352,256H313.39c-15.71-13.44-35.46-23.07-57.39-28V180.44l-32-3.38-32,3.38V228c-21.93,5-41.68,14.6-57.39,28H16A16,16,0,0,0,0,272v96a16,16,0,0,0,16,16h92.79C129.38,421.73,173,448,224,448s94.62-26.27,115.21-64H352a32,32,0,0,1,32,32,32,32,0,0,0,32,32h64a32,32,0,0,0,32-32A160,160,0,0,0,352,256ZM81.59,159.91l142.41-15,142.41,15c9.42,1,17.59-6.81,17.59-16.8V112.89c0-10-8.17-17.8-17.59-16.81L256,107.74V80a16,16,0,0,0-16-16H208a16,16,0,0,0-16,16v27.74L81.59,96.08C72.17,95.09,64,102.9,64,112.89v30.22C64,153.1,72.17,160.91,81.59,159.91Z\"]\n};\nvar faFax = {\n prefix: 'fas',\n iconName: 'fax',\n icon: [512, 512, [], \"f1ac\", \"M480 160V77.25a32 32 0 0 0-9.38-22.63L425.37 9.37A32 32 0 0 0 402.75 0H160a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32h320a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM288 432a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm128 128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-112H192V64h160v48a16 16 0 0 0 16 16h48zM64 128H32a32 32 0 0 0-32 32v320a32 32 0 0 0 32 32h32a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32z\"]\n};\nvar faFeather = {\n prefix: 'fas',\n iconName: 'feather',\n icon: [512, 512, [], \"f52d\", \"M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z\"]\n};\nvar faFeatherAlt = {\n prefix: 'fas',\n iconName: 'feather-alt',\n icon: [512, 512, [], \"f56b\", \"M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z\"]\n};\nvar faFemale = {\n prefix: 'fas',\n iconName: 'female',\n icon: [256, 512, [], \"f182\", \"M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z\"]\n};\nvar faFighterJet = {\n prefix: 'fas',\n iconName: 'fighter-jet',\n icon: [640, 512, [], \"f0fb\", \"M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z\"]\n};\nvar faFile = {\n prefix: 'fas',\n iconName: 'file',\n icon: [384, 512, [], \"f15b\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileAlt = {\n prefix: 'fas',\n iconName: 'file-alt',\n icon: [384, 512, [], \"f15c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileArchive = {\n prefix: 'fas',\n iconName: 'file-archive',\n icon: [384, 512, [], \"f1c6\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z\"]\n};\nvar faFileAudio = {\n prefix: 'fas',\n iconName: 'file-audio',\n icon: [384, 512, [], \"f1c7\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileCode = {\n prefix: 'fas',\n iconName: 'file-code',\n icon: [384, 512, [], \"f1c9\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z\"]\n};\nvar faFileContract = {\n prefix: 'fas',\n iconName: 'file-contract',\n icon: [384, 512, [], \"f56c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileCsv = {\n prefix: 'fas',\n iconName: 'file-csv',\n icon: [384, 512, [], \"f6dd\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileDownload = {\n prefix: 'fas',\n iconName: 'file-download',\n icon: [384, 512, [], \"f56d\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileExcel = {\n prefix: 'fas',\n iconName: 'file-excel',\n icon: [384, 512, [], \"f1c3\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileExport = {\n prefix: 'fas',\n iconName: 'file-export',\n icon: [576, 512, [], \"f56e\", \"M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z\"]\n};\nvar faFileImage = {\n prefix: 'fas',\n iconName: 'file-image',\n icon: [384, 512, [], \"f1c5\", \"M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z\"]\n};\nvar faFileImport = {\n prefix: 'fas',\n iconName: 'file-import',\n icon: [512, 512, [], \"f56f\", \"M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z\"]\n};\nvar faFileInvoice = {\n prefix: 'fas',\n iconName: 'file-invoice',\n icon: [384, 512, [], \"f570\", \"M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z\"]\n};\nvar faFileInvoiceDollar = {\n prefix: 'fas',\n iconName: 'file-invoice-dollar',\n icon: [384, 512, [], \"f571\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z\"]\n};\nvar faFileMedical = {\n prefix: 'fas',\n iconName: 'file-medical',\n icon: [384, 512, [], \"f477\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z\"]\n};\nvar faFileMedicalAlt = {\n prefix: 'fas',\n iconName: 'file-medical-alt',\n icon: [448, 512, [], \"f478\", \"M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFilePdf = {\n prefix: 'fas',\n iconName: 'file-pdf',\n icon: [384, 512, [], \"f1c1\", \"M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z\"]\n};\nvar faFilePowerpoint = {\n prefix: 'fas',\n iconName: 'file-powerpoint',\n icon: [384, 512, [], \"f1c4\", \"M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z\"]\n};\nvar faFilePrescription = {\n prefix: 'fas',\n iconName: 'file-prescription',\n icon: [384, 512, [], \"f572\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileSignature = {\n prefix: 'fas',\n iconName: 'file-signature',\n icon: [576, 512, [], \"f573\", \"M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z\"]\n};\nvar faFileUpload = {\n prefix: 'fas',\n iconName: 'file-upload',\n icon: [384, 512, [], \"f574\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileVideo = {\n prefix: 'fas',\n iconName: 'file-video',\n icon: [384, 512, [], \"f1c8\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z\"]\n};\nvar faFileWord = {\n prefix: 'fas',\n iconName: 'file-word',\n icon: [384, 512, [], \"f1c2\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFill = {\n prefix: 'fas',\n iconName: 'fill',\n icon: [512, 512, [], \"f575\", \"M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z\"]\n};\nvar faFillDrip = {\n prefix: 'fas',\n iconName: 'fill-drip',\n icon: [576, 512, [], \"f576\", \"M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z\"]\n};\nvar faFilm = {\n prefix: 'fas',\n iconName: 'film',\n icon: [512, 512, [], \"f008\", \"M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faFilter = {\n prefix: 'fas',\n iconName: 'filter',\n icon: [512, 512, [], \"f0b0\", \"M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z\"]\n};\nvar faFingerprint = {\n prefix: 'fas',\n iconName: 'fingerprint',\n icon: [512, 512, [], \"f577\", \"M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z\"]\n};\nvar faFire = {\n prefix: 'fas',\n iconName: 'fire',\n icon: [384, 512, [], \"f06d\", \"M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z\"]\n};\nvar faFireAlt = {\n prefix: 'fas',\n iconName: 'fire-alt',\n icon: [448, 512, [], \"f7e4\", \"M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z\"]\n};\nvar faFireExtinguisher = {\n prefix: 'fas',\n iconName: 'fire-extinguisher',\n icon: [448, 512, [], \"f134\", \"M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z\"]\n};\nvar faFirstAid = {\n prefix: 'fas',\n iconName: 'first-aid',\n icon: [576, 512, [], \"f479\", \"M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faFish = {\n prefix: 'fas',\n iconName: 'fish',\n icon: [576, 512, [], \"f578\", \"M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFistRaised = {\n prefix: 'fas',\n iconName: 'fist-raised',\n icon: [384, 512, [], \"f6de\", \"M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z\"]\n};\nvar faFlag = {\n prefix: 'fas',\n iconName: 'flag',\n icon: [512, 512, [], \"f024\", \"M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z\"]\n};\nvar faFlagCheckered = {\n prefix: 'fas',\n iconName: 'flag-checkered',\n icon: [512, 512, [], \"f11e\", \"M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z\"]\n};\nvar faFlagUsa = {\n prefix: 'fas',\n iconName: 'flag-usa',\n icon: [512, 512, [], \"f74d\", \"M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z\"]\n};\nvar faFlask = {\n prefix: 'fas',\n iconName: 'flask',\n icon: [448, 512, [], \"f0c3\", \"M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z\"]\n};\nvar faFlushed = {\n prefix: 'fas',\n iconName: 'flushed',\n icon: [496, 512, [], \"f579\", \"M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z\"]\n};\nvar faFolder = {\n prefix: 'fas',\n iconName: 'folder',\n icon: [512, 512, [], \"f07b\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z\"]\n};\nvar faFolderMinus = {\n prefix: 'fas',\n iconName: 'folder-minus',\n icon: [512, 512, [], \"f65d\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFolderOpen = {\n prefix: 'fas',\n iconName: 'folder-open',\n icon: [576, 512, [], \"f07c\", \"M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z\"]\n};\nvar faFolderPlus = {\n prefix: 'fas',\n iconName: 'folder-plus',\n icon: [512, 512, [], \"f65e\", \"M464,128H272L208,64H48A48,48,0,0,0,0,112V400a48,48,0,0,0,48,48H464a48,48,0,0,0,48-48V176A48,48,0,0,0,464,128ZM359.5,296a16,16,0,0,1-16,16h-64v64a16,16,0,0,1-16,16h-16a16,16,0,0,1-16-16V312h-64a16,16,0,0,1-16-16V280a16,16,0,0,1,16-16h64V200a16,16,0,0,1,16-16h16a16,16,0,0,1,16,16v64h64a16,16,0,0,1,16,16Z\"]\n};\nvar faFont = {\n prefix: 'fas',\n iconName: 'font',\n icon: [448, 512, [], \"f031\", \"M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z\"]\n};\nvar faFontAwesomeLogoFull = {\n prefix: 'fas',\n iconName: 'font-awesome-logo-full',\n icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFootballBall = {\n prefix: 'fas',\n iconName: 'football-ball',\n icon: [496, 512, [], \"f44e\", \"M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z\"]\n};\nvar faForward = {\n prefix: 'fas',\n iconName: 'forward',\n icon: [512, 512, [], \"f04e\", \"M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z\"]\n};\nvar faFrog = {\n prefix: 'fas',\n iconName: 'frog',\n icon: [576, 512, [], \"f52e\", \"M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFrown = {\n prefix: 'fas',\n iconName: 'frown',\n icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z\"]\n};\nvar faFrownOpen = {\n prefix: 'fas',\n iconName: 'frown-open',\n icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faFunnelDollar = {\n prefix: 'fas',\n iconName: 'funnel-dollar',\n icon: [640, 512, [], \"f662\", \"M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z\"]\n};\nvar faFutbol = {\n prefix: 'fas',\n iconName: 'futbol',\n icon: [512, 512, [], \"f1e3\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z\"]\n};\nvar faGamepad = {\n prefix: 'fas',\n iconName: 'gamepad',\n icon: [640, 512, [], \"f11b\", \"M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z\"]\n};\nvar faGasPump = {\n prefix: 'fas',\n iconName: 'gas-pump',\n icon: [512, 512, [], \"f52f\", \"M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z\"]\n};\nvar faGavel = {\n prefix: 'fas',\n iconName: 'gavel',\n icon: [512, 512, [], \"f0e3\", \"M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z\"]\n};\nvar faGem = {\n prefix: 'fas',\n iconName: 'gem',\n icon: [576, 512, [], \"f3a5\", \"M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z\"]\n};\nvar faGenderless = {\n prefix: 'fas',\n iconName: 'genderless',\n icon: [288, 512, [], \"f22d\", \"M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z\"]\n};\nvar faGhost = {\n prefix: 'fas',\n iconName: 'ghost',\n icon: [384, 512, [], \"f6e2\", \"M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faGift = {\n prefix: 'fas',\n iconName: 'gift',\n icon: [512, 512, [], \"f06b\", \"M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z\"]\n};\nvar faGifts = {\n prefix: 'fas',\n iconName: 'gifts',\n icon: [640, 512, [], \"f79c\", \"M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z\"]\n};\nvar faGlassCheers = {\n prefix: 'fas',\n iconName: 'glass-cheers',\n icon: [640, 512, [], \"f79f\", \"M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z\"]\n};\nvar faGlassMartini = {\n prefix: 'fas',\n iconName: 'glass-martini',\n icon: [512, 512, [], \"f000\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z\"]\n};\nvar faGlassMartiniAlt = {\n prefix: 'fas',\n iconName: 'glass-martini-alt',\n icon: [512, 512, [], \"f57b\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z\"]\n};\nvar faGlassWhiskey = {\n prefix: 'fas',\n iconName: 'glass-whiskey',\n icon: [512, 512, [], \"f7a0\", \"M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z\"]\n};\nvar faGlasses = {\n prefix: 'fas',\n iconName: 'glasses',\n icon: [576, 512, [], \"f530\", \"M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z\"]\n};\nvar faGlobe = {\n prefix: 'fas',\n iconName: 'globe',\n icon: [496, 512, [], \"f0ac\", \"M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z\"]\n};\nvar faGlobeAfrica = {\n prefix: 'fas',\n iconName: 'globe-africa',\n icon: [496, 512, [], \"f57c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z\"]\n};\nvar faGlobeAmericas = {\n prefix: 'fas',\n iconName: 'globe-americas',\n icon: [496, 512, [], \"f57d\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z\"]\n};\nvar faGlobeAsia = {\n prefix: 'fas',\n iconName: 'globe-asia',\n icon: [496, 512, [], \"f57e\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z\"]\n};\nvar faGlobeEurope = {\n prefix: 'fas',\n iconName: 'globe-europe',\n icon: [496, 512, [], \"f7a2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z\"]\n};\nvar faGolfBall = {\n prefix: 'fas',\n iconName: 'golf-ball',\n icon: [416, 512, [], \"f450\", \"M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z\"]\n};\nvar faGopuram = {\n prefix: 'fas',\n iconName: 'gopuram',\n icon: [512, 512, [], \"f664\", \"M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z\"]\n};\nvar faGraduationCap = {\n prefix: 'fas',\n iconName: 'graduation-cap',\n icon: [640, 512, [], \"f19d\", \"M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z\"]\n};\nvar faGreaterThan = {\n prefix: 'fas',\n iconName: 'greater-than',\n icon: [384, 512, [], \"f531\", \"M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z\"]\n};\nvar faGreaterThanEqual = {\n prefix: 'fas',\n iconName: 'greater-than-equal',\n icon: [448, 512, [], \"f532\", \"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faGrimace = {\n prefix: 'fas',\n iconName: 'grimace',\n icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z\"]\n};\nvar faGrin = {\n prefix: 'fas',\n iconName: 'grin',\n icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinAlt = {\n prefix: 'fas',\n iconName: 'grin-alt',\n icon: [496, 512, [], \"f581\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeam = {\n prefix: 'fas',\n iconName: 'grin-beam',\n icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeamSweat = {\n prefix: 'fas',\n iconName: 'grin-beam-sweat',\n icon: [504, 512, [], \"f583\", \"M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinHearts = {\n prefix: 'fas',\n iconName: 'grin-hearts',\n icon: [496, 512, [], \"f584\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z\"]\n};\nvar faGrinSquint = {\n prefix: 'fas',\n iconName: 'grin-squint',\n icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinSquintTears = {\n prefix: 'fas',\n iconName: 'grin-squint-tears',\n icon: [512, 512, [], \"f586\", \"M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z\"]\n};\nvar faGrinStars = {\n prefix: 'fas',\n iconName: 'grin-stars',\n icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z\"]\n};\nvar faGrinTears = {\n prefix: 'fas',\n iconName: 'grin-tears',\n icon: [640, 512, [], \"f588\", \"M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinTongue = {\n prefix: 'fas',\n iconName: 'grin-tongue',\n icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinTongueSquint = {\n prefix: 'fas',\n iconName: 'grin-tongue-squint',\n icon: [496, 512, [], \"f58a\", \"M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z\"]\n};\nvar faGrinTongueWink = {\n prefix: 'fas',\n iconName: 'grin-tongue-wink',\n icon: [496, 512, [], \"f58b\", \"M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinWink = {\n prefix: 'fas',\n iconName: 'grin-wink',\n icon: [496, 512, [], \"f58c\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z\"]\n};\nvar faGripHorizontal = {\n prefix: 'fas',\n iconName: 'grip-horizontal',\n icon: [448, 512, [], \"f58d\", \"M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGripLines = {\n prefix: 'fas',\n iconName: 'grip-lines',\n icon: [512, 512, [], \"f7a4\", \"M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faGripLinesVertical = {\n prefix: 'fas',\n iconName: 'grip-lines-vertical',\n icon: [256, 512, [], \"f7a5\", \"M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z\"]\n};\nvar faGripVertical = {\n prefix: 'fas',\n iconName: 'grip-vertical',\n icon: [320, 512, [], \"f58e\", \"M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGuitar = {\n prefix: 'fas',\n iconName: 'guitar',\n icon: [512, 512, [], \"f7a6\", \"M502.63 39L473 9.37a32 32 0 0 0-45.26 0L381.46 55.7a35.14 35.14 0 0 0-8.53 13.79L360.77 106l-76.26 76.26c-12.16-8.76-25.5-15.74-40.1-19.14-33.45-7.78-67-.88-89.88 22a82.45 82.45 0 0 0-20.24 33.47c-6 18.56-23.21 32.69-42.15 34.46-23.7 2.27-45.73 11.45-62.61 28.44C-16.11 327-7.9 409 47.58 464.45S185 528 230.56 482.52c17-16.88 26.16-38.9 28.45-62.71 1.76-18.85 15.89-36.13 34.43-42.14a82.6 82.6 0 0 0 33.48-20.25c22.87-22.88 29.74-56.36 22-89.75-3.39-14.64-10.37-28-19.16-40.2L406 151.23l36.48-12.16a35.14 35.14 0 0 0 13.79-8.53l46.33-46.32a32 32 0 0 0 .03-45.22zM208 352a48 48 0 1 1 48-48 48 48 0 0 1-48 48z\"]\n};\nvar faHSquare = {\n prefix: 'fas',\n iconName: 'h-square',\n icon: [448, 512, [], \"f0fd\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z\"]\n};\nvar faHamburger = {\n prefix: 'fas',\n iconName: 'hamburger',\n icon: [512, 512, [], \"f805\", \"M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z\"]\n};\nvar faHammer = {\n prefix: 'fas',\n iconName: 'hammer',\n icon: [576, 512, [], \"f6e3\", \"M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z\"]\n};\nvar faHamsa = {\n prefix: 'fas',\n iconName: 'hamsa',\n icon: [512, 512, [], \"f665\", \"M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faHandHolding = {\n prefix: 'fas',\n iconName: 'hand-holding',\n icon: [576, 512, [], \"f4bd\", \"M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingHeart = {\n prefix: 'fas',\n iconName: 'hand-holding-heart',\n icon: [576, 512, [], \"f4be\", \"M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingMedical = {\n prefix: 'fas',\n iconName: 'hand-holding-medical',\n icon: [576, 512, [], \"e05c\", \"M159.88,175.82h64v64a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16v-64h64a16,16,0,0,0,16-16v-64a16,16,0,0,0-16-16h-64v-64a16,16,0,0,0-16-16h-64a16,16,0,0,0-16,16v64h-64a16,16,0,0,0-16,16v64A16,16,0,0,0,159.88,175.82ZM568.07,336.13a39.91,39.91,0,0,0-55.93-8.47L392.47,415.84H271.86a16,16,0,0,1,0-32H350.1c16,0,30.75-10.87,33.37-26.61a32.06,32.06,0,0,0-31.62-37.38h-160a117.7,117.7,0,0,0-74.12,26.25l-46.5,37.74H15.87a16.11,16.11,0,0,0-16,16v96a16.11,16.11,0,0,0,16,16h347a104.8,104.8,0,0,0,61.7-20.27L559.6,392A40,40,0,0,0,568.07,336.13Z\"]\n};\nvar faHandHoldingUsd = {\n prefix: 'fas',\n iconName: 'hand-holding-usd',\n icon: [576, 512, [], \"f4c0\", \"M271.06,144.3l54.27,14.3a8.59,8.59,0,0,1,6.63,8.1c0,4.6-4.09,8.4-9.12,8.4h-35.6a30,30,0,0,1-11.19-2.2c-5.24-2.2-11.28-1.7-15.3,2l-19,17.5a11.68,11.68,0,0,0-2.25,2.66,11.42,11.42,0,0,0,3.88,15.74,83.77,83.77,0,0,0,34.51,11.5V240c0,8.8,7.83,16,17.37,16h17.37c9.55,0,17.38-7.2,17.38-16V222.4c32.93-3.6,57.84-31,53.5-63-3.15-23-22.46-41.3-46.56-47.7L282.68,97.4a8.59,8.59,0,0,1-6.63-8.1c0-4.6,4.09-8.4,9.12-8.4h35.6A30,30,0,0,1,332,83.1c5.23,2.2,11.28,1.7,15.3-2l19-17.5A11.31,11.31,0,0,0,368.47,61a11.43,11.43,0,0,0-3.84-15.78,83.82,83.82,0,0,0-34.52-11.5V16c0-8.8-7.82-16-17.37-16H295.37C285.82,0,278,7.2,278,16V33.6c-32.89,3.6-57.85,31-53.51,63C227.63,119.6,247,137.9,271.06,144.3ZM565.27,328.1c-11.8-10.7-30.2-10-42.6,0L430.27,402a63.64,63.64,0,0,1-40,14H272a16,16,0,0,1,0-32h78.29c15.9,0,30.71-10.9,33.25-26.6a31.2,31.2,0,0,0,.46-5.46A32,32,0,0,0,352,320H192a117.66,117.66,0,0,0-74.1,26.29L71.4,384H16A16,16,0,0,0,0,400v96a16,16,0,0,0,16,16H372.77a64,64,0,0,0,40-14L564,377a32,32,0,0,0,1.28-48.9Z\"]\n};\nvar faHandHoldingWater = {\n prefix: 'fas',\n iconName: 'hand-holding-water',\n icon: [576, 512, [], \"f4c1\", \"M288 256c53 0 96-42.1 96-94 0-40-57.1-120.7-83.2-155.6-6.4-8.5-19.2-8.5-25.6 0C249.1 41.3 192 122 192 162c0 51.9 43 94 96 94zm277.3 72.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandLizard = {\n prefix: 'fas',\n iconName: 'hand-lizard',\n icon: [576, 512, [], \"f258\", \"M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z\"]\n};\nvar faHandMiddleFinger = {\n prefix: 'fas',\n iconName: 'hand-middle-finger',\n icon: [512, 512, [], \"f806\", \"M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z\"]\n};\nvar faHandPaper = {\n prefix: 'fas',\n iconName: 'hand-paper',\n icon: [448, 512, [], \"f256\", \"M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z\"]\n};\nvar faHandPeace = {\n prefix: 'fas',\n iconName: 'hand-peace',\n icon: [448, 512, [], \"f25b\", \"M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z\"]\n};\nvar faHandPointDown = {\n prefix: 'fas',\n iconName: 'hand-point-down',\n icon: [384, 512, [], \"f0a7\", \"M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointLeft = {\n prefix: 'fas',\n iconName: 'hand-point-left',\n icon: [512, 512, [], \"f0a5\", \"M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z\"]\n};\nvar faHandPointRight = {\n prefix: 'fas',\n iconName: 'hand-point-right',\n icon: [512, 512, [], \"f0a4\", \"M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointUp = {\n prefix: 'fas',\n iconName: 'hand-point-up',\n icon: [384, 512, [], \"f0a6\", \"M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"]\n};\nvar faHandPointer = {\n prefix: 'fas',\n iconName: 'hand-pointer',\n icon: [448, 512, [], \"f25a\", \"M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z\"]\n};\nvar faHandRock = {\n prefix: 'fas',\n iconName: 'hand-rock',\n icon: [512, 512, [], \"f255\", \"M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z\"]\n};\nvar faHandScissors = {\n prefix: 'fas',\n iconName: 'hand-scissors',\n icon: [512, 512, [], \"f257\", \"M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z\"]\n};\nvar faHandSparkles = {\n prefix: 'fas',\n iconName: 'hand-sparkles',\n icon: [640, 512, [], \"e05d\", \"M106.66,170.64l.09,0,49.55-20.65a7.32,7.32,0,0,0,3.68-6h0a7.29,7.29,0,0,0-3.68-6l-49.57-20.67-.07,0L86,67.68a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L3.7,138A7.29,7.29,0,0,0,0,144H0a7.32,7.32,0,0,0,3.68,6L53.27,170.6l.07,0L74,220.26a6.65,6.65,0,0,0,11.92,0l20.69-49.62ZM471.38,467.41l-1-.42-1-.5a38.67,38.67,0,0,1,0-69.14l1-.49,1-.43,37.49-15.63,15.63-37.48.41-1,.47-.95c3.85-7.74,10.58-13.63,18.35-17.34,0-1.33.25-2.69.27-4V144a32,32,0,0,0-64,0v72a8,8,0,0,1-8,8H456a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H360a8,8,0,0,1-8-8V32a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H264a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0v241l-23.59-32.49a40,40,0,0,0-64.71,47.09L229.3,492.21A48.07,48.07,0,0,0,268.09,512H465.7c19.24,0,35.65-11.73,43.24-28.79l-.07-.17ZM349.79,339.52,320,351.93l-12.42,29.78a4,4,0,0,1-7.15,0L288,351.93l-29.79-12.41a4,4,0,0,1,0-7.16L288,319.94l12.42-29.78a4,4,0,0,1,7.15,0L320,319.94l29.79,12.42a4,4,0,0,1,0,7.16ZM640,431.91a7.28,7.28,0,0,0-3.68-6l-49.57-20.67-.07,0L566,355.63a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L483.7,426a7.28,7.28,0,0,0-3.68,6h0a7.29,7.29,0,0,0,3.68,5.95l49.57,20.67.07,0L554,508.21a6.65,6.65,0,0,0,11.92,0l20.69-49.62h0l.09,0,49.55-20.66a7.29,7.29,0,0,0,3.68-5.95h0Z\"]\n};\nvar faHandSpock = {\n prefix: 'fas',\n iconName: 'hand-spock',\n icon: [512, 512, [], \"f259\", \"M510.9005,145.27027,442.604,432.09391A103.99507,103.99507,0,0,1,341.43745,512H214.074a135.96968,135.96968,0,0,1-93.18489-36.95291L12.59072,373.12723a39.992,39.992,0,0,1,54.8122-58.24988l60.59342,57.02528v0a283.24849,283.24849,0,0,0-11.6703-80.46734L73.63726,147.36011a40.00575,40.00575,0,1,1,76.71833-22.7187l37.15458,125.39477a8.33113,8.33113,0,0,0,16.05656-4.4414L153.26183,49.95406A39.99638,39.99638,0,1,1,230.73015,30.0166l56.09491,218.15825a10.42047,10.42047,0,0,0,20.30018-.501L344.80766,63.96966a40.052,40.052,0,0,1,51.30245-30.0893c19.86073,6.2998,30.86262,27.67378,26.67564,48.08487l-33.83869,164.966a7.55172,7.55172,0,0,0,14.74406,3.2666l29.3973-123.45874a39.99414,39.99414,0,1,1,77.81208,18.53121Z\"]\n};\nvar faHands = {\n prefix: 'fas',\n iconName: 'hands',\n icon: [640, 512, [], \"f4c2\", \"M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z\"]\n};\nvar faHandsHelping = {\n prefix: 'fas',\n iconName: 'hands-helping',\n icon: [640, 512, [], \"f4c4\", \"M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z\"]\n};\nvar faHandsWash = {\n prefix: 'fas',\n iconName: 'hands-wash',\n icon: [576, 512, [], \"e05e\", \"M496,224a48,48,0,1,0-48-48A48,48,0,0,0,496,224ZM311.47,178.45A56.77,56.77,0,0,1,328,176a56,56,0,0,1,19,3.49l15.35-48.61A24,24,0,0,0,342,99.74c-11.53-1.35-22.21,6.44-25.71,17.51l-20.9,66.17ZM93.65,386.33c.8-.19,1.54-.54,2.35-.71V359.93a156,156,0,0,1,107.06-148l73.7-22.76L310.92,81.05a24,24,0,0,0-20.33-31.11c-11.53-1.34-22.22,6.45-25.72,17.52L231.42,173.88a8,8,0,0,1-15.26-4.83L259.53,31.26A24,24,0,0,0,239.2.15C227.67-1.19,217,6.6,213.49,17.66L165.56,169.37a8,8,0,1,1-15.26-4.82l38.56-122a24,24,0,0,0-20.33-31.11C157,10,146.32,17.83,142.82,28.9l-60,189.85L80.76,168.7A24,24,0,0,0,56.9,144.55c-13.23-.05-24.72,10.54-24.9,23.86V281.14A123.69,123.69,0,0,0,93.65,386.33ZM519.1,336H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,279.84,498.71,272,487.1,272H288l47.09-17.06a24,24,0,0,0-14.18-45.88L213.19,242.31A123.88,123.88,0,0,0,128,360v25.65a79.78,79.78,0,0,1,58,108.63A118.9,118.9,0,0,0,248,512H456a24,24,0,0,0,23.54-28.76C477.35,471.84,466.71,464,455.1,464H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,407.84,498.71,400,487.1,400H360a8,8,0,0,1,0-16H520a24,24,0,0,0,23.54-28.76C541.35,343.84,530.71,336,519.1,336ZM416,64a32,32,0,1,0-32-32A32,32,0,0,0,416,64ZM112,416a48,48,0,1,0,48,48A48,48,0,0,0,112,416Z\"]\n};\nvar faHandshake = {\n prefix: 'fas',\n iconName: 'handshake',\n icon: [640, 512, [], \"f2b5\", \"M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z\"]\n};\nvar faHandshakeAltSlash = {\n prefix: 'fas',\n iconName: 'handshake-alt-slash',\n icon: [640, 512, [], \"e05f\", \"M358.59,195.6,504.2,313.8a63.4,63.4,0,0,1,22.21,37.91H624a16.05,16.05,0,0,0,16-16V143.91A16,16,0,0,0,624,128H512L457.41,73.41A32,32,0,0,0,434.8,64H348.91a32,32,0,0,0-21.61,8.41l-88.12,80.68-25.69-19.85L289.09,64H205.3a32,32,0,0,0-22.6,9.41l-20.34,20.3L45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.54,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45L303.4,202.72l32.69-29.92,27-24.7a16,16,0,0,1,21.61,23.61ZM16,128A16.05,16.05,0,0,0,0,144V335.91a16,16,0,0,0,16,16H146.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L23.56,128Z\"]\n};\nvar faHandshakeSlash = {\n prefix: 'fas',\n iconName: 'handshake-slash',\n icon: [640, 512, [], \"e060\", \"M0,128.21V384H64a32,32,0,0,0,32-32V184L23.83,128.21ZM48,320.1a16,16,0,1,1-16,16A16,16,0,0,1,48,320.1Zm80,31.81h18.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L128,208.72Zm416-223.7V352.1a32,32,0,0,0,32,32h64V128.21ZM592,352.1a16,16,0,1,1,16-16A16,16,0,0,1,592,352.1ZM303.33,202.67l59.58-54.57a16,16,0,0,1,21.59,23.61L358.41,195.6,504,313.8a73.08,73.08,0,0,1,7.91,7.7V128L457.3,73.41A31.76,31.76,0,0,0,434.7,64H348.8a31.93,31.93,0,0,0-21.6,8.41l-88.07,80.64-25.64-19.81L289.09,64H205.3a32,32,0,0,0-22.6,9.41L162.36,93.72,45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.65-25.27a16,16,0,0,0-2.82-22.45Z\"]\n};\nvar faHanukiah = {\n prefix: 'fas',\n iconName: 'hanukiah',\n icon: [640, 512, [], \"f6e6\", \"M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z\"]\n};\nvar faHardHat = {\n prefix: 'fas',\n iconName: 'hard-hat',\n icon: [512, 512, [], \"f807\", \"M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faHashtag = {\n prefix: 'fas',\n iconName: 'hashtag',\n icon: [448, 512, [], \"f292\", \"M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z\"]\n};\nvar faHatCowboy = {\n prefix: 'fas',\n iconName: 'hat-cowboy',\n icon: [640, 512, [], \"f8c0\", \"M490 296.9C480.51 239.51 450.51 64 392.3 64c-14 0-26.49 5.93-37 14a58.21 58.21 0 0 1-70.58 0c-10.51-8-23-14-37-14-58.2 0-88.2 175.47-97.71 232.88C188.81 309.47 243.73 320 320 320s131.23-10.51 170-23.1zm142.9-37.18a16 16 0 0 0-19.75 1.5c-1 .9-101.27 90.78-293.16 90.78-190.82 0-292.22-89.94-293.24-90.84A16 16 0 0 0 1 278.53C1.73 280.55 78.32 480 320 480s318.27-199.45 319-201.47a16 16 0 0 0-6.09-18.81z\"]\n};\nvar faHatCowboySide = {\n prefix: 'fas',\n iconName: 'hat-cowboy-side',\n icon: [640, 512, [], \"f8c1\", \"M260.8 291.06c-28.63-22.94-62-35.06-96.4-35.06C87 256 21.47 318.72 1.43 412.06c-3.55 16.6-.43 33.83 8.57 47.3C18.75 472.47 31.83 480 45.88 480H592c-103.21 0-155-37.07-233.19-104.46zm234.65-18.29L468.4 116.2A64 64 0 0 0 392 64.41L200.85 105a64 64 0 0 0-50.35 55.79L143.61 226c6.9-.83 13.7-2 20.79-2 41.79 0 82 14.55 117.29 42.82l98 84.48C450.76 412.54 494.9 448 592 448a48 48 0 0 0 48-48c0-25.39-29.6-119.33-144.55-127.23z\"]\n};\nvar faHatWizard = {\n prefix: 'fas',\n iconName: 'hat-wizard',\n icon: [512, 512, [], \"f6e8\", \"M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z\"]\n};\nvar faHdd = {\n prefix: 'fas',\n iconName: 'hdd',\n icon: [576, 512, [], \"f0a0\", \"M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faHeadSideCough = {\n prefix: 'fas',\n iconName: 'head-side-cough',\n icon: [640, 512, [], \"e061\", \"M616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304ZM552,416a24,24,0,1,0,24,24A24,24,0,0,0,552,416Zm-64-56a24,24,0,1,0,24,24A24,24,0,0,0,488,360ZM616,464a24,24,0,1,0,24,24A24,24,0,0,0,616,464Zm0-104a24,24,0,1,0,24,24A24,24,0,0,0,616,360Zm-64-40a24,24,0,1,0,24,24A24,24,0,0,0,552,320Zm-74.78-45c-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192C86,0,0,86,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320a32,32,0,0,1,0-64h96V320h32A32,32,0,0,0,477.22,275ZM288,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,288,224Z\"]\n};\nvar faHeadSideCoughSlash = {\n prefix: 'fas',\n iconName: 'head-side-cough-slash',\n icon: [640, 512, [], \"e062\", \"M454.11,319.21c19.56-3.81,31.62-25,23.11-44.21-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192A190.64,190.64,0,0,0,84.18,33.3L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM313.39,210.45,263.61,172c5.88-7.14,14.43-12,24.36-12a32.06,32.06,0,0,1,32,32C320,199,317.24,205.17,313.39,210.45ZM616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304Zm-64,64a24,24,0,1,0-24-24A24,24,0,0,0,552,368ZM288,384a32,32,0,0,1,32-32h19.54L20.73,105.59A190.86,190.86,0,0,0,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320A32,32,0,0,1,288,384Zm328-24a24,24,0,1,0,24,24A24,24,0,0,0,616,360Z\"]\n};\nvar faHeadSideMask = {\n prefix: 'fas',\n iconName: 'head-side-mask',\n icon: [512, 512, [], \"e063\", \"M.15,184.42C-2.17,244.21,23,298.06,64,334.88V512H224V316.51L3.67,156.25A182.28,182.28,0,0,0,.15,184.42ZM509.22,275c-21-47.12-48.5-151.75-73.12-186.75A208.11,208.11,0,0,0,266.11,0H200C117,0,42.48,50.57,13.25,123.65L239.21,288H511.76A31.35,31.35,0,0,0,509.22,275ZM320,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,320,224Zm16,144H496l16-48H256V512H401.88a64,64,0,0,0,60.71-43.76L464,464H336a16,16,0,0,1,0-32H474.67l10.67-32H336a16,16,0,0,1,0-32Z\"]\n};\nvar faHeadSideVirus = {\n prefix: 'fas',\n iconName: 'head-side-virus',\n icon: [512, 512, [], \"e064\", \"M272,240a16,16,0,1,0,16,16A16,16,0,0,0,272,240Zm-64-64a16,16,0,1,0,16,16A16,16,0,0,0,208,176Zm301.2,99c-20.93-47.12-48.43-151.73-73.07-186.75A207.9,207.9,0,0,0,266.09,0H192C86,0,0,86,0,192A191.23,191.23,0,0,0,64,334.81V512H320V448h64a64,64,0,0,0,64-64V320H480A32,32,0,0,0,509.2,275ZM368,240H355.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C290.47,297.09,256,311.37,256,339.88V352a16,16,0,0,1-32,0V339.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H112a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V96a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C313.09,173.53,327.37,208,355.88,208H368a16,16,0,0,1,0,32Z\"]\n};\nvar faHeading = {\n prefix: 'fas',\n iconName: 'heading',\n icon: [512, 512, [], \"f1dc\", \"M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z\"]\n};\nvar faHeadphones = {\n prefix: 'fas',\n iconName: 'headphones',\n icon: [512, 512, [], \"f025\", \"M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z\"]\n};\nvar faHeadphonesAlt = {\n prefix: 'fas',\n iconName: 'headphones-alt',\n icon: [512, 512, [], \"f58f\", \"M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z\"]\n};\nvar faHeadset = {\n prefix: 'fas',\n iconName: 'headset',\n icon: [512, 512, [], \"f590\", \"M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z\"]\n};\nvar faHeart = {\n prefix: 'fas',\n iconName: 'heart',\n icon: [512, 512, [], \"f004\", \"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"]\n};\nvar faHeartBroken = {\n prefix: 'fas',\n iconName: 'heart-broken',\n icon: [512, 512, [], \"f7a9\", \"M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHeartbeat = {\n prefix: 'fas',\n iconName: 'heartbeat',\n icon: [512, 512, [], \"f21e\", \"M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHelicopter = {\n prefix: 'fas',\n iconName: 'helicopter',\n icon: [640, 512, [], \"f533\", \"M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z\"]\n};\nvar faHighlighter = {\n prefix: 'fas',\n iconName: 'highlighter',\n icon: [544, 512, [], \"f591\", \"M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z\"]\n};\nvar faHiking = {\n prefix: 'fas',\n iconName: 'hiking',\n icon: [384, 512, [], \"f6ec\", \"M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z\"]\n};\nvar faHippo = {\n prefix: 'fas',\n iconName: 'hippo',\n icon: [640, 512, [], \"f6ed\", \"M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHistory = {\n prefix: 'fas',\n iconName: 'history',\n icon: [512, 512, [], \"f1da\", \"M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z\"]\n};\nvar faHockeyPuck = {\n prefix: 'fas',\n iconName: 'hockey-puck',\n icon: [512, 512, [], \"f453\", \"M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z\"]\n};\nvar faHollyBerry = {\n prefix: 'fas',\n iconName: 'holly-berry',\n icon: [448, 512, [], \"f7aa\", \"M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z\"]\n};\nvar faHome = {\n prefix: 'fas',\n iconName: 'home',\n icon: [576, 512, [], \"f015\", \"M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z\"]\n};\nvar faHorse = {\n prefix: 'fas',\n iconName: 'horse',\n icon: [576, 512, [], \"f6f0\", \"M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHorseHead = {\n prefix: 'fas',\n iconName: 'horse-head',\n icon: [512, 512, [], \"f7ab\", \"M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z\"]\n};\nvar faHospital = {\n prefix: 'fas',\n iconName: 'hospital',\n icon: [448, 512, [], \"f0f8\", \"M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z\"]\n};\nvar faHospitalAlt = {\n prefix: 'fas',\n iconName: 'hospital-alt',\n icon: [576, 512, [], \"f47d\", \"M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faHospitalSymbol = {\n prefix: 'fas',\n iconName: 'hospital-symbol',\n icon: [512, 512, [], \"f47e\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z\"]\n};\nvar faHospitalUser = {\n prefix: 'fas',\n iconName: 'hospital-user',\n icon: [640, 512, [], \"f80d\", \"M480 320a96 96 0 1 0-96-96 96 96 0 0 0 96 96zm48 32a22.88 22.88 0 0 0-7.06 1.09 124.76 124.76 0 0 1-81.89 0A22.82 22.82 0 0 0 432 352a112 112 0 0 0-112 112.62c.14 26.26 21.73 47.38 48 47.38h224c26.27 0 47.86-21.12 48-47.38A112 112 0 0 0 528 352zm-198.09 10.45A145.19 145.19 0 0 1 352 344.62V128a32 32 0 0 0-32-32h-32V32a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v64H32a32 32 0 0 0-32 32v368a16 16 0 0 0 16 16h288.31A78.62 78.62 0 0 1 288 464.79a143.06 143.06 0 0 1 41.91-102.34zM144 404a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm48-122a6 6 0 0 1-6 6h-20a6 6 0 0 1-6-6v-26h-26a6 6 0 0 1-6-6v-20a6 6 0 0 1 6-6h26V70a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v26h26a6 6 0 0 1 6 6v20a6 6 0 0 1-6 6h-26zm80 250a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12z\"]\n};\nvar faHotTub = {\n prefix: 'fas',\n iconName: 'hot-tub',\n icon: [512, 512, [], \"f593\", \"M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z\"]\n};\nvar faHotdog = {\n prefix: 'fas',\n iconName: 'hotdog',\n icon: [512, 512, [], \"f80f\", \"M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z\"]\n};\nvar faHotel = {\n prefix: 'fas',\n iconName: 'hotel',\n icon: [576, 512, [], \"f594\", \"M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faHourglass = {\n prefix: 'fas',\n iconName: 'hourglass',\n icon: [384, 512, [], \"f254\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z\"]\n};\nvar faHourglassEnd = {\n prefix: 'fas',\n iconName: 'hourglass-end',\n icon: [384, 512, [], \"f253\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z\"]\n};\nvar faHourglassHalf = {\n prefix: 'fas',\n iconName: 'hourglass-half',\n icon: [384, 512, [], \"f252\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z\"]\n};\nvar faHourglassStart = {\n prefix: 'fas',\n iconName: 'hourglass-start',\n icon: [384, 512, [], \"f251\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z\"]\n};\nvar faHouseDamage = {\n prefix: 'fas',\n iconName: 'house-damage',\n icon: [576, 512, [], \"f6f1\", \"M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z\"]\n};\nvar faHouseUser = {\n prefix: 'fas',\n iconName: 'house-user',\n icon: [576, 512, [], \"e065\", \"M570.69,236.27,512,184.44V48a16,16,0,0,0-16-16H432a16,16,0,0,0-16,16V99.67L314.78,10.3C308.5,4.61,296.53,0,288,0s-20.46,4.61-26.74,10.3l-256,226A18.27,18.27,0,0,0,0,248.2a18.64,18.64,0,0,0,4.09,10.71L25.5,282.7a21.14,21.14,0,0,0,12,5.3,21.67,21.67,0,0,0,10.69-4.11l15.9-14V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V269.88l15.91,14A21.94,21.94,0,0,0,538.63,288a20.89,20.89,0,0,0,11.87-5.31l21.41-23.81A21.64,21.64,0,0,0,576,248.19,21,21,0,0,0,570.69,236.27ZM288,176a64,64,0,1,1-64,64A64,64,0,0,1,288,176ZM400,448H176a16,16,0,0,1-16-16,96,96,0,0,1,96-96h64a96,96,0,0,1,96,96A16,16,0,0,1,400,448Z\"]\n};\nvar faHryvnia = {\n prefix: 'fas',\n iconName: 'hryvnia',\n icon: [384, 512, [], \"f6f2\", \"M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z\"]\n};\nvar faICursor = {\n prefix: 'fas',\n iconName: 'i-cursor',\n icon: [256, 512, [], \"f246\", \"M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z\"]\n};\nvar faIceCream = {\n prefix: 'fas',\n iconName: 'ice-cream',\n icon: [448, 512, [], \"f810\", \"M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z\"]\n};\nvar faIcicles = {\n prefix: 'fas',\n iconName: 'icicles',\n icon: [512, 512, [], \"f7ad\", \"M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z\"]\n};\nvar faIcons = {\n prefix: 'fas',\n iconName: 'icons',\n icon: [512, 512, [], \"f86d\", \"M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z\"]\n};\nvar faIdBadge = {\n prefix: 'fas',\n iconName: 'id-badge',\n icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faIdCard = {\n prefix: 'fas',\n iconName: 'id-card',\n icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z\"]\n};\nvar faIdCardAlt = {\n prefix: 'fas',\n iconName: 'id-card-alt',\n icon: [576, 512, [], \"f47f\", \"M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z\"]\n};\nvar faIgloo = {\n prefix: 'fas',\n iconName: 'igloo',\n icon: [576, 512, [], \"f7ae\", \"M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z\"]\n};\nvar faImage = {\n prefix: 'fas',\n iconName: 'image',\n icon: [512, 512, [], \"f03e\", \"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"]\n};\nvar faImages = {\n prefix: 'fas',\n iconName: 'images',\n icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z\"]\n};\nvar faInbox = {\n prefix: 'fas',\n iconName: 'inbox',\n icon: [576, 512, [], \"f01c\", \"M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z\"]\n};\nvar faIndent = {\n prefix: 'fas',\n iconName: 'indent',\n icon: [448, 512, [], \"f03c\", \"M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faIndustry = {\n prefix: 'fas',\n iconName: 'industry',\n icon: [512, 512, [], \"f275\", \"M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z\"]\n};\nvar faInfinity = {\n prefix: 'fas',\n iconName: 'infinity',\n icon: [640, 512, [], \"f534\", \"M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z\"]\n};\nvar faInfo = {\n prefix: 'fas',\n iconName: 'info',\n icon: [192, 512, [], \"f129\", \"M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z\"]\n};\nvar faInfoCircle = {\n prefix: 'fas',\n iconName: 'info-circle',\n icon: [512, 512, [], \"f05a\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"]\n};\nvar faItalic = {\n prefix: 'fas',\n iconName: 'italic',\n icon: [320, 512, [], \"f033\", \"M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z\"]\n};\nvar faJedi = {\n prefix: 'fas',\n iconName: 'jedi',\n icon: [576, 512, [], \"f669\", \"M535.95308,352c-42.64069,94.17188-137.64086,160-247.9848,160q-6.39844,0-12.84377-.29688C171.15558,506.9375,81.26481,442.23438,40.01474,352H79.93668L21.3272,293.40625a264.82522,264.82522,0,0,1-5.10938-39.42187,273.6653,273.6653,0,0,1,.5-29.98438H63.93665L22.546,182.625A269.79782,269.79782,0,0,1,130.51489,20.54688a16.06393,16.06393,0,0,1,9.28127-3,16.36332,16.36332,0,0,1,13.5,7.25,16.02739,16.02739,0,0,1,1.625,15.09374,138.387,138.387,0,0,0-9.84376,51.26563c0,45.10937,21.04691,86.57813,57.71884,113.73437a16.29989,16.29989,0,0,1,1.20313,25.39063c-26.54692,23.98437-41.17194,56.5-41.17194,91.57813,0,60.03124,42.95319,110.28124,99.89079,121.92187l2.5-65.26563L238.062,397a8.33911,8.33911,0,0,1-10-.75,8.025,8.025,0,0,1-1.39063-9.9375l20.125-33.76562-42.06257-8.73438a7.9898,7.9898,0,0,1,0-15.65625l42.06257-8.71875-20.10941-33.73438a7.99122,7.99122,0,0,1,11.35939-10.71874L268.437,295.64062,279.95265,7.67188a7.97138,7.97138,0,0,1,8-7.67188h.04687a8.02064,8.02064,0,0,1,7.95314,7.70312L307.48394,295.625l30.39068-20.67188a8.08327,8.08327,0,0,1,10,.8125,7.99866,7.99866,0,0,1,1.39062,9.90626L329.12461,319.4375l42.07819,8.73438a7.99373,7.99373,0,0,1,0,15.65624l-42.07819,8.71876,20.1094,33.73437a7.97791,7.97791,0,0,1-1.32812,9.92187A8.25739,8.25739,0,0,1,337.87462,397L310.7027,378.53125l2.5,65.34375c48.48446-9.40625,87.57828-48.15625,97.31267-96.5A123.52652,123.52652,0,0,0,371.9528,230.29688a16.30634,16.30634,0,0,1,1.20313-25.42188c36.65631-27.17188,57.6876-68.60938,57.6876-113.73438a138.01689,138.01689,0,0,0-9.85939-51.3125,15.98132,15.98132,0,0,1,1.60937-15.09374,16.36914,16.36914,0,0,1,13.5-7.23438,16.02453,16.02453,0,0,1,9.25,2.98438A271.26947,271.26947,0,0,1,553.25,182.76562L511.99992,224h46.9532C559.3125,229.76562,560,235.45312,560,241.26562a270.092,270.092,0,0,1-5.125,51.85938L495.98427,352Z\"]\n};\nvar faJoint = {\n prefix: 'fas',\n iconName: 'joint',\n icon: [640, 512, [], \"f595\", \"M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z\"]\n};\nvar faJournalWhills = {\n prefix: 'fas',\n iconName: 'journal-whills',\n icon: [448, 512, [], \"f66a\", \"M438.40625,377.59375c-3.20313,12.8125-3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-25.59375,25.59375H96c-54.40625,0-96-41.59375-96-96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.8125Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l37.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-8.15624a4.003,4.003,0,0,0-5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3.73438-8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z\"]\n};\nvar faKaaba = {\n prefix: 'fas',\n iconName: 'kaaba',\n icon: [576, 512, [], \"f66b\", \"M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z\"]\n};\nvar faKey = {\n prefix: 'fas',\n iconName: 'key',\n icon: [512, 512, [], \"f084\", \"M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z\"]\n};\nvar faKeyboard = {\n prefix: 'fas',\n iconName: 'keyboard',\n icon: [576, 512, [], \"f11c\", \"M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faKhanda = {\n prefix: 'fas',\n iconName: 'khanda',\n icon: [512, 512, [], \"f66d\", \"M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z\"]\n};\nvar faKiss = {\n prefix: 'fas',\n iconName: 'kiss',\n icon: [496, 512, [], \"f596\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faKissBeam = {\n prefix: 'fas',\n iconName: 'kiss-beam',\n icon: [496, 512, [], \"f597\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z\"]\n};\nvar faKissWinkHeart = {\n prefix: 'fas',\n iconName: 'kiss-wink-heart',\n icon: [504, 512, [], \"f598\", \"M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z\"]\n};\nvar faKiwiBird = {\n prefix: 'fas',\n iconName: 'kiwi-bird',\n icon: [576, 512, [], \"f535\", \"M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z\"]\n};\nvar faLandmark = {\n prefix: 'fas',\n iconName: 'landmark',\n icon: [512, 512, [], \"f66f\", \"M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faLanguage = {\n prefix: 'fas',\n iconName: 'language',\n icon: [640, 512, [], \"f1ab\", \"M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z\"]\n};\nvar faLaptop = {\n prefix: 'fas',\n iconName: 'laptop',\n icon: [640, 512, [], \"f109\", \"M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopCode = {\n prefix: 'fas',\n iconName: 'laptop-code',\n icon: [640, 512, [], \"f5fc\", \"M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopHouse = {\n prefix: 'fas',\n iconName: 'laptop-house',\n icon: [640, 512, [], \"e066\", \"M272,288H208a16,16,0,0,1-16-16V208a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v37.12C299.11,232.24,315,224,332.8,224H469.74l6.65-7.53A16.51,16.51,0,0,0,480,207a16.31,16.31,0,0,0-4.75-10.61L416,144V48a16,16,0,0,0-16-16H368a16,16,0,0,0-16,16V87.3L263.5,8.92C258,4,247.45,0,240.05,0s-17.93,4-23.47,8.92L4.78,196.42A16.15,16.15,0,0,0,0,207a16.4,16.4,0,0,0,3.55,9.39L22.34,237.7A16.22,16.22,0,0,0,33,242.48,16.51,16.51,0,0,0,42.34,239L64,219.88V384a32,32,0,0,0,32,32H272ZM629.33,448H592V288c0-17.67-12.89-32-28.8-32H332.8c-15.91,0-28.8,14.33-28.8,32V448H266.67A10.67,10.67,0,0,0,256,458.67v10.66A42.82,42.82,0,0,0,298.6,512H597.4A42.82,42.82,0,0,0,640,469.33V458.67A10.67,10.67,0,0,0,629.33,448ZM544,448H352V304H544Z\"]\n};\nvar faLaptopMedical = {\n prefix: 'fas',\n iconName: 'laptop-medical',\n icon: [640, 512, [], \"f812\", \"M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z\"]\n};\nvar faLaugh = {\n prefix: 'fas',\n iconName: 'laugh',\n icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z\"]\n};\nvar faLaughBeam = {\n prefix: 'fas',\n iconName: 'laugh-beam',\n icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughSquint = {\n prefix: 'fas',\n iconName: 'laugh-squint',\n icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughWink = {\n prefix: 'fas',\n iconName: 'laugh-wink',\n icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLayerGroup = {\n prefix: 'fas',\n iconName: 'layer-group',\n icon: [512, 512, [], \"f5fd\", \"M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z\"]\n};\nvar faLeaf = {\n prefix: 'fas',\n iconName: 'leaf',\n icon: [576, 512, [], \"f06c\", \"M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z\"]\n};\nvar faLemon = {\n prefix: 'fas',\n iconName: 'lemon',\n icon: [512, 512, [], \"f094\", \"M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z\"]\n};\nvar faLessThan = {\n prefix: 'fas',\n iconName: 'less-than',\n icon: [384, 512, [], \"f536\", \"M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z\"]\n};\nvar faLessThanEqual = {\n prefix: 'fas',\n iconName: 'less-than-equal',\n icon: [448, 512, [], \"f537\", \"M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faLevelDownAlt = {\n prefix: 'fas',\n iconName: 'level-down-alt',\n icon: [320, 512, [], \"f3be\", \"M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z\"]\n};\nvar faLevelUpAlt = {\n prefix: 'fas',\n iconName: 'level-up-alt',\n icon: [320, 512, [], \"f3bf\", \"M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z\"]\n};\nvar faLifeRing = {\n prefix: 'fas',\n iconName: 'life-ring',\n icon: [512, 512, [], \"f1cd\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z\"]\n};\nvar faLightbulb = {\n prefix: 'fas',\n iconName: 'lightbulb',\n icon: [352, 512, [], \"f0eb\", \"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faLink = {\n prefix: 'fas',\n iconName: 'link',\n icon: [512, 512, [], \"f0c1\", \"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"]\n};\nvar faLiraSign = {\n prefix: 'fas',\n iconName: 'lira-sign',\n icon: [384, 512, [], \"f195\", \"M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z\"]\n};\nvar faList = {\n prefix: 'fas',\n iconName: 'list',\n icon: [512, 512, [], \"f03a\", \"M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faListAlt = {\n prefix: 'fas',\n iconName: 'list-alt',\n icon: [512, 512, [], \"f022\", \"M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z\"]\n};\nvar faListOl = {\n prefix: 'fas',\n iconName: 'list-ol',\n icon: [512, 512, [], \"f0cb\", \"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"]\n};\nvar faListUl = {\n prefix: 'fas',\n iconName: 'list-ul',\n icon: [512, 512, [], \"f0ca\", \"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faLocationArrow = {\n prefix: 'fas',\n iconName: 'location-arrow',\n icon: [512, 512, [], \"f124\", \"M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z\"]\n};\nvar faLock = {\n prefix: 'fas',\n iconName: 'lock',\n icon: [448, 512, [], \"f023\", \"M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z\"]\n};\nvar faLockOpen = {\n prefix: 'fas',\n iconName: 'lock-open',\n icon: [576, 512, [], \"f3c1\", \"M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z\"]\n};\nvar faLongArrowAltDown = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-down',\n icon: [256, 512, [], \"f309\", \"M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z\"]\n};\nvar faLongArrowAltLeft = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-left',\n icon: [448, 512, [], \"f30a\", \"M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z\"]\n};\nvar faLongArrowAltRight = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-right',\n icon: [448, 512, [], \"f30b\", \"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"]\n};\nvar faLongArrowAltUp = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-up',\n icon: [256, 512, [], \"f30c\", \"M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z\"]\n};\nvar faLowVision = {\n prefix: 'fas',\n iconName: 'low-vision',\n icon: [576, 512, [], \"f2a8\", \"M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z\"]\n};\nvar faLuggageCart = {\n prefix: 'fas',\n iconName: 'luggage-cart',\n icon: [640, 512, [], \"f59d\", \"M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z\"]\n};\nvar faLungs = {\n prefix: 'fas',\n iconName: 'lungs',\n icon: [640, 512, [], \"f604\", \"M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z\"]\n};\nvar faLungsVirus = {\n prefix: 'fas',\n iconName: 'lungs-virus',\n icon: [640, 512, [], \"e067\", \"M344,150.68V16A16,16,0,0,0,328,0H312a16,16,0,0,0-16,16V150.68a46.45,46.45,0,0,1,48,0ZM195.54,444.46a48.06,48.06,0,0,1,0-67.88l8.58-8.58H192a48,48,0,0,1,0-96h12.12l-8.58-8.57a48,48,0,0,1,60.46-74V161.75C256,125.38,224.62,96,186,96c-44,0-58,28.5-80.12,63.13a819.52,819.52,0,0,0-102,231A113.16,113.16,0,0,0,0,419.75C0,481,62.5,525.26,125.25,508.38l59.5-15.87a98.51,98.51,0,0,0,52.5-34.75,46.49,46.49,0,0,1-41.71-13.3Zm226.29-22.63a16,16,0,0,0,0-22.62l-8.58-8.58C393.09,370.47,407.37,336,435.88,336H448a16,16,0,0,0,0-32H435.88c-28.51,0-42.79-34.47-22.63-54.62l8.58-8.58a16,16,0,0,0-22.63-22.63l-8.57,8.58C370.47,246.91,336,232.63,336,204.12V192a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.58c20.16,20.15,5.88,54.62-22.63,54.62H192a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.58a16,16,0,1,0,22.63,22.62l8.57-8.57C269.53,393.1,304,407.38,304,435.88V448a16,16,0,0,0,32,0V435.88c0-28.5,34.47-42.78,54.63-22.62l8.57,8.57a16,16,0,0,0,22.63,0ZM288,304a16,16,0,1,1,16-16A16,16,0,0,1,288,304Zm64,64a16,16,0,1,1,16-16A16,16,0,0,1,352,368Zm284.12,22.13a819.52,819.52,0,0,0-102-231C512,124.5,498,96,454,96c-38.62,0-70,29.38-70,65.75v27.72a48,48,0,0,1,60.46,74L435.88,272H448a48,48,0,0,1,0,96H435.88l8.58,8.58a47.7,47.7,0,0,1-41.71,81.18,98.51,98.51,0,0,0,52.5,34.75l59.5,15.87C577.5,525.26,640,481,640,419.75A113.16,113.16,0,0,0,636.12,390.13Z\"]\n};\nvar faMagic = {\n prefix: 'fas',\n iconName: 'magic',\n icon: [512, 512, [], \"f0d0\", \"M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z\"]\n};\nvar faMagnet = {\n prefix: 'fas',\n iconName: 'magnet',\n icon: [512, 512, [], \"f076\", \"M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z\"]\n};\nvar faMailBulk = {\n prefix: 'fas',\n iconName: 'mail-bulk',\n icon: [576, 512, [], \"f674\", \"M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z\"]\n};\nvar faMale = {\n prefix: 'fas',\n iconName: 'male',\n icon: [192, 512, [], \"f183\", \"M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z\"]\n};\nvar faMap = {\n prefix: 'fas',\n iconName: 'map',\n icon: [576, 512, [], \"f279\", \"M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarked = {\n prefix: 'fas',\n iconName: 'map-marked',\n icon: [576, 512, [], \"f59f\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarkedAlt = {\n prefix: 'fas',\n iconName: 'map-marked-alt',\n icon: [576, 512, [], \"f5a0\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarker = {\n prefix: 'fas',\n iconName: 'map-marker',\n icon: [384, 512, [], \"f041\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z\"]\n};\nvar faMapMarkerAlt = {\n prefix: 'fas',\n iconName: 'map-marker-alt',\n icon: [384, 512, [], \"f3c5\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"]\n};\nvar faMapPin = {\n prefix: 'fas',\n iconName: 'map-pin',\n icon: [288, 512, [], \"f276\", \"M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z\"]\n};\nvar faMapSigns = {\n prefix: 'fas',\n iconName: 'map-signs',\n icon: [512, 512, [], \"f277\", \"M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z\"]\n};\nvar faMarker = {\n prefix: 'fas',\n iconName: 'marker',\n icon: [512, 512, [], \"f5a1\", \"M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z\"]\n};\nvar faMars = {\n prefix: 'fas',\n iconName: 'mars',\n icon: [384, 512, [], \"f222\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsDouble = {\n prefix: 'fas',\n iconName: 'mars-double',\n icon: [512, 512, [], \"f227\", \"M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z\"]\n};\nvar faMarsStroke = {\n prefix: 'fas',\n iconName: 'mars-stroke',\n icon: [384, 512, [], \"f229\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsStrokeH = {\n prefix: 'fas',\n iconName: 'mars-stroke-h',\n icon: [480, 512, [], \"f22b\", \"M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMarsStrokeV = {\n prefix: 'fas',\n iconName: 'mars-stroke-v',\n icon: [288, 512, [], \"f22a\", \"M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMask = {\n prefix: 'fas',\n iconName: 'mask',\n icon: [640, 512, [], \"f6fa\", \"M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z\"]\n};\nvar faMedal = {\n prefix: 'fas',\n iconName: 'medal',\n icon: [512, 512, [], \"f5a2\", \"M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z\"]\n};\nvar faMedkit = {\n prefix: 'fas',\n iconName: 'medkit',\n icon: [512, 512, [], \"f0fa\", \"M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z\"]\n};\nvar faMeh = {\n prefix: 'fas',\n iconName: 'meh',\n icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehBlank = {\n prefix: 'fas',\n iconName: 'meh-blank',\n icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehRollingEyes = {\n prefix: 'fas',\n iconName: 'meh-rolling-eyes',\n icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z\"]\n};\nvar faMemory = {\n prefix: 'fas',\n iconName: 'memory',\n icon: [640, 512, [], \"f538\", \"M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z\"]\n};\nvar faMenorah = {\n prefix: 'fas',\n iconName: 'menorah',\n icon: [640, 512, [], \"f676\", \"M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z\"]\n};\nvar faMercury = {\n prefix: 'fas',\n iconName: 'mercury',\n icon: [288, 512, [], \"f223\", \"M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faMeteor = {\n prefix: 'fas',\n iconName: 'meteor',\n icon: [512, 512, [], \"f753\", \"M511.328,20.8027c-11.60759,38.70264-34.30724,111.70173-61.30311,187.70077,6.99893,2.09372,13.4042,4,18.60653,5.59368a16.06158,16.06158,0,0,1,9.49854,22.906c-22.106,42.29635-82.69047,152.795-142.47819,214.40356-.99984,1.09373-1.99969,2.5-2.99954,3.49995A194.83046,194.83046,0,1,1,57.085,179.41009c.99985-1,2.40588-2,3.49947-3,61.59994-59.90549,171.97367-120.40473,214.37343-142.4982a16.058,16.058,0,0,1,22.90274,9.49988c1.59351,5.09368,3.49947,11.5936,5.5929,18.59351C379.34818,35.00565,452.43074,12.30281,491.12794.70921A16.18325,16.18325,0,0,1,511.328,20.8027ZM319.951,320.00207A127.98041,127.98041,0,1,0,191.97061,448.00046,127.97573,127.97573,0,0,0,319.951,320.00207Zm-127.98041-31.9996a31.9951,31.9951,0,1,1-31.9951-31.9996A31.959,31.959,0,0,1,191.97061,288.00247Zm31.9951,79.999a15.99755,15.99755,0,1,1-15.99755-15.9998A16.04975,16.04975,0,0,1,223.96571,368.00147Z\"]\n};\nvar faMicrochip = {\n prefix: 'fas',\n iconName: 'microchip',\n icon: [512, 512, [], \"f2db\", \"M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z\"]\n};\nvar faMicrophone = {\n prefix: 'fas',\n iconName: 'microphone',\n icon: [352, 512, [], \"f130\", \"M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneAlt = {\n prefix: 'fas',\n iconName: 'microphone-alt',\n icon: [352, 512, [], \"f3c9\", \"M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z\"]\n};\nvar faMicrophoneAltSlash = {\n prefix: 'fas',\n iconName: 'microphone-alt-slash',\n icon: [640, 512, [], \"f539\", \"M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneSlash = {\n prefix: 'fas',\n iconName: 'microphone-slash',\n icon: [640, 512, [], \"f131\", \"M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicroscope = {\n prefix: 'fas',\n iconName: 'microscope',\n icon: [512, 512, [], \"f610\", \"M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z\"]\n};\nvar faMinus = {\n prefix: 'fas',\n iconName: 'minus',\n icon: [448, 512, [], \"f068\", \"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faMinusCircle = {\n prefix: 'fas',\n iconName: 'minus-circle',\n icon: [512, 512, [], \"f056\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"]\n};\nvar faMinusSquare = {\n prefix: 'fas',\n iconName: 'minus-square',\n icon: [448, 512, [], \"f146\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"]\n};\nvar faMitten = {\n prefix: 'fas',\n iconName: 'mitten',\n icon: [448, 512, [], \"f7b5\", \"M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z\"]\n};\nvar faMobile = {\n prefix: 'fas',\n iconName: 'mobile',\n icon: [320, 512, [], \"f10b\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMobileAlt = {\n prefix: 'fas',\n iconName: 'mobile-alt',\n icon: [320, 512, [], \"f3cd\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faMoneyBill = {\n prefix: 'fas',\n iconName: 'money-bill',\n icon: [640, 512, [], \"f0d6\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillAlt = {\n prefix: 'fas',\n iconName: 'money-bill-alt',\n icon: [640, 512, [], \"f3d1\", \"M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillWave = {\n prefix: 'fas',\n iconName: 'money-bill-wave',\n icon: [640, 512, [], \"f53a\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z\"]\n};\nvar faMoneyBillWaveAlt = {\n prefix: 'fas',\n iconName: 'money-bill-wave-alt',\n icon: [640, 512, [], \"f53b\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z\"]\n};\nvar faMoneyCheck = {\n prefix: 'fas',\n iconName: 'money-check',\n icon: [640, 512, [], \"f53c\", \"M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMoneyCheckAlt = {\n prefix: 'fas',\n iconName: 'money-check-alt',\n icon: [640, 512, [], \"f53d\", \"M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faMonument = {\n prefix: 'fas',\n iconName: 'monument',\n icon: [384, 512, [], \"f5a6\", \"M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faMoon = {\n prefix: 'fas',\n iconName: 'moon',\n icon: [512, 512, [], \"f186\", \"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z\"]\n};\nvar faMortarPestle = {\n prefix: 'fas',\n iconName: 'mortar-pestle',\n icon: [512, 512, [], \"f5a7\", \"M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faMosque = {\n prefix: 'fas',\n iconName: 'mosque',\n icon: [640, 512, [], \"f678\", \"M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z\"]\n};\nvar faMotorcycle = {\n prefix: 'fas',\n iconName: 'motorcycle',\n icon: [640, 512, [], \"f21c\", \"M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z\"]\n};\nvar faMountain = {\n prefix: 'fas',\n iconName: 'mountain',\n icon: [640, 512, [], \"f6fc\", \"M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z\"]\n};\nvar faMouse = {\n prefix: 'fas',\n iconName: 'mouse',\n icon: [384, 512, [], \"f8cc\", \"M0 352a160 160 0 0 0 160 160h64a160 160 0 0 0 160-160V224H0zM176 0h-16A160 160 0 0 0 0 160v32h176zm48 0h-16v192h176v-32A160 160 0 0 0 224 0z\"]\n};\nvar faMousePointer = {\n prefix: 'fas',\n iconName: 'mouse-pointer',\n icon: [320, 512, [], \"f245\", \"M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z\"]\n};\nvar faMugHot = {\n prefix: 'fas',\n iconName: 'mug-hot',\n icon: [512, 512, [], \"f7b6\", \"M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faMusic = {\n prefix: 'fas',\n iconName: 'music',\n icon: [512, 512, [], \"f001\", \"M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z\"]\n};\nvar faNetworkWired = {\n prefix: 'fas',\n iconName: 'network-wired',\n icon: [640, 512, [], \"f6ff\", \"M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z\"]\n};\nvar faNeuter = {\n prefix: 'fas',\n iconName: 'neuter',\n icon: [288, 512, [], \"f22c\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faNewspaper = {\n prefix: 'fas',\n iconName: 'newspaper',\n icon: [576, 512, [], \"f1ea\", \"M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z\"]\n};\nvar faNotEqual = {\n prefix: 'fas',\n iconName: 'not-equal',\n icon: [448, 512, [], \"f53e\", \"M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z\"]\n};\nvar faNotesMedical = {\n prefix: 'fas',\n iconName: 'notes-medical',\n icon: [384, 512, [], \"f481\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faObjectGroup = {\n prefix: 'fas',\n iconName: 'object-group',\n icon: [512, 512, [], \"f247\", \"M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z\"]\n};\nvar faObjectUngroup = {\n prefix: 'fas',\n iconName: 'object-ungroup',\n icon: [576, 512, [], \"f248\", \"M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z\"]\n};\nvar faOilCan = {\n prefix: 'fas',\n iconName: 'oil-can',\n icon: [640, 512, [], \"f613\", \"M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z\"]\n};\nvar faOm = {\n prefix: 'fas',\n iconName: 'om',\n icon: [512, 512, [], \"f679\", \"M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z\"]\n};\nvar faOtter = {\n prefix: 'fas',\n iconName: 'otter',\n icon: [640, 512, [], \"f700\", \"M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z\"]\n};\nvar faOutdent = {\n prefix: 'fas',\n iconName: 'outdent',\n icon: [448, 512, [], \"f03b\", \"M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faPager = {\n prefix: 'fas',\n iconName: 'pager',\n icon: [512, 512, [], \"f815\", \"M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z\"]\n};\nvar faPaintBrush = {\n prefix: 'fas',\n iconName: 'paint-brush',\n icon: [512, 512, [], \"f1fc\", \"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z\"]\n};\nvar faPaintRoller = {\n prefix: 'fas',\n iconName: 'paint-roller',\n icon: [512, 512, [], \"f5aa\", \"M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z\"]\n};\nvar faPalette = {\n prefix: 'fas',\n iconName: 'palette',\n icon: [512, 512, [], \"f53f\", \"M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPallet = {\n prefix: 'fas',\n iconName: 'pallet',\n icon: [640, 512, [], \"f482\", \"M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z\"]\n};\nvar faPaperPlane = {\n prefix: 'fas',\n iconName: 'paper-plane',\n icon: [512, 512, [], \"f1d8\", \"M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z\"]\n};\nvar faPaperclip = {\n prefix: 'fas',\n iconName: 'paperclip',\n icon: [448, 512, [], \"f0c6\", \"M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z\"]\n};\nvar faParachuteBox = {\n prefix: 'fas',\n iconName: 'parachute-box',\n icon: [512, 512, [], \"f4cd\", \"M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z\"]\n};\nvar faParagraph = {\n prefix: 'fas',\n iconName: 'paragraph',\n icon: [448, 512, [], \"f1dd\", \"M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z\"]\n};\nvar faParking = {\n prefix: 'fas',\n iconName: 'parking',\n icon: [448, 512, [], \"f540\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z\"]\n};\nvar faPassport = {\n prefix: 'fas',\n iconName: 'passport',\n icon: [448, 512, [], \"f5ab\", \"M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z\"]\n};\nvar faPastafarianism = {\n prefix: 'fas',\n iconName: 'pastafarianism',\n icon: [640, 512, [], \"f67b\", \"M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z\"]\n};\nvar faPaste = {\n prefix: 'fas',\n iconName: 'paste',\n icon: [448, 512, [], \"f0ea\", \"M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z\"]\n};\nvar faPause = {\n prefix: 'fas',\n iconName: 'pause',\n icon: [448, 512, [], \"f04c\", \"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z\"]\n};\nvar faPauseCircle = {\n prefix: 'fas',\n iconName: 'pause-circle',\n icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faPaw = {\n prefix: 'fas',\n iconName: 'paw',\n icon: [512, 512, [], \"f1b0\", \"M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z\"]\n};\nvar faPeace = {\n prefix: 'fas',\n iconName: 'peace',\n icon: [496, 512, [], \"f67c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z\"]\n};\nvar faPen = {\n prefix: 'fas',\n iconName: 'pen',\n icon: [512, 512, [], \"f304\", \"M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z\"]\n};\nvar faPenAlt = {\n prefix: 'fas',\n iconName: 'pen-alt',\n icon: [512, 512, [], \"f305\", \"M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z\"]\n};\nvar faPenFancy = {\n prefix: 'fas',\n iconName: 'pen-fancy',\n icon: [512, 512, [], \"f5ac\", \"M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z\"]\n};\nvar faPenNib = {\n prefix: 'fas',\n iconName: 'pen-nib',\n icon: [512, 512, [], \"f5ad\", \"M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z\"]\n};\nvar faPenSquare = {\n prefix: 'fas',\n iconName: 'pen-square',\n icon: [448, 512, [], \"f14b\", \"M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z\"]\n};\nvar faPencilAlt = {\n prefix: 'fas',\n iconName: 'pencil-alt',\n icon: [512, 512, [], \"f303\", \"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"]\n};\nvar faPencilRuler = {\n prefix: 'fas',\n iconName: 'pencil-ruler',\n icon: [512, 512, [], \"f5ae\", \"M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z\"]\n};\nvar faPeopleArrows = {\n prefix: 'fas',\n iconName: 'people-arrows',\n icon: [576, 512, [], \"e068\", \"M96,128A64,64,0,1,0,32,64,64,64,0,0,0,96,128Zm0,176.08a44.11,44.11,0,0,1,13.64-32L181.77,204c1.65-1.55,3.77-2.31,5.61-3.57A63.91,63.91,0,0,0,128,160H64A64,64,0,0,0,0,224v96a32,32,0,0,0,32,32V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V383.61l-50.36-47.53A44.08,44.08,0,0,1,96,304.08ZM480,128a64,64,0,1,0-64-64A64,64,0,0,0,480,128Zm32,32H448a63.91,63.91,0,0,0-59.38,40.42c1.84,1.27,4,2,5.62,3.59l72.12,68.06a44.37,44.37,0,0,1,0,64L416,383.62V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V352a32,32,0,0,0,32-32V224A64,64,0,0,0,512,160ZM444.4,295.34l-72.12-68.06A12,12,0,0,0,352,236v36H224V236a12,12,0,0,0-20.28-8.73L131.6,295.34a12.4,12.4,0,0,0,0,17.47l72.12,68.07A12,12,0,0,0,224,372.14V336H352v36.14a12,12,0,0,0,20.28,8.74l72.12-68.07A12.4,12.4,0,0,0,444.4,295.34Z\"]\n};\nvar faPeopleCarry = {\n prefix: 'fas',\n iconName: 'people-carry',\n icon: [640, 512, [], \"f4ce\", \"M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z\"]\n};\nvar faPepperHot = {\n prefix: 'fas',\n iconName: 'pepper-hot',\n icon: [512, 512, [], \"f816\", \"M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z\"]\n};\nvar faPercent = {\n prefix: 'fas',\n iconName: 'percent',\n icon: [448, 512, [], \"f295\", \"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z\"]\n};\nvar faPercentage = {\n prefix: 'fas',\n iconName: 'percentage',\n icon: [384, 512, [], \"f541\", \"M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z\"]\n};\nvar faPersonBooth = {\n prefix: 'fas',\n iconName: 'person-booth',\n icon: [576, 512, [], \"f756\", \"M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z\"]\n};\nvar faPhone = {\n prefix: 'fas',\n iconName: 'phone',\n icon: [512, 512, [], \"f095\", \"M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z\"]\n};\nvar faPhoneAlt = {\n prefix: 'fas',\n iconName: 'phone-alt',\n icon: [512, 512, [], \"f879\", \"M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z\"]\n};\nvar faPhoneSlash = {\n prefix: 'fas',\n iconName: 'phone-slash',\n icon: [640, 512, [], \"f3dd\", \"M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faPhoneSquare = {\n prefix: 'fas',\n iconName: 'phone-square',\n icon: [448, 512, [], \"f098\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z\"]\n};\nvar faPhoneSquareAlt = {\n prefix: 'fas',\n iconName: 'phone-square-alt',\n icon: [448, 512, [], \"f87b\", \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z\"]\n};\nvar faPhoneVolume = {\n prefix: 'fas',\n iconName: 'phone-volume',\n icon: [384, 512, [], \"f2a0\", \"M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z\"]\n};\nvar faPhotoVideo = {\n prefix: 'fas',\n iconName: 'photo-video',\n icon: [640, 512, [], \"f87c\", \"M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z\"]\n};\nvar faPiggyBank = {\n prefix: 'fas',\n iconName: 'piggy-bank',\n icon: [576, 512, [], \"f4d3\", \"M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z\"]\n};\nvar faPills = {\n prefix: 'fas',\n iconName: 'pills',\n icon: [576, 512, [], \"f484\", \"M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z\"]\n};\nvar faPizzaSlice = {\n prefix: 'fas',\n iconName: 'pizza-slice',\n icon: [512, 512, [], \"f818\", \"M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faPlaceOfWorship = {\n prefix: 'fas',\n iconName: 'place-of-worship',\n icon: [640, 512, [], \"f67f\", \"M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z\"]\n};\nvar faPlane = {\n prefix: 'fas',\n iconName: 'plane',\n icon: [576, 512, [], \"f072\", \"M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z\"]\n};\nvar faPlaneArrival = {\n prefix: 'fas',\n iconName: 'plane-arrival',\n icon: [640, 512, [], \"f5af\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z\"]\n};\nvar faPlaneDeparture = {\n prefix: 'fas',\n iconName: 'plane-departure',\n icon: [640, 512, [], \"f5b0\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z\"]\n};\nvar faPlaneSlash = {\n prefix: 'fas',\n iconName: 'plane-slash',\n icon: [640, 512, [], \"e069\", \"M32.48,147.88,64,256,32.48,364.13A16,16,0,0,0,48,384H88a16,16,0,0,0,12.8-6.41L144,320H246.85l-49,171.59A16,16,0,0,0,213.2,512h65.5a16,16,0,0,0,13.89-8.06l66.6-116.54L34.35,136.34A15.47,15.47,0,0,0,32.48,147.88ZM633.82,458.09,455.14,320H512c35.34,0,96-28.66,96-64s-60.66-64-96-64H397.7L292.61,8.06C290.06,3.61,283.84,0,278.71,0H213.2a16,16,0,0,0-15.38,20.39l36.94,129.29L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09Z\"]\n};\nvar faPlay = {\n prefix: 'fas',\n iconName: 'play',\n icon: [448, 512, [], \"f04b\", \"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z\"]\n};\nvar faPlayCircle = {\n prefix: 'fas',\n iconName: 'play-circle',\n icon: [512, 512, [], \"f144\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z\"]\n};\nvar faPlug = {\n prefix: 'fas',\n iconName: 'plug',\n icon: [384, 512, [], \"f1e6\", \"M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z\"]\n};\nvar faPlus = {\n prefix: 'fas',\n iconName: 'plus',\n icon: [448, 512, [], \"f067\", \"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPlusCircle = {\n prefix: 'fas',\n iconName: 'plus-circle',\n icon: [512, 512, [], \"f055\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPlusSquare = {\n prefix: 'fas',\n iconName: 'plus-square',\n icon: [448, 512, [], \"f0fe\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPodcast = {\n prefix: 'fas',\n iconName: 'podcast',\n icon: [448, 512, [], \"f2ce\", \"M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z\"]\n};\nvar faPoll = {\n prefix: 'fas',\n iconName: 'poll',\n icon: [448, 512, [], \"f681\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z\"]\n};\nvar faPollH = {\n prefix: 'fas',\n iconName: 'poll-h',\n icon: [448, 512, [], \"f682\", \"M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z\"]\n};\nvar faPoo = {\n prefix: 'fas',\n iconName: 'poo',\n icon: [512, 512, [], \"f2fe\", \"M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPooStorm = {\n prefix: 'fas',\n iconName: 'poo-storm',\n icon: [448, 512, [], \"f75a\", \"M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z\"]\n};\nvar faPoop = {\n prefix: 'fas',\n iconName: 'poop',\n icon: [512, 512, [], \"f619\", \"M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z\"]\n};\nvar faPortrait = {\n prefix: 'fas',\n iconName: 'portrait',\n icon: [384, 512, [], \"f3e0\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faPoundSign = {\n prefix: 'fas',\n iconName: 'pound-sign',\n icon: [320, 512, [], \"f154\", \"M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z\"]\n};\nvar faPowerOff = {\n prefix: 'fas',\n iconName: 'power-off',\n icon: [512, 512, [], \"f011\", \"M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z\"]\n};\nvar faPray = {\n prefix: 'fas',\n iconName: 'pray',\n icon: [384, 512, [], \"f683\", \"M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z\"]\n};\nvar faPrayingHands = {\n prefix: 'fas',\n iconName: 'praying-hands',\n icon: [640, 512, [], \"f684\", \"M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z\"]\n};\nvar faPrescription = {\n prefix: 'fas',\n iconName: 'prescription',\n icon: [384, 512, [], \"f5b1\", \"M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z\"]\n};\nvar faPrescriptionBottle = {\n prefix: 'fas',\n iconName: 'prescription-bottle',\n icon: [384, 512, [], \"f485\", \"M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z\"]\n};\nvar faPrescriptionBottleAlt = {\n prefix: 'fas',\n iconName: 'prescription-bottle-alt',\n icon: [384, 512, [], \"f486\", \"M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z\"]\n};\nvar faPrint = {\n prefix: 'fas',\n iconName: 'print',\n icon: [512, 512, [], \"f02f\", \"M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faProcedures = {\n prefix: 'fas',\n iconName: 'procedures',\n icon: [640, 512, [], \"f487\", \"M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faProjectDiagram = {\n prefix: 'fas',\n iconName: 'project-diagram',\n icon: [640, 512, [], \"f542\", \"M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPumpMedical = {\n prefix: 'fas',\n iconName: 'pump-medical',\n icon: [384, 512, [], \"e06a\", \"M235.51,159.82H84.24A64,64,0,0,0,20.51,218L.14,442a64,64,0,0,0,63.74,69.8h192A64,64,0,0,0,319.61,442L299.24,218A64,64,0,0,0,235.51,159.82Zm4.37,173.33a13.35,13.35,0,0,1-13.34,13.34h-40v40a13.33,13.33,0,0,1-13.33,13.33H146.54a13.33,13.33,0,0,1-13.33-13.33v-40h-40a13.34,13.34,0,0,1-13.33-13.34V306.49a13.33,13.33,0,0,1,13.33-13.34h40v-40a13.33,13.33,0,0,1,13.33-13.33h26.67a13.33,13.33,0,0,1,13.33,13.33v40h40a13.34,13.34,0,0,1,13.34,13.34ZM379.19,93.88,335.87,50.56a64,64,0,0,0-45.24-18.74H223.88a32,32,0,0,0-32-32h-64a32,32,0,0,0-32,32v96h128v-32h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.19,93.88Z\"]\n};\nvar faPumpSoap = {\n prefix: 'fas',\n iconName: 'pump-soap',\n icon: [384, 512, [], \"e06b\", \"M235.63,160H84.37a64,64,0,0,0-63.74,58.21L.27,442.21A64,64,0,0,0,64,512H256a64,64,0,0,0,63.74-69.79l-20.36-224A64,64,0,0,0,235.63,160ZM160,416c-33.12,0-60-26.33-60-58.75,0-25,35.7-75.47,52-97.27A10,10,0,0,1,168,260c16.33,21.8,52,72.27,52,97.27C220,389.67,193.12,416,160,416ZM379.31,94.06,336,50.74A64,64,0,0,0,290.75,32H224A32,32,0,0,0,192,0H128A32,32,0,0,0,96,32v96H224V96h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.31,94.06Z\"]\n};\nvar faPuzzlePiece = {\n prefix: 'fas',\n iconName: 'puzzle-piece',\n icon: [576, 512, [], \"f12e\", \"M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z\"]\n};\nvar faQrcode = {\n prefix: 'fas',\n iconName: 'qrcode',\n icon: [448, 512, [], \"f029\", \"M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z\"]\n};\nvar faQuestion = {\n prefix: 'fas',\n iconName: 'question',\n icon: [384, 512, [], \"f128\", \"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"]\n};\nvar faQuestionCircle = {\n prefix: 'fas',\n iconName: 'question-circle',\n icon: [512, 512, [], \"f059\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\"]\n};\nvar faQuidditch = {\n prefix: 'fas',\n iconName: 'quidditch',\n icon: [640, 512, [], \"f458\", \"M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z\"]\n};\nvar faQuoteLeft = {\n prefix: 'fas',\n iconName: 'quote-left',\n icon: [512, 512, [], \"f10d\", \"M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuoteRight = {\n prefix: 'fas',\n iconName: 'quote-right',\n icon: [512, 512, [], \"f10e\", \"M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuran = {\n prefix: 'fas',\n iconName: 'quran',\n icon: [448, 512, [], \"f687\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faRadiation = {\n prefix: 'fas',\n iconName: 'radiation',\n icon: [496, 512, [], \"f7b9\", \"M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z\"]\n};\nvar faRadiationAlt = {\n prefix: 'fas',\n iconName: 'radiation-alt',\n icon: [496, 512, [], \"f7ba\", \"M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faRainbow = {\n prefix: 'fas',\n iconName: 'rainbow',\n icon: [576, 512, [], \"f75b\", \"M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z\"]\n};\nvar faRandom = {\n prefix: 'fas',\n iconName: 'random',\n icon: [512, 512, [], \"f074\", \"M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z\"]\n};\nvar faReceipt = {\n prefix: 'fas',\n iconName: 'receipt',\n icon: [384, 512, [], \"f543\", \"M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faRecordVinyl = {\n prefix: 'fas',\n iconName: 'record-vinyl',\n icon: [512, 512, [], \"f8d9\", \"M256 152a104 104 0 1 0 104 104 104 104 0 0 0-104-104zm0 128a24 24 0 1 1 24-24 24 24 0 0 1-24 24zm0-272C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a128 128 0 1 1 128-128 128 128 0 0 1-128 128z\"]\n};\nvar faRecycle = {\n prefix: 'fas',\n iconName: 'recycle',\n icon: [512, 512, [], \"f1b8\", \"M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z\"]\n};\nvar faRedo = {\n prefix: 'fas',\n iconName: 'redo',\n icon: [512, 512, [], \"f01e\", \"M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z\"]\n};\nvar faRedoAlt = {\n prefix: 'fas',\n iconName: 'redo-alt',\n icon: [512, 512, [], \"f2f9\", \"M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z\"]\n};\nvar faRegistered = {\n prefix: 'fas',\n iconName: 'registered',\n icon: [512, 512, [], \"f25d\", \"M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z\"]\n};\nvar faRemoveFormat = {\n prefix: 'fas',\n iconName: 'remove-format',\n icon: [640, 512, [], \"f87d\", \"M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z\"]\n};\nvar faReply = {\n prefix: 'fas',\n iconName: 'reply',\n icon: [512, 512, [], \"f3e5\", \"M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z\"]\n};\nvar faReplyAll = {\n prefix: 'fas',\n iconName: 'reply-all',\n icon: [576, 512, [], \"f122\", \"M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z\"]\n};\nvar faRepublican = {\n prefix: 'fas',\n iconName: 'republican',\n icon: [640, 512, [], \"f75e\", \"M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z\"]\n};\nvar faRestroom = {\n prefix: 'fas',\n iconName: 'restroom',\n icon: [640, 512, [], \"f7bd\", \"M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z\"]\n};\nvar faRetweet = {\n prefix: 'fas',\n iconName: 'retweet',\n icon: [640, 512, [], \"f079\", \"M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z\"]\n};\nvar faRibbon = {\n prefix: 'fas',\n iconName: 'ribbon',\n icon: [448, 512, [], \"f4d6\", \"M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z\"]\n};\nvar faRing = {\n prefix: 'fas',\n iconName: 'ring',\n icon: [512, 512, [], \"f70b\", \"M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z\"]\n};\nvar faRoad = {\n prefix: 'fas',\n iconName: 'road',\n icon: [576, 512, [], \"f018\", \"M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z\"]\n};\nvar faRobot = {\n prefix: 'fas',\n iconName: 'robot',\n icon: [640, 512, [], \"f544\", \"M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z\"]\n};\nvar faRocket = {\n prefix: 'fas',\n iconName: 'rocket',\n icon: [512, 512, [], \"f135\", \"M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z\"]\n};\nvar faRoute = {\n prefix: 'fas',\n iconName: 'route',\n icon: [512, 512, [], \"f4d7\", \"M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faRss = {\n prefix: 'fas',\n iconName: 'rss',\n icon: [448, 512, [], \"f09e\", \"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z\"]\n};\nvar faRssSquare = {\n prefix: 'fas',\n iconName: 'rss-square',\n icon: [448, 512, [], \"f143\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z\"]\n};\nvar faRubleSign = {\n prefix: 'fas',\n iconName: 'ruble-sign',\n icon: [384, 512, [], \"f158\", \"M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z\"]\n};\nvar faRuler = {\n prefix: 'fas',\n iconName: 'ruler',\n icon: [640, 512, [], \"f545\", \"M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z\"]\n};\nvar faRulerCombined = {\n prefix: 'fas',\n iconName: 'ruler-combined',\n icon: [512, 512, [], \"f546\", \"M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerHorizontal = {\n prefix: 'fas',\n iconName: 'ruler-horizontal',\n icon: [576, 512, [], \"f547\", \"M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerVertical = {\n prefix: 'fas',\n iconName: 'ruler-vertical',\n icon: [256, 512, [], \"f548\", \"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z\"]\n};\nvar faRunning = {\n prefix: 'fas',\n iconName: 'running',\n icon: [416, 512, [], \"f70c\", \"M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z\"]\n};\nvar faRupeeSign = {\n prefix: 'fas',\n iconName: 'rupee-sign',\n icon: [320, 512, [], \"f156\", \"M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z\"]\n};\nvar faSadCry = {\n prefix: 'fas',\n iconName: 'sad-cry',\n icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z\"]\n};\nvar faSadTear = {\n prefix: 'fas',\n iconName: 'sad-tear',\n icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z\"]\n};\nvar faSatellite = {\n prefix: 'fas',\n iconName: 'satellite',\n icon: [512, 512, [], \"f7bf\", \"M502.60969,310.04206l-96.70393,96.71625a31.88151,31.88151,0,0,1-45.00765,0L280.572,326.34115l-9.89231,9.90759a190.56343,190.56343,0,0,1-5.40716,168.52287c-4.50077,8.50115-16.39342,9.59505-23.20707,2.79725L134.54715,400.05428l-17.7999,17.79929c.70324,2.60972,1.60965,5.00067,1.60965,7.79793a32.00544,32.00544,0,1,1-32.00544-32.00434c2.79735,0,5.18838.90637,7.7982,1.60959l17.7999-17.79929L4.43129,269.94287c-6.798-6.81342-5.70409-18.6119,2.79735-23.20627a190.58161,190.58161,0,0,1,168.52864-5.407l9.79854-9.79821-80.31053-80.41716a32.002,32.002,0,0,1,0-45.09987L201.96474,9.29814A31.62639,31.62639,0,0,1,224.46868,0a31.99951,31.99951,0,0,1,22.59759,9.29814l80.32615,80.30777,47.805-47.89713a33.6075,33.6075,0,0,1,47.50808,0l47.50807,47.50645a33.63308,33.63308,0,0,1,0,47.50644l-47.805,47.89713L502.71908,265.036A31.78938,31.78938,0,0,1,502.60969,310.04206ZM219.56159,197.433l73.82505-73.82252-68.918-68.9-73.80942,73.80689Zm237.74352,90.106-68.90233-68.9156-73.825,73.82252,68.918,68.9Z\"]\n};\nvar faSatelliteDish = {\n prefix: 'fas',\n iconName: 'satellite-dish',\n icon: [512, 512, [], \"f7c0\", \"M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z\"]\n};\nvar faSave = {\n prefix: 'fas',\n iconName: 'save',\n icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"]\n};\nvar faSchool = {\n prefix: 'fas',\n iconName: 'school',\n icon: [640, 512, [], \"f549\", \"M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z\"]\n};\nvar faScrewdriver = {\n prefix: 'fas',\n iconName: 'screwdriver',\n icon: [512, 512, [], \"f54a\", \"M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z\"]\n};\nvar faScroll = {\n prefix: 'fas',\n iconName: 'scroll',\n icon: [640, 512, [], \"f70e\", \"M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z\"]\n};\nvar faSdCard = {\n prefix: 'fas',\n iconName: 'sd-card',\n icon: [384, 512, [], \"f7c2\", \"M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z\"]\n};\nvar faSearch = {\n prefix: 'fas',\n iconName: 'search',\n icon: [512, 512, [], \"f002\", \"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"]\n};\nvar faSearchDollar = {\n prefix: 'fas',\n iconName: 'search-dollar',\n icon: [512, 512, [], \"f688\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z\"]\n};\nvar faSearchLocation = {\n prefix: 'fas',\n iconName: 'search-location',\n icon: [512, 512, [], \"f689\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faSearchMinus = {\n prefix: 'fas',\n iconName: 'search-minus',\n icon: [512, 512, [], \"f010\", \"M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSearchPlus = {\n prefix: 'fas',\n iconName: 'search-plus',\n icon: [512, 512, [], \"f00e\", \"M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSeedling = {\n prefix: 'fas',\n iconName: 'seedling',\n icon: [512, 512, [], \"f4d8\", \"M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z\"]\n};\nvar faServer = {\n prefix: 'fas',\n iconName: 'server',\n icon: [512, 512, [], \"f233\", \"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"]\n};\nvar faShapes = {\n prefix: 'fas',\n iconName: 'shapes',\n icon: [512, 512, [], \"f61f\", \"M128,256A128,128,0,1,0,256,384,128,128,0,0,0,128,256Zm379-54.86L400.07,18.29a37.26,37.26,0,0,0-64.14,0L229,201.14C214.76,225.52,232.58,256,261.09,256H474.91C503.42,256,521.24,225.52,507,201.14ZM480,288H320a32,32,0,0,0-32,32V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V320A32,32,0,0,0,480,288Z\"]\n};\nvar faShare = {\n prefix: 'fas',\n iconName: 'share',\n icon: [512, 512, [], \"f064\", \"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"]\n};\nvar faShareAlt = {\n prefix: 'fas',\n iconName: 'share-alt',\n icon: [448, 512, [], \"f1e0\", \"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z\"]\n};\nvar faShareAltSquare = {\n prefix: 'fas',\n iconName: 'share-alt-square',\n icon: [448, 512, [], \"f1e1\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z\"]\n};\nvar faShareSquare = {\n prefix: 'fas',\n iconName: 'share-square',\n icon: [576, 512, [], \"f14d\", \"M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z\"]\n};\nvar faShekelSign = {\n prefix: 'fas',\n iconName: 'shekel-sign',\n icon: [448, 512, [], \"f20b\", \"M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faShieldAlt = {\n prefix: 'fas',\n iconName: 'shield-alt',\n icon: [512, 512, [], \"f3ed\", \"M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z\"]\n};\nvar faShieldVirus = {\n prefix: 'fas',\n iconName: 'shield-virus',\n icon: [512, 512, [], \"e06c\", \"M224,192a16,16,0,1,0,16,16A16,16,0,0,0,224,192ZM466.5,83.68l-192-80A57.4,57.4,0,0,0,256.05,0a57.4,57.4,0,0,0-18.46,3.67l-192,80A47.93,47.93,0,0,0,16,128C16,326.5,130.5,463.72,237.5,508.32a48.09,48.09,0,0,0,36.91,0C360.09,472.61,496,349.3,496,128A48,48,0,0,0,466.5,83.68ZM384,256H371.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C306.47,313.09,272,327.37,272,355.88V368a16,16,0,0,1-32,0V355.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H128a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V112a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C329.09,189.53,343.37,224,371.88,224H384a16,16,0,0,1,0,32Zm-96,0a16,16,0,1,0,16,16A16,16,0,0,0,288,256Z\"]\n};\nvar faShip = {\n prefix: 'fas',\n iconName: 'ship',\n icon: [640, 512, [], \"f21a\", \"M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z\"]\n};\nvar faShippingFast = {\n prefix: 'fas',\n iconName: 'shipping-fast',\n icon: [640, 512, [], \"f48b\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faShoePrints = {\n prefix: 'fas',\n iconName: 'shoe-prints',\n icon: [640, 512, [], \"f54b\", \"M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z\"]\n};\nvar faShoppingBag = {\n prefix: 'fas',\n iconName: 'shopping-bag',\n icon: [448, 512, [], \"f290\", \"M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z\"]\n};\nvar faShoppingBasket = {\n prefix: 'fas',\n iconName: 'shopping-basket',\n icon: [576, 512, [], \"f291\", \"M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z\"]\n};\nvar faShoppingCart = {\n prefix: 'fas',\n iconName: 'shopping-cart',\n icon: [576, 512, [], \"f07a\", \"M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z\"]\n};\nvar faShower = {\n prefix: 'fas',\n iconName: 'shower',\n icon: [512, 512, [], \"f2cc\", \"M304,320a16,16,0,1,0,16,16A16,16,0,0,0,304,320Zm32-96a16,16,0,1,0,16,16A16,16,0,0,0,336,224Zm32,64a16,16,0,1,0-16-16A16,16,0,0,0,368,288Zm-32,32a16,16,0,1,0-16-16A16,16,0,0,0,336,320Zm-32-64a16,16,0,1,0,16,16A16,16,0,0,0,304,256Zm128-32a16,16,0,1,0-16-16A16,16,0,0,0,432,224Zm-48,16a16,16,0,1,0,16-16A16,16,0,0,0,384,240Zm-16-48a16,16,0,1,0,16,16A16,16,0,0,0,368,192Zm96,32a16,16,0,1,0,16,16A16,16,0,0,0,464,224Zm32-32a16,16,0,1,0,16,16A16,16,0,0,0,496,192Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,432,256Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,400,288Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,336,352Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,304,384Zm64-64a16,16,0,1,0,16,16A16,16,0,0,0,368,320Zm21.65-218.35-11.3-11.31a16,16,0,0,0-22.63,0L350.05,96A111.19,111.19,0,0,0,272,64c-19.24,0-37.08,5.3-52.9,13.85l-10-10A121.72,121.72,0,0,0,123.44,32C55.49,31.5,0,92.91,0,160.85V464a16,16,0,0,0,16,16H48a16,16,0,0,0,16-16V158.4c0-30.15,21-58.2,51-61.93a58.38,58.38,0,0,1,48.93,16.67l10,10C165.3,138.92,160,156.76,160,176a111.23,111.23,0,0,0,32,78.05l-5.66,5.67a16,16,0,0,0,0,22.62l11.3,11.31a16,16,0,0,0,22.63,0L389.65,124.28A16,16,0,0,0,389.65,101.65Z\"]\n};\nvar faShuttleVan = {\n prefix: 'fas',\n iconName: 'shuttle-van',\n icon: [640, 512, [], \"f5b6\", \"M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z\"]\n};\nvar faSign = {\n prefix: 'fas',\n iconName: 'sign',\n icon: [512, 512, [], \"f4d9\", \"M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z\"]\n};\nvar faSignInAlt = {\n prefix: 'fas',\n iconName: 'sign-in-alt',\n icon: [512, 512, [], \"f2f6\", \"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"]\n};\nvar faSignLanguage = {\n prefix: 'fas',\n iconName: 'sign-language',\n icon: [448, 512, [], \"f2a7\", \"M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z\"]\n};\nvar faSignOutAlt = {\n prefix: 'fas',\n iconName: 'sign-out-alt',\n icon: [512, 512, [], \"f2f5\", \"M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z\"]\n};\nvar faSignal = {\n prefix: 'fas',\n iconName: 'signal',\n icon: [640, 512, [], \"f012\", \"M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faSignature = {\n prefix: 'fas',\n iconName: 'signature',\n icon: [640, 512, [], \"f5b7\", \"M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z\"]\n};\nvar faSimCard = {\n prefix: 'fas',\n iconName: 'sim-card',\n icon: [384, 512, [], \"f7c4\", \"M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z\"]\n};\nvar faSink = {\n prefix: 'fas',\n iconName: 'sink',\n icon: [512, 512, [], \"e06d\", \"M32,416a96,96,0,0,0,96,96H384a96,96,0,0,0,96-96V384H32ZM496,288H400V256h64a16,16,0,0,0,16-16V224a16,16,0,0,0-16-16H384a32,32,0,0,0-32,32v48H288V96a32,32,0,0,1,64,0v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V96A96.16,96.16,0,0,0,300.87,1.86C255.29,10.71,224,53.36,224,99.79V288H160V240a32,32,0,0,0-32-32H48a16,16,0,0,0-16,16v16a16,16,0,0,0,16,16h64v32H16A16,16,0,0,0,0,304v32a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V304A16,16,0,0,0,496,288Z\"]\n};\nvar faSitemap = {\n prefix: 'fas',\n iconName: 'sitemap',\n icon: [640, 512, [], \"f0e8\", \"M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faSkating = {\n prefix: 'fas',\n iconName: 'skating',\n icon: [448, 512, [], \"f7c5\", \"M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nvar faSkiing = {\n prefix: 'fas',\n iconName: 'skiing',\n icon: [512, 512, [], \"f7c9\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z\"]\n};\nvar faSkiingNordic = {\n prefix: 'fas',\n iconName: 'skiing-nordic',\n icon: [576, 512, [], \"f7ca\", \"M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z\"]\n};\nvar faSkull = {\n prefix: 'fas',\n iconName: 'skull',\n icon: [512, 512, [], \"f54c\", \"M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z\"]\n};\nvar faSkullCrossbones = {\n prefix: 'fas',\n iconName: 'skull-crossbones',\n icon: [448, 512, [], \"f714\", \"M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z\"]\n};\nvar faSlash = {\n prefix: 'fas',\n iconName: 'slash',\n icon: [640, 512, [], \"f715\", \"M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z\"]\n};\nvar faSleigh = {\n prefix: 'fas',\n iconName: 'sleigh',\n icon: [640, 512, [], \"f7cc\", \"M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z\"]\n};\nvar faSlidersH = {\n prefix: 'fas',\n iconName: 'sliders-h',\n icon: [512, 512, [], \"f1de\", \"M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z\"]\n};\nvar faSmile = {\n prefix: 'fas',\n iconName: 'smile',\n icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z\"]\n};\nvar faSmileBeam = {\n prefix: 'fas',\n iconName: 'smile-beam',\n icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z\"]\n};\nvar faSmileWink = {\n prefix: 'fas',\n iconName: 'smile-wink',\n icon: [496, 512, [], \"f4da\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z\"]\n};\nvar faSmog = {\n prefix: 'fas',\n iconName: 'smog',\n icon: [640, 512, [], \"f75f\", \"M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z\"]\n};\nvar faSmoking = {\n prefix: 'fas',\n iconName: 'smoking',\n icon: [640, 512, [], \"f48d\", \"M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z\"]\n};\nvar faSmokingBan = {\n prefix: 'fas',\n iconName: 'smoking-ban',\n icon: [512, 512, [], \"f54d\", \"M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z\"]\n};\nvar faSms = {\n prefix: 'fas',\n iconName: 'sms',\n icon: [512, 512, [], \"f7cd\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z\"]\n};\nvar faSnowboarding = {\n prefix: 'fas',\n iconName: 'snowboarding',\n icon: [512, 512, [], \"f7ce\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z\"]\n};\nvar faSnowflake = {\n prefix: 'fas',\n iconName: 'snowflake',\n icon: [448, 512, [], \"f2dc\", \"M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z\"]\n};\nvar faSnowman = {\n prefix: 'fas',\n iconName: 'snowman',\n icon: [512, 512, [], \"f7d0\", \"M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faSnowplow = {\n prefix: 'fas',\n iconName: 'snowplow',\n icon: [640, 512, [], \"f7d2\", \"M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faSoap = {\n prefix: 'fas',\n iconName: 'soap',\n icon: [512, 512, [], \"e06e\", \"M416,192a95.42,95.42,0,0,1-30.94,70.21A95.8,95.8,0,0,1,352,448H160a96,96,0,0,1,0-192h88.91A95.3,95.3,0,0,1,224,192H96A96,96,0,0,0,0,288V416a96,96,0,0,0,96,96H416a96,96,0,0,0,96-96V288A96,96,0,0,0,416,192Zm-96,64a64,64,0,1,0-64-64A64,64,0,0,0,320,256ZM208,96a48,48,0,1,0-48-48A48,48,0,0,0,208,96ZM384,64a32,32,0,1,0-32-32A32,32,0,0,0,384,64ZM160,288a64,64,0,0,0,0,128H352a64,64,0,0,0,0-128Z\"]\n};\nvar faSocks = {\n prefix: 'fas',\n iconName: 'socks',\n icon: [512, 512, [], \"f696\", \"M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z\"]\n};\nvar faSolarPanel = {\n prefix: 'fas',\n iconName: 'solar-panel',\n icon: [640, 512, [], \"f5ba\", \"M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z\"]\n};\nvar faSort = {\n prefix: 'fas',\n iconName: 'sort',\n icon: [320, 512, [], \"f0dc\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z\"]\n};\nvar faSortAlphaDown = {\n prefix: 'fas',\n iconName: 'sort-alpha-down',\n icon: [448, 512, [], \"f15d\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z\"]\n};\nvar faSortAlphaDownAlt = {\n prefix: 'fas',\n iconName: 'sort-alpha-down-alt',\n icon: [448, 512, [], \"f881\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z\"]\n};\nvar faSortAlphaUp = {\n prefix: 'fas',\n iconName: 'sort-alpha-up',\n icon: [448, 512, [], \"f15e\", \"M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z\"]\n};\nvar faSortAlphaUpAlt = {\n prefix: 'fas',\n iconName: 'sort-alpha-up-alt',\n icon: [448, 512, [], \"f882\", \"M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z\"]\n};\nvar faSortAmountDown = {\n prefix: 'fas',\n iconName: 'sort-amount-down',\n icon: [512, 512, [], \"f160\", \"M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faSortAmountDownAlt = {\n prefix: 'fas',\n iconName: 'sort-amount-down-alt',\n icon: [512, 512, [], \"f884\", \"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z\"]\n};\nvar faSortAmountUp = {\n prefix: 'fas',\n iconName: 'sort-amount-up',\n icon: [512, 512, [], \"f161\", \"M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faSortAmountUpAlt = {\n prefix: 'fas',\n iconName: 'sort-amount-up-alt',\n icon: [512, 512, [], \"f885\", \"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z\"]\n};\nvar faSortDown = {\n prefix: 'fas',\n iconName: 'sort-down',\n icon: [320, 512, [], \"f0dd\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z\"]\n};\nvar faSortNumericDown = {\n prefix: 'fas',\n iconName: 'sort-numeric-down',\n icon: [448, 512, [], \"f162\", \"M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z\"]\n};\nvar faSortNumericDownAlt = {\n prefix: 'fas',\n iconName: 'sort-numeric-down-alt',\n icon: [448, 512, [], \"f886\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z\"]\n};\nvar faSortNumericUp = {\n prefix: 'fas',\n iconName: 'sort-numeric-up',\n icon: [448, 512, [], \"f163\", \"M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z\"]\n};\nvar faSortNumericUpAlt = {\n prefix: 'fas',\n iconName: 'sort-numeric-up-alt',\n icon: [448, 512, [], \"f887\", \"M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z\"]\n};\nvar faSortUp = {\n prefix: 'fas',\n iconName: 'sort-up',\n icon: [320, 512, [], \"f0de\", \"M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z\"]\n};\nvar faSpa = {\n prefix: 'fas',\n iconName: 'spa',\n icon: [576, 512, [], \"f5bb\", \"M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z\"]\n};\nvar faSpaceShuttle = {\n prefix: 'fas',\n iconName: 'space-shuttle',\n icon: [640, 512, [], \"f197\", \"M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z\"]\n};\nvar faSpellCheck = {\n prefix: 'fas',\n iconName: 'spell-check',\n icon: [576, 512, [], \"f891\", \"M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z\"]\n};\nvar faSpider = {\n prefix: 'fas',\n iconName: 'spider',\n icon: [576, 512, [], \"f717\", \"M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z\"]\n};\nvar faSpinner = {\n prefix: 'fas',\n iconName: 'spinner',\n icon: [512, 512, [], \"f110\", \"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"]\n};\nvar faSplotch = {\n prefix: 'fas',\n iconName: 'splotch',\n icon: [512, 512, [], \"f5bc\", \"M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z\"]\n};\nvar faSprayCan = {\n prefix: 'fas',\n iconName: 'spray-can',\n icon: [512, 512, [], \"f5bd\", \"M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faSquare = {\n prefix: 'fas',\n iconName: 'square',\n icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faSquareFull = {\n prefix: 'fas',\n iconName: 'square-full',\n icon: [512, 512, [], \"f45c\", \"M512 512H0V0h512v512z\"]\n};\nvar faSquareRootAlt = {\n prefix: 'fas',\n iconName: 'square-root-alt',\n icon: [576, 512, [], \"f698\", \"M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z\"]\n};\nvar faStamp = {\n prefix: 'fas',\n iconName: 'stamp',\n icon: [512, 512, [], \"f5bf\", \"M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z\"]\n};\nvar faStar = {\n prefix: 'fas',\n iconName: 'star',\n icon: [576, 512, [], \"f005\", \"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z\"]\n};\nvar faStarAndCrescent = {\n prefix: 'fas',\n iconName: 'star-and-crescent',\n icon: [512, 512, [], \"f699\", \"M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z\"]\n};\nvar faStarHalf = {\n prefix: 'fas',\n iconName: 'star-half',\n icon: [576, 512, [], \"f089\", \"M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z\"]\n};\nvar faStarHalfAlt = {\n prefix: 'fas',\n iconName: 'star-half-alt',\n icon: [536, 512, [], \"f5c0\", \"M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z\"]\n};\nvar faStarOfDavid = {\n prefix: 'fas',\n iconName: 'star-of-david',\n icon: [464, 512, [], \"f69a\", \"M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z\"]\n};\nvar faStarOfLife = {\n prefix: 'fas',\n iconName: 'star-of-life',\n icon: [480, 512, [], \"f621\", \"M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z\"]\n};\nvar faStepBackward = {\n prefix: 'fas',\n iconName: 'step-backward',\n icon: [448, 512, [], \"f048\", \"M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z\"]\n};\nvar faStepForward = {\n prefix: 'fas',\n iconName: 'step-forward',\n icon: [448, 512, [], \"f051\", \"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"]\n};\nvar faStethoscope = {\n prefix: 'fas',\n iconName: 'stethoscope',\n icon: [512, 512, [], \"f0f1\", \"M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faStickyNote = {\n prefix: 'fas',\n iconName: 'sticky-note',\n icon: [448, 512, [], \"f249\", \"M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z\"]\n};\nvar faStop = {\n prefix: 'fas',\n iconName: 'stop',\n icon: [448, 512, [], \"f04d\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faStopCircle = {\n prefix: 'fas',\n iconName: 'stop-circle',\n icon: [512, 512, [], \"f28d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faStopwatch = {\n prefix: 'fas',\n iconName: 'stopwatch',\n icon: [448, 512, [], \"f2f2\", \"M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faStopwatch20 = {\n prefix: 'fas',\n iconName: 'stopwatch-20',\n icon: [448, 512, [], \"e06f\", \"M398.5,190.91l.59-.61,26.59-26.58a16,16,0,0,0,0-22.63L403,118.41a16,16,0,0,0-22.63,0l-24.68,24.68A206.68,206.68,0,0,0,256,98.5V64h32a16,16,0,0,0,16-16V16A16,16,0,0,0,288,0H160a16.05,16.05,0,0,0-16,16V48a16.05,16.05,0,0,0,16,16h32V98.5A207.92,207.92,0,0,0,16.09,297.57C12.64,411.5,106.76,510.22,220.72,512,337.13,513.77,432,420,432,304A206,206,0,0,0,398.5,190.91ZM204.37,377.55a8.2,8.2,0,0,1,8.32,8.07v22.31a8.2,8.2,0,0,1-8.32,8.07H121.52a16.46,16.46,0,0,1-16.61-17.62c2.78-35.22,14.67-57.41,38.45-91.37,20.42-29.19,27.1-37.32,27.1-62.34,0-16.92-1.79-24.27-12.21-24.27-9.39,0-12.69,7.4-12.69,22.68v5.23a8.2,8.2,0,0,1-8.33,8.07h-24.9a8.2,8.2,0,0,1-8.33-8.07v-4.07c0-27.3,8.48-60.24,56.43-60.24,43,0,55.57,25.85,55.57,61,0,35.58-12.44,51.21-34.35,81.31-11.56,15-24.61,35.57-26.41,51.2ZM344,352.32c0,35.16-12.3,63.68-57.23,63.68C243.19,416,232,386.48,232,352.55V247.22c0-40.73,19.58-63.22,56.2-63.22C325,184,344,206.64,344,245.3ZM287.87,221.73c-9.41,0-13.23,7.5-13.23,20V357.68c0,13.11,3.59,20.59,13.23,20.59s13-8,13-21.27V241.06C300.89,229.79,297.88,221.73,287.87,221.73Z\"]\n};\nvar faStore = {\n prefix: 'fas',\n iconName: 'store',\n icon: [616, 512, [], \"f54e\", \"M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z\"]\n};\nvar faStoreAlt = {\n prefix: 'fas',\n iconName: 'store-alt',\n icon: [640, 512, [], \"f54f\", \"M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z\"]\n};\nvar faStoreAltSlash = {\n prefix: 'fas',\n iconName: 'store-alt-slash',\n icon: [640, 512, [], \"e070\", \"M17.89,123.62,5.51,142.2c-14.2,21.3,1,49.8,26.59,49.8h74.26ZM576,413.42V224H512V364L384,265V224H330.92l-41.4-32H608c25.5,0,40.7-28.5,26.59-49.8l-85.29-128A32.18,32.18,0,0,0,522.6,0H117.42A31.87,31.87,0,0,0,90.81,14.2l-10.66,16L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.81l19.64-25.26a16,16,0,0,0-2.81-22.45ZM320,384H128V224H64V480a32,32,0,0,0,32,32H352a32,32,0,0,0,32-32V406.59l-64-49.47Z\"]\n};\nvar faStoreSlash = {\n prefix: 'fas',\n iconName: 'store-slash',\n icon: [640, 512, [], \"e071\", \"M121.51,384V284.2a119.43,119.43,0,0,1-28,3.8,123.46,123.46,0,0,1-17.1-1.2,114.88,114.88,0,0,1-15.58-3.6V480c0,17.7,13.59,32,30.4,32H505.75L348.42,384Zm-28-128.09c25.1,0,47.29-10.72,64-27.24L24,120.05c-30.52,53.39-2.45,126.53,56.49,135A95.68,95.68,0,0,0,93.48,255.91ZM602.13,458.09,547.2,413.41V283.2a93.5,93.5,0,0,1-15.57,3.6,127.31,127.31,0,0,1-17.29,1.2,114.89,114.89,0,0,1-28-3.8v79.68L348.52,251.77a88.06,88.06,0,0,0,25.41,4.14c28.11,0,53-13,70.11-33.11,17.19,20.11,42.08,33.11,70.11,33.11a94.31,94.31,0,0,0,13-.91c59.66-8.41,88-82.8,56.06-136.4L521.55,15A30.1,30.1,0,0,0,495.81,0H112A30.11,30.11,0,0,0,86.27,15L76.88,30.78,43.19,3.38A14.68,14.68,0,0,0,21.86,6.19L3.2,31.45A16.58,16.58,0,0,0,5.87,53.91L564.81,508.63a14.69,14.69,0,0,0,21.33-2.82l18.66-25.26A16.58,16.58,0,0,0,602.13,458.09Z\"]\n};\nvar faStream = {\n prefix: 'fas',\n iconName: 'stream',\n icon: [512, 512, [], \"f550\", \"M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z\"]\n};\nvar faStreetView = {\n prefix: 'fas',\n iconName: 'street-view',\n icon: [512, 512, [], \"f21d\", \"M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z\"]\n};\nvar faStrikethrough = {\n prefix: 'fas',\n iconName: 'strikethrough',\n icon: [512, 512, [], \"f0cc\", \"M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z\"]\n};\nvar faStroopwafel = {\n prefix: 'fas',\n iconName: 'stroopwafel',\n icon: [512, 512, [], \"f551\", \"M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z\"]\n};\nvar faSubscript = {\n prefix: 'fas',\n iconName: 'subscript',\n icon: [512, 512, [], \"f12c\", \"M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z\"]\n};\nvar faSubway = {\n prefix: 'fas',\n iconName: 'subway',\n icon: [448, 512, [], \"f239\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faSuitcase = {\n prefix: 'fas',\n iconName: 'suitcase',\n icon: [512, 512, [], \"f0f2\", \"M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z\"]\n};\nvar faSuitcaseRolling = {\n prefix: 'fas',\n iconName: 'suitcase-rolling',\n icon: [384, 512, [], \"f5c1\", \"M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z\"]\n};\nvar faSun = {\n prefix: 'fas',\n iconName: 'sun',\n icon: [512, 512, [], \"f185\", \"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z\"]\n};\nvar faSuperscript = {\n prefix: 'fas',\n iconName: 'superscript',\n icon: [512, 512, [], \"f12b\", \"M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z\"]\n};\nvar faSurprise = {\n prefix: 'fas',\n iconName: 'surprise',\n icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faSwatchbook = {\n prefix: 'fas',\n iconName: 'swatchbook',\n icon: [512, 512, [], \"f5c3\", \"M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z\"]\n};\nvar faSwimmer = {\n prefix: 'fas',\n iconName: 'swimmer',\n icon: [640, 512, [], \"f5c4\", \"M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z\"]\n};\nvar faSwimmingPool = {\n prefix: 'fas',\n iconName: 'swimming-pool',\n icon: [640, 512, [], \"f5c5\", \"M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z\"]\n};\nvar faSynagogue = {\n prefix: 'fas',\n iconName: 'synagogue',\n icon: [640, 512, [], \"f69b\", \"M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z\"]\n};\nvar faSync = {\n prefix: 'fas',\n iconName: 'sync',\n icon: [512, 512, [], \"f021\", \"M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z\"]\n};\nvar faSyncAlt = {\n prefix: 'fas',\n iconName: 'sync-alt',\n icon: [512, 512, [], \"f2f1\", \"M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z\"]\n};\nvar faSyringe = {\n prefix: 'fas',\n iconName: 'syringe',\n icon: [512, 512, [], \"f48e\", \"M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z\"]\n};\nvar faTable = {\n prefix: 'fas',\n iconName: 'table',\n icon: [512, 512, [], \"f0ce\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z\"]\n};\nvar faTableTennis = {\n prefix: 'fas',\n iconName: 'table-tennis',\n icon: [512, 512, [], \"f45d\", \"M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z\"]\n};\nvar faTablet = {\n prefix: 'fas',\n iconName: 'tablet',\n icon: [448, 512, [], \"f10a\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faTabletAlt = {\n prefix: 'fas',\n iconName: 'tablet-alt',\n icon: [448, 512, [], \"f3fa\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faTablets = {\n prefix: 'fas',\n iconName: 'tablets',\n icon: [640, 512, [], \"f490\", \"M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z\"]\n};\nvar faTachometerAlt = {\n prefix: 'fas',\n iconName: 'tachometer-alt',\n icon: [576, 512, [], \"f3fd\", \"M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTag = {\n prefix: 'fas',\n iconName: 'tag',\n icon: [512, 512, [], \"f02b\", \"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faTags = {\n prefix: 'fas',\n iconName: 'tags',\n icon: [640, 512, [], \"f02c\", \"M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z\"]\n};\nvar faTape = {\n prefix: 'fas',\n iconName: 'tape',\n icon: [640, 512, [], \"f4db\", \"M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z\"]\n};\nvar faTasks = {\n prefix: 'fas',\n iconName: 'tasks',\n icon: [512, 512, [], \"f0ae\", \"M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faTaxi = {\n prefix: 'fas',\n iconName: 'taxi',\n icon: [512, 512, [], \"f1ba\", \"M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTeeth = {\n prefix: 'fas',\n iconName: 'teeth',\n icon: [640, 512, [], \"f62e\", \"M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z\"]\n};\nvar faTeethOpen = {\n prefix: 'fas',\n iconName: 'teeth-open',\n icon: [640, 512, [], \"f62f\", \"M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z\"]\n};\nvar faTemperatureHigh = {\n prefix: 'fas',\n iconName: 'temperature-high',\n icon: [512, 512, [], \"f769\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTemperatureLow = {\n prefix: 'fas',\n iconName: 'temperature-low',\n icon: [512, 512, [], \"f76b\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTenge = {\n prefix: 'fas',\n iconName: 'tenge',\n icon: [384, 512, [], \"f7d7\", \"M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z\"]\n};\nvar faTerminal = {\n prefix: 'fas',\n iconName: 'terminal',\n icon: [640, 512, [], \"f120\", \"M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z\"]\n};\nvar faTextHeight = {\n prefix: 'fas',\n iconName: 'text-height',\n icon: [576, 512, [], \"f034\", \"M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z\"]\n};\nvar faTextWidth = {\n prefix: 'fas',\n iconName: 'text-width',\n icon: [448, 512, [], \"f035\", \"M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z\"]\n};\nvar faTh = {\n prefix: 'fas',\n iconName: 'th',\n icon: [512, 512, [], \"f00a\", \"M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z\"]\n};\nvar faThLarge = {\n prefix: 'fas',\n iconName: 'th-large',\n icon: [512, 512, [], \"f009\", \"M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z\"]\n};\nvar faThList = {\n prefix: 'fas',\n iconName: 'th-list',\n icon: [512, 512, [], \"f00b\", \"M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z\"]\n};\nvar faTheaterMasks = {\n prefix: 'fas',\n iconName: 'theater-masks',\n icon: [640, 512, [], \"f630\", \"M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z\"]\n};\nvar faThermometer = {\n prefix: 'fas',\n iconName: 'thermometer',\n icon: [512, 512, [], \"f491\", \"M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z\"]\n};\nvar faThermometerEmpty = {\n prefix: 'fas',\n iconName: 'thermometer-empty',\n icon: [256, 512, [], \"f2cb\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerFull = {\n prefix: 'fas',\n iconName: 'thermometer-full',\n icon: [256, 512, [], \"f2c7\", \"M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z\"]\n};\nvar faThermometerHalf = {\n prefix: 'fas',\n iconName: 'thermometer-half',\n icon: [256, 512, [], \"f2c9\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerQuarter = {\n prefix: 'fas',\n iconName: 'thermometer-quarter',\n icon: [256, 512, [], \"f2ca\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerThreeQuarters = {\n prefix: 'fas',\n iconName: 'thermometer-three-quarters',\n icon: [256, 512, [], \"f2c8\", \"M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThumbsDown = {\n prefix: 'fas',\n iconName: 'thumbs-down',\n icon: [512, 512, [], \"f165\", \"M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z\"]\n};\nvar faThumbsUp = {\n prefix: 'fas',\n iconName: 'thumbs-up',\n icon: [512, 512, [], \"f164\", \"M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z\"]\n};\nvar faThumbtack = {\n prefix: 'fas',\n iconName: 'thumbtack',\n icon: [384, 512, [], \"f08d\", \"M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z\"]\n};\nvar faTicketAlt = {\n prefix: 'fas',\n iconName: 'ticket-alt',\n icon: [576, 512, [], \"f3ff\", \"M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z\"]\n};\nvar faTimes = {\n prefix: 'fas',\n iconName: 'times',\n icon: [352, 512, [], \"f00d\", \"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"]\n};\nvar faTimesCircle = {\n prefix: 'fas',\n iconName: 'times-circle',\n icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"]\n};\nvar faTint = {\n prefix: 'fas',\n iconName: 'tint',\n icon: [352, 512, [], \"f043\", \"M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faTintSlash = {\n prefix: 'fas',\n iconName: 'tint-slash',\n icon: [640, 512, [], \"f5c7\", \"M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z\"]\n};\nvar faTired = {\n prefix: 'fas',\n iconName: 'tired',\n icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z\"]\n};\nvar faToggleOff = {\n prefix: 'fas',\n iconName: 'toggle-off',\n icon: [576, 512, [], \"f204\", \"M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z\"]\n};\nvar faToggleOn = {\n prefix: 'fas',\n iconName: 'toggle-on',\n icon: [576, 512, [], \"f205\", \"M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z\"]\n};\nvar faToilet = {\n prefix: 'fas',\n iconName: 'toilet',\n icon: [384, 512, [], \"f7d8\", \"M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z\"]\n};\nvar faToiletPaper = {\n prefix: 'fas',\n iconName: 'toilet-paper',\n icon: [576, 512, [], \"f71e\", \"M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z\"]\n};\nvar faToiletPaperSlash = {\n prefix: 'fas',\n iconName: 'toilet-paper-slash',\n icon: [640, 512, [], \"e072\", \"M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z\"]\n};\nvar faToolbox = {\n prefix: 'fas',\n iconName: 'toolbox',\n icon: [512, 512, [], \"f552\", \"M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z\"]\n};\nvar faTools = {\n prefix: 'fas',\n iconName: 'tools',\n icon: [512, 512, [], \"f7d9\", \"M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z\"]\n};\nvar faTooth = {\n prefix: 'fas',\n iconName: 'tooth',\n icon: [448, 512, [], \"f5c9\", \"M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z\"]\n};\nvar faTorah = {\n prefix: 'fas',\n iconName: 'torah',\n icon: [640, 512, [], \"f6a0\", \"M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z\"]\n};\nvar faToriiGate = {\n prefix: 'fas',\n iconName: 'torii-gate',\n icon: [512, 512, [], \"f6a1\", \"M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z\"]\n};\nvar faTractor = {\n prefix: 'fas',\n iconName: 'tractor',\n icon: [640, 512, [], \"f722\", \"M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z\"]\n};\nvar faTrademark = {\n prefix: 'fas',\n iconName: 'trademark',\n icon: [640, 512, [], \"f25c\", \"M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z\"]\n};\nvar faTrafficLight = {\n prefix: 'fas',\n iconName: 'traffic-light',\n icon: [384, 512, [], \"f637\", \"M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTrailer = {\n prefix: 'fas',\n iconName: 'trailer',\n icon: [640, 512, [], \"e041\", \"M624,320H544V80a16,16,0,0,0-16-16H16A16,16,0,0,0,0,80V368a16,16,0,0,0,16,16H65.61c7.83-54.21,54-96,110.39-96s102.56,41.79,110.39,96H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM96,243.68a176.29,176.29,0,0,0-32,20.71V136a8,8,0,0,1,8-8H88a8,8,0,0,1,8,8Zm96-18.54c-5.31-.49-10.57-1.14-16-1.14s-10.69.65-16,1.14V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,39.25a176.29,176.29,0,0,0-32-20.71V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8ZM384,320H352V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,0H448V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm-304,0a80,80,0,1,0,80,80A80,80,0,0,0,176,320Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,176,432Z\"]\n};\nvar faTrain = {\n prefix: 'fas',\n iconName: 'train',\n icon: [448, 512, [], \"f238\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z\"]\n};\nvar faTram = {\n prefix: 'fas',\n iconName: 'tram',\n icon: [512, 512, [], \"f7da\", \"M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faTransgender = {\n prefix: 'fas',\n iconName: 'transgender',\n icon: [384, 512, [], \"f224\", \"M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTransgenderAlt = {\n prefix: 'fas',\n iconName: 'transgender-alt',\n icon: [480, 512, [], \"f225\", \"M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTrash = {\n prefix: 'fas',\n iconName: 'trash',\n icon: [448, 512, [], \"f1f8\", \"M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z\"]\n};\nvar faTrashAlt = {\n prefix: 'fas',\n iconName: 'trash-alt',\n icon: [448, 512, [], \"f2ed\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestore = {\n prefix: 'fas',\n iconName: 'trash-restore',\n icon: [448, 512, [], \"f829\", \"M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestoreAlt = {\n prefix: 'fas',\n iconName: 'trash-restore-alt',\n icon: [448, 512, [], \"f82a\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTree = {\n prefix: 'fas',\n iconName: 'tree',\n icon: [384, 512, [], \"f1bb\", \"M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z\"]\n};\nvar faTrophy = {\n prefix: 'fas',\n iconName: 'trophy',\n icon: [576, 512, [], \"f091\", \"M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z\"]\n};\nvar faTruck = {\n prefix: 'fas',\n iconName: 'truck',\n icon: [640, 512, [], \"f0d1\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faTruckLoading = {\n prefix: 'fas',\n iconName: 'truck-loading',\n icon: [640, 512, [], \"f4de\", \"M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faTruckMonster = {\n prefix: 'fas',\n iconName: 'truck-monster',\n icon: [640, 512, [], \"f63b\", \"M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTruckMoving = {\n prefix: 'fas',\n iconName: 'truck-moving',\n icon: [640, 512, [], \"f4df\", \"M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z\"]\n};\nvar faTruckPickup = {\n prefix: 'fas',\n iconName: 'truck-pickup',\n icon: [640, 512, [], \"f63c\", \"M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faTshirt = {\n prefix: 'fas',\n iconName: 'tshirt',\n icon: [640, 512, [], \"f553\", \"M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z\"]\n};\nvar faTty = {\n prefix: 'fas',\n iconName: 'tty',\n icon: [512, 512, [], \"f1e4\", \"M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faTv = {\n prefix: 'fas',\n iconName: 'tv',\n icon: [640, 512, [], \"f26c\", \"M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z\"]\n};\nvar faUmbrella = {\n prefix: 'fas',\n iconName: 'umbrella',\n icon: [576, 512, [], \"f0e9\", \"M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z\"]\n};\nvar faUmbrellaBeach = {\n prefix: 'fas',\n iconName: 'umbrella-beach',\n icon: [640, 512, [], \"f5ca\", \"M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z\"]\n};\nvar faUnderline = {\n prefix: 'fas',\n iconName: 'underline',\n icon: [448, 512, [], \"f0cd\", \"M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faUndo = {\n prefix: 'fas',\n iconName: 'undo',\n icon: [512, 512, [], \"f0e2\", \"M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z\"]\n};\nvar faUndoAlt = {\n prefix: 'fas',\n iconName: 'undo-alt',\n icon: [512, 512, [], \"f2ea\", \"M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z\"]\n};\nvar faUniversalAccess = {\n prefix: 'fas',\n iconName: 'universal-access',\n icon: [512, 512, [], \"f29a\", \"M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z\"]\n};\nvar faUniversity = {\n prefix: 'fas',\n iconName: 'university',\n icon: [512, 512, [], \"f19c\", \"M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z\"]\n};\nvar faUnlink = {\n prefix: 'fas',\n iconName: 'unlink',\n icon: [512, 512, [], \"f127\", \"M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z\"]\n};\nvar faUnlock = {\n prefix: 'fas',\n iconName: 'unlock',\n icon: [448, 512, [], \"f09c\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faUnlockAlt = {\n prefix: 'fas',\n iconName: 'unlock-alt',\n icon: [448, 512, [], \"f13e\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\"]\n};\nvar faUpload = {\n prefix: 'fas',\n iconName: 'upload',\n icon: [512, 512, [], \"f093\", \"M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faUser = {\n prefix: 'fas',\n iconName: 'user',\n icon: [448, 512, [], \"f007\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserAlt = {\n prefix: 'fas',\n iconName: 'user-alt',\n icon: [512, 512, [], \"f406\", \"M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z\"]\n};\nvar faUserAltSlash = {\n prefix: 'fas',\n iconName: 'user-alt-slash',\n icon: [640, 512, [], \"f4fa\", \"M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z\"]\n};\nvar faUserAstronaut = {\n prefix: 'fas',\n iconName: 'user-astronaut',\n icon: [448, 512, [], \"f4fb\", \"M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z\"]\n};\nvar faUserCheck = {\n prefix: 'fas',\n iconName: 'user-check',\n icon: [640, 512, [], \"f4fc\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"]\n};\nvar faUserCircle = {\n prefix: 'fas',\n iconName: 'user-circle',\n icon: [496, 512, [], \"f2bd\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z\"]\n};\nvar faUserClock = {\n prefix: 'fas',\n iconName: 'user-clock',\n icon: [640, 512, [], \"f4fd\", \"M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z\"]\n};\nvar faUserCog = {\n prefix: 'fas',\n iconName: 'user-cog',\n icon: [640, 512, [], \"f4fe\", \"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"]\n};\nvar faUserEdit = {\n prefix: 'fas',\n iconName: 'user-edit',\n icon: [640, 512, [], \"f4ff\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z\"]\n};\nvar faUserFriends = {\n prefix: 'fas',\n iconName: 'user-friends',\n icon: [640, 512, [], \"f500\", \"M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z\"]\n};\nvar faUserGraduate = {\n prefix: 'fas',\n iconName: 'user-graduate',\n icon: [448, 512, [], \"f501\", \"M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z\"]\n};\nvar faUserInjured = {\n prefix: 'fas',\n iconName: 'user-injured',\n icon: [448, 512, [], \"f728\", \"M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z\"]\n};\nvar faUserLock = {\n prefix: 'fas',\n iconName: 'user-lock',\n icon: [640, 512, [], \"f502\", \"M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z\"]\n};\nvar faUserMd = {\n prefix: 'fas',\n iconName: 'user-md',\n icon: [448, 512, [], \"f0f0\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z\"]\n};\nvar faUserMinus = {\n prefix: 'fas',\n iconName: 'user-minus',\n icon: [640, 512, [], \"f503\", \"M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserNinja = {\n prefix: 'fas',\n iconName: 'user-ninja',\n icon: [448, 512, [], \"f504\", \"M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z\"]\n};\nvar faUserNurse = {\n prefix: 'fas',\n iconName: 'user-nurse',\n icon: [448, 512, [], \"f82f\", \"M319.41,320,224,415.39,128.59,320C57.1,323.1,0,381.6,0,453.79A58.21,58.21,0,0,0,58.21,512H389.79A58.21,58.21,0,0,0,448,453.79C448,381.6,390.9,323.1,319.41,320ZM224,304A128,128,0,0,0,352,176V65.82a32,32,0,0,0-20.76-30L246.47,4.07a64,64,0,0,0-44.94,0L116.76,35.86A32,32,0,0,0,96,65.82V176A128,128,0,0,0,224,304ZM184,71.67a5,5,0,0,1,5-5h21.67V45a5,5,0,0,1,5-5h16.66a5,5,0,0,1,5,5V66.67H259a5,5,0,0,1,5,5V88.33a5,5,0,0,1-5,5H237.33V115a5,5,0,0,1-5,5H215.67a5,5,0,0,1-5-5V93.33H189a5,5,0,0,1-5-5ZM144,160H304v16a80,80,0,0,1-160,0Z\"]\n};\nvar faUserPlus = {\n prefix: 'fas',\n iconName: 'user-plus',\n icon: [640, 512, [], \"f234\", \"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserSecret = {\n prefix: 'fas',\n iconName: 'user-secret',\n icon: [448, 512, [], \"f21b\", \"M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z\"]\n};\nvar faUserShield = {\n prefix: 'fas',\n iconName: 'user-shield',\n icon: [640, 512, [], \"f505\", \"M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z\"]\n};\nvar faUserSlash = {\n prefix: 'fas',\n iconName: 'user-slash',\n icon: [640, 512, [], \"f506\", \"M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z\"]\n};\nvar faUserTag = {\n prefix: 'fas',\n iconName: 'user-tag',\n icon: [640, 512, [], \"f507\", \"M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z\"]\n};\nvar faUserTie = {\n prefix: 'fas',\n iconName: 'user-tie',\n icon: [448, 512, [], \"f508\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z\"]\n};\nvar faUserTimes = {\n prefix: 'fas',\n iconName: 'user-times',\n icon: [640, 512, [], \"f235\", \"M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUsers = {\n prefix: 'fas',\n iconName: 'users',\n icon: [640, 512, [], \"f0c0\", \"M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUsersCog = {\n prefix: 'fas',\n iconName: 'users-cog',\n icon: [640, 512, [], \"f509\", \"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUsersSlash = {\n prefix: 'fas',\n iconName: 'users-slash',\n icon: [640, 512, [], \"e073\", \"M132.65,212.32,36.21,137.78A63.4,63.4,0,0,0,32,160a63.84,63.84,0,0,0,100.65,52.32Zm40.44,62.28A63.79,63.79,0,0,0,128,256H64A64.06,64.06,0,0,0,0,320v32a32,32,0,0,0,32,32H97.91A146.62,146.62,0,0,1,173.09,274.6ZM544,224a64,64,0,1,0-64-64A64.06,64.06,0,0,0,544,224ZM500.56,355.11a114.24,114.24,0,0,0-84.47-65.28L361,247.23c41.46-16.3,71-55.92,71-103.23A111.93,111.93,0,0,0,320,32c-57.14,0-103.69,42.83-110.6,98.08L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM128,403.21V432a48,48,0,0,0,48,48H464a47.45,47.45,0,0,0,12.57-1.87L232,289.13C173.74,294.83,128,343.42,128,403.21ZM576,256H512a63.79,63.79,0,0,0-45.09,18.6A146.29,146.29,0,0,1,542,384h66a32,32,0,0,0,32-32V320A64.06,64.06,0,0,0,576,256Z\"]\n};\nvar faUtensilSpoon = {\n prefix: 'fas',\n iconName: 'utensil-spoon',\n icon: [512, 512, [], \"f2e5\", \"M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z\"]\n};\nvar faUtensils = {\n prefix: 'fas',\n iconName: 'utensils',\n icon: [416, 512, [], \"f2e7\", \"M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z\"]\n};\nvar faVectorSquare = {\n prefix: 'fas',\n iconName: 'vector-square',\n icon: [512, 512, [], \"f5cb\", \"M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z\"]\n};\nvar faVenus = {\n prefix: 'fas',\n iconName: 'venus',\n icon: [288, 512, [], \"f221\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faVenusDouble = {\n prefix: 'fas',\n iconName: 'venus-double',\n icon: [512, 512, [], \"f226\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z\"]\n};\nvar faVenusMars = {\n prefix: 'fas',\n iconName: 'venus-mars',\n icon: [576, 512, [], \"f228\", \"M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faVest = {\n prefix: 'fas',\n iconName: 'vest',\n icon: [448, 512, [], \"e085\", \"M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a24.021,24.021,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A24.021,24.021,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.564A151.518,151.518,0,0,0,224,86.234a151.55,151.55,0,0,0,73.812-19.672L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM131.312,371.312l-48,48a16,16,0,0,1-22.624-22.624l48-48a16,16,0,0,1,22.624,22.624Zm256,48a15.992,15.992,0,0,1-22.624,0l-48-48a16,16,0,0,1,22.624-22.624l48,48A15.993,15.993,0,0,1,387.312,419.312Z\"]\n};\nvar faVestPatches = {\n prefix: 'fas',\n iconName: 'vest-patches',\n icon: [448, 512, [], \"e086\", \"M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a23.982,23.982,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A23.982,23.982,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.561A151.579,151.579,0,0,0,224,86.234a151.565,151.565,0,0,0,73.811-19.668L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM63.5,272.484a12.01,12.01,0,0,1,17-16.968l15.5,15.5,15.5-15.5a12.01,12.01,0,0,1,17,16.968L112.984,288,128.5,303.516a12.01,12.01,0,0,1-17,16.968L96,304.984l-15.5,15.5a12.01,12.01,0,0,1-17-16.968L79.016,288ZM96,456a40,40,0,1,1,40-40A40,40,0,0,1,96,456ZM359.227,335.785,310.7,336a6.671,6.671,0,0,1-6.7-6.7l.215-48.574A24.987,24.987,0,0,1,331.43,256.1c12.789,1.162,22.129,12.619,22.056,25.419l-.037,5.057,5.051-.037c12.826-.035,24.236,9.275,25.4,22.076A24.948,24.948,0,0,1,359.227,335.785Z\"]\n};\nvar faVial = {\n prefix: 'fas',\n iconName: 'vial',\n icon: [480, 512, [], \"f492\", \"M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z\"]\n};\nvar faVials = {\n prefix: 'fas',\n iconName: 'vials',\n icon: [640, 512, [], \"f493\", \"M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z\"]\n};\nvar faVideo = {\n prefix: 'fas',\n iconName: 'video',\n icon: [576, 512, [], \"f03d\", \"M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z\"]\n};\nvar faVideoSlash = {\n prefix: 'fas',\n iconName: 'video-slash',\n icon: [640, 512, [], \"f4e2\", \"M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z\"]\n};\nvar faVihara = {\n prefix: 'fas',\n iconName: 'vihara',\n icon: [640, 512, [], \"f6a7\", \"M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z\"]\n};\nvar faVirus = {\n prefix: 'fas',\n iconName: 'virus',\n icon: [512, 512, [], \"e074\", \"M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z\"]\n};\nvar faVirusSlash = {\n prefix: 'fas',\n iconName: 'virus-slash',\n icon: [640, 512, [], \"e075\", \"M114,227.6H92.4C76.7,227.6,64,240.3,64,256s12.7,28.4,28.4,28.4H114c50.7,0,76.1,61.3,40.2,97.1L139,396.8 c-11.5,10.7-12.2,28.7-1.6,40.2s28.7,12.2,40.2,1.6c0.5-0.5,1.1-1,1.6-1.6l15.2-15.2c35.8-35.8,97.1-10.5,97.1,40.2v21.5 c0,15.7,12.8,28.4,28.5,28.4c15.7,0,28.4-12.7,28.4-28.4V462c0-26.6,17-45.9,38.2-53.4l-244.5-189 C133.7,224.7,123.9,227.5,114,227.6z M617,505.8l19.6-25.3c5.4-7,4.2-17-2.8-22.5L470.6,332c4.2-25.4,24.9-47.5,55.4-47.5h21.5 c15.7,0,28.4-12.7,28.4-28.4s-12.7-28.4-28.4-28.4H526c-50.7,0-76.1-61.3-40.2-97.1l15.2-15.3c10.7-11.5,10-29.5-1.6-40.2 c-10.9-10.1-27.7-10.1-38.6,0l-15.2,15.2c-35.8,35.8-97.1,10.5-97.1-40.2V28.5C348.4,12.7,335.7,0,320,0 c-15.7,0-28.4,12.7-28.4,28.4V50c0,50.7-61.3,76.1-97.1,40.2L179.2,75c-11.1-11.1-29.4-10.6-40.5,0.5L45.5,3.4 c-7-5.4-17-4.2-22.5,2.8L3.4,31.5c-5.4,7-4.2,17,2.8,22.5l588.4,454.7C601.5,514.1,611.6,512.8,617,505.8z M335.4,227.5l-62.9-48.6 c4.9-1.8,10.2-2.8,15.4-2.9c26.5,0,48,21.5,48,48C336,225.2,335.5,226.3,335.4,227.5z\"]\n};\nvar faViruses = {\n prefix: 'fas',\n iconName: 'viruses',\n icon: [640, 512, [], \"e076\", \"M624,352H611.88c-28.51,0-42.79-34.47-22.63-54.63l8.58-8.57a16,16,0,1,0-22.63-22.63l-8.57,8.58C546.47,294.91,512,280.63,512,252.12V240a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.57c20.16,20.16,5.88,54.63-22.63,54.63H368a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.57a16,16,0,1,0,22.63,22.63l8.57-8.58c20.16-20.16,54.63-5.88,54.63,22.63V496a16,16,0,0,0,32,0V483.88c0-28.51,34.47-42.79,54.63-22.63l8.57,8.58a16,16,0,1,0,22.63-22.63l-8.58-8.57C569.09,418.47,583.37,384,611.88,384H624a16,16,0,0,0,0-32ZM480,384a32,32,0,1,1,32-32A32,32,0,0,1,480,384ZM346.51,213.33h16.16a21.33,21.33,0,0,0,0-42.66H346.51c-38,0-57.05-46-30.17-72.84l11.43-11.44A21.33,21.33,0,0,0,297.6,56.23L286.17,67.66c-26.88,26.88-72.84,7.85-72.84-30.17V21.33a21.33,21.33,0,0,0-42.66,0V37.49c0,38-46,57.05-72.84,30.17L86.4,56.23A21.33,21.33,0,0,0,56.23,86.39L67.66,97.83c26.88,26.88,7.85,72.84-30.17,72.84H21.33a21.33,21.33,0,0,0,0,42.66H37.49c38,0,57.05,46,30.17,72.84L56.23,297.6A21.33,21.33,0,1,0,86.4,327.77l11.43-11.43c26.88-26.88,72.84-7.85,72.84,30.17v16.16a21.33,21.33,0,0,0,42.66,0V346.51c0-38,46-57.05,72.84-30.17l11.43,11.43a21.33,21.33,0,0,0,30.17-30.17l-11.43-11.43C289.46,259.29,308.49,213.33,346.51,213.33ZM160,192a32,32,0,1,1,32-32A32,32,0,0,1,160,192Zm80,32a16,16,0,1,1,16-16A16,16,0,0,1,240,224Z\"]\n};\nvar faVoicemail = {\n prefix: 'fas',\n iconName: 'voicemail',\n icon: [640, 512, [], \"f897\", \"M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z\"]\n};\nvar faVolleyballBall = {\n prefix: 'fas',\n iconName: 'volleyball-ball',\n icon: [512, 512, [], \"f45f\", \"M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z\"]\n};\nvar faVolumeDown = {\n prefix: 'fas',\n iconName: 'volume-down',\n icon: [384, 512, [], \"f027\", \"M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z\"]\n};\nvar faVolumeMute = {\n prefix: 'fas',\n iconName: 'volume-mute',\n icon: [512, 512, [], \"f6a9\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z\"]\n};\nvar faVolumeOff = {\n prefix: 'fas',\n iconName: 'volume-off',\n icon: [256, 512, [], \"f026\", \"M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z\"]\n};\nvar faVolumeUp = {\n prefix: 'fas',\n iconName: 'volume-up',\n icon: [576, 512, [], \"f028\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z\"]\n};\nvar faVoteYea = {\n prefix: 'fas',\n iconName: 'vote-yea',\n icon: [640, 512, [], \"f772\", \"M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z\"]\n};\nvar faVrCardboard = {\n prefix: 'fas',\n iconName: 'vr-cardboard',\n icon: [640, 512, [], \"f729\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z\"]\n};\nvar faWalking = {\n prefix: 'fas',\n iconName: 'walking',\n icon: [320, 512, [], \"f554\", \"M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z\"]\n};\nvar faWallet = {\n prefix: 'fas',\n iconName: 'wallet',\n icon: [512, 512, [], \"f555\", \"M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faWarehouse = {\n prefix: 'fas',\n iconName: 'warehouse',\n icon: [640, 512, [], \"f494\", \"M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z\"]\n};\nvar faWater = {\n prefix: 'fas',\n iconName: 'water',\n icon: [576, 512, [], \"f773\", \"M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z\"]\n};\nvar faWaveSquare = {\n prefix: 'fas',\n iconName: 'wave-square',\n icon: [640, 512, [], \"f83e\", \"M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z\"]\n};\nvar faWeight = {\n prefix: 'fas',\n iconName: 'weight',\n icon: [512, 512, [], \"f496\", \"M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z\"]\n};\nvar faWeightHanging = {\n prefix: 'fas',\n iconName: 'weight-hanging',\n icon: [512, 512, [], \"f5cd\", \"M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faWheelchair = {\n prefix: 'fas',\n iconName: 'wheelchair',\n icon: [512, 512, [], \"f193\", \"M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z\"]\n};\nvar faWifi = {\n prefix: 'fas',\n iconName: 'wifi',\n icon: [640, 512, [], \"f1eb\", \"M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z\"]\n};\nvar faWind = {\n prefix: 'fas',\n iconName: 'wind',\n icon: [512, 512, [], \"f72e\", \"M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z\"]\n};\nvar faWindowClose = {\n prefix: 'fas',\n iconName: 'window-close',\n icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z\"]\n};\nvar faWindowMaximize = {\n prefix: 'fas',\n iconName: 'window-maximize',\n icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z\"]\n};\nvar faWindowMinimize = {\n prefix: 'fas',\n iconName: 'window-minimize',\n icon: [512, 512, [], \"f2d1\", \"M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z\"]\n};\nvar faWindowRestore = {\n prefix: 'fas',\n iconName: 'window-restore',\n icon: [512, 512, [], \"f2d2\", \"M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z\"]\n};\nvar faWineBottle = {\n prefix: 'fas',\n iconName: 'wine-bottle',\n icon: [512, 512, [], \"f72f\", \"M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z\"]\n};\nvar faWineGlass = {\n prefix: 'fas',\n iconName: 'wine-glass',\n icon: [288, 512, [], \"f4e3\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z\"]\n};\nvar faWineGlassAlt = {\n prefix: 'fas',\n iconName: 'wine-glass-alt',\n icon: [288, 512, [], \"f5ce\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z\"]\n};\nvar faWonSign = {\n prefix: 'fas',\n iconName: 'won-sign',\n icon: [576, 512, [], \"f159\", \"M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z\"]\n};\nvar faWrench = {\n prefix: 'fas',\n iconName: 'wrench',\n icon: [512, 512, [], \"f0ad\", \"M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faXRay = {\n prefix: 'fas',\n iconName: 'x-ray',\n icon: [640, 512, [], \"f497\", \"M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faYenSign = {\n prefix: 'fas',\n iconName: 'yen-sign',\n icon: [384, 512, [], \"f157\", \"M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z\"]\n};\nvar faYinYang = {\n prefix: 'fas',\n iconName: 'yin-yang',\n icon: [496, 512, [], \"f6ad\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar _iconsCache = {\n faAd: faAd,\n faAddressBook: faAddressBook,\n faAddressCard: faAddressCard,\n faAdjust: faAdjust,\n faAirFreshener: faAirFreshener,\n faAlignCenter: faAlignCenter,\n faAlignJustify: faAlignJustify,\n faAlignLeft: faAlignLeft,\n faAlignRight: faAlignRight,\n faAllergies: faAllergies,\n faAmbulance: faAmbulance,\n faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting,\n faAnchor: faAnchor,\n faAngleDoubleDown: faAngleDoubleDown,\n faAngleDoubleLeft: faAngleDoubleLeft,\n faAngleDoubleRight: faAngleDoubleRight,\n faAngleDoubleUp: faAngleDoubleUp,\n faAngleDown: faAngleDown,\n faAngleLeft: faAngleLeft,\n faAngleRight: faAngleRight,\n faAngleUp: faAngleUp,\n faAngry: faAngry,\n faAnkh: faAnkh,\n faAppleAlt: faAppleAlt,\n faArchive: faArchive,\n faArchway: faArchway,\n faArrowAltCircleDown: faArrowAltCircleDown,\n faArrowAltCircleLeft: faArrowAltCircleLeft,\n faArrowAltCircleRight: faArrowAltCircleRight,\n faArrowAltCircleUp: faArrowAltCircleUp,\n faArrowCircleDown: faArrowCircleDown,\n faArrowCircleLeft: faArrowCircleLeft,\n faArrowCircleRight: faArrowCircleRight,\n faArrowCircleUp: faArrowCircleUp,\n faArrowDown: faArrowDown,\n faArrowLeft: faArrowLeft,\n faArrowRight: faArrowRight,\n faArrowUp: faArrowUp,\n faArrowsAlt: faArrowsAlt,\n faArrowsAltH: faArrowsAltH,\n faArrowsAltV: faArrowsAltV,\n faAssistiveListeningSystems: faAssistiveListeningSystems,\n faAsterisk: faAsterisk,\n faAt: faAt,\n faAtlas: faAtlas,\n faAtom: faAtom,\n faAudioDescription: faAudioDescription,\n faAward: faAward,\n faBaby: faBaby,\n faBabyCarriage: faBabyCarriage,\n faBackspace: faBackspace,\n faBackward: faBackward,\n faBacon: faBacon,\n faBacteria: faBacteria,\n faBacterium: faBacterium,\n faBahai: faBahai,\n faBalanceScale: faBalanceScale,\n faBalanceScaleLeft: faBalanceScaleLeft,\n faBalanceScaleRight: faBalanceScaleRight,\n faBan: faBan,\n faBandAid: faBandAid,\n faBarcode: faBarcode,\n faBars: faBars,\n faBaseballBall: faBaseballBall,\n faBasketballBall: faBasketballBall,\n faBath: faBath,\n faBatteryEmpty: faBatteryEmpty,\n faBatteryFull: faBatteryFull,\n faBatteryHalf: faBatteryHalf,\n faBatteryQuarter: faBatteryQuarter,\n faBatteryThreeQuarters: faBatteryThreeQuarters,\n faBed: faBed,\n faBeer: faBeer,\n faBell: faBell,\n faBellSlash: faBellSlash,\n faBezierCurve: faBezierCurve,\n faBible: faBible,\n faBicycle: faBicycle,\n faBiking: faBiking,\n faBinoculars: faBinoculars,\n faBiohazard: faBiohazard,\n faBirthdayCake: faBirthdayCake,\n faBlender: faBlender,\n faBlenderPhone: faBlenderPhone,\n faBlind: faBlind,\n faBlog: faBlog,\n faBold: faBold,\n faBolt: faBolt,\n faBomb: faBomb,\n faBone: faBone,\n faBong: faBong,\n faBook: faBook,\n faBookDead: faBookDead,\n faBookMedical: faBookMedical,\n faBookOpen: faBookOpen,\n faBookReader: faBookReader,\n faBookmark: faBookmark,\n faBorderAll: faBorderAll,\n faBorderNone: faBorderNone,\n faBorderStyle: faBorderStyle,\n faBowlingBall: faBowlingBall,\n faBox: faBox,\n faBoxOpen: faBoxOpen,\n faBoxTissue: faBoxTissue,\n faBoxes: faBoxes,\n faBraille: faBraille,\n faBrain: faBrain,\n faBreadSlice: faBreadSlice,\n faBriefcase: faBriefcase,\n faBriefcaseMedical: faBriefcaseMedical,\n faBroadcastTower: faBroadcastTower,\n faBroom: faBroom,\n faBrush: faBrush,\n faBug: faBug,\n faBuilding: faBuilding,\n faBullhorn: faBullhorn,\n faBullseye: faBullseye,\n faBurn: faBurn,\n faBus: faBus,\n faBusAlt: faBusAlt,\n faBusinessTime: faBusinessTime,\n faCalculator: faCalculator,\n faCalendar: faCalendar,\n faCalendarAlt: faCalendarAlt,\n faCalendarCheck: faCalendarCheck,\n faCalendarDay: faCalendarDay,\n faCalendarMinus: faCalendarMinus,\n faCalendarPlus: faCalendarPlus,\n faCalendarTimes: faCalendarTimes,\n faCalendarWeek: faCalendarWeek,\n faCamera: faCamera,\n faCameraRetro: faCameraRetro,\n faCampground: faCampground,\n faCandyCane: faCandyCane,\n faCannabis: faCannabis,\n faCapsules: faCapsules,\n faCar: faCar,\n faCarAlt: faCarAlt,\n faCarBattery: faCarBattery,\n faCarCrash: faCarCrash,\n faCarSide: faCarSide,\n faCaravan: faCaravan,\n faCaretDown: faCaretDown,\n faCaretLeft: faCaretLeft,\n faCaretRight: faCaretRight,\n faCaretSquareDown: faCaretSquareDown,\n faCaretSquareLeft: faCaretSquareLeft,\n faCaretSquareRight: faCaretSquareRight,\n faCaretSquareUp: faCaretSquareUp,\n faCaretUp: faCaretUp,\n faCarrot: faCarrot,\n faCartArrowDown: faCartArrowDown,\n faCartPlus: faCartPlus,\n faCashRegister: faCashRegister,\n faCat: faCat,\n faCertificate: faCertificate,\n faChair: faChair,\n faChalkboard: faChalkboard,\n faChalkboardTeacher: faChalkboardTeacher,\n faChargingStation: faChargingStation,\n faChartArea: faChartArea,\n faChartBar: faChartBar,\n faChartLine: faChartLine,\n faChartPie: faChartPie,\n faCheck: faCheck,\n faCheckCircle: faCheckCircle,\n faCheckDouble: faCheckDouble,\n faCheckSquare: faCheckSquare,\n faCheese: faCheese,\n faChess: faChess,\n faChessBishop: faChessBishop,\n faChessBoard: faChessBoard,\n faChessKing: faChessKing,\n faChessKnight: faChessKnight,\n faChessPawn: faChessPawn,\n faChessQueen: faChessQueen,\n faChessRook: faChessRook,\n faChevronCircleDown: faChevronCircleDown,\n faChevronCircleLeft: faChevronCircleLeft,\n faChevronCircleRight: faChevronCircleRight,\n faChevronCircleUp: faChevronCircleUp,\n faChevronDown: faChevronDown,\n faChevronLeft: faChevronLeft,\n faChevronRight: faChevronRight,\n faChevronUp: faChevronUp,\n faChild: faChild,\n faChurch: faChurch,\n faCircle: faCircle,\n faCircleNotch: faCircleNotch,\n faCity: faCity,\n faClinicMedical: faClinicMedical,\n faClipboard: faClipboard,\n faClipboardCheck: faClipboardCheck,\n faClipboardList: faClipboardList,\n faClock: faClock,\n faClone: faClone,\n faClosedCaptioning: faClosedCaptioning,\n faCloud: faCloud,\n faCloudDownloadAlt: faCloudDownloadAlt,\n faCloudMeatball: faCloudMeatball,\n faCloudMoon: faCloudMoon,\n faCloudMoonRain: faCloudMoonRain,\n faCloudRain: faCloudRain,\n faCloudShowersHeavy: faCloudShowersHeavy,\n faCloudSun: faCloudSun,\n faCloudSunRain: faCloudSunRain,\n faCloudUploadAlt: faCloudUploadAlt,\n faCocktail: faCocktail,\n faCode: faCode,\n faCodeBranch: faCodeBranch,\n faCoffee: faCoffee,\n faCog: faCog,\n faCogs: faCogs,\n faCoins: faCoins,\n faColumns: faColumns,\n faComment: faComment,\n faCommentAlt: faCommentAlt,\n faCommentDollar: faCommentDollar,\n faCommentDots: faCommentDots,\n faCommentMedical: faCommentMedical,\n faCommentSlash: faCommentSlash,\n faComments: faComments,\n faCommentsDollar: faCommentsDollar,\n faCompactDisc: faCompactDisc,\n faCompass: faCompass,\n faCompress: faCompress,\n faCompressAlt: faCompressAlt,\n faCompressArrowsAlt: faCompressArrowsAlt,\n faConciergeBell: faConciergeBell,\n faCookie: faCookie,\n faCookieBite: faCookieBite,\n faCopy: faCopy,\n faCopyright: faCopyright,\n faCouch: faCouch,\n faCreditCard: faCreditCard,\n faCrop: faCrop,\n faCropAlt: faCropAlt,\n faCross: faCross,\n faCrosshairs: faCrosshairs,\n faCrow: faCrow,\n faCrown: faCrown,\n faCrutch: faCrutch,\n faCube: faCube,\n faCubes: faCubes,\n faCut: faCut,\n faDatabase: faDatabase,\n faDeaf: faDeaf,\n faDemocrat: faDemocrat,\n faDesktop: faDesktop,\n faDharmachakra: faDharmachakra,\n faDiagnoses: faDiagnoses,\n faDice: faDice,\n faDiceD20: faDiceD20,\n faDiceD6: faDiceD6,\n faDiceFive: faDiceFive,\n faDiceFour: faDiceFour,\n faDiceOne: faDiceOne,\n faDiceSix: faDiceSix,\n faDiceThree: faDiceThree,\n faDiceTwo: faDiceTwo,\n faDigitalTachograph: faDigitalTachograph,\n faDirections: faDirections,\n faDisease: faDisease,\n faDivide: faDivide,\n faDizzy: faDizzy,\n faDna: faDna,\n faDog: faDog,\n faDollarSign: faDollarSign,\n faDolly: faDolly,\n faDollyFlatbed: faDollyFlatbed,\n faDonate: faDonate,\n faDoorClosed: faDoorClosed,\n faDoorOpen: faDoorOpen,\n faDotCircle: faDotCircle,\n faDove: faDove,\n faDownload: faDownload,\n faDraftingCompass: faDraftingCompass,\n faDragon: faDragon,\n faDrawPolygon: faDrawPolygon,\n faDrum: faDrum,\n faDrumSteelpan: faDrumSteelpan,\n faDrumstickBite: faDrumstickBite,\n faDumbbell: faDumbbell,\n faDumpster: faDumpster,\n faDumpsterFire: faDumpsterFire,\n faDungeon: faDungeon,\n faEdit: faEdit,\n faEgg: faEgg,\n faEject: faEject,\n faEllipsisH: faEllipsisH,\n faEllipsisV: faEllipsisV,\n faEnvelope: faEnvelope,\n faEnvelopeOpen: faEnvelopeOpen,\n faEnvelopeOpenText: faEnvelopeOpenText,\n faEnvelopeSquare: faEnvelopeSquare,\n faEquals: faEquals,\n faEraser: faEraser,\n faEthernet: faEthernet,\n faEuroSign: faEuroSign,\n faExchangeAlt: faExchangeAlt,\n faExclamation: faExclamation,\n faExclamationCircle: faExclamationCircle,\n faExclamationTriangle: faExclamationTriangle,\n faExpand: faExpand,\n faExpandAlt: faExpandAlt,\n faExpandArrowsAlt: faExpandArrowsAlt,\n faExternalLinkAlt: faExternalLinkAlt,\n faExternalLinkSquareAlt: faExternalLinkSquareAlt,\n faEye: faEye,\n faEyeDropper: faEyeDropper,\n faEyeSlash: faEyeSlash,\n faFan: faFan,\n faFastBackward: faFastBackward,\n faFastForward: faFastForward,\n faFaucet: faFaucet,\n faFax: faFax,\n faFeather: faFeather,\n faFeatherAlt: faFeatherAlt,\n faFemale: faFemale,\n faFighterJet: faFighterJet,\n faFile: faFile,\n faFileAlt: faFileAlt,\n faFileArchive: faFileArchive,\n faFileAudio: faFileAudio,\n faFileCode: faFileCode,\n faFileContract: faFileContract,\n faFileCsv: faFileCsv,\n faFileDownload: faFileDownload,\n faFileExcel: faFileExcel,\n faFileExport: faFileExport,\n faFileImage: faFileImage,\n faFileImport: faFileImport,\n faFileInvoice: faFileInvoice,\n faFileInvoiceDollar: faFileInvoiceDollar,\n faFileMedical: faFileMedical,\n faFileMedicalAlt: faFileMedicalAlt,\n faFilePdf: faFilePdf,\n faFilePowerpoint: faFilePowerpoint,\n faFilePrescription: faFilePrescription,\n faFileSignature: faFileSignature,\n faFileUpload: faFileUpload,\n faFileVideo: faFileVideo,\n faFileWord: faFileWord,\n faFill: faFill,\n faFillDrip: faFillDrip,\n faFilm: faFilm,\n faFilter: faFilter,\n faFingerprint: faFingerprint,\n faFire: faFire,\n faFireAlt: faFireAlt,\n faFireExtinguisher: faFireExtinguisher,\n faFirstAid: faFirstAid,\n faFish: faFish,\n faFistRaised: faFistRaised,\n faFlag: faFlag,\n faFlagCheckered: faFlagCheckered,\n faFlagUsa: faFlagUsa,\n faFlask: faFlask,\n faFlushed: faFlushed,\n faFolder: faFolder,\n faFolderMinus: faFolderMinus,\n faFolderOpen: faFolderOpen,\n faFolderPlus: faFolderPlus,\n faFont: faFont,\n faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n faFootballBall: faFootballBall,\n faForward: faForward,\n faFrog: faFrog,\n faFrown: faFrown,\n faFrownOpen: faFrownOpen,\n faFunnelDollar: faFunnelDollar,\n faFutbol: faFutbol,\n faGamepad: faGamepad,\n faGasPump: faGasPump,\n faGavel: faGavel,\n faGem: faGem,\n faGenderless: faGenderless,\n faGhost: faGhost,\n faGift: faGift,\n faGifts: faGifts,\n faGlassCheers: faGlassCheers,\n faGlassMartini: faGlassMartini,\n faGlassMartiniAlt: faGlassMartiniAlt,\n faGlassWhiskey: faGlassWhiskey,\n faGlasses: faGlasses,\n faGlobe: faGlobe,\n faGlobeAfrica: faGlobeAfrica,\n faGlobeAmericas: faGlobeAmericas,\n faGlobeAsia: faGlobeAsia,\n faGlobeEurope: faGlobeEurope,\n faGolfBall: faGolfBall,\n faGopuram: faGopuram,\n faGraduationCap: faGraduationCap,\n faGreaterThan: faGreaterThan,\n faGreaterThanEqual: faGreaterThanEqual,\n faGrimace: faGrimace,\n faGrin: faGrin,\n faGrinAlt: faGrinAlt,\n faGrinBeam: faGrinBeam,\n faGrinBeamSweat: faGrinBeamSweat,\n faGrinHearts: faGrinHearts,\n faGrinSquint: faGrinSquint,\n faGrinSquintTears: faGrinSquintTears,\n faGrinStars: faGrinStars,\n faGrinTears: faGrinTears,\n faGrinTongue: faGrinTongue,\n faGrinTongueSquint: faGrinTongueSquint,\n faGrinTongueWink: faGrinTongueWink,\n faGrinWink: faGrinWink,\n faGripHorizontal: faGripHorizontal,\n faGripLines: faGripLines,\n faGripLinesVertical: faGripLinesVertical,\n faGripVertical: faGripVertical,\n faGuitar: faGuitar,\n faHSquare: faHSquare,\n faHamburger: faHamburger,\n faHammer: faHammer,\n faHamsa: faHamsa,\n faHandHolding: faHandHolding,\n faHandHoldingHeart: faHandHoldingHeart,\n faHandHoldingMedical: faHandHoldingMedical,\n faHandHoldingUsd: faHandHoldingUsd,\n faHandHoldingWater: faHandHoldingWater,\n faHandLizard: faHandLizard,\n faHandMiddleFinger: faHandMiddleFinger,\n faHandPaper: faHandPaper,\n faHandPeace: faHandPeace,\n faHandPointDown: faHandPointDown,\n faHandPointLeft: faHandPointLeft,\n faHandPointRight: faHandPointRight,\n faHandPointUp: faHandPointUp,\n faHandPointer: faHandPointer,\n faHandRock: faHandRock,\n faHandScissors: faHandScissors,\n faHandSparkles: faHandSparkles,\n faHandSpock: faHandSpock,\n faHands: faHands,\n faHandsHelping: faHandsHelping,\n faHandsWash: faHandsWash,\n faHandshake: faHandshake,\n faHandshakeAltSlash: faHandshakeAltSlash,\n faHandshakeSlash: faHandshakeSlash,\n faHanukiah: faHanukiah,\n faHardHat: faHardHat,\n faHashtag: faHashtag,\n faHatCowboy: faHatCowboy,\n faHatCowboySide: faHatCowboySide,\n faHatWizard: faHatWizard,\n faHdd: faHdd,\n faHeadSideCough: faHeadSideCough,\n faHeadSideCoughSlash: faHeadSideCoughSlash,\n faHeadSideMask: faHeadSideMask,\n faHeadSideVirus: faHeadSideVirus,\n faHeading: faHeading,\n faHeadphones: faHeadphones,\n faHeadphonesAlt: faHeadphonesAlt,\n faHeadset: faHeadset,\n faHeart: faHeart,\n faHeartBroken: faHeartBroken,\n faHeartbeat: faHeartbeat,\n faHelicopter: faHelicopter,\n faHighlighter: faHighlighter,\n faHiking: faHiking,\n faHippo: faHippo,\n faHistory: faHistory,\n faHockeyPuck: faHockeyPuck,\n faHollyBerry: faHollyBerry,\n faHome: faHome,\n faHorse: faHorse,\n faHorseHead: faHorseHead,\n faHospital: faHospital,\n faHospitalAlt: faHospitalAlt,\n faHospitalSymbol: faHospitalSymbol,\n faHospitalUser: faHospitalUser,\n faHotTub: faHotTub,\n faHotdog: faHotdog,\n faHotel: faHotel,\n faHourglass: faHourglass,\n faHourglassEnd: faHourglassEnd,\n faHourglassHalf: faHourglassHalf,\n faHourglassStart: faHourglassStart,\n faHouseDamage: faHouseDamage,\n faHouseUser: faHouseUser,\n faHryvnia: faHryvnia,\n faICursor: faICursor,\n faIceCream: faIceCream,\n faIcicles: faIcicles,\n faIcons: faIcons,\n faIdBadge: faIdBadge,\n faIdCard: faIdCard,\n faIdCardAlt: faIdCardAlt,\n faIgloo: faIgloo,\n faImage: faImage,\n faImages: faImages,\n faInbox: faInbox,\n faIndent: faIndent,\n faIndustry: faIndustry,\n faInfinity: faInfinity,\n faInfo: faInfo,\n faInfoCircle: faInfoCircle,\n faItalic: faItalic,\n faJedi: faJedi,\n faJoint: faJoint,\n faJournalWhills: faJournalWhills,\n faKaaba: faKaaba,\n faKey: faKey,\n faKeyboard: faKeyboard,\n faKhanda: faKhanda,\n faKiss: faKiss,\n faKissBeam: faKissBeam,\n faKissWinkHeart: faKissWinkHeart,\n faKiwiBird: faKiwiBird,\n faLandmark: faLandmark,\n faLanguage: faLanguage,\n faLaptop: faLaptop,\n faLaptopCode: faLaptopCode,\n faLaptopHouse: faLaptopHouse,\n faLaptopMedical: faLaptopMedical,\n faLaugh: faLaugh,\n faLaughBeam: faLaughBeam,\n faLaughSquint: faLaughSquint,\n faLaughWink: faLaughWink,\n faLayerGroup: faLayerGroup,\n faLeaf: faLeaf,\n faLemon: faLemon,\n faLessThan: faLessThan,\n faLessThanEqual: faLessThanEqual,\n faLevelDownAlt: faLevelDownAlt,\n faLevelUpAlt: faLevelUpAlt,\n faLifeRing: faLifeRing,\n faLightbulb: faLightbulb,\n faLink: faLink,\n faLiraSign: faLiraSign,\n faList: faList,\n faListAlt: faListAlt,\n faListOl: faListOl,\n faListUl: faListUl,\n faLocationArrow: faLocationArrow,\n faLock: faLock,\n faLockOpen: faLockOpen,\n faLongArrowAltDown: faLongArrowAltDown,\n faLongArrowAltLeft: faLongArrowAltLeft,\n faLongArrowAltRight: faLongArrowAltRight,\n faLongArrowAltUp: faLongArrowAltUp,\n faLowVision: faLowVision,\n faLuggageCart: faLuggageCart,\n faLungs: faLungs,\n faLungsVirus: faLungsVirus,\n faMagic: faMagic,\n faMagnet: faMagnet,\n faMailBulk: faMailBulk,\n faMale: faMale,\n faMap: faMap,\n faMapMarked: faMapMarked,\n faMapMarkedAlt: faMapMarkedAlt,\n faMapMarker: faMapMarker,\n faMapMarkerAlt: faMapMarkerAlt,\n faMapPin: faMapPin,\n faMapSigns: faMapSigns,\n faMarker: faMarker,\n faMars: faMars,\n faMarsDouble: faMarsDouble,\n faMarsStroke: faMarsStroke,\n faMarsStrokeH: faMarsStrokeH,\n faMarsStrokeV: faMarsStrokeV,\n faMask: faMask,\n faMedal: faMedal,\n faMedkit: faMedkit,\n faMeh: faMeh,\n faMehBlank: faMehBlank,\n faMehRollingEyes: faMehRollingEyes,\n faMemory: faMemory,\n faMenorah: faMenorah,\n faMercury: faMercury,\n faMeteor: faMeteor,\n faMicrochip: faMicrochip,\n faMicrophone: faMicrophone,\n faMicrophoneAlt: faMicrophoneAlt,\n faMicrophoneAltSlash: faMicrophoneAltSlash,\n faMicrophoneSlash: faMicrophoneSlash,\n faMicroscope: faMicroscope,\n faMinus: faMinus,\n faMinusCircle: faMinusCircle,\n faMinusSquare: faMinusSquare,\n faMitten: faMitten,\n faMobile: faMobile,\n faMobileAlt: faMobileAlt,\n faMoneyBill: faMoneyBill,\n faMoneyBillAlt: faMoneyBillAlt,\n faMoneyBillWave: faMoneyBillWave,\n faMoneyBillWaveAlt: faMoneyBillWaveAlt,\n faMoneyCheck: faMoneyCheck,\n faMoneyCheckAlt: faMoneyCheckAlt,\n faMonument: faMonument,\n faMoon: faMoon,\n faMortarPestle: faMortarPestle,\n faMosque: faMosque,\n faMotorcycle: faMotorcycle,\n faMountain: faMountain,\n faMouse: faMouse,\n faMousePointer: faMousePointer,\n faMugHot: faMugHot,\n faMusic: faMusic,\n faNetworkWired: faNetworkWired,\n faNeuter: faNeuter,\n faNewspaper: faNewspaper,\n faNotEqual: faNotEqual,\n faNotesMedical: faNotesMedical,\n faObjectGroup: faObjectGroup,\n faObjectUngroup: faObjectUngroup,\n faOilCan: faOilCan,\n faOm: faOm,\n faOtter: faOtter,\n faOutdent: faOutdent,\n faPager: faPager,\n faPaintBrush: faPaintBrush,\n faPaintRoller: faPaintRoller,\n faPalette: faPalette,\n faPallet: faPallet,\n faPaperPlane: faPaperPlane,\n faPaperclip: faPaperclip,\n faParachuteBox: faParachuteBox,\n faParagraph: faParagraph,\n faParking: faParking,\n faPassport: faPassport,\n faPastafarianism: faPastafarianism,\n faPaste: faPaste,\n faPause: faPause,\n faPauseCircle: faPauseCircle,\n faPaw: faPaw,\n faPeace: faPeace,\n faPen: faPen,\n faPenAlt: faPenAlt,\n faPenFancy: faPenFancy,\n faPenNib: faPenNib,\n faPenSquare: faPenSquare,\n faPencilAlt: faPencilAlt,\n faPencilRuler: faPencilRuler,\n faPeopleArrows: faPeopleArrows,\n faPeopleCarry: faPeopleCarry,\n faPepperHot: faPepperHot,\n faPercent: faPercent,\n faPercentage: faPercentage,\n faPersonBooth: faPersonBooth,\n faPhone: faPhone,\n faPhoneAlt: faPhoneAlt,\n faPhoneSlash: faPhoneSlash,\n faPhoneSquare: faPhoneSquare,\n faPhoneSquareAlt: faPhoneSquareAlt,\n faPhoneVolume: faPhoneVolume,\n faPhotoVideo: faPhotoVideo,\n faPiggyBank: faPiggyBank,\n faPills: faPills,\n faPizzaSlice: faPizzaSlice,\n faPlaceOfWorship: faPlaceOfWorship,\n faPlane: faPlane,\n faPlaneArrival: faPlaneArrival,\n faPlaneDeparture: faPlaneDeparture,\n faPlaneSlash: faPlaneSlash,\n faPlay: faPlay,\n faPlayCircle: faPlayCircle,\n faPlug: faPlug,\n faPlus: faPlus,\n faPlusCircle: faPlusCircle,\n faPlusSquare: faPlusSquare,\n faPodcast: faPodcast,\n faPoll: faPoll,\n faPollH: faPollH,\n faPoo: faPoo,\n faPooStorm: faPooStorm,\n faPoop: faPoop,\n faPortrait: faPortrait,\n faPoundSign: faPoundSign,\n faPowerOff: faPowerOff,\n faPray: faPray,\n faPrayingHands: faPrayingHands,\n faPrescription: faPrescription,\n faPrescriptionBottle: faPrescriptionBottle,\n faPrescriptionBottleAlt: faPrescriptionBottleAlt,\n faPrint: faPrint,\n faProcedures: faProcedures,\n faProjectDiagram: faProjectDiagram,\n faPumpMedical: faPumpMedical,\n faPumpSoap: faPumpSoap,\n faPuzzlePiece: faPuzzlePiece,\n faQrcode: faQrcode,\n faQuestion: faQuestion,\n faQuestionCircle: faQuestionCircle,\n faQuidditch: faQuidditch,\n faQuoteLeft: faQuoteLeft,\n faQuoteRight: faQuoteRight,\n faQuran: faQuran,\n faRadiation: faRadiation,\n faRadiationAlt: faRadiationAlt,\n faRainbow: faRainbow,\n faRandom: faRandom,\n faReceipt: faReceipt,\n faRecordVinyl: faRecordVinyl,\n faRecycle: faRecycle,\n faRedo: faRedo,\n faRedoAlt: faRedoAlt,\n faRegistered: faRegistered,\n faRemoveFormat: faRemoveFormat,\n faReply: faReply,\n faReplyAll: faReplyAll,\n faRepublican: faRepublican,\n faRestroom: faRestroom,\n faRetweet: faRetweet,\n faRibbon: faRibbon,\n faRing: faRing,\n faRoad: faRoad,\n faRobot: faRobot,\n faRocket: faRocket,\n faRoute: faRoute,\n faRss: faRss,\n faRssSquare: faRssSquare,\n faRubleSign: faRubleSign,\n faRuler: faRuler,\n faRulerCombined: faRulerCombined,\n faRulerHorizontal: faRulerHorizontal,\n faRulerVertical: faRulerVertical,\n faRunning: faRunning,\n faRupeeSign: faRupeeSign,\n faSadCry: faSadCry,\n faSadTear: faSadTear,\n faSatellite: faSatellite,\n faSatelliteDish: faSatelliteDish,\n faSave: faSave,\n faSchool: faSchool,\n faScrewdriver: faScrewdriver,\n faScroll: faScroll,\n faSdCard: faSdCard,\n faSearch: faSearch,\n faSearchDollar: faSearchDollar,\n faSearchLocation: faSearchLocation,\n faSearchMinus: faSearchMinus,\n faSearchPlus: faSearchPlus,\n faSeedling: faSeedling,\n faServer: faServer,\n faShapes: faShapes,\n faShare: faShare,\n faShareAlt: faShareAlt,\n faShareAltSquare: faShareAltSquare,\n faShareSquare: faShareSquare,\n faShekelSign: faShekelSign,\n faShieldAlt: faShieldAlt,\n faShieldVirus: faShieldVirus,\n faShip: faShip,\n faShippingFast: faShippingFast,\n faShoePrints: faShoePrints,\n faShoppingBag: faShoppingBag,\n faShoppingBasket: faShoppingBasket,\n faShoppingCart: faShoppingCart,\n faShower: faShower,\n faShuttleVan: faShuttleVan,\n faSign: faSign,\n faSignInAlt: faSignInAlt,\n faSignLanguage: faSignLanguage,\n faSignOutAlt: faSignOutAlt,\n faSignal: faSignal,\n faSignature: faSignature,\n faSimCard: faSimCard,\n faSink: faSink,\n faSitemap: faSitemap,\n faSkating: faSkating,\n faSkiing: faSkiing,\n faSkiingNordic: faSkiingNordic,\n faSkull: faSkull,\n faSkullCrossbones: faSkullCrossbones,\n faSlash: faSlash,\n faSleigh: faSleigh,\n faSlidersH: faSlidersH,\n faSmile: faSmile,\n faSmileBeam: faSmileBeam,\n faSmileWink: faSmileWink,\n faSmog: faSmog,\n faSmoking: faSmoking,\n faSmokingBan: faSmokingBan,\n faSms: faSms,\n faSnowboarding: faSnowboarding,\n faSnowflake: faSnowflake,\n faSnowman: faSnowman,\n faSnowplow: faSnowplow,\n faSoap: faSoap,\n faSocks: faSocks,\n faSolarPanel: faSolarPanel,\n faSort: faSort,\n faSortAlphaDown: faSortAlphaDown,\n faSortAlphaDownAlt: faSortAlphaDownAlt,\n faSortAlphaUp: faSortAlphaUp,\n faSortAlphaUpAlt: faSortAlphaUpAlt,\n faSortAmountDown: faSortAmountDown,\n faSortAmountDownAlt: faSortAmountDownAlt,\n faSortAmountUp: faSortAmountUp,\n faSortAmountUpAlt: faSortAmountUpAlt,\n faSortDown: faSortDown,\n faSortNumericDown: faSortNumericDown,\n faSortNumericDownAlt: faSortNumericDownAlt,\n faSortNumericUp: faSortNumericUp,\n faSortNumericUpAlt: faSortNumericUpAlt,\n faSortUp: faSortUp,\n faSpa: faSpa,\n faSpaceShuttle: faSpaceShuttle,\n faSpellCheck: faSpellCheck,\n faSpider: faSpider,\n faSpinner: faSpinner,\n faSplotch: faSplotch,\n faSprayCan: faSprayCan,\n faSquare: faSquare,\n faSquareFull: faSquareFull,\n faSquareRootAlt: faSquareRootAlt,\n faStamp: faStamp,\n faStar: faStar,\n faStarAndCrescent: faStarAndCrescent,\n faStarHalf: faStarHalf,\n faStarHalfAlt: faStarHalfAlt,\n faStarOfDavid: faStarOfDavid,\n faStarOfLife: faStarOfLife,\n faStepBackward: faStepBackward,\n faStepForward: faStepForward,\n faStethoscope: faStethoscope,\n faStickyNote: faStickyNote,\n faStop: faStop,\n faStopCircle: faStopCircle,\n faStopwatch: faStopwatch,\n faStopwatch20: faStopwatch20,\n faStore: faStore,\n faStoreAlt: faStoreAlt,\n faStoreAltSlash: faStoreAltSlash,\n faStoreSlash: faStoreSlash,\n faStream: faStream,\n faStreetView: faStreetView,\n faStrikethrough: faStrikethrough,\n faStroopwafel: faStroopwafel,\n faSubscript: faSubscript,\n faSubway: faSubway,\n faSuitcase: faSuitcase,\n faSuitcaseRolling: faSuitcaseRolling,\n faSun: faSun,\n faSuperscript: faSuperscript,\n faSurprise: faSurprise,\n faSwatchbook: faSwatchbook,\n faSwimmer: faSwimmer,\n faSwimmingPool: faSwimmingPool,\n faSynagogue: faSynagogue,\n faSync: faSync,\n faSyncAlt: faSyncAlt,\n faSyringe: faSyringe,\n faTable: faTable,\n faTableTennis: faTableTennis,\n faTablet: faTablet,\n faTabletAlt: faTabletAlt,\n faTablets: faTablets,\n faTachometerAlt: faTachometerAlt,\n faTag: faTag,\n faTags: faTags,\n faTape: faTape,\n faTasks: faTasks,\n faTaxi: faTaxi,\n faTeeth: faTeeth,\n faTeethOpen: faTeethOpen,\n faTemperatureHigh: faTemperatureHigh,\n faTemperatureLow: faTemperatureLow,\n faTenge: faTenge,\n faTerminal: faTerminal,\n faTextHeight: faTextHeight,\n faTextWidth: faTextWidth,\n faTh: faTh,\n faThLarge: faThLarge,\n faThList: faThList,\n faTheaterMasks: faTheaterMasks,\n faThermometer: faThermometer,\n faThermometerEmpty: faThermometerEmpty,\n faThermometerFull: faThermometerFull,\n faThermometerHalf: faThermometerHalf,\n faThermometerQuarter: faThermometerQuarter,\n faThermometerThreeQuarters: faThermometerThreeQuarters,\n faThumbsDown: faThumbsDown,\n faThumbsUp: faThumbsUp,\n faThumbtack: faThumbtack,\n faTicketAlt: faTicketAlt,\n faTimes: faTimes,\n faTimesCircle: faTimesCircle,\n faTint: faTint,\n faTintSlash: faTintSlash,\n faTired: faTired,\n faToggleOff: faToggleOff,\n faToggleOn: faToggleOn,\n faToilet: faToilet,\n faToiletPaper: faToiletPaper,\n faToiletPaperSlash: faToiletPaperSlash,\n faToolbox: faToolbox,\n faTools: faTools,\n faTooth: faTooth,\n faTorah: faTorah,\n faToriiGate: faToriiGate,\n faTractor: faTractor,\n faTrademark: faTrademark,\n faTrafficLight: faTrafficLight,\n faTrailer: faTrailer,\n faTrain: faTrain,\n faTram: faTram,\n faTransgender: faTransgender,\n faTransgenderAlt: faTransgenderAlt,\n faTrash: faTrash,\n faTrashAlt: faTrashAlt,\n faTrashRestore: faTrashRestore,\n faTrashRestoreAlt: faTrashRestoreAlt,\n faTree: faTree,\n faTrophy: faTrophy,\n faTruck: faTruck,\n faTruckLoading: faTruckLoading,\n faTruckMonster: faTruckMonster,\n faTruckMoving: faTruckMoving,\n faTruckPickup: faTruckPickup,\n faTshirt: faTshirt,\n faTty: faTty,\n faTv: faTv,\n faUmbrella: faUmbrella,\n faUmbrellaBeach: faUmbrellaBeach,\n faUnderline: faUnderline,\n faUndo: faUndo,\n faUndoAlt: faUndoAlt,\n faUniversalAccess: faUniversalAccess,\n faUniversity: faUniversity,\n faUnlink: faUnlink,\n faUnlock: faUnlock,\n faUnlockAlt: faUnlockAlt,\n faUpload: faUpload,\n faUser: faUser,\n faUserAlt: faUserAlt,\n faUserAltSlash: faUserAltSlash,\n faUserAstronaut: faUserAstronaut,\n faUserCheck: faUserCheck,\n faUserCircle: faUserCircle,\n faUserClock: faUserClock,\n faUserCog: faUserCog,\n faUserEdit: faUserEdit,\n faUserFriends: faUserFriends,\n faUserGraduate: faUserGraduate,\n faUserInjured: faUserInjured,\n faUserLock: faUserLock,\n faUserMd: faUserMd,\n faUserMinus: faUserMinus,\n faUserNinja: faUserNinja,\n faUserNurse: faUserNurse,\n faUserPlus: faUserPlus,\n faUserSecret: faUserSecret,\n faUserShield: faUserShield,\n faUserSlash: faUserSlash,\n faUserTag: faUserTag,\n faUserTie: faUserTie,\n faUserTimes: faUserTimes,\n faUsers: faUsers,\n faUsersCog: faUsersCog,\n faUsersSlash: faUsersSlash,\n faUtensilSpoon: faUtensilSpoon,\n faUtensils: faUtensils,\n faVectorSquare: faVectorSquare,\n faVenus: faVenus,\n faVenusDouble: faVenusDouble,\n faVenusMars: faVenusMars,\n faVest: faVest,\n faVestPatches: faVestPatches,\n faVial: faVial,\n faVials: faVials,\n faVideo: faVideo,\n faVideoSlash: faVideoSlash,\n faVihara: faVihara,\n faVirus: faVirus,\n faVirusSlash: faVirusSlash,\n faViruses: faViruses,\n faVoicemail: faVoicemail,\n faVolleyballBall: faVolleyballBall,\n faVolumeDown: faVolumeDown,\n faVolumeMute: faVolumeMute,\n faVolumeOff: faVolumeOff,\n faVolumeUp: faVolumeUp,\n faVoteYea: faVoteYea,\n faVrCardboard: faVrCardboard,\n faWalking: faWalking,\n faWallet: faWallet,\n faWarehouse: faWarehouse,\n faWater: faWater,\n faWaveSquare: faWaveSquare,\n faWeight: faWeight,\n faWeightHanging: faWeightHanging,\n faWheelchair: faWheelchair,\n faWifi: faWifi,\n faWind: faWind,\n faWindowClose: faWindowClose,\n faWindowMaximize: faWindowMaximize,\n faWindowMinimize: faWindowMinimize,\n faWindowRestore: faWindowRestore,\n faWineBottle: faWineBottle,\n faWineGlass: faWineGlass,\n faWineGlassAlt: faWineGlassAlt,\n faWonSign: faWonSign,\n faWrench: faWrench,\n faXRay: faXRay,\n faYenSign: faYenSign,\n faYinYang: faYinYang\n};\n\nexport { _iconsCache as fas, prefix, faAd, faAddressBook, faAddressCard, faAdjust, faAirFreshener, faAlignCenter, faAlignJustify, faAlignLeft, faAlignRight, faAllergies, faAmbulance, faAmericanSignLanguageInterpreting, faAnchor, faAngleDoubleDown, faAngleDoubleLeft, faAngleDoubleRight, faAngleDoubleUp, faAngleDown, faAngleLeft, faAngleRight, faAngleUp, faAngry, faAnkh, faAppleAlt, faArchive, faArchway, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faArrowCircleDown, faArrowCircleLeft, faArrowCircleRight, faArrowCircleUp, faArrowDown, faArrowLeft, faArrowRight, faArrowUp, faArrowsAlt, faArrowsAltH, faArrowsAltV, faAssistiveListeningSystems, faAsterisk, faAt, faAtlas, faAtom, faAudioDescription, faAward, faBaby, faBabyCarriage, faBackspace, faBackward, faBacon, faBacteria, faBacterium, faBahai, faBalanceScale, faBalanceScaleLeft, faBalanceScaleRight, faBan, faBandAid, faBarcode, faBars, faBaseballBall, faBasketballBall, faBath, faBatteryEmpty, faBatteryFull, faBatteryHalf, faBatteryQuarter, faBatteryThreeQuarters, faBed, faBeer, faBell, faBellSlash, faBezierCurve, faBible, faBicycle, faBiking, faBinoculars, faBiohazard, faBirthdayCake, faBlender, faBlenderPhone, faBlind, faBlog, faBold, faBolt, faBomb, faBone, faBong, faBook, faBookDead, faBookMedical, faBookOpen, faBookReader, faBookmark, faBorderAll, faBorderNone, faBorderStyle, faBowlingBall, faBox, faBoxOpen, faBoxTissue, faBoxes, faBraille, faBrain, faBreadSlice, faBriefcase, faBriefcaseMedical, faBroadcastTower, faBroom, faBrush, faBug, faBuilding, faBullhorn, faBullseye, faBurn, faBus, faBusAlt, faBusinessTime, faCalculator, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarDay, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCalendarWeek, faCamera, faCameraRetro, faCampground, faCandyCane, faCannabis, faCapsules, faCar, faCarAlt, faCarBattery, faCarCrash, faCarSide, faCaravan, faCaretDown, faCaretLeft, faCaretRight, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faCaretUp, faCarrot, faCartArrowDown, faCartPlus, faCashRegister, faCat, faCertificate, faChair, faChalkboard, faChalkboardTeacher, faChargingStation, faChartArea, faChartBar, faChartLine, faChartPie, faCheck, faCheckCircle, faCheckDouble, faCheckSquare, faCheese, faChess, faChessBishop, faChessBoard, faChessKing, faChessKnight, faChessPawn, faChessQueen, faChessRook, faChevronCircleDown, faChevronCircleLeft, faChevronCircleRight, faChevronCircleUp, faChevronDown, faChevronLeft, faChevronRight, faChevronUp, faChild, faChurch, faCircle, faCircleNotch, faCity, faClinicMedical, faClipboard, faClipboardCheck, faClipboardList, faClock, faClone, faClosedCaptioning, faCloud, faCloudDownloadAlt, faCloudMeatball, faCloudMoon, faCloudMoonRain, faCloudRain, faCloudShowersHeavy, faCloudSun, faCloudSunRain, faCloudUploadAlt, faCocktail, faCode, faCodeBranch, faCoffee, faCog, faCogs, faCoins, faColumns, faComment, faCommentAlt, faCommentDollar, faCommentDots, faCommentMedical, faCommentSlash, faComments, faCommentsDollar, faCompactDisc, faCompass, faCompress, faCompressAlt, faCompressArrowsAlt, faConciergeBell, faCookie, faCookieBite, faCopy, faCopyright, faCouch, faCreditCard, faCrop, faCropAlt, faCross, faCrosshairs, faCrow, faCrown, faCrutch, faCube, faCubes, faCut, faDatabase, faDeaf, faDemocrat, faDesktop, faDharmachakra, faDiagnoses, faDice, faDiceD20, faDiceD6, faDiceFive, faDiceFour, faDiceOne, faDiceSix, faDiceThree, faDiceTwo, faDigitalTachograph, faDirections, faDisease, faDivide, faDizzy, faDna, faDog, faDollarSign, faDolly, faDollyFlatbed, faDonate, faDoorClosed, faDoorOpen, faDotCircle, faDove, faDownload, faDraftingCompass, faDragon, faDrawPolygon, faDrum, faDrumSteelpan, faDrumstickBite, faDumbbell, faDumpster, faDumpsterFire, faDungeon, faEdit, faEgg, faEject, faEllipsisH, faEllipsisV, faEnvelope, faEnvelopeOpen, faEnvelopeOpenText, faEnvelopeSquare, faEquals, faEraser, faEthernet, faEuroSign, faExchangeAlt, faExclamation, faExclamationCircle, faExclamationTriangle, faExpand, faExpandAlt, faExpandArrowsAlt, faExternalLinkAlt, faExternalLinkSquareAlt, faEye, faEyeDropper, faEyeSlash, faFan, faFastBackward, faFastForward, faFaucet, faFax, faFeather, faFeatherAlt, faFemale, faFighterJet, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileContract, faFileCsv, faFileDownload, faFileExcel, faFileExport, faFileImage, faFileImport, faFileInvoice, faFileInvoiceDollar, faFileMedical, faFileMedicalAlt, faFilePdf, faFilePowerpoint, faFilePrescription, faFileSignature, faFileUpload, faFileVideo, faFileWord, faFill, faFillDrip, faFilm, faFilter, faFingerprint, faFire, faFireAlt, faFireExtinguisher, faFirstAid, faFish, faFistRaised, faFlag, faFlagCheckered, faFlagUsa, faFlask, faFlushed, faFolder, faFolderMinus, faFolderOpen, faFolderPlus, faFont, faFontAwesomeLogoFull, faFootballBall, faForward, faFrog, faFrown, faFrownOpen, faFunnelDollar, faFutbol, faGamepad, faGasPump, faGavel, faGem, faGenderless, faGhost, faGift, faGifts, faGlassCheers, faGlassMartini, faGlassMartiniAlt, faGlassWhiskey, faGlasses, faGlobe, faGlobeAfrica, faGlobeAmericas, faGlobeAsia, faGlobeEurope, faGolfBall, faGopuram, faGraduationCap, faGreaterThan, faGreaterThanEqual, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faGripHorizontal, faGripLines, faGripLinesVertical, faGripVertical, faGuitar, faHSquare, faHamburger, faHammer, faHamsa, faHandHolding, faHandHoldingHeart, faHandHoldingMedical, faHandHoldingUsd, faHandHoldingWater, faHandLizard, faHandMiddleFinger, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSparkles, faHandSpock, faHands, faHandsHelping, faHandsWash, faHandshake, faHandshakeAltSlash, faHandshakeSlash, faHanukiah, faHardHat, faHashtag, faHatCowboy, faHatCowboySide, faHatWizard, faHdd, faHeadSideCough, faHeadSideCoughSlash, faHeadSideMask, faHeadSideVirus, faHeading, faHeadphones, faHeadphonesAlt, faHeadset, faHeart, faHeartBroken, faHeartbeat, faHelicopter, faHighlighter, faHiking, faHippo, faHistory, faHockeyPuck, faHollyBerry, faHome, faHorse, faHorseHead, faHospital, faHospitalAlt, faHospitalSymbol, faHospitalUser, faHotTub, faHotdog, faHotel, faHourglass, faHourglassEnd, faHourglassHalf, faHourglassStart, faHouseDamage, faHouseUser, faHryvnia, faICursor, faIceCream, faIcicles, faIcons, faIdBadge, faIdCard, faIdCardAlt, faIgloo, faImage, faImages, faInbox, faIndent, faIndustry, faInfinity, faInfo, faInfoCircle, faItalic, faJedi, faJoint, faJournalWhills, faKaaba, faKey, faKeyboard, faKhanda, faKiss, faKissBeam, faKissWinkHeart, faKiwiBird, faLandmark, faLanguage, faLaptop, faLaptopCode, faLaptopHouse, faLaptopMedical, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLayerGroup, faLeaf, faLemon, faLessThan, faLessThanEqual, faLevelDownAlt, faLevelUpAlt, faLifeRing, faLightbulb, faLink, faLiraSign, faList, faListAlt, faListOl, faListUl, faLocationArrow, faLock, faLockOpen, faLongArrowAltDown, faLongArrowAltLeft, faLongArrowAltRight, faLongArrowAltUp, faLowVision, faLuggageCart, faLungs, faLungsVirus, faMagic, faMagnet, faMailBulk, faMale, faMap, faMapMarked, faMapMarkedAlt, faMapMarker, faMapMarkerAlt, faMapPin, faMapSigns, faMarker, faMars, faMarsDouble, faMarsStroke, faMarsStrokeH, faMarsStrokeV, faMask, faMedal, faMedkit, faMeh, faMehBlank, faMehRollingEyes, faMemory, faMenorah, faMercury, faMeteor, faMicrochip, faMicrophone, faMicrophoneAlt, faMicrophoneAltSlash, faMicrophoneSlash, faMicroscope, faMinus, faMinusCircle, faMinusSquare, faMitten, faMobile, faMobileAlt, faMoneyBill, faMoneyBillAlt, faMoneyBillWave, faMoneyBillWaveAlt, faMoneyCheck, faMoneyCheckAlt, faMonument, faMoon, faMortarPestle, faMosque, faMotorcycle, faMountain, faMouse, faMousePointer, faMugHot, faMusic, faNetworkWired, faNeuter, faNewspaper, faNotEqual, faNotesMedical, faObjectGroup, faObjectUngroup, faOilCan, faOm, faOtter, faOutdent, faPager, faPaintBrush, faPaintRoller, faPalette, faPallet, faPaperPlane, faPaperclip, faParachuteBox, faParagraph, faParking, faPassport, faPastafarianism, faPaste, faPause, faPauseCircle, faPaw, faPeace, faPen, faPenAlt, faPenFancy, faPenNib, faPenSquare, faPencilAlt, faPencilRuler, faPeopleArrows, faPeopleCarry, faPepperHot, faPercent, faPercentage, faPersonBooth, faPhone, faPhoneAlt, faPhoneSlash, faPhoneSquare, faPhoneSquareAlt, faPhoneVolume, faPhotoVideo, faPiggyBank, faPills, faPizzaSlice, faPlaceOfWorship, faPlane, faPlaneArrival, faPlaneDeparture, faPlaneSlash, faPlay, faPlayCircle, faPlug, faPlus, faPlusCircle, faPlusSquare, faPodcast, faPoll, faPollH, faPoo, faPooStorm, faPoop, faPortrait, faPoundSign, faPowerOff, faPray, faPrayingHands, faPrescription, faPrescriptionBottle, faPrescriptionBottleAlt, faPrint, faProcedures, faProjectDiagram, faPumpMedical, faPumpSoap, faPuzzlePiece, faQrcode, faQuestion, faQuestionCircle, faQuidditch, faQuoteLeft, faQuoteRight, faQuran, faRadiation, faRadiationAlt, faRainbow, faRandom, faReceipt, faRecordVinyl, faRecycle, faRedo, faRedoAlt, faRegistered, faRemoveFormat, faReply, faReplyAll, faRepublican, faRestroom, faRetweet, faRibbon, faRing, faRoad, faRobot, faRocket, faRoute, faRss, faRssSquare, faRubleSign, faRuler, faRulerCombined, faRulerHorizontal, faRulerVertical, faRunning, faRupeeSign, faSadCry, faSadTear, faSatellite, faSatelliteDish, faSave, faSchool, faScrewdriver, faScroll, faSdCard, faSearch, faSearchDollar, faSearchLocation, faSearchMinus, faSearchPlus, faSeedling, faServer, faShapes, faShare, faShareAlt, faShareAltSquare, faShareSquare, faShekelSign, faShieldAlt, faShieldVirus, faShip, faShippingFast, faShoePrints, faShoppingBag, faShoppingBasket, faShoppingCart, faShower, faShuttleVan, faSign, faSignInAlt, faSignLanguage, faSignOutAlt, faSignal, faSignature, faSimCard, faSink, faSitemap, faSkating, faSkiing, faSkiingNordic, faSkull, faSkullCrossbones, faSlash, faSleigh, faSlidersH, faSmile, faSmileBeam, faSmileWink, faSmog, faSmoking, faSmokingBan, faSms, faSnowboarding, faSnowflake, faSnowman, faSnowplow, faSoap, faSocks, faSolarPanel, faSort, faSortAlphaDown, faSortAlphaDownAlt, faSortAlphaUp, faSortAlphaUpAlt, faSortAmountDown, faSortAmountDownAlt, faSortAmountUp, faSortAmountUpAlt, faSortDown, faSortNumericDown, faSortNumericDownAlt, faSortNumericUp, faSortNumericUpAlt, faSortUp, faSpa, faSpaceShuttle, faSpellCheck, faSpider, faSpinner, faSplotch, faSprayCan, faSquare, faSquareFull, faSquareRootAlt, faStamp, faStar, faStarAndCrescent, faStarHalf, faStarHalfAlt, faStarOfDavid, faStarOfLife, faStepBackward, faStepForward, faStethoscope, faStickyNote, faStop, faStopCircle, faStopwatch, faStopwatch20, faStore, faStoreAlt, faStoreAltSlash, faStoreSlash, faStream, faStreetView, faStrikethrough, faStroopwafel, faSubscript, faSubway, faSuitcase, faSuitcaseRolling, faSun, faSuperscript, faSurprise, faSwatchbook, faSwimmer, faSwimmingPool, faSynagogue, faSync, faSyncAlt, faSyringe, faTable, faTableTennis, faTablet, faTabletAlt, faTablets, faTachometerAlt, faTag, faTags, faTape, faTasks, faTaxi, faTeeth, faTeethOpen, faTemperatureHigh, faTemperatureLow, faTenge, faTerminal, faTextHeight, faTextWidth, faTh, faThLarge, faThList, faTheaterMasks, faThermometer, faThermometerEmpty, faThermometerFull, faThermometerHalf, faThermometerQuarter, faThermometerThreeQuarters, faThumbsDown, faThumbsUp, faThumbtack, faTicketAlt, faTimes, faTimesCircle, faTint, faTintSlash, faTired, faToggleOff, faToggleOn, faToilet, faToiletPaper, faToiletPaperSlash, faToolbox, faTools, faTooth, faTorah, faToriiGate, faTractor, faTrademark, faTrafficLight, faTrailer, faTrain, faTram, faTransgender, faTransgenderAlt, faTrash, faTrashAlt, faTrashRestore, faTrashRestoreAlt, faTree, faTrophy, faTruck, faTruckLoading, faTruckMonster, faTruckMoving, faTruckPickup, faTshirt, faTty, faTv, faUmbrella, faUmbrellaBeach, faUnderline, faUndo, faUndoAlt, faUniversalAccess, faUniversity, faUnlink, faUnlock, faUnlockAlt, faUpload, faUser, faUserAlt, faUserAltSlash, faUserAstronaut, faUserCheck, faUserCircle, faUserClock, faUserCog, faUserEdit, faUserFriends, faUserGraduate, faUserInjured, faUserLock, faUserMd, faUserMinus, faUserNinja, faUserNurse, faUserPlus, faUserSecret, faUserShield, faUserSlash, faUserTag, faUserTie, faUserTimes, faUsers, faUsersCog, faUsersSlash, faUtensilSpoon, faUtensils, faVectorSquare, faVenus, faVenusDouble, faVenusMars, faVest, faVestPatches, faVial, faVials, faVideo, faVideoSlash, faVihara, faVirus, faVirusSlash, faViruses, faVoicemail, faVolleyballBall, faVolumeDown, faVolumeMute, faVolumeOff, faVolumeUp, faVoteYea, faVrCardboard, faWalking, faWallet, faWarehouse, faWater, faWaveSquare, faWeight, faWeightHanging, faWheelchair, faWifi, faWind, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore, faWineBottle, faWineGlass, faWineGlassAlt, faWonSign, faWrench, faXRay, faYenSign, faYinYang };\n","import {\n WithModuleProps,\n LinkedVisualConsoleProps,\n AnyObject,\n WithAgentProps\n} from \"../lib/types\";\nimport { modulePropsDecoder, linkedVCPropsDecoder, t } from \"../lib\";\nimport Item, { itemBasePropsDecoder, ItemType, ItemProps } from \"../Item\";\nimport { FormContainer, InputGroup } from \"../Form\";\nimport fontAwesomeIcon from \"../lib/FontAwesomeIcon\";\nimport { faTrashAlt, faPlusCircle } from \"@fortawesome/free-solid-svg-icons\";\n\nexport type ColorCloudProps = {\n type: ItemType.COLOR_CLOUD;\n color: string;\n defaultColor: string;\n colorRanges: {\n color: string;\n fromValue: number;\n toValue: number;\n }[];\n // TODO: Add the rest of the color cloud values?\n} & ItemProps &\n WithAgentProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the static graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function colorCloudPropsDecoder(\n data: AnyObject\n): ColorCloudProps | never {\n // TODO: Validate the color.\n if (typeof data.color !== \"string\" || data.color.length === 0) {\n throw new TypeError(\"invalid color.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.COLOR_CLOUD,\n color: data.color,\n defaultColor: data.defaultColor,\n colorRanges: data.colorRanges,\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\n/**\n * Class to add item to the Color cloud item form\n * This item consists of a label and a color type input color.\n * Element default color is stored in the color property\n */\nclass ColorInputGroup extends InputGroup<Partial<ColorCloudProps>> {\n protected createContent(): HTMLElement | HTMLElement[] {\n const generalDiv = document.createElement(\"div\");\n generalDiv.className = \"div-input-group\";\n\n const colorLabel = document.createElement(\"label\");\n colorLabel.textContent = t(\"Default color\");\n\n generalDiv.appendChild(colorLabel);\n\n const ColorInput = document.createElement(\"input\");\n ColorInput.type = \"color\";\n ColorInput.required = true;\n\n ColorInput.value = `${this.currentData.defaultColor ||\n this.initialData.defaultColor ||\n \"#000000\"}`;\n\n ColorInput.addEventListener(\"change\", e => {\n this.updateData({\n defaultColor: (e.target as HTMLInputElement).value\n });\n });\n\n generalDiv.appendChild(ColorInput);\n\n return generalDiv;\n }\n}\n\ntype ColorRanges = ColorCloudProps[\"colorRanges\"];\ntype ColorRange = ColorRanges[0];\n\nclass RangesInputGroup extends InputGroup<Partial<ColorCloudProps>> {\n protected createContent(): HTMLElement | HTMLElement[] {\n const generalDiv = document.createElement(\"div\");\n generalDiv.className = \"div-input-group div-ranges-input-group\";\n\n const rangesLabel = this.createLabel(\"Ranges\");\n\n generalDiv.appendChild(rangesLabel);\n\n const rangesControlsContainer = document.createElement(\"div\");\n const createdRangesContainer = document.createElement(\"div\");\n\n generalDiv.appendChild(createdRangesContainer);\n generalDiv.appendChild(rangesControlsContainer);\n\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n\n let buildRanges: (ranges: ColorRanges) => void;\n\n const handleRangeUpdatePartial = (index: number) => (\n range: ColorRange\n ): void => {\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n this.updateData({\n colorRanges: [\n ...colorRanges.slice(0, index),\n range,\n ...colorRanges.slice(index + 1)\n ]\n });\n };\n\n const handleDelete = (index: number) => () => {\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n const newRanges = [\n ...colorRanges.slice(0, index),\n ...colorRanges.slice(index + 1)\n ];\n\n this.updateData({ colorRanges: newRanges });\n buildRanges(newRanges);\n };\n\n const handleCreate = (range: ColorRange): void => {\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n const newRanges = [...colorRanges, range];\n this.updateData({ colorRanges: newRanges });\n buildRanges(newRanges);\n };\n\n buildRanges = ranges => {\n createdRangesContainer.innerHTML = \"\";\n ranges.forEach((colorRange, index) =>\n createdRangesContainer.appendChild(\n this.rangeContainer(\n colorRange,\n handleRangeUpdatePartial(index),\n handleDelete(index)\n )\n )\n );\n };\n\n buildRanges(colorRanges);\n\n rangesControlsContainer.appendChild(\n this.initialRangeContainer(handleCreate)\n );\n\n return generalDiv;\n }\n\n private initialRangeContainer(onCreate: (range: ColorRange) => void) {\n // TODO: Document\n const initialState = { color: \"#ffffff\" };\n\n let state: Partial<ColorRange> = { ...initialState };\n\n const handleFromValue = (value: ColorRange[\"fromValue\"]): void => {\n state.fromValue = value;\n };\n const handleToValue = (value: ColorRange[\"toValue\"]): void => {\n state.toValue = value;\n };\n const handleColor = (value: ColorRange[\"color\"]): void => {\n state.color = value;\n };\n\n // User defined type guard.\n // Docs: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards\n const isValid = (range: Partial<ColorRange>): range is ColorRange =>\n typeof range.color !== \"undefined\" &&\n typeof range.toValue !== \"undefined\" &&\n typeof range.fromValue !== \"undefined\";\n\n const rangesContainer = document.createElement(\"div\");\n\n // Div From value.\n const rangesContainerFromValue = document.createElement(\"div\");\n const rangesLabelFromValue = this.createLabel(\"From Value\");\n const rangesInputFromValue = this.createInputNumber(null, handleFromValue);\n rangesContainerFromValue.appendChild(rangesLabelFromValue);\n rangesContainerFromValue.appendChild(rangesInputFromValue);\n rangesContainer.appendChild(rangesContainerFromValue);\n\n // Div To Value.\n const rangesDivContainerToValue = document.createElement(\"div\");\n const rangesLabelToValue = this.createLabel(\"To Value\");\n const rangesInputToValue = this.createInputNumber(null, handleToValue);\n rangesContainerFromValue.appendChild(rangesLabelToValue);\n rangesContainerFromValue.appendChild(rangesInputToValue);\n rangesContainer.appendChild(rangesDivContainerToValue);\n\n // Div Color.\n const rangesDivContainerColor = document.createElement(\"div\");\n const rangesLabelColor = this.createLabel(\"Color\");\n const rangesInputColor = this.createInputColor(\n initialState.color,\n handleColor\n );\n rangesContainerFromValue.appendChild(rangesLabelColor);\n rangesContainerFromValue.appendChild(rangesInputColor);\n rangesContainer.appendChild(rangesDivContainerColor);\n\n // Button delete.\n const createBtn = document.createElement(\"a\");\n createBtn.appendChild(\n fontAwesomeIcon(faPlusCircle, t(\"Create color range\"), {\n size: \"small\",\n color: \"#565656\"\n })\n );\n\n const handleCreate = () => {\n if (isValid(state)) onCreate(state);\n state = initialState;\n rangesInputFromValue.value = `${state.fromValue || \"\"}`;\n rangesInputToValue.value = `${state.toValue || \"\"}`;\n rangesInputColor.value = `${state.color}`;\n };\n\n createBtn.addEventListener(\"click\", handleCreate);\n\n rangesContainer.appendChild(createBtn);\n\n return rangesContainer;\n }\n\n private rangeContainer(\n colorRange: ColorRange,\n onUpdate: (range: ColorRange) => void,\n onDelete: () => void\n ): HTMLDivElement {\n // TODO: Document\n const state = { ...colorRange };\n\n const handleFromValue = (value: ColorRange[\"fromValue\"]): void => {\n state.fromValue = value;\n onUpdate({ ...state });\n };\n const handleToValue = (value: ColorRange[\"toValue\"]): void => {\n state.toValue = value;\n onUpdate({ ...state });\n };\n const handleColor = (value: ColorRange[\"color\"]): void => {\n state.color = value;\n onUpdate({ ...state });\n };\n\n const rangesContainer = document.createElement(\"div\");\n\n // Div From value.\n const rangesContainerFromValue = document.createElement(\"div\");\n const rangesLabelFromValue = this.createLabel(\"From Value\");\n const rangesInputFromValue = this.createInputNumber(\n colorRange.fromValue,\n handleFromValue\n );\n rangesContainerFromValue.appendChild(rangesLabelFromValue);\n rangesContainerFromValue.appendChild(rangesInputFromValue);\n rangesContainer.appendChild(rangesContainerFromValue);\n\n // Div To Value.\n const rangesDivContainerToValue = document.createElement(\"div\");\n const rangesLabelToValue = this.createLabel(\"To Value\");\n const rangesInputToValue = this.createInputNumber(\n colorRange.toValue,\n handleToValue\n );\n rangesContainerFromValue.appendChild(rangesLabelToValue);\n rangesContainerFromValue.appendChild(rangesInputToValue);\n rangesContainer.appendChild(rangesDivContainerToValue);\n\n // Div Color.\n const rangesDivContainerColor = document.createElement(\"div\");\n const rangesLabelColor = this.createLabel(\"Color\");\n const rangesInputColor = this.createInputColor(\n colorRange.color,\n handleColor\n );\n rangesContainerFromValue.appendChild(rangesLabelColor);\n rangesContainerFromValue.appendChild(rangesInputColor);\n rangesContainer.appendChild(rangesDivContainerColor);\n\n // Button delete.\n const deleteBtn = document.createElement(\"a\");\n deleteBtn.appendChild(\n fontAwesomeIcon(faTrashAlt, t(\"Delete color range\"), {\n size: \"small\",\n color: \"#565656\"\n })\n );\n deleteBtn.addEventListener(\"click\", onDelete);\n\n rangesContainer.appendChild(deleteBtn);\n\n return rangesContainer;\n }\n\n private createLabel(text: string): HTMLLabelElement {\n const label = document.createElement(\"label\");\n label.textContent = t(text);\n return label;\n }\n\n private createInputNumber(\n value: number | null,\n onUpdate: (value: number) => void\n ): HTMLInputElement {\n const input = document.createElement(\"input\");\n input.type = \"number\";\n if (value !== null) input.value = `${value}`;\n input.addEventListener(\"change\", e => {\n const value = parseInt((e.target as HTMLInputElement).value);\n if (!isNaN(value)) onUpdate(value);\n });\n\n return input;\n }\n\n private createInputColor(\n value: string | null,\n onUpdate: (value: string) => void\n ): HTMLInputElement {\n const input = document.createElement(\"input\");\n input.type = \"color\";\n if (value !== null) input.value = value;\n input.addEventListener(\"change\", e =>\n onUpdate((e.target as HTMLInputElement).value)\n );\n\n return input;\n }\n}\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport default class ColorCloud extends Item<ColorCloudProps> {\n protected createDomElement(): HTMLElement {\n const container: HTMLDivElement = document.createElement(\"div\");\n container.className = \"color-cloud\";\n\n // Add the SVG.\n container.append(this.createSvgElement());\n\n return container;\n }\n\n public resizeElement(width: number): void {\n super.resizeElement(width, width);\n }\n\n public createSvgElement(): SVGSVGElement {\n const gradientId = `grad_${this.props.id}`;\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n svg.setAttribute(\"viewBox\", \"0 0 100 100\");\n\n // Defs.\n const defs = document.createElementNS(svgNS, \"defs\");\n // Radial gradient.\n const radialGradient = document.createElementNS(svgNS, \"radialGradient\");\n radialGradient.setAttribute(\"id\", gradientId);\n radialGradient.setAttribute(\"cx\", \"50%\");\n radialGradient.setAttribute(\"cy\", \"50%\");\n radialGradient.setAttribute(\"r\", \"50%\");\n radialGradient.setAttribute(\"fx\", \"50%\");\n radialGradient.setAttribute(\"fy\", \"50%\");\n // Stops.\n const stop0 = document.createElementNS(svgNS, \"stop\");\n stop0.setAttribute(\"offset\", \"0%\");\n stop0.setAttribute(\n \"style\",\n `stop-color:${this.props.color};stop-opacity:0.9`\n );\n const stop100 = document.createElementNS(svgNS, \"stop\");\n stop100.setAttribute(\"offset\", \"100%\");\n stop100.setAttribute(\n \"style\",\n `stop-color:${this.props.color};stop-opacity:0`\n );\n // Circle.\n const circle = document.createElementNS(svgNS, \"circle\");\n circle.setAttribute(\"fill\", `url(#${gradientId})`);\n circle.setAttribute(\"cx\", \"50%\");\n circle.setAttribute(\"cy\", \"50%\");\n circle.setAttribute(\"r\", \"50%\");\n\n // Append elements.\n radialGradient.append(stop0, stop100);\n defs.append(radialGradient);\n svg.append(defs, circle);\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n svg.setAttribute(\"opacity\", \"0.2\");\n }\n\n return svg;\n }\n\n /**\n * @override function to add or remove inputsGroups those that are not necessary.\n * Add to:\n * ColorInputGroup\n * RangesInputGroup\n */\n public getFormContainer(): FormContainer {\n return ColorCloud.getFormContainer(this.props);\n }\n\n public static getFormContainer(\n props: Partial<ColorCloudProps>\n ): FormContainer {\n const formContainer = super.getFormContainer(props);\n formContainer.removeInputGroup(\"label\");\n\n formContainer.addInputGroup(new ColorInputGroup(\"color-cloud\", props), 3);\n formContainer.addInputGroup(new RangesInputGroup(\"ranges-cloud\", props), 4);\n\n return formContainer;\n }\n}\n","import { AnyObject, Position, Size, ItemMeta } from \"../lib/types\";\nimport {\n parseIntOr,\n notEmptyStringOr,\n debounce,\n addMovementListener\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\nimport TypedEvent, { Listener, Disposable } from \"../lib/TypedEvent\";\n\nexport interface LineProps extends ItemProps {\n // Overrided properties.\n type: number;\n label: null;\n isLinkEnabled: false;\n parentId: null;\n aclGroupId: null;\n // Custom properties.\n startPosition: Position;\n endPosition: Position;\n lineWidth: number;\n color: string | null;\n viewportOffsetX: number;\n viewportOffsetY: number;\n labelEnd: string;\n labelStart: string;\n linkedEnd: number | null;\n linkedStart: number | null;\n labelEndWidth: number;\n labelEndHeight: number;\n labelStartWidth: number;\n labelStartHeight: number;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function linePropsDecoder(data: AnyObject): LineProps | never {\n const props: LineProps = {\n ...itemBasePropsDecoder({ ...data, width: 1, height: 1 }), // Object spread. It will merge the properties of the two objects.\n type: ItemType.LINE_ITEM,\n label: null,\n isLinkEnabled: false,\n parentId: null,\n aclGroupId: null,\n // Initialize Position & Size.\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n // Custom properties.\n startPosition: {\n x: parseIntOr(data.startX, 0),\n y: parseIntOr(data.startY, 0)\n },\n endPosition: {\n x: parseIntOr(data.endX, 0),\n y: parseIntOr(data.endY, 0)\n },\n lineWidth: parseIntOr(data.lineWidth || data.borderWidth, 1),\n color: notEmptyStringOr(data.borderColor || data.color, null),\n viewportOffsetX: 0,\n viewportOffsetY: 0,\n labelEnd: notEmptyStringOr(data.labelEnd, \"\"),\n labelEndWidth: parseIntOr(data.labelEndWidth, 0),\n linkedEnd: data.linkedEnd,\n linkedStart: data.linkedStart,\n labelEndHeight: parseIntOr(data.labelEndHeight, 0),\n labelStart: notEmptyStringOr(data.labelStart, \"\"),\n labelStartWidth: parseIntOr(data.labelStartWidth, 0),\n labelStartHeight: parseIntOr(data.labelStartHeight, 0)\n };\n\n /*\n * We need to enhance the props with the extracted size and position\n * of the box cause there are missing at the props update. A better\n * solution would be overriding the props setter to do it there, but\n * the language doesn't allow it while targetting ES5.\n * TODO: We need to figure out a more consistent solution.\n */\n\n return {\n ...props,\n // Enhance the props extracting the box size and position.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n ...Line.extractBoxSizeAndPosition(props.startPosition, props.endPosition)\n };\n}\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport interface LineMovedEvent {\n item: Line;\n startPosition: LineProps[\"startPosition\"];\n endPosition: LineProps[\"endPosition\"];\n}\n\nexport default class Line extends Item<LineProps> {\n protected circleRadius = 8;\n // To control if the line movement is enabled.\n protected moveMode: boolean = false;\n // To control if the line is moving.\n protected isMoving: boolean = false;\n\n // Event manager for moved events.\n public readonly lineMovedEventManager = new TypedEvent<LineMovedEvent>();\n // List of references to clean the event listeners.\n protected readonly lineMovedEventDisposables: Disposable[] = [];\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n protected debouncedStartPositionMovementSave = debounce(\n 500, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n const startPosition = { x, y };\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n startPosition,\n endPosition: this.props.endPosition\n });\n }\n );\n // This property will store the function\n // to clean the movement listener.\n protected removeStartPositionMovement: Function | null = null;\n\n /**\n * Start the movement funtionality for the start position.\n * @param element Element to move inside its container.\n */\n protected initStartPositionMovementListener(\n element: HTMLElement,\n container: HTMLElement\n ): void {\n this.removeStartPositionMovement = addMovementListener(\n element,\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n // Calculate the center of the circle.\n x += this.circleRadius - this.props.viewportOffsetX / 2;\n y += this.circleRadius - this.props.viewportOffsetY / 2;\n\n const startPosition = { x, y };\n\n this.isMoving = true;\n this.props = {\n ...this.props,\n startPosition\n };\n\n // Run the end function.\n this.debouncedStartPositionMovementSave(x, y);\n },\n container\n );\n }\n /**\n * Stop the movement fun\n */\n private stopStartPositionMovementListener(): void {\n if (this.removeStartPositionMovement) {\n this.removeStartPositionMovement();\n this.removeStartPositionMovement = null;\n }\n }\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n protected debouncedEndPositionMovementSave = debounce(\n 500, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n const endPosition = { x, y };\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n endPosition,\n startPosition: this.props.startPosition\n });\n }\n );\n // This property will store the function\n // to clean the movement listener.\n protected removeEndPositionMovement: Function | null = null;\n\n /**\n * End the movement funtionality for the end position.\n * @param element Element to move inside its container.\n */\n protected initEndPositionMovementListener(\n element: HTMLElement,\n container: HTMLElement\n ): void {\n this.removeEndPositionMovement = addMovementListener(\n element,\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n // Calculate the center of the circle.\n x += this.circleRadius - this.props.viewportOffsetX / 2;\n y += this.circleRadius - this.props.viewportOffsetY / 2;\n\n this.isMoving = true;\n this.props = {\n ...this.props,\n endPosition: { x, y }\n };\n\n // Run the end function.\n this.debouncedEndPositionMovementSave(x, y);\n },\n container\n );\n }\n /**\n * Stop the movement function.\n */\n private stopEndPositionMovementListener(): void {\n if (this.removeEndPositionMovement) {\n this.removeEndPositionMovement();\n this.removeEndPositionMovement = null;\n }\n }\n\n /**\n * @override\n */\n public constructor(props: LineProps, meta: ItemMeta) {\n /*\n * We need to override the constructor cause we need to obtain the\n * box size and position from the start and finish points of the line.\n */\n super(\n {\n ...props,\n ...Line.extractBoxSizeAndPosition(\n props.startPosition,\n props.endPosition\n )\n },\n {\n ...meta\n },\n true\n );\n\n this.moveMode = meta.editMode;\n this.init();\n\n super.resizeElement(\n Math.max(props.width, props.viewportOffsetX),\n Math.max(props.height, props.viewportOffsetY)\n );\n }\n\n /**\n * Classic and protected version of the setter of the `props` property.\n * Useful to override it from children classes.\n * @param newProps\n * @override Item.setProps\n */\n public setProps(newProps: LineProps) {\n super.setProps({\n ...newProps,\n ...Line.extractBoxSizeAndPosition(\n newProps.startPosition,\n newProps.endPosition\n )\n });\n }\n\n /**\n * Classic and protected version of the setter of the `meta` property.\n * Useful to override it from children classes.\n * @param newMetadata\n * @override Item.setMeta\n */\n public setMeta(newMetadata: ItemMeta) {\n this.moveMode = newMetadata.editMode;\n super.setMeta({\n ...newMetadata,\n lineMode: true\n });\n }\n\n /**\n * @override\n * To create the item's DOM representation.\n * @return Item.\n */\n protected createDomElement(): HTMLElement {\n const element: HTMLDivElement = document.createElement(\"div\");\n element.className = \"line\";\n\n let {\n x, // Box x\n y, // Box y\n width, // Box width\n height, // Box height\n lineWidth, // Line thickness,\n viewportOffsetX, // viewport width,\n viewportOffsetY, // viewport heigth,\n startPosition, // Line start position\n endPosition, // Line end position\n color // Line color\n } = this.props;\n\n width = width + viewportOffsetX;\n height = height + viewportOffsetY;\n\n const x1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n const x2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n // Set SVG size.\n svg.setAttribute(\"width\", `${width + lineWidth}`);\n svg.setAttribute(\"height\", `${height + lineWidth}`);\n\n const line = document.createElementNS(svgNS, \"line\");\n line.setAttribute(\"x1\", `${x1}`);\n line.setAttribute(\"y1\", `${y1}`);\n line.setAttribute(\"x2\", `${x2}`);\n line.setAttribute(\"y2\", `${y2}`);\n line.setAttribute(\"stroke\", color || \"black\");\n line.setAttribute(\"stroke-width\", `${lineWidth}`);\n\n svg.append(line);\n element.append(svg);\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n if (element.parentElement != null) {\n element.parentElement.style.cursor = \"default\";\n }\n\n let {\n x, // Box x\n y, // Box y\n width, // Box width\n height, // Box height\n lineWidth, // Line thickness\n viewportOffsetX, // viewport width,\n viewportOffsetY, // viewport heigth,\n startPosition, // Line start position\n endPosition, // Line end position\n color // Line color\n } = this.props;\n\n width = width + viewportOffsetX;\n height = height + viewportOffsetY;\n\n const x1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n const x2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n const svgs = element.getElementsByTagName(\"svg\");\n\n if (svgs.length > 0) {\n const svg = svgs.item(0);\n\n if (svg != null) {\n // Set SVG size.\n svg.setAttribute(\"width\", `${width + lineWidth}`);\n svg.setAttribute(\"height\", `${height + lineWidth}`);\n\n const lines = svg.getElementsByTagNameNS(svgNS, \"line\");\n\n if (lines.length > 0) {\n const line = lines.item(0);\n\n if (line != null) {\n line.setAttribute(\"x1\", `${x1}`);\n line.setAttribute(\"y1\", `${y1}`);\n line.setAttribute(\"x2\", `${x2}`);\n line.setAttribute(\"y2\", `${y2}`);\n line.setAttribute(\"stroke\", color || \"black\");\n line.setAttribute(\"stroke-width\", `${lineWidth}`);\n }\n }\n }\n }\n\n if (this.moveMode) {\n let startCircle: HTMLElement = document.createElement(\"div\");\n let endCircle: HTMLElement = document.createElement(\"div\");\n\n if (this.isMoving) {\n const circlesStart = element.getElementsByClassName(\n \"visual-console-item-line-circle-start\"\n );\n if (circlesStart.length > 0) {\n const circle = circlesStart.item(0) as HTMLElement;\n if (circle) startCircle = circle;\n }\n const circlesEnd = element.getElementsByClassName(\n \"visual-console-item-line-circle-end\"\n );\n if (circlesEnd.length > 0) {\n const circle = circlesEnd.item(0) as HTMLElement;\n if (circle) endCircle = circle;\n }\n }\n\n startCircle.classList.add(\n \"visual-console-item-line-circle\",\n \"visual-console-item-line-circle-start\"\n );\n startCircle.style.width = `${this.circleRadius * 2}px`;\n startCircle.style.height = `${this.circleRadius * 2}px`;\n startCircle.style.borderRadius = \"50%\";\n startCircle.style.backgroundColor = `${color}`;\n startCircle.style.position = \"absolute\";\n startCircle.style.left = `${x1 - this.circleRadius}px`;\n startCircle.style.top = `${y1 - this.circleRadius}px`;\n startCircle.style.cursor = `move`;\n\n endCircle.classList.add(\n \"visual-console-item-line-circle\",\n \"visual-console-item-line-circle-end\"\n );\n endCircle.style.width = `${this.circleRadius * 2}px`;\n endCircle.style.height = `${this.circleRadius * 2}px`;\n endCircle.style.borderRadius = \"50%\";\n endCircle.style.backgroundColor = `${color}`;\n endCircle.style.position = \"absolute\";\n endCircle.style.left = `${x2 - this.circleRadius}px`;\n endCircle.style.top = `${y2 - this.circleRadius}px`;\n endCircle.style.cursor = `move`;\n\n if (element.parentElement !== null) {\n const circles = element.parentElement.getElementsByClassName(\n \"visual-console-item-line-circle\"\n );\n while (circles.length > 0) {\n const circle = circles.item(0);\n if (circle) circle.remove();\n }\n\n element.parentElement.appendChild(startCircle);\n element.parentElement.appendChild(endCircle);\n }\n\n // Init the movement listeners.\n this.initStartPositionMovementListener(\n startCircle,\n this.elementRef.parentElement as HTMLElement\n );\n this.initEndPositionMovementListener(\n endCircle,\n this.elementRef.parentElement as HTMLElement\n );\n } else if (!this.moveMode) {\n this.stopStartPositionMovementListener();\n // Remove circles.\n if (element.parentElement !== null) {\n const circles = element.parentElement.getElementsByClassName(\n \"visual-console-item-line-circle\"\n );\n\n while (circles.length > 0) {\n const circle = circles.item(0);\n if (circle) circle.remove();\n }\n }\n } else {\n this.stopStartPositionMovementListener();\n }\n }\n\n /**\n * Extract the size and position of the box from\n * the start and the finish of the line.\n * @param props Item properties.\n */\n public static extractBoxSizeAndPosition(\n startPosition: Position,\n endPosition: Position\n ): Size & Position {\n return {\n width: Math.abs(startPosition.x - endPosition.x),\n height: Math.abs(startPosition.y - endPosition.y),\n x: Math.min(startPosition.x, endPosition.x),\n y: Math.min(startPosition.y, endPosition.y)\n };\n }\n\n /**\n * Update the position into the properties and move the DOM container.\n * @param x Horizontal axis position.\n * @param y Vertical axis position.\n * @override item function\n */\n public move(x: number, y: number): void {\n super.moveElement(x, y);\n const startIsLeft =\n this.props.startPosition.x - this.props.endPosition.x <= 0;\n const startIsTop =\n this.props.startPosition.y - this.props.endPosition.y <= 0;\n\n const start = {\n x: startIsLeft ? x : this.props.width + x,\n y: startIsTop ? y : this.props.height + y\n };\n\n const end = {\n x: startIsLeft ? this.props.width + x : x,\n y: startIsTop ? this.props.height + y : y\n };\n\n this.props = {\n ...this.props,\n startPosition: start,\n endPosition: end\n };\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n * @override Item.remove\n */\n public remove(): void {\n // Clear the item's event listeners.\n this.stopStartPositionMovementListener();\n // Call the parent's .remove()\n super.remove();\n }\n\n /**\n * To add an event handler to the movement of visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n *\n * @override Item.onMoved\n */\n public onLineMovementFinished(\n listener: Listener<LineMovedEvent>\n ): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.lineMovedEventManager.on(listener);\n this.lineMovedEventDisposables.push(disposable);\n\n return disposable;\n }\n}\n","import { AnyObject, Position, ItemMeta } from \"../lib/types\";\nimport { debounce, notEmptyStringOr, parseIntOr } from \"../lib\";\nimport { ItemType } from \"../Item\";\nimport Line, { LineProps, linePropsDecoder } from \"./Line\";\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport interface NetworkLinkProps extends LineProps {\n // Overrided properties.\n type: number;\n labelStart: string;\n labelEnd: string;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function networkLinkPropsDecoder(\n data: AnyObject\n): NetworkLinkProps | never {\n return {\n ...linePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.NETWORK_LINK,\n viewportOffsetX: 0,\n viewportOffsetY: 0,\n labelEnd: notEmptyStringOr(data.labelEnd, \"\"),\n labelEndWidth: parseIntOr(data.labelEndWidth, 0),\n labelEndHeight: parseIntOr(data.labelEndHeight, 0),\n labelStart: notEmptyStringOr(data.labelStart, \"\"),\n labelStartWidth: parseIntOr(data.labelStartWidth, 0),\n labelStartHeight: parseIntOr(data.labelStartHeight, 0)\n };\n}\n\nexport default class NetworkLink extends Line {\n /**\n * @override\n */\n public constructor(props: NetworkLinkProps, meta: ItemMeta) {\n /*\n * We need to override the constructor cause we need to obtain the\n * box size and position from the start and finish points of the line.\n */\n super(\n {\n ...props\n },\n {\n ...meta\n }\n );\n\n this.render();\n }\n\n /**\n * @override\n */\n protected debouncedStartPositionMovementSave = debounce(\n 50, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n\n const startPosition = { x, y };\n\n // Re-Paint after move.\n this.render();\n\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n startPosition,\n endPosition: this.props.endPosition\n });\n }\n );\n\n protected debouncedEndPositionMovementSave = debounce(\n 50, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n const endPosition = { x, y };\n\n // Re-Paint after move.\n this.render();\n\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n endPosition,\n startPosition: this.props.startPosition\n });\n }\n );\n\n protected updateDomElement(element: HTMLElement): void {\n if (this.itemProps.ratio != null) {\n this.itemProps.x /= this.itemProps.ratio;\n this.itemProps.y /= this.itemProps.ratio;\n }\n\n super.updateDomElement(element);\n\n let {\n x, // Box x\n y, // Box y\n lineWidth, // Line thickness\n viewportOffsetX, // viewport width,\n viewportOffsetY, // viewport heigth,\n startPosition, // Line start position\n endPosition, // Line end position\n color, // Line color\n labelEnd,\n labelStart,\n labelEndWidth,\n labelEndHeight,\n labelStartWidth,\n labelStartHeight\n } = this.props;\n\n if (this.itemProps.ratio != null) {\n this.itemProps.x *= this.itemProps.ratio;\n this.itemProps.y *= this.itemProps.ratio;\n }\n\n const svgs = element.getElementsByTagName(\"svg\");\n let line;\n let svg;\n\n if (svgs.length > 0) {\n svg = svgs.item(0);\n\n if (svg != null) {\n // Set SVG size.\n const lines = svg.getElementsByTagNameNS(svgNS, \"line\");\n let groups = svg.getElementsByTagNameNS(svgNS, \"g\");\n while (groups.length > 0) {\n groups[0].remove();\n }\n\n if (lines.length > 0) {\n line = lines.item(0);\n }\n }\n } else {\n // No line or svg, no more actions are required.\n return;\n }\n\n if (svg == null || line == null) {\n // No more actionas are required.\n return;\n }\n\n // Font size and text adjustments.\n const fontsize = 10;\n const adjustment = 25;\n\n const lineX1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const lineY1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n const lineX2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const lineY2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n let x1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n let y1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n let x2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n let y2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n // Calculate angle (rotation).\n let rad = Math.atan2(lineY2 - lineY1, lineX2 - lineX1);\n let g = (rad * 180) / Math.PI;\n\n // Calculate effective 'text' box sizes.\n const fontheight = 25;\n if (labelStartWidth <= 0) {\n let lines = labelStart.split(\"<br>\");\n labelStartWidth = 0;\n lines.forEach(l => {\n if (l.length > labelStartWidth) {\n labelStartWidth = l.length * fontsize;\n }\n });\n if (labelStartHeight <= 0) {\n labelStartHeight = lines.length * fontheight;\n }\n }\n\n if (labelEndWidth <= 0) {\n let lines = labelEnd.split(\"<br>\");\n labelEndWidth = 0;\n lines.forEach(l => {\n if (l.length > labelEndWidth) {\n labelEndWidth = l.length * fontsize;\n }\n });\n if (labelEndHeight <= 0) {\n labelEndHeight = lines.length * fontheight;\n }\n }\n\n if (x1 < x2) {\n // x1 on left of x2.\n x1 += adjustment;\n x2 -= adjustment + labelEndWidth;\n }\n\n if (x1 > x2) {\n // x1 on right of x2.\n x1 -= adjustment + labelStartWidth;\n x2 += adjustment;\n }\n\n if (y1 < y2) {\n // y1 on y2.\n y1 += adjustment;\n y2 -= adjustment + labelEndHeight;\n }\n\n if (y1 > y2) {\n // y1 under y2.\n y1 -= adjustment + labelStartHeight;\n y2 += adjustment;\n }\n\n if (typeof color == \"undefined\") {\n color = \"#000\";\n }\n\n // Clean.\n if (element.parentElement !== null) {\n const labels = element.parentElement.getElementsByClassName(\n \"vc-item-nl-label\"\n );\n while (labels.length > 0) {\n const label = labels.item(0);\n if (label) label.remove();\n }\n\n const arrows = element.parentElement.getElementsByClassName(\n \"vc-item-nl-arrow\"\n );\n while (arrows.length > 0) {\n const arrow = arrows.item(0);\n if (arrow) arrow.remove();\n }\n }\n\n let arrowSize = lineWidth * 2;\n\n let arrowPosX = lineX1 + (lineX2 - lineX1) / 2 - arrowSize;\n let arrowPosY = lineY1 + (lineY2 - lineY1) / 2 - arrowSize;\n\n let arrowStart: HTMLElement = document.createElement(\"div\");\n arrowStart.classList.add(\"vc-item-nl-arrow\");\n arrowStart.style.position = \"absolute\";\n arrowStart.style.border = `${arrowSize}px solid transparent`;\n arrowStart.style.borderBottom = `${arrowSize}px solid ${color}`;\n arrowStart.style.left = `${arrowPosX}px`;\n arrowStart.style.top = `${arrowPosY}px`;\n arrowStart.style.transform = `rotate(${90 + g}deg)`;\n\n let arrowEnd: HTMLElement = document.createElement(\"div\");\n arrowEnd.classList.add(\"vc-item-nl-arrow\");\n arrowEnd.style.position = \"absolute\";\n arrowEnd.style.border = `${arrowSize}px solid transparent`;\n arrowEnd.style.borderBottom = `${arrowSize}px solid ${color}`;\n arrowEnd.style.left = `${arrowPosX}px`;\n arrowEnd.style.top = `${arrowPosY}px`;\n arrowEnd.style.transform = `rotate(${270 + g}deg)`;\n\n if (element.parentElement !== null) {\n element.parentElement.appendChild(arrowStart);\n element.parentElement.appendChild(arrowEnd);\n }\n\n if (labelStart != \"\") {\n let htmlLabelStart: HTMLElement = document.createElement(\"div\");\n\n try {\n htmlLabelStart.innerHTML = labelStart;\n htmlLabelStart.style.position = \"absolute\";\n htmlLabelStart.style.left = `${x1}px`;\n htmlLabelStart.style.top = `${y1}px`;\n htmlLabelStart.style.width = `${labelStartWidth}px`;\n htmlLabelStart.style.border = `2px solid ${color}`;\n\n htmlLabelStart.classList.add(\"vc-item-nl-label\", \"label-start\");\n } catch (error) {\n console.error(error);\n }\n\n if (element.parentElement !== null) {\n element.parentElement.appendChild(htmlLabelStart);\n }\n }\n\n if (labelEnd != \"\") {\n let htmlLabelEnd: HTMLElement = document.createElement(\"div\");\n\n try {\n htmlLabelEnd.innerHTML = labelEnd;\n htmlLabelEnd.style.position = \"absolute\";\n htmlLabelEnd.style.left = `${x2}px`;\n htmlLabelEnd.style.top = `${y2}px`;\n htmlLabelEnd.style.width = `${labelEndWidth}px`;\n htmlLabelEnd.style.border = `2px solid ${color}`;\n\n htmlLabelEnd.classList.add(\"vc-item-nl-label\", \"label-end\");\n } catch (error) {\n console.error(error);\n }\n\n if (element.parentElement !== null) {\n element.parentElement.appendChild(htmlLabelEnd);\n }\n }\n }\n}\n","import { LinkedVisualConsoleProps, AnyObject } from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n parseIntOr,\n notEmptyStringOr,\n stringIsEmpty,\n decodeBase64,\n parseBoolean,\n t\n} from \"../lib\";\nimport Item, { ItemProps, itemBasePropsDecoder, ItemType } from \"../Item\";\n\nexport type GroupProps = {\n type: ItemType.GROUP_ITEM;\n groupId: number;\n imageSrc: string | null; // URL?\n statusImageSrc: string | null;\n showStatistics: boolean;\n html?: string | null;\n} & ItemProps &\n LinkedVisualConsoleProps;\n\nfunction extractHtml(data: AnyObject): string | null {\n if (!stringIsEmpty(data.html)) return data.html;\n if (!stringIsEmpty(data.encodedHtml)) return decodeBase64(data.encodedHtml);\n return null;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the group props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function groupPropsDecoder(data: AnyObject): GroupProps | never {\n if (\n (typeof data.imageSrc !== \"string\" || data.imageSrc.length === 0) &&\n data.encodedHtml === null\n ) {\n throw new TypeError(\"invalid image src.\");\n }\n if (parseIntOr(data.groupId, null) === null) {\n throw new TypeError(\"invalid group Id.\");\n }\n\n const showStatistics = parseBoolean(data.showStatistics);\n const html = showStatistics ? extractHtml(data) : null;\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.GROUP_ITEM,\n groupId: parseInt(data.groupId),\n imageSrc: notEmptyStringOr(data.imageSrc, null),\n statusImageSrc: notEmptyStringOr(data.statusImageSrc, null),\n showStatistics,\n html,\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\nexport default class Group extends Item<GroupProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"group\";\n\n if (!this.props.showStatistics && this.props.statusImageSrc !== null) {\n // Icon with status.\n element.style.backgroundImage = `url(${this.props.statusImageSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n } else if (this.props.showStatistics && this.props.html != null) {\n // Stats table.\n element.style.backgroundImage = \"none\";\n element.innerHTML = this.props.html;\n }\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (!this.props.showStatistics && this.props.statusImageSrc !== null) {\n // Icon with status.\n element.style.backgroundImage = `url(${this.props.statusImageSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n element.innerHTML = \"\";\n } else if (this.props.showStatistics && this.props.html != null) {\n // Stats table.\n element.style.backgroundImage = \"none\";\n element.innerHTML = this.props.html;\n }\n }\n}\n","import \"./styles.css\";\n\nimport {\n LinkedVisualConsoleProps,\n AnyObject,\n Size,\n ItemMeta\n} from \"../../lib/types\";\nimport {\n linkedVCPropsDecoder,\n parseIntOr,\n parseBoolean,\n prefixedCssRules,\n notEmptyStringOr,\n humanDate,\n humanTime,\n t\n} from \"../../lib\";\nimport Item, { ItemProps, itemBasePropsDecoder, ItemType } from \"../../Item\";\n\nexport type ClockProps = {\n type: ItemType.CLOCK;\n clockType: \"analogic\" | \"digital\";\n clockFormat: \"datetime\" | \"time\";\n clockTimezone: string;\n clockTimezoneOffset: number; // Offset of the timezone to UTC in seconds.\n showClockTimezone: boolean;\n color?: string | null;\n} & ItemProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param clockType Raw value.\n */\nconst parseClockType = (clockType: unknown): ClockProps[\"clockType\"] => {\n switch (clockType) {\n case \"analogic\":\n case \"digital\":\n return clockType;\n default:\n return \"analogic\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param clockFormat Raw value.\n */\nconst parseClockFormat = (clockFormat: unknown): ClockProps[\"clockFormat\"] => {\n switch (clockFormat) {\n case \"datetime\":\n case \"time\":\n return clockFormat;\n default:\n return \"datetime\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the clock props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function clockPropsDecoder(data: AnyObject): ClockProps | never {\n if (\n typeof data.clockTimezone !== \"string\" ||\n data.clockTimezone.length === 0\n ) {\n throw new TypeError(\"invalid timezone.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.CLOCK,\n clockType: parseClockType(data.clockType),\n clockFormat: parseClockFormat(data.clockFormat),\n clockTimezone: data.clockTimezone,\n clockTimezoneOffset: parseIntOr(data.clockTimezoneOffset, 0),\n showClockTimezone: parseBoolean(data.showClockTimezone),\n color: notEmptyStringOr(data.color, null),\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Clock extends Item<ClockProps> {\n public static readonly TICK_INTERVAL = 1000; // In ms.\n private intervalRef: number | null = null;\n\n public constructor(props: ClockProps, meta: ItemMeta) {\n // Call the superclass constructor.\n super(props, meta);\n\n /* The item is already loaded and inserted into the DOM.\n * The class properties are now initialized.\n * Now you can modify the item, add event handlers, timers, etc.\n */\n\n /* The use of the arrow function is important here. startTick will\n * use the function passed as an argument to call the global setInterval\n * function. The interval, timeout or event functions, among other, are\n * called into another execution loop and using a different context.\n * The arrow functions, unlike the classic functions, doesn't create\n * their own context (this), so their context at execution time will be\n * use the current context at the declaration time.\n * http://es6-features.org/#Lexicalthis\n */\n this.startTick(\n () => {\n // Replace the old element with the updated date.\n this.childElementRef.innerHTML = this.createClock().innerHTML;\n },\n /* The analogic clock doesn't need to tick,\n * but it will be refreshed every 20 seconds\n * to avoid a desync caused by page freezes.\n */\n this.props.clockType === \"analogic\" ? 20000 : Clock.TICK_INTERVAL\n );\n }\n\n /**\n * Wrap a window.clearInterval call.\n */\n private stopTick(): void {\n if (this.intervalRef !== null) {\n window.clearInterval(this.intervalRef);\n this.intervalRef = null;\n }\n }\n\n /**\n * Wrap a window.setInterval call.\n * @param handler Function to be called every time the interval\n * timer is reached.\n * @param interval Number in milliseconds for the interval timer.\n */\n private startTick(\n handler: TimerHandler,\n interval: number = Clock.TICK_INTERVAL\n ): void {\n this.stopTick();\n this.intervalRef = window.setInterval(handler, interval);\n }\n\n /**\n * Create a element which contains the DOM representation of the item.\n * @return DOM Element.\n * @override\n */\n protected createDomElement(): HTMLElement | never {\n return this.createClock();\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n const { width: newWidth, height: newHeight } = this.getElementSize(\n this.props.width,\n this.props.height\n );\n\n if (this.props.clockType === \"digital\") {\n if (this.meta.isBeingResized === false) {\n super.resizeElement(this.props.width, this.props.height);\n }\n element.classList.replace(\"analogic-clock\", \"digital-clock\");\n } else {\n if (this.meta.isBeingResized === false) {\n super.resizeElement(newWidth, newHeight);\n }\n element.classList.replace(\"digital-clock\", \"analogic-clock\");\n }\n element.innerHTML = this.createDomElement().innerHTML;\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n * @override\n */\n public remove(): void {\n // Clear the interval.\n this.stopTick();\n // Call to the parent clean function.\n super.remove();\n }\n\n /**\n * @override Item.resizeElement\n * Resize the DOM content container.\n * @param width\n * @param height\n */\n public resizeElement(width: number, height: number): void {\n // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n const { width: newWidth, height: newHeight } = this.getElementSize(\n width,\n height\n );\n\n // Re-render the item to force it calculate a new font size.\n if (this.props.clockType === \"digital\") {\n super.resizeElement(width, height);\n // Replace the old element with the updated date.\n //this.childElementRef.innerHTML = this.createClock().innerHTML;\n } else {\n super.resizeElement(newWidth, newHeight);\n }\n }\n\n /**\n * Create a element which contains a representation of a clock.\n * It choose between the clock types.\n * @return DOM Element.\n * @throws Error.\n */\n private createClock(): HTMLElement | never {\n switch (this.props.clockType) {\n case \"analogic\":\n return this.createAnalogicClock();\n case \"digital\":\n return this.createDigitalClock();\n default:\n throw new Error(\"invalid clock type.\");\n }\n }\n\n /**\n * Create a element which contains a representation of an analogic clock.\n * @return DOM Element.\n */\n private createAnalogicClock(): HTMLElement {\n const svgNS = \"http://www.w3.org/2000/svg\";\n const colors = {\n watchFace: \"#FFFFF0\",\n watchFaceBorder: \"#242124\",\n mark: \"#242124\",\n handDark: \"#242124\",\n handLight: \"#525252\",\n secondHand: \"#DC143C\"\n };\n\n const { width, height } = this.getElementSize(); // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n\n // Calculate font size to adapt the font to the item size.\n const baseTimeFontSize = 20; // Per 100px of width.\n const dateFontSizeMultiplier = 0.5;\n const dateFontSize =\n (baseTimeFontSize * dateFontSizeMultiplier * width) / 100;\n\n const div = document.createElement(\"div\");\n div.className = \"analogic-clock\";\n div.style.width = `${width}px`;\n div.style.height = `${height}px`;\n\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n svg.setAttribute(\"viewBox\", \"0 0 100 100\");\n\n // Clock face.\n const clockFace = document.createElementNS(svgNS, \"g\");\n clockFace.setAttribute(\"class\", \"clockface\");\n const clockFaceBackground = document.createElementNS(svgNS, \"circle\");\n clockFaceBackground.setAttribute(\"cx\", \"50\");\n clockFaceBackground.setAttribute(\"cy\", \"50\");\n clockFaceBackground.setAttribute(\"r\", \"48\");\n clockFaceBackground.setAttribute(\"fill\", colors.watchFace);\n clockFaceBackground.setAttribute(\"stroke\", colors.watchFaceBorder);\n clockFaceBackground.setAttribute(\"stroke-width\", \"2\");\n clockFaceBackground.setAttribute(\"stroke-linecap\", \"round\");\n // Insert the clockface background into the clockface group.\n clockFace.append(clockFaceBackground);\n\n // Timezone complication.\n const city = this.getHumanTimezone();\n if (city.length > 0) {\n const timezoneComplication = document.createElementNS(svgNS, \"text\");\n timezoneComplication.setAttribute(\"text-anchor\", \"middle\");\n timezoneComplication.setAttribute(\"font-size\", \"8\");\n timezoneComplication.setAttribute(\n \"transform\",\n \"translate(30 50) rotate(90)\" // Rotate to counter the clock rotation.\n );\n timezoneComplication.setAttribute(\"fill\", colors.mark);\n timezoneComplication.textContent = city;\n clockFace.append(timezoneComplication);\n }\n\n // Marks group.\n const marksGroup = document.createElementNS(svgNS, \"g\");\n marksGroup.setAttribute(\"class\", \"marks\");\n // Build the 12 hours mark.\n const mainMarkGroup = document.createElementNS(svgNS, \"g\");\n mainMarkGroup.setAttribute(\"class\", \"mark\");\n mainMarkGroup.setAttribute(\"transform\", \"translate(50 50)\");\n const mark1a = document.createElementNS(svgNS, \"line\");\n mark1a.setAttribute(\"x1\", \"36\");\n mark1a.setAttribute(\"y1\", \"0\");\n mark1a.setAttribute(\"x2\", \"46\");\n mark1a.setAttribute(\"y2\", \"0\");\n mark1a.setAttribute(\"stroke\", colors.mark);\n mark1a.setAttribute(\"stroke-width\", \"5\");\n const mark1b = document.createElementNS(svgNS, \"line\");\n mark1b.setAttribute(\"x1\", \"36\");\n mark1b.setAttribute(\"y1\", \"0\");\n mark1b.setAttribute(\"x2\", \"46\");\n mark1b.setAttribute(\"y2\", \"0\");\n mark1b.setAttribute(\"stroke\", colors.watchFace);\n mark1b.setAttribute(\"stroke-width\", \"1\");\n // Insert the 12 mark lines into their group.\n mainMarkGroup.append(mark1a, mark1b);\n // Insert the main mark into the marks group.\n marksGroup.append(mainMarkGroup);\n // Build the rest of the marks.\n for (let i = 1; i < 60; i++) {\n const mark = document.createElementNS(svgNS, \"line\");\n mark.setAttribute(\"y1\", \"0\");\n mark.setAttribute(\"y2\", \"0\");\n mark.setAttribute(\"stroke\", colors.mark);\n mark.setAttribute(\"transform\", `translate(50 50) rotate(${i * 6})`);\n\n if (i % 5 === 0) {\n mark.setAttribute(\"x1\", \"38\");\n mark.setAttribute(\"x2\", \"46\");\n mark.setAttribute(\"stroke-width\", i % 15 === 0 ? \"2\" : \"1\");\n } else {\n mark.setAttribute(\"x1\", \"42\");\n mark.setAttribute(\"x2\", \"46\");\n mark.setAttribute(\"stroke-width\", \"0.5\");\n }\n\n // Insert the mark into the marks group.\n marksGroup.append(mark);\n }\n\n /* Clock hands */\n\n // Hour hand.\n const hourHand = document.createElementNS(svgNS, \"g\");\n hourHand.setAttribute(\"class\", \"hour-hand\");\n hourHand.setAttribute(\"transform\", \"translate(50 50)\");\n // This will go back and will act like a border.\n const hourHandA = document.createElementNS(svgNS, \"line\");\n hourHandA.setAttribute(\"class\", \"hour-hand-a\");\n hourHandA.setAttribute(\"x1\", \"0\");\n hourHandA.setAttribute(\"y1\", \"0\");\n hourHandA.setAttribute(\"x2\", \"30\");\n hourHandA.setAttribute(\"y2\", \"0\");\n hourHandA.setAttribute(\"stroke\", colors.handLight);\n hourHandA.setAttribute(\"stroke-width\", \"4\");\n hourHandA.setAttribute(\"stroke-linecap\", \"round\");\n // This will go in front of the previous line.\n const hourHandB = document.createElementNS(svgNS, \"line\");\n hourHandB.setAttribute(\"class\", \"hour-hand-b\");\n hourHandB.setAttribute(\"x1\", \"0\");\n hourHandB.setAttribute(\"y1\", \"0\");\n hourHandB.setAttribute(\"x2\", \"29.9\");\n hourHandB.setAttribute(\"y2\", \"0\");\n hourHandB.setAttribute(\"stroke\", colors.handDark);\n hourHandB.setAttribute(\"stroke-width\", \"3.1\");\n hourHandB.setAttribute(\"stroke-linecap\", \"round\");\n // Append the elements to finish the hour hand.\n hourHand.append(hourHandA, hourHandB);\n\n // Minute hand.\n const minuteHand = document.createElementNS(svgNS, \"g\");\n minuteHand.setAttribute(\"class\", \"minute-hand\");\n minuteHand.setAttribute(\"transform\", \"translate(50 50)\");\n // This will go back and will act like a border.\n const minuteHandA = document.createElementNS(svgNS, \"line\");\n minuteHandA.setAttribute(\"class\", \"minute-hand-a\");\n minuteHandA.setAttribute(\"x1\", \"0\");\n minuteHandA.setAttribute(\"y1\", \"0\");\n minuteHandA.setAttribute(\"x2\", \"40\");\n minuteHandA.setAttribute(\"y2\", \"0\");\n minuteHandA.setAttribute(\"stroke\", colors.handLight);\n minuteHandA.setAttribute(\"stroke-width\", \"2\");\n minuteHandA.setAttribute(\"stroke-linecap\", \"round\");\n // This will go in front of the previous line.\n const minuteHandB = document.createElementNS(svgNS, \"line\");\n minuteHandB.setAttribute(\"class\", \"minute-hand-b\");\n minuteHandB.setAttribute(\"x1\", \"0\");\n minuteHandB.setAttribute(\"y1\", \"0\");\n minuteHandB.setAttribute(\"x2\", \"39.9\");\n minuteHandB.setAttribute(\"y2\", \"0\");\n minuteHandB.setAttribute(\"stroke\", colors.handDark);\n minuteHandB.setAttribute(\"stroke-width\", \"1.5\");\n minuteHandB.setAttribute(\"stroke-linecap\", \"round\");\n const minuteHandPin = document.createElementNS(svgNS, \"circle\");\n minuteHandPin.setAttribute(\"r\", \"3\");\n minuteHandPin.setAttribute(\"fill\", colors.handDark);\n // Append the elements to finish the minute hand.\n minuteHand.append(minuteHandA, minuteHandB, minuteHandPin);\n\n // Second hand.\n const secondHand = document.createElementNS(svgNS, \"g\");\n secondHand.setAttribute(\"class\", \"second-hand\");\n secondHand.setAttribute(\"transform\", \"translate(50 50)\");\n const secondHandBar = document.createElementNS(svgNS, \"line\");\n secondHandBar.setAttribute(\"x1\", \"0\");\n secondHandBar.setAttribute(\"y1\", \"0\");\n secondHandBar.setAttribute(\"x2\", \"46\");\n secondHandBar.setAttribute(\"y2\", \"0\");\n secondHandBar.setAttribute(\"stroke\", colors.secondHand);\n secondHandBar.setAttribute(\"stroke-width\", \"1\");\n secondHandBar.setAttribute(\"stroke-linecap\", \"round\");\n const secondHandPin = document.createElementNS(svgNS, \"circle\");\n secondHandPin.setAttribute(\"r\", \"2\");\n secondHandPin.setAttribute(\"fill\", colors.secondHand);\n // Append the elements to finish the second hand.\n secondHand.append(secondHandBar, secondHandPin);\n\n // Pin.\n const pin = document.createElementNS(svgNS, \"circle\");\n pin.setAttribute(\"cx\", \"50\");\n pin.setAttribute(\"cy\", \"50\");\n pin.setAttribute(\"r\", \"0.3\");\n pin.setAttribute(\"fill\", colors.handDark);\n\n // Get the hand angles.\n const date = this.getOriginDate();\n const seconds = date.getSeconds();\n const minutes = date.getMinutes();\n const hours = date.getHours();\n const secAngle = (360 / 60) * seconds;\n const minuteAngle = (360 / 60) * minutes + (360 / 60) * (seconds / 60);\n const hourAngle = (360 / 12) * hours + (360 / 12) * (minutes / 60);\n // Set the clock time by moving the hands.\n hourHand.setAttribute(\"transform\", `translate(50 50) rotate(${hourAngle})`);\n minuteHand.setAttribute(\n \"transform\",\n `translate(50 50) rotate(${minuteAngle})`\n );\n secondHand.setAttribute(\n \"transform\",\n `translate(50 50) rotate(${secAngle})`\n );\n\n // Build the clock\n svg.append(clockFace, marksGroup, hourHand, minuteHand, secondHand, pin);\n // Rotate the clock to its normal position.\n svg.setAttribute(\"transform\", \"rotate(-90)\");\n\n /* Add the animation declaration to the container.\n * Since the animation keyframes need to know the\n * start angle, this angle is dynamic (current time),\n * and we can't edit keyframes through javascript\n * safely and with backwards compatibility, we need\n * to inject it.\n */\n div.innerHTML = `\n <style>\n @keyframes rotate-hour {\n from {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${hourAngle}deg)`\n ).join(\"\\n\")}\n }\n to {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${hourAngle + 360}deg)`\n ).join(\"\\n\")}\n }\n }\n @keyframes rotate-minute {\n from {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${minuteAngle}deg)`\n ).join(\"\\n\")}\n }\n to {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${minuteAngle + 360}deg)`\n ).join(\"\\n\")}\n }\n }\n @keyframes rotate-second {\n from {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${secAngle}deg)`\n ).join(\"\\n\")}\n }\n to {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${secAngle + 360}deg)`\n ).join(\"\\n\")}\n }\n }\n </style>\n `;\n // Add the clock to the container\n div.append(svg);\n\n // Date.\n if (this.props.clockFormat === \"datetime\") {\n const dateElem: HTMLSpanElement = document.createElement(\"span\");\n dateElem.className = \"date\";\n dateElem.textContent = humanDate(date, \"default\");\n dateElem.style.fontSize = `${dateFontSize}px`;\n if (this.props.color) dateElem.style.color = this.props.color;\n div.append(dateElem);\n }\n\n return div;\n }\n\n /**\n * Create a element which contains a representation of a digital clock.\n * @return DOM Element.\n */\n private createDigitalClock(): HTMLElement {\n const element: HTMLDivElement = document.createElement(\"div\");\n element.className = \"digital-clock\";\n\n const { width, height } = this.getElementSize(); // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n let modified = width;\n if (height < width) {\n modified = height;\n }\n\n // Calculate font size to adapt the font to the item size.\n const baseTimeFontSize = 35; // Per 100px of width.\n const dateFontSizeMultiplier = 0.5;\n const tzFontSizeMultiplier = 6 / this.props.clockTimezone.length;\n const timeFontSize = (baseTimeFontSize * modified) / 100;\n const dateFontSize =\n (baseTimeFontSize * dateFontSizeMultiplier * modified) / 100;\n const tzFontSize = Math.min(\n (baseTimeFontSize * tzFontSizeMultiplier * modified) / 100,\n (width / 100) * 10\n );\n\n // Date calculated using the original timezone.\n const date = this.getOriginDate();\n\n // Date.\n if (this.props.clockFormat === \"datetime\") {\n const dateElem: HTMLSpanElement = document.createElement(\"span\");\n dateElem.className = \"date\";\n dateElem.textContent = humanDate(date, \"default\");\n dateElem.style.fontSize = `${dateFontSize}px`;\n if (this.props.color) dateElem.style.color = this.props.color;\n element.append(dateElem);\n }\n\n // Time.\n const timeElem: HTMLSpanElement = document.createElement(\"span\");\n timeElem.className = \"time\";\n timeElem.textContent = humanTime(date);\n timeElem.style.fontSize = `${timeFontSize}px`;\n if (this.props.color) timeElem.style.color = this.props.color;\n element.append(timeElem);\n\n // City name.\n const city = this.getHumanTimezone();\n if (city.length > 0) {\n const tzElem: HTMLSpanElement = document.createElement(\"span\");\n tzElem.className = \"timezone\";\n tzElem.textContent = city;\n tzElem.style.fontSize = `${tzFontSize}px`;\n if (this.props.color) tzElem.style.color = this.props.color;\n element.append(tzElem);\n }\n\n return element;\n }\n\n /**\n * Generate the current date using the timezone offset stored into the properties.\n * @return The current date.\n */\n private getOriginDate(initialDate: Date | null = null): Date {\n const d = initialDate ? initialDate : new Date();\n const targetTZOffset = this.props.clockTimezoneOffset * 1000; // In ms.\n const localTZOffset = d.getTimezoneOffset() * 60 * 1000; // In ms.\n const utimestamp = d.getTime() + targetTZOffset + localTZOffset;\n\n return new Date(utimestamp);\n }\n\n /**\n * Extract a human readable city name from the timezone text.\n * @param timezone Timezone text.\n */\n public getHumanTimezone(timezone: string = this.props.clockTimezone): string {\n const [, city = \"\"] = timezone.split(\"/\");\n return city.replace(\"_\", \" \");\n }\n\n /**\n * Generate a element size using the current size and the default values.\n * @return The size.\n */\n private getElementSize(\n width: number = this.props.width,\n height: number = this.props.height\n ): Size {\n switch (this.props.clockType) {\n case \"analogic\": {\n let diameter = 100; // Default value.\n\n if (width > 0 && height > 0) {\n diameter = Math.min(width, height);\n } else if (width > 0) {\n diameter = width;\n } else if (height > 0) {\n diameter = height;\n }\n\n let extraHeigth = 0;\n if (this.props.clockFormat === \"datetime\") {\n extraHeigth = height / 8;\n }\n\n return {\n width: diameter,\n height: diameter + extraHeigth\n };\n }\n case \"digital\": {\n if (width > 0 && height > 0) {\n // The proportion of the clock should be (width = height / 2) aproximately.\n height = width / 2 < height ? width / 2 : height;\n } else if (width > 0) {\n height = width / 2;\n } else if (height > 0) {\n // The proportion of the clock should be (height * 2 = width) aproximately.\n width = height * 2;\n } else {\n width = 100; // Default value.\n height = 50; // Default value.\n }\n\n return {\n width,\n height\n };\n }\n default:\n throw new Error(\"invalid clock type.\");\n }\n }\n}\n","import { AnyObject } from \"../lib/types\";\nimport { parseIntOr, notEmptyStringOr, t } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\ninterface BoxProps extends ItemProps {\n // Overrided properties.\n readonly type: ItemType.BOX_ITEM;\n label: null;\n isLinkEnabled: false;\n parentId: null;\n aclGroupId: null;\n // Custom properties.\n borderWidth: number;\n borderColor: string | null;\n fillColor: string | null;\n fillTransparent: boolean | null;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function boxPropsDecoder(data: AnyObject): BoxProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.BOX_ITEM,\n label: null,\n isLinkEnabled: false,\n parentId: null,\n aclGroupId: null,\n // Custom properties.\n borderWidth: parseIntOr(data.borderWidth, 0),\n borderColor: notEmptyStringOr(data.borderColor, null),\n fillColor: notEmptyStringOr(data.fillColor, null),\n fillTransparent: data.fillTransparent\n };\n}\n\nexport default class Box extends Item<BoxProps> {\n protected createDomElement(): HTMLElement {\n const box: HTMLDivElement = document.createElement(\"div\");\n box.className = \"box\";\n // To prevent this item to expand beyond its parent.\n box.style.boxSizing = \"border-box\";\n\n if (this.props.fillTransparent) {\n box.style.backgroundColor = \"transparent\";\n } else {\n if (this.props.fillColor) {\n box.style.backgroundColor = this.props.fillColor;\n }\n }\n\n // Border.\n if (this.props.borderWidth > 0) {\n box.style.borderStyle = \"solid\";\n // Control the max width to prevent this item to expand beyond its parent.\n const maxBorderWidth = Math.min(this.props.width, this.props.height) / 2;\n const borderWidth = Math.min(this.props.borderWidth, maxBorderWidth);\n box.style.borderWidth = `${borderWidth}px`;\n\n if (this.props.borderColor) {\n box.style.borderColor = this.props.borderColor;\n }\n }\n\n return box;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (this.props.fillTransparent) {\n element.style.backgroundColor = \"transparent\";\n } else {\n if (this.props.fillColor) {\n element.style.backgroundColor = this.props.fillColor;\n }\n }\n\n // Border.\n if (this.props.borderWidth > 0) {\n element.style.borderStyle = \"solid\";\n // Control the max width to prevent this item to expand beyond its parent.\n const maxBorderWidth = Math.min(this.props.width, this.props.height) / 2;\n const borderWidth = Math.min(this.props.borderWidth, maxBorderWidth);\n element.style.borderWidth = `${borderWidth}px`;\n\n if (this.props.borderColor) {\n element.style.borderColor = this.props.borderColor;\n }\n }\n }\n}\n","import { LinkedVisualConsoleProps, AnyObject } from \"../lib/types\";\nimport { linkedVCPropsDecoder } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type LabelProps = {\n type: ItemType.LABEL;\n} & ItemProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the label props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function labelPropsDecoder(data: AnyObject): LabelProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.LABEL,\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Label extends Item<LabelProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"label\";\n element.innerHTML = this.getLabelWithMacrosReplaced();\n\n return element;\n }\n\n /**\n * @override Item.createLabelDomElement\n * Create a new label for the visual console item.\n * @return Item label.\n */\n public createLabelDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"visual-console-item-label\";\n // Always return an empty label.\n return element;\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n parseIntOr,\n modulePropsDecoder,\n replaceMacros\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type SimpleValueProps = {\n type: ItemType.SIMPLE_VALUE;\n valueType: \"string\" | \"image\";\n value: string;\n} & (\n | {\n processValue: \"none\";\n }\n | {\n processValue: \"avg\" | \"max\" | \"min\";\n period: number;\n }\n) &\n ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw value type.\n * @param valueType Raw value.\n */\nconst parseValueType = (valueType: unknown): SimpleValueProps[\"valueType\"] => {\n switch (valueType) {\n case \"string\":\n case \"image\":\n return valueType;\n default:\n return \"string\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw process value.\n * @param processValue Raw value.\n */\nconst parseProcessValue = (\n processValue: unknown\n): SimpleValueProps[\"processValue\"] => {\n switch (processValue) {\n case \"none\":\n case \"avg\":\n case \"max\":\n case \"min\":\n return processValue;\n default:\n return \"none\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the simple value props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function simpleValuePropsDecoder(\n data: AnyObject\n): SimpleValueProps | never {\n if (typeof data.value !== \"string\" || data.value.length === 0) {\n throw new TypeError(\"invalid value\");\n }\n\n const processValue = parseProcessValue(data.processValue);\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.SIMPLE_VALUE,\n valueType: parseValueType(data.valueType),\n value: data.value,\n ...(processValue === \"none\"\n ? { processValue }\n : { processValue, period: parseIntOr(data.period, 0) }), // Object spread. It will merge the properties of the two objects.\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class SimpleValue extends Item<SimpleValueProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"simple-value\";\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n if (this.props.valueType === \"image\") {\n const img = document.createElement(\"img\");\n img.src = this.props.value;\n element.append(img);\n } else {\n // Add the value to the label and show it.\n let text = this.props.value;\n let label = this.getLabelWithMacrosReplaced();\n if (label.length > 0) {\n text = replaceMacros([{ macro: /\\(?_VALUE_\\)?/i, value: text }], label);\n }\n\n element.innerHTML = text;\n }\n\n return element;\n }\n\n /**\n * Generate a element size\n * using the current size and the default values.\n * @return The size.\n */ protected createLabelDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"visual-console-item-label\";\n // Always return an empty label.\n return element;\n }\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import { arc as arcFactory } from \"d3-shape\";\n\nimport {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n notEmptyStringOr,\n parseIntOr,\n parseFloatOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type PercentileProps = {\n type: ItemType.PERCENTILE_BAR;\n percentileType:\n | \"progress-bar\"\n | \"bubble\"\n | \"circular-progress-bar\"\n | \"circular-progress-bar-alt\";\n valueType: \"percent\" | \"value\";\n minValue: number | null;\n maxValue: number | null;\n color: string | null;\n labelColor: string | null;\n value: number | null;\n unit: string | null;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw type value.\n * @param type Raw value.\n */\nfunction extractPercentileType(\n type: unknown\n): PercentileProps[\"percentileType\"] {\n switch (type) {\n case \"progress-bar\":\n case \"bubble\":\n case \"circular-progress-bar\":\n case \"circular-progress-bar-alt\":\n return type;\n default:\n case ItemType.PERCENTILE_BAR:\n return \"progress-bar\";\n case ItemType.PERCENTILE_BUBBLE:\n return \"bubble\";\n case ItemType.CIRCULAR_PROGRESS_BAR:\n return \"circular-progress-bar\";\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n return \"circular-progress-bar-alt\";\n }\n}\n\n/**\n * Extract a valid enum value from a raw value type value.\n * @param type Raw value.\n */\nfunction extractValueType(valueType: unknown): PercentileProps[\"valueType\"] {\n switch (valueType) {\n case \"percent\":\n case \"value\":\n return valueType;\n default:\n return \"percent\";\n }\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the percentile props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function percentilePropsDecoder(\n data: AnyObject\n): PercentileProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.PERCENTILE_BAR,\n percentileType: extractPercentileType(data.percentileType || data.type),\n valueType: extractValueType(data.valueType),\n minValue: parseIntOr(data.minValue, null),\n maxValue: parseIntOr(data.maxValue, null),\n color: notEmptyStringOr(data.color, null),\n labelColor: notEmptyStringOr(data.labelColor, null),\n value: parseFloatOr(data.value, null),\n unit: notEmptyStringOr(data.unit, null),\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport default class Percentile extends Item<PercentileProps> {\n protected createDomElement(): HTMLElement {\n const colors = {\n background: \"#000000\",\n progress: this.props.color || \"#000000\",\n text: this.props.labelColor || \"#bcbcbc\"\n };\n // Progress.\n const progress = this.getProgress();\n // Main element.\n const element = document.createElement(\"div\");\n\n var formatValue;\n if (this.props.value != null) {\n if (Intl) {\n formatValue = Intl.NumberFormat(\"en-EN\").format(this.props.value);\n } else {\n formatValue = this.props.value;\n }\n }\n\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n\n switch (this.props.percentileType) {\n case \"progress-bar\":\n {\n const backgroundRect = document.createElementNS(svgNS, \"rect\");\n backgroundRect.setAttribute(\"fill\", colors.background);\n backgroundRect.setAttribute(\"fill-opacity\", \"0.5\");\n backgroundRect.setAttribute(\"width\", \"100%\");\n backgroundRect.setAttribute(\"height\", \"100%\");\n backgroundRect.setAttribute(\"rx\", \"5\");\n backgroundRect.setAttribute(\"ry\", \"5\");\n const progressRect = document.createElementNS(svgNS, \"rect\");\n progressRect.setAttribute(\"fill\", colors.progress);\n progressRect.setAttribute(\"fill-opacity\", \"1\");\n progressRect.setAttribute(\"width\", `${progress}%`);\n progressRect.setAttribute(\"height\", \"100%\");\n progressRect.setAttribute(\"rx\", \"5\");\n progressRect.setAttribute(\"ry\", \"5\");\n const text = document.createElementNS(svgNS, \"text\");\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"alignment-baseline\", \"middle\");\n text.setAttribute(\"font-size\", \"15\");\n text.setAttribute(\"font-family\", \"lato\");\n text.setAttribute(\"font-weight\", \"bold\");\n text.setAttribute(\"text-anchor\", `middle`);\n text.setAttribute(\"alignment-baseline\", `middle`);\n text.setAttribute(\"x\", `50%`);\n text.setAttribute(\"y\", `50%`);\n text.setAttribute(\"fill\", colors.text);\n\n if (this.props.valueType === \"value\") {\n text.style.fontSize = \"6pt\";\n\n text.textContent = this.props.unit\n ? `${formatValue} ${this.props.unit}`\n : `${formatValue}`;\n } else {\n text.textContent = `${progress}%`;\n }\n\n svg.setAttribute(\"width\", \"100%\");\n svg.setAttribute(\"height\", \"100%\");\n svg.append(backgroundRect, progressRect, text);\n }\n break;\n case \"bubble\":\n case \"circular-progress-bar\":\n case \"circular-progress-bar-alt\":\n {\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n svg.setAttribute(\"viewBox\", \"0 0 100 100\");\n\n if (this.props.percentileType === \"bubble\") {\n // Create and append the circles.\n const backgroundCircle = document.createElementNS(svgNS, \"circle\");\n backgroundCircle.setAttribute(\"transform\", \"translate(50 50)\");\n backgroundCircle.setAttribute(\"fill\", colors.background);\n backgroundCircle.setAttribute(\"fill-opacity\", \"0.5\");\n backgroundCircle.setAttribute(\"r\", \"50\");\n const progressCircle = document.createElementNS(svgNS, \"circle\");\n progressCircle.setAttribute(\"transform\", \"translate(50 50)\");\n progressCircle.setAttribute(\"fill\", colors.progress);\n progressCircle.setAttribute(\"fill-opacity\", \"1\");\n progressCircle.setAttribute(\"r\", `${progress / 2}`);\n\n svg.append(backgroundCircle, progressCircle);\n } else {\n // Create and append the circles.\n const arcProps = {\n innerRadius:\n this.props.percentileType === \"circular-progress-bar\" ? 30 : 0,\n outerRadius: 50,\n startAngle: 0,\n endAngle: Math.PI * 2\n };\n const arc = arcFactory();\n\n const backgroundCircle = document.createElementNS(svgNS, \"path\");\n backgroundCircle.setAttribute(\"transform\", \"translate(50 50)\");\n backgroundCircle.setAttribute(\"fill\", colors.background);\n backgroundCircle.setAttribute(\"fill-opacity\", \"0.5\");\n backgroundCircle.setAttribute(\"d\", `${arc(arcProps)}`);\n const progressCircle = document.createElementNS(svgNS, \"path\");\n progressCircle.setAttribute(\"transform\", \"translate(50 50)\");\n progressCircle.setAttribute(\"fill\", colors.progress);\n progressCircle.setAttribute(\"fill-opacity\", \"1\");\n progressCircle.setAttribute(\n \"d\",\n `${arc({\n ...arcProps,\n endAngle: arcProps.endAngle * (progress / 100)\n })}`\n );\n\n svg.append(backgroundCircle, progressCircle);\n }\n\n // Create and append the text.\n const text = document.createElementNS(svgNS, \"text\");\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"alignment-baseline\", \"middle\");\n text.setAttribute(\"font-size\", \"16\");\n text.setAttribute(\"font-family\", \"lato\");\n text.setAttribute(\"font-weight\", \"bold\");\n text.setAttribute(\"fill\", colors.text);\n\n if (this.props.valueType === \"value\" && this.props.value != null) {\n // Show value and unit in 1 (no unit) or 2 lines.\n if (this.props.unit && this.props.unit.length > 0) {\n const value = document.createElementNS(svgNS, \"tspan\");\n value.setAttribute(\"x\", \"0\");\n value.setAttribute(\"dy\", \"1em\");\n value.textContent = `${formatValue}`;\n value.style.fontSize = \"8pt\";\n const unit = document.createElementNS(svgNS, \"tspan\");\n unit.setAttribute(\"x\", \"0\");\n unit.setAttribute(\"dy\", \"1em\");\n unit.textContent = `${this.props.unit}`;\n unit.style.fontSize = \"8pt\";\n text.append(value, unit);\n text.setAttribute(\"transform\", \"translate(50 33)\");\n } else {\n text.textContent = `${formatValue}`;\n text.style.fontSize = \"8pt\";\n text.setAttribute(\"transform\", \"translate(50 50)\");\n }\n } else {\n // Percentage.\n text.textContent = `${progress}%`;\n text.setAttribute(\"transform\", \"translate(50 50)\");\n }\n\n svg.append(text);\n }\n break;\n }\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n svg.setAttribute(\"opacity\", \"0.2\");\n }\n\n if (svg !== null) element.append(svg);\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (this.meta.isBeingResized === false) {\n this.resizeElement(this.props.width, this.props.height);\n }\n element.innerHTML = this.createDomElement().innerHTML;\n }\n\n /**\n * To update the content element.\n * @override resizeElement\n */\n public resizeElement(width: number, height: number): void {\n if (this.props.percentileType === \"progress-bar\") {\n super.resizeElement(width, 35);\n } else {\n super.resizeElement(width, width);\n }\n }\n\n /**\n * To update the content element.\n * @override resize\n */\n public resize(width: number): void {\n this.resizeElement(width, width);\n let height = this.props.maxValue || 0;\n if (this.props.percentileType === \"progress-bar\") {\n height = 35;\n }\n super.setProps({\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n width,\n height\n });\n }\n\n private getProgress(): number {\n const minValue = this.props.minValue || 0;\n const maxValue = this.props.maxValue || 100;\n const value = this.props.value == null ? 0 : this.props.value;\n\n if (value <= minValue) return 0;\n else if (value >= maxValue) return 100;\n else return Math.trunc(((value - minValue) / (maxValue - minValue)) * 100);\n }\n}\n","import { AnyObject } from \"../lib/types\";\nimport {\n stringIsEmpty,\n notEmptyStringOr,\n decodeBase64,\n parseIntOr,\n t\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\nimport { FormContainer, InputGroup } from \"../Form\";\nimport fontAwesomeIcon from \"../lib/FontAwesomeIcon\";\nimport {\n faCircleNotch,\n faExclamationCircle\n} from \"@fortawesome/free-solid-svg-icons\";\n\nexport type ServiceProps = {\n type: ItemType.SERVICE;\n serviceId: number;\n imageSrc: string | null;\n statusImageSrc: string | null;\n encodedTitle: string | null;\n} & ItemProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the service props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function servicePropsDecoder(data: AnyObject): ServiceProps | never {\n if (data.imageSrc !== null) {\n if (\n typeof data.statusImageSrc !== \"string\" ||\n data.imageSrc.statusImageSrc === 0\n ) {\n throw new TypeError(\"invalid status image src.\");\n }\n } else {\n if (stringIsEmpty(data.encodedTitle)) {\n throw new TypeError(\"missing encode tittle content.\");\n }\n }\n\n if (parseIntOr(data.serviceId, null) === null) {\n throw new TypeError(\"invalid service id.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.SERVICE,\n serviceId: data.serviceId,\n imageSrc: notEmptyStringOr(data.imageSrc, null),\n statusImageSrc: notEmptyStringOr(data.statusImageSrc, null),\n encodedTitle: notEmptyStringOr(data.encodedTitle, null)\n };\n}\n\nexport default class Service extends Item<ServiceProps> {\n public createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"service\";\n\n if (this.props.statusImageSrc !== null) {\n element.style.background = `url(${this.props.statusImageSrc}) no-repeat`;\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n if (this.props.encodedTitle !== null) {\n element.className = \"service image forced_title\";\n element.setAttribute(\"data-use_title_for_force_title\", \"1\");\n element.setAttribute(\n \"data-title\",\n decodeBase64(this.props.encodedTitle)\n );\n }\n } else if (this.props.encodedTitle !== null) {\n element.innerHTML = decodeBase64(this.props.encodedTitle);\n }\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (this.props.statusImageSrc !== null) {\n element.style.background = `url(${this.props.statusImageSrc}) no-repeat`;\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n if (this.props.encodedTitle !== null) {\n element.className = \"service image forced_title\";\n element.setAttribute(\"data-use_title_for_force_title\", \"1\");\n element.setAttribute(\n \"data-title\",\n decodeBase64(this.props.encodedTitle)\n );\n }\n element.innerHTML = \"\";\n } else if (this.props.encodedTitle !== null) {\n element.innerHTML = decodeBase64(this.props.encodedTitle);\n }\n }\n}\n","import { AnyObject, WithModuleProps } from \"../lib/types\";\n\nimport { modulePropsDecoder, parseIntOr, stringIsEmpty, t } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type OdometerProps = {\n type: ItemType.ODOMETER;\n value: number;\n status: string;\n title: string | null;\n titleModule: string;\n titleColor: string;\n odometerType: string;\n thresholds: string | any;\n minMaxValue: string;\n} & ItemProps &\n WithModuleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the events history props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function odometerPropsDecoder(data: AnyObject): OdometerProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.ODOMETER,\n value: parseIntOr(data.value, 0),\n status: stringIsEmpty(data.status) ? \"#B2B2B2\" : data.status,\n titleColor: stringIsEmpty(data.titleColor) ? \"#3f3f3f\" : data.titleColor,\n title: stringIsEmpty(data.title) ? \"\" : data.title,\n titleModule: stringIsEmpty(data.titleModule) ? \"\" : data.titleModule,\n thresholds: stringIsEmpty(data.thresholds) ? \"\" : data.thresholds,\n minMaxValue: stringIsEmpty(data.minMaxValue) ? \"\" : data.minMaxValue,\n odometerType: stringIsEmpty(data.odometerType)\n ? \"percent\"\n : data.odometerType,\n ...modulePropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Odometer extends Item<OdometerProps> {\n protected createDomElement(): HTMLElement {\n let lineWarning = \"\";\n let lineWarning2 = \"\";\n let lineCritical = \"\";\n let lineCritical2 = \"\";\n\n if (this.props.thresholds !== \"\") {\n const thresholds = JSON.parse(this.props.thresholds);\n\n if (thresholds !== null) {\n if (thresholds.min_warning != 0 || thresholds.max_warning != 0) {\n lineWarning = this.getCoords(\n thresholds.min_warning,\n this.props.width / 2\n );\n if (thresholds.max_warning == 0) {\n lineWarning2 = this.getCoords(100, this.props.width / 2);\n } else {\n lineWarning2 = this.getCoords(\n thresholds.max_warning,\n this.props.width / 2\n );\n }\n }\n\n if (thresholds.min_critical != 0 || thresholds.max_critical != 0) {\n lineCritical = this.getCoords(\n thresholds.min_critical,\n this.props.width / 2\n );\n if (thresholds.max_critical == 0) {\n lineCritical2 = this.getCoords(100, this.props.width / 2);\n } else {\n lineCritical2 = this.getCoords(\n thresholds.max_critical,\n this.props.width / 2\n );\n }\n }\n }\n }\n\n let percent = \"\";\n let number;\n // Float\n if (\n Number(this.props.value) === this.props.value &&\n this.props.value % 1 !== 0\n ) {\n number = this.props.value.toFixed(1);\n } else {\n if (this.props.minMaxValue === \"\") {\n percent = \" %\";\n } else {\n percent = this.getSubfix(this.props.value);\n }\n number = new Intl.NumberFormat(\"es\", {\n maximumSignificantDigits: 4,\n maximumFractionDigits: 3\n }).format(this.props.value);\n }\n\n var numb = number.match(/\\d*\\.\\d/);\n if (numb !== null) {\n number = numb[0];\n }\n\n const rotate = this.getRotate(this.props.value);\n\n let backgroundColor = document.getElementById(\n \"visual-console-container\"\n ) as HTMLElement;\n\n if (backgroundColor === null) {\n backgroundColor = document.getElementById(\n `visual-console-container-${this.props.cellId}`\n ) as HTMLElement;\n }\n\n if (backgroundColor.style.backgroundColor == \"\") {\n backgroundColor.style.backgroundColor = \"#fff\";\n }\n\n const anchoB = this.props.width * 0.7;\n\n const element = document.createElement(\"div\");\n element.className = \"odometer\";\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Odometer container.\n const odometerContainer = document.createElement(\"div\");\n odometerContainer.className = \"odometer-container\";\n\n // Central semicircle.\n const odometerA = document.createElement(\"div\");\n odometerA.className = \"odometer-a\";\n odometerA.style.backgroundColor = `${backgroundColor.style.backgroundColor}`;\n\n // Semicircle rotating with the value.\n const odometerB = document.createElement(\"div\");\n odometerB.className = \"odometer-b\";\n odometerB.id = `odometerB-${this.props.id}`;\n odometerB.style.backgroundColor = `${this.props.status}`;\n\n // Dark semicircle.\n const odometerC = document.createElement(\"div\");\n odometerC.className = \"odometer-c\";\n\n // Green outer semicircle.\n const gaugeE = document.createElement(\"div\");\n gaugeE.className = \"odometer-d\";\n\n const SVG_NS = \"http://www.w3.org/2000/svg\";\n // Portion of threshold warning\n if (lineWarning != \"\") {\n const svgWarning = document.createElementNS(SVG_NS, \"svg\");\n svgWarning.setAttributeNS(null, \"width\", \"100%\");\n svgWarning.setAttributeNS(null, \"height\", \"100%\");\n svgWarning.setAttributeNS(null, \"style\", \"position:absolute;z-index:1\");\n const pathWarning = document.createElementNS(SVG_NS, \"path\");\n pathWarning.setAttributeNS(null, \"id\", `svgWarning-${this.props.id}`);\n pathWarning.setAttributeNS(\n null,\n \"d\",\n `M${this.props.width / 2},${this.props.width / 2}L${lineWarning}A${this\n .props.width / 2},${this.props.width / 2},0,0,1,${lineWarning2}Z`\n );\n pathWarning.setAttributeNS(null, \"class\", \"svg_warning\");\n svgWarning.appendChild(pathWarning);\n odometerContainer.appendChild(svgWarning);\n }\n\n // Portion of threshold critical\n if (lineCritical != \"\") {\n const svgCritical = document.createElementNS(SVG_NS, \"svg\");\n svgCritical.setAttributeNS(null, \"width\", \"100%\");\n svgCritical.setAttributeNS(null, \"height\", \"100%\");\n svgCritical.setAttributeNS(null, \"style\", \"position:absolute;z-index:2\");\n const pathCritical = document.createElementNS(SVG_NS, \"path\");\n pathCritical.setAttributeNS(null, \"id\", `svgCritical-${this.props.id}`);\n pathCritical.setAttributeNS(\n null,\n \"d\",\n `M${this.props.width / 2},${this.props.width / 2}L${lineCritical}A${this\n .props.width / 2},${this.props.width / 2},0,0,1,${lineCritical2}Z`\n );\n pathCritical.setAttributeNS(null, \"fill\", \"#E63C52\");\n svgCritical.appendChild(pathCritical);\n odometerContainer.appendChild(svgCritical);\n }\n\n // Text.\n const h1 = document.createElement(\"h1\");\n h1.innerText = number + percent;\n h1.style.fontSize = `${anchoB * 0.17}px`;\n h1.style.color = `${this.props.status}`;\n h1.style.lineHeight = \"0\";\n\n const h2 = document.createElement(\"h2\");\n if (this.props.title == \"\") {\n h2.textContent = this.truncateTitle(this.props.moduleName);\n } else {\n h2.textContent = this.truncateTitle(this.props.title);\n }\n h2.title = this.props.titleModule;\n h2.setAttribute(\"title\", this.props.titleModule);\n\n h2.style.fontSize = `${anchoB * 0.06}px`;\n h2.style.color = `${this.props.titleColor}`;\n h2.style.lineHeight = \"0\";\n\n let script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.onload = () => {\n odometerB.style.transform = `rotate(${rotate}turn)`;\n };\n var urlPandora = window.location.pathname.split(\"/\")[1];\n script.src = `${document.dir}/${urlPandora}/include/javascript/pandora_alerts.js`;\n odometerA.appendChild(h1);\n odometerA.appendChild(h2);\n odometerContainer.appendChild(odometerB);\n odometerContainer.appendChild(odometerC);\n odometerContainer.appendChild(gaugeE);\n odometerContainer.appendChild(odometerA);\n odometerContainer.appendChild(script);\n element.appendChild(odometerContainer);\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.createDomElement().innerHTML;\n\n let rotate = this.getRotate(this.props.value);\n\n const svgWarning = document.getElementById(`svgWarning-${this.props.id}`);\n if (svgWarning != null) {\n svgWarning.style.display = \"none\";\n }\n\n const svgCritical = document.getElementById(`svgCritical-${this.props.id}`);\n if (svgCritical != null) {\n svgCritical.style.display = \"none\";\n }\n\n setTimeout(() => {\n if (svgWarning != null) {\n svgWarning.style.display = \"block\";\n }\n\n if (svgCritical != null) {\n svgCritical.style.display = \"block\";\n }\n\n var odometerB = document.getElementById(`odometerB-${this.props.id}`);\n if (odometerB) {\n odometerB.style.transform = `rotate(${rotate}turn)`;\n }\n }, 500);\n }\n\n public resizeElement(width: number): void {\n super.resizeElement(width, width / 2);\n }\n\n /**\n * To update the content element.\n * @override resize\n */\n public resize(width: number): void {\n this.resizeElement(this.props.width);\n }\n\n private getRotate(value: number): number {\n let rotate = 0;\n if (this.props.minMaxValue === \"\") {\n rotate = value / 2 / 100;\n } else {\n const minMax = JSON.parse(this.props.minMaxValue);\n if (minMax[\"min\"] === value) {\n rotate = 0;\n } else if (minMax[\"max\"] === value) {\n rotate = 0.5;\n } else {\n const limit = minMax[\"max\"] - minMax[\"min\"];\n const valueMax = minMax[\"max\"] - value;\n rotate = (100 - (valueMax * 100) / limit) / 100 / 2;\n }\n }\n\n return rotate;\n }\n\n private getSubfix(value: number): string {\n let subfix = \"\";\n const length = (value + \"\").length;\n if (length > 3 && length <= 6) {\n subfix = \" K\";\n } else if (length > 6 && length <= 9) {\n subfix = \" M\";\n } else if (length > 9 && length <= 12) {\n subfix = \" G\";\n } else if (length > 12 && length <= 15) {\n subfix = \" T\";\n }\n\n return subfix;\n }\n\n private getCoords(percent: number, radio: number): string {\n if (this.props.minMaxValue !== \"\") {\n const minMax = JSON.parse(this.props.minMaxValue);\n if (minMax[\"min\"] === percent) {\n percent = 0;\n } else if (minMax[\"max\"] === percent || percent === 100) {\n percent = 100;\n } else {\n const limit = minMax[\"max\"] - minMax[\"min\"];\n let valueMax = minMax[\"max\"] - percent;\n percent = 100 - (valueMax * 100) / limit;\n }\n }\n\n percent = 180 - percent * 1.8;\n const x = radio + Math.cos((percent * Math.PI) / 180) * radio;\n const y = radio - Math.sin((percent * Math.PI) / 180) * radio;\n return `${x},${y}`;\n }\n\n private truncateTitle(title: any): string {\n if (title != null && title.length > 22) {\n const halfLength = title.length / 2;\n const diff = halfLength - 9;\n const stringBefore = title.substr(0, halfLength - diff);\n const stringAfter = title.substr(halfLength + diff);\n\n return `${stringBefore}...${stringAfter}`;\n } else {\n return title;\n }\n }\n}\n","import { AnyObject, Size, Position, WithModuleProps } from \"./lib/types\";\nimport {\n parseBoolean,\n sizePropsDecoder,\n parseIntOr,\n notEmptyStringOr,\n itemMetaDecoder,\n t,\n ellipsize,\n debounce\n} from \"./lib\";\nimport Item, {\n ItemType,\n ItemProps,\n ItemClickEvent,\n ItemRemoveEvent,\n ItemMovedEvent,\n ItemResizedEvent,\n ItemSelectionChangedEvent\n} from \"./Item\";\nimport StaticGraph, { staticGraphPropsDecoder } from \"./items/StaticGraph\";\nimport Icon, { iconPropsDecoder } from \"./items/Icon\";\nimport ColorCloud, { colorCloudPropsDecoder } from \"./items/ColorCloud\";\nimport NetworkLink, { networkLinkPropsDecoder } from \"./items/NetworkLink\";\nimport Group, { groupPropsDecoder } from \"./items/Group\";\nimport Clock, { clockPropsDecoder } from \"./items/Clock\";\nimport Box, { boxPropsDecoder } from \"./items/Box\";\nimport Line, { linePropsDecoder, LineMovedEvent } from \"./items/Line\";\nimport Label, { labelPropsDecoder } from \"./items/Label\";\nimport SimpleValue, { simpleValuePropsDecoder } from \"./items/SimpleValue\";\nimport EventsHistory, {\n eventsHistoryPropsDecoder\n} from \"./items/EventsHistory\";\nimport Percentile, { percentilePropsDecoder } from \"./items/Percentile\";\nimport TypedEvent, { Disposable, Listener } from \"./lib/TypedEvent\";\nimport DonutGraph, { donutGraphPropsDecoder } from \"./items/DonutGraph\";\nimport BarsGraph, { barsGraphPropsDecoder } from \"./items/BarsGraph\";\nimport ModuleGraph, { moduleGraphPropsDecoder } from \"./items/ModuleGraph\";\nimport Service, { servicePropsDecoder } from \"./items/Service\";\nimport Odometer, { odometerPropsDecoder } from \"./items/Odometer\";\nimport BasicChart, { basicChartPropsDecoder } from \"./items/BasicChart\";\n\n// TODO: Document.\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction itemInstanceFrom(data: AnyObject) {\n const type = parseIntOr(data.type, null);\n if (type == null) throw new TypeError(\"missing item type.\");\n\n const meta = itemMetaDecoder(data);\n\n switch (type as ItemType) {\n case ItemType.STATIC_GRAPH:\n return new StaticGraph(staticGraphPropsDecoder(data), meta);\n case ItemType.MODULE_GRAPH:\n return new ModuleGraph(moduleGraphPropsDecoder(data), meta);\n case ItemType.SIMPLE_VALUE:\n case ItemType.SIMPLE_VALUE_MAX:\n case ItemType.SIMPLE_VALUE_MIN:\n case ItemType.SIMPLE_VALUE_AVG:\n return new SimpleValue(simpleValuePropsDecoder(data), meta);\n case ItemType.PERCENTILE_BAR:\n case ItemType.PERCENTILE_BUBBLE:\n case ItemType.CIRCULAR_PROGRESS_BAR:\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n return new Percentile(percentilePropsDecoder(data), meta);\n case ItemType.LABEL:\n return new Label(labelPropsDecoder(data), meta);\n case ItemType.ICON:\n return new Icon(iconPropsDecoder(data), meta);\n case ItemType.SERVICE:\n return new Service(servicePropsDecoder(data), meta);\n case ItemType.GROUP_ITEM:\n return new Group(groupPropsDecoder(data), meta);\n case ItemType.BOX_ITEM:\n return new Box(boxPropsDecoder(data), meta);\n case ItemType.LINE_ITEM:\n return new Line(linePropsDecoder(data), meta);\n case ItemType.AUTO_SLA_GRAPH:\n return new EventsHistory(eventsHistoryPropsDecoder(data), meta);\n case ItemType.DONUT_GRAPH:\n return new DonutGraph(donutGraphPropsDecoder(data), meta);\n case ItemType.BARS_GRAPH:\n return new BarsGraph(barsGraphPropsDecoder(data), meta);\n case ItemType.CLOCK:\n return new Clock(clockPropsDecoder(data), meta);\n case ItemType.COLOR_CLOUD:\n return new ColorCloud(colorCloudPropsDecoder(data), meta);\n case ItemType.NETWORK_LINK:\n return new NetworkLink(networkLinkPropsDecoder(data), meta);\n case ItemType.ODOMETER:\n return new Odometer(odometerPropsDecoder(data), meta);\n case ItemType.BASIC_CHART:\n return new BasicChart(basicChartPropsDecoder(data), meta);\n default:\n throw new TypeError(\"item not found\");\n }\n}\n\n// TODO: Document.\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction decodeProps(data: AnyObject) {\n const type = parseIntOr(data.type, null);\n if (type == null) throw new TypeError(\"missing item type.\");\n\n switch (type as ItemType) {\n case ItemType.STATIC_GRAPH:\n return staticGraphPropsDecoder(data);\n case ItemType.MODULE_GRAPH:\n return moduleGraphPropsDecoder(data);\n case ItemType.SIMPLE_VALUE:\n case ItemType.SIMPLE_VALUE_MAX:\n case ItemType.SIMPLE_VALUE_MIN:\n case ItemType.SIMPLE_VALUE_AVG:\n return simpleValuePropsDecoder(data);\n case ItemType.PERCENTILE_BAR:\n case ItemType.PERCENTILE_BUBBLE:\n case ItemType.CIRCULAR_PROGRESS_BAR:\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n return percentilePropsDecoder(data);\n case ItemType.LABEL:\n return labelPropsDecoder(data);\n case ItemType.ICON:\n return iconPropsDecoder(data);\n case ItemType.SERVICE:\n return servicePropsDecoder(data);\n case ItemType.GROUP_ITEM:\n return groupPropsDecoder(data);\n case ItemType.BOX_ITEM:\n return boxPropsDecoder(data);\n case ItemType.LINE_ITEM:\n return linePropsDecoder(data);\n case ItemType.AUTO_SLA_GRAPH:\n return eventsHistoryPropsDecoder(data);\n case ItemType.DONUT_GRAPH:\n return donutGraphPropsDecoder(data);\n case ItemType.BARS_GRAPH:\n return barsGraphPropsDecoder(data);\n case ItemType.CLOCK:\n return clockPropsDecoder(data);\n case ItemType.COLOR_CLOUD:\n return colorCloudPropsDecoder(data);\n case ItemType.NETWORK_LINK:\n return networkLinkPropsDecoder(data);\n case ItemType.ODOMETER:\n return odometerPropsDecoder(data);\n case ItemType.BASIC_CHART:\n return basicChartPropsDecoder(data);\n default:\n throw new TypeError(\"decoder not found\");\n }\n}\n\n// Base properties.\nexport interface VisualConsoleProps extends Size {\n readonly id: number;\n name: string;\n groupId: number;\n backgroundURL: string | null; // URL?\n backgroundColor: string | null;\n isFavorite: boolean;\n relationLineWidth: number;\n maintenanceMode: MaintenanceModeInterface | null;\n gridSize: number | 10;\n gridSelected: boolean | false | false;\n}\n\nexport interface MaintenanceModeInterface {\n user: string;\n timestamp: number;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the Visual Console props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function visualConsolePropsDecoder(\n data: AnyObject\n): VisualConsoleProps | never {\n // Object destructuring: http://es6-features.org/#ObjectMatchingShorthandNotation\n const {\n id,\n name,\n groupId,\n backgroundURL,\n backgroundColor,\n isFavorite,\n relationLineWidth,\n maintenanceMode,\n gridSize,\n gridSelected\n } = data;\n\n if (id == null || isNaN(parseInt(id))) {\n throw new TypeError(\"invalid Id.\");\n }\n if (typeof name !== \"string\" || name.length === 0) {\n throw new TypeError(\"invalid name.\");\n }\n if (groupId == null || isNaN(parseInt(groupId))) {\n throw new TypeError(\"invalid group Id.\");\n }\n\n return {\n id: parseInt(id),\n name,\n groupId: parseInt(groupId),\n backgroundURL: notEmptyStringOr(backgroundURL, null),\n backgroundColor: notEmptyStringOr(backgroundColor, null),\n isFavorite: parseBoolean(isFavorite),\n relationLineWidth: parseIntOr(relationLineWidth, 0),\n maintenanceMode: maintenanceMode,\n gridSize: parseIntOr(gridSize, 10),\n gridSelected: false,\n ...sizePropsDecoder(data)\n };\n}\n\nexport default class VisualConsole {\n // Reference to the DOM element which will contain the items.\n private readonly containerRef: HTMLElement;\n // Properties.\n private _props: VisualConsoleProps;\n // Visual Console Item instances by their Id.\n private elementsById: {\n [key: number]: Item<ItemProps>;\n } = {};\n // Visual Console Item Ids.\n private elementIds: ItemProps[\"id\"][] = [];\n // Dictionary which store the created lines.\n private relations: {\n [key: string]: Line;\n } = {};\n\n // Dictionary which store the related items (by ID).\n private lineLinks: {\n [key: number]: { [key: number]: { [key: string]: number } };\n } = {};\n\n private lines: {\n [key: number]: { [key: string]: number };\n } = {};\n\n // Event manager for click events.\n private readonly clickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for double click events.\n private readonly dblClickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for move events.\n private readonly movedEventManager = new TypedEvent<ItemMovedEvent>();\n // Event manager for line move events.\n private readonly lineMovedEventManager = new TypedEvent<LineMovedEvent>();\n // Event manager for resize events.\n private readonly resizedEventManager = new TypedEvent<ItemResizedEvent>();\n // Event manager for remove events.\n private readonly selectionChangedEventManager = new TypedEvent<\n ItemSelectionChangedEvent\n >();\n // List of references to clean the event listeners.\n private readonly disposables: Disposable[] = [];\n\n /**\n * React to a click on an element.\n * @param e Event object.\n */\n private handleElementClick: (e: ItemClickEvent) => void = e => {\n this.clickEventManager.emit(e);\n // console.log(`Clicked element #${e.data.id}`, e);\n };\n\n /**\n * React to a double click on an element.\n * @param e Event object.\n */\n private handleElementDblClick: (e: ItemClickEvent) => void = e => {\n this.dblClickEventManager.emit(e);\n // console.log(`Double clicked element #${e.data.id}`, e);\n };\n\n /**\n * React to a movement on an element.\n * @param e Event object.\n */\n private handleElementMovement: (e: ItemMovedEvent) => void = e => {\n var type = e.item.itemProps.type;\n\n if (\n type !== 13 &&\n type !== 21 &&\n (typeof this.props.gridSelected === \"undefined\" ||\n this.props.gridSelected === false)\n ) {\n this.elements.forEach(item => {\n if (\n item.meta.isSelected === true &&\n e.item.itemProps.id !== item.itemProps.id &&\n item.props.type !== 13 &&\n item.props.type !== 21\n ) {\n const movementX = e.newPosition.x - e.item.props.x;\n const movementY = e.newPosition.y - e.item.props.y;\n\n let newX = item.props.x + movementX;\n let newY = item.props.y + movementY;\n\n if (newX > this.props.width) {\n newX = this.props.width;\n } else if (newX <= 0) {\n newX = 0;\n }\n\n if (newY > this.props.height) {\n newY = this.props.height;\n } else if (newY <= 0) {\n newY = 0;\n }\n\n item.moveElement(newX, newY);\n item.debouncedMovementSave(newX, newY);\n }\n });\n }\n\n if (type !== 13 && type !== 21 && this.props.gridSelected === true) {\n var gridSize = this.props.gridSize;\n var positionX = e.newPosition.x;\n var positionY = e.newPosition.y;\n if (positionX % gridSize !== 0 || positionY % gridSize !== 0) {\n var x = Math.floor(positionX / gridSize) * gridSize;\n var y = Math.floor(positionY / gridSize) * gridSize;\n let elemntSelected = document.getElementById(\n \"item-selected-move\"\n ) as HTMLElement;\n elemntSelected.setAttribute(\n \"style\",\n \"top:\" + y + \"px !important; left:\" + x + \"px !important\"\n );\n return;\n }\n }\n // Move their relation lines.\n const itemId = e.item.props.id;\n const relations = this.getItemRelations(itemId);\n\n relations.forEach(relation => {\n if (relation.parentId === itemId) {\n // Move the line start.\n relation.line.props = {\n ...relation.line.props,\n startPosition: this.getVisualCenter(e.newPosition, e.item)\n };\n } else if (relation.childId === itemId) {\n // Move the line end.\n relation.line.props = {\n ...relation.line.props,\n endPosition: this.getVisualCenter(e.newPosition, e.item)\n };\n }\n });\n\n // Move lines conneted with this item.\n this.updateLinesConnected(e.item.props, e.newPosition, false);\n\n // console.log(`Moved element #${e.item.props.id}`, e);\n };\n\n /**\n * React to a movement finished on an element.\n * @param e Event object.\n */\n private handleElementMovementFinished: (e: ItemMovedEvent) => void = e => {\n this.movedEventManager.emit(e);\n // Move lines conneted with this item.\n this.updateLinesConnected(e.item.props, e.newPosition, true);\n // console.log(`Movement finished for element #${e.item.props.id}`, e);\n };\n\n /**\n * Verifies if x,y are inside item coordinates.\n * @param x Coordinate X\n * @param y Coordinate Y\n * @param item ItemProps instance.\n */\n private coordinatesInItem(x: number, y: number, props: ItemProps) {\n if (\n props.type == ItemType.LINE_ITEM ||\n props.type == ItemType.NETWORK_LINK\n ) {\n return false;\n }\n\n if (\n x > props.x &&\n x < props.x + props.width &&\n y > props.y &&\n y < props.y + props.height\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * React to a line movement.\n * @param e Event object.\n */\n private handleLineElementMovementFinished: (\n e: LineMovedEvent\n ) => void = e => {\n // Update links.\n this.refreshLink(e.item);\n\n // Build line relationships between items and lines.\n this.lineMovedEventManager.emit(e);\n\n // console.log(`Movement finished for element #${e.item.props.id}`, e);\n };\n\n /**\n * React to a resizement on an element.\n * @param e Event object.\n */\n private handleElementResizement: (e: ItemResizedEvent) => void = e => {\n if (\n e.item.props.type !== 13 &&\n e.item.props.type !== 21 &&\n (typeof this.props.gridSelected === \"undefined\" ||\n this.props.gridSelected === false)\n ) {\n this.elements.forEach(item => {\n if (\n item.meta.isSelected === true &&\n e.item.itemProps.id !== item.itemProps.id &&\n item.props.type !== 13 &&\n item.props.type !== 21\n ) {\n item.setMeta({ isUpdating: true });\n // Resize the DOM element.\n item.resizeElement(e.newSize.width, e.newSize.height);\n // Run the save function.\n item.debouncedResizementSave(e.newSize.width, e.newSize.height);\n }\n });\n }\n // Move their relation lines.\n const item = e.item;\n const props = item.props;\n const itemId = props.id;\n const relations = this.getItemRelations(itemId);\n\n const position = {\n x: props.x,\n y: props.y\n };\n\n const meta = this.elementsById[itemId].meta;\n\n this.elementsById[itemId].meta = {\n ...meta,\n isUpdating: true\n };\n\n relations.forEach(relation => {\n if (relation.parentId === itemId) {\n // Move the line start.\n relation.line.props = {\n ...relation.line.props,\n startPosition: this.getVisualCenter(position, item)\n };\n } else if (relation.childId === itemId) {\n // Move the line end.\n relation.line.props = {\n ...relation.line.props,\n endPosition: this.getVisualCenter(position, item)\n };\n }\n });\n\n // console.log(`Resized element #${e.item.props.id}`, e);\n };\n\n /**\n * React to a finished resizement on an element.\n * @param e Event object.\n */\n private handleElementResizementFinished: (\n e: ItemResizedEvent\n ) => void = e => {\n this.resizedEventManager.emit(e);\n // console.log(`Resize fonished for element #${e.item.props.id}`, e);\n };\n\n /**\n * Clear some element references.\n * @param e Event object.\n */\n private handleElementRemove: (e: ItemRemoveEvent) => void = e => {\n // Remove the element from the list and its relations.\n this.elementIds = this.elementIds.filter(id => id !== e.item.props.id);\n delete this.elementsById[e.item.props.id];\n this.clearRelations(e.item.props.id);\n };\n\n /**\n * React to element selection change\n * @param e Event object.\n */\n private handleElementSelectionChanged: (\n e: ItemSelectionChangedEvent\n ) => void = e => {\n if (this.elements.filter(item => item.meta.isSelected == true).length > 0) {\n e.selected = true;\n } else {\n e.selected = false;\n }\n this.selectionChangedEventManager.emit(e);\n };\n\n // TODO: Document\n private handleContainerClick: (e: MouseEvent) => void = () => {\n this.unSelectItems();\n };\n\n /**\n * Refresh link for given line.\n *\n * @param line Line.\n */\n protected refreshLink(l: Line) {\n let line: number = l.props.id;\n let itemAtStart = 0;\n let itemAtEnd = 0;\n\n try {\n for (let i in this.elementsById) {\n if (\n this.coordinatesInItem(\n l.props.startPosition.x,\n l.props.startPosition.y,\n this.elementsById[i].props\n )\n ) {\n // Start position at element i.\n itemAtStart = parseInt(i);\n }\n\n if (\n this.coordinatesInItem(\n l.props.endPosition.x,\n l.props.endPosition.y,\n this.elementsById[i].props\n )\n ) {\n // Start position at element i.\n itemAtEnd = parseInt(i);\n }\n }\n\n if (this.lineLinks == null) {\n this.lineLinks = {};\n }\n\n if (this.lines == null) {\n this.lines = {};\n }\n\n if (itemAtStart == line) {\n itemAtStart = 0;\n }\n\n if (itemAtEnd == line) {\n itemAtEnd = 0;\n }\n\n // Initialize line if not registered.\n if (this.lines[line] == null) {\n this.lines[line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n }\n\n // Register 'start' side of the line.\n if (itemAtStart > 0) {\n // Initialize.\n if (this.lineLinks[itemAtStart] == null) {\n this.lineLinks[itemAtStart] = {};\n }\n\n // Assign.\n this.lineLinks[itemAtStart][line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n\n // Register line if not exists prviously.\n } else {\n // Clean previous line relationship.\n if (this.lines[line][\"start\"] > 0) {\n this.lineLinks[this.lines[line][\"start\"]][line][\"start\"] = 0;\n this.lines[line][\"start\"] = 0;\n }\n }\n\n if (itemAtEnd > 0) {\n if (this.lineLinks[itemAtEnd] == null) {\n this.lineLinks[itemAtEnd] = {};\n }\n\n this.lineLinks[itemAtEnd][line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n } else {\n // Clean previous line relationship.\n if (this.lines[line][\"end\"] > 0) {\n this.lineLinks[this.lines[line][\"end\"]][line][\"end\"] = 0;\n this.lines[line][\"end\"] = 0;\n }\n }\n\n this.lines[line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n\n // Cleanup.\n for (let i in this.lineLinks) {\n if (this.lineLinks[i][line]) {\n if (\n this.lineLinks[i][line].start == 0 &&\n this.lineLinks[i][line].end == 0\n ) {\n // Object not connected to a line.\n delete this.lineLinks[i][line];\n\n if (Object.keys(this.lineLinks[i]).length === 0) {\n delete this.lineLinks[i];\n }\n }\n\n if (\n (this.lineLinks[i][line].start != itemAtStart &&\n this.lineLinks[i][line].end == itemAtEnd) ||\n (this.lineLinks[i][line].start == itemAtStart &&\n this.lineLinks[i][line].end != itemAtEnd)\n ) {\n // Object not connected to a line.\n delete this.lineLinks[i][line];\n\n if (Object.keys(this.lineLinks[i]).length === 0) {\n delete this.lineLinks[i];\n }\n }\n }\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n /**\n * Updates lines connected to this item.\n *\n * @param item Item moved.\n * @param newPosition New location for item.\n * @param oldPosition Old location for item.\n * @param save Save to ajax or not.\n */\n protected updateLinesConnected(item: ItemProps, to: Position, save: boolean) {\n if (this.lineLinks[item.id] == null) {\n return;\n }\n\n Object.keys(this.lineLinks[item.id]).forEach(i => {\n let lineId = parseInt(i);\n const found = this.elementIds.indexOf(lineId);\n if (found === -1) {\n return;\n }\n let line = this.elementsById[lineId] as Line;\n\n if (line.props) {\n let startX = line.props.startPosition.x;\n let startY = line.props.startPosition.y;\n let endX = line.props.endPosition.x;\n let endY = line.props.endPosition.y;\n\n if (item.id == this.lineLinks[item.id][lineId][\"start\"]) {\n startX = to.x + item.width / 2;\n startY = to.y + item.height / 2;\n }\n\n if (item.id == this.lineLinks[item.id][lineId][\"end\"]) {\n endX = to.x + item.width / 2;\n endY = to.y + item.height / 2;\n }\n\n // Update line movement.\n this.updateElement({\n ...line.props,\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY\n });\n\n if (save) {\n let debouncedLinePositionSave = debounce(\n 500,\n (options: AnyObject) => {\n this.lineMovedEventManager.emit({\n item: options.line,\n startPosition: {\n x: options.startX,\n y: options.startY\n },\n endPosition: {\n x: options.endX,\n y: options.endY\n }\n });\n }\n );\n\n // Save line positon.\n debouncedLinePositionSave({\n line: line,\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY\n });\n }\n }\n });\n\n // Update parents...\n this.buildRelations(item.id, to.x + item.width / 2, to.y + item.height / 2);\n }\n\n public constructor(\n container: HTMLElement,\n props: AnyObject,\n items: AnyObject[]\n ) {\n this.containerRef = container;\n this._props = visualConsolePropsDecoder(props);\n\n // Force the first render.\n this.render();\n\n // Sort by id ASC\n items = items.sort(function(a, b) {\n if (a.id == null || b.id == null) return 0;\n else if (a.id > b.id) return 1;\n else return -1;\n });\n\n // Initialize the items.\n items.forEach(item => this.addElement(item, this));\n\n // Create lines.\n this.buildRelations();\n\n // Re-attach all connected lines if any.\n this.elements.forEach(item => {\n if (item instanceof Line) {\n this.refreshLink(item);\n }\n });\n\n this.containerRef.addEventListener(\"click\", this.handleContainerClick);\n }\n\n /**\n * Public accessor of the `elements` property.\n * @return Properties.\n */\n public get elements(): Item<ItemProps>[] {\n // Ensure the type cause Typescript doesn't know the filter removes null items.\n return this.elementIds\n .map(id => this.elementsById[id])\n .filter(_ => _ != null) as Item<ItemProps>[];\n }\n\n /**\n * To create a new element add it to the DOM.\n * @param item. Raw representation of the item's data.\n */\n public addElement(item: AnyObject, context: this = this) {\n try {\n if (item.ratio == null) {\n item.ratio = 1;\n }\n\n item.x *= item.ratio;\n item.y *= item.ratio;\n if (item.type == ItemType.LINE_ITEM) {\n item.startX *= item.ratio;\n item.startY *= item.ratio;\n item.endX *= item.ratio;\n item.endY *= item.ratio;\n }\n const itemInstance = itemInstanceFrom(item);\n\n // Add the item to the list.\n context.elementsById[itemInstance.props.id] = itemInstance;\n context.elementIds.push(itemInstance.props.id);\n // Item event handlers.\n itemInstance.onRemove(context.handleElementRemove);\n itemInstance.onSelectionChanged(context.handleElementSelectionChanged);\n itemInstance.onClick(context.handleElementClick);\n itemInstance.onDblClick(context.handleElementDblClick);\n\n // TODO:Continue\n if (itemInstance instanceof Line) {\n itemInstance.onLineMovementFinished(\n context.handleLineElementMovementFinished\n );\n this.refreshLink(itemInstance);\n } else {\n itemInstance.onMoved(context.handleElementMovement);\n itemInstance.onMovementFinished(context.handleElementMovementFinished);\n itemInstance.onResized(context.handleElementResizement);\n itemInstance.onResizeFinished(context.handleElementResizementFinished);\n }\n\n if (item.ratio !== 1 && item.type != ItemType.LINE_ITEM) {\n itemInstance.elementRef.style.transform = `scale(${\n item.ratio ? item.ratio : 1\n })`;\n itemInstance.elementRef.style.transformOrigin = \"left top\";\n itemInstance.elementRef.style.minWidth = \"max-content\";\n itemInstance.elementRef.style.minHeight = \"max-content\";\n }\n\n // Add the item to the DOM.\n context.containerRef.append(itemInstance.elementRef);\n return itemInstance;\n } catch (error) {\n console.error(\"Error creating a new element:\", (error as Error).message);\n }\n return;\n }\n\n /**\n * Public setter of the `elements` property.\n * @param items.\n */\n public updateElements(items: AnyObject[]): void {\n // Ensure the type cause Typescript doesn't know the filter removes null items.\n const itemIds = items\n .map(item => item.id || null)\n .filter(id => id != null) as number[];\n // Get the elements we should delete.\n const deletedIds = this.elementIds.filter(id => itemIds.indexOf(id) < 0);\n // Delete the elements.\n deletedIds.forEach(id => {\n if (this.elementsById[id] != null) {\n this.elementsById[id].remove();\n delete this.elementsById[id];\n }\n });\n // Replace the element ids.\n this.elementIds = itemIds;\n\n // Initialize the items.\n items.forEach(item => {\n if (item.id) {\n if (this.elementsById[item.id] == null) {\n // New item.\n this.addElement(item);\n } else {\n // Update item.\n try {\n if (item.ratio != null) {\n item.x *= item.ratio;\n item.y *= item.ratio;\n if (item.type == ItemType.LINE_ITEM) {\n item.startX *= item.ratio;\n item.startY *= item.ratio;\n item.endX *= item.ratio;\n item.endY *= item.ratio;\n }\n }\n this.elementsById[item.id].props = decodeProps(item);\n } catch (error) {\n console.error(\n \"Error updating an element:\",\n (error as Error).message\n );\n }\n }\n }\n });\n\n // Re-build relations.\n this.buildRelations();\n }\n\n /**\n * Public setter of the `element` property.\n * @param item.\n */\n public updateElement(item: AnyObject): void {\n // Update item.\n try {\n this.elementsById[item.id].props = {\n ...decodeProps(item)\n };\n } catch (error) {\n console.error(\"Error updating element:\", (error as Error).message);\n }\n\n // Re-build relations.\n this.buildRelations();\n }\n\n /**\n * Public accessor of the `props` property.\n * @return Properties.\n */\n public get props(): VisualConsoleProps {\n return { ...this._props }; // Return a copy.\n }\n\n /**\n * Public setter of the `props` property.\n * If the new props are different enough than the\n * stored props, a render would be fired.\n * @param newProps\n */\n public set props(newProps: VisualConsoleProps) {\n const prevProps = this.props;\n // Update the internal props.\n this._props = newProps;\n\n // From this point, things which rely on this.props can access to the changes.\n\n // Re-render.\n this.render(prevProps);\n }\n\n /**\n * Recreate or update the HTMLElement which represents the Visual Console into the DOM.\n * @param prevProps If exists it will be used to only DOM updates instead of a full replace.\n */\n public render(prevProps: VisualConsoleProps | null = null): void {\n if (prevProps) {\n if (prevProps.backgroundURL !== this.props.backgroundURL) {\n this.containerRef.style.backgroundImage =\n this.props.backgroundURL !== null\n ? `url(${this.props.backgroundURL})`\n : \"\";\n }\n if (this.props.backgroundColor != null)\n if (prevProps.backgroundColor !== this.props.backgroundColor) {\n this.containerRef.style.backgroundColor = this.props.backgroundColor;\n }\n if (this.sizeChanged(prevProps, this.props)) {\n this.resizeElement(this.props.width, this.props.height);\n }\n } else {\n if (this.props.backgroundURL)\n this.containerRef.style.backgroundImage =\n this.props.backgroundURL !== null\n ? `url(${this.props.backgroundURL})`\n : \"\";\n\n if (this.props.backgroundColor)\n this.containerRef.style.backgroundColor = this.props.backgroundColor;\n this.resizeElement(this.props.width, this.props.height);\n }\n }\n\n /**\n * Compare the previous and the new size and return\n * a boolean value in case the size changed.\n * @param prevSize\n * @param newSize\n * @return Whether the size changed or not.\n */\n public sizeChanged(prevSize: Size, newSize: Size): boolean {\n return (\n prevSize.width !== newSize.width || prevSize.height !== newSize.height\n );\n }\n\n /**\n * Resize the DOM container.\n * @param width\n * @param height\n */\n public resizeElement(width: number, height: number): void {\n this.containerRef.style.width = `${width}px`;\n this.containerRef.style.height = `${height}px`;\n }\n\n /**\n * Update the size into the properties and resize the DOM container.\n * @param width\n * @param height\n */\n public resize(width: number, height: number): void {\n this.props = {\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n width,\n height\n };\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n */\n public remove(): void {\n this.disposables.forEach(d => d.dispose()); // Arrow function.\n this.elements.forEach(e => e.remove()); // Arrow function.\n this.elementsById = {};\n this.elementIds = [];\n // Clear relations.\n this.clearRelations();\n // Remove the click event listener.\n this.containerRef.removeEventListener(\"click\", this.handleContainerClick);\n // Clean container.\n this.containerRef.innerHTML = \"\";\n }\n\n /**\n * Create line elements which connect the elements with their parents.\n *\n * When itemId is being moved, overwrite position of the 'parent' or 'child'\n * endpoints of the line, using X and Y values.\n */\n public buildRelations(itemId?: number, x?: number, y?: number): void {\n // Clear relations.\n this.clearRelations();\n // Add relations.\n this.elements.forEach(item => {\n if (item.props.parentId !== null) {\n const parent = this.elementsById[item.props.parentId];\n const child = this.elementsById[item.props.id];\n\n if (parent && child) {\n if (itemId != undefined) {\n if (item.props.parentId == itemId) {\n // Update parent line position.\n this.addRelationLine(parent, child, x, y);\n } else if (item.props.id == itemId) {\n // Update child line position.\n this.addRelationLine(parent, child, undefined, undefined, x, y);\n } else {\n this.addRelationLine(parent, child);\n }\n } else {\n // No movements default behaviour.\n this.addRelationLine(parent, child);\n }\n }\n }\n });\n }\n\n /**\n * @param itemId Optional identifier of a parent or child item.\n * Remove the line elements which connect the elements with their parents.\n */\n private clearRelations(itemId?: number): void {\n if (itemId != null) {\n for (let key in this.relations) {\n const ids = key.split(\"|\");\n const parentId = Number.parseInt(ids[0]);\n const childId = Number.parseInt(ids[1]);\n\n if (itemId === parentId || itemId === childId) {\n this.relations[key].remove();\n delete this.relations[key];\n }\n }\n } else {\n for (let key in this.relations) {\n this.relations[key].remove();\n delete this.relations[key];\n }\n }\n }\n\n /**\n * Retrieve the line element which represent the relation between items.\n * @param parentId Identifier of the parent item.\n * @param childId Itentifier of the child item.\n * @return The line element or nothing.\n */\n private getRelationLine(parentId: number, childId: number): Line | null {\n const identifier = `${parentId}|${childId}`;\n return this.relations[identifier] || null;\n }\n\n // TODO: Document.\n private getItemRelations(\n itemId: number\n ): {\n parentId: number;\n childId: number;\n line: Line;\n }[] {\n const itemRelations = [];\n\n for (let key in this.relations) {\n const ids = key.split(\"|\");\n const parentId = Number.parseInt(ids[0]);\n const childId = Number.parseInt(ids[1]);\n\n if (itemId === parentId || itemId === childId) {\n itemRelations.push({\n parentId,\n childId,\n line: this.relations[key]\n });\n }\n }\n\n return itemRelations;\n }\n\n /**\n * Retrieve the visual center of the item. It's ussually the center of the\n * content, like the label doesn't exist.\n * @param position Initial position.\n * @param element Element we want to use.\n */\n private getVisualCenter(\n position: Position,\n element: Item<ItemProps>\n ): Position {\n let ratio = 1;\n if (element.props.ratio != null) {\n ratio = element.props.ratio;\n }\n\n let x = position.x + (element.elementRef.clientWidth / 2) * ratio;\n let y = position.y + (element.elementRef.clientHeight / 2) * ratio;\n\n if (\n typeof element.props.label !== \"undefined\" ||\n element.props.label !== \"\" ||\n element.props.label !== null\n ) {\n switch (element.props.labelPosition) {\n case \"up\":\n y =\n position.y +\n ((element.elementRef.clientHeight +\n element.labelElementRef.clientHeight) /\n 2) *\n ratio;\n break;\n case \"down\":\n y =\n position.y +\n ((element.elementRef.clientHeight -\n element.labelElementRef.clientHeight) /\n 2) *\n ratio;\n break;\n case \"right\":\n x =\n position.x +\n ((element.elementRef.clientWidth -\n element.labelElementRef.clientWidth) /\n 2) *\n ratio;\n break;\n case \"left\":\n x =\n position.x +\n ((element.elementRef.clientWidth +\n element.labelElementRef.clientWidth) /\n 2) *\n ratio;\n break;\n }\n }\n\n return { x, y };\n }\n\n /**\n * Add a new line item to represent a relation between the items.\n * @param parent Parent item.\n * @param child Child item.\n * @return Whether the line was added or not.\n */\n private addRelationLine(\n parent: Item<ItemProps>,\n child: Item<ItemProps>,\n parentX?: number,\n parentY?: number,\n childX?: number,\n childY?: number\n ): Line {\n const identifier = `${parent.props.id}|${child.props.id}`;\n if (this.relations[identifier] != null) {\n this.relations[identifier].remove();\n }\n\n // Get the items center.\n let { x: startX, y: startY } = this.getVisualCenter(parent.props, parent);\n let { x: endX, y: endY } = this.getVisualCenter(child.props, child);\n\n // Overwrite positions if needed (while moving it!).\n if (parentX != null) {\n startX = parentX;\n }\n\n if (parentY != null) {\n startY = parentY;\n }\n\n if (childX != null) {\n endX = childX;\n }\n\n if (childY != null) {\n endY = childY;\n }\n\n // Line inherits child element status.\n const line = new Line(\n linePropsDecoder({\n id: 0,\n type: ItemType.LINE_ITEM,\n startX,\n startY,\n endX,\n endY,\n width: 0,\n height: 0,\n lineWidth: this.props.relationLineWidth,\n color: notEmptyStringOr(child.props.colorStatus, \"#CCC\"),\n ratio: parent.props.ratio\n }),\n itemMetaDecoder({\n receivedAt: new Date()\n })\n );\n\n // Save a reference to the line item.\n this.relations[identifier] = line;\n\n // Add the line to the DOM.\n line.elementRef.style.zIndex = \"0\";\n this.containerRef.append(line.elementRef);\n\n return line;\n }\n\n /**\n * Add an event handler to the click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is clicked.\n */\n public onItemClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.clickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the double click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is double clicked.\n */\n public onItemDblClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.dblClickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the movement of the visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onItemMoved(listener: Listener<ItemMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.movedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the movement of the visual console line elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onLineMoved(listener: Listener<LineMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.lineMovedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the resizement of the visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onItemResized(listener: Listener<ItemResizedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.resizedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the elements selection change of the visual console .\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onItemSelectionChanged(\n listener: Listener<ItemSelectionChangedEvent>\n ): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.selectionChangedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Enable the edition mode.\n */\n public enableEditMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, editMode: true };\n });\n this.containerRef.classList.add(\"is-editing\");\n }\n\n /**\n * Disable the edition mode.\n */\n public disableEditMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, editMode: false };\n });\n this.containerRef.classList.remove(\"is-editing\");\n }\n\n /**\n * Enable the maintenance mode.\n */\n public enableMaintenanceMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, maintenanceMode: true };\n });\n this.containerRef.classList.add(\"is-maintenance\");\n this.containerRef.classList.remove(\"is-editing\");\n }\n\n /**\n * Disable the maintenance mode.\n */\n public disableMaintenanceMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, maintenanceMode: false };\n });\n this.containerRef.classList.remove(\"is-maintenance\");\n this.containerRef.classList.add(\"is-editing\");\n }\n\n /**\n * Update the gridSize.\n */\n public updateGridSize(gridSize: string): void {\n this._props.gridSize = parseInt(gridSize);\n this.props.gridSize = parseInt(gridSize);\n }\n\n /**\n * Update the gridSize.\n */\n public updateGridSelected(gridSelected: boolean): void {\n this._props.gridSelected = gridSelected;\n this.props.gridSelected = gridSelected;\n }\n\n /**\n * Select an item.\n * @param itemId Item Id.\n * @param unique To remove the selection of other items or not.\n */\n public selectItem(itemId: number, unique: boolean = false): void {\n if (unique) {\n this.elementIds.forEach(currentItemId => {\n const meta = this.elementsById[currentItemId].meta;\n\n if (currentItemId !== itemId && meta.isSelected) {\n this.elementsById[currentItemId].unSelectItem();\n } else if (currentItemId === itemId && !meta.isSelected) {\n this.elementsById[currentItemId].selectItem();\n }\n });\n } else if (this.elementsById[itemId]) {\n this.elementsById[itemId].selectItem();\n }\n }\n\n /**\n * Unselect an item.\n * @param itemId Item Id.\n */\n public unSelectItem(itemId: number): void {\n if (this.elementsById[itemId]) {\n const meta = this.elementsById[itemId].meta;\n\n if (meta.isSelected) {\n this.elementsById[itemId].unSelectItem();\n }\n }\n }\n\n /**\n * Unselect all items.\n */\n public unSelectItems(): void {\n this.elementIds.forEach(itemId => {\n if (this.elementsById[itemId]) {\n this.elementsById[itemId].unSelectItem();\n }\n });\n }\n\n // TODO: Document.\n public static items = {\n [ItemType.STATIC_GRAPH]: StaticGraph,\n [ItemType.MODULE_GRAPH]: ModuleGraph,\n [ItemType.SIMPLE_VALUE]: SimpleValue,\n [ItemType.SIMPLE_VALUE_MAX]: SimpleValue,\n [ItemType.SIMPLE_VALUE_MIN]: SimpleValue,\n [ItemType.SIMPLE_VALUE_AVG]: SimpleValue,\n [ItemType.PERCENTILE_BAR]: Percentile,\n [ItemType.PERCENTILE_BUBBLE]: Percentile,\n [ItemType.CIRCULAR_PROGRESS_BAR]: Percentile,\n [ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR]: Percentile,\n [ItemType.LABEL]: Label,\n [ItemType.ICON]: Icon,\n [ItemType.SERVICE]: Service,\n [ItemType.GROUP_ITEM]: Group,\n [ItemType.BOX_ITEM]: Box,\n [ItemType.LINE_ITEM]: Line,\n [ItemType.AUTO_SLA_GRAPH]: EventsHistory,\n [ItemType.DONUT_GRAPH]: DonutGraph,\n [ItemType.BARS_GRAPH]: BarsGraph,\n [ItemType.CLOCK]: Clock,\n [ItemType.COLOR_CLOUD]: ColorCloud,\n [ItemType.NETWORK_LINK]: NetworkLink,\n [ItemType.ODOMETER]: Odometer,\n [ItemType.BASIC_CHART]: BasicChart\n };\n\n /**\n * Relying type item and srcimg and agent and module\n * name convert name item representative.\n *\n * @param item Instance item from extract name.\n *\n * @return Name item.\n */\n public static itemDescriptiveName(item: Item<ItemProps>): string {\n let text: string;\n switch (item.props.type) {\n case ItemType.STATIC_GRAPH:\n text = `${t(\"Static graph\")} - ${(item as StaticGraph).props.imageSrc}`;\n break;\n case ItemType.MODULE_GRAPH:\n text = t(\"Module graph\");\n break;\n case ItemType.CLOCK:\n text = t(\"Clock\");\n break;\n case ItemType.BARS_GRAPH:\n text = t(\"Bars graph\");\n break;\n case ItemType.AUTO_SLA_GRAPH:\n text = t(\"Event history graph\");\n break;\n case ItemType.PERCENTILE_BAR:\n text = t(\"Percentile bar\");\n break;\n case ItemType.CIRCULAR_PROGRESS_BAR:\n text = t(\"Circular progress bar\");\n break;\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n text = t(\"Circular progress bar (interior)\");\n break;\n case ItemType.SIMPLE_VALUE:\n text = t(\"Simple Value\");\n break;\n case ItemType.LABEL:\n text = t(\"Label\");\n break;\n case ItemType.GROUP_ITEM:\n text = t(\"Group\");\n break;\n case ItemType.COLOR_CLOUD:\n text = t(\"Color cloud\");\n break;\n case ItemType.ICON:\n text = `${t(\"Icon\")} - ${(item as Icon).props.imageSrc}`;\n break;\n case ItemType.ODOMETER:\n text = t(\"Odometer\");\n break;\n case ItemType.BASIC_CHART:\n text = t(\"BasicChart\");\n break;\n default:\n text = t(\"Item\");\n break;\n }\n\n const linkedAgentAndModuleProps = item.props as Partial<WithModuleProps>;\n if (\n linkedAgentAndModuleProps.agentAlias != null &&\n linkedAgentAndModuleProps.moduleName != null\n ) {\n text += ` (${ellipsize(\n linkedAgentAndModuleProps.agentAlias,\n 18\n )} - ${ellipsize(linkedAgentAndModuleProps.moduleName, 25)})`;\n } else if (linkedAgentAndModuleProps.agentAlias != null) {\n text += ` (${ellipsize(linkedAgentAndModuleProps.agentAlias, 25)})`;\n }\n\n return text;\n }\n}\n","import TypedEvent, { Disposable, Listener } from \"./TypedEvent\";\n\ninterface Cancellable {\n cancel(): void;\n}\n\ntype AsyncTaskStatus = \"waiting\" | \"started\" | \"cancelled\" | \"finished\";\ntype AsyncTaskInitiator = (done: () => void) => Cancellable;\n\n/**\n * Defines an async task which can be started and cancelled.\n * It's possible to observe the status changes of the task.\n */\nclass AsyncTask {\n private readonly taskInitiator: AsyncTaskInitiator;\n private cancellable: Cancellable = { cancel: () => {} };\n private _status: AsyncTaskStatus = \"waiting\";\n\n // Event manager for status change events.\n private readonly statusChangeEventManager = new TypedEvent<AsyncTaskStatus>();\n // List of references to clean the event listeners.\n private readonly disposables: Disposable[] = [];\n\n public constructor(taskInitiator: AsyncTaskInitiator) {\n this.taskInitiator = taskInitiator;\n }\n\n /**\n * Public setter of the `status` property.\n * @param status.\n */\n public set status(status: AsyncTaskStatus) {\n this._status = status;\n this.statusChangeEventManager.emit(status);\n }\n\n /**\n * Public accessor of the `status` property.\n * @return status.\n */\n public get status() {\n return this._status;\n }\n\n /**\n * Start the async task.\n */\n public init(): void {\n this.cancellable = this.taskInitiator(() => {\n this.status = \"finished\";\n });\n this.status = \"started\";\n }\n\n /**\n * Cancel the async task.\n */\n public cancel(): void {\n this.cancellable.cancel();\n this.status = \"cancelled\";\n }\n\n /**\n * Add an event handler to the status change.\n * @param listener Function which is going to be executed when the status changes.\n */\n public onStatusChange(listener: Listener<AsyncTaskStatus>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.statusChangeEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n}\n\n/**\n * Wrap an async task into another which will execute that task indefinitely\n * every time the tash finnish and the chosen period ends.\n * Will last until cancellation.\n *\n * @param task Async task to execute.\n * @param period Time in milliseconds to wait until the next async esecution.\n *\n * @return A new async task.\n */\nfunction asyncPeriodic(task: AsyncTask, period: number): AsyncTask {\n return new AsyncTask(() => {\n let ref: number | null = null;\n\n task.onStatusChange(status => {\n if (status === \"finished\") {\n ref = window.setTimeout(() => {\n task.init();\n }, period);\n }\n });\n\n task.init();\n\n return {\n cancel: () => {\n if (ref) clearTimeout(ref);\n task.cancel();\n }\n };\n });\n}\n\n/**\n * Manages a list of async tasks.\n */\nexport default class AsyncTaskManager {\n private tasks: { [identifier: string]: AsyncTask } = {};\n\n /**\n * Adds an async task to the manager.\n *\n * @param identifier Unique identifier.\n * @param taskInitiator Function to initialize the async task.\n * Should return a structure to cancel the task.\n * @param period Optional period to repeat the task indefinitely.\n */\n public add(\n identifier: string,\n taskInitiator: AsyncTaskInitiator,\n period: number = 0\n ): AsyncTask {\n if (this.tasks[identifier] && this.tasks[identifier].status === \"started\") {\n this.tasks[identifier].cancel();\n }\n\n const asyncTask =\n period > 0\n ? asyncPeriodic(new AsyncTask(taskInitiator), period)\n : new AsyncTask(taskInitiator);\n\n this.tasks[identifier] = asyncTask;\n\n return this.tasks[identifier];\n }\n\n /**\n * Starts an async task.\n *\n * @param identifier Unique identifier.\n */\n public init(identifier: string) {\n if (\n this.tasks[identifier] &&\n (this.tasks[identifier].status === \"waiting\" ||\n this.tasks[identifier].status === \"cancelled\" ||\n this.tasks[identifier].status === \"finished\")\n ) {\n this.tasks[identifier].init();\n }\n }\n\n /**\n * Cancel a running async task.\n *\n * @param identifier Unique identifier.\n */\n public cancel(identifier: string) {\n if (this.tasks[identifier] && this.tasks[identifier].status === \"started\") {\n this.tasks[identifier].cancel();\n }\n }\n}\n","/*\n * Useful resources.\n * http://es6-features.org/\n * http://exploringjs.com/es6\n * https://www.typescriptlang.org/\n */\n\nimport \"./main.css\"; // CSS import.\nimport VisualConsole from \"./VisualConsole\";\nimport * as Form from \"./Form\";\nimport AsyncTaskManager from \"./lib/AsyncTaskManager\";\n\n// Export the VisualConsole class to the global object.\n// eslint-disable-next-line\n(window as any).VisualConsole = VisualConsole;\n\n// Export the VisualConsole's Form classes to the global object.\n// eslint-disable-next-line\n(window as any).VisualConsole.Form = Form;\n\n// Export the AsyncTaskManager class to the global object.\n// eslint-disable-next-line\n(window as any).AsyncTaskManager = AsyncTaskManager;\n"],"names":["name","initialData","_name","currentData","dataRequestedEventManager","this","length","RangeError","_element","element","document","createElement","className","content","createContent","Array","forEach","appendChild","reset","updateData","data","requestData","identifier","params","done","emit","onDataRequested","listener","on","title","inputGroups","enabledInputGroups","inputGroupsByName","enabledInputGroupNames","submitEventManager","itemDataRequestedEventManager","handleItemDataRequested","reduce","prevVal","inputGroup","filter","getInputGroup","inputGroupName","addInputGroup","index","slice","removeInputGroup","getFormElement","type","form","id","addEventListener","e","preventDefault","nativeEvent","formContent","onSubmit","onInputGroupDataRequested","parseLabelPosition","labelPosition","itemBasePropsDecoder","isNaN","parseInt","TypeError","label","isLinkEnabled","link","isOnTop","parentId","aclGroupId","cacheExpiration","colorStatus","cellId","alertOutline","ratio","props","metadata","deferInit","elementRef","labelElementRef","childElementRef","clickEventManager","dblClickEventManager","movedEventManager","movementFinishedEventManager","resizedEventManager","resizeFinishedEventManager","removeEventManager","selectionChangedEventManager","disposables","debouncedMovementSave","x","y","_metadata","isBeingMoved","prevPosition","newPosition","positionChanged","move","item","removeMovement","debouncedResizementSave","width","height","isBeingResized","prevSize","newSize","sizeChanged","resize","removeResizement","itemProps","init","initMovementListener","meta","isSelected","moveElement","stopMovementListener","initResizementListener","getBoundingClientRect","labelWidth","labelHeight","resizeElement","stopResizementListener","createContainerDomElement","createLabelDomElement","createDomElement","changeLabelPosition","box","href","classList","add","style","left","top","unSelectItem","selectItem","editMode","stopPropagation","divParent","divSpinner","path","composedPath","containerId","undefined","includes","containerVC","getElementById","maintenanceMode","isFetching","isUpdating","getLabelWithMacrosReplaced","table","row","emptyRow1","emptyRow2","cell","innerHTML","textAlign","macro","value","Date","agentAlias","agentDescription","agentAddress","moduleName","moduleDescription","updateDomElement","newProps","setProps","prevProps","shouldBeUpdated","render","newMetadata","setMeta","prevMetadata","selected","prevMeta","transform","transformOrigin","minWidth","minHeight","oldLabelHtml","newLabelHtml","remove","container","attrs","attributes","i","nodeName","cloneIsNeeded","getAttributeNode","setAttributeNode","cloneNode","parentNode","replaceChild","setAttribute","div","querySelector","parentElement","removeChild","removeAttribute","disposable","dispose","ignored","position","flexDirection","tables","getElementsByTagName","onClick","push","onDblClick","onMoved","onMovementFinished","onResized","onResizeFinished","onRemove","onSelectionChanged","getFormContainer","VisualConsoleItem","t","titleItem","FormContainer","parseBarsGraphProps","backgroundColor","parseTypeGraph","typeGraph","barsGraphPropsDecoder","html","encodedHtml","gridColor","agentDisabled","moduleDisabled","opacity","scripts","src","setTimeout","eval","trim","basicChartPropsDecoder","period","parseFloat","status","moduleNameColor","header","textContent","color","numberFormat","moduleValue","legendP","margin","overviewGraphs","getElementsByClassName","insertBefore","firstChild","number","forceInteger","unit","shortData","divisor","Math","round","auxDecimals","pad","Number","pos","abs","input","padding","str","donutGraphPropsDecoder","legendBackgroundColor","eventsHistoryPropsDecoder","maxTime","legendColor","flotText","aux","parseBackgroundType","backgroundType","parseGraphType","graphType","moduleGraphPropsDecoder","customGraphId","svgNS","iconDefinition","size","spin","pulse","iconName","icon","createElementNS","pathData","listeners","listenersOncer","off","once","callbackIndex","indexOf","splice","event","pipe","te","parseIntOr","defaultValue","parseFloatOr","stringIsEmpty","notEmptyStringOr","parseBoolean","leftPad","diffLength","substr","substring","repeatTimes","floor","restLength","newPad","positionPropsDecoder","sizePropsDecoder","modulePropsDecoder","moduleId","agentProps","agentId","agentName","metaconsoleId","agentPropsDecoder","linkedVCPropsDecoder","linkedLayoutStatusProps","linkedLayoutStatusType","weight","linkedLayoutStatusTypeWeight","warningThreshold","linkedLayoutStatusTypeWarningThreshold","criticalThreshold","linkedLayoutStatusTypeCriticalThreshold","linkedLayoutId","linkedLayoutNodeId","itemMetaDecoder","receivedAt","getTime","error","Error","isFromCache","lineMode","prefixedCssRules","ruleName","ruleValue","rule","decodeBase64","decodeURIComponent","escape","window","atob","humanDate","date","locale","Intl","DateTimeFormat","day","month","year","format","getDate","getMonth","getFullYear","humanTime","hours","getHours","minutes","getMinutes","seconds","getSeconds","replaceMacros","macros","text","acc","replace","throttle","delay","fn","last","now","args","debounce","timerRef","clearTimeout","getOffset","el","parent","offsetLeft","offsetTop","scrollLeft","scrollTop","offsetParent","addMovementListener","altContainer","isDraggable","draggable","lastX","lastY","lastMouseX","lastMouseY","mouseElementOffsetX","mouseElementOffsetY","containerBounds","containerOffset","containerTop","containerBottom","containerLeft","containerRight","elementBounds","borderWidth","getComputedStyle","borderFix","debouncedMovement","throttledMovement","handleMove","mouseX","pageX","mouseY","pageY","mouseDeltaX","mouseDeltaY","maxX","maxY","outOfBoundsLeft","outOfBoundsRight","outOfBoundsTop","outOfBoundsBottom","handleEnd","removeEventListener","body","userSelect","handleStart","button","elementOffset","offsetX","offsetY","addResizementListener","resizeDraggable","lastWidth","lastHeight","elementTop","elementLeft","debouncedResizement","throttledResizement","handleResize","ellipsize","max","ellipse","__webpack_module_cache__","__webpack_require__","cachedModule","exports","module","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","parseShowLastValueTooltip","showLastValueTooltip","staticGraphPropsDecoder","imageSrc","statusImageSrc","lastValue","imgSrc","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","Item","iconPropsDecoder","image","faPlusCircle","prefix","faTrashAlt","colorCloudPropsDecoder","defaultColor","colorRanges","generalDiv","colorLabel","ColorInput","required","target","InputGroup","rangesLabel","createLabel","rangesControlsContainer","createdRangesContainer","buildRanges","ranges","colorRange","rangeContainer","range","handleRangeUpdatePartial","newRanges","handleDelete","initialRangeContainer","onCreate","initialState","state","rangesContainer","rangesContainerFromValue","rangesLabelFromValue","rangesInputFromValue","createInputNumber","fromValue","rangesDivContainerToValue","rangesLabelToValue","rangesInputToValue","toValue","rangesDivContainerColor","rangesLabelColor","rangesInputColor","createInputColor","createBtn","onUpdate","onDelete","deleteBtn","append","createSvgElement","gradientId","svg","defs","radialGradient","stop0","stop100","circle","ColorCloud","formContainer","ColorInputGroup","RangesInputGroup","linePropsDecoder","startPosition","startX","startY","endPosition","endX","endY","lineWidth","borderColor","viewportOffsetX","viewportOffsetY","labelEnd","labelEndWidth","linkedEnd","linkedStart","labelEndHeight","labelStart","labelStartWidth","labelStartHeight","Line","extractBoxSizeAndPosition","circleRadius","moveMode","isMoving","lineMovedEventManager","TypedEvent","lineMovedEventDisposables","debouncedStartPositionMovementSave","removeStartPositionMovement","debouncedEndPositionMovementSave","removeEndPositionMovement","initStartPositionMovementListener","stopStartPositionMovementListener","initEndPositionMovementListener","stopEndPositionMovementListener","x1","y1","x2","y2","line","cursor","svgs","lines","getElementsByTagNameNS","startCircle","endCircle","circlesStart","circlesEnd","borderRadius","circles","min","startIsLeft","startIsTop","start","end","onLineMovementFinished","networkLinkPropsDecoder","groups","adjustment","lineX1","lineY1","lineX2","lineY2","g","atan2","PI","split","l","labels","arrows","arrow","arrowSize","arrowPosX","arrowPosY","arrowStart","border","borderBottom","arrowEnd","htmlLabelStart","console","htmlLabelEnd","groupPropsDecoder","groupId","showStatistics","extractHtml","parseClockType","clockType","parseClockFormat","clockFormat","clockPropsDecoder","clockTimezone","clockTimezoneOffset","showClockTimezone","intervalRef","startTick","createClock","Clock","TICK_INTERVAL","stopTick","clearInterval","handler","interval","setInterval","getElementSize","newWidth","newHeight","createAnalogicClock","createDigitalClock","colors","dateFontSize","baseTimeFontSize","clockFace","clockFaceBackground","city","getHumanTimezone","timezoneComplication","marksGroup","mainMarkGroup","mark1a","mark1b","mark","hourHand","hourHandA","hourHandB","minuteHand","minuteHandA","minuteHandB","minuteHandPin","secondHand","secondHandBar","secondHandPin","pin","getOriginDate","secAngle","minuteAngle","hourAngle","join","dateElem","fontSize","modified","tzFontSizeMultiplier","timeFontSize","tzFontSize","timeElem","tzElem","initialDate","targetTZOffset","localTZOffset","getTimezoneOffset","utimestamp","timezone","diameter","extraHeigth","boxPropsDecoder","fillColor","fillTransparent","boxSizing","borderStyle","maxBorderWidth","labelPropsDecoder","parseValueType","valueType","simpleValuePropsDecoder","processValue","parseProcessValue","img","pi","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","_","constructor","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","w","h","toString","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","extractPercentileType","extractValueType","percentilePropsDecoder","percentileType","minValue","maxValue","labelColor","formatValue","background","progress","getProgress","NumberFormat","backgroundRect","progressRect","backgroundCircle","progressCircle","arcProps","cornerRadius","constant","padRadius","context","buffer","r0","apply","arguments","t0","t1","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","ax","ay","bx","by","kc","lc","centroid","a","trunc","servicePropsDecoder","encodedTitle","serviceId","odometerPropsDecoder","titleColor","titleModule","thresholds","minMaxValue","odometerType","lineWarning","lineWarning2","lineCritical","lineCritical2","JSON","parse","min_warning","max_warning","getCoords","min_critical","max_critical","percent","toFixed","getSubfix","maximumSignificantDigits","maximumFractionDigits","numb","match","rotate","getRotate","anchoB","odometerContainer","odometerA","odometerB","odometerC","gaugeE","SVG_NS","svgWarning","setAttributeNS","pathWarning","svgCritical","pathCritical","h1","innerText","lineHeight","h2","truncateTitle","script","onload","urlPandora","location","pathname","dir","display","minMax","limit","subfix","radio","halfLength","diff","stringBefore","stringAfter","decodeProps","items","elementsById","elementIds","relations","lineLinks","handleElementClick","handleElementDblClick","handleElementMovement","gridSelected","elements","movementX","movementY","newX","newY","gridSize","positionX","positionY","itemId","getItemRelations","relation","getVisualCenter","childId","updateLinesConnected","handleElementMovementFinished","handleLineElementMovementFinished","refreshLink","handleElementResizement","handleElementResizementFinished","handleElementRemove","clearRelations","handleElementSelectionChanged","handleContainerClick","unSelectItems","containerRef","_props","backgroundURL","isFavorite","relationLineWidth","visualConsolePropsDecoder","sort","b","addElement","buildRelations","coordinatesInItem","itemAtStart","itemAtEnd","keys","to","save","lineId","updateElement","options","debouncedLinePositionSave","map","itemInstance","ModuleGraph","EventsHistory","DonutGraph","BarsGraph","BasicChart","itemInstanceFrom","message","updateElements","itemIds","child","addRelationLine","ids","getRelationLine","itemRelations","clientWidth","clientHeight","parentX","parentY","childX","childY","zIndex","onItemClick","onItemDblClick","onItemMoved","onLineMoved","onItemResized","onItemSelectionChanged","enableEditMode","disableEditMode","enableMaintenanceMode","disableMaintenanceMode","updateGridSize","updateGridSelected","unique","currentItemId","itemDescriptiveName","linkedAgentAndModuleProps","taskInitiator","cancellable","cancel","_status","statusChangeEventManager","onStatusChange","tasks","asyncTask","task","AsyncTask","ref","asyncPeriodic","VisualConsole","Form","AsyncTaskManager"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"vc.main.min.js","mappings":"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","sources":["webpack://pandora-fms-visual-console/./src/Form.ts","webpack://pandora-fms-visual-console/./src/Item.ts","webpack://pandora-fms-visual-console/./src/items/BarsGraph.ts","webpack://pandora-fms-visual-console/./src/items/BasicChart.ts","webpack://pandora-fms-visual-console/./src/items/DonutGraph.ts","webpack://pandora-fms-visual-console/./src/items/EventsHistory.ts","webpack://pandora-fms-visual-console/./src/items/ModuleGraph.ts","webpack://pandora-fms-visual-console/./src/lib/FontAwesomeIcon.ts","webpack://pandora-fms-visual-console/./src/lib/TypedEvent.ts","webpack://pandora-fms-visual-console/./src/lib/index.ts","webpack://pandora-fms-visual-console/webpack/bootstrap","webpack://pandora-fms-visual-console/webpack/runtime/define property getters","webpack://pandora-fms-visual-console/webpack/runtime/hasOwnProperty shorthand","webpack://pandora-fms-visual-console/webpack/runtime/make namespace object","webpack://pandora-fms-visual-console/./src/items/StaticGraph.ts","webpack://pandora-fms-visual-console/./src/items/Icon.ts","webpack://pandora-fms-visual-console/./node_modules/@fortawesome/free-solid-svg-icons/index.es.js","webpack://pandora-fms-visual-console/./src/items/ColorCloud.ts","webpack://pandora-fms-visual-console/./src/items/Line.ts","webpack://pandora-fms-visual-console/./src/items/NetworkLink.ts","webpack://pandora-fms-visual-console/./src/items/Group.ts","webpack://pandora-fms-visual-console/./src/items/Clock/index.ts","webpack://pandora-fms-visual-console/./src/items/Box.ts","webpack://pandora-fms-visual-console/./src/items/Label.ts","webpack://pandora-fms-visual-console/./src/items/SimpleValue.ts","webpack://pandora-fms-visual-console/./node_modules/d3-path/src/path.js","webpack://pandora-fms-visual-console/./node_modules/d3-shape/src/constant.js","webpack://pandora-fms-visual-console/./node_modules/d3-shape/src/math.js","webpack://pandora-fms-visual-console/./node_modules/d3-shape/src/arc.js","webpack://pandora-fms-visual-console/./src/items/Percentile.ts","webpack://pandora-fms-visual-console/./src/items/Service.ts","webpack://pandora-fms-visual-console/./src/items/Odometer.ts","webpack://pandora-fms-visual-console/./src/VisualConsole.ts","webpack://pandora-fms-visual-console/./src/lib/AsyncTaskManager.ts","webpack://pandora-fms-visual-console/./src/index.ts"],"sourcesContent":["import TypedEvent, { Listener, Disposable } from \"./lib/TypedEvent\";\nimport { AnyObject, UnknownObject } from \"./lib/types\";\nimport { t } from \"./lib\";\n\ninterface InputGroupDataRequestedEvent {\n identifier: string;\n params: UnknownObject;\n done: (error: Error | null, data?: unknown) => void;\n}\n\n// TODO: Document\nexport abstract class InputGroup<Data extends {} = {}> {\n private _name: string = \"\";\n private _element?: HTMLElement;\n public readonly initialData: Data;\n protected currentData: Partial<Data> = {};\n // Event manager for data requests.\n private readonly dataRequestedEventManager = new TypedEvent<\n InputGroupDataRequestedEvent\n >();\n\n public constructor(name: string, initialData: Data) {\n this.name = name;\n this.initialData = initialData;\n }\n\n public set name(name: string) {\n if (name.length === 0) throw new RangeError(\"empty name\");\n this._name = name;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get data(): Partial<Data> {\n return { ...this.currentData };\n }\n\n public get element(): HTMLElement {\n if (this._element == null) {\n const element = document.createElement(\"div\");\n element.className = `input-group input-group-${this.name}`;\n\n const content = this.createContent();\n\n if (content instanceof Array) {\n content.forEach(element.appendChild);\n } else {\n element.appendChild(content);\n }\n\n this._element = element;\n }\n\n return this._element;\n }\n\n public reset(): void {\n this.currentData = {};\n }\n\n protected updateData(data: Partial<Data>): void {\n this.currentData = {\n ...this.currentData,\n ...data\n };\n // TODO: Update item.\n }\n\n protected requestData(\n identifier: string,\n params: UnknownObject,\n done: (error: Error | null, data?: unknown) => void\n ): void {\n this.dataRequestedEventManager.emit({ identifier, params, done });\n }\n\n public onDataRequested(\n listener: Listener<InputGroupDataRequestedEvent>\n ): Disposable {\n return this.dataRequestedEventManager.on(listener);\n }\n\n protected abstract createContent(): HTMLElement | HTMLElement[];\n\n // public abstract get isValid(): boolean;\n}\n\nexport interface SubmitFormEvent {\n nativeEvent: Event;\n data: AnyObject;\n}\n\n// TODO: Document\nexport class FormContainer {\n public readonly title: string;\n private inputGroupsByName: { [name: string]: InputGroup } = {};\n private enabledInputGroupNames: string[] = [];\n // Event manager for submit events.\n private readonly submitEventManager = new TypedEvent<SubmitFormEvent>();\n // Event manager for item data requests.\n private readonly itemDataRequestedEventManager = new TypedEvent<\n InputGroupDataRequestedEvent\n >();\n private handleItemDataRequested = this.itemDataRequestedEventManager.emit;\n\n public constructor(\n title: string,\n inputGroups: InputGroup[] = [],\n enabledInputGroups: string[] = []\n ) {\n this.title = title;\n\n if (inputGroups.length > 0) {\n this.inputGroupsByName = inputGroups.reduce((prevVal, inputGroup) => {\n // Add event handlers.\n inputGroup.onDataRequested(this.handleItemDataRequested);\n prevVal[inputGroup.name] = inputGroup;\n return prevVal;\n }, this.inputGroupsByName);\n }\n\n if (enabledInputGroups.length > 0) {\n this.enabledInputGroupNames = [\n ...this.enabledInputGroupNames,\n ...enabledInputGroups.filter(\n name => this.inputGroupsByName[name] != null\n )\n ];\n }\n }\n\n public getInputGroup(inputGroupName: string): InputGroup | null {\n return this.inputGroupsByName[inputGroupName] || null;\n }\n\n public addInputGroup(\n inputGroup: InputGroup,\n index: number | null = null\n ): FormContainer {\n // Add event handlers.\n inputGroup.onDataRequested(this.handleItemDataRequested);\n this.inputGroupsByName[inputGroup.name] = inputGroup;\n\n // Remove the current stored name if exist.\n this.enabledInputGroupNames = this.enabledInputGroupNames.filter(\n name => name !== inputGroup.name\n );\n\n if (index !== null) {\n if (index <= 0) {\n this.enabledInputGroupNames = [\n inputGroup.name,\n ...this.enabledInputGroupNames\n ];\n } else if (index >= this.enabledInputGroupNames.length) {\n this.enabledInputGroupNames = [\n ...this.enabledInputGroupNames,\n inputGroup.name\n ];\n } else {\n this.enabledInputGroupNames = [\n // part of the array before the specified index\n ...this.enabledInputGroupNames.slice(0, index),\n // inserted item\n inputGroup.name,\n // part of the array after the specified index\n ...this.enabledInputGroupNames.slice(index)\n ];\n }\n } else {\n this.enabledInputGroupNames = [\n ...this.enabledInputGroupNames,\n inputGroup.name\n ];\n }\n\n return this;\n }\n\n public removeInputGroup(inputGroupName: string): FormContainer {\n delete this.inputGroupsByName[inputGroupName];\n // Remove the current stored name.\n this.enabledInputGroupNames = this.enabledInputGroupNames.filter(\n name => name !== inputGroupName\n );\n\n return this;\n }\n\n public getFormElement(\n type: \"creation\" | \"update\" = \"update\"\n ): HTMLFormElement {\n const form = document.createElement(\"form\");\n form.id = \"visual-console-item-edition\";\n form.className = \"visual-console-item-edition\";\n form.addEventListener(\"submit\", e => {\n e.preventDefault();\n this.submitEventManager.emit({\n nativeEvent: e,\n data: this.enabledInputGroupNames.reduce((data, name) => {\n if (this.inputGroupsByName[name]) {\n data = {\n ...data,\n ...this.inputGroupsByName[name].data\n };\n }\n return data;\n }, {})\n });\n });\n\n const formContent = document.createElement(\"div\");\n formContent.className = \"input-groups\";\n\n this.enabledInputGroupNames.forEach(name => {\n if (this.inputGroupsByName[name]) {\n formContent.appendChild(this.inputGroupsByName[name].element);\n }\n });\n\n form.appendChild(formContent);\n\n return form;\n }\n\n public reset(): void {\n this.enabledInputGroupNames.forEach(name => {\n if (this.inputGroupsByName[name]) {\n this.inputGroupsByName[name].reset();\n }\n });\n }\n\n // public get isValid(): boolean {\n // for (let i = 0; i < this.enabledInputGroupNames.length; i++) {\n // const inputGroup = this.inputGroupsByName[this.enabledInputGroupNames[i]];\n // if (inputGroup && !inputGroup.isValid) return false;\n // }\n\n // return true;\n // }\n\n public onSubmit(listener: Listener<SubmitFormEvent>): Disposable {\n return this.submitEventManager.on(listener);\n }\n\n public onInputGroupDataRequested(\n listener: Listener<InputGroupDataRequestedEvent>\n ): Disposable {\n return this.itemDataRequestedEventManager.on(listener);\n }\n}\n","import {\n Position,\n Size,\n AnyObject,\n WithModuleProps,\n ItemMeta,\n LinkedVisualConsoleProps,\n WithAgentProps\n} from \"./lib/types\";\nimport {\n sizePropsDecoder,\n positionPropsDecoder,\n parseIntOr,\n parseBoolean,\n notEmptyStringOr,\n replaceMacros,\n humanDate,\n humanTime,\n addMovementListener,\n debounce,\n addResizementListener,\n t,\n parseFloatOr\n} from \"./lib\";\nimport TypedEvent, { Listener, Disposable } from \"./lib/TypedEvent\";\nimport { FormContainer, InputGroup } from \"./Form\";\n\n// Enum: https://www.typescriptlang.org/docs/handbook/enums.html.\nexport const enum ItemType {\n STATIC_GRAPH = 0,\n MODULE_GRAPH = 1,\n SIMPLE_VALUE = 2,\n PERCENTILE_BAR = 3,\n LABEL = 4,\n ICON = 5,\n SIMPLE_VALUE_MAX = 6,\n SIMPLE_VALUE_MIN = 7,\n SIMPLE_VALUE_AVG = 8,\n PERCENTILE_BUBBLE = 9,\n SERVICE = 10,\n GROUP_ITEM = 11,\n BOX_ITEM = 12,\n LINE_ITEM = 13,\n AUTO_SLA_GRAPH = 14,\n CIRCULAR_PROGRESS_BAR = 15,\n CIRCULAR_INTERIOR_PROGRESS_BAR = 16,\n DONUT_GRAPH = 17,\n BARS_GRAPH = 18,\n CLOCK = 19,\n COLOR_CLOUD = 20,\n NETWORK_LINK = 21,\n ODOMETER = 22,\n BASIC_CHART = 23\n}\n\n// Base item properties. This interface should be extended by the item implementations.\nexport interface ItemProps extends Position, Size {\n readonly id: number;\n readonly type: ItemType;\n label: string | null;\n labelPosition: \"up\" | \"right\" | \"down\" | \"left\";\n isLinkEnabled: boolean;\n link: string | null;\n isOnTop: boolean;\n parentId: number | null;\n aclGroupId: number | null;\n cacheExpiration: number | null;\n colorStatus: string;\n cellId: string | null;\n alertOutline: boolean;\n ratio: number | null;\n}\n\nexport interface ItemClickEvent {\n item: VisualConsoleItem<ItemProps>;\n nativeEvent: Event;\n}\n\n// FIXME: Fix type compatibility.\nexport interface ItemRemoveEvent {\n // data: Props;\n item: VisualConsoleItem<ItemProps>;\n}\n\nexport interface ItemMovedEvent {\n item: VisualConsoleItem<ItemProps>;\n prevPosition: Position;\n newPosition: Position;\n}\n\nexport interface ItemResizedEvent {\n item: VisualConsoleItem<ItemProps>;\n prevSize: Size;\n newSize: Size;\n}\n\nexport interface ItemSelectionChangedEvent {\n selected: boolean;\n}\n\n/**\n * Extract a valid enum value from a raw label position value.\n * @param labelPosition Raw value.\n */\nconst parseLabelPosition = (\n labelPosition: unknown\n): ItemProps[\"labelPosition\"] => {\n switch (labelPosition) {\n case \"up\":\n case \"right\":\n case \"down\":\n case \"left\":\n return labelPosition;\n default:\n return \"down\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function itemBasePropsDecoder(data: AnyObject): ItemProps | never {\n if (data.id == null || isNaN(parseInt(data.id))) {\n throw new TypeError(\"invalid id.\");\n }\n if (data.type == null || isNaN(parseInt(data.type))) {\n throw new TypeError(\"invalid type.\");\n }\n\n return {\n id: parseInt(data.id),\n type: parseInt(data.type),\n label: notEmptyStringOr(data.label, null),\n labelPosition: parseLabelPosition(data.labelPosition),\n isLinkEnabled: parseBoolean(data.isLinkEnabled),\n link: notEmptyStringOr(data.link, null),\n isOnTop: parseBoolean(data.isOnTop),\n parentId: parseIntOr(data.parentId, null),\n aclGroupId: parseIntOr(data.aclGroupId, null),\n cacheExpiration: parseIntOr(data.cacheExpiration, null),\n colorStatus: notEmptyStringOr(data.colorStatus, \"#CCC\"),\n cellId: notEmptyStringOr(data.cellId, \"\"),\n alertOutline: parseBoolean(data.alertOutline),\n ratio: parseFloatOr(data.ratio, null),\n ...sizePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...positionPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\n//TODO: Document\nexport function titleItem(id: number): string {\n let title = \"\";\n switch (id) {\n case ItemType.STATIC_GRAPH:\n title = t(\"Static image\");\n break;\n case ItemType.MODULE_GRAPH:\n title = t(\"Module graph\");\n break;\n case ItemType.SIMPLE_VALUE:\n title = t(\"Simple value\");\n break;\n case ItemType.PERCENTILE_BAR:\n title = t(\"Percentile item\");\n break;\n case ItemType.LABEL:\n title = t(\"Label\");\n break;\n case ItemType.ICON:\n title = t(\"Icon\");\n break;\n case ItemType.SIMPLE_VALUE_MAX:\n title = t(\"Simple value\");\n break;\n case ItemType.SIMPLE_VALUE_MIN:\n title = t(\"Simple value\");\n break;\n case ItemType.SIMPLE_VALUE_AVG:\n title = t(\"Simple value\");\n break;\n case ItemType.PERCENTILE_BUBBLE:\n title = t(\"Percentile item\");\n break;\n case ItemType.SERVICE:\n title = t(\"Service\");\n break;\n case ItemType.GROUP_ITEM:\n title = t(\"Group\");\n break;\n case ItemType.BOX_ITEM:\n title = t(\"Box\");\n break;\n case ItemType.LINE_ITEM:\n title = t(\"Line\");\n break;\n case ItemType.AUTO_SLA_GRAPH:\n title = t(\"Event history graph\");\n break;\n case ItemType.CIRCULAR_PROGRESS_BAR:\n title = t(\"Percentile item\");\n break;\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n title = t(\"Percentile item\");\n break;\n case ItemType.DONUT_GRAPH:\n title = t(\"Serialized pie graph\");\n break;\n case ItemType.BARS_GRAPH:\n title = t(\"Bars graph\");\n break;\n case ItemType.CLOCK:\n title = t(\"Clock\");\n break;\n case ItemType.COLOR_CLOUD:\n title = t(\"Color cloud\");\n break;\n case ItemType.NETWORK_LINK:\n title = t(\"Network link\");\n break;\n case ItemType.ODOMETER:\n title = t(\"Odometer\");\n break;\n case ItemType.BASIC_CHART:\n title = t(\"Basic chart\");\n break;\n default:\n title = t(\"Item\");\n break;\n }\n\n return title;\n}\n\n/**\n * Base class of the visual console items. Should be extended to use its capabilities.\n */\nabstract class VisualConsoleItem<Props extends ItemProps> {\n // Properties of the item.\n public itemProps: Props;\n // Metadata of the item.\n private _metadata: ItemMeta;\n // Reference to the DOM element which will contain the item.\n public elementRef: HTMLElement = document.createElement(\"div\");\n public labelElementRef: HTMLElement = document.createElement(\"div\");\n // Reference to the DOM element which will contain the view of the item which extends this class.\n protected childElementRef: HTMLElement = document.createElement(\"div\");\n // Event manager for click events.\n private readonly clickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for double click events.\n private readonly dblClickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for moved events.\n private readonly movedEventManager = new TypedEvent<ItemMovedEvent>();\n // Event manager for stopped movement events.\n private readonly movementFinishedEventManager = new TypedEvent<\n ItemMovedEvent\n >();\n // Event manager for resized events.\n private readonly resizedEventManager = new TypedEvent<ItemResizedEvent>();\n // Event manager for resize finished events.\n private readonly resizeFinishedEventManager = new TypedEvent<\n ItemResizedEvent\n >();\n // Event manager for remove events.\n private readonly removeEventManager = new TypedEvent<ItemRemoveEvent>();\n // Event manager for selection change events.\n private readonly selectionChangedEventManager = new TypedEvent<\n ItemSelectionChangedEvent\n >();\n // List of references to clean the event listeners.\n private readonly disposables: Disposable[] = [];\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n public debouncedMovementSave = debounce(\n 500, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingMoved = false;\n\n const prevPosition = {\n x: this.props.x,\n y: this.props.y\n };\n const newPosition = {\n x: x,\n y: y\n };\n\n if (!this.positionChanged(prevPosition, newPosition)) return;\n\n // Save the new position to the props.\n this.move(x, y);\n // Emit the movement event.\n this.movementFinishedEventManager.emit({\n item: this,\n prevPosition: prevPosition,\n newPosition: newPosition\n });\n }\n );\n // This property will store the function\n // to clean the movement listener.\n private removeMovement: Function | null = null;\n\n /**\n * Start the movement funtionality.\n * @param element Element to move inside its container.\n */\n private initMovementListener(element: HTMLElement): void {\n // Avoid line movement as 'block' force using circles.\n if (\n this.props.type == ItemType.LINE_ITEM ||\n this.props.type == ItemType.NETWORK_LINK\n ) {\n return;\n }\n\n this.removeMovement = addMovementListener(\n element,\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n const prevPosition = {\n x: this.props.x,\n y: this.props.y\n };\n const newPosition = { x, y };\n\n this.meta = {\n ...this.meta,\n isSelected: true\n };\n\n if (!this.positionChanged(prevPosition, newPosition)) return;\n\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingMoved = true;\n // Move the DOM element.\n this.moveElement(x, y);\n // Emit the movement event.\n this.movedEventManager.emit({\n item: this,\n prevPosition: prevPosition,\n newPosition: newPosition\n });\n // Run the save function.\n this.debouncedMovementSave(x, y);\n }\n );\n }\n /**\n * Stop the movement fun\n */\n private stopMovementListener(): void {\n if (this.removeMovement) {\n this.removeMovement();\n this.removeMovement = null;\n }\n }\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n public debouncedResizementSave = debounce(\n 500, // ms.\n (width: Size[\"width\"], height: Size[\"height\"]) => {\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingResized = false;\n\n const prevSize = {\n width: this.props.width,\n height: this.props.height\n };\n const newSize = { width, height };\n\n if (!this.sizeChanged(prevSize, newSize)) return;\n\n // Save the new position to the props.\n this.resize(width, height);\n\n // Emit the resize finished event.\n this.resizeFinishedEventManager.emit({\n item: this,\n prevSize: prevSize,\n newSize: newSize\n });\n }\n );\n // This property will store the function\n // to clean the resizement listener.\n private removeResizement: Function | null = null;\n\n /**\n * Start the resizement funtionality.\n * @param element Element to move inside its container.\n */\n protected initResizementListener(element: HTMLElement): void {\n if (\n this.props.type == ItemType.LINE_ITEM ||\n this.props.type == ItemType.NETWORK_LINK\n ) {\n return;\n }\n this.removeResizement = addResizementListener(\n element,\n (width: Size[\"width\"], height: Size[\"height\"]) => {\n // Update the metadata information.\n // Don't use the .meta property cause we don't need DOM updates.\n this._metadata.isBeingResized = true;\n\n // The label it's outside the item's size, so we need\n // to get rid of its size to get the real size of the\n // item's content.\n if (this.props.label && this.props.label.length > 0) {\n const {\n width: labelWidth,\n height: labelHeight\n } = this.labelElementRef.getBoundingClientRect();\n\n switch (this.props.labelPosition) {\n case \"up\":\n case \"down\":\n height -= labelHeight;\n break;\n case \"left\":\n case \"right\":\n width -= labelWidth;\n break;\n }\n }\n\n const prevSize = {\n width: this.props.width,\n height: this.props.height\n };\n const newSize = { width, height };\n\n if (!this.sizeChanged(prevSize, newSize)) return;\n\n // Move the DOM element.\n this.resizeElement(width, height);\n // Emit the resizement event.\n this.resizedEventManager.emit({\n item: this,\n prevSize,\n newSize\n });\n // Run the save function.\n this.debouncedResizementSave(width, height);\n }\n );\n }\n /**\n * Stop the resizement functionality.\n */\n private stopResizementListener(): void {\n if (this.removeResizement) {\n this.removeResizement();\n this.removeResizement = null;\n }\n }\n\n /**\n * To create a new element which will be inside the item box.\n * @return Item.\n */\n protected abstract createDomElement(): HTMLElement;\n\n public constructor(\n props: Props,\n metadata: ItemMeta,\n deferInit: boolean = false\n ) {\n this.itemProps = props;\n this._metadata = metadata;\n\n if (!deferInit) this.init();\n }\n\n /**\n * To create and append the DOM elements.\n */\n protected init(): void {\n /*\n * Get a HTMLElement which represents the container box\n * of the Visual Console item. This element will manage\n * all the common things like click events, show a border\n * when hovered, etc.\n */\n this.elementRef = this.createContainerDomElement();\n this.labelElementRef = this.createLabelDomElement();\n\n /*\n * Get a HTMLElement which represents the custom view\n * of the Visual Console item. This element will be\n * different depending on the item implementation.\n */\n this.childElementRef = this.createDomElement();\n\n // Insert the elements into the container.\n this.elementRef.appendChild(this.childElementRef);\n this.elementRef.appendChild(this.labelElementRef);\n\n // Resize element.\n this.resizeElement(this.itemProps.width, this.itemProps.height);\n\n // Set label position.\n this.changeLabelPosition(this.itemProps.labelPosition);\n }\n\n /**\n * To create a new box for the visual console item.\n * @return Item box.\n */\n private createContainerDomElement(): HTMLElement {\n let box;\n if (this.props.isLinkEnabled) {\n box = document.createElement(\"a\") as HTMLAnchorElement;\n\n if (this.props.link) {\n box.href = this.props.link;\n } else {\n box.className = \"textDecorationNone\";\n }\n } else {\n box = document.createElement(\"div\") as HTMLDivElement;\n box.className = \"textDecorationNone\";\n }\n\n box.classList.add(\"visual-console-item\");\n if (this.props.isOnTop) {\n box.classList.add(\"is-on-top\");\n }\n\n box.style.left = `${this.props.x}px`;\n box.style.top = `${this.props.y}px`;\n\n if (this.props.alertOutline) {\n box.classList.add(\"is-alert-triggered\");\n }\n\n // Init the click listeners.\n box.addEventListener(\"dblclick\", e => {\n if (!this.meta.isBeingMoved && !this.meta.isBeingResized) {\n this.unSelectItem();\n this.selectItem();\n\n this.dblClickEventManager.emit({\n item: this,\n nativeEvent: e\n });\n }\n });\n box.addEventListener(\"click\", e => {\n if (this.meta.editMode) {\n e.preventDefault();\n e.stopPropagation();\n } else {\n // Add loading click item.\n if (this.itemProps.isLinkEnabled && this.itemProps.link != null) {\n const divParent = document.createElement(\"div\");\n divParent.className = \"div-visual-console-spinner\";\n const divSpinner = document.createElement(\"div\");\n divSpinner.className = \"visual-console-spinner\";\n divParent.appendChild(divSpinner);\n let path = e.composedPath();\n let containerId = \"visual-console-container\";\n for (let index = 0; index < path.length; index++) {\n const element = path[index] as HTMLInputElement;\n if (\n element.id != undefined &&\n element.id != null &&\n element.id != \"\"\n ) {\n if (element.id.includes(containerId) === true) {\n containerId = element.id;\n break;\n }\n }\n }\n\n const containerVC = document.getElementById(containerId);\n if (containerVC != null) {\n containerVC.classList.add(\"is-updating\");\n containerVC.appendChild(divParent);\n }\n }\n }\n\n if (!this.meta.isBeingMoved && !this.meta.isBeingResized) {\n this.clickEventManager.emit({\n item: this,\n nativeEvent: e\n });\n }\n });\n\n // Metadata state.\n if (this.meta.maintenanceMode) {\n box.classList.add(\"is-maintenance\");\n }\n if (this.meta.editMode) {\n box.classList.add(\"is-editing\");\n }\n if (this.meta.isFetching) {\n box.classList.add(\"is-fetching\");\n }\n if (this.meta.isUpdating) {\n box.classList.add(\"is-updating\");\n }\n if (this.meta.isSelected) {\n box.classList.add(\"is-selected\");\n }\n\n return box;\n }\n\n /**\n * To create a new label for the visual console item.\n * @return Item label.\n */\n protected createLabelDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"visual-console-item-label\";\n // Add the label if it exists.\n const label = this.getLabelWithMacrosReplaced();\n if (label.length > 0) {\n // Ugly table we need to use to replicate the legacy style.\n const table = document.createElement(\"table\");\n const row = document.createElement(\"tr\");\n const emptyRow1 = document.createElement(\"tr\");\n const emptyRow2 = document.createElement(\"tr\");\n const cell = document.createElement(\"td\");\n\n cell.innerHTML = label;\n row.appendChild(cell);\n table.appendChild(emptyRow1);\n table.appendChild(row);\n table.appendChild(emptyRow2);\n table.style.textAlign = \"center\";\n element.appendChild(table);\n }\n\n return element;\n }\n\n /**\n * Return the label stored into the props with some macros replaced.\n */\n protected getLabelWithMacrosReplaced(): string {\n // We assert that the props may have some needed properties.\n const props = this.props as Partial<WithModuleProps>;\n\n return replaceMacros(\n [\n {\n macro: \"_date_\",\n value: humanDate(new Date())\n },\n {\n macro: \"_time_\",\n value: humanTime(new Date())\n },\n {\n macro: \"_agent_\",\n value: props.agentAlias != null ? props.agentAlias : \"\"\n },\n {\n macro: \"_agentdescription_\",\n value: props.agentDescription != null ? props.agentDescription : \"\"\n },\n {\n macro: \"_address_\",\n value: props.agentAddress != null ? props.agentAddress : \"\"\n },\n {\n macro: \"_module_\",\n value: props.moduleName != null ? props.moduleName : \"\"\n },\n {\n macro: \"_moduledescription_\",\n value: props.moduleDescription != null ? props.moduleDescription : \"\"\n }\n ],\n this.props.label || \"\"\n );\n }\n\n /**\n * To update the content element.\n * @return Item.\n */\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.createDomElement().innerHTML;\n }\n\n /**\n * Public accessor of the `props` property.\n * @return Properties.\n */\n public get props(): Props {\n return { ...this.itemProps }; // Return a copy.\n }\n\n /**\n * Public setter of the `props` property.\n * If the new props are different enough than the\n * stored props, a render would be fired.\n * @param newProps\n */\n public set props(newProps: Props) {\n this.setProps(newProps);\n }\n\n /**\n * Clasic and protected version of the setter of the `props` property.\n * Useful to override it from children classes.\n * @param newProps\n */\n protected setProps(newProps: Props) {\n const prevProps = this.props;\n // Update the internal props.\n this.itemProps = newProps;\n\n // From this point, things which rely on this.props can access to the changes.\n\n // Check if we should re-render.\n if (this.shouldBeUpdated(prevProps, newProps))\n this.render(prevProps, this._metadata);\n }\n\n /**\n * Public accessor of the `meta` property.\n * @return Properties.\n */\n public get meta(): ItemMeta {\n return { ...this._metadata }; // Return a copy.\n }\n\n /**\n * Public setter of the `meta` property.\n * If the new meta are different enough than the\n * stored meta, a render would be fired.\n * @param newProps\n */\n public set meta(newMetadata: ItemMeta) {\n this.setMeta(newMetadata);\n }\n\n /**\n * Classic version of the setter of the `meta` property.\n * Useful to override it from children classes.\n * @param newProps\n */\n public setMeta(newMetadata: Partial<ItemMeta>): void {\n const prevMetadata = this._metadata;\n // Update the internal meta.\n this._metadata = {\n ...prevMetadata,\n ...newMetadata\n };\n\n if (\n typeof newMetadata.isSelected !== \"undefined\" &&\n prevMetadata.isSelected !== newMetadata.isSelected\n ) {\n this.selectionChangedEventManager.emit({\n selected: newMetadata.isSelected\n });\n }\n\n // From this point, things which rely on this.props can access to the changes.\n\n // Check if we should re-render.\n // if (this.shouldBeUpdated(prevMetadata, newMetadata))\n this.render(this.itemProps, prevMetadata);\n }\n\n /**\n * To compare the previous and the new props and returns a boolean value\n * in case the difference is meaningfull enough to perform DOM changes.\n *\n * Here, the only comparision is done by reference.\n *\n * Override this function to perform a different comparision depending on the item needs.\n *\n * @param prevProps\n * @param newProps\n * @return Whether the difference is meaningful enough to perform DOM changes or not.\n */\n protected shouldBeUpdated(prevProps: Props, newProps: Props): boolean {\n return prevProps !== newProps;\n }\n\n /**\n * To recreate or update the HTMLElement which represents the item into the DOM.\n * @param prevProps If exists it will be used to only perform DOM updates instead of a full replace.\n */\n public render(\n prevProps: Props | null = null,\n prevMeta: ItemMeta | null = null\n ): void {\n if (prevProps) {\n if (this.props.ratio !== 1 && this.props.type != ItemType.LINE_ITEM) {\n this.elementRef.style.transform = `scale(${\n this.props.ratio ? this.props.ratio : 1\n })`;\n this.elementRef.style.transformOrigin = \"left top\";\n this.elementRef.style.minWidth = \"max-content\";\n this.elementRef.style.minHeight = \"max-content\";\n }\n\n if (\n prevProps.type == ItemType.LINE_ITEM ||\n prevProps.type == ItemType.NETWORK_LINK\n ) {\n this.updateDomElement(this.childElementRef);\n }\n }\n // Move box.\n if (!prevProps || this.positionChanged(prevProps, this.props)) {\n this.moveElement(this.props.x, this.props.y);\n if (\n prevProps &&\n prevProps.type != ItemType.LINE_ITEM &&\n prevProps.type != ItemType.NETWORK_LINK\n ) {\n this.updateDomElement(this.childElementRef);\n }\n }\n\n // Resize box.\n if (!prevProps || this.sizeChanged(prevProps, this.props)) {\n this.resizeElement(this.props.width, this.props.height);\n if (\n prevProps &&\n prevProps.type != ItemType.LINE_ITEM &&\n prevProps.type != ItemType.NETWORK_LINK\n ) {\n this.updateDomElement(this.childElementRef);\n }\n }\n // Change label.\n const oldLabelHtml = this.labelElementRef.innerHTML;\n const newLabelHtml = this.createLabelDomElement().innerHTML;\n if (oldLabelHtml !== newLabelHtml) {\n this.labelElementRef.innerHTML = newLabelHtml;\n }\n\n // Change label position.\n if (!prevProps || prevProps.labelPosition !== this.props.labelPosition) {\n this.changeLabelPosition(this.props.labelPosition);\n }\n //Change z-index class is-on-top\n if (!prevProps || prevProps.isOnTop !== this.props.isOnTop) {\n if (this.props.isOnTop) {\n this.elementRef.classList.add(\"is-on-top\");\n } else {\n this.elementRef.classList.remove(\"is-on-top\");\n }\n }\n\n // Change link.\n if (prevProps && prevProps.isLinkEnabled !== this.props.isLinkEnabled) {\n const container = this.createContainerDomElement();\n // Copy the attributes.\n const attrs = this.elementRef.attributes;\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].nodeName !== \"id\") {\n let cloneIsNeeded = this.elementRef.getAttributeNode(\n attrs[i].nodeName\n );\n if (cloneIsNeeded !== null) {\n let cloneAttr = cloneIsNeeded.cloneNode(true) as Attr;\n container.setAttributeNode(cloneAttr);\n }\n }\n }\n // Replace the reference.\n if (this.elementRef.parentNode !== null) {\n this.elementRef.parentNode.replaceChild(container, this.elementRef);\n }\n\n // Changed the reference to the main element. It's ugly, but needed.\n this.elementRef = container;\n\n // Insert the elements into the container.\n this.elementRef.appendChild(this.childElementRef);\n this.elementRef.appendChild(this.labelElementRef);\n }\n\n if (\n prevProps &&\n this.props.isLinkEnabled &&\n prevProps.link !== this.props.link\n ) {\n if (this.props.link !== null) {\n this.elementRef.setAttribute(\"href\", this.props.link);\n }\n }\n\n // Change metadata related things.\n if (\n !prevMeta ||\n prevMeta.editMode !== this.meta.editMode ||\n prevMeta.maintenanceMode !== this.meta.maintenanceMode\n ) {\n if (this.meta.editMode && this.meta.maintenanceMode === false) {\n this.elementRef.classList.add(\"is-editing\");\n this.elementRef.classList.remove(\"is-alert-triggered\");\n } else {\n this.elementRef.classList.remove(\"is-editing\");\n\n if (this.props.alertOutline) {\n this.elementRef.classList.add(\"is-alert-triggered\");\n }\n }\n }\n\n if (!prevMeta || prevMeta.isFetching !== this.meta.isFetching) {\n if (this.meta.isFetching) {\n this.elementRef.classList.add(\"is-fetching\");\n } else {\n this.elementRef.classList.remove(\"is-fetching\");\n }\n }\n\n if (!prevMeta || prevMeta.isUpdating !== this.meta.isUpdating) {\n if (this.meta.isUpdating) {\n this.elementRef.classList.add(\"is-updating\");\n\n const divParent = document.createElement(\"div\");\n divParent.className = \"div-visual-console-spinner\";\n const divSpinner = document.createElement(\"div\");\n divSpinner.className = \"visual-console-spinner\";\n divParent.appendChild(divSpinner);\n this.elementRef.appendChild(divParent);\n } else {\n this.elementRef.classList.remove(\"is-updating\");\n\n const div = this.elementRef.querySelector(\n \".div-visual-console-spinner\"\n );\n if (div !== null) {\n const parent = div.parentElement;\n if (parent !== null) {\n parent.removeChild(div);\n }\n }\n }\n\n this.updateDomElement(this.childElementRef);\n }\n if (!prevMeta || prevMeta.isSelected !== this.meta.isSelected) {\n if (this.meta.isSelected) {\n this.elementRef.classList.add(\"is-selected\");\n this.elementRef.setAttribute(\"id\", \"item-selected-move\");\n } else {\n this.elementRef.classList.remove(\"is-selected\");\n this.elementRef.removeAttribute(\"id\");\n }\n }\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n */\n public remove(): void {\n // Call the remove event.\n this.removeEventManager.emit({ item: this });\n // Event listeners.\n this.disposables.forEach(disposable => {\n try {\n disposable.dispose();\n } catch (ignored) {} // eslint-disable-line no-empty\n });\n // VisualConsoleItem DOM element.\n this.elementRef.remove();\n }\n\n /**\n * Compare the previous and the new position and return\n * a boolean value in case the position changed.\n * @param prevPosition\n * @param newPosition\n * @return Whether the position changed or not.\n */\n protected positionChanged(\n prevPosition: Position,\n newPosition: Position\n ): boolean {\n return prevPosition.x !== newPosition.x || prevPosition.y !== newPosition.y;\n }\n\n /**\n * Move the label around the item content.\n * @param position Label position.\n */\n protected changeLabelPosition(position: Props[\"labelPosition\"]): void {\n switch (position) {\n case \"up\":\n this.elementRef.style.flexDirection = \"column-reverse\";\n break;\n case \"left\":\n this.elementRef.style.flexDirection = \"row-reverse\";\n break;\n case \"right\":\n this.elementRef.style.flexDirection = \"row\";\n break;\n case \"down\":\n default:\n this.elementRef.style.flexDirection = \"column\";\n break;\n }\n\n // Ugly table to show the label as its legacy counterpart.\n const tables = this.labelElementRef.getElementsByTagName(\"table\");\n const table = tables.length > 0 ? tables.item(0) : null;\n // Change the table size depending on its position.\n if (table) {\n switch (this.props.labelPosition) {\n case \"up\":\n case \"down\":\n if (this.props.width > 0) {\n table.style.width = `${this.props.width}px`;\n table.style.height = \"\";\n }\n break;\n case \"left\":\n case \"right\":\n if (this.props.height > 0) {\n table.style.width = \"\";\n table.style.height = `${this.props.height}px`;\n }\n break;\n }\n }\n }\n\n /**\n * Move the DOM container.\n * @param x Horizontal axis position.\n * @param y Vertical axis position.\n */\n public moveElement(x: number, y: number): void {\n this.elementRef.style.left = `${x}px`;\n this.elementRef.style.top = `${y}px`;\n }\n\n /**\n * Update the position into the properties and move the DOM container.\n * @param x Horizontal axis position.\n * @param y Vertical axis position.\n */\n public move(x: number, y: number): void {\n this.moveElement(x, y);\n this.itemProps = {\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n x,\n y\n };\n }\n\n /**\n * Compare the previous and the new size and return\n * a boolean value in case the size changed.\n * @param prevSize\n * @param newSize\n * @return Whether the size changed or not.\n */\n protected sizeChanged(prevSize: Size, newSize: Size): boolean {\n return (\n prevSize.width !== newSize.width || prevSize.height !== newSize.height\n );\n }\n\n /**\n * Resize the DOM content container.\n * @param width\n * @param height\n */\n public resizeElement(width: number, height: number): void {\n // The most valuable size is the content size.\n if (\n this.props.type != ItemType.LINE_ITEM &&\n this.props.type != ItemType.NETWORK_LINK\n ) {\n this.childElementRef.style.width = width > 0 ? `${width}px` : \"\";\n this.childElementRef.style.height = height > 0 ? `${height}px` : \"\";\n }\n\n if (this.props.label && this.props.label.length > 0) {\n // Ugly table to show the label as its legacy counterpart.\n const tables = this.labelElementRef.getElementsByTagName(\"table\");\n const table = tables.length > 0 ? tables.item(0) : null;\n\n if (table) {\n switch (this.props.labelPosition) {\n case \"up\":\n case \"down\":\n table.style.width = width > 0 ? `${width}px` : \"\";\n break;\n case \"left\":\n case \"right\":\n table.style.height = height > 0 ? `${height}px` : \"\";\n break;\n }\n }\n }\n }\n\n /**\n * Update the size into the properties and resize the DOM container.\n * @param width\n * @param height\n */\n public resize(width: number, height: number): void {\n this.resizeElement(width, height);\n this.itemProps = {\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n width,\n height\n };\n }\n\n /**\n * To add an event handler to the click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is clicked.\n */\n public onClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.clickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the double click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is double clicked.\n */\n public onDblClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.dblClickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the movement of visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onMoved(listener: Listener<ItemMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.movedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the movement stopped of visual console elements.\n * @param listener Function which is going to be executed when a linked console's movement is finished.\n */\n public onMovementFinished(listener: Listener<ItemMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.movementFinishedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the resizement of visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onResized(listener: Listener<ItemResizedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.resizedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the resizement finish of visual console elements.\n * @param listener Function which is going to be executed when a linked console is finished resizing.\n */\n public onResizeFinished(listener: Listener<ItemResizedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.resizeFinishedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to the removal of the item.\n * @param listener Function which is going to be executed when a item is removed.\n */\n public onRemove(listener: Listener<ItemRemoveEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.removeEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * To add an event handler to item selection.\n * @param listener Function which is going to be executed when a item is removed.\n */\n public onSelectionChanged(\n listener: Listener<ItemSelectionChangedEvent>\n ): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.selectionChangedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Select an item.\n * @param itemId Item Id.\n * @param unique To remove the selection of other items or not.\n */\n public selectItem(): void {\n this.meta = {\n ...this.meta,\n isSelected: true\n };\n\n this.initMovementListener(this.elementRef);\n if (\n this.props.type !== ItemType.LINE_ITEM &&\n this.props.type !== ItemType.NETWORK_LINK\n ) {\n this.initResizementListener(this.elementRef);\n }\n }\n\n /**\n * Unselect an item.\n * @param itemId Item Id.\n */\n public unSelectItem(): void {\n this.meta = {\n ...this.meta,\n isSelected: false\n };\n\n this.stopMovementListener();\n if (this.props.type !== ItemType.LINE_ITEM) {\n this.stopResizementListener();\n }\n }\n\n // TODO: Document\n public getFormContainer(): FormContainer {\n return VisualConsoleItem.getFormContainer(this.props);\n }\n\n // TODO: Document\n public static getFormContainer(props: Partial<ItemProps>): FormContainer {\n const title: string = props.type ? titleItem(props.type) : t(\"Item\");\n return new FormContainer(title, [], []);\n }\n}\n\nexport default VisualConsoleItem;\n","import { AnyObject, WithModuleProps } from \"../lib/types\";\nimport { modulePropsDecoder, decodeBase64, stringIsEmpty, t } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type BarsGraphProps = {\n type: ItemType.BARS_GRAPH;\n html: string;\n backgroundColor: \"white\" | \"black\" | \"transparent\";\n typeGraph: \"horizontal\" | \"vertical\";\n gridColor: string;\n} & ItemProps &\n WithModuleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param BarsGraphProps Raw value.\n */\nconst parseBarsGraphProps = (\n backgroundColor: unknown\n): BarsGraphProps[\"backgroundColor\"] => {\n switch (backgroundColor) {\n case \"white\":\n case \"black\":\n case \"transparent\":\n return backgroundColor;\n default:\n return \"transparent\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param typeGraph Raw value.\n */\nconst parseTypeGraph = (typeGraph: unknown): BarsGraphProps[\"typeGraph\"] => {\n switch (typeGraph) {\n case \"horizontal\":\n case \"vertical\":\n return typeGraph;\n default:\n return \"vertical\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the bars graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function barsGraphPropsDecoder(data: AnyObject): BarsGraphProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.BARS_GRAPH,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n backgroundColor: parseBarsGraphProps(data.backgroundColor),\n typeGraph: parseTypeGraph(data.typeGraph),\n gridColor: stringIsEmpty(data.gridColor) ? \"#000000\" : data.gridColor,\n ...modulePropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class BarsGraph extends Item<BarsGraphProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.innerHTML = this.props.html;\n element.className = \"bars-graph\";\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n decodeBase64,\n stringIsEmpty,\n parseIntOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type BasicChartProps = {\n type: ItemType.BASIC_CHART;\n html: string;\n period: number | null;\n value: number | null;\n status: string;\n moduleNameColor: string;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the basic chart props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function basicChartPropsDecoder(\n data: AnyObject\n): BasicChartProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.BASIC_CHART,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n period: parseIntOr(data.period, null),\n value: parseFloat(data.value),\n status: stringIsEmpty(data.status) ? \"#B2B2B2\" : data.status,\n moduleNameColor: stringIsEmpty(data.moduleNameColor)\n ? \"#3f3f3f\"\n : data.moduleNameColor,\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class BasicChart extends Item<BasicChartProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n\n const header = document.createElement(\"div\");\n header.className = \"basic-chart-header\";\n\n const moduleName = document.createElement(\"h2\");\n moduleName.className = \"basic-chart-header-name\";\n moduleName.textContent = this.props.moduleName;\n moduleName.style.color = `${this.props.moduleNameColor}`;\n header.appendChild(moduleName);\n\n let value = \"\";\n if (this.props.value !== null) {\n value = this.numberFormat(this.props.value, false, \"\", 2, 1000);\n }\n\n const moduleValue = document.createElement(\"h2\");\n moduleValue.className = \"basic-chart-header-value\";\n moduleValue.textContent = `${value}`;\n moduleValue.style.color = this.props.status;\n header.appendChild(moduleValue);\n\n element.innerHTML = this.props.html;\n element.className = \"basic-chart\";\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Remove the overview graph.\n const legendP = element.getElementsByTagName(\"p\");\n for (let i = 0; i < legendP.length; i++) {\n legendP[i].style.margin = \"0px\";\n }\n\n // Remove the overview graph.\n const overviewGraphs = element.getElementsByClassName(\"overview_graph\");\n for (let i = 0; i < overviewGraphs.length; i++) {\n overviewGraphs[i].remove();\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n element.innerHTML = this.props.html;\n element.insertBefore(header, element.firstChild);\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n const header = document.createElement(\"div\");\n header.className = \"basic-chart-header\";\n\n const moduleName = document.createElement(\"h2\");\n moduleName.className = \"basic-chart-header-name\";\n moduleName.textContent = this.props.moduleName;\n moduleName.style.color = `${this.props.moduleNameColor}`;\n header.appendChild(moduleName);\n\n let value = \"\";\n if (this.props.value !== null) {\n value = this.numberFormat(this.props.value, false, \"\", 2, 1000);\n }\n\n const moduleValue = document.createElement(\"h2\");\n moduleValue.className = \"basic-chart-header-value\";\n moduleValue.textContent = `${value}`;\n moduleValue.style.color = this.props.status;\n header.appendChild(moduleValue);\n\n element.innerHTML = this.props.html;\n element.insertBefore(header, element.firstChild);\n\n // Remove the overview graph.\n const legendP = element.getElementsByTagName(\"p\");\n for (let i = 0; i < legendP.length; i++) {\n legendP[i].style.margin = \"0px\";\n }\n\n // Remove the overview graph.\n const overviewGraphs = element.getElementsByClassName(\"overview_graph\");\n for (let i = 0; i < overviewGraphs.length; i++) {\n overviewGraphs[i].remove();\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n\n protected numberFormat(\n number: number,\n forceInteger: boolean,\n unit: string,\n shortData: number,\n divisor: number\n ) {\n divisor = typeof divisor !== \"undefined\" ? divisor : 1000;\n var decimals = 2;\n\n // Set maximum decimal precision to 99 in case shortData is not set.\n if (!shortData) {\n shortData = 99;\n }\n\n if (forceInteger) {\n if (Math.round(number) != number) {\n return \"\";\n }\n } else {\n shortData++;\n const auxDecimals = this.pad(\"1\", shortData, 0);\n number =\n Math.round(number * Number.parseInt(auxDecimals)) /\n Number.parseInt(auxDecimals);\n }\n\n var shorts = [\"\", \"K\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"];\n var pos = 0;\n\n while (Math.abs(number) >= divisor) {\n // As long as the number can be divided by 1000 or 1024.\n pos++;\n number = number / divisor;\n }\n\n if (divisor) {\n number = Math.round(number * decimals) / decimals;\n } else {\n number = Math.round(number * decimals);\n }\n\n if (isNaN(number)) {\n number = 0;\n }\n\n return number + \" \" + shorts[pos] + unit;\n }\n\n protected pad(input: string, length: number, padding: number): string {\n var str = input + \"\";\n return length <= str.length\n ? str\n : this.pad(str + padding, length, padding);\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n decodeBase64,\n stringIsEmpty,\n t\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type DonutGraphProps = {\n type: ItemType.DONUT_GRAPH;\n html: string;\n legendBackgroundColor: string;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the donut graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function donutGraphPropsDecoder(\n data: AnyObject\n): DonutGraphProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.DONUT_GRAPH,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n legendBackgroundColor: stringIsEmpty(data.legendBackgroundColor)\n ? \"#ffffff\"\n : data.legendBackgroundColor,\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class DonutGraph extends Item<DonutGraphProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"donut-graph\";\n element.innerHTML = this.props.html;\n element.style.backgroundColor = this.props.legendBackgroundColor;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n element.style.backgroundColor = this.props.legendBackgroundColor;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n}\n","import { AnyObject, WithModuleProps } from \"../lib/types\";\nimport {\n modulePropsDecoder,\n parseIntOr,\n decodeBase64,\n stringIsEmpty,\n t\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type EventsHistoryProps = {\n type: ItemType.AUTO_SLA_GRAPH;\n maxTime: number | null;\n legendColor: string;\n html: string;\n} & ItemProps &\n WithModuleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the events history props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function eventsHistoryPropsDecoder(\n data: AnyObject\n): EventsHistoryProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.AUTO_SLA_GRAPH,\n maxTime: parseIntOr(data.maxTime, null),\n legendColor: data.legendColor,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n ...modulePropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class EventsHistory extends Item<EventsHistoryProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"events-history\";\n element.innerHTML = this.props.html;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n var flotText = element.getElementsByClassName(\n \"noresizevc\"\n ) as HTMLCollectionOf<HTMLElement>;\n flotText[0].style.color = this.props.legendColor;\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const aux = document.createElement(\"div\");\n aux.innerHTML = this.props.html;\n const scripts = aux.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n\n var flotText = element.getElementsByClassName(\n \"noresizevc\"\n ) as HTMLCollectionOf<HTMLElement>;\n flotText[0].style.color = this.props.legendColor;\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n decodeBase64,\n stringIsEmpty,\n parseIntOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type ModuleGraphProps = {\n type: ItemType.MODULE_GRAPH;\n html: string;\n backgroundType: \"white\" | \"black\" | \"transparent\";\n graphType: \"line\" | \"area\";\n period: number | null;\n customGraphId: number | null;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param backgroundType Raw value.\n */\nconst parseBackgroundType = (\n backgroundType: unknown\n): ModuleGraphProps[\"backgroundType\"] => {\n switch (backgroundType) {\n case \"white\":\n case \"black\":\n case \"transparent\":\n return backgroundType;\n default:\n return \"transparent\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param graphType Raw value.\n */\nconst parseGraphType = (graphType: unknown): ModuleGraphProps[\"graphType\"] => {\n switch (graphType) {\n case \"line\":\n case \"area\":\n return graphType;\n default:\n return \"line\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the module graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function moduleGraphPropsDecoder(\n data: AnyObject\n): ModuleGraphProps | never {\n if (stringIsEmpty(data.html) && stringIsEmpty(data.encodedHtml)) {\n throw new TypeError(\"missing html content.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.MODULE_GRAPH,\n html: !stringIsEmpty(data.html)\n ? data.html\n : decodeBase64(data.encodedHtml),\n backgroundType: parseBackgroundType(data.backgroundType),\n period: parseIntOr(data.period, null),\n graphType: parseGraphType(data.graphType),\n customGraphId: parseIntOr(data.customGraphId, null),\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class ModuleGraph extends Item<ModuleGraphProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n\n element.innerHTML = this.props.html;\n element.className = \"module-graph\";\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n setTimeout(() => {\n try {\n eval(scripts[i].innerHTML.trim());\n } catch (ignored) {} // eslint-disable-line no-empty\n }, 0);\n }\n }\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.props.html;\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Hack to execute the JS after the HTML is added to the DOM.\n const scripts = element.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i].src.length === 0) {\n eval(scripts[i].innerHTML.trim());\n }\n }\n }\n}\n","import { IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\nimport \"./FontAwesomeIcon.styles.css\";\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\ninterface ExtraProps {\n size?: \"small\" | \"medium\" | \"large\";\n color?: string;\n spin?: boolean;\n pulse?: boolean;\n}\n\nconst fontAwesomeIcon = (\n iconDefinition: IconDefinition,\n title: string,\n { size, color, spin, pulse }: ExtraProps = {}\n): HTMLElement => {\n const container = document.createElement(\"figure\");\n container.title = title;\n container.className = `fa fa-${iconDefinition.iconName}`;\n\n if (size) container.classList.add(`fa-${size}`);\n\n if (spin) container.classList.add(\"fa-spin\");\n else if (pulse) container.classList.add(\"fa-pulse\");\n\n const icon = document.createElementNS(svgNS, \"svg\");\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n icon.setAttribute(\n \"viewBox\",\n `0 0 ${iconDefinition.icon[0]} ${iconDefinition.icon[1]}`\n );\n if (color) icon.setAttribute(\"fill\", color);\n\n // Path\n const path = document.createElementNS(svgNS, \"path\");\n const pathData =\n typeof iconDefinition.icon[4] === \"string\"\n ? iconDefinition.icon[4]\n : iconDefinition.icon[4][0];\n path.setAttribute(\"d\", pathData);\n\n icon.appendChild(path);\n container.appendChild(icon);\n\n return container;\n};\n\nexport default fontAwesomeIcon;\n","export interface Listener<T> {\n (event: T): void;\n}\n\nexport interface Disposable {\n dispose: () => void;\n}\n\n/** passes through events as they happen. You will not get events from before you start listening */\nexport default class TypedEvent<T> {\n private listeners: Listener<T>[] = [];\n private listenersOncer: Listener<T>[] = [];\n\n public on = (listener: Listener<T>): Disposable => {\n this.listeners.push(listener);\n return {\n dispose: () => this.off(listener)\n };\n };\n\n public once = (listener: Listener<T>): void => {\n this.listenersOncer.push(listener);\n };\n\n public off = (listener: Listener<T>): void => {\n const callbackIndex = this.listeners.indexOf(listener);\n if (callbackIndex > -1) this.listeners.splice(callbackIndex, 1);\n };\n\n public emit = (event: T): void => {\n /** Update any general listeners */\n this.listeners.forEach(listener => listener(event));\n\n /** Clear the `once` queue */\n this.listenersOncer.forEach(listener => listener(event));\n this.listenersOncer = [];\n };\n\n public pipe = (te: TypedEvent<T>): Disposable => this.on(e => te.emit(e));\n}\n","import {\n AnyObject,\n Position,\n Size,\n WithAgentProps,\n WithModuleProps,\n LinkedVisualConsoleProps,\n LinkedVisualConsolePropsStatus,\n UnknownObject,\n ItemMeta\n} from \"./types\";\n\nimport helpTipIcon from \"./help-tip.png\";\nimport fontAwesomeIcon from \"./FontAwesomeIcon\";\nimport { faPencilAlt, faListAlt } from \"@fortawesome/free-solid-svg-icons\";\nimport \"./autocomplete.css\";\n\n/**\n * Return a number or a default value from a raw value.\n * @param value Raw value from which we will try to extract a valid number.\n * @param defaultValue Default value to use if we cannot extract a valid number.\n * @return A valid number or the default value.\n */\nexport function parseIntOr<T>(value: unknown, defaultValue: T): number | T {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\" && value.length > 0 && !isNaN(parseInt(value)))\n return parseInt(value);\n else return defaultValue;\n}\n\n/**\n * Return a number or a default value from a raw value.\n * @param value Raw value from which we will try to extract a valid number.\n * @param defaultValue Default value to use if we cannot extract a valid number.\n * @return A valid number or the default value.\n */\nexport function parseFloatOr<T>(value: unknown, defaultValue: T): number | T {\n if (typeof value === \"number\") return value;\n if (\n typeof value === \"string\" &&\n value.length > 0 &&\n !isNaN(parseFloat(value))\n )\n return parseFloat(value);\n else return defaultValue;\n}\n\n/**\n * Check if a string exists and it's not empty.\n * @param value Value to check.\n * @return The check result.\n */\nexport function stringIsEmpty(value?: string | null): boolean {\n return value == null || value.length === 0;\n}\n\n/**\n * Return a not empty string or a default value from a raw value.\n * @param value Raw value from which we will try to extract a non empty string.\n * @param defaultValue Default value to use if we cannot extract a non empty string.\n * @return A non empty string or the default value.\n */\nexport function notEmptyStringOr<T>(\n value: unknown,\n defaultValue: T\n): string | T {\n return typeof value === \"string\" && value.length > 0 ? value : defaultValue;\n}\n\n/**\n * Return a boolean from a raw value.\n * @param value Raw value from which we will try to extract the boolean.\n * @return A valid boolean value. false by default.\n */\nexport function parseBoolean(value: unknown): boolean {\n if (typeof value === \"boolean\") return value;\n else if (typeof value === \"number\") return value > 0;\n else if (typeof value === \"string\") return value === \"1\" || value === \"true\";\n else return false;\n}\n\n/**\n * Return a valid date or a default value from a raw value.\n * @param value Raw value from which we will try to extract a valid date.\n * @param defaultValue Default value to use if we cannot extract a valid date.\n * @return A valid date or the default value.\n */\nexport function parseDateOr<T>(value: unknown, defaultValue: T): Date | T {\n if (value instanceof Date) return value;\n else if (typeof value === \"number\") return new Date(value * 1000);\n else if (\n typeof value === \"string\" &&\n !Number.isNaN(new Date(value).getTime())\n )\n return new Date(value);\n else return defaultValue;\n}\n\n/**\n * Pad the current string with another string (multiple times, if needed)\n * until the resulting string reaches the given length.\n * The padding is applied from the start (left) of the current string.\n * @param value Text that needs to be padded.\n * @param length Length of the returned text.\n * @param pad Text to add.\n * @return Padded text.\n */\nexport function leftPad(\n value: string | number,\n length: number,\n pad: string | number = \" \"\n): string {\n if (typeof value === \"number\") value = `${value}`;\n if (typeof pad === \"number\") pad = `${pad}`;\n\n const diffLength = length - value.length;\n if (diffLength === 0) return value;\n if (diffLength < 0) return value.substr(Math.abs(diffLength));\n\n if (diffLength === pad.length) return `${pad}${value}`;\n if (diffLength < pad.length) return `${pad.substring(0, diffLength)}${value}`;\n\n const repeatTimes = Math.floor(diffLength / pad.length);\n const restLength = diffLength - pad.length * repeatTimes;\n\n let newPad = \"\";\n for (let i = 0; i < repeatTimes; i++) newPad += pad;\n\n if (restLength === 0) return `${newPad}${value}`;\n return `${newPad}${pad.substring(0, restLength)}${value}`;\n}\n\n/* Decoders */\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the position.\n */\nexport function positionPropsDecoder(data: AnyObject): Position {\n return {\n x: parseIntOr(data.x, 0),\n y: parseIntOr(data.y, 0)\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the size.\n * @throws Will throw a TypeError if the width and height are not valid numbers.\n */\nexport function sizePropsDecoder(data: AnyObject): Size | never {\n if (\n data.width == null ||\n isNaN(parseInt(data.width)) ||\n data.height == null ||\n isNaN(parseInt(data.height))\n ) {\n throw new TypeError(\"invalid size.\");\n }\n\n return {\n width: parseInt(data.width),\n height: parseInt(data.height)\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the agent properties.\n */\nexport function agentPropsDecoder(data: AnyObject): WithAgentProps {\n const agentProps: WithAgentProps = {\n agentId: parseIntOr(data.agentId, null),\n agentName: notEmptyStringOr(data.agentName, null),\n agentAlias: notEmptyStringOr(data.agentAlias, null),\n agentDescription: notEmptyStringOr(data.agentDescription, null),\n agentAddress: notEmptyStringOr(data.agentAddress, null),\n agentDisabled: parseBoolean(data.agentDisabled)\n };\n\n return data.metaconsoleId != null\n ? {\n metaconsoleId: data.metaconsoleId,\n ...agentProps // Object spread: http://es6-features.org/#SpreadOperator\n }\n : agentProps;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the module and agent properties.\n */\nexport function modulePropsDecoder(data: AnyObject): WithModuleProps {\n return {\n moduleId: parseIntOr(data.moduleId, null),\n moduleName: notEmptyStringOr(data.moduleName, null),\n moduleDescription: notEmptyStringOr(data.moduleDescription, null),\n moduleDisabled: parseBoolean(data.moduleDisabled),\n ...agentPropsDecoder(data) // Object spread: http://es6-features.org/#SpreadOperator\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the linked visual console properties.\n * @throws Will throw a TypeError if the status calculation properties are invalid.\n */\nexport function linkedVCPropsDecoder(\n data: AnyObject\n): LinkedVisualConsoleProps | never {\n let linkedLayoutStatusProps: LinkedVisualConsolePropsStatus = {\n linkedLayoutStatusType: \"default\"\n };\n switch (data.linkedLayoutStatusType) {\n case \"weight\": {\n const weight = parseIntOr(data.linkedLayoutStatusTypeWeight, null);\n if (weight == null)\n throw new TypeError(\"invalid status calculation properties.\");\n\n if (data.linkedLayoutStatusTypeWeight)\n linkedLayoutStatusProps = {\n linkedLayoutStatusType: \"weight\",\n linkedLayoutStatusTypeWeight: weight\n };\n break;\n }\n case \"service\": {\n const warningThreshold = parseIntOr(\n data.linkedLayoutStatusTypeWarningThreshold,\n null\n );\n const criticalThreshold = parseIntOr(\n data.linkedLayoutStatusTypeCriticalThreshold,\n null\n );\n if (warningThreshold == null || criticalThreshold == null) {\n throw new TypeError(\"invalid status calculation properties.\");\n }\n\n linkedLayoutStatusProps = {\n linkedLayoutStatusType: \"service\",\n linkedLayoutStatusTypeWarningThreshold: warningThreshold,\n linkedLayoutStatusTypeCriticalThreshold: criticalThreshold\n };\n break;\n }\n }\n\n return {\n linkedLayoutId: parseIntOr(data.linkedLayoutId, null),\n linkedLayoutNodeId: parseIntOr(data.linkedLayoutNodeId, null),\n ...linkedLayoutStatusProps // Object spread: http://es6-features.org/#SpreadOperator\n };\n}\n\n/**\n * Build a valid typed object from a raw object.\n * @param data Raw object.\n * @return An object representing the item's meta properties.\n */\nexport function itemMetaDecoder(data: UnknownObject): ItemMeta | never {\n const receivedAt = parseDateOr(data.receivedAt, null);\n if (receivedAt === null) throw new TypeError(\"invalid meta structure\");\n\n let error = null;\n if (data.error instanceof Error) error = data.error;\n else if (typeof data.error === \"string\") error = new Error(data.error);\n\n return {\n receivedAt,\n error,\n editMode: parseBoolean(data.editMode),\n maintenanceMode: parseBoolean(data.maintenanceMode),\n isFromCache: parseBoolean(data.isFromCache),\n isFetching: false,\n isUpdating: false,\n isBeingMoved: false,\n isBeingResized: false,\n isSelected: false,\n lineMode: false\n };\n}\n\n/**\n * To get a CSS rule with the most used prefixes.\n * @param ruleName Name of the CSS rule.\n * @param ruleValue Value of the CSS rule.\n * @return An array of rules with the prefixes applied.\n */\nexport function prefixedCssRules(\n ruleName: string,\n ruleValue: string\n): string[] {\n const rule = `${ruleName}: ${ruleValue};`;\n return [\n `-webkit-${rule}`,\n `-moz-${rule}`,\n `-ms-${rule}`,\n `-o-${rule}`,\n `${rule}`\n ];\n}\n\n/**\n * Decode a base64 string.\n * @param input Data encoded using base64.\n * @return Decoded data.\n */\nexport function decodeBase64(input: string): string {\n return decodeURIComponent(escape(window.atob(input)));\n}\n\n/**\n * Generate a date representation with the format 'd/m/Y'.\n * @param initialDate Date to be used instead of a generated one.\n * @param locale Locale to use if localization is required and available.\n * @example 24/02/2020.\n * @return Date representation.\n */\nexport function humanDate(date: Date, locale: string | null = null): string {\n if (locale && Intl && Intl.DateTimeFormat) {\n // Format using the user locale.\n const options: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\"\n };\n return Intl.DateTimeFormat(locale, options).format(date);\n } else {\n // Use getDate, getDay returns the week day.\n const day = leftPad(date.getDate(), 2, 0);\n // The getMonth function returns the month starting by 0.\n const month = leftPad(date.getMonth() + 1, 2, 0);\n const year = leftPad(date.getFullYear(), 4, 0);\n\n // Format: 'd/m/Y'.\n return `${day}/${month}/${year}`;\n }\n}\n\n/**\n * Generate a time representation with the format 'hh:mm:ss'.\n * @param initialDate Date to be used instead of a generated one.\n * @example 01:34:09.\n * @return Time representation.\n */\nexport function humanTime(date: Date): string {\n const hours = leftPad(date.getHours(), 2, 0);\n const minutes = leftPad(date.getMinutes(), 2, 0);\n const seconds = leftPad(date.getSeconds(), 2, 0);\n\n return `${hours}:${minutes}:${seconds}`;\n}\n\ninterface Macro {\n macro: string | RegExp;\n value: string;\n}\n/**\n * Replace the macros of a text.\n * @param macros List of macros and their replacements.\n * @param text Text in which we need to replace the macros.\n */\nexport function replaceMacros(macros: Macro[], text: string): string {\n return macros.reduce(\n (acc, { macro, value }) => acc.replace(macro, value),\n text\n );\n}\n\n/**\n * Create a function which will limit the rate of execution of\n * the selected function to one time for the selected interval.\n * @param delay Interval.\n * @param fn Function to be executed at a limited rate.\n */\nexport function throttle<T, R>(delay: number, fn: (...args: T[]) => R) {\n let last = 0;\n return (...args: T[]) => {\n const now = Date.now();\n if (now - last < delay) return;\n last = now;\n return fn(...args);\n };\n}\n\n/**\n * Create a function which will call the selected function only\n * after the interval time has passed after its last execution.\n * @param delay Interval.\n * @param fn Function to be executed after the last call.\n */\nexport function debounce<T>(delay: number, fn: (...args: T[]) => void) {\n let timerRef: number | null = null;\n return (...args: T[]) => {\n if (timerRef !== null) window.clearTimeout(timerRef);\n timerRef = window.setTimeout(() => {\n fn(...args);\n timerRef = null;\n }, delay);\n };\n}\n\n/**\n * Retrieve the offset of an element relative to the page.\n * @param el Node used to calculate the offset.\n */\nfunction getOffset(el: HTMLElement | null, parent?: HTMLElement) {\n let x = 0;\n let y = 0;\n while (\n el &&\n !Number.isNaN(el.offsetLeft) &&\n !Number.isNaN(el.offsetTop) &&\n el !== parent\n ) {\n x += el.offsetLeft - el.scrollLeft;\n y += el.offsetTop - el.scrollTop;\n el = el.offsetParent as HTMLElement | null;\n }\n return { top: y, left: x };\n}\n\n/**\n * Add the grab & move functionality to a certain element inside it's container.\n *\n * @param element Element to move.\n * @param onMoved Function to execute when the element moves.\n * @param altContainer Alternative element to contain the moved element.\n *\n * @return A function which will clean the event handlers when executed.\n */\nexport function addMovementListener(\n element: HTMLElement,\n onMoved: (x: Position[\"x\"], y: Position[\"y\"]) => void,\n altContainer?: HTMLElement\n): Function {\n const container = altContainer || (element.parentElement as HTMLElement);\n\n // Store the initial draggable state.\n const isDraggable = element.draggable;\n // Init the coordinates.\n let lastX: Position[\"x\"] = 0;\n let lastY: Position[\"y\"] = 0;\n let lastMouseX: Position[\"x\"] = 0;\n let lastMouseY: Position[\"y\"] = 0;\n let mouseElementOffsetX: Position[\"x\"] = 0;\n let mouseElementOffsetY: Position[\"y\"] = 0;\n // Bounds.\n let containerBounds = container.getBoundingClientRect();\n let containerOffset = getOffset(container);\n let containerTop = containerOffset.top;\n let containerBottom = containerTop + containerBounds.height;\n let containerLeft = containerOffset.left;\n let containerRight = containerLeft + containerBounds.width;\n let elementBounds = element.getBoundingClientRect();\n let borderWidth = window.getComputedStyle(element).borderWidth || \"0\";\n let borderFix = Number.parseInt(borderWidth) * 2;\n\n // Will run onMoved 32ms after its last execution.\n const debouncedMovement = debounce(32, onMoved);\n // Will run onMoved one time max every 16ms.\n const throttledMovement = throttle(16, onMoved);\n\n const handleMove = (e: MouseEvent) => {\n // Calculate the new element coordinates.\n let x = 0;\n let y = 0;\n\n const mouseX = e.pageX;\n const mouseY = e.pageY;\n const mouseDeltaX = mouseX - lastMouseX;\n const mouseDeltaY = mouseY - lastMouseY;\n\n const minX = 0;\n const maxX = containerBounds.width - elementBounds.width + borderFix;\n const minY = 0;\n const maxY = containerBounds.height - elementBounds.height + borderFix;\n\n const outOfBoundsLeft =\n mouseX < containerLeft ||\n (lastX === 0 &&\n mouseDeltaX > 0 &&\n mouseX < containerLeft + mouseElementOffsetX);\n const outOfBoundsRight =\n mouseX > containerRight ||\n mouseDeltaX + lastX + elementBounds.width - borderFix >\n containerBounds.width ||\n (lastX === maxX &&\n mouseDeltaX < 0 &&\n mouseX > containerLeft + maxX + mouseElementOffsetX);\n const outOfBoundsTop =\n mouseY < containerTop ||\n (lastY === 0 &&\n mouseDeltaY > 0 &&\n mouseY < containerTop + mouseElementOffsetY);\n const outOfBoundsBottom =\n mouseY > containerBottom ||\n mouseDeltaY + lastY + elementBounds.height - borderFix >\n containerBounds.height ||\n (lastY === maxY &&\n mouseDeltaY < 0 &&\n mouseY > containerTop + maxY + mouseElementOffsetY);\n\n if (outOfBoundsLeft) x = minX;\n else if (outOfBoundsRight) x = maxX;\n else x = mouseDeltaX + lastX;\n\n if (outOfBoundsTop) y = minY;\n else if (outOfBoundsBottom) y = maxY;\n else y = mouseDeltaY + lastY;\n\n if (x < 0) x = minX;\n if (y < 0) y = minY;\n\n // Store the last mouse coordinates.\n lastMouseX = mouseX;\n lastMouseY = mouseY;\n\n if (x === lastX && y === lastY) return;\n\n // Run the movement events.\n throttledMovement(x, y);\n debouncedMovement(x, y);\n\n // Store the coordinates of the element.\n lastX = x;\n lastY = y;\n };\n const handleEnd = () => {\n // Reset the positions.\n lastX = 0;\n lastY = 0;\n lastMouseX = 0;\n lastMouseY = 0;\n // Remove the move event.\n document.removeEventListener(\"mousemove\", handleMove);\n // Clean itself.\n document.removeEventListener(\"mouseup\", handleEnd);\n // Reset the draggable property to its initial state.\n element.draggable = isDraggable;\n // Reset the body selection property to a default state.\n document.body.style.userSelect = \"auto\";\n };\n const handleStart = (e: MouseEvent) => {\n // Avoid starting the movement on right click.\n if (e.button === 2) return;\n\n e.stopPropagation();\n\n // Disable the drag temporarily.\n element.draggable = false;\n\n // Fix for Firefox browser.\n element.setAttribute(\"ondragstart\", \"return false;\");\n element.setAttribute(\"draggable\", \"false\");\n\n // Store the difference between the cursor and\n // the initial coordinates of the element.\n const elementOffset = getOffset(element, container);\n lastX = elementOffset.left;\n lastY = elementOffset.top;\n\n // Store the mouse position.\n lastMouseX = e.pageX;\n lastMouseY = e.pageY;\n // Store the relative position between the mouse and the element.\n mouseElementOffsetX = e.offsetX;\n mouseElementOffsetY = e.offsetY;\n\n // Initialize the bounds.\n containerBounds = container.getBoundingClientRect();\n containerOffset = getOffset(container);\n containerTop = containerOffset.top;\n containerBottom = containerTop + containerBounds.height;\n containerLeft = containerOffset.left;\n containerRight = containerLeft + containerBounds.width;\n elementBounds = element.getBoundingClientRect();\n borderWidth = window.getComputedStyle(element).borderWidth || \"0\";\n borderFix = Number.parseInt(borderWidth) * 2;\n\n // Listen to the mouse movement.\n document.addEventListener(\"mousemove\", handleMove);\n // Listen to the moment when the mouse click is not pressed anymore.\n document.addEventListener(\"mouseup\", handleEnd);\n // Limit the mouse selection of the body.\n document.body.style.userSelect = \"none\";\n };\n\n // Event to listen the init of the movement.\n element.addEventListener(\"mousedown\", handleStart);\n\n // Returns a function to clean the event listeners.\n return () => {\n element.removeEventListener(\"mousedown\", handleStart);\n handleEnd();\n };\n}\n\n/**\n * Add the grab & resize functionality to a certain element.\n *\n * @param element Element to move.\n * @param onResized Function to execute when the element is resized.\n *\n * @return A function which will clean the event handlers when executed.\n */\nexport function addResizementListener(\n element: HTMLElement,\n onResized: (x: Position[\"x\"], y: Position[\"y\"]) => void\n): Function {\n const minWidth = 15;\n const minHeight = 15;\n\n const resizeDraggable = document.createElement(\"div\");\n resizeDraggable.className = \"resize-draggable\";\n element.appendChild(resizeDraggable);\n\n // Container of the resizable element.\n const container = element.parentElement as HTMLElement;\n // Store the initial draggable state.\n const isDraggable = element.draggable;\n // Init the coordinates.\n let lastWidth: Size[\"width\"] = 0;\n let lastHeight: Size[\"height\"] = 0;\n let lastMouseX: Position[\"x\"] = 0;\n let lastMouseY: Position[\"y\"] = 0;\n let mouseElementOffsetX: Position[\"x\"] = 0;\n let mouseElementOffsetY: Position[\"y\"] = 0;\n // Init the bounds.\n let containerBounds = container.getBoundingClientRect();\n let containerOffset = getOffset(container);\n let containerTop = containerOffset.top;\n let containerBottom = containerTop + containerBounds.height;\n let containerLeft = containerOffset.left;\n let containerRight = containerLeft + containerBounds.width;\n let elementOffset = getOffset(element);\n let elementTop = elementOffset.top;\n let elementLeft = elementOffset.left;\n let borderWidth = window.getComputedStyle(element).borderWidth || \"0\";\n let borderFix = Number.parseInt(borderWidth);\n\n // Will run onResized 32ms after its last execution.\n const debouncedResizement = debounce(32, onResized);\n // Will run onResized one time max every 16ms.\n const throttledResizement = throttle(16, onResized);\n\n const handleResize = (e: MouseEvent) => {\n // Calculate the new element coordinates.\n let width = lastWidth + (e.pageX - lastMouseX);\n let height = lastHeight + (e.pageY - lastMouseY);\n\n if (width === lastWidth && height === lastHeight) return;\n\n if (\n width < lastWidth &&\n e.pageX > elementLeft + (lastWidth - mouseElementOffsetX)\n )\n return;\n\n if (width < minWidth) {\n // Minimum value.\n width = minWidth;\n } else if (width + elementLeft - borderFix / 2 >= containerRight) {\n // Limit the size to the container.\n width = containerRight - elementLeft;\n }\n if (height < minHeight) {\n // Minimum value.\n height = minHeight;\n } else if (height + elementTop - borderFix / 2 >= containerBottom) {\n // Limit the size to the container.\n height = containerBottom - elementTop;\n }\n\n // Run the movement events.\n throttledResizement(width, height);\n debouncedResizement(width, height);\n\n // Store the coordinates of the element.\n lastWidth = width;\n lastHeight = height;\n // Store the last mouse coordinates.\n lastMouseX = e.pageX;\n lastMouseY = e.pageY;\n };\n const handleEnd = () => {\n // Reset the positions.\n lastWidth = 0;\n lastHeight = 0;\n lastMouseX = 0;\n lastMouseY = 0;\n mouseElementOffsetX = 0;\n mouseElementOffsetY = 0;\n // Remove the move event.\n document.removeEventListener(\"mousemove\", handleResize);\n // Clean itself.\n document.removeEventListener(\"mouseup\", handleEnd);\n // Reset the draggable property to its initial state.\n element.draggable = isDraggable;\n // Reset the body selection property to a default state.\n document.body.style.userSelect = \"auto\";\n };\n const handleStart = (e: MouseEvent) => {\n e.stopPropagation();\n\n // Disable the drag temporarily.\n element.draggable = false;\n\n // Store the difference between the cursor and\n // the initial coordinates of the element.\n const { width, height } = element.getBoundingClientRect();\n lastWidth = width;\n lastHeight = height;\n // Store the mouse position.\n lastMouseX = e.pageX;\n lastMouseY = e.pageY;\n // Store the relative position between the mouse and the element.\n mouseElementOffsetX = e.offsetX;\n mouseElementOffsetY = e.offsetY;\n\n // Initialize the bounds.\n containerBounds = container.getBoundingClientRect();\n containerOffset = getOffset(container);\n containerTop = containerOffset.top;\n containerBottom = containerTop + containerBounds.height;\n containerLeft = containerOffset.left;\n containerRight = containerLeft + containerBounds.width;\n elementOffset = getOffset(element);\n elementTop = elementOffset.top;\n elementLeft = elementOffset.left;\n\n // Listen to the mouse movement.\n document.addEventListener(\"mousemove\", handleResize);\n // Listen to the moment when the mouse click is not pressed anymore.\n document.addEventListener(\"mouseup\", handleEnd);\n // Limit the mouse selection of the body.\n document.body.style.userSelect = \"none\";\n };\n\n // Event to listen the init of the movement.\n resizeDraggable.addEventListener(\"mousedown\", handleStart);\n\n // Returns a function to clean the event listeners.\n return () => {\n resizeDraggable.remove();\n handleEnd();\n };\n}\n\n// TODO: Document and code\nexport function t(text: string): string {\n return text;\n}\n\nexport function helpTip(text: string): HTMLElement {\n const container = document.createElement(\"a\");\n container.className = \"tip\";\n const icon = document.createElement(\"img\");\n icon.src = helpTipIcon;\n icon.className = \"forced_title\";\n icon.setAttribute(\"alt\", text);\n icon.setAttribute(\"data-title\", text);\n icon.setAttribute(\"data-use_title_for_force_title\", \"1\");\n\n container.appendChild(icon);\n\n return container;\n}\n\ninterface PeriodSelectorOption {\n value: number;\n text: string;\n}\nexport function periodSelector(\n selectedValue: PeriodSelectorOption[\"value\"] | null,\n emptyOption: PeriodSelectorOption | null,\n options: PeriodSelectorOption[],\n onChange: (value: PeriodSelectorOption[\"value\"]) => void\n): HTMLElement {\n if (selectedValue === null) selectedValue = 0;\n const initialValue = emptyOption ? emptyOption.value : 0;\n let currentValue: number =\n selectedValue != null ? selectedValue : initialValue;\n // Main container.\n const container = document.createElement(\"div\");\n // Container for the period selector.\n const periodsContainer = document.createElement(\"div\");\n const selectPeriods = document.createElement(\"select\");\n const useManualPeriodsBtn = document.createElement(\"a\");\n // Container for the custom period input.\n const manualPeriodsContainer = document.createElement(\"div\");\n const inputTimeValue = document.createElement(\"input\");\n const unitsSelect = document.createElement(\"select\");\n const usePeriodsBtn = document.createElement(\"a\");\n // Units to multiply the custom period input.\n const unitOptions: { value: string; text: string }[] = [\n { value: \"1\", text: t(\"Seconds\").toLowerCase() },\n { value: \"60\", text: t(\"Minutes\").toLowerCase() },\n { value: \"3600\", text: t(\"Hours\").toLowerCase() },\n { value: \"86400\", text: t(\"Days\").toLowerCase() },\n { value: \"604800\", text: t(\"Weeks\").toLowerCase() },\n { value: `${86400 * 30}`, text: t(\"Months\").toLowerCase() },\n { value: `${86400 * 30 * 12}`, text: t(\"Years\").toLowerCase() }\n ];\n\n // Will be executed every time the value changes.\n const handleChange = (value: number) => {\n currentValue = value;\n onChange(currentValue);\n };\n // Will return the first period option smaller than the value.\n const findPeriodsOption = (value: number) =>\n options\n .sort((a, b) => (a.value < b.value ? 1 : -1))\n .find(optionVal => value >= optionVal.value);\n // Will return the first multiple of the value using the custom input multipliers.\n const findManualPeriodsOptionValue = (value: number) =>\n unitOptions\n .map(unitOption => Number.parseInt(unitOption.value))\n .sort((a, b) => (a < b ? 1 : -1))\n .find(optionVal => value % optionVal === 0);\n // Will find and set a valid option for the period selector.\n const setPeriodsValue = (value: number) => {\n let option = findPeriodsOption(value);\n selectPeriods.value = `${option ? option.value : initialValue}`;\n };\n // Will transform the value to show the perfect fit for the custom input period.\n const setManualPeriodsValue = (value: number) => {\n const optionVal = findManualPeriodsOptionValue(value);\n if (optionVal) {\n inputTimeValue.value = `${value / optionVal}`;\n unitsSelect.value = `${optionVal}`;\n } else {\n inputTimeValue.value = `${value}`;\n unitsSelect.value = \"1\";\n }\n };\n\n // Will modify the value to show the perfect fit for this element and show its container.\n const showPeriods = () => {\n let option = findPeriodsOption(currentValue);\n const newValue = option ? option.value : initialValue;\n selectPeriods.value = `${newValue}`;\n\n if (newValue !== currentValue) handleChange(newValue);\n\n container.replaceChild(periodsContainer, manualPeriodsContainer);\n };\n // Will modify the value to show the perfect fit for this element and show its container.\n const showManualPeriods = () => {\n const optionVal = findManualPeriodsOptionValue(currentValue);\n\n if (optionVal) {\n inputTimeValue.value = `${currentValue / optionVal}`;\n unitsSelect.value = `${optionVal}`;\n } else {\n inputTimeValue.value = `${currentValue}`;\n unitsSelect.value = \"1\";\n }\n\n container.replaceChild(manualPeriodsContainer, periodsContainer);\n };\n\n // Append the elements\n\n periodsContainer.appendChild(selectPeriods);\n periodsContainer.appendChild(useManualPeriodsBtn);\n\n manualPeriodsContainer.appendChild(inputTimeValue);\n manualPeriodsContainer.appendChild(unitsSelect);\n manualPeriodsContainer.appendChild(usePeriodsBtn);\n\n if (\n options.find(option => option.value === selectedValue) ||\n (emptyOption && emptyOption.value === selectedValue)\n ) {\n // Start with the custom periods select.\n container.appendChild(periodsContainer);\n } else {\n // Start with the manual time input\n container.appendChild(manualPeriodsContainer);\n }\n\n // Set and fill the elements.\n\n // Periods selector.\n\n selectPeriods.addEventListener(\"change\", (e: Event) =>\n handleChange(\n parseIntOr((e.target as HTMLSelectElement).value, initialValue)\n )\n );\n if (emptyOption) {\n const optionElem = document.createElement(\"option\");\n optionElem.value = `${emptyOption.value}`;\n optionElem.text = emptyOption.text;\n selectPeriods.appendChild(optionElem);\n }\n options.forEach(option => {\n const optionElem = document.createElement(\"option\");\n optionElem.value = `${option.value}`;\n optionElem.text = option.text;\n selectPeriods.appendChild(optionElem);\n });\n\n setPeriodsValue(selectedValue);\n\n useManualPeriodsBtn.appendChild(\n fontAwesomeIcon(faPencilAlt, t(\"Show manual period input\"), {\n size: \"small\"\n })\n );\n useManualPeriodsBtn.addEventListener(\"click\", e => {\n e.preventDefault();\n showManualPeriods();\n });\n\n // Manual periods input.\n\n inputTimeValue.type = \"number\";\n inputTimeValue.min = \"0\";\n inputTimeValue.required = true;\n inputTimeValue.addEventListener(\"change\", (e: Event) =>\n handleChange(\n parseIntOr((e.target as HTMLSelectElement).value, 0) *\n parseIntOr(unitsSelect.value, 1)\n )\n );\n // Select for time units.\n unitsSelect.addEventListener(\"change\", (e: Event) =>\n handleChange(\n parseIntOr(inputTimeValue.value, 0) *\n parseIntOr((e.target as HTMLSelectElement).value, 1)\n )\n );\n unitOptions.forEach(option => {\n const optionElem = document.createElement(\"option\");\n optionElem.value = `${option.value}`;\n optionElem.text = option.text;\n unitsSelect.appendChild(optionElem);\n });\n\n setManualPeriodsValue(selectedValue);\n\n usePeriodsBtn.appendChild(\n fontAwesomeIcon(faListAlt, t(\"Show periods selector\"), { size: \"small\" })\n );\n usePeriodsBtn.addEventListener(\"click\", e => {\n e.preventDefault();\n showPeriods();\n });\n\n return container;\n}\n\n/**\n * Cuts the text if their length is greater than the selected max length\n * and applies the selected ellipse to the result text.\n * @param str Text to cut\n * @param max Maximum length after cutting the text\n * @param ellipse String to be added to the cutted text\n * @returns Full text or text cutted with the ellipse\n */\nexport function ellipsize(\n str: string,\n max: number = 140,\n ellipse: string = \"…\"\n): string {\n return str.trim().length > max ? str.substr(0, max).trim() + ellipse : str;\n}\n\n// TODO: Document\nexport function autocompleteInput<T>(\n initialValue: string | null,\n onDataRequested: (value: string, done: (data: T[]) => void) => void,\n renderListElement: (data: T) => HTMLElement,\n onSelected: (data: T) => string\n): HTMLElement {\n const container = document.createElement(\"div\");\n container.classList.add(\"autocomplete\");\n\n const input = document.createElement(\"input\");\n input.type = \"text\";\n input.required = true;\n if (initialValue !== null) input.value = initialValue;\n\n const list = document.createElement(\"div\");\n list.classList.add(\"autocomplete-items\");\n\n const cleanList = () => {\n list.innerHTML = \"\";\n };\n\n input.addEventListener(\"keyup\", e => {\n const value = (e.target as HTMLInputElement).value;\n if (value) {\n onDataRequested(value, data => {\n cleanList();\n if (data instanceof Array) {\n data.forEach(item => {\n const listElement = renderListElement(item);\n listElement.addEventListener(\"click\", () => {\n input.value = onSelected(item);\n cleanList();\n });\n list.appendChild(listElement);\n });\n }\n });\n } else {\n cleanList();\n }\n });\n\n container.appendChild(input);\n container.appendChild(list);\n\n return container;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n WithModuleProps,\n LinkedVisualConsoleProps,\n AnyObject\n} from \"../lib/types\";\n\nimport {\n modulePropsDecoder,\n linkedVCPropsDecoder,\n notEmptyStringOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type StaticGraphProps = {\n type: ItemType.STATIC_GRAPH;\n imageSrc: string; // URL?\n showLastValueTooltip: \"default\" | \"enabled\" | \"disabled\";\n statusImageSrc: string | null; // URL?\n lastValue: string | null;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param showLastValueTooltip Raw value.\n */\nconst parseShowLastValueTooltip = (\n showLastValueTooltip: unknown\n): StaticGraphProps[\"showLastValueTooltip\"] => {\n switch (showLastValueTooltip) {\n case \"default\":\n case \"enabled\":\n case \"disabled\":\n return showLastValueTooltip;\n default:\n return \"default\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the static graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function staticGraphPropsDecoder(\n data: AnyObject\n): StaticGraphProps | never {\n if (typeof data.imageSrc !== \"string\" || data.imageSrc.length === 0) {\n throw new TypeError(\"invalid image src.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.STATIC_GRAPH,\n imageSrc: data.imageSrc,\n showLastValueTooltip: parseShowLastValueTooltip(data.showLastValueTooltip),\n statusImageSrc: notEmptyStringOr(data.statusImageSrc, null),\n lastValue: notEmptyStringOr(data.lastValue, null),\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class StaticGraph extends Item<StaticGraphProps> {\n protected createDomElement(): HTMLElement {\n const imgSrc = this.props.statusImageSrc || this.props.imageSrc;\n const element = document.createElement(\"div\");\n element.className = \"static-graph\";\n element.setAttribute(\"ondragstart\", \"return false;\");\n element.setAttribute(\"draggable\", \"false\");\n element.style.backgroundImage = `url(${imgSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Show last value in a tooltip.\n if (\n this.props.lastValue !== null &&\n this.props.showLastValueTooltip !== \"disabled\"\n ) {\n element.className = \"static-graph image forced_title\";\n element.setAttribute(\"data-use_title_for_force_title\", \"1\");\n element.setAttribute(\"data-title\", this.props.lastValue);\n }\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n const imgSrc = this.props.statusImageSrc || this.props.imageSrc;\n element.style.backgroundImage = `url(${imgSrc})`;\n }\n}\n","import { LinkedVisualConsoleProps, AnyObject } from \"../lib/types\";\nimport { linkedVCPropsDecoder } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type IconProps = {\n type: ItemType.ICON;\n image: string;\n imageSrc: string; // URL?\n} & ItemProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the icon props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function iconPropsDecoder(data: AnyObject): IconProps | never {\n if (typeof data.imageSrc !== \"string\" || data.imageSrc.length === 0) {\n throw new TypeError(\"invalid image src.\");\n }\n\n if (typeof data.image !== \"string\" || data.image.length === 0) {\n throw new TypeError(\"invalid image.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.ICON,\n image: data.image,\n imageSrc: data.imageSrc,\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Icon extends Item<IconProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"icon \" + this.props.image;\n element.style.backgroundImage = `url(${this.props.imageSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n element.style.backgroundImage = `url(${this.props.imageSrc})`;\n }\n}\n","/*!\n * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\nvar prefix = \"fas\";\nvar faAd = {\n prefix: 'fas',\n iconName: 'ad',\n icon: [512, 512, [], \"f641\", \"M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z\"]\n};\nvar faAddressBook = {\n prefix: 'fas',\n iconName: 'address-book',\n icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faAddressCard = {\n prefix: 'fas',\n iconName: 'address-card',\n icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faAdjust = {\n prefix: 'fas',\n iconName: 'adjust',\n icon: [512, 512, [], \"f042\", \"M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z\"]\n};\nvar faAirFreshener = {\n prefix: 'fas',\n iconName: 'air-freshener',\n icon: [512, 512, [], \"f5d0\", \"M224 160H96C43 160 0 203 0 256V480C0 497.625 14.375 512 32 512H288C305.625 512 320 497.625 320 480V256C320 203 277 160 224 160ZM160 416C115.875 416 80 380.125 80 336S115.875 256 160 256S240 291.875 240 336S204.125 416 160 416ZM224 32C224 14.375 209.625 0 192 0H128C110.375 0 96 14.375 96 32V128H224V32ZM381.781 51.578C383 50.969 384 49.359 384 48C384 46.625 383 45.031 381.781 44.422L352 32L339.562 2.219C338.969 1 337.375 0 336 0S333.031 1 332.406 2.219L320 32L290.219 44.422C289 45.031 288 46.625 288 48C288 49.359 289 50.969 290.219 51.578L320 64L332.406 93.781C333.031 95 334.625 96 336 96S338.969 95 339.562 93.781L352 64L381.781 51.578ZM448 64L460.406 93.781C461.031 95 462.625 96 464 96S466.969 95 467.562 93.781L480 64L509.781 51.578C511 50.969 512 49.359 512 48C512 46.625 511 45.031 509.781 44.422L480 32L467.562 2.219C466.969 1 465.375 0 464 0S461.031 1 460.406 2.219L448 32L418.219 44.422C417 45.031 416 46.625 416 48C416 49.359 417 50.969 418.219 51.578L448 64ZM480 224L467.562 194.219C466.969 193 465.375 192 464 192S461.031 193 460.406 194.219L448 224L418.219 236.422C417 237.031 416 238.625 416 240C416 241.359 417 242.969 418.219 243.578L448 256L460.406 285.781C461.031 287 462.625 288 464 288S466.969 287 467.562 285.781L480 256L509.781 243.578C511 242.969 512 241.359 512 240C512 238.625 511 237.031 509.781 236.422L480 224ZM445.781 147.578C447 146.969 448 145.359 448 144C448 142.625 447 141.031 445.781 140.422L416 128L403.562 98.219C402.969 97 401.375 96 400 96S397.031 97 396.406 98.219L384 128L354.219 140.422C353 141.031 352 142.625 352 144C352 145.359 353 146.969 354.219 147.578L384 160L396.406 189.781C397.031 191 398.625 192 400 192S402.969 191 403.562 189.781L416 160L445.781 147.578Z\"]\n};\nvar faAlignCenter = {\n prefix: 'fas',\n iconName: 'align-center',\n icon: [448, 512, [], \"f037\", \"M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z\"]\n};\nvar faAlignJustify = {\n prefix: 'fas',\n iconName: 'align-justify',\n icon: [448, 512, [], \"f039\", \"M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faAlignLeft = {\n prefix: 'fas',\n iconName: 'align-left',\n icon: [448, 512, [], \"f036\", \"M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faAlignRight = {\n prefix: 'fas',\n iconName: 'align-right',\n icon: [448, 512, [], \"f038\", \"M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z\"]\n};\nvar faAllergies = {\n prefix: 'fas',\n iconName: 'allergies',\n icon: [448, 512, [], \"f461\", \"M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faAmbulance = {\n prefix: 'fas',\n iconName: 'ambulance',\n icon: [640, 512, [], \"f0f9\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faAmericanSignLanguageInterpreting = {\n prefix: 'fas',\n iconName: 'american-sign-language-interpreting',\n icon: [640, 512, [], \"f2a3\", \"M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z\"]\n};\nvar faAnchor = {\n prefix: 'fas',\n iconName: 'anchor',\n icon: [576, 512, [], \"f13d\", \"M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z\"]\n};\nvar faAngleDoubleDown = {\n prefix: 'fas',\n iconName: 'angle-double-down',\n icon: [320, 512, [], \"f103\", \"M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z\"]\n};\nvar faAngleDoubleLeft = {\n prefix: 'fas',\n iconName: 'angle-double-left',\n icon: [448, 512, [], \"f100\", \"M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z\"]\n};\nvar faAngleDoubleRight = {\n prefix: 'fas',\n iconName: 'angle-double-right',\n icon: [448, 512, [], \"f101\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"]\n};\nvar faAngleDoubleUp = {\n prefix: 'fas',\n iconName: 'angle-double-up',\n icon: [320, 512, [], \"f102\", \"M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z\"]\n};\nvar faAngleDown = {\n prefix: 'fas',\n iconName: 'angle-down',\n icon: [320, 512, [], \"f107\", \"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"]\n};\nvar faAngleLeft = {\n prefix: 'fas',\n iconName: 'angle-left',\n icon: [256, 512, [], \"f104\", \"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z\"]\n};\nvar faAngleRight = {\n prefix: 'fas',\n iconName: 'angle-right',\n icon: [256, 512, [], \"f105\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"]\n};\nvar faAngleUp = {\n prefix: 'fas',\n iconName: 'angle-up',\n icon: [320, 512, [], \"f106\", \"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"]\n};\nvar faAngry = {\n prefix: 'fas',\n iconName: 'angry',\n icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z\"]\n};\nvar faAnkh = {\n prefix: 'fas',\n iconName: 'ankh',\n icon: [320, 512, [], \"f644\", \"M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z\"]\n};\nvar faAppleAlt = {\n prefix: 'fas',\n iconName: 'apple-alt',\n icon: [448, 512, [], \"f5d1\", \"M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z\"]\n};\nvar faArchive = {\n prefix: 'fas',\n iconName: 'archive',\n icon: [512, 512, [], \"f187\", \"M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z\"]\n};\nvar faArchway = {\n prefix: 'fas',\n iconName: 'archway',\n icon: [576, 512, [], \"f557\", \"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faArrowAltCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-down',\n icon: [512, 512, [], \"f358\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-left',\n icon: [512, 512, [], \"f359\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z\"]\n};\nvar faArrowAltCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-right',\n icon: [512, 512, [], \"f35a\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z\"]\n};\nvar faArrowAltCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-up',\n icon: [512, 512, [], \"f35b\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z\"]\n};\nvar faArrowCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-circle-down',\n icon: [512, 512, [], \"f0ab\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z\"]\n};\nvar faArrowCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-circle-left',\n icon: [512, 512, [], \"f0a8\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z\"]\n};\nvar faArrowCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-circle-right',\n icon: [512, 512, [], \"f0a9\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z\"]\n};\nvar faArrowCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-circle-up',\n icon: [512, 512, [], \"f0aa\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z\"]\n};\nvar faArrowDown = {\n prefix: 'fas',\n iconName: 'arrow-down',\n icon: [448, 512, [], \"f063\", \"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z\"]\n};\nvar faArrowLeft = {\n prefix: 'fas',\n iconName: 'arrow-left',\n icon: [448, 512, [], \"f060\", \"M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z\"]\n};\nvar faArrowRight = {\n prefix: 'fas',\n iconName: 'arrow-right',\n icon: [448, 512, [], \"f061\", \"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"]\n};\nvar faArrowUp = {\n prefix: 'fas',\n iconName: 'arrow-up',\n icon: [448, 512, [], \"f062\", \"M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z\"]\n};\nvar faArrowsAlt = {\n prefix: 'fas',\n iconName: 'arrows-alt',\n icon: [512, 512, [], \"f0b2\", \"M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z\"]\n};\nvar faArrowsAltH = {\n prefix: 'fas',\n iconName: 'arrows-alt-h',\n icon: [512, 512, [], \"f337\", \"M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z\"]\n};\nvar faArrowsAltV = {\n prefix: 'fas',\n iconName: 'arrows-alt-v',\n icon: [256, 512, [], \"f338\", \"M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z\"]\n};\nvar faAssistiveListeningSystems = {\n prefix: 'fas',\n iconName: 'assistive-listening-systems',\n icon: [512, 512, [], \"f2a2\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z\"]\n};\nvar faAsterisk = {\n prefix: 'fas',\n iconName: 'asterisk',\n icon: [512, 512, [], \"f069\", \"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z\"]\n};\nvar faAt = {\n prefix: 'fas',\n iconName: 'at',\n icon: [512, 512, [], \"f1fa\", \"M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z\"]\n};\nvar faAtlas = {\n prefix: 'fas',\n iconName: 'atlas',\n icon: [448, 512, [], \"f558\", \"M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z\"]\n};\nvar faAtom = {\n prefix: 'fas',\n iconName: 'atom',\n icon: [448, 512, [], \"f5d2\", \"M223.99908,224a32,32,0,1,0,32.00782,32A32.06431,32.06431,0,0,0,223.99908,224Zm214.172-96c-10.877-19.5-40.50979-50.75-116.27544-41.875C300.39168,34.875,267.63386,0,223.99908,0s-76.39066,34.875-97.89653,86.125C50.3369,77.375,20.706,108.5,9.82907,128-6.54984,157.375-5.17484,201.125,34.958,256-5.17484,310.875-6.54984,354.625,9.82907,384c29.13087,52.375,101.64652,43.625,116.27348,41.875C147.60842,477.125,180.36429,512,223.99908,512s76.3926-34.875,97.89652-86.125c14.62891,1.75,87.14456,10.5,116.27544-41.875C454.55,354.625,453.175,310.875,413.04017,256,453.175,201.125,454.55,157.375,438.171,128ZM63.33886,352c-4-7.25-.125-24.75,15.00391-48.25,6.87695,6.5,14.12891,12.875,21.88087,19.125,1.625,13.75,4,27.125,6.75,40.125C82.34472,363.875,67.09081,358.625,63.33886,352Zm36.88478-162.875c-7.752,6.25-15.00392,12.625-21.88087,19.125-15.12891-23.5-19.00392-41-15.00391-48.25,3.377-6.125,16.37891-11.5,37.88478-11.5,1.75,0,3.875.375,5.75.375C104.09864,162.25,101.84864,175.625,100.22364,189.125ZM223.99908,64c9.50195,0,22.25586,13.5,33.88282,37.25-11.252,3.75-22.50391,8-33.88282,12.875-11.377-4.875-22.62892-9.125-33.88283-12.875C201.74516,77.5,214.49712,64,223.99908,64Zm0,384c-9.502,0-22.25392-13.5-33.88283-37.25,11.25391-3.75,22.50587-8,33.88283-12.875C235.378,402.75,246.62994,407,257.8819,410.75,246.25494,434.5,233.501,448,223.99908,448Zm0-112a80,80,0,1,1,80-80A80.00023,80.00023,0,0,1,223.99908,336ZM384.6593,352c-3.625,6.625-19.00392,11.875-43.63479,11,2.752-13,5.127-26.375,6.752-40.125,7.75195-6.25,15.00391-12.625,21.87891-19.125C384.7843,327.25,388.6593,344.75,384.6593,352ZM369.65538,208.25c-6.875-6.5-14.127-12.875-21.87891-19.125-1.625-13.5-3.875-26.875-6.752-40.25,1.875,0,4.002-.375,5.752-.375,21.50391,0,34.50782,5.375,37.88283,11.5C388.6593,167.25,384.7843,184.75,369.65538,208.25Z\"]\n};\nvar faAudioDescription = {\n prefix: 'fas',\n iconName: 'audio-description',\n icon: [512, 512, [], \"f29e\", \"M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z\"]\n};\nvar faAward = {\n prefix: 'fas',\n iconName: 'award',\n icon: [384, 512, [], \"f559\", \"M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z\"]\n};\nvar faBaby = {\n prefix: 'fas',\n iconName: 'baby',\n icon: [384, 512, [], \"f77c\", \"M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z\"]\n};\nvar faBabyCarriage = {\n prefix: 'fas',\n iconName: 'baby-carriage',\n icon: [512, 512, [], \"f77d\", \"M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z\"]\n};\nvar faBackspace = {\n prefix: 'fas',\n iconName: 'backspace',\n icon: [640, 512, [], \"f55a\", \"M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z\"]\n};\nvar faBackward = {\n prefix: 'fas',\n iconName: 'backward',\n icon: [512, 512, [], \"f04a\", \"M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z\"]\n};\nvar faBacon = {\n prefix: 'fas',\n iconName: 'bacon',\n icon: [576, 512, [], \"f7e5\", \"M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z\"]\n};\nvar faBacteria = {\n prefix: 'fas',\n iconName: 'bacteria',\n icon: [640, 512, [], \"e059\", \"M272.35,226.4A17.71,17.71,0,0,0,281.46,203l-4-9.08a121.29,121.29,0,0,1,12.36-3.08A83.34,83.34,0,0,0,323.57,177l10,9a17.76,17.76,0,1,0,23.92-26.27l-9.72-8.76a83.12,83.12,0,0,0,11.65-48.18l11.85-3.51a17.73,17.73,0,1,0-10.15-34l-11.34,3.36a84,84,0,0,0-36.38-35.57l2.84-10.85a17.8,17.8,0,0,0-34.47-8.93l-2.82,10.78a83.25,83.25,0,0,0-16.74,1.1C250.83,27,240,30.22,229.1,33.39l-3.38-9.46a17.8,17.8,0,0,0-33.56,11.89l3.49,9.8a286.74,286.74,0,0,0-43.94,23.57l-6.32-8.43a17.9,17.9,0,0,0-24.94-3.6A17.69,17.69,0,0,0,116.84,82l6.45,8.61a286.59,286.59,0,0,0-34.95,35.33l-8.82-6.42a17.84,17.84,0,0,0-24.89,3.86,17.66,17.66,0,0,0,3.88,24.77l8.88,6.47a286.6,286.6,0,0,0-23,43.91l-10.48-3.59a17.73,17.73,0,1,0-11.59,33.52L32.67,232c-2.79,10-5.79,19.84-7.52,30.22a83.16,83.16,0,0,0-.82,19l-11.58,3.43a17.73,17.73,0,1,0,10.13,34l11.27-3.33a83.51,83.51,0,0,0,36.39,35.43l-2.88,11.06a17.81,17.81,0,0,0,34.48,8.92l2.87-11c1,0,2.07.26,3.1.26a83.39,83.39,0,0,0,45.65-13.88l8.59,8.8a17.77,17.77,0,0,0,25.56-24.7l-9.14-9.37a83.41,83.41,0,0,0,12.08-31.05,119.08,119.08,0,0,1,3.87-15.53l9,4.22a17.74,17.74,0,1,0,15.15-32.09l-8.8-4.11c.67-1,1.2-2.08,1.9-3.05a119.89,119.89,0,0,1,7.87-9.41,121.73,121.73,0,0,1,11.65-11.4,119.49,119.49,0,0,1,9.94-7.82c1.12-.77,2.32-1.42,3.47-2.15l3.92,8.85a17.86,17.86,0,0,0,16.32,10.58A18.14,18.14,0,0,0,272.35,226.4ZM128,256a32,32,0,1,1,32-32A32,32,0,0,1,128,256Zm80-96a16,16,0,1,1,16-16A16,16,0,0,1,208,160Zm431.26,45.3a17.79,17.79,0,0,0-17.06-12.69,17.55,17.55,0,0,0-5.08.74l-11.27,3.33a83.61,83.61,0,0,0-36.39-35.43l2.88-11.06a17.81,17.81,0,0,0-34.48-8.91l-2.87,11c-1,0-2.07-.26-3.1-.26a83.32,83.32,0,0,0-45.65,13.89l-8.59-8.81a17.77,17.77,0,0,0-25.56,24.7l9.14,9.37a83.28,83.28,0,0,0-12.08,31.06,119.34,119.34,0,0,1-3.87,15.52l-9-4.22a17.74,17.74,0,1,0-15.15,32.09l8.8,4.11c-.67,1-1.2,2.08-1.89,3.05a117.71,117.71,0,0,1-7.94,9.47,119,119,0,0,1-11.57,11.33,121.59,121.59,0,0,1-10,7.83c-1.12.77-2.32,1.42-3.47,2.15l-3.92-8.85a17.86,17.86,0,0,0-16.32-10.58,18.14,18.14,0,0,0-7.18,1.5A17.71,17.71,0,0,0,358.54,309l4,9.08a118.71,118.71,0,0,1-12.36,3.08,83.34,83.34,0,0,0-33.77,13.9l-10-9a17.77,17.77,0,1,0-23.92,26.28l9.72,8.75a83.12,83.12,0,0,0-11.65,48.18l-11.86,3.51a17.73,17.73,0,1,0,10.16,34l11.34-3.36A84,84,0,0,0,326.61,479l-2.84,10.85a17.8,17.8,0,0,0,34.47,8.93L361.06,488a83.3,83.3,0,0,0,16.74-1.1c11.37-1.89,22.24-5.07,33.1-8.24l3.38,9.46a17.8,17.8,0,0,0,33.56-11.89l-3.49-9.79a287.66,287.66,0,0,0,43.94-23.58l6.32,8.43a17.88,17.88,0,0,0,24.93,3.6A17.67,17.67,0,0,0,523.16,430l-6.45-8.61a287.37,287.37,0,0,0,34.95-35.34l8.82,6.42a17.76,17.76,0,1,0,21-28.63l-8.88-6.46a287.17,287.17,0,0,0,23-43.92l10.48,3.59a17.73,17.73,0,1,0,11.59-33.52L607.33,280c2.79-10,5.79-19.84,7.52-30.21a83.27,83.27,0,0,0,.82-19.05l11.58-3.43A17.7,17.7,0,0,0,639.26,205.3ZM416,416a32,32,0,1,1,32-32A32,32,0,0,1,416,416Z\"]\n};\nvar faBacterium = {\n prefix: 'fas',\n iconName: 'bacterium',\n icon: [512, 512, [], \"e05a\", \"M511,102.93A23.76,23.76,0,0,0,481.47,87l-15.12,4.48a111.85,111.85,0,0,0-48.5-47.42l3.79-14.47a23.74,23.74,0,0,0-46-11.91l-3.76,14.37a111.94,111.94,0,0,0-22.33,1.47,386.74,386.74,0,0,0-44.33,10.41l-4.3-12a23.74,23.74,0,0,0-44.75,15.85l4.3,12.05a383.4,383.4,0,0,0-58.69,31.83l-8-10.63a23.85,23.85,0,0,0-33.24-4.8,23.57,23.57,0,0,0-4.83,33.09l8,10.63a386.14,386.14,0,0,0-46.7,47.44l-11-8a23.68,23.68,0,1,0-28,38.17l11.09,8.06a383.45,383.45,0,0,0-30.92,58.75l-12.93-4.43a23.65,23.65,0,1,0-15.47,44.69l13,4.48a385.81,385.81,0,0,0-9.3,40.53A111.58,111.58,0,0,0,32.44,375L17,379.56a23.64,23.64,0,0,0,13.51,45.31l15-4.44a111.49,111.49,0,0,0,48.53,47.24l-3.85,14.75a23.66,23.66,0,0,0,17,28.83,24.7,24.7,0,0,0,6,.75,23.73,23.73,0,0,0,23-17.7L140,479.67c1.37.05,2.77.35,4.13.35A111.22,111.22,0,0,0,205,461.5l11.45,11.74a23.7,23.7,0,0,0,34.08-32.93l-12.19-12.5a111,111,0,0,0,16.11-41.4,158.69,158.69,0,0,1,5.16-20.71l12,5.64a23.66,23.66,0,1,0,20.19-42.79l-11.72-5.49c.89-1.32,1.59-2.77,2.52-4.06a157.86,157.86,0,0,1,10.46-12.49,159.5,159.5,0,0,1,15.59-15.28,162.18,162.18,0,0,1,13.23-10.4c1.5-1,3.1-1.89,4.63-2.87l5.23,11.8a23.74,23.74,0,0,0,43.48-19.08l-5.36-12.11a158.87,158.87,0,0,1,16.49-4.1,111,111,0,0,0,45-18.54l13.33,12a23.69,23.69,0,1,0,31.88-35l-12.94-11.67A110.83,110.83,0,0,0,479.21,137L495,132.32A23.61,23.61,0,0,0,511,102.93ZM160,368a48,48,0,1,1,48-48A48,48,0,0,1,160,368Zm80-136a24,24,0,1,1,24-24A24,24,0,0,1,240,232Z\"]\n};\nvar faBahai = {\n prefix: 'fas',\n iconName: 'bahai',\n icon: [512, 512, [], \"f666\", \"M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z\"]\n};\nvar faBalanceScale = {\n prefix: 'fas',\n iconName: 'balance-scale',\n icon: [640, 512, [], \"f24e\", \"M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faBalanceScaleLeft = {\n prefix: 'fas',\n iconName: 'balance-scale-left',\n icon: [640, 512, [], \"f515\", \"M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z\"]\n};\nvar faBalanceScaleRight = {\n prefix: 'fas',\n iconName: 'balance-scale-right',\n icon: [640, 512, [], \"f516\", \"M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z\"]\n};\nvar faBan = {\n prefix: 'fas',\n iconName: 'ban',\n icon: [512, 512, [], \"f05e\", \"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"]\n};\nvar faBandAid = {\n prefix: 'fas',\n iconName: 'band-aid',\n icon: [640, 512, [], \"f462\", \"M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"]\n};\nvar faBarcode = {\n prefix: 'fas',\n iconName: 'barcode',\n icon: [512, 512, [], \"f02a\", \"M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z\"]\n};\nvar faBars = {\n prefix: 'fas',\n iconName: 'bars',\n icon: [448, 512, [], \"f0c9\", \"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faBaseballBall = {\n prefix: 'fas',\n iconName: 'baseball-ball',\n icon: [496, 512, [], \"f433\", \"M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z\"]\n};\nvar faBasketballBall = {\n prefix: 'fas',\n iconName: 'basketball-ball',\n icon: [496, 512, [], \"f434\", \"M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z\"]\n};\nvar faBath = {\n prefix: 'fas',\n iconName: 'bath',\n icon: [512, 512, [], \"f2cd\", \"M32,384a95.4,95.4,0,0,0,32,71.09V496a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V480H384v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V455.09A95.4,95.4,0,0,0,480,384V336H32ZM496,256H80V69.25a21.26,21.26,0,0,1,36.28-15l19.27,19.26c-13.13,29.88-7.61,59.11,8.62,79.73l-.17.17A16,16,0,0,0,144,176l11.31,11.31a16,16,0,0,0,22.63,0L283.31,81.94a16,16,0,0,0,0-22.63L272,48a16,16,0,0,0-22.62,0l-.17.17c-20.62-16.23-49.83-21.75-79.73-8.62L150.22,20.28A69.25,69.25,0,0,0,32,69.25V256H16A16,16,0,0,0,0,272v16a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V272A16,16,0,0,0,496,256Z\"]\n};\nvar faBatteryEmpty = {\n prefix: 'fas',\n iconName: 'battery-empty',\n icon: [640, 512, [], \"f244\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z\"]\n};\nvar faBatteryFull = {\n prefix: 'fas',\n iconName: 'battery-full',\n icon: [640, 512, [], \"f240\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z\"]\n};\nvar faBatteryHalf = {\n prefix: 'fas',\n iconName: 'battery-half',\n icon: [640, 512, [], \"f242\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z\"]\n};\nvar faBatteryQuarter = {\n prefix: 'fas',\n iconName: 'battery-quarter',\n icon: [640, 512, [], \"f243\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z\"]\n};\nvar faBatteryThreeQuarters = {\n prefix: 'fas',\n iconName: 'battery-three-quarters',\n icon: [640, 512, [], \"f241\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z\"]\n};\nvar faBed = {\n prefix: 'fas',\n iconName: 'bed',\n icon: [640, 512, [], \"f236\", \"M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z\"]\n};\nvar faBeer = {\n prefix: 'fas',\n iconName: 'beer',\n icon: [448, 512, [], \"f0fc\", \"M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z\"]\n};\nvar faBell = {\n prefix: 'fas',\n iconName: 'bell',\n icon: [448, 512, [], \"f0f3\", \"M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z\"]\n};\nvar faBellSlash = {\n prefix: 'fas',\n iconName: 'bell-slash',\n icon: [640, 512, [], \"f1f6\", \"M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBezierCurve = {\n prefix: 'fas',\n iconName: 'bezier-curve',\n icon: [640, 512, [], \"f55b\", \"M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faBible = {\n prefix: 'fas',\n iconName: 'bible',\n icon: [448, 512, [], \"f647\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faBicycle = {\n prefix: 'fas',\n iconName: 'bicycle',\n icon: [640, 512, [], \"f206\", \"M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z\"]\n};\nvar faBiking = {\n prefix: 'fas',\n iconName: 'biking',\n icon: [640, 512, [], \"f84a\", \"M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z\"]\n};\nvar faBinoculars = {\n prefix: 'fas',\n iconName: 'binoculars',\n icon: [512, 512, [], \"f1e5\", \"M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z\"]\n};\nvar faBiohazard = {\n prefix: 'fas',\n iconName: 'biohazard',\n icon: [576, 512, [], \"f780\", \"M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faBirthdayCake = {\n prefix: 'fas',\n iconName: 'birthday-cake',\n icon: [448, 512, [], \"f1fd\", \"M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z\"]\n};\nvar faBlender = {\n prefix: 'fas',\n iconName: 'blender',\n icon: [512, 512, [], \"f517\", \"M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z\"]\n};\nvar faBlenderPhone = {\n prefix: 'fas',\n iconName: 'blender-phone',\n icon: [576, 512, [], \"f6b6\", \"M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBlind = {\n prefix: 'fas',\n iconName: 'blind',\n icon: [384, 512, [], \"f29d\", \"M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z\"]\n};\nvar faBlog = {\n prefix: 'fas',\n iconName: 'blog',\n icon: [512, 512, [], \"f781\", \"M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faBold = {\n prefix: 'fas',\n iconName: 'bold',\n icon: [384, 512, [], \"f032\", \"M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z\"]\n};\nvar faBolt = {\n prefix: 'fas',\n iconName: 'bolt',\n icon: [320, 512, [], \"f0e7\", \"M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z\"]\n};\nvar faBomb = {\n prefix: 'fas',\n iconName: 'bomb',\n icon: [512, 512, [], \"f1e2\", \"M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z\"]\n};\nvar faBone = {\n prefix: 'fas',\n iconName: 'bone',\n icon: [640, 512, [], \"f5d7\", \"M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z\"]\n};\nvar faBong = {\n prefix: 'fas',\n iconName: 'bong',\n icon: [448, 512, [], \"f55c\", \"M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z\"]\n};\nvar faBook = {\n prefix: 'fas',\n iconName: 'book',\n icon: [448, 512, [], \"f02d\", \"M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z\"]\n};\nvar faBookDead = {\n prefix: 'fas',\n iconName: 'book-dead',\n icon: [448, 512, [], \"f6b7\", \"M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z\"]\n};\nvar faBookMedical = {\n prefix: 'fas',\n iconName: 'book-medical',\n icon: [448, 512, [], \"f7e6\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z\"]\n};\nvar faBookOpen = {\n prefix: 'fas',\n iconName: 'book-open',\n icon: [576, 512, [], \"f518\", \"M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z\"]\n};\nvar faBookReader = {\n prefix: 'fas',\n iconName: 'book-reader',\n icon: [512, 512, [], \"f5da\", \"M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z\"]\n};\nvar faBookmark = {\n prefix: 'fas',\n iconName: 'bookmark',\n icon: [384, 512, [], \"f02e\", \"M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z\"]\n};\nvar faBorderAll = {\n prefix: 'fas',\n iconName: 'border-all',\n icon: [448, 512, [], \"f84c\", \"M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z\"]\n};\nvar faBorderNone = {\n prefix: 'fas',\n iconName: 'border-none',\n icon: [448, 512, [], \"f850\", \"M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faBorderStyle = {\n prefix: 'fas',\n iconName: 'border-style',\n icon: [448, 512, [], \"f853\", \"M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faBowlingBall = {\n prefix: 'fas',\n iconName: 'bowling-ball',\n icon: [496, 512, [], \"f436\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faBox = {\n prefix: 'fas',\n iconName: 'box',\n icon: [512, 512, [], \"f466\", \"M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z\"]\n};\nvar faBoxOpen = {\n prefix: 'fas',\n iconName: 'box-open',\n icon: [640, 512, [], \"f49e\", \"M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z\"]\n};\nvar faBoxTissue = {\n prefix: 'fas',\n iconName: 'box-tissue',\n icon: [512, 512, [], \"e05b\", \"M383.88,287.82l64-192H338.47a70.2,70.2,0,0,1-66.59-48,70.21,70.21,0,0,0-66.6-48H63.88l64,288Zm-384,192a32,32,0,0,0,32,32h448a32,32,0,0,0,32-32v-64H-.12Zm480-256H438.94l-21.33,64h14.27a16,16,0,0,1,0,32h-352a16,16,0,1,1,0-32H95.09l-14.22-64h-49a32,32,0,0,0-32,32v128h512v-128A32,32,0,0,0,479.88,223.82Z\"]\n};\nvar faBoxes = {\n prefix: 'fas',\n iconName: 'boxes',\n icon: [576, 512, [], \"f468\", \"M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z\"]\n};\nvar faBraille = {\n prefix: 'fas',\n iconName: 'braille',\n icon: [640, 512, [], \"f2a1\", \"M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faBrain = {\n prefix: 'fas',\n iconName: 'brain',\n icon: [576, 512, [], \"f5dc\", \"M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z\"]\n};\nvar faBreadSlice = {\n prefix: 'fas',\n iconName: 'bread-slice',\n icon: [576, 512, [], \"f7ec\", \"M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z\"]\n};\nvar faBriefcase = {\n prefix: 'fas',\n iconName: 'briefcase',\n icon: [512, 512, [], \"f0b1\", \"M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z\"]\n};\nvar faBriefcaseMedical = {\n prefix: 'fas',\n iconName: 'briefcase-medical',\n icon: [512, 512, [], \"f469\", \"M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z\"]\n};\nvar faBroadcastTower = {\n prefix: 'fas',\n iconName: 'broadcast-tower',\n icon: [640, 512, [], \"f519\", \"M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z\"]\n};\nvar faBroom = {\n prefix: 'fas',\n iconName: 'broom',\n icon: [640, 512, [], \"f51a\", \"M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z\"]\n};\nvar faBrush = {\n prefix: 'fas',\n iconName: 'brush',\n icon: [384, 512, [], \"f55d\", \"M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z\"]\n};\nvar faBug = {\n prefix: 'fas',\n iconName: 'bug',\n icon: [512, 512, [], \"f188\", \"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\"]\n};\nvar faBuilding = {\n prefix: 'fas',\n iconName: 'building',\n icon: [448, 512, [], \"f1ad\", \"M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z\"]\n};\nvar faBullhorn = {\n prefix: 'fas',\n iconName: 'bullhorn',\n icon: [576, 512, [], \"f0a1\", \"M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z\"]\n};\nvar faBullseye = {\n prefix: 'fas',\n iconName: 'bullseye',\n icon: [496, 512, [], \"f140\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z\"]\n};\nvar faBurn = {\n prefix: 'fas',\n iconName: 'burn',\n icon: [384, 512, [], \"f46a\", \"M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z\"]\n};\nvar faBus = {\n prefix: 'fas',\n iconName: 'bus',\n icon: [512, 512, [], \"f207\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusAlt = {\n prefix: 'fas',\n iconName: 'bus-alt',\n icon: [512, 512, [], \"f55e\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusinessTime = {\n prefix: 'fas',\n iconName: 'business-time',\n icon: [640, 512, [], \"f64a\", \"M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z\"]\n};\nvar faCalculator = {\n prefix: 'fas',\n iconName: 'calculator',\n icon: [448, 512, [], \"f1ec\", \"M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z\"]\n};\nvar faCalendar = {\n prefix: 'fas',\n iconName: 'calendar',\n icon: [448, 512, [], \"f133\", \"M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z\"]\n};\nvar faCalendarAlt = {\n prefix: 'fas',\n iconName: 'calendar-alt',\n icon: [448, 512, [], \"f073\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarCheck = {\n prefix: 'fas',\n iconName: 'calendar-check',\n icon: [448, 512, [], \"f274\", \"M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z\"]\n};\nvar faCalendarDay = {\n prefix: 'fas',\n iconName: 'calendar-day',\n icon: [448, 512, [], \"f783\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarMinus = {\n prefix: 'fas',\n iconName: 'calendar-minus',\n icon: [448, 512, [], \"f272\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z\"]\n};\nvar faCalendarPlus = {\n prefix: 'fas',\n iconName: 'calendar-plus',\n icon: [448, 512, [], \"f271\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z\"]\n};\nvar faCalendarTimes = {\n prefix: 'fas',\n iconName: 'calendar-times',\n icon: [448, 512, [], \"f273\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z\"]\n};\nvar faCalendarWeek = {\n prefix: 'fas',\n iconName: 'calendar-week',\n icon: [448, 512, [], \"f784\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCamera = {\n prefix: 'fas',\n iconName: 'camera',\n icon: [512, 512, [], \"f030\", \"M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z\"]\n};\nvar faCameraRetro = {\n prefix: 'fas',\n iconName: 'camera-retro',\n icon: [512, 512, [], \"f083\", \"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"]\n};\nvar faCampground = {\n prefix: 'fas',\n iconName: 'campground',\n icon: [640, 512, [], \"f6bb\", \"M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z\"]\n};\nvar faCandyCane = {\n prefix: 'fas',\n iconName: 'candy-cane',\n icon: [512, 512, [], \"f786\", \"M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z\"]\n};\nvar faCannabis = {\n prefix: 'fas',\n iconName: 'cannabis',\n icon: [512, 512, [], \"f55f\", \"M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z\"]\n};\nvar faCapsules = {\n prefix: 'fas',\n iconName: 'capsules',\n icon: [576, 512, [], \"f46b\", \"M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z\"]\n};\nvar faCar = {\n prefix: 'fas',\n iconName: 'car',\n icon: [512, 512, [], \"f1b9\", \"M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarAlt = {\n prefix: 'fas',\n iconName: 'car-alt',\n icon: [480, 512, [], \"f5de\", \"M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarBattery = {\n prefix: 'fas',\n iconName: 'car-battery',\n icon: [512, 512, [], \"f5df\", \"M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faCarCrash = {\n prefix: 'fas',\n iconName: 'car-crash',\n icon: [640, 512, [], \"f5e1\", \"M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z\"]\n};\nvar faCarSide = {\n prefix: 'fas',\n iconName: 'car-side',\n icon: [640, 512, [], \"f5e4\", \"M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faCaravan = {\n prefix: 'fas',\n iconName: 'caravan',\n icon: [640, 512, [], \"f8ff\", \"M416,208a16,16,0,1,0,16,16A16,16,0,0,0,416,208ZM624,320H576V160A160,160,0,0,0,416,0H64A64,64,0,0,0,0,64V320a64,64,0,0,0,64,64H96a96,96,0,0,0,192,0H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM192,432a48,48,0,1,1,48-48A48.05,48.05,0,0,1,192,432Zm64-240a32,32,0,0,1-32,32H96a32,32,0,0,1-32-32V128A32,32,0,0,1,96,96H224a32,32,0,0,1,32,32ZM448,320H320V128a32,32,0,0,1,32-32h64a32,32,0,0,1,32,32Z\"]\n};\nvar faCaretDown = {\n prefix: 'fas',\n iconName: 'caret-down',\n icon: [320, 512, [], \"f0d7\", \"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"]\n};\nvar faCaretLeft = {\n prefix: 'fas',\n iconName: 'caret-left',\n icon: [192, 512, [], \"f0d9\", \"M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z\"]\n};\nvar faCaretRight = {\n prefix: 'fas',\n iconName: 'caret-right',\n icon: [192, 512, [], \"f0da\", \"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\"]\n};\nvar faCaretSquareDown = {\n prefix: 'fas',\n iconName: 'caret-square-down',\n icon: [448, 512, [], \"f150\", \"M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z\"]\n};\nvar faCaretSquareLeft = {\n prefix: 'fas',\n iconName: 'caret-square-left',\n icon: [448, 512, [], \"f191\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z\"]\n};\nvar faCaretSquareRight = {\n prefix: 'fas',\n iconName: 'caret-square-right',\n icon: [448, 512, [], \"f152\", \"M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z\"]\n};\nvar faCaretSquareUp = {\n prefix: 'fas',\n iconName: 'caret-square-up',\n icon: [448, 512, [], \"f151\", \"M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z\"]\n};\nvar faCaretUp = {\n prefix: 'fas',\n iconName: 'caret-up',\n icon: [320, 512, [], \"f0d8\", \"M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z\"]\n};\nvar faCarrot = {\n prefix: 'fas',\n iconName: 'carrot',\n icon: [512, 512, [], \"f787\", \"M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z\"]\n};\nvar faCartArrowDown = {\n prefix: 'fas',\n iconName: 'cart-arrow-down',\n icon: [576, 512, [], \"f218\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z\"]\n};\nvar faCartPlus = {\n prefix: 'fas',\n iconName: 'cart-plus',\n icon: [576, 512, [], \"f217\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z\"]\n};\nvar faCashRegister = {\n prefix: 'fas',\n iconName: 'cash-register',\n icon: [512, 512, [], \"f788\", \"M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z\"]\n};\nvar faCat = {\n prefix: 'fas',\n iconName: 'cat',\n icon: [512, 512, [], \"f6be\", \"M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faCertificate = {\n prefix: 'fas',\n iconName: 'certificate',\n icon: [512, 512, [], \"f0a3\", \"M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z\"]\n};\nvar faChair = {\n prefix: 'fas',\n iconName: 'chair',\n icon: [448, 512, [], \"f6c0\", \"M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z\"]\n};\nvar faChalkboard = {\n prefix: 'fas',\n iconName: 'chalkboard',\n icon: [640, 512, [], \"f51b\", \"M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChalkboardTeacher = {\n prefix: 'fas',\n iconName: 'chalkboard-teacher',\n icon: [640, 512, [], \"f51c\", \"M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z\"]\n};\nvar faChargingStation = {\n prefix: 'fas',\n iconName: 'charging-station',\n icon: [576, 512, [], \"f5e7\", \"M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z\"]\n};\nvar faChartArea = {\n prefix: 'fas',\n iconName: 'chart-area',\n icon: [512, 512, [], \"f1fe\", \"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z\"]\n};\nvar faChartBar = {\n prefix: 'fas',\n iconName: 'chart-bar',\n icon: [512, 512, [], \"f080\", \"M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChartLine = {\n prefix: 'fas',\n iconName: 'chart-line',\n icon: [512, 512, [], \"f201\", \"M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z\"]\n};\nvar faChartPie = {\n prefix: 'fas',\n iconName: 'chart-pie',\n icon: [544, 512, [], \"f200\", \"M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z\"]\n};\nvar faCheck = {\n prefix: 'fas',\n iconName: 'check',\n icon: [512, 512, [], \"f00c\", \"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"]\n};\nvar faCheckCircle = {\n prefix: 'fas',\n iconName: 'check-circle',\n icon: [512, 512, [], \"f058\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\"]\n};\nvar faCheckDouble = {\n prefix: 'fas',\n iconName: 'check-double',\n icon: [512, 512, [], \"f560\", \"M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z\"]\n};\nvar faCheckSquare = {\n prefix: 'fas',\n iconName: 'check-square',\n icon: [448, 512, [], \"f14a\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z\"]\n};\nvar faCheese = {\n prefix: 'fas',\n iconName: 'cheese',\n icon: [512, 512, [], \"f7ef\", \"M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z\"]\n};\nvar faChess = {\n prefix: 'fas',\n iconName: 'chess',\n icon: [512, 512, [], \"f439\", \"M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z\"]\n};\nvar faChessBishop = {\n prefix: 'fas',\n iconName: 'chess-bishop',\n icon: [320, 512, [], \"f43a\", \"M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessBoard = {\n prefix: 'fas',\n iconName: 'chess-board',\n icon: [512, 512, [], \"f43c\", \"M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z\"]\n};\nvar faChessKing = {\n prefix: 'fas',\n iconName: 'chess-king',\n icon: [448, 512, [], \"f43f\", \"M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z\"]\n};\nvar faChessKnight = {\n prefix: 'fas',\n iconName: 'chess-knight',\n icon: [384, 512, [], \"f441\", \"M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessPawn = {\n prefix: 'fas',\n iconName: 'chess-pawn',\n icon: [320, 512, [], \"f443\", \"M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessQueen = {\n prefix: 'fas',\n iconName: 'chess-queen',\n icon: [512, 512, [], \"f445\", \"M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z\"]\n};\nvar faChessRook = {\n prefix: 'fas',\n iconName: 'chess-rook',\n icon: [384, 512, [], \"f447\", \"M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChevronCircleDown = {\n prefix: 'fas',\n iconName: 'chevron-circle-down',\n icon: [512, 512, [], \"f13a\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z\"]\n};\nvar faChevronCircleLeft = {\n prefix: 'fas',\n iconName: 'chevron-circle-left',\n icon: [512, 512, [], \"f137\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z\"]\n};\nvar faChevronCircleRight = {\n prefix: 'fas',\n iconName: 'chevron-circle-right',\n icon: [512, 512, [], \"f138\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z\"]\n};\nvar faChevronCircleUp = {\n prefix: 'fas',\n iconName: 'chevron-circle-up',\n icon: [512, 512, [], \"f139\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z\"]\n};\nvar faChevronDown = {\n prefix: 'fas',\n iconName: 'chevron-down',\n icon: [448, 512, [], \"f078\", \"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"]\n};\nvar faChevronLeft = {\n prefix: 'fas',\n iconName: 'chevron-left',\n icon: [320, 512, [], \"f053\", \"M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z\"]\n};\nvar faChevronRight = {\n prefix: 'fas',\n iconName: 'chevron-right',\n icon: [320, 512, [], \"f054\", \"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"]\n};\nvar faChevronUp = {\n prefix: 'fas',\n iconName: 'chevron-up',\n icon: [448, 512, [], \"f077\", \"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"]\n};\nvar faChild = {\n prefix: 'fas',\n iconName: 'child',\n icon: [384, 512, [], \"f1ae\", \"M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z\"]\n};\nvar faChurch = {\n prefix: 'fas',\n iconName: 'church',\n icon: [640, 512, [], \"f51d\", \"M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z\"]\n};\nvar faCircle = {\n prefix: 'fas',\n iconName: 'circle',\n icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z\"]\n};\nvar faCircleNotch = {\n prefix: 'fas',\n iconName: 'circle-notch',\n icon: [512, 512, [], \"f1ce\", \"M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z\"]\n};\nvar faCity = {\n prefix: 'fas',\n iconName: 'city',\n icon: [640, 512, [], \"f64f\", \"M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z\"]\n};\nvar faClinicMedical = {\n prefix: 'fas',\n iconName: 'clinic-medical',\n icon: [576, 512, [], \"f7f2\", \"M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z\"]\n};\nvar faClipboard = {\n prefix: 'fas',\n iconName: 'clipboard',\n icon: [384, 512, [], \"f328\", \"M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z\"]\n};\nvar faClipboardCheck = {\n prefix: 'fas',\n iconName: 'clipboard-check',\n icon: [384, 512, [], \"f46c\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z\"]\n};\nvar faClipboardList = {\n prefix: 'fas',\n iconName: 'clipboard-list',\n icon: [384, 512, [], \"f46d\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faClock = {\n prefix: 'fas',\n iconName: 'clock',\n icon: [512, 512, [], \"f017\", \"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm92.49,313h0l-20,25a16,16,0,0,1-22.49,2.5h0l-67-49.72a40,40,0,0,1-15-31.23V112a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V256l58,42.5A16,16,0,0,1,348.49,321Z\"]\n};\nvar faClone = {\n prefix: 'fas',\n iconName: 'clone',\n icon: [512, 512, [], \"f24d\", \"M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z\"]\n};\nvar faClosedCaptioning = {\n prefix: 'fas',\n iconName: 'closed-captioning',\n icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z\"]\n};\nvar faCloud = {\n prefix: 'fas',\n iconName: 'cloud',\n icon: [640, 512, [], \"f0c2\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z\"]\n};\nvar faCloudDownloadAlt = {\n prefix: 'fas',\n iconName: 'cloud-download-alt',\n icon: [640, 512, [], \"f381\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z\"]\n};\nvar faCloudMeatball = {\n prefix: 'fas',\n iconName: 'cloud-meatball',\n icon: [512, 512, [], \"f73b\", \"M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z\"]\n};\nvar faCloudMoon = {\n prefix: 'fas',\n iconName: 'cloud-moon',\n icon: [576, 512, [], \"f6c3\", \"M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z\"]\n};\nvar faCloudMoonRain = {\n prefix: 'fas',\n iconName: 'cloud-moon-rain',\n icon: [576, 512, [], \"f73c\", \"M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudRain = {\n prefix: 'fas',\n iconName: 'cloud-rain',\n icon: [512, 512, [], \"f73d\", \"M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z\"]\n};\nvar faCloudShowersHeavy = {\n prefix: 'fas',\n iconName: 'cloud-showers-heavy',\n icon: [512, 512, [], \"f740\", \"M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z\"]\n};\nvar faCloudSun = {\n prefix: 'fas',\n iconName: 'cloud-sun',\n icon: [640, 512, [], \"f6c4\", \"M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z\"]\n};\nvar faCloudSunRain = {\n prefix: 'fas',\n iconName: 'cloud-sun-rain',\n icon: [576, 512, [], \"f743\", \"M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudUploadAlt = {\n prefix: 'fas',\n iconName: 'cloud-upload-alt',\n icon: [640, 512, [], \"f382\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\"]\n};\nvar faCocktail = {\n prefix: 'fas',\n iconName: 'cocktail',\n icon: [576, 512, [], \"f561\", \"M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z\"]\n};\nvar faCode = {\n prefix: 'fas',\n iconName: 'code',\n icon: [640, 512, [], \"f121\", \"M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z\"]\n};\nvar faCodeBranch = {\n prefix: 'fas',\n iconName: 'code-branch',\n icon: [384, 512, [], \"f126\", \"M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z\"]\n};\nvar faCoffee = {\n prefix: 'fas',\n iconName: 'coffee',\n icon: [640, 512, [], \"f0f4\", \"M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z\"]\n};\nvar faCog = {\n prefix: 'fas',\n iconName: 'cog',\n icon: [512, 512, [], \"f013\", \"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faCogs = {\n prefix: 'fas',\n iconName: 'cogs',\n icon: [640, 512, [], \"f085\", \"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"]\n};\nvar faCoins = {\n prefix: 'fas',\n iconName: 'coins',\n icon: [512, 512, [], \"f51e\", \"M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z\"]\n};\nvar faColumns = {\n prefix: 'fas',\n iconName: 'columns',\n icon: [512, 512, [], \"f0db\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z\"]\n};\nvar faComment = {\n prefix: 'fas',\n iconName: 'comment',\n icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z\"]\n};\nvar faCommentAlt = {\n prefix: 'fas',\n iconName: 'comment-alt',\n icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z\"]\n};\nvar faCommentDollar = {\n prefix: 'fas',\n iconName: 'comment-dollar',\n icon: [512, 512, [], \"f651\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z\"]\n};\nvar faCommentDots = {\n prefix: 'fas',\n iconName: 'comment-dots',\n icon: [512, 512, [], \"f4ad\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faCommentMedical = {\n prefix: 'fas',\n iconName: 'comment-medical',\n icon: [512, 512, [], \"f7f5\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z\"]\n};\nvar faCommentSlash = {\n prefix: 'fas',\n iconName: 'comment-slash',\n icon: [640, 512, [], \"f4b3\", \"M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faComments = {\n prefix: 'fas',\n iconName: 'comments',\n icon: [576, 512, [], \"f086\", \"M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z\"]\n};\nvar faCommentsDollar = {\n prefix: 'fas',\n iconName: 'comments-dollar',\n icon: [576, 512, [], \"f653\", \"M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z\"]\n};\nvar faCompactDisc = {\n prefix: 'fas',\n iconName: 'compact-disc',\n icon: [496, 512, [], \"f51f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faCompass = {\n prefix: 'fas',\n iconName: 'compass',\n icon: [496, 512, [], \"f14e\", \"M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z\"]\n};\nvar faCompress = {\n prefix: 'fas',\n iconName: 'compress',\n icon: [448, 512, [], \"f066\", \"M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faCompressAlt = {\n prefix: 'fas',\n iconName: 'compress-alt',\n icon: [448, 512, [], \"f422\", \"M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z\"]\n};\nvar faCompressArrowsAlt = {\n prefix: 'fas',\n iconName: 'compress-arrows-alt',\n icon: [512, 512, [], \"f78c\", \"M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z\"]\n};\nvar faConciergeBell = {\n prefix: 'fas',\n iconName: 'concierge-bell',\n icon: [512, 512, [], \"f562\", \"M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faCookie = {\n prefix: 'fas',\n iconName: 'cookie',\n icon: [512, 512, [], \"f563\", \"M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCookieBite = {\n prefix: 'fas',\n iconName: 'cookie-bite',\n icon: [512, 512, [], \"f564\", \"M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCopy = {\n prefix: 'fas',\n iconName: 'copy',\n icon: [448, 512, [], \"f0c5\", \"M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z\"]\n};\nvar faCopyright = {\n prefix: 'fas',\n iconName: 'copyright',\n icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z\"]\n};\nvar faCouch = {\n prefix: 'fas',\n iconName: 'couch',\n icon: [640, 512, [], \"f4b8\", \"M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z\"]\n};\nvar faCreditCard = {\n prefix: 'fas',\n iconName: 'credit-card',\n icon: [576, 512, [], \"f09d\", \"M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z\"]\n};\nvar faCrop = {\n prefix: 'fas',\n iconName: 'crop',\n icon: [512, 512, [], \"f125\", \"M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faCropAlt = {\n prefix: 'fas',\n iconName: 'crop-alt',\n icon: [512, 512, [], \"f565\", \"M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z\"]\n};\nvar faCross = {\n prefix: 'fas',\n iconName: 'cross',\n icon: [384, 512, [], \"f654\", \"M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faCrosshairs = {\n prefix: 'fas',\n iconName: 'crosshairs',\n icon: [512, 512, [], \"f05b\", \"M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z\"]\n};\nvar faCrow = {\n prefix: 'fas',\n iconName: 'crow',\n icon: [640, 512, [], \"f520\", \"M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faCrown = {\n prefix: 'fas',\n iconName: 'crown',\n icon: [640, 512, [], \"f521\", \"M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z\"]\n};\nvar faCrutch = {\n prefix: 'fas',\n iconName: 'crutch',\n icon: [512, 512, [], \"f7f7\", \"M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z\"]\n};\nvar faCube = {\n prefix: 'fas',\n iconName: 'cube',\n icon: [512, 512, [], \"f1b2\", \"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"]\n};\nvar faCubes = {\n prefix: 'fas',\n iconName: 'cubes',\n icon: [512, 512, [], \"f1b3\", \"M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z\"]\n};\nvar faCut = {\n prefix: 'fas',\n iconName: 'cut',\n icon: [448, 512, [], \"f0c4\", \"M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faDatabase = {\n prefix: 'fas',\n iconName: 'database',\n icon: [448, 512, [], \"f1c0\", \"M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z\"]\n};\nvar faDeaf = {\n prefix: 'fas',\n iconName: 'deaf',\n icon: [512, 512, [], \"f2a4\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z\"]\n};\nvar faDemocrat = {\n prefix: 'fas',\n iconName: 'democrat',\n icon: [640, 512, [], \"f747\", \"M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z\"]\n};\nvar faDesktop = {\n prefix: 'fas',\n iconName: 'desktop',\n icon: [576, 512, [], \"f108\", \"M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z\"]\n};\nvar faDharmachakra = {\n prefix: 'fas',\n iconName: 'dharmachakra',\n icon: [512, 512, [], \"f655\", \"M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z\"]\n};\nvar faDiagnoses = {\n prefix: 'fas',\n iconName: 'diagnoses',\n icon: [640, 512, [], \"f470\", \"M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDice = {\n prefix: 'fas',\n iconName: 'dice',\n icon: [640, 512, [], \"f522\", \"M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faDiceD20 = {\n prefix: 'fas',\n iconName: 'dice-d20',\n icon: [480, 512, [], \"f6cf\", \"M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z\"]\n};\nvar faDiceD6 = {\n prefix: 'fas',\n iconName: 'dice-d6',\n icon: [448, 512, [], \"f6d1\", \"M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z\"]\n};\nvar faDiceFive = {\n prefix: 'fas',\n iconName: 'dice-five',\n icon: [448, 512, [], \"f523\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceFour = {\n prefix: 'fas',\n iconName: 'dice-four',\n icon: [448, 512, [], \"f524\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceOne = {\n prefix: 'fas',\n iconName: 'dice-one',\n icon: [448, 512, [], \"f525\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceSix = {\n prefix: 'fas',\n iconName: 'dice-six',\n icon: [448, 512, [], \"f526\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceThree = {\n prefix: 'fas',\n iconName: 'dice-three',\n icon: [448, 512, [], \"f527\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceTwo = {\n prefix: 'fas',\n iconName: 'dice-two',\n icon: [448, 512, [], \"f528\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDigitalTachograph = {\n prefix: 'fas',\n iconName: 'digital-tachograph',\n icon: [640, 512, [], \"f566\", \"M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z\"]\n};\nvar faDirections = {\n prefix: 'fas',\n iconName: 'directions',\n icon: [512, 512, [], \"f5eb\", \"M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z\"]\n};\nvar faDisease = {\n prefix: 'fas',\n iconName: 'disease',\n icon: [512, 512, [], \"f7fa\", \"M472.29 195.9l-67.06-23c-19.28-6.6-33.54-20.92-38.14-38.31l-16-60.45c-11.58-43.77-76.57-57.13-110-22.62L195 99.24c-13.26 13.71-33.54 20.93-54.2 19.31l-71.9-5.62c-52-4.07-86.93 44.89-59 82.84l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24l-28.43 57C4 396.67 47.46 440.29 98.11 429.23l70-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101 7.57 104.45-37.22l4.7-61.86c1.35-17.8 12.8-33.87 30.63-43l62-31.74c44.84-22.96 39.55-80.17-8.99-96.79zM160 256a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm128 96a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm16-128a16 16 0 1 1 16-16 16 16 0 0 1-16 16z\"]\n};\nvar faDivide = {\n prefix: 'fas',\n iconName: 'divide',\n icon: [448, 512, [], \"f529\", \"M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faDizzy = {\n prefix: 'fas',\n iconName: 'dizzy',\n icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z\"]\n};\nvar faDna = {\n prefix: 'fas',\n iconName: 'dna',\n icon: [448, 512, [], \"f471\", \"M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z\"]\n};\nvar faDog = {\n prefix: 'fas',\n iconName: 'dog',\n icon: [576, 512, [], \"f6d3\", \"M298.06,224,448,277.55V496a16,16,0,0,1-16,16H368a16,16,0,0,1-16-16V384H192V496a16,16,0,0,1-16,16H112a16,16,0,0,1-16-16V282.09C58.84,268.84,32,233.66,32,192a32,32,0,0,1,64,0,32.06,32.06,0,0,0,32,32ZM544,112v32a64,64,0,0,1-64,64H448v35.58L320,197.87V48c0-14.25,17.22-21.39,27.31-11.31L374.59,64h53.63c10.91,0,23.75,7.92,28.62,17.69L464,96h64A16,16,0,0,1,544,112Zm-112,0a16,16,0,1,0-16,16A16,16,0,0,0,432,112Z\"]\n};\nvar faDollarSign = {\n prefix: 'fas',\n iconName: 'dollar-sign',\n icon: [288, 512, [], \"f155\", \"M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z\"]\n};\nvar faDolly = {\n prefix: 'fas',\n iconName: 'dolly',\n icon: [576, 512, [], \"f472\", \"M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faDollyFlatbed = {\n prefix: 'fas',\n iconName: 'dolly-flatbed',\n icon: [640, 512, [], \"f474\", \"M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDonate = {\n prefix: 'fas',\n iconName: 'donate',\n icon: [512, 512, [], \"f4b9\", \"M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z\"]\n};\nvar faDoorClosed = {\n prefix: 'fas',\n iconName: 'door-closed',\n icon: [640, 512, [], \"f52a\", \"M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z\"]\n};\nvar faDoorOpen = {\n prefix: 'fas',\n iconName: 'door-open',\n icon: [640, 512, [], \"f52b\", \"M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z\"]\n};\nvar faDotCircle = {\n prefix: 'fas',\n iconName: 'dot-circle',\n icon: [512, 512, [], \"f192\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z\"]\n};\nvar faDove = {\n prefix: 'fas',\n iconName: 'dove',\n icon: [512, 512, [], \"f4ba\", \"M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faDownload = {\n prefix: 'fas',\n iconName: 'download',\n icon: [512, 512, [], \"f019\", \"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faDraftingCompass = {\n prefix: 'fas',\n iconName: 'drafting-compass',\n icon: [512, 512, [], \"f568\", \"M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z\"]\n};\nvar faDragon = {\n prefix: 'fas',\n iconName: 'dragon',\n icon: [640, 512, [], \"f6d5\", \"M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z\"]\n};\nvar faDrawPolygon = {\n prefix: 'fas',\n iconName: 'draw-polygon',\n icon: [448, 512, [], \"f5ee\", \"M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z\"]\n};\nvar faDrum = {\n prefix: 'fas',\n iconName: 'drum',\n icon: [512, 512, [], \"f569\", \"M431.34 122.05l73.53-47.42a16 16 0 0 0 4.44-22.19l-8.87-13.31a16 16 0 0 0-22.19-4.44l-110.06 71C318.43 96.91 271.22 96 256 96 219.55 96 0 100.55 0 208.15v160.23c0 30.27 27.5 57.68 72 77.86v-101.9a24 24 0 1 1 48 0v118.93c33.05 9.11 71.07 15.06 112 16.73V376.39a24 24 0 1 1 48 0V480c40.93-1.67 78.95-7.62 112-16.73V344.34a24 24 0 1 1 48 0v101.9c44.5-20.18 72-47.59 72-77.86V208.15c0-43.32-35.76-69.76-80.66-86.1zM256 272.24c-114.88 0-208-28.69-208-64.09s93.12-64.08 208-64.08c17.15 0 33.73.71 49.68 1.91l-72.81 47a16 16 0 0 0-4.43 22.19l8.87 13.31a16 16 0 0 0 22.19 4.44l118.64-76.52C430.09 168 464 186.84 464 208.15c0 35.4-93.13 64.09-208 64.09z\"]\n};\nvar faDrumSteelpan = {\n prefix: 'fas',\n iconName: 'drum-steelpan',\n icon: [576, 512, [], \"f56a\", \"M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z\"]\n};\nvar faDrumstickBite = {\n prefix: 'fas',\n iconName: 'drumstick-bite',\n icon: [512, 512, [], \"f6d7\", \"M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z\"]\n};\nvar faDumbbell = {\n prefix: 'fas',\n iconName: 'dumbbell',\n icon: [640, 512, [], \"f44b\", \"M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z\"]\n};\nvar faDumpster = {\n prefix: 'fas',\n iconName: 'dumpster',\n icon: [576, 512, [], \"f793\", \"M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDumpsterFire = {\n prefix: 'fas',\n iconName: 'dumpster-fire',\n icon: [640, 512, [], \"f794\", \"M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z\"]\n};\nvar faDungeon = {\n prefix: 'fas',\n iconName: 'dungeon',\n icon: [512, 512, [], \"f6d9\", \"M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z\"]\n};\nvar faEdit = {\n prefix: 'fas',\n iconName: 'edit',\n icon: [576, 512, [], \"f044\", \"M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z\"]\n};\nvar faEgg = {\n prefix: 'fas',\n iconName: 'egg',\n icon: [384, 512, [], \"f7fb\", \"M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z\"]\n};\nvar faEject = {\n prefix: 'fas',\n iconName: 'eject',\n icon: [448, 512, [], \"f052\", \"M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z\"]\n};\nvar faEllipsisH = {\n prefix: 'fas',\n iconName: 'ellipsis-h',\n icon: [512, 512, [], \"f141\", \"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"]\n};\nvar faEllipsisV = {\n prefix: 'fas',\n iconName: 'ellipsis-v',\n icon: [192, 512, [], \"f142\", \"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z\"]\n};\nvar faEnvelope = {\n prefix: 'fas',\n iconName: 'envelope',\n icon: [512, 512, [], \"f0e0\", \"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"]\n};\nvar faEnvelopeOpen = {\n prefix: 'fas',\n iconName: 'envelope-open',\n icon: [512, 512, [], \"f2b6\", \"M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z\"]\n};\nvar faEnvelopeOpenText = {\n prefix: 'fas',\n iconName: 'envelope-open-text',\n icon: [512, 512, [], \"f658\", \"M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z\"]\n};\nvar faEnvelopeSquare = {\n prefix: 'fas',\n iconName: 'envelope-square',\n icon: [448, 512, [], \"f199\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z\"]\n};\nvar faEquals = {\n prefix: 'fas',\n iconName: 'equals',\n icon: [448, 512, [], \"f52c\", \"M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faEraser = {\n prefix: 'fas',\n iconName: 'eraser',\n icon: [512, 512, [], \"f12d\", \"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z\"]\n};\nvar faEthernet = {\n prefix: 'fas',\n iconName: 'ethernet',\n icon: [512, 512, [], \"f796\", \"M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z\"]\n};\nvar faEuroSign = {\n prefix: 'fas',\n iconName: 'euro-sign',\n icon: [320, 512, [], \"f153\", \"M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z\"]\n};\nvar faExchangeAlt = {\n prefix: 'fas',\n iconName: 'exchange-alt',\n icon: [512, 512, [], \"f362\", \"M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faExclamation = {\n prefix: 'fas',\n iconName: 'exclamation',\n icon: [192, 512, [], \"f12a\", \"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"]\n};\nvar faExclamationCircle = {\n prefix: 'fas',\n iconName: 'exclamation-circle',\n icon: [512, 512, [], \"f06a\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExclamationTriangle = {\n prefix: 'fas',\n iconName: 'exclamation-triangle',\n icon: [576, 512, [], \"f071\", \"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExpand = {\n prefix: 'fas',\n iconName: 'expand',\n icon: [448, 512, [], \"f065\", \"M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z\"]\n};\nvar faExpandAlt = {\n prefix: 'fas',\n iconName: 'expand-alt',\n icon: [448, 512, [], \"f424\", \"M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z\"]\n};\nvar faExpandArrowsAlt = {\n prefix: 'fas',\n iconName: 'expand-arrows-alt',\n icon: [448, 512, [], \"f31e\", \"M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z\"]\n};\nvar faExternalLinkAlt = {\n prefix: 'fas',\n iconName: 'external-link-alt',\n icon: [512, 512, [], \"f35d\", \"M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z\"]\n};\nvar faExternalLinkSquareAlt = {\n prefix: 'fas',\n iconName: 'external-link-square-alt',\n icon: [448, 512, [], \"f360\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z\"]\n};\nvar faEye = {\n prefix: 'fas',\n iconName: 'eye',\n icon: [576, 512, [], \"f06e\", \"M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z\"]\n};\nvar faEyeDropper = {\n prefix: 'fas',\n iconName: 'eye-dropper',\n icon: [512, 512, [], \"f1fb\", \"M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z\"]\n};\nvar faEyeSlash = {\n prefix: 'fas',\n iconName: 'eye-slash',\n icon: [640, 512, [], \"f070\", \"M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z\"]\n};\nvar faFan = {\n prefix: 'fas',\n iconName: 'fan',\n icon: [512, 512, [], \"f863\", \"M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faFastBackward = {\n prefix: 'fas',\n iconName: 'fast-backward',\n icon: [512, 512, [], \"f049\", \"M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z\"]\n};\nvar faFastForward = {\n prefix: 'fas',\n iconName: 'fast-forward',\n icon: [512, 512, [], \"f050\", \"M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z\"]\n};\nvar faFaucet = {\n prefix: 'fas',\n iconName: 'faucet',\n icon: [512, 512, [], \"e005\", \"M352,256H313.39c-15.71-13.44-35.46-23.07-57.39-28V180.44l-32-3.38-32,3.38V228c-21.93,5-41.68,14.6-57.39,28H16A16,16,0,0,0,0,272v96a16,16,0,0,0,16,16h92.79C129.38,421.73,173,448,224,448s94.62-26.27,115.21-64H352a32,32,0,0,1,32,32,32,32,0,0,0,32,32h64a32,32,0,0,0,32-32A160,160,0,0,0,352,256ZM81.59,159.91l142.41-15,142.41,15c9.42,1,17.59-6.81,17.59-16.8V112.89c0-10-8.17-17.8-17.59-16.81L256,107.74V80a16,16,0,0,0-16-16H208a16,16,0,0,0-16,16v27.74L81.59,96.08C72.17,95.09,64,102.9,64,112.89v30.22C64,153.1,72.17,160.91,81.59,159.91Z\"]\n};\nvar faFax = {\n prefix: 'fas',\n iconName: 'fax',\n icon: [512, 512, [], \"f1ac\", \"M480 160V77.25a32 32 0 0 0-9.38-22.63L425.37 9.37A32 32 0 0 0 402.75 0H160a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32h320a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM288 432a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm128 128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-112H192V64h160v48a16 16 0 0 0 16 16h48zM64 128H32a32 32 0 0 0-32 32v320a32 32 0 0 0 32 32h32a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32z\"]\n};\nvar faFeather = {\n prefix: 'fas',\n iconName: 'feather',\n icon: [512, 512, [], \"f52d\", \"M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z\"]\n};\nvar faFeatherAlt = {\n prefix: 'fas',\n iconName: 'feather-alt',\n icon: [512, 512, [], \"f56b\", \"M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z\"]\n};\nvar faFemale = {\n prefix: 'fas',\n iconName: 'female',\n icon: [256, 512, [], \"f182\", \"M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z\"]\n};\nvar faFighterJet = {\n prefix: 'fas',\n iconName: 'fighter-jet',\n icon: [640, 512, [], \"f0fb\", \"M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z\"]\n};\nvar faFile = {\n prefix: 'fas',\n iconName: 'file',\n icon: [384, 512, [], \"f15b\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileAlt = {\n prefix: 'fas',\n iconName: 'file-alt',\n icon: [384, 512, [], \"f15c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileArchive = {\n prefix: 'fas',\n iconName: 'file-archive',\n icon: [384, 512, [], \"f1c6\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z\"]\n};\nvar faFileAudio = {\n prefix: 'fas',\n iconName: 'file-audio',\n icon: [384, 512, [], \"f1c7\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileCode = {\n prefix: 'fas',\n iconName: 'file-code',\n icon: [384, 512, [], \"f1c9\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z\"]\n};\nvar faFileContract = {\n prefix: 'fas',\n iconName: 'file-contract',\n icon: [384, 512, [], \"f56c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileCsv = {\n prefix: 'fas',\n iconName: 'file-csv',\n icon: [384, 512, [], \"f6dd\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileDownload = {\n prefix: 'fas',\n iconName: 'file-download',\n icon: [384, 512, [], \"f56d\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileExcel = {\n prefix: 'fas',\n iconName: 'file-excel',\n icon: [384, 512, [], \"f1c3\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileExport = {\n prefix: 'fas',\n iconName: 'file-export',\n icon: [576, 512, [], \"f56e\", \"M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z\"]\n};\nvar faFileImage = {\n prefix: 'fas',\n iconName: 'file-image',\n icon: [384, 512, [], \"f1c5\", \"M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z\"]\n};\nvar faFileImport = {\n prefix: 'fas',\n iconName: 'file-import',\n icon: [512, 512, [], \"f56f\", \"M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z\"]\n};\nvar faFileInvoice = {\n prefix: 'fas',\n iconName: 'file-invoice',\n icon: [384, 512, [], \"f570\", \"M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z\"]\n};\nvar faFileInvoiceDollar = {\n prefix: 'fas',\n iconName: 'file-invoice-dollar',\n icon: [384, 512, [], \"f571\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z\"]\n};\nvar faFileMedical = {\n prefix: 'fas',\n iconName: 'file-medical',\n icon: [384, 512, [], \"f477\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z\"]\n};\nvar faFileMedicalAlt = {\n prefix: 'fas',\n iconName: 'file-medical-alt',\n icon: [448, 512, [], \"f478\", \"M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFilePdf = {\n prefix: 'fas',\n iconName: 'file-pdf',\n icon: [384, 512, [], \"f1c1\", \"M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z\"]\n};\nvar faFilePowerpoint = {\n prefix: 'fas',\n iconName: 'file-powerpoint',\n icon: [384, 512, [], \"f1c4\", \"M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z\"]\n};\nvar faFilePrescription = {\n prefix: 'fas',\n iconName: 'file-prescription',\n icon: [384, 512, [], \"f572\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileSignature = {\n prefix: 'fas',\n iconName: 'file-signature',\n icon: [576, 512, [], \"f573\", \"M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z\"]\n};\nvar faFileUpload = {\n prefix: 'fas',\n iconName: 'file-upload',\n icon: [384, 512, [], \"f574\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileVideo = {\n prefix: 'fas',\n iconName: 'file-video',\n icon: [384, 512, [], \"f1c8\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z\"]\n};\nvar faFileWord = {\n prefix: 'fas',\n iconName: 'file-word',\n icon: [384, 512, [], \"f1c2\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFill = {\n prefix: 'fas',\n iconName: 'fill',\n icon: [512, 512, [], \"f575\", \"M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z\"]\n};\nvar faFillDrip = {\n prefix: 'fas',\n iconName: 'fill-drip',\n icon: [576, 512, [], \"f576\", \"M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z\"]\n};\nvar faFilm = {\n prefix: 'fas',\n iconName: 'film',\n icon: [512, 512, [], \"f008\", \"M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faFilter = {\n prefix: 'fas',\n iconName: 'filter',\n icon: [512, 512, [], \"f0b0\", \"M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z\"]\n};\nvar faFingerprint = {\n prefix: 'fas',\n iconName: 'fingerprint',\n icon: [512, 512, [], \"f577\", \"M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z\"]\n};\nvar faFire = {\n prefix: 'fas',\n iconName: 'fire',\n icon: [384, 512, [], \"f06d\", \"M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z\"]\n};\nvar faFireAlt = {\n prefix: 'fas',\n iconName: 'fire-alt',\n icon: [448, 512, [], \"f7e4\", \"M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z\"]\n};\nvar faFireExtinguisher = {\n prefix: 'fas',\n iconName: 'fire-extinguisher',\n icon: [448, 512, [], \"f134\", \"M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z\"]\n};\nvar faFirstAid = {\n prefix: 'fas',\n iconName: 'first-aid',\n icon: [576, 512, [], \"f479\", \"M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faFish = {\n prefix: 'fas',\n iconName: 'fish',\n icon: [576, 512, [], \"f578\", \"M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFistRaised = {\n prefix: 'fas',\n iconName: 'fist-raised',\n icon: [384, 512, [], \"f6de\", \"M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z\"]\n};\nvar faFlag = {\n prefix: 'fas',\n iconName: 'flag',\n icon: [512, 512, [], \"f024\", \"M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z\"]\n};\nvar faFlagCheckered = {\n prefix: 'fas',\n iconName: 'flag-checkered',\n icon: [512, 512, [], \"f11e\", \"M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z\"]\n};\nvar faFlagUsa = {\n prefix: 'fas',\n iconName: 'flag-usa',\n icon: [512, 512, [], \"f74d\", \"M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z\"]\n};\nvar faFlask = {\n prefix: 'fas',\n iconName: 'flask',\n icon: [448, 512, [], \"f0c3\", \"M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z\"]\n};\nvar faFlushed = {\n prefix: 'fas',\n iconName: 'flushed',\n icon: [496, 512, [], \"f579\", \"M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z\"]\n};\nvar faFolder = {\n prefix: 'fas',\n iconName: 'folder',\n icon: [512, 512, [], \"f07b\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z\"]\n};\nvar faFolderMinus = {\n prefix: 'fas',\n iconName: 'folder-minus',\n icon: [512, 512, [], \"f65d\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFolderOpen = {\n prefix: 'fas',\n iconName: 'folder-open',\n icon: [576, 512, [], \"f07c\", \"M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z\"]\n};\nvar faFolderPlus = {\n prefix: 'fas',\n iconName: 'folder-plus',\n icon: [512, 512, [], \"f65e\", \"M464,128H272L208,64H48A48,48,0,0,0,0,112V400a48,48,0,0,0,48,48H464a48,48,0,0,0,48-48V176A48,48,0,0,0,464,128ZM359.5,296a16,16,0,0,1-16,16h-64v64a16,16,0,0,1-16,16h-16a16,16,0,0,1-16-16V312h-64a16,16,0,0,1-16-16V280a16,16,0,0,1,16-16h64V200a16,16,0,0,1,16-16h16a16,16,0,0,1,16,16v64h64a16,16,0,0,1,16,16Z\"]\n};\nvar faFont = {\n prefix: 'fas',\n iconName: 'font',\n icon: [448, 512, [], \"f031\", \"M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z\"]\n};\nvar faFontAwesomeLogoFull = {\n prefix: 'fas',\n iconName: 'font-awesome-logo-full',\n icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFootballBall = {\n prefix: 'fas',\n iconName: 'football-ball',\n icon: [496, 512, [], \"f44e\", \"M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z\"]\n};\nvar faForward = {\n prefix: 'fas',\n iconName: 'forward',\n icon: [512, 512, [], \"f04e\", \"M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z\"]\n};\nvar faFrog = {\n prefix: 'fas',\n iconName: 'frog',\n icon: [576, 512, [], \"f52e\", \"M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFrown = {\n prefix: 'fas',\n iconName: 'frown',\n icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z\"]\n};\nvar faFrownOpen = {\n prefix: 'fas',\n iconName: 'frown-open',\n icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faFunnelDollar = {\n prefix: 'fas',\n iconName: 'funnel-dollar',\n icon: [640, 512, [], \"f662\", \"M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z\"]\n};\nvar faFutbol = {\n prefix: 'fas',\n iconName: 'futbol',\n icon: [512, 512, [], \"f1e3\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z\"]\n};\nvar faGamepad = {\n prefix: 'fas',\n iconName: 'gamepad',\n icon: [640, 512, [], \"f11b\", \"M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z\"]\n};\nvar faGasPump = {\n prefix: 'fas',\n iconName: 'gas-pump',\n icon: [512, 512, [], \"f52f\", \"M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z\"]\n};\nvar faGavel = {\n prefix: 'fas',\n iconName: 'gavel',\n icon: [512, 512, [], \"f0e3\", \"M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z\"]\n};\nvar faGem = {\n prefix: 'fas',\n iconName: 'gem',\n icon: [576, 512, [], \"f3a5\", \"M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z\"]\n};\nvar faGenderless = {\n prefix: 'fas',\n iconName: 'genderless',\n icon: [288, 512, [], \"f22d\", \"M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z\"]\n};\nvar faGhost = {\n prefix: 'fas',\n iconName: 'ghost',\n icon: [384, 512, [], \"f6e2\", \"M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faGift = {\n prefix: 'fas',\n iconName: 'gift',\n icon: [512, 512, [], \"f06b\", \"M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z\"]\n};\nvar faGifts = {\n prefix: 'fas',\n iconName: 'gifts',\n icon: [640, 512, [], \"f79c\", \"M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z\"]\n};\nvar faGlassCheers = {\n prefix: 'fas',\n iconName: 'glass-cheers',\n icon: [640, 512, [], \"f79f\", \"M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z\"]\n};\nvar faGlassMartini = {\n prefix: 'fas',\n iconName: 'glass-martini',\n icon: [512, 512, [], \"f000\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z\"]\n};\nvar faGlassMartiniAlt = {\n prefix: 'fas',\n iconName: 'glass-martini-alt',\n icon: [512, 512, [], \"f57b\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z\"]\n};\nvar faGlassWhiskey = {\n prefix: 'fas',\n iconName: 'glass-whiskey',\n icon: [512, 512, [], \"f7a0\", \"M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z\"]\n};\nvar faGlasses = {\n prefix: 'fas',\n iconName: 'glasses',\n icon: [576, 512, [], \"f530\", \"M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z\"]\n};\nvar faGlobe = {\n prefix: 'fas',\n iconName: 'globe',\n icon: [496, 512, [], \"f0ac\", \"M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z\"]\n};\nvar faGlobeAfrica = {\n prefix: 'fas',\n iconName: 'globe-africa',\n icon: [496, 512, [], \"f57c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z\"]\n};\nvar faGlobeAmericas = {\n prefix: 'fas',\n iconName: 'globe-americas',\n icon: [496, 512, [], \"f57d\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z\"]\n};\nvar faGlobeAsia = {\n prefix: 'fas',\n iconName: 'globe-asia',\n icon: [496, 512, [], \"f57e\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z\"]\n};\nvar faGlobeEurope = {\n prefix: 'fas',\n iconName: 'globe-europe',\n icon: [496, 512, [], \"f7a2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z\"]\n};\nvar faGolfBall = {\n prefix: 'fas',\n iconName: 'golf-ball',\n icon: [416, 512, [], \"f450\", \"M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z\"]\n};\nvar faGopuram = {\n prefix: 'fas',\n iconName: 'gopuram',\n icon: [512, 512, [], \"f664\", \"M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z\"]\n};\nvar faGraduationCap = {\n prefix: 'fas',\n iconName: 'graduation-cap',\n icon: [640, 512, [], \"f19d\", \"M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z\"]\n};\nvar faGreaterThan = {\n prefix: 'fas',\n iconName: 'greater-than',\n icon: [384, 512, [], \"f531\", \"M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z\"]\n};\nvar faGreaterThanEqual = {\n prefix: 'fas',\n iconName: 'greater-than-equal',\n icon: [448, 512, [], \"f532\", \"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faGrimace = {\n prefix: 'fas',\n iconName: 'grimace',\n icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z\"]\n};\nvar faGrin = {\n prefix: 'fas',\n iconName: 'grin',\n icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinAlt = {\n prefix: 'fas',\n iconName: 'grin-alt',\n icon: [496, 512, [], \"f581\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeam = {\n prefix: 'fas',\n iconName: 'grin-beam',\n icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeamSweat = {\n prefix: 'fas',\n iconName: 'grin-beam-sweat',\n icon: [504, 512, [], \"f583\", \"M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinHearts = {\n prefix: 'fas',\n iconName: 'grin-hearts',\n icon: [496, 512, [], \"f584\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z\"]\n};\nvar faGrinSquint = {\n prefix: 'fas',\n iconName: 'grin-squint',\n icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinSquintTears = {\n prefix: 'fas',\n iconName: 'grin-squint-tears',\n icon: [512, 512, [], \"f586\", \"M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z\"]\n};\nvar faGrinStars = {\n prefix: 'fas',\n iconName: 'grin-stars',\n icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z\"]\n};\nvar faGrinTears = {\n prefix: 'fas',\n iconName: 'grin-tears',\n icon: [640, 512, [], \"f588\", \"M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinTongue = {\n prefix: 'fas',\n iconName: 'grin-tongue',\n icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinTongueSquint = {\n prefix: 'fas',\n iconName: 'grin-tongue-squint',\n icon: [496, 512, [], \"f58a\", \"M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z\"]\n};\nvar faGrinTongueWink = {\n prefix: 'fas',\n iconName: 'grin-tongue-wink',\n icon: [496, 512, [], \"f58b\", \"M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinWink = {\n prefix: 'fas',\n iconName: 'grin-wink',\n icon: [496, 512, [], \"f58c\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z\"]\n};\nvar faGripHorizontal = {\n prefix: 'fas',\n iconName: 'grip-horizontal',\n icon: [448, 512, [], \"f58d\", \"M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGripLines = {\n prefix: 'fas',\n iconName: 'grip-lines',\n icon: [512, 512, [], \"f7a4\", \"M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faGripLinesVertical = {\n prefix: 'fas',\n iconName: 'grip-lines-vertical',\n icon: [256, 512, [], \"f7a5\", \"M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z\"]\n};\nvar faGripVertical = {\n prefix: 'fas',\n iconName: 'grip-vertical',\n icon: [320, 512, [], \"f58e\", \"M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGuitar = {\n prefix: 'fas',\n iconName: 'guitar',\n icon: [512, 512, [], \"f7a6\", \"M502.63 39L473 9.37a32 32 0 0 0-45.26 0L381.46 55.7a35.14 35.14 0 0 0-8.53 13.79L360.77 106l-76.26 76.26c-12.16-8.76-25.5-15.74-40.1-19.14-33.45-7.78-67-.88-89.88 22a82.45 82.45 0 0 0-20.24 33.47c-6 18.56-23.21 32.69-42.15 34.46-23.7 2.27-45.73 11.45-62.61 28.44C-16.11 327-7.9 409 47.58 464.45S185 528 230.56 482.52c17-16.88 26.16-38.9 28.45-62.71 1.76-18.85 15.89-36.13 34.43-42.14a82.6 82.6 0 0 0 33.48-20.25c22.87-22.88 29.74-56.36 22-89.75-3.39-14.64-10.37-28-19.16-40.2L406 151.23l36.48-12.16a35.14 35.14 0 0 0 13.79-8.53l46.33-46.32a32 32 0 0 0 .03-45.22zM208 352a48 48 0 1 1 48-48 48 48 0 0 1-48 48z\"]\n};\nvar faHSquare = {\n prefix: 'fas',\n iconName: 'h-square',\n icon: [448, 512, [], \"f0fd\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z\"]\n};\nvar faHamburger = {\n prefix: 'fas',\n iconName: 'hamburger',\n icon: [512, 512, [], \"f805\", \"M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z\"]\n};\nvar faHammer = {\n prefix: 'fas',\n iconName: 'hammer',\n icon: [576, 512, [], \"f6e3\", \"M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z\"]\n};\nvar faHamsa = {\n prefix: 'fas',\n iconName: 'hamsa',\n icon: [512, 512, [], \"f665\", \"M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faHandHolding = {\n prefix: 'fas',\n iconName: 'hand-holding',\n icon: [576, 512, [], \"f4bd\", \"M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingHeart = {\n prefix: 'fas',\n iconName: 'hand-holding-heart',\n icon: [576, 512, [], \"f4be\", \"M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingMedical = {\n prefix: 'fas',\n iconName: 'hand-holding-medical',\n icon: [576, 512, [], \"e05c\", \"M159.88,175.82h64v64a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16v-64h64a16,16,0,0,0,16-16v-64a16,16,0,0,0-16-16h-64v-64a16,16,0,0,0-16-16h-64a16,16,0,0,0-16,16v64h-64a16,16,0,0,0-16,16v64A16,16,0,0,0,159.88,175.82ZM568.07,336.13a39.91,39.91,0,0,0-55.93-8.47L392.47,415.84H271.86a16,16,0,0,1,0-32H350.1c16,0,30.75-10.87,33.37-26.61a32.06,32.06,0,0,0-31.62-37.38h-160a117.7,117.7,0,0,0-74.12,26.25l-46.5,37.74H15.87a16.11,16.11,0,0,0-16,16v96a16.11,16.11,0,0,0,16,16h347a104.8,104.8,0,0,0,61.7-20.27L559.6,392A40,40,0,0,0,568.07,336.13Z\"]\n};\nvar faHandHoldingUsd = {\n prefix: 'fas',\n iconName: 'hand-holding-usd',\n icon: [576, 512, [], \"f4c0\", \"M271.06,144.3l54.27,14.3a8.59,8.59,0,0,1,6.63,8.1c0,4.6-4.09,8.4-9.12,8.4h-35.6a30,30,0,0,1-11.19-2.2c-5.24-2.2-11.28-1.7-15.3,2l-19,17.5a11.68,11.68,0,0,0-2.25,2.66,11.42,11.42,0,0,0,3.88,15.74,83.77,83.77,0,0,0,34.51,11.5V240c0,8.8,7.83,16,17.37,16h17.37c9.55,0,17.38-7.2,17.38-16V222.4c32.93-3.6,57.84-31,53.5-63-3.15-23-22.46-41.3-46.56-47.7L282.68,97.4a8.59,8.59,0,0,1-6.63-8.1c0-4.6,4.09-8.4,9.12-8.4h35.6A30,30,0,0,1,332,83.1c5.23,2.2,11.28,1.7,15.3-2l19-17.5A11.31,11.31,0,0,0,368.47,61a11.43,11.43,0,0,0-3.84-15.78,83.82,83.82,0,0,0-34.52-11.5V16c0-8.8-7.82-16-17.37-16H295.37C285.82,0,278,7.2,278,16V33.6c-32.89,3.6-57.85,31-53.51,63C227.63,119.6,247,137.9,271.06,144.3ZM565.27,328.1c-11.8-10.7-30.2-10-42.6,0L430.27,402a63.64,63.64,0,0,1-40,14H272a16,16,0,0,1,0-32h78.29c15.9,0,30.71-10.9,33.25-26.6a31.2,31.2,0,0,0,.46-5.46A32,32,0,0,0,352,320H192a117.66,117.66,0,0,0-74.1,26.29L71.4,384H16A16,16,0,0,0,0,400v96a16,16,0,0,0,16,16H372.77a64,64,0,0,0,40-14L564,377a32,32,0,0,0,1.28-48.9Z\"]\n};\nvar faHandHoldingWater = {\n prefix: 'fas',\n iconName: 'hand-holding-water',\n icon: [576, 512, [], \"f4c1\", \"M288 256c53 0 96-42.1 96-94 0-40-57.1-120.7-83.2-155.6-6.4-8.5-19.2-8.5-25.6 0C249.1 41.3 192 122 192 162c0 51.9 43 94 96 94zm277.3 72.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandLizard = {\n prefix: 'fas',\n iconName: 'hand-lizard',\n icon: [576, 512, [], \"f258\", \"M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z\"]\n};\nvar faHandMiddleFinger = {\n prefix: 'fas',\n iconName: 'hand-middle-finger',\n icon: [512, 512, [], \"f806\", \"M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z\"]\n};\nvar faHandPaper = {\n prefix: 'fas',\n iconName: 'hand-paper',\n icon: [448, 512, [], \"f256\", \"M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z\"]\n};\nvar faHandPeace = {\n prefix: 'fas',\n iconName: 'hand-peace',\n icon: [448, 512, [], \"f25b\", \"M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z\"]\n};\nvar faHandPointDown = {\n prefix: 'fas',\n iconName: 'hand-point-down',\n icon: [384, 512, [], \"f0a7\", \"M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointLeft = {\n prefix: 'fas',\n iconName: 'hand-point-left',\n icon: [512, 512, [], \"f0a5\", \"M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z\"]\n};\nvar faHandPointRight = {\n prefix: 'fas',\n iconName: 'hand-point-right',\n icon: [512, 512, [], \"f0a4\", \"M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointUp = {\n prefix: 'fas',\n iconName: 'hand-point-up',\n icon: [384, 512, [], \"f0a6\", \"M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"]\n};\nvar faHandPointer = {\n prefix: 'fas',\n iconName: 'hand-pointer',\n icon: [448, 512, [], \"f25a\", \"M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z\"]\n};\nvar faHandRock = {\n prefix: 'fas',\n iconName: 'hand-rock',\n icon: [512, 512, [], \"f255\", \"M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z\"]\n};\nvar faHandScissors = {\n prefix: 'fas',\n iconName: 'hand-scissors',\n icon: [512, 512, [], \"f257\", \"M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z\"]\n};\nvar faHandSparkles = {\n prefix: 'fas',\n iconName: 'hand-sparkles',\n icon: [640, 512, [], \"e05d\", \"M106.66,170.64l.09,0,49.55-20.65a7.32,7.32,0,0,0,3.68-6h0a7.29,7.29,0,0,0-3.68-6l-49.57-20.67-.07,0L86,67.68a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L3.7,138A7.29,7.29,0,0,0,0,144H0a7.32,7.32,0,0,0,3.68,6L53.27,170.6l.07,0L74,220.26a6.65,6.65,0,0,0,11.92,0l20.69-49.62ZM471.38,467.41l-1-.42-1-.5a38.67,38.67,0,0,1,0-69.14l1-.49,1-.43,37.49-15.63,15.63-37.48.41-1,.47-.95c3.85-7.74,10.58-13.63,18.35-17.34,0-1.33.25-2.69.27-4V144a32,32,0,0,0-64,0v72a8,8,0,0,1-8,8H456a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H360a8,8,0,0,1-8-8V32a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H264a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0v241l-23.59-32.49a40,40,0,0,0-64.71,47.09L229.3,492.21A48.07,48.07,0,0,0,268.09,512H465.7c19.24,0,35.65-11.73,43.24-28.79l-.07-.17ZM349.79,339.52,320,351.93l-12.42,29.78a4,4,0,0,1-7.15,0L288,351.93l-29.79-12.41a4,4,0,0,1,0-7.16L288,319.94l12.42-29.78a4,4,0,0,1,7.15,0L320,319.94l29.79,12.42a4,4,0,0,1,0,7.16ZM640,431.91a7.28,7.28,0,0,0-3.68-6l-49.57-20.67-.07,0L566,355.63a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L483.7,426a7.28,7.28,0,0,0-3.68,6h0a7.29,7.29,0,0,0,3.68,5.95l49.57,20.67.07,0L554,508.21a6.65,6.65,0,0,0,11.92,0l20.69-49.62h0l.09,0,49.55-20.66a7.29,7.29,0,0,0,3.68-5.95h0Z\"]\n};\nvar faHandSpock = {\n prefix: 'fas',\n iconName: 'hand-spock',\n icon: [512, 512, [], \"f259\", \"M510.9005,145.27027,442.604,432.09391A103.99507,103.99507,0,0,1,341.43745,512H214.074a135.96968,135.96968,0,0,1-93.18489-36.95291L12.59072,373.12723a39.992,39.992,0,0,1,54.8122-58.24988l60.59342,57.02528v0a283.24849,283.24849,0,0,0-11.6703-80.46734L73.63726,147.36011a40.00575,40.00575,0,1,1,76.71833-22.7187l37.15458,125.39477a8.33113,8.33113,0,0,0,16.05656-4.4414L153.26183,49.95406A39.99638,39.99638,0,1,1,230.73015,30.0166l56.09491,218.15825a10.42047,10.42047,0,0,0,20.30018-.501L344.80766,63.96966a40.052,40.052,0,0,1,51.30245-30.0893c19.86073,6.2998,30.86262,27.67378,26.67564,48.08487l-33.83869,164.966a7.55172,7.55172,0,0,0,14.74406,3.2666l29.3973-123.45874a39.99414,39.99414,0,1,1,77.81208,18.53121Z\"]\n};\nvar faHands = {\n prefix: 'fas',\n iconName: 'hands',\n icon: [640, 512, [], \"f4c2\", \"M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z\"]\n};\nvar faHandsHelping = {\n prefix: 'fas',\n iconName: 'hands-helping',\n icon: [640, 512, [], \"f4c4\", \"M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z\"]\n};\nvar faHandsWash = {\n prefix: 'fas',\n iconName: 'hands-wash',\n icon: [576, 512, [], \"e05e\", \"M496,224a48,48,0,1,0-48-48A48,48,0,0,0,496,224ZM311.47,178.45A56.77,56.77,0,0,1,328,176a56,56,0,0,1,19,3.49l15.35-48.61A24,24,0,0,0,342,99.74c-11.53-1.35-22.21,6.44-25.71,17.51l-20.9,66.17ZM93.65,386.33c.8-.19,1.54-.54,2.35-.71V359.93a156,156,0,0,1,107.06-148l73.7-22.76L310.92,81.05a24,24,0,0,0-20.33-31.11c-11.53-1.34-22.22,6.45-25.72,17.52L231.42,173.88a8,8,0,0,1-15.26-4.83L259.53,31.26A24,24,0,0,0,239.2.15C227.67-1.19,217,6.6,213.49,17.66L165.56,169.37a8,8,0,1,1-15.26-4.82l38.56-122a24,24,0,0,0-20.33-31.11C157,10,146.32,17.83,142.82,28.9l-60,189.85L80.76,168.7A24,24,0,0,0,56.9,144.55c-13.23-.05-24.72,10.54-24.9,23.86V281.14A123.69,123.69,0,0,0,93.65,386.33ZM519.1,336H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,279.84,498.71,272,487.1,272H288l47.09-17.06a24,24,0,0,0-14.18-45.88L213.19,242.31A123.88,123.88,0,0,0,128,360v25.65a79.78,79.78,0,0,1,58,108.63A118.9,118.9,0,0,0,248,512H456a24,24,0,0,0,23.54-28.76C477.35,471.84,466.71,464,455.1,464H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,407.84,498.71,400,487.1,400H360a8,8,0,0,1,0-16H520a24,24,0,0,0,23.54-28.76C541.35,343.84,530.71,336,519.1,336ZM416,64a32,32,0,1,0-32-32A32,32,0,0,0,416,64ZM112,416a48,48,0,1,0,48,48A48,48,0,0,0,112,416Z\"]\n};\nvar faHandshake = {\n prefix: 'fas',\n iconName: 'handshake',\n icon: [640, 512, [], \"f2b5\", \"M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z\"]\n};\nvar faHandshakeAltSlash = {\n prefix: 'fas',\n iconName: 'handshake-alt-slash',\n icon: [640, 512, [], \"e05f\", \"M358.59,195.6,504.2,313.8a63.4,63.4,0,0,1,22.21,37.91H624a16.05,16.05,0,0,0,16-16V143.91A16,16,0,0,0,624,128H512L457.41,73.41A32,32,0,0,0,434.8,64H348.91a32,32,0,0,0-21.61,8.41l-88.12,80.68-25.69-19.85L289.09,64H205.3a32,32,0,0,0-22.6,9.41l-20.34,20.3L45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.54,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45L303.4,202.72l32.69-29.92,27-24.7a16,16,0,0,1,21.61,23.61ZM16,128A16.05,16.05,0,0,0,0,144V335.91a16,16,0,0,0,16,16H146.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L23.56,128Z\"]\n};\nvar faHandshakeSlash = {\n prefix: 'fas',\n iconName: 'handshake-slash',\n icon: [640, 512, [], \"e060\", \"M0,128.21V384H64a32,32,0,0,0,32-32V184L23.83,128.21ZM48,320.1a16,16,0,1,1-16,16A16,16,0,0,1,48,320.1Zm80,31.81h18.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L128,208.72Zm416-223.7V352.1a32,32,0,0,0,32,32h64V128.21ZM592,352.1a16,16,0,1,1,16-16A16,16,0,0,1,592,352.1ZM303.33,202.67l59.58-54.57a16,16,0,0,1,21.59,23.61L358.41,195.6,504,313.8a73.08,73.08,0,0,1,7.91,7.7V128L457.3,73.41A31.76,31.76,0,0,0,434.7,64H348.8a31.93,31.93,0,0,0-21.6,8.41l-88.07,80.64-25.64-19.81L289.09,64H205.3a32,32,0,0,0-22.6,9.41L162.36,93.72,45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.65-25.27a16,16,0,0,0-2.82-22.45Z\"]\n};\nvar faHanukiah = {\n prefix: 'fas',\n iconName: 'hanukiah',\n icon: [640, 512, [], \"f6e6\", \"M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z\"]\n};\nvar faHardHat = {\n prefix: 'fas',\n iconName: 'hard-hat',\n icon: [512, 512, [], \"f807\", \"M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faHashtag = {\n prefix: 'fas',\n iconName: 'hashtag',\n icon: [448, 512, [], \"f292\", \"M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z\"]\n};\nvar faHatCowboy = {\n prefix: 'fas',\n iconName: 'hat-cowboy',\n icon: [640, 512, [], \"f8c0\", \"M490 296.9C480.51 239.51 450.51 64 392.3 64c-14 0-26.49 5.93-37 14a58.21 58.21 0 0 1-70.58 0c-10.51-8-23-14-37-14-58.2 0-88.2 175.47-97.71 232.88C188.81 309.47 243.73 320 320 320s131.23-10.51 170-23.1zm142.9-37.18a16 16 0 0 0-19.75 1.5c-1 .9-101.27 90.78-293.16 90.78-190.82 0-292.22-89.94-293.24-90.84A16 16 0 0 0 1 278.53C1.73 280.55 78.32 480 320 480s318.27-199.45 319-201.47a16 16 0 0 0-6.09-18.81z\"]\n};\nvar faHatCowboySide = {\n prefix: 'fas',\n iconName: 'hat-cowboy-side',\n icon: [640, 512, [], \"f8c1\", \"M260.8 291.06c-28.63-22.94-62-35.06-96.4-35.06C87 256 21.47 318.72 1.43 412.06c-3.55 16.6-.43 33.83 8.57 47.3C18.75 472.47 31.83 480 45.88 480H592c-103.21 0-155-37.07-233.19-104.46zm234.65-18.29L468.4 116.2A64 64 0 0 0 392 64.41L200.85 105a64 64 0 0 0-50.35 55.79L143.61 226c6.9-.83 13.7-2 20.79-2 41.79 0 82 14.55 117.29 42.82l98 84.48C450.76 412.54 494.9 448 592 448a48 48 0 0 0 48-48c0-25.39-29.6-119.33-144.55-127.23z\"]\n};\nvar faHatWizard = {\n prefix: 'fas',\n iconName: 'hat-wizard',\n icon: [512, 512, [], \"f6e8\", \"M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z\"]\n};\nvar faHdd = {\n prefix: 'fas',\n iconName: 'hdd',\n icon: [576, 512, [], \"f0a0\", \"M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faHeadSideCough = {\n prefix: 'fas',\n iconName: 'head-side-cough',\n icon: [640, 512, [], \"e061\", \"M616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304ZM552,416a24,24,0,1,0,24,24A24,24,0,0,0,552,416Zm-64-56a24,24,0,1,0,24,24A24,24,0,0,0,488,360ZM616,464a24,24,0,1,0,24,24A24,24,0,0,0,616,464Zm0-104a24,24,0,1,0,24,24A24,24,0,0,0,616,360Zm-64-40a24,24,0,1,0,24,24A24,24,0,0,0,552,320Zm-74.78-45c-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192C86,0,0,86,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320a32,32,0,0,1,0-64h96V320h32A32,32,0,0,0,477.22,275ZM288,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,288,224Z\"]\n};\nvar faHeadSideCoughSlash = {\n prefix: 'fas',\n iconName: 'head-side-cough-slash',\n icon: [640, 512, [], \"e062\", \"M454.11,319.21c19.56-3.81,31.62-25,23.11-44.21-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192A190.64,190.64,0,0,0,84.18,33.3L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM313.39,210.45,263.61,172c5.88-7.14,14.43-12,24.36-12a32.06,32.06,0,0,1,32,32C320,199,317.24,205.17,313.39,210.45ZM616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304Zm-64,64a24,24,0,1,0-24-24A24,24,0,0,0,552,368ZM288,384a32,32,0,0,1,32-32h19.54L20.73,105.59A190.86,190.86,0,0,0,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320A32,32,0,0,1,288,384Zm328-24a24,24,0,1,0,24,24A24,24,0,0,0,616,360Z\"]\n};\nvar faHeadSideMask = {\n prefix: 'fas',\n iconName: 'head-side-mask',\n icon: [512, 512, [], \"e063\", \"M.15,184.42C-2.17,244.21,23,298.06,64,334.88V512H224V316.51L3.67,156.25A182.28,182.28,0,0,0,.15,184.42ZM509.22,275c-21-47.12-48.5-151.75-73.12-186.75A208.11,208.11,0,0,0,266.11,0H200C117,0,42.48,50.57,13.25,123.65L239.21,288H511.76A31.35,31.35,0,0,0,509.22,275ZM320,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,320,224Zm16,144H496l16-48H256V512H401.88a64,64,0,0,0,60.71-43.76L464,464H336a16,16,0,0,1,0-32H474.67l10.67-32H336a16,16,0,0,1,0-32Z\"]\n};\nvar faHeadSideVirus = {\n prefix: 'fas',\n iconName: 'head-side-virus',\n icon: [512, 512, [], \"e064\", \"M272,240a16,16,0,1,0,16,16A16,16,0,0,0,272,240Zm-64-64a16,16,0,1,0,16,16A16,16,0,0,0,208,176Zm301.2,99c-20.93-47.12-48.43-151.73-73.07-186.75A207.9,207.9,0,0,0,266.09,0H192C86,0,0,86,0,192A191.23,191.23,0,0,0,64,334.81V512H320V448h64a64,64,0,0,0,64-64V320H480A32,32,0,0,0,509.2,275ZM368,240H355.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C290.47,297.09,256,311.37,256,339.88V352a16,16,0,0,1-32,0V339.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H112a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V96a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C313.09,173.53,327.37,208,355.88,208H368a16,16,0,0,1,0,32Z\"]\n};\nvar faHeading = {\n prefix: 'fas',\n iconName: 'heading',\n icon: [512, 512, [], \"f1dc\", \"M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z\"]\n};\nvar faHeadphones = {\n prefix: 'fas',\n iconName: 'headphones',\n icon: [512, 512, [], \"f025\", \"M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z\"]\n};\nvar faHeadphonesAlt = {\n prefix: 'fas',\n iconName: 'headphones-alt',\n icon: [512, 512, [], \"f58f\", \"M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z\"]\n};\nvar faHeadset = {\n prefix: 'fas',\n iconName: 'headset',\n icon: [512, 512, [], \"f590\", \"M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z\"]\n};\nvar faHeart = {\n prefix: 'fas',\n iconName: 'heart',\n icon: [512, 512, [], \"f004\", \"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"]\n};\nvar faHeartBroken = {\n prefix: 'fas',\n iconName: 'heart-broken',\n icon: [512, 512, [], \"f7a9\", \"M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHeartbeat = {\n prefix: 'fas',\n iconName: 'heartbeat',\n icon: [512, 512, [], \"f21e\", \"M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHelicopter = {\n prefix: 'fas',\n iconName: 'helicopter',\n icon: [640, 512, [], \"f533\", \"M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z\"]\n};\nvar faHighlighter = {\n prefix: 'fas',\n iconName: 'highlighter',\n icon: [544, 512, [], \"f591\", \"M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z\"]\n};\nvar faHiking = {\n prefix: 'fas',\n iconName: 'hiking',\n icon: [384, 512, [], \"f6ec\", \"M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z\"]\n};\nvar faHippo = {\n prefix: 'fas',\n iconName: 'hippo',\n icon: [640, 512, [], \"f6ed\", \"M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHistory = {\n prefix: 'fas',\n iconName: 'history',\n icon: [512, 512, [], \"f1da\", \"M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z\"]\n};\nvar faHockeyPuck = {\n prefix: 'fas',\n iconName: 'hockey-puck',\n icon: [512, 512, [], \"f453\", \"M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z\"]\n};\nvar faHollyBerry = {\n prefix: 'fas',\n iconName: 'holly-berry',\n icon: [448, 512, [], \"f7aa\", \"M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z\"]\n};\nvar faHome = {\n prefix: 'fas',\n iconName: 'home',\n icon: [576, 512, [], \"f015\", \"M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z\"]\n};\nvar faHorse = {\n prefix: 'fas',\n iconName: 'horse',\n icon: [576, 512, [], \"f6f0\", \"M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHorseHead = {\n prefix: 'fas',\n iconName: 'horse-head',\n icon: [512, 512, [], \"f7ab\", \"M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z\"]\n};\nvar faHospital = {\n prefix: 'fas',\n iconName: 'hospital',\n icon: [448, 512, [], \"f0f8\", \"M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z\"]\n};\nvar faHospitalAlt = {\n prefix: 'fas',\n iconName: 'hospital-alt',\n icon: [576, 512, [], \"f47d\", \"M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faHospitalSymbol = {\n prefix: 'fas',\n iconName: 'hospital-symbol',\n icon: [512, 512, [], \"f47e\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z\"]\n};\nvar faHospitalUser = {\n prefix: 'fas',\n iconName: 'hospital-user',\n icon: [640, 512, [], \"f80d\", \"M480 320a96 96 0 1 0-96-96 96 96 0 0 0 96 96zm48 32a22.88 22.88 0 0 0-7.06 1.09 124.76 124.76 0 0 1-81.89 0A22.82 22.82 0 0 0 432 352a112 112 0 0 0-112 112.62c.14 26.26 21.73 47.38 48 47.38h224c26.27 0 47.86-21.12 48-47.38A112 112 0 0 0 528 352zm-198.09 10.45A145.19 145.19 0 0 1 352 344.62V128a32 32 0 0 0-32-32h-32V32a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v64H32a32 32 0 0 0-32 32v368a16 16 0 0 0 16 16h288.31A78.62 78.62 0 0 1 288 464.79a143.06 143.06 0 0 1 41.91-102.34zM144 404a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm48-122a6 6 0 0 1-6 6h-20a6 6 0 0 1-6-6v-26h-26a6 6 0 0 1-6-6v-20a6 6 0 0 1 6-6h26V70a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v26h26a6 6 0 0 1 6 6v20a6 6 0 0 1-6 6h-26zm80 250a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12z\"]\n};\nvar faHotTub = {\n prefix: 'fas',\n iconName: 'hot-tub',\n icon: [512, 512, [], \"f593\", \"M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z\"]\n};\nvar faHotdog = {\n prefix: 'fas',\n iconName: 'hotdog',\n icon: [512, 512, [], \"f80f\", \"M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z\"]\n};\nvar faHotel = {\n prefix: 'fas',\n iconName: 'hotel',\n icon: [576, 512, [], \"f594\", \"M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faHourglass = {\n prefix: 'fas',\n iconName: 'hourglass',\n icon: [384, 512, [], \"f254\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z\"]\n};\nvar faHourglassEnd = {\n prefix: 'fas',\n iconName: 'hourglass-end',\n icon: [384, 512, [], \"f253\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z\"]\n};\nvar faHourglassHalf = {\n prefix: 'fas',\n iconName: 'hourglass-half',\n icon: [384, 512, [], \"f252\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z\"]\n};\nvar faHourglassStart = {\n prefix: 'fas',\n iconName: 'hourglass-start',\n icon: [384, 512, [], \"f251\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z\"]\n};\nvar faHouseDamage = {\n prefix: 'fas',\n iconName: 'house-damage',\n icon: [576, 512, [], \"f6f1\", \"M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z\"]\n};\nvar faHouseUser = {\n prefix: 'fas',\n iconName: 'house-user',\n icon: [576, 512, [], \"e065\", \"M570.69,236.27,512,184.44V48a16,16,0,0,0-16-16H432a16,16,0,0,0-16,16V99.67L314.78,10.3C308.5,4.61,296.53,0,288,0s-20.46,4.61-26.74,10.3l-256,226A18.27,18.27,0,0,0,0,248.2a18.64,18.64,0,0,0,4.09,10.71L25.5,282.7a21.14,21.14,0,0,0,12,5.3,21.67,21.67,0,0,0,10.69-4.11l15.9-14V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V269.88l15.91,14A21.94,21.94,0,0,0,538.63,288a20.89,20.89,0,0,0,11.87-5.31l21.41-23.81A21.64,21.64,0,0,0,576,248.19,21,21,0,0,0,570.69,236.27ZM288,176a64,64,0,1,1-64,64A64,64,0,0,1,288,176ZM400,448H176a16,16,0,0,1-16-16,96,96,0,0,1,96-96h64a96,96,0,0,1,96,96A16,16,0,0,1,400,448Z\"]\n};\nvar faHryvnia = {\n prefix: 'fas',\n iconName: 'hryvnia',\n icon: [384, 512, [], \"f6f2\", \"M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z\"]\n};\nvar faICursor = {\n prefix: 'fas',\n iconName: 'i-cursor',\n icon: [256, 512, [], \"f246\", \"M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z\"]\n};\nvar faIceCream = {\n prefix: 'fas',\n iconName: 'ice-cream',\n icon: [448, 512, [], \"f810\", \"M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z\"]\n};\nvar faIcicles = {\n prefix: 'fas',\n iconName: 'icicles',\n icon: [512, 512, [], \"f7ad\", \"M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z\"]\n};\nvar faIcons = {\n prefix: 'fas',\n iconName: 'icons',\n icon: [512, 512, [], \"f86d\", \"M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z\"]\n};\nvar faIdBadge = {\n prefix: 'fas',\n iconName: 'id-badge',\n icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faIdCard = {\n prefix: 'fas',\n iconName: 'id-card',\n icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z\"]\n};\nvar faIdCardAlt = {\n prefix: 'fas',\n iconName: 'id-card-alt',\n icon: [576, 512, [], \"f47f\", \"M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z\"]\n};\nvar faIgloo = {\n prefix: 'fas',\n iconName: 'igloo',\n icon: [576, 512, [], \"f7ae\", \"M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z\"]\n};\nvar faImage = {\n prefix: 'fas',\n iconName: 'image',\n icon: [512, 512, [], \"f03e\", \"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"]\n};\nvar faImages = {\n prefix: 'fas',\n iconName: 'images',\n icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z\"]\n};\nvar faInbox = {\n prefix: 'fas',\n iconName: 'inbox',\n icon: [576, 512, [], \"f01c\", \"M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z\"]\n};\nvar faIndent = {\n prefix: 'fas',\n iconName: 'indent',\n icon: [448, 512, [], \"f03c\", \"M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faIndustry = {\n prefix: 'fas',\n iconName: 'industry',\n icon: [512, 512, [], \"f275\", \"M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z\"]\n};\nvar faInfinity = {\n prefix: 'fas',\n iconName: 'infinity',\n icon: [640, 512, [], \"f534\", \"M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z\"]\n};\nvar faInfo = {\n prefix: 'fas',\n iconName: 'info',\n icon: [192, 512, [], \"f129\", \"M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z\"]\n};\nvar faInfoCircle = {\n prefix: 'fas',\n iconName: 'info-circle',\n icon: [512, 512, [], \"f05a\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"]\n};\nvar faItalic = {\n prefix: 'fas',\n iconName: 'italic',\n icon: [320, 512, [], \"f033\", \"M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z\"]\n};\nvar faJedi = {\n prefix: 'fas',\n iconName: 'jedi',\n icon: [576, 512, [], \"f669\", \"M535.95308,352c-42.64069,94.17188-137.64086,160-247.9848,160q-6.39844,0-12.84377-.29688C171.15558,506.9375,81.26481,442.23438,40.01474,352H79.93668L21.3272,293.40625a264.82522,264.82522,0,0,1-5.10938-39.42187,273.6653,273.6653,0,0,1,.5-29.98438H63.93665L22.546,182.625A269.79782,269.79782,0,0,1,130.51489,20.54688a16.06393,16.06393,0,0,1,9.28127-3,16.36332,16.36332,0,0,1,13.5,7.25,16.02739,16.02739,0,0,1,1.625,15.09374,138.387,138.387,0,0,0-9.84376,51.26563c0,45.10937,21.04691,86.57813,57.71884,113.73437a16.29989,16.29989,0,0,1,1.20313,25.39063c-26.54692,23.98437-41.17194,56.5-41.17194,91.57813,0,60.03124,42.95319,110.28124,99.89079,121.92187l2.5-65.26563L238.062,397a8.33911,8.33911,0,0,1-10-.75,8.025,8.025,0,0,1-1.39063-9.9375l20.125-33.76562-42.06257-8.73438a7.9898,7.9898,0,0,1,0-15.65625l42.06257-8.71875-20.10941-33.73438a7.99122,7.99122,0,0,1,11.35939-10.71874L268.437,295.64062,279.95265,7.67188a7.97138,7.97138,0,0,1,8-7.67188h.04687a8.02064,8.02064,0,0,1,7.95314,7.70312L307.48394,295.625l30.39068-20.67188a8.08327,8.08327,0,0,1,10,.8125,7.99866,7.99866,0,0,1,1.39062,9.90626L329.12461,319.4375l42.07819,8.73438a7.99373,7.99373,0,0,1,0,15.65624l-42.07819,8.71876,20.1094,33.73437a7.97791,7.97791,0,0,1-1.32812,9.92187A8.25739,8.25739,0,0,1,337.87462,397L310.7027,378.53125l2.5,65.34375c48.48446-9.40625,87.57828-48.15625,97.31267-96.5A123.52652,123.52652,0,0,0,371.9528,230.29688a16.30634,16.30634,0,0,1,1.20313-25.42188c36.65631-27.17188,57.6876-68.60938,57.6876-113.73438a138.01689,138.01689,0,0,0-9.85939-51.3125,15.98132,15.98132,0,0,1,1.60937-15.09374,16.36914,16.36914,0,0,1,13.5-7.23438,16.02453,16.02453,0,0,1,9.25,2.98438A271.26947,271.26947,0,0,1,553.25,182.76562L511.99992,224h46.9532C559.3125,229.76562,560,235.45312,560,241.26562a270.092,270.092,0,0,1-5.125,51.85938L495.98427,352Z\"]\n};\nvar faJoint = {\n prefix: 'fas',\n iconName: 'joint',\n icon: [640, 512, [], \"f595\", \"M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z\"]\n};\nvar faJournalWhills = {\n prefix: 'fas',\n iconName: 'journal-whills',\n icon: [448, 512, [], \"f66a\", \"M438.40625,377.59375c-3.20313,12.8125-3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-25.59375,25.59375H96c-54.40625,0-96-41.59375-96-96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.8125Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l37.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-8.15624a4.003,4.003,0,0,0-5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3.73438-8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z\"]\n};\nvar faKaaba = {\n prefix: 'fas',\n iconName: 'kaaba',\n icon: [576, 512, [], \"f66b\", \"M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z\"]\n};\nvar faKey = {\n prefix: 'fas',\n iconName: 'key',\n icon: [512, 512, [], \"f084\", \"M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z\"]\n};\nvar faKeyboard = {\n prefix: 'fas',\n iconName: 'keyboard',\n icon: [576, 512, [], \"f11c\", \"M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faKhanda = {\n prefix: 'fas',\n iconName: 'khanda',\n icon: [512, 512, [], \"f66d\", \"M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z\"]\n};\nvar faKiss = {\n prefix: 'fas',\n iconName: 'kiss',\n icon: [496, 512, [], \"f596\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faKissBeam = {\n prefix: 'fas',\n iconName: 'kiss-beam',\n icon: [496, 512, [], \"f597\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z\"]\n};\nvar faKissWinkHeart = {\n prefix: 'fas',\n iconName: 'kiss-wink-heart',\n icon: [504, 512, [], \"f598\", \"M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z\"]\n};\nvar faKiwiBird = {\n prefix: 'fas',\n iconName: 'kiwi-bird',\n icon: [576, 512, [], \"f535\", \"M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z\"]\n};\nvar faLandmark = {\n prefix: 'fas',\n iconName: 'landmark',\n icon: [512, 512, [], \"f66f\", \"M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faLanguage = {\n prefix: 'fas',\n iconName: 'language',\n icon: [640, 512, [], \"f1ab\", \"M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z\"]\n};\nvar faLaptop = {\n prefix: 'fas',\n iconName: 'laptop',\n icon: [640, 512, [], \"f109\", \"M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopCode = {\n prefix: 'fas',\n iconName: 'laptop-code',\n icon: [640, 512, [], \"f5fc\", \"M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopHouse = {\n prefix: 'fas',\n iconName: 'laptop-house',\n icon: [640, 512, [], \"e066\", \"M272,288H208a16,16,0,0,1-16-16V208a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v37.12C299.11,232.24,315,224,332.8,224H469.74l6.65-7.53A16.51,16.51,0,0,0,480,207a16.31,16.31,0,0,0-4.75-10.61L416,144V48a16,16,0,0,0-16-16H368a16,16,0,0,0-16,16V87.3L263.5,8.92C258,4,247.45,0,240.05,0s-17.93,4-23.47,8.92L4.78,196.42A16.15,16.15,0,0,0,0,207a16.4,16.4,0,0,0,3.55,9.39L22.34,237.7A16.22,16.22,0,0,0,33,242.48,16.51,16.51,0,0,0,42.34,239L64,219.88V384a32,32,0,0,0,32,32H272ZM629.33,448H592V288c0-17.67-12.89-32-28.8-32H332.8c-15.91,0-28.8,14.33-28.8,32V448H266.67A10.67,10.67,0,0,0,256,458.67v10.66A42.82,42.82,0,0,0,298.6,512H597.4A42.82,42.82,0,0,0,640,469.33V458.67A10.67,10.67,0,0,0,629.33,448ZM544,448H352V304H544Z\"]\n};\nvar faLaptopMedical = {\n prefix: 'fas',\n iconName: 'laptop-medical',\n icon: [640, 512, [], \"f812\", \"M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z\"]\n};\nvar faLaugh = {\n prefix: 'fas',\n iconName: 'laugh',\n icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z\"]\n};\nvar faLaughBeam = {\n prefix: 'fas',\n iconName: 'laugh-beam',\n icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughSquint = {\n prefix: 'fas',\n iconName: 'laugh-squint',\n icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughWink = {\n prefix: 'fas',\n iconName: 'laugh-wink',\n icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLayerGroup = {\n prefix: 'fas',\n iconName: 'layer-group',\n icon: [512, 512, [], \"f5fd\", \"M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z\"]\n};\nvar faLeaf = {\n prefix: 'fas',\n iconName: 'leaf',\n icon: [576, 512, [], \"f06c\", \"M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z\"]\n};\nvar faLemon = {\n prefix: 'fas',\n iconName: 'lemon',\n icon: [512, 512, [], \"f094\", \"M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z\"]\n};\nvar faLessThan = {\n prefix: 'fas',\n iconName: 'less-than',\n icon: [384, 512, [], \"f536\", \"M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z\"]\n};\nvar faLessThanEqual = {\n prefix: 'fas',\n iconName: 'less-than-equal',\n icon: [448, 512, [], \"f537\", \"M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faLevelDownAlt = {\n prefix: 'fas',\n iconName: 'level-down-alt',\n icon: [320, 512, [], \"f3be\", \"M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z\"]\n};\nvar faLevelUpAlt = {\n prefix: 'fas',\n iconName: 'level-up-alt',\n icon: [320, 512, [], \"f3bf\", \"M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z\"]\n};\nvar faLifeRing = {\n prefix: 'fas',\n iconName: 'life-ring',\n icon: [512, 512, [], \"f1cd\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z\"]\n};\nvar faLightbulb = {\n prefix: 'fas',\n iconName: 'lightbulb',\n icon: [352, 512, [], \"f0eb\", \"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faLink = {\n prefix: 'fas',\n iconName: 'link',\n icon: [512, 512, [], \"f0c1\", \"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"]\n};\nvar faLiraSign = {\n prefix: 'fas',\n iconName: 'lira-sign',\n icon: [384, 512, [], \"f195\", \"M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z\"]\n};\nvar faList = {\n prefix: 'fas',\n iconName: 'list',\n icon: [512, 512, [], \"f03a\", \"M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faListAlt = {\n prefix: 'fas',\n iconName: 'list-alt',\n icon: [512, 512, [], \"f022\", \"M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z\"]\n};\nvar faListOl = {\n prefix: 'fas',\n iconName: 'list-ol',\n icon: [512, 512, [], \"f0cb\", \"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"]\n};\nvar faListUl = {\n prefix: 'fas',\n iconName: 'list-ul',\n icon: [512, 512, [], \"f0ca\", \"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faLocationArrow = {\n prefix: 'fas',\n iconName: 'location-arrow',\n icon: [512, 512, [], \"f124\", \"M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z\"]\n};\nvar faLock = {\n prefix: 'fas',\n iconName: 'lock',\n icon: [448, 512, [], \"f023\", \"M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z\"]\n};\nvar faLockOpen = {\n prefix: 'fas',\n iconName: 'lock-open',\n icon: [576, 512, [], \"f3c1\", \"M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z\"]\n};\nvar faLongArrowAltDown = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-down',\n icon: [256, 512, [], \"f309\", \"M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z\"]\n};\nvar faLongArrowAltLeft = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-left',\n icon: [448, 512, [], \"f30a\", \"M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z\"]\n};\nvar faLongArrowAltRight = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-right',\n icon: [448, 512, [], \"f30b\", \"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"]\n};\nvar faLongArrowAltUp = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-up',\n icon: [256, 512, [], \"f30c\", \"M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z\"]\n};\nvar faLowVision = {\n prefix: 'fas',\n iconName: 'low-vision',\n icon: [576, 512, [], \"f2a8\", \"M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z\"]\n};\nvar faLuggageCart = {\n prefix: 'fas',\n iconName: 'luggage-cart',\n icon: [640, 512, [], \"f59d\", \"M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z\"]\n};\nvar faLungs = {\n prefix: 'fas',\n iconName: 'lungs',\n icon: [640, 512, [], \"f604\", \"M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z\"]\n};\nvar faLungsVirus = {\n prefix: 'fas',\n iconName: 'lungs-virus',\n icon: [640, 512, [], \"e067\", \"M344,150.68V16A16,16,0,0,0,328,0H312a16,16,0,0,0-16,16V150.68a46.45,46.45,0,0,1,48,0ZM195.54,444.46a48.06,48.06,0,0,1,0-67.88l8.58-8.58H192a48,48,0,0,1,0-96h12.12l-8.58-8.57a48,48,0,0,1,60.46-74V161.75C256,125.38,224.62,96,186,96c-44,0-58,28.5-80.12,63.13a819.52,819.52,0,0,0-102,231A113.16,113.16,0,0,0,0,419.75C0,481,62.5,525.26,125.25,508.38l59.5-15.87a98.51,98.51,0,0,0,52.5-34.75,46.49,46.49,0,0,1-41.71-13.3Zm226.29-22.63a16,16,0,0,0,0-22.62l-8.58-8.58C393.09,370.47,407.37,336,435.88,336H448a16,16,0,0,0,0-32H435.88c-28.51,0-42.79-34.47-22.63-54.62l8.58-8.58a16,16,0,0,0-22.63-22.63l-8.57,8.58C370.47,246.91,336,232.63,336,204.12V192a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.58c20.16,20.15,5.88,54.62-22.63,54.62H192a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.58a16,16,0,1,0,22.63,22.62l8.57-8.57C269.53,393.1,304,407.38,304,435.88V448a16,16,0,0,0,32,0V435.88c0-28.5,34.47-42.78,54.63-22.62l8.57,8.57a16,16,0,0,0,22.63,0ZM288,304a16,16,0,1,1,16-16A16,16,0,0,1,288,304Zm64,64a16,16,0,1,1,16-16A16,16,0,0,1,352,368Zm284.12,22.13a819.52,819.52,0,0,0-102-231C512,124.5,498,96,454,96c-38.62,0-70,29.38-70,65.75v27.72a48,48,0,0,1,60.46,74L435.88,272H448a48,48,0,0,1,0,96H435.88l8.58,8.58a47.7,47.7,0,0,1-41.71,81.18,98.51,98.51,0,0,0,52.5,34.75l59.5,15.87C577.5,525.26,640,481,640,419.75A113.16,113.16,0,0,0,636.12,390.13Z\"]\n};\nvar faMagic = {\n prefix: 'fas',\n iconName: 'magic',\n icon: [512, 512, [], \"f0d0\", \"M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z\"]\n};\nvar faMagnet = {\n prefix: 'fas',\n iconName: 'magnet',\n icon: [512, 512, [], \"f076\", \"M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z\"]\n};\nvar faMailBulk = {\n prefix: 'fas',\n iconName: 'mail-bulk',\n icon: [576, 512, [], \"f674\", \"M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z\"]\n};\nvar faMale = {\n prefix: 'fas',\n iconName: 'male',\n icon: [192, 512, [], \"f183\", \"M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z\"]\n};\nvar faMap = {\n prefix: 'fas',\n iconName: 'map',\n icon: [576, 512, [], \"f279\", \"M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarked = {\n prefix: 'fas',\n iconName: 'map-marked',\n icon: [576, 512, [], \"f59f\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarkedAlt = {\n prefix: 'fas',\n iconName: 'map-marked-alt',\n icon: [576, 512, [], \"f5a0\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarker = {\n prefix: 'fas',\n iconName: 'map-marker',\n icon: [384, 512, [], \"f041\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z\"]\n};\nvar faMapMarkerAlt = {\n prefix: 'fas',\n iconName: 'map-marker-alt',\n icon: [384, 512, [], \"f3c5\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"]\n};\nvar faMapPin = {\n prefix: 'fas',\n iconName: 'map-pin',\n icon: [288, 512, [], \"f276\", \"M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z\"]\n};\nvar faMapSigns = {\n prefix: 'fas',\n iconName: 'map-signs',\n icon: [512, 512, [], \"f277\", \"M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z\"]\n};\nvar faMarker = {\n prefix: 'fas',\n iconName: 'marker',\n icon: [512, 512, [], \"f5a1\", \"M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z\"]\n};\nvar faMars = {\n prefix: 'fas',\n iconName: 'mars',\n icon: [384, 512, [], \"f222\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsDouble = {\n prefix: 'fas',\n iconName: 'mars-double',\n icon: [512, 512, [], \"f227\", \"M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z\"]\n};\nvar faMarsStroke = {\n prefix: 'fas',\n iconName: 'mars-stroke',\n icon: [384, 512, [], \"f229\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsStrokeH = {\n prefix: 'fas',\n iconName: 'mars-stroke-h',\n icon: [480, 512, [], \"f22b\", \"M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMarsStrokeV = {\n prefix: 'fas',\n iconName: 'mars-stroke-v',\n icon: [288, 512, [], \"f22a\", \"M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMask = {\n prefix: 'fas',\n iconName: 'mask',\n icon: [640, 512, [], \"f6fa\", \"M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z\"]\n};\nvar faMedal = {\n prefix: 'fas',\n iconName: 'medal',\n icon: [512, 512, [], \"f5a2\", \"M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z\"]\n};\nvar faMedkit = {\n prefix: 'fas',\n iconName: 'medkit',\n icon: [512, 512, [], \"f0fa\", \"M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z\"]\n};\nvar faMeh = {\n prefix: 'fas',\n iconName: 'meh',\n icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehBlank = {\n prefix: 'fas',\n iconName: 'meh-blank',\n icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehRollingEyes = {\n prefix: 'fas',\n iconName: 'meh-rolling-eyes',\n icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z\"]\n};\nvar faMemory = {\n prefix: 'fas',\n iconName: 'memory',\n icon: [640, 512, [], \"f538\", \"M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z\"]\n};\nvar faMenorah = {\n prefix: 'fas',\n iconName: 'menorah',\n icon: [640, 512, [], \"f676\", \"M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z\"]\n};\nvar faMercury = {\n prefix: 'fas',\n iconName: 'mercury',\n icon: [288, 512, [], \"f223\", \"M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faMeteor = {\n prefix: 'fas',\n iconName: 'meteor',\n icon: [512, 512, [], \"f753\", \"M511.328,20.8027c-11.60759,38.70264-34.30724,111.70173-61.30311,187.70077,6.99893,2.09372,13.4042,4,18.60653,5.59368a16.06158,16.06158,0,0,1,9.49854,22.906c-22.106,42.29635-82.69047,152.795-142.47819,214.40356-.99984,1.09373-1.99969,2.5-2.99954,3.49995A194.83046,194.83046,0,1,1,57.085,179.41009c.99985-1,2.40588-2,3.49947-3,61.59994-59.90549,171.97367-120.40473,214.37343-142.4982a16.058,16.058,0,0,1,22.90274,9.49988c1.59351,5.09368,3.49947,11.5936,5.5929,18.59351C379.34818,35.00565,452.43074,12.30281,491.12794.70921A16.18325,16.18325,0,0,1,511.328,20.8027ZM319.951,320.00207A127.98041,127.98041,0,1,0,191.97061,448.00046,127.97573,127.97573,0,0,0,319.951,320.00207Zm-127.98041-31.9996a31.9951,31.9951,0,1,1-31.9951-31.9996A31.959,31.959,0,0,1,191.97061,288.00247Zm31.9951,79.999a15.99755,15.99755,0,1,1-15.99755-15.9998A16.04975,16.04975,0,0,1,223.96571,368.00147Z\"]\n};\nvar faMicrochip = {\n prefix: 'fas',\n iconName: 'microchip',\n icon: [512, 512, [], \"f2db\", \"M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z\"]\n};\nvar faMicrophone = {\n prefix: 'fas',\n iconName: 'microphone',\n icon: [352, 512, [], \"f130\", \"M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneAlt = {\n prefix: 'fas',\n iconName: 'microphone-alt',\n icon: [352, 512, [], \"f3c9\", \"M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z\"]\n};\nvar faMicrophoneAltSlash = {\n prefix: 'fas',\n iconName: 'microphone-alt-slash',\n icon: [640, 512, [], \"f539\", \"M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneSlash = {\n prefix: 'fas',\n iconName: 'microphone-slash',\n icon: [640, 512, [], \"f131\", \"M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicroscope = {\n prefix: 'fas',\n iconName: 'microscope',\n icon: [512, 512, [], \"f610\", \"M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z\"]\n};\nvar faMinus = {\n prefix: 'fas',\n iconName: 'minus',\n icon: [448, 512, [], \"f068\", \"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faMinusCircle = {\n prefix: 'fas',\n iconName: 'minus-circle',\n icon: [512, 512, [], \"f056\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"]\n};\nvar faMinusSquare = {\n prefix: 'fas',\n iconName: 'minus-square',\n icon: [448, 512, [], \"f146\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"]\n};\nvar faMitten = {\n prefix: 'fas',\n iconName: 'mitten',\n icon: [448, 512, [], \"f7b5\", \"M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z\"]\n};\nvar faMobile = {\n prefix: 'fas',\n iconName: 'mobile',\n icon: [320, 512, [], \"f10b\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMobileAlt = {\n prefix: 'fas',\n iconName: 'mobile-alt',\n icon: [320, 512, [], \"f3cd\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faMoneyBill = {\n prefix: 'fas',\n iconName: 'money-bill',\n icon: [640, 512, [], \"f0d6\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillAlt = {\n prefix: 'fas',\n iconName: 'money-bill-alt',\n icon: [640, 512, [], \"f3d1\", \"M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillWave = {\n prefix: 'fas',\n iconName: 'money-bill-wave',\n icon: [640, 512, [], \"f53a\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z\"]\n};\nvar faMoneyBillWaveAlt = {\n prefix: 'fas',\n iconName: 'money-bill-wave-alt',\n icon: [640, 512, [], \"f53b\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z\"]\n};\nvar faMoneyCheck = {\n prefix: 'fas',\n iconName: 'money-check',\n icon: [640, 512, [], \"f53c\", \"M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMoneyCheckAlt = {\n prefix: 'fas',\n iconName: 'money-check-alt',\n icon: [640, 512, [], \"f53d\", \"M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faMonument = {\n prefix: 'fas',\n iconName: 'monument',\n icon: [384, 512, [], \"f5a6\", \"M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faMoon = {\n prefix: 'fas',\n iconName: 'moon',\n icon: [512, 512, [], \"f186\", \"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z\"]\n};\nvar faMortarPestle = {\n prefix: 'fas',\n iconName: 'mortar-pestle',\n icon: [512, 512, [], \"f5a7\", \"M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faMosque = {\n prefix: 'fas',\n iconName: 'mosque',\n icon: [640, 512, [], \"f678\", \"M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z\"]\n};\nvar faMotorcycle = {\n prefix: 'fas',\n iconName: 'motorcycle',\n icon: [640, 512, [], \"f21c\", \"M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z\"]\n};\nvar faMountain = {\n prefix: 'fas',\n iconName: 'mountain',\n icon: [640, 512, [], \"f6fc\", \"M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z\"]\n};\nvar faMouse = {\n prefix: 'fas',\n iconName: 'mouse',\n icon: [384, 512, [], \"f8cc\", \"M0 352a160 160 0 0 0 160 160h64a160 160 0 0 0 160-160V224H0zM176 0h-16A160 160 0 0 0 0 160v32h176zm48 0h-16v192h176v-32A160 160 0 0 0 224 0z\"]\n};\nvar faMousePointer = {\n prefix: 'fas',\n iconName: 'mouse-pointer',\n icon: [320, 512, [], \"f245\", \"M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z\"]\n};\nvar faMugHot = {\n prefix: 'fas',\n iconName: 'mug-hot',\n icon: [512, 512, [], \"f7b6\", \"M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faMusic = {\n prefix: 'fas',\n iconName: 'music',\n icon: [512, 512, [], \"f001\", \"M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z\"]\n};\nvar faNetworkWired = {\n prefix: 'fas',\n iconName: 'network-wired',\n icon: [640, 512, [], \"f6ff\", \"M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z\"]\n};\nvar faNeuter = {\n prefix: 'fas',\n iconName: 'neuter',\n icon: [288, 512, [], \"f22c\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faNewspaper = {\n prefix: 'fas',\n iconName: 'newspaper',\n icon: [576, 512, [], \"f1ea\", \"M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z\"]\n};\nvar faNotEqual = {\n prefix: 'fas',\n iconName: 'not-equal',\n icon: [448, 512, [], \"f53e\", \"M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z\"]\n};\nvar faNotesMedical = {\n prefix: 'fas',\n iconName: 'notes-medical',\n icon: [384, 512, [], \"f481\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faObjectGroup = {\n prefix: 'fas',\n iconName: 'object-group',\n icon: [512, 512, [], \"f247\", \"M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z\"]\n};\nvar faObjectUngroup = {\n prefix: 'fas',\n iconName: 'object-ungroup',\n icon: [576, 512, [], \"f248\", \"M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z\"]\n};\nvar faOilCan = {\n prefix: 'fas',\n iconName: 'oil-can',\n icon: [640, 512, [], \"f613\", \"M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z\"]\n};\nvar faOm = {\n prefix: 'fas',\n iconName: 'om',\n icon: [512, 512, [], \"f679\", \"M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z\"]\n};\nvar faOtter = {\n prefix: 'fas',\n iconName: 'otter',\n icon: [640, 512, [], \"f700\", \"M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z\"]\n};\nvar faOutdent = {\n prefix: 'fas',\n iconName: 'outdent',\n icon: [448, 512, [], \"f03b\", \"M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faPager = {\n prefix: 'fas',\n iconName: 'pager',\n icon: [512, 512, [], \"f815\", \"M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z\"]\n};\nvar faPaintBrush = {\n prefix: 'fas',\n iconName: 'paint-brush',\n icon: [512, 512, [], \"f1fc\", \"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z\"]\n};\nvar faPaintRoller = {\n prefix: 'fas',\n iconName: 'paint-roller',\n icon: [512, 512, [], \"f5aa\", \"M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z\"]\n};\nvar faPalette = {\n prefix: 'fas',\n iconName: 'palette',\n icon: [512, 512, [], \"f53f\", \"M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPallet = {\n prefix: 'fas',\n iconName: 'pallet',\n icon: [640, 512, [], \"f482\", \"M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z\"]\n};\nvar faPaperPlane = {\n prefix: 'fas',\n iconName: 'paper-plane',\n icon: [512, 512, [], \"f1d8\", \"M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z\"]\n};\nvar faPaperclip = {\n prefix: 'fas',\n iconName: 'paperclip',\n icon: [448, 512, [], \"f0c6\", \"M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z\"]\n};\nvar faParachuteBox = {\n prefix: 'fas',\n iconName: 'parachute-box',\n icon: [512, 512, [], \"f4cd\", \"M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z\"]\n};\nvar faParagraph = {\n prefix: 'fas',\n iconName: 'paragraph',\n icon: [448, 512, [], \"f1dd\", \"M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z\"]\n};\nvar faParking = {\n prefix: 'fas',\n iconName: 'parking',\n icon: [448, 512, [], \"f540\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z\"]\n};\nvar faPassport = {\n prefix: 'fas',\n iconName: 'passport',\n icon: [448, 512, [], \"f5ab\", \"M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z\"]\n};\nvar faPastafarianism = {\n prefix: 'fas',\n iconName: 'pastafarianism',\n icon: [640, 512, [], \"f67b\", \"M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z\"]\n};\nvar faPaste = {\n prefix: 'fas',\n iconName: 'paste',\n icon: [448, 512, [], \"f0ea\", \"M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z\"]\n};\nvar faPause = {\n prefix: 'fas',\n iconName: 'pause',\n icon: [448, 512, [], \"f04c\", \"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z\"]\n};\nvar faPauseCircle = {\n prefix: 'fas',\n iconName: 'pause-circle',\n icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faPaw = {\n prefix: 'fas',\n iconName: 'paw',\n icon: [512, 512, [], \"f1b0\", \"M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z\"]\n};\nvar faPeace = {\n prefix: 'fas',\n iconName: 'peace',\n icon: [496, 512, [], \"f67c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z\"]\n};\nvar faPen = {\n prefix: 'fas',\n iconName: 'pen',\n icon: [512, 512, [], \"f304\", \"M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z\"]\n};\nvar faPenAlt = {\n prefix: 'fas',\n iconName: 'pen-alt',\n icon: [512, 512, [], \"f305\", \"M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z\"]\n};\nvar faPenFancy = {\n prefix: 'fas',\n iconName: 'pen-fancy',\n icon: [512, 512, [], \"f5ac\", \"M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z\"]\n};\nvar faPenNib = {\n prefix: 'fas',\n iconName: 'pen-nib',\n icon: [512, 512, [], \"f5ad\", \"M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z\"]\n};\nvar faPenSquare = {\n prefix: 'fas',\n iconName: 'pen-square',\n icon: [448, 512, [], \"f14b\", \"M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z\"]\n};\nvar faPencilAlt = {\n prefix: 'fas',\n iconName: 'pencil-alt',\n icon: [512, 512, [], \"f303\", \"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"]\n};\nvar faPencilRuler = {\n prefix: 'fas',\n iconName: 'pencil-ruler',\n icon: [512, 512, [], \"f5ae\", \"M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z\"]\n};\nvar faPeopleArrows = {\n prefix: 'fas',\n iconName: 'people-arrows',\n icon: [576, 512, [], \"e068\", \"M96,128A64,64,0,1,0,32,64,64,64,0,0,0,96,128Zm0,176.08a44.11,44.11,0,0,1,13.64-32L181.77,204c1.65-1.55,3.77-2.31,5.61-3.57A63.91,63.91,0,0,0,128,160H64A64,64,0,0,0,0,224v96a32,32,0,0,0,32,32V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V383.61l-50.36-47.53A44.08,44.08,0,0,1,96,304.08ZM480,128a64,64,0,1,0-64-64A64,64,0,0,0,480,128Zm32,32H448a63.91,63.91,0,0,0-59.38,40.42c1.84,1.27,4,2,5.62,3.59l72.12,68.06a44.37,44.37,0,0,1,0,64L416,383.62V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V352a32,32,0,0,0,32-32V224A64,64,0,0,0,512,160ZM444.4,295.34l-72.12-68.06A12,12,0,0,0,352,236v36H224V236a12,12,0,0,0-20.28-8.73L131.6,295.34a12.4,12.4,0,0,0,0,17.47l72.12,68.07A12,12,0,0,0,224,372.14V336H352v36.14a12,12,0,0,0,20.28,8.74l72.12-68.07A12.4,12.4,0,0,0,444.4,295.34Z\"]\n};\nvar faPeopleCarry = {\n prefix: 'fas',\n iconName: 'people-carry',\n icon: [640, 512, [], \"f4ce\", \"M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z\"]\n};\nvar faPepperHot = {\n prefix: 'fas',\n iconName: 'pepper-hot',\n icon: [512, 512, [], \"f816\", \"M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z\"]\n};\nvar faPercent = {\n prefix: 'fas',\n iconName: 'percent',\n icon: [448, 512, [], \"f295\", \"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z\"]\n};\nvar faPercentage = {\n prefix: 'fas',\n iconName: 'percentage',\n icon: [384, 512, [], \"f541\", \"M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z\"]\n};\nvar faPersonBooth = {\n prefix: 'fas',\n iconName: 'person-booth',\n icon: [576, 512, [], \"f756\", \"M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z\"]\n};\nvar faPhone = {\n prefix: 'fas',\n iconName: 'phone',\n icon: [512, 512, [], \"f095\", \"M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z\"]\n};\nvar faPhoneAlt = {\n prefix: 'fas',\n iconName: 'phone-alt',\n icon: [512, 512, [], \"f879\", \"M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z\"]\n};\nvar faPhoneSlash = {\n prefix: 'fas',\n iconName: 'phone-slash',\n icon: [640, 512, [], \"f3dd\", \"M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faPhoneSquare = {\n prefix: 'fas',\n iconName: 'phone-square',\n icon: [448, 512, [], \"f098\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z\"]\n};\nvar faPhoneSquareAlt = {\n prefix: 'fas',\n iconName: 'phone-square-alt',\n icon: [448, 512, [], \"f87b\", \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z\"]\n};\nvar faPhoneVolume = {\n prefix: 'fas',\n iconName: 'phone-volume',\n icon: [384, 512, [], \"f2a0\", \"M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z\"]\n};\nvar faPhotoVideo = {\n prefix: 'fas',\n iconName: 'photo-video',\n icon: [640, 512, [], \"f87c\", \"M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z\"]\n};\nvar faPiggyBank = {\n prefix: 'fas',\n iconName: 'piggy-bank',\n icon: [576, 512, [], \"f4d3\", \"M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z\"]\n};\nvar faPills = {\n prefix: 'fas',\n iconName: 'pills',\n icon: [576, 512, [], \"f484\", \"M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z\"]\n};\nvar faPizzaSlice = {\n prefix: 'fas',\n iconName: 'pizza-slice',\n icon: [512, 512, [], \"f818\", \"M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faPlaceOfWorship = {\n prefix: 'fas',\n iconName: 'place-of-worship',\n icon: [640, 512, [], \"f67f\", \"M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z\"]\n};\nvar faPlane = {\n prefix: 'fas',\n iconName: 'plane',\n icon: [576, 512, [], \"f072\", \"M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z\"]\n};\nvar faPlaneArrival = {\n prefix: 'fas',\n iconName: 'plane-arrival',\n icon: [640, 512, [], \"f5af\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z\"]\n};\nvar faPlaneDeparture = {\n prefix: 'fas',\n iconName: 'plane-departure',\n icon: [640, 512, [], \"f5b0\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z\"]\n};\nvar faPlaneSlash = {\n prefix: 'fas',\n iconName: 'plane-slash',\n icon: [640, 512, [], \"e069\", \"M32.48,147.88,64,256,32.48,364.13A16,16,0,0,0,48,384H88a16,16,0,0,0,12.8-6.41L144,320H246.85l-49,171.59A16,16,0,0,0,213.2,512h65.5a16,16,0,0,0,13.89-8.06l66.6-116.54L34.35,136.34A15.47,15.47,0,0,0,32.48,147.88ZM633.82,458.09,455.14,320H512c35.34,0,96-28.66,96-64s-60.66-64-96-64H397.7L292.61,8.06C290.06,3.61,283.84,0,278.71,0H213.2a16,16,0,0,0-15.38,20.39l36.94,129.29L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09Z\"]\n};\nvar faPlay = {\n prefix: 'fas',\n iconName: 'play',\n icon: [448, 512, [], \"f04b\", \"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z\"]\n};\nvar faPlayCircle = {\n prefix: 'fas',\n iconName: 'play-circle',\n icon: [512, 512, [], \"f144\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z\"]\n};\nvar faPlug = {\n prefix: 'fas',\n iconName: 'plug',\n icon: [384, 512, [], \"f1e6\", \"M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z\"]\n};\nvar faPlus = {\n prefix: 'fas',\n iconName: 'plus',\n icon: [448, 512, [], \"f067\", \"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPlusCircle = {\n prefix: 'fas',\n iconName: 'plus-circle',\n icon: [512, 512, [], \"f055\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPlusSquare = {\n prefix: 'fas',\n iconName: 'plus-square',\n icon: [448, 512, [], \"f0fe\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPodcast = {\n prefix: 'fas',\n iconName: 'podcast',\n icon: [448, 512, [], \"f2ce\", \"M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z\"]\n};\nvar faPoll = {\n prefix: 'fas',\n iconName: 'poll',\n icon: [448, 512, [], \"f681\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z\"]\n};\nvar faPollH = {\n prefix: 'fas',\n iconName: 'poll-h',\n icon: [448, 512, [], \"f682\", \"M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z\"]\n};\nvar faPoo = {\n prefix: 'fas',\n iconName: 'poo',\n icon: [512, 512, [], \"f2fe\", \"M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPooStorm = {\n prefix: 'fas',\n iconName: 'poo-storm',\n icon: [448, 512, [], \"f75a\", \"M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z\"]\n};\nvar faPoop = {\n prefix: 'fas',\n iconName: 'poop',\n icon: [512, 512, [], \"f619\", \"M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z\"]\n};\nvar faPortrait = {\n prefix: 'fas',\n iconName: 'portrait',\n icon: [384, 512, [], \"f3e0\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faPoundSign = {\n prefix: 'fas',\n iconName: 'pound-sign',\n icon: [320, 512, [], \"f154\", \"M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z\"]\n};\nvar faPowerOff = {\n prefix: 'fas',\n iconName: 'power-off',\n icon: [512, 512, [], \"f011\", \"M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z\"]\n};\nvar faPray = {\n prefix: 'fas',\n iconName: 'pray',\n icon: [384, 512, [], \"f683\", \"M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z\"]\n};\nvar faPrayingHands = {\n prefix: 'fas',\n iconName: 'praying-hands',\n icon: [640, 512, [], \"f684\", \"M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z\"]\n};\nvar faPrescription = {\n prefix: 'fas',\n iconName: 'prescription',\n icon: [384, 512, [], \"f5b1\", \"M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z\"]\n};\nvar faPrescriptionBottle = {\n prefix: 'fas',\n iconName: 'prescription-bottle',\n icon: [384, 512, [], \"f485\", \"M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z\"]\n};\nvar faPrescriptionBottleAlt = {\n prefix: 'fas',\n iconName: 'prescription-bottle-alt',\n icon: [384, 512, [], \"f486\", \"M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z\"]\n};\nvar faPrint = {\n prefix: 'fas',\n iconName: 'print',\n icon: [512, 512, [], \"f02f\", \"M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faProcedures = {\n prefix: 'fas',\n iconName: 'procedures',\n icon: [640, 512, [], \"f487\", \"M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faProjectDiagram = {\n prefix: 'fas',\n iconName: 'project-diagram',\n icon: [640, 512, [], \"f542\", \"M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPumpMedical = {\n prefix: 'fas',\n iconName: 'pump-medical',\n icon: [384, 512, [], \"e06a\", \"M235.51,159.82H84.24A64,64,0,0,0,20.51,218L.14,442a64,64,0,0,0,63.74,69.8h192A64,64,0,0,0,319.61,442L299.24,218A64,64,0,0,0,235.51,159.82Zm4.37,173.33a13.35,13.35,0,0,1-13.34,13.34h-40v40a13.33,13.33,0,0,1-13.33,13.33H146.54a13.33,13.33,0,0,1-13.33-13.33v-40h-40a13.34,13.34,0,0,1-13.33-13.34V306.49a13.33,13.33,0,0,1,13.33-13.34h40v-40a13.33,13.33,0,0,1,13.33-13.33h26.67a13.33,13.33,0,0,1,13.33,13.33v40h40a13.34,13.34,0,0,1,13.34,13.34ZM379.19,93.88,335.87,50.56a64,64,0,0,0-45.24-18.74H223.88a32,32,0,0,0-32-32h-64a32,32,0,0,0-32,32v96h128v-32h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.19,93.88Z\"]\n};\nvar faPumpSoap = {\n prefix: 'fas',\n iconName: 'pump-soap',\n icon: [384, 512, [], \"e06b\", \"M235.63,160H84.37a64,64,0,0,0-63.74,58.21L.27,442.21A64,64,0,0,0,64,512H256a64,64,0,0,0,63.74-69.79l-20.36-224A64,64,0,0,0,235.63,160ZM160,416c-33.12,0-60-26.33-60-58.75,0-25,35.7-75.47,52-97.27A10,10,0,0,1,168,260c16.33,21.8,52,72.27,52,97.27C220,389.67,193.12,416,160,416ZM379.31,94.06,336,50.74A64,64,0,0,0,290.75,32H224A32,32,0,0,0,192,0H128A32,32,0,0,0,96,32v96H224V96h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.31,94.06Z\"]\n};\nvar faPuzzlePiece = {\n prefix: 'fas',\n iconName: 'puzzle-piece',\n icon: [576, 512, [], \"f12e\", \"M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z\"]\n};\nvar faQrcode = {\n prefix: 'fas',\n iconName: 'qrcode',\n icon: [448, 512, [], \"f029\", \"M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z\"]\n};\nvar faQuestion = {\n prefix: 'fas',\n iconName: 'question',\n icon: [384, 512, [], \"f128\", \"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"]\n};\nvar faQuestionCircle = {\n prefix: 'fas',\n iconName: 'question-circle',\n icon: [512, 512, [], \"f059\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\"]\n};\nvar faQuidditch = {\n prefix: 'fas',\n iconName: 'quidditch',\n icon: [640, 512, [], \"f458\", \"M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z\"]\n};\nvar faQuoteLeft = {\n prefix: 'fas',\n iconName: 'quote-left',\n icon: [512, 512, [], \"f10d\", \"M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuoteRight = {\n prefix: 'fas',\n iconName: 'quote-right',\n icon: [512, 512, [], \"f10e\", \"M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuran = {\n prefix: 'fas',\n iconName: 'quran',\n icon: [448, 512, [], \"f687\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faRadiation = {\n prefix: 'fas',\n iconName: 'radiation',\n icon: [496, 512, [], \"f7b9\", \"M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z\"]\n};\nvar faRadiationAlt = {\n prefix: 'fas',\n iconName: 'radiation-alt',\n icon: [496, 512, [], \"f7ba\", \"M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faRainbow = {\n prefix: 'fas',\n iconName: 'rainbow',\n icon: [576, 512, [], \"f75b\", \"M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z\"]\n};\nvar faRandom = {\n prefix: 'fas',\n iconName: 'random',\n icon: [512, 512, [], \"f074\", \"M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z\"]\n};\nvar faReceipt = {\n prefix: 'fas',\n iconName: 'receipt',\n icon: [384, 512, [], \"f543\", \"M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faRecordVinyl = {\n prefix: 'fas',\n iconName: 'record-vinyl',\n icon: [512, 512, [], \"f8d9\", \"M256 152a104 104 0 1 0 104 104 104 104 0 0 0-104-104zm0 128a24 24 0 1 1 24-24 24 24 0 0 1-24 24zm0-272C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a128 128 0 1 1 128-128 128 128 0 0 1-128 128z\"]\n};\nvar faRecycle = {\n prefix: 'fas',\n iconName: 'recycle',\n icon: [512, 512, [], \"f1b8\", \"M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z\"]\n};\nvar faRedo = {\n prefix: 'fas',\n iconName: 'redo',\n icon: [512, 512, [], \"f01e\", \"M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z\"]\n};\nvar faRedoAlt = {\n prefix: 'fas',\n iconName: 'redo-alt',\n icon: [512, 512, [], \"f2f9\", \"M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z\"]\n};\nvar faRegistered = {\n prefix: 'fas',\n iconName: 'registered',\n icon: [512, 512, [], \"f25d\", \"M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z\"]\n};\nvar faRemoveFormat = {\n prefix: 'fas',\n iconName: 'remove-format',\n icon: [640, 512, [], \"f87d\", \"M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z\"]\n};\nvar faReply = {\n prefix: 'fas',\n iconName: 'reply',\n icon: [512, 512, [], \"f3e5\", \"M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z\"]\n};\nvar faReplyAll = {\n prefix: 'fas',\n iconName: 'reply-all',\n icon: [576, 512, [], \"f122\", \"M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z\"]\n};\nvar faRepublican = {\n prefix: 'fas',\n iconName: 'republican',\n icon: [640, 512, [], \"f75e\", \"M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z\"]\n};\nvar faRestroom = {\n prefix: 'fas',\n iconName: 'restroom',\n icon: [640, 512, [], \"f7bd\", \"M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z\"]\n};\nvar faRetweet = {\n prefix: 'fas',\n iconName: 'retweet',\n icon: [640, 512, [], \"f079\", \"M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z\"]\n};\nvar faRibbon = {\n prefix: 'fas',\n iconName: 'ribbon',\n icon: [448, 512, [], \"f4d6\", \"M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z\"]\n};\nvar faRing = {\n prefix: 'fas',\n iconName: 'ring',\n icon: [512, 512, [], \"f70b\", \"M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z\"]\n};\nvar faRoad = {\n prefix: 'fas',\n iconName: 'road',\n icon: [576, 512, [], \"f018\", \"M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z\"]\n};\nvar faRobot = {\n prefix: 'fas',\n iconName: 'robot',\n icon: [640, 512, [], \"f544\", \"M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z\"]\n};\nvar faRocket = {\n prefix: 'fas',\n iconName: 'rocket',\n icon: [512, 512, [], \"f135\", \"M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z\"]\n};\nvar faRoute = {\n prefix: 'fas',\n iconName: 'route',\n icon: [512, 512, [], \"f4d7\", \"M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faRss = {\n prefix: 'fas',\n iconName: 'rss',\n icon: [448, 512, [], \"f09e\", \"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z\"]\n};\nvar faRssSquare = {\n prefix: 'fas',\n iconName: 'rss-square',\n icon: [448, 512, [], \"f143\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z\"]\n};\nvar faRubleSign = {\n prefix: 'fas',\n iconName: 'ruble-sign',\n icon: [384, 512, [], \"f158\", \"M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z\"]\n};\nvar faRuler = {\n prefix: 'fas',\n iconName: 'ruler',\n icon: [640, 512, [], \"f545\", \"M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z\"]\n};\nvar faRulerCombined = {\n prefix: 'fas',\n iconName: 'ruler-combined',\n icon: [512, 512, [], \"f546\", \"M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerHorizontal = {\n prefix: 'fas',\n iconName: 'ruler-horizontal',\n icon: [576, 512, [], \"f547\", \"M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerVertical = {\n prefix: 'fas',\n iconName: 'ruler-vertical',\n icon: [256, 512, [], \"f548\", \"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z\"]\n};\nvar faRunning = {\n prefix: 'fas',\n iconName: 'running',\n icon: [416, 512, [], \"f70c\", \"M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z\"]\n};\nvar faRupeeSign = {\n prefix: 'fas',\n iconName: 'rupee-sign',\n icon: [320, 512, [], \"f156\", \"M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z\"]\n};\nvar faSadCry = {\n prefix: 'fas',\n iconName: 'sad-cry',\n icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z\"]\n};\nvar faSadTear = {\n prefix: 'fas',\n iconName: 'sad-tear',\n icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z\"]\n};\nvar faSatellite = {\n prefix: 'fas',\n iconName: 'satellite',\n icon: [512, 512, [], \"f7bf\", \"M502.60969,310.04206l-96.70393,96.71625a31.88151,31.88151,0,0,1-45.00765,0L280.572,326.34115l-9.89231,9.90759a190.56343,190.56343,0,0,1-5.40716,168.52287c-4.50077,8.50115-16.39342,9.59505-23.20707,2.79725L134.54715,400.05428l-17.7999,17.79929c.70324,2.60972,1.60965,5.00067,1.60965,7.79793a32.00544,32.00544,0,1,1-32.00544-32.00434c2.79735,0,5.18838.90637,7.7982,1.60959l17.7999-17.79929L4.43129,269.94287c-6.798-6.81342-5.70409-18.6119,2.79735-23.20627a190.58161,190.58161,0,0,1,168.52864-5.407l9.79854-9.79821-80.31053-80.41716a32.002,32.002,0,0,1,0-45.09987L201.96474,9.29814A31.62639,31.62639,0,0,1,224.46868,0a31.99951,31.99951,0,0,1,22.59759,9.29814l80.32615,80.30777,47.805-47.89713a33.6075,33.6075,0,0,1,47.50808,0l47.50807,47.50645a33.63308,33.63308,0,0,1,0,47.50644l-47.805,47.89713L502.71908,265.036A31.78938,31.78938,0,0,1,502.60969,310.04206ZM219.56159,197.433l73.82505-73.82252-68.918-68.9-73.80942,73.80689Zm237.74352,90.106-68.90233-68.9156-73.825,73.82252,68.918,68.9Z\"]\n};\nvar faSatelliteDish = {\n prefix: 'fas',\n iconName: 'satellite-dish',\n icon: [512, 512, [], \"f7c0\", \"M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z\"]\n};\nvar faSave = {\n prefix: 'fas',\n iconName: 'save',\n icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"]\n};\nvar faSchool = {\n prefix: 'fas',\n iconName: 'school',\n icon: [640, 512, [], \"f549\", \"M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z\"]\n};\nvar faScrewdriver = {\n prefix: 'fas',\n iconName: 'screwdriver',\n icon: [512, 512, [], \"f54a\", \"M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z\"]\n};\nvar faScroll = {\n prefix: 'fas',\n iconName: 'scroll',\n icon: [640, 512, [], \"f70e\", \"M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z\"]\n};\nvar faSdCard = {\n prefix: 'fas',\n iconName: 'sd-card',\n icon: [384, 512, [], \"f7c2\", \"M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z\"]\n};\nvar faSearch = {\n prefix: 'fas',\n iconName: 'search',\n icon: [512, 512, [], \"f002\", \"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"]\n};\nvar faSearchDollar = {\n prefix: 'fas',\n iconName: 'search-dollar',\n icon: [512, 512, [], \"f688\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z\"]\n};\nvar faSearchLocation = {\n prefix: 'fas',\n iconName: 'search-location',\n icon: [512, 512, [], \"f689\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faSearchMinus = {\n prefix: 'fas',\n iconName: 'search-minus',\n icon: [512, 512, [], \"f010\", \"M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSearchPlus = {\n prefix: 'fas',\n iconName: 'search-plus',\n icon: [512, 512, [], \"f00e\", \"M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSeedling = {\n prefix: 'fas',\n iconName: 'seedling',\n icon: [512, 512, [], \"f4d8\", \"M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z\"]\n};\nvar faServer = {\n prefix: 'fas',\n iconName: 'server',\n icon: [512, 512, [], \"f233\", \"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"]\n};\nvar faShapes = {\n prefix: 'fas',\n iconName: 'shapes',\n icon: [512, 512, [], \"f61f\", \"M128,256A128,128,0,1,0,256,384,128,128,0,0,0,128,256Zm379-54.86L400.07,18.29a37.26,37.26,0,0,0-64.14,0L229,201.14C214.76,225.52,232.58,256,261.09,256H474.91C503.42,256,521.24,225.52,507,201.14ZM480,288H320a32,32,0,0,0-32,32V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V320A32,32,0,0,0,480,288Z\"]\n};\nvar faShare = {\n prefix: 'fas',\n iconName: 'share',\n icon: [512, 512, [], \"f064\", \"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"]\n};\nvar faShareAlt = {\n prefix: 'fas',\n iconName: 'share-alt',\n icon: [448, 512, [], \"f1e0\", \"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z\"]\n};\nvar faShareAltSquare = {\n prefix: 'fas',\n iconName: 'share-alt-square',\n icon: [448, 512, [], \"f1e1\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z\"]\n};\nvar faShareSquare = {\n prefix: 'fas',\n iconName: 'share-square',\n icon: [576, 512, [], \"f14d\", \"M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z\"]\n};\nvar faShekelSign = {\n prefix: 'fas',\n iconName: 'shekel-sign',\n icon: [448, 512, [], \"f20b\", \"M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faShieldAlt = {\n prefix: 'fas',\n iconName: 'shield-alt',\n icon: [512, 512, [], \"f3ed\", \"M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z\"]\n};\nvar faShieldVirus = {\n prefix: 'fas',\n iconName: 'shield-virus',\n icon: [512, 512, [], \"e06c\", \"M224,192a16,16,0,1,0,16,16A16,16,0,0,0,224,192ZM466.5,83.68l-192-80A57.4,57.4,0,0,0,256.05,0a57.4,57.4,0,0,0-18.46,3.67l-192,80A47.93,47.93,0,0,0,16,128C16,326.5,130.5,463.72,237.5,508.32a48.09,48.09,0,0,0,36.91,0C360.09,472.61,496,349.3,496,128A48,48,0,0,0,466.5,83.68ZM384,256H371.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C306.47,313.09,272,327.37,272,355.88V368a16,16,0,0,1-32,0V355.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H128a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V112a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C329.09,189.53,343.37,224,371.88,224H384a16,16,0,0,1,0,32Zm-96,0a16,16,0,1,0,16,16A16,16,0,0,0,288,256Z\"]\n};\nvar faShip = {\n prefix: 'fas',\n iconName: 'ship',\n icon: [640, 512, [], \"f21a\", \"M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z\"]\n};\nvar faShippingFast = {\n prefix: 'fas',\n iconName: 'shipping-fast',\n icon: [640, 512, [], \"f48b\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faShoePrints = {\n prefix: 'fas',\n iconName: 'shoe-prints',\n icon: [640, 512, [], \"f54b\", \"M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z\"]\n};\nvar faShoppingBag = {\n prefix: 'fas',\n iconName: 'shopping-bag',\n icon: [448, 512, [], \"f290\", \"M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z\"]\n};\nvar faShoppingBasket = {\n prefix: 'fas',\n iconName: 'shopping-basket',\n icon: [576, 512, [], \"f291\", \"M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z\"]\n};\nvar faShoppingCart = {\n prefix: 'fas',\n iconName: 'shopping-cart',\n icon: [576, 512, [], \"f07a\", \"M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z\"]\n};\nvar faShower = {\n prefix: 'fas',\n iconName: 'shower',\n icon: [512, 512, [], \"f2cc\", \"M304,320a16,16,0,1,0,16,16A16,16,0,0,0,304,320Zm32-96a16,16,0,1,0,16,16A16,16,0,0,0,336,224Zm32,64a16,16,0,1,0-16-16A16,16,0,0,0,368,288Zm-32,32a16,16,0,1,0-16-16A16,16,0,0,0,336,320Zm-32-64a16,16,0,1,0,16,16A16,16,0,0,0,304,256Zm128-32a16,16,0,1,0-16-16A16,16,0,0,0,432,224Zm-48,16a16,16,0,1,0,16-16A16,16,0,0,0,384,240Zm-16-48a16,16,0,1,0,16,16A16,16,0,0,0,368,192Zm96,32a16,16,0,1,0,16,16A16,16,0,0,0,464,224Zm32-32a16,16,0,1,0,16,16A16,16,0,0,0,496,192Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,432,256Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,400,288Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,336,352Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,304,384Zm64-64a16,16,0,1,0,16,16A16,16,0,0,0,368,320Zm21.65-218.35-11.3-11.31a16,16,0,0,0-22.63,0L350.05,96A111.19,111.19,0,0,0,272,64c-19.24,0-37.08,5.3-52.9,13.85l-10-10A121.72,121.72,0,0,0,123.44,32C55.49,31.5,0,92.91,0,160.85V464a16,16,0,0,0,16,16H48a16,16,0,0,0,16-16V158.4c0-30.15,21-58.2,51-61.93a58.38,58.38,0,0,1,48.93,16.67l10,10C165.3,138.92,160,156.76,160,176a111.23,111.23,0,0,0,32,78.05l-5.66,5.67a16,16,0,0,0,0,22.62l11.3,11.31a16,16,0,0,0,22.63,0L389.65,124.28A16,16,0,0,0,389.65,101.65Z\"]\n};\nvar faShuttleVan = {\n prefix: 'fas',\n iconName: 'shuttle-van',\n icon: [640, 512, [], \"f5b6\", \"M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z\"]\n};\nvar faSign = {\n prefix: 'fas',\n iconName: 'sign',\n icon: [512, 512, [], \"f4d9\", \"M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z\"]\n};\nvar faSignInAlt = {\n prefix: 'fas',\n iconName: 'sign-in-alt',\n icon: [512, 512, [], \"f2f6\", \"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"]\n};\nvar faSignLanguage = {\n prefix: 'fas',\n iconName: 'sign-language',\n icon: [448, 512, [], \"f2a7\", \"M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z\"]\n};\nvar faSignOutAlt = {\n prefix: 'fas',\n iconName: 'sign-out-alt',\n icon: [512, 512, [], \"f2f5\", \"M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z\"]\n};\nvar faSignal = {\n prefix: 'fas',\n iconName: 'signal',\n icon: [640, 512, [], \"f012\", \"M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faSignature = {\n prefix: 'fas',\n iconName: 'signature',\n icon: [640, 512, [], \"f5b7\", \"M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z\"]\n};\nvar faSimCard = {\n prefix: 'fas',\n iconName: 'sim-card',\n icon: [384, 512, [], \"f7c4\", \"M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z\"]\n};\nvar faSink = {\n prefix: 'fas',\n iconName: 'sink',\n icon: [512, 512, [], \"e06d\", \"M32,416a96,96,0,0,0,96,96H384a96,96,0,0,0,96-96V384H32ZM496,288H400V256h64a16,16,0,0,0,16-16V224a16,16,0,0,0-16-16H384a32,32,0,0,0-32,32v48H288V96a32,32,0,0,1,64,0v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V96A96.16,96.16,0,0,0,300.87,1.86C255.29,10.71,224,53.36,224,99.79V288H160V240a32,32,0,0,0-32-32H48a16,16,0,0,0-16,16v16a16,16,0,0,0,16,16h64v32H16A16,16,0,0,0,0,304v32a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V304A16,16,0,0,0,496,288Z\"]\n};\nvar faSitemap = {\n prefix: 'fas',\n iconName: 'sitemap',\n icon: [640, 512, [], \"f0e8\", \"M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faSkating = {\n prefix: 'fas',\n iconName: 'skating',\n icon: [448, 512, [], \"f7c5\", \"M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nvar faSkiing = {\n prefix: 'fas',\n iconName: 'skiing',\n icon: [512, 512, [], \"f7c9\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z\"]\n};\nvar faSkiingNordic = {\n prefix: 'fas',\n iconName: 'skiing-nordic',\n icon: [576, 512, [], \"f7ca\", \"M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z\"]\n};\nvar faSkull = {\n prefix: 'fas',\n iconName: 'skull',\n icon: [512, 512, [], \"f54c\", \"M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z\"]\n};\nvar faSkullCrossbones = {\n prefix: 'fas',\n iconName: 'skull-crossbones',\n icon: [448, 512, [], \"f714\", \"M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z\"]\n};\nvar faSlash = {\n prefix: 'fas',\n iconName: 'slash',\n icon: [640, 512, [], \"f715\", \"M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z\"]\n};\nvar faSleigh = {\n prefix: 'fas',\n iconName: 'sleigh',\n icon: [640, 512, [], \"f7cc\", \"M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z\"]\n};\nvar faSlidersH = {\n prefix: 'fas',\n iconName: 'sliders-h',\n icon: [512, 512, [], \"f1de\", \"M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z\"]\n};\nvar faSmile = {\n prefix: 'fas',\n iconName: 'smile',\n icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z\"]\n};\nvar faSmileBeam = {\n prefix: 'fas',\n iconName: 'smile-beam',\n icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z\"]\n};\nvar faSmileWink = {\n prefix: 'fas',\n iconName: 'smile-wink',\n icon: [496, 512, [], \"f4da\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z\"]\n};\nvar faSmog = {\n prefix: 'fas',\n iconName: 'smog',\n icon: [640, 512, [], \"f75f\", \"M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z\"]\n};\nvar faSmoking = {\n prefix: 'fas',\n iconName: 'smoking',\n icon: [640, 512, [], \"f48d\", \"M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z\"]\n};\nvar faSmokingBan = {\n prefix: 'fas',\n iconName: 'smoking-ban',\n icon: [512, 512, [], \"f54d\", \"M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z\"]\n};\nvar faSms = {\n prefix: 'fas',\n iconName: 'sms',\n icon: [512, 512, [], \"f7cd\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z\"]\n};\nvar faSnowboarding = {\n prefix: 'fas',\n iconName: 'snowboarding',\n icon: [512, 512, [], \"f7ce\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z\"]\n};\nvar faSnowflake = {\n prefix: 'fas',\n iconName: 'snowflake',\n icon: [448, 512, [], \"f2dc\", \"M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z\"]\n};\nvar faSnowman = {\n prefix: 'fas',\n iconName: 'snowman',\n icon: [512, 512, [], \"f7d0\", \"M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faSnowplow = {\n prefix: 'fas',\n iconName: 'snowplow',\n icon: [640, 512, [], \"f7d2\", \"M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faSoap = {\n prefix: 'fas',\n iconName: 'soap',\n icon: [512, 512, [], \"e06e\", \"M416,192a95.42,95.42,0,0,1-30.94,70.21A95.8,95.8,0,0,1,352,448H160a96,96,0,0,1,0-192h88.91A95.3,95.3,0,0,1,224,192H96A96,96,0,0,0,0,288V416a96,96,0,0,0,96,96H416a96,96,0,0,0,96-96V288A96,96,0,0,0,416,192Zm-96,64a64,64,0,1,0-64-64A64,64,0,0,0,320,256ZM208,96a48,48,0,1,0-48-48A48,48,0,0,0,208,96ZM384,64a32,32,0,1,0-32-32A32,32,0,0,0,384,64ZM160,288a64,64,0,0,0,0,128H352a64,64,0,0,0,0-128Z\"]\n};\nvar faSocks = {\n prefix: 'fas',\n iconName: 'socks',\n icon: [512, 512, [], \"f696\", \"M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z\"]\n};\nvar faSolarPanel = {\n prefix: 'fas',\n iconName: 'solar-panel',\n icon: [640, 512, [], \"f5ba\", \"M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z\"]\n};\nvar faSort = {\n prefix: 'fas',\n iconName: 'sort',\n icon: [320, 512, [], \"f0dc\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z\"]\n};\nvar faSortAlphaDown = {\n prefix: 'fas',\n iconName: 'sort-alpha-down',\n icon: [448, 512, [], \"f15d\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z\"]\n};\nvar faSortAlphaDownAlt = {\n prefix: 'fas',\n iconName: 'sort-alpha-down-alt',\n icon: [448, 512, [], \"f881\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z\"]\n};\nvar faSortAlphaUp = {\n prefix: 'fas',\n iconName: 'sort-alpha-up',\n icon: [448, 512, [], \"f15e\", \"M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z\"]\n};\nvar faSortAlphaUpAlt = {\n prefix: 'fas',\n iconName: 'sort-alpha-up-alt',\n icon: [448, 512, [], \"f882\", \"M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z\"]\n};\nvar faSortAmountDown = {\n prefix: 'fas',\n iconName: 'sort-amount-down',\n icon: [512, 512, [], \"f160\", \"M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faSortAmountDownAlt = {\n prefix: 'fas',\n iconName: 'sort-amount-down-alt',\n icon: [512, 512, [], \"f884\", \"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z\"]\n};\nvar faSortAmountUp = {\n prefix: 'fas',\n iconName: 'sort-amount-up',\n icon: [512, 512, [], \"f161\", \"M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faSortAmountUpAlt = {\n prefix: 'fas',\n iconName: 'sort-amount-up-alt',\n icon: [512, 512, [], \"f885\", \"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z\"]\n};\nvar faSortDown = {\n prefix: 'fas',\n iconName: 'sort-down',\n icon: [320, 512, [], \"f0dd\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z\"]\n};\nvar faSortNumericDown = {\n prefix: 'fas',\n iconName: 'sort-numeric-down',\n icon: [448, 512, [], \"f162\", \"M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z\"]\n};\nvar faSortNumericDownAlt = {\n prefix: 'fas',\n iconName: 'sort-numeric-down-alt',\n icon: [448, 512, [], \"f886\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z\"]\n};\nvar faSortNumericUp = {\n prefix: 'fas',\n iconName: 'sort-numeric-up',\n icon: [448, 512, [], \"f163\", \"M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z\"]\n};\nvar faSortNumericUpAlt = {\n prefix: 'fas',\n iconName: 'sort-numeric-up-alt',\n icon: [448, 512, [], \"f887\", \"M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z\"]\n};\nvar faSortUp = {\n prefix: 'fas',\n iconName: 'sort-up',\n icon: [320, 512, [], \"f0de\", \"M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z\"]\n};\nvar faSpa = {\n prefix: 'fas',\n iconName: 'spa',\n icon: [576, 512, [], \"f5bb\", \"M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z\"]\n};\nvar faSpaceShuttle = {\n prefix: 'fas',\n iconName: 'space-shuttle',\n icon: [640, 512, [], \"f197\", \"M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z\"]\n};\nvar faSpellCheck = {\n prefix: 'fas',\n iconName: 'spell-check',\n icon: [576, 512, [], \"f891\", \"M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z\"]\n};\nvar faSpider = {\n prefix: 'fas',\n iconName: 'spider',\n icon: [576, 512, [], \"f717\", \"M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z\"]\n};\nvar faSpinner = {\n prefix: 'fas',\n iconName: 'spinner',\n icon: [512, 512, [], \"f110\", \"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"]\n};\nvar faSplotch = {\n prefix: 'fas',\n iconName: 'splotch',\n icon: [512, 512, [], \"f5bc\", \"M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z\"]\n};\nvar faSprayCan = {\n prefix: 'fas',\n iconName: 'spray-can',\n icon: [512, 512, [], \"f5bd\", \"M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faSquare = {\n prefix: 'fas',\n iconName: 'square',\n icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faSquareFull = {\n prefix: 'fas',\n iconName: 'square-full',\n icon: [512, 512, [], \"f45c\", \"M512 512H0V0h512v512z\"]\n};\nvar faSquareRootAlt = {\n prefix: 'fas',\n iconName: 'square-root-alt',\n icon: [576, 512, [], \"f698\", \"M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z\"]\n};\nvar faStamp = {\n prefix: 'fas',\n iconName: 'stamp',\n icon: [512, 512, [], \"f5bf\", \"M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z\"]\n};\nvar faStar = {\n prefix: 'fas',\n iconName: 'star',\n icon: [576, 512, [], \"f005\", \"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z\"]\n};\nvar faStarAndCrescent = {\n prefix: 'fas',\n iconName: 'star-and-crescent',\n icon: [512, 512, [], \"f699\", \"M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z\"]\n};\nvar faStarHalf = {\n prefix: 'fas',\n iconName: 'star-half',\n icon: [576, 512, [], \"f089\", \"M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z\"]\n};\nvar faStarHalfAlt = {\n prefix: 'fas',\n iconName: 'star-half-alt',\n icon: [536, 512, [], \"f5c0\", \"M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z\"]\n};\nvar faStarOfDavid = {\n prefix: 'fas',\n iconName: 'star-of-david',\n icon: [464, 512, [], \"f69a\", \"M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z\"]\n};\nvar faStarOfLife = {\n prefix: 'fas',\n iconName: 'star-of-life',\n icon: [480, 512, [], \"f621\", \"M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z\"]\n};\nvar faStepBackward = {\n prefix: 'fas',\n iconName: 'step-backward',\n icon: [448, 512, [], \"f048\", \"M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z\"]\n};\nvar faStepForward = {\n prefix: 'fas',\n iconName: 'step-forward',\n icon: [448, 512, [], \"f051\", \"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"]\n};\nvar faStethoscope = {\n prefix: 'fas',\n iconName: 'stethoscope',\n icon: [512, 512, [], \"f0f1\", \"M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faStickyNote = {\n prefix: 'fas',\n iconName: 'sticky-note',\n icon: [448, 512, [], \"f249\", \"M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z\"]\n};\nvar faStop = {\n prefix: 'fas',\n iconName: 'stop',\n icon: [448, 512, [], \"f04d\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faStopCircle = {\n prefix: 'fas',\n iconName: 'stop-circle',\n icon: [512, 512, [], \"f28d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faStopwatch = {\n prefix: 'fas',\n iconName: 'stopwatch',\n icon: [448, 512, [], \"f2f2\", \"M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faStopwatch20 = {\n prefix: 'fas',\n iconName: 'stopwatch-20',\n icon: [448, 512, [], \"e06f\", \"M398.5,190.91l.59-.61,26.59-26.58a16,16,0,0,0,0-22.63L403,118.41a16,16,0,0,0-22.63,0l-24.68,24.68A206.68,206.68,0,0,0,256,98.5V64h32a16,16,0,0,0,16-16V16A16,16,0,0,0,288,0H160a16.05,16.05,0,0,0-16,16V48a16.05,16.05,0,0,0,16,16h32V98.5A207.92,207.92,0,0,0,16.09,297.57C12.64,411.5,106.76,510.22,220.72,512,337.13,513.77,432,420,432,304A206,206,0,0,0,398.5,190.91ZM204.37,377.55a8.2,8.2,0,0,1,8.32,8.07v22.31a8.2,8.2,0,0,1-8.32,8.07H121.52a16.46,16.46,0,0,1-16.61-17.62c2.78-35.22,14.67-57.41,38.45-91.37,20.42-29.19,27.1-37.32,27.1-62.34,0-16.92-1.79-24.27-12.21-24.27-9.39,0-12.69,7.4-12.69,22.68v5.23a8.2,8.2,0,0,1-8.33,8.07h-24.9a8.2,8.2,0,0,1-8.33-8.07v-4.07c0-27.3,8.48-60.24,56.43-60.24,43,0,55.57,25.85,55.57,61,0,35.58-12.44,51.21-34.35,81.31-11.56,15-24.61,35.57-26.41,51.2ZM344,352.32c0,35.16-12.3,63.68-57.23,63.68C243.19,416,232,386.48,232,352.55V247.22c0-40.73,19.58-63.22,56.2-63.22C325,184,344,206.64,344,245.3ZM287.87,221.73c-9.41,0-13.23,7.5-13.23,20V357.68c0,13.11,3.59,20.59,13.23,20.59s13-8,13-21.27V241.06C300.89,229.79,297.88,221.73,287.87,221.73Z\"]\n};\nvar faStore = {\n prefix: 'fas',\n iconName: 'store',\n icon: [616, 512, [], \"f54e\", \"M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z\"]\n};\nvar faStoreAlt = {\n prefix: 'fas',\n iconName: 'store-alt',\n icon: [640, 512, [], \"f54f\", \"M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z\"]\n};\nvar faStoreAltSlash = {\n prefix: 'fas',\n iconName: 'store-alt-slash',\n icon: [640, 512, [], \"e070\", \"M17.89,123.62,5.51,142.2c-14.2,21.3,1,49.8,26.59,49.8h74.26ZM576,413.42V224H512V364L384,265V224H330.92l-41.4-32H608c25.5,0,40.7-28.5,26.59-49.8l-85.29-128A32.18,32.18,0,0,0,522.6,0H117.42A31.87,31.87,0,0,0,90.81,14.2l-10.66,16L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.81l19.64-25.26a16,16,0,0,0-2.81-22.45ZM320,384H128V224H64V480a32,32,0,0,0,32,32H352a32,32,0,0,0,32-32V406.59l-64-49.47Z\"]\n};\nvar faStoreSlash = {\n prefix: 'fas',\n iconName: 'store-slash',\n icon: [640, 512, [], \"e071\", \"M121.51,384V284.2a119.43,119.43,0,0,1-28,3.8,123.46,123.46,0,0,1-17.1-1.2,114.88,114.88,0,0,1-15.58-3.6V480c0,17.7,13.59,32,30.4,32H505.75L348.42,384Zm-28-128.09c25.1,0,47.29-10.72,64-27.24L24,120.05c-30.52,53.39-2.45,126.53,56.49,135A95.68,95.68,0,0,0,93.48,255.91ZM602.13,458.09,547.2,413.41V283.2a93.5,93.5,0,0,1-15.57,3.6,127.31,127.31,0,0,1-17.29,1.2,114.89,114.89,0,0,1-28-3.8v79.68L348.52,251.77a88.06,88.06,0,0,0,25.41,4.14c28.11,0,53-13,70.11-33.11,17.19,20.11,42.08,33.11,70.11,33.11a94.31,94.31,0,0,0,13-.91c59.66-8.41,88-82.8,56.06-136.4L521.55,15A30.1,30.1,0,0,0,495.81,0H112A30.11,30.11,0,0,0,86.27,15L76.88,30.78,43.19,3.38A14.68,14.68,0,0,0,21.86,6.19L3.2,31.45A16.58,16.58,0,0,0,5.87,53.91L564.81,508.63a14.69,14.69,0,0,0,21.33-2.82l18.66-25.26A16.58,16.58,0,0,0,602.13,458.09Z\"]\n};\nvar faStream = {\n prefix: 'fas',\n iconName: 'stream',\n icon: [512, 512, [], \"f550\", \"M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z\"]\n};\nvar faStreetView = {\n prefix: 'fas',\n iconName: 'street-view',\n icon: [512, 512, [], \"f21d\", \"M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z\"]\n};\nvar faStrikethrough = {\n prefix: 'fas',\n iconName: 'strikethrough',\n icon: [512, 512, [], \"f0cc\", \"M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z\"]\n};\nvar faStroopwafel = {\n prefix: 'fas',\n iconName: 'stroopwafel',\n icon: [512, 512, [], \"f551\", \"M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z\"]\n};\nvar faSubscript = {\n prefix: 'fas',\n iconName: 'subscript',\n icon: [512, 512, [], \"f12c\", \"M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z\"]\n};\nvar faSubway = {\n prefix: 'fas',\n iconName: 'subway',\n icon: [448, 512, [], \"f239\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faSuitcase = {\n prefix: 'fas',\n iconName: 'suitcase',\n icon: [512, 512, [], \"f0f2\", \"M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z\"]\n};\nvar faSuitcaseRolling = {\n prefix: 'fas',\n iconName: 'suitcase-rolling',\n icon: [384, 512, [], \"f5c1\", \"M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z\"]\n};\nvar faSun = {\n prefix: 'fas',\n iconName: 'sun',\n icon: [512, 512, [], \"f185\", \"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z\"]\n};\nvar faSuperscript = {\n prefix: 'fas',\n iconName: 'superscript',\n icon: [512, 512, [], \"f12b\", \"M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z\"]\n};\nvar faSurprise = {\n prefix: 'fas',\n iconName: 'surprise',\n icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faSwatchbook = {\n prefix: 'fas',\n iconName: 'swatchbook',\n icon: [512, 512, [], \"f5c3\", \"M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z\"]\n};\nvar faSwimmer = {\n prefix: 'fas',\n iconName: 'swimmer',\n icon: [640, 512, [], \"f5c4\", \"M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z\"]\n};\nvar faSwimmingPool = {\n prefix: 'fas',\n iconName: 'swimming-pool',\n icon: [640, 512, [], \"f5c5\", \"M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z\"]\n};\nvar faSynagogue = {\n prefix: 'fas',\n iconName: 'synagogue',\n icon: [640, 512, [], \"f69b\", \"M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z\"]\n};\nvar faSync = {\n prefix: 'fas',\n iconName: 'sync',\n icon: [512, 512, [], \"f021\", \"M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z\"]\n};\nvar faSyncAlt = {\n prefix: 'fas',\n iconName: 'sync-alt',\n icon: [512, 512, [], \"f2f1\", \"M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z\"]\n};\nvar faSyringe = {\n prefix: 'fas',\n iconName: 'syringe',\n icon: [512, 512, [], \"f48e\", \"M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z\"]\n};\nvar faTable = {\n prefix: 'fas',\n iconName: 'table',\n icon: [512, 512, [], \"f0ce\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z\"]\n};\nvar faTableTennis = {\n prefix: 'fas',\n iconName: 'table-tennis',\n icon: [512, 512, [], \"f45d\", \"M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z\"]\n};\nvar faTablet = {\n prefix: 'fas',\n iconName: 'tablet',\n icon: [448, 512, [], \"f10a\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faTabletAlt = {\n prefix: 'fas',\n iconName: 'tablet-alt',\n icon: [448, 512, [], \"f3fa\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faTablets = {\n prefix: 'fas',\n iconName: 'tablets',\n icon: [640, 512, [], \"f490\", \"M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z\"]\n};\nvar faTachometerAlt = {\n prefix: 'fas',\n iconName: 'tachometer-alt',\n icon: [576, 512, [], \"f3fd\", \"M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTag = {\n prefix: 'fas',\n iconName: 'tag',\n icon: [512, 512, [], \"f02b\", \"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faTags = {\n prefix: 'fas',\n iconName: 'tags',\n icon: [640, 512, [], \"f02c\", \"M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z\"]\n};\nvar faTape = {\n prefix: 'fas',\n iconName: 'tape',\n icon: [640, 512, [], \"f4db\", \"M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z\"]\n};\nvar faTasks = {\n prefix: 'fas',\n iconName: 'tasks',\n icon: [512, 512, [], \"f0ae\", \"M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faTaxi = {\n prefix: 'fas',\n iconName: 'taxi',\n icon: [512, 512, [], \"f1ba\", \"M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTeeth = {\n prefix: 'fas',\n iconName: 'teeth',\n icon: [640, 512, [], \"f62e\", \"M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z\"]\n};\nvar faTeethOpen = {\n prefix: 'fas',\n iconName: 'teeth-open',\n icon: [640, 512, [], \"f62f\", \"M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z\"]\n};\nvar faTemperatureHigh = {\n prefix: 'fas',\n iconName: 'temperature-high',\n icon: [512, 512, [], \"f769\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTemperatureLow = {\n prefix: 'fas',\n iconName: 'temperature-low',\n icon: [512, 512, [], \"f76b\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTenge = {\n prefix: 'fas',\n iconName: 'tenge',\n icon: [384, 512, [], \"f7d7\", \"M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z\"]\n};\nvar faTerminal = {\n prefix: 'fas',\n iconName: 'terminal',\n icon: [640, 512, [], \"f120\", \"M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z\"]\n};\nvar faTextHeight = {\n prefix: 'fas',\n iconName: 'text-height',\n icon: [576, 512, [], \"f034\", \"M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z\"]\n};\nvar faTextWidth = {\n prefix: 'fas',\n iconName: 'text-width',\n icon: [448, 512, [], \"f035\", \"M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z\"]\n};\nvar faTh = {\n prefix: 'fas',\n iconName: 'th',\n icon: [512, 512, [], \"f00a\", \"M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z\"]\n};\nvar faThLarge = {\n prefix: 'fas',\n iconName: 'th-large',\n icon: [512, 512, [], \"f009\", \"M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z\"]\n};\nvar faThList = {\n prefix: 'fas',\n iconName: 'th-list',\n icon: [512, 512, [], \"f00b\", \"M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z\"]\n};\nvar faTheaterMasks = {\n prefix: 'fas',\n iconName: 'theater-masks',\n icon: [640, 512, [], \"f630\", \"M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z\"]\n};\nvar faThermometer = {\n prefix: 'fas',\n iconName: 'thermometer',\n icon: [512, 512, [], \"f491\", \"M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z\"]\n};\nvar faThermometerEmpty = {\n prefix: 'fas',\n iconName: 'thermometer-empty',\n icon: [256, 512, [], \"f2cb\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerFull = {\n prefix: 'fas',\n iconName: 'thermometer-full',\n icon: [256, 512, [], \"f2c7\", \"M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z\"]\n};\nvar faThermometerHalf = {\n prefix: 'fas',\n iconName: 'thermometer-half',\n icon: [256, 512, [], \"f2c9\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerQuarter = {\n prefix: 'fas',\n iconName: 'thermometer-quarter',\n icon: [256, 512, [], \"f2ca\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerThreeQuarters = {\n prefix: 'fas',\n iconName: 'thermometer-three-quarters',\n icon: [256, 512, [], \"f2c8\", \"M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThumbsDown = {\n prefix: 'fas',\n iconName: 'thumbs-down',\n icon: [512, 512, [], \"f165\", \"M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z\"]\n};\nvar faThumbsUp = {\n prefix: 'fas',\n iconName: 'thumbs-up',\n icon: [512, 512, [], \"f164\", \"M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z\"]\n};\nvar faThumbtack = {\n prefix: 'fas',\n iconName: 'thumbtack',\n icon: [384, 512, [], \"f08d\", \"M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z\"]\n};\nvar faTicketAlt = {\n prefix: 'fas',\n iconName: 'ticket-alt',\n icon: [576, 512, [], \"f3ff\", \"M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z\"]\n};\nvar faTimes = {\n prefix: 'fas',\n iconName: 'times',\n icon: [352, 512, [], \"f00d\", \"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"]\n};\nvar faTimesCircle = {\n prefix: 'fas',\n iconName: 'times-circle',\n icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"]\n};\nvar faTint = {\n prefix: 'fas',\n iconName: 'tint',\n icon: [352, 512, [], \"f043\", \"M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faTintSlash = {\n prefix: 'fas',\n iconName: 'tint-slash',\n icon: [640, 512, [], \"f5c7\", \"M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z\"]\n};\nvar faTired = {\n prefix: 'fas',\n iconName: 'tired',\n icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z\"]\n};\nvar faToggleOff = {\n prefix: 'fas',\n iconName: 'toggle-off',\n icon: [576, 512, [], \"f204\", \"M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z\"]\n};\nvar faToggleOn = {\n prefix: 'fas',\n iconName: 'toggle-on',\n icon: [576, 512, [], \"f205\", \"M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z\"]\n};\nvar faToilet = {\n prefix: 'fas',\n iconName: 'toilet',\n icon: [384, 512, [], \"f7d8\", \"M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z\"]\n};\nvar faToiletPaper = {\n prefix: 'fas',\n iconName: 'toilet-paper',\n icon: [576, 512, [], \"f71e\", \"M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z\"]\n};\nvar faToiletPaperSlash = {\n prefix: 'fas',\n iconName: 'toilet-paper-slash',\n icon: [640, 512, [], \"e072\", \"M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z\"]\n};\nvar faToolbox = {\n prefix: 'fas',\n iconName: 'toolbox',\n icon: [512, 512, [], \"f552\", \"M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z\"]\n};\nvar faTools = {\n prefix: 'fas',\n iconName: 'tools',\n icon: [512, 512, [], \"f7d9\", \"M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z\"]\n};\nvar faTooth = {\n prefix: 'fas',\n iconName: 'tooth',\n icon: [448, 512, [], \"f5c9\", \"M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z\"]\n};\nvar faTorah = {\n prefix: 'fas',\n iconName: 'torah',\n icon: [640, 512, [], \"f6a0\", \"M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z\"]\n};\nvar faToriiGate = {\n prefix: 'fas',\n iconName: 'torii-gate',\n icon: [512, 512, [], \"f6a1\", \"M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z\"]\n};\nvar faTractor = {\n prefix: 'fas',\n iconName: 'tractor',\n icon: [640, 512, [], \"f722\", \"M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z\"]\n};\nvar faTrademark = {\n prefix: 'fas',\n iconName: 'trademark',\n icon: [640, 512, [], \"f25c\", \"M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z\"]\n};\nvar faTrafficLight = {\n prefix: 'fas',\n iconName: 'traffic-light',\n icon: [384, 512, [], \"f637\", \"M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTrailer = {\n prefix: 'fas',\n iconName: 'trailer',\n icon: [640, 512, [], \"e041\", \"M624,320H544V80a16,16,0,0,0-16-16H16A16,16,0,0,0,0,80V368a16,16,0,0,0,16,16H65.61c7.83-54.21,54-96,110.39-96s102.56,41.79,110.39,96H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM96,243.68a176.29,176.29,0,0,0-32,20.71V136a8,8,0,0,1,8-8H88a8,8,0,0,1,8,8Zm96-18.54c-5.31-.49-10.57-1.14-16-1.14s-10.69.65-16,1.14V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,39.25a176.29,176.29,0,0,0-32-20.71V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8ZM384,320H352V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,0H448V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm-304,0a80,80,0,1,0,80,80A80,80,0,0,0,176,320Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,176,432Z\"]\n};\nvar faTrain = {\n prefix: 'fas',\n iconName: 'train',\n icon: [448, 512, [], \"f238\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z\"]\n};\nvar faTram = {\n prefix: 'fas',\n iconName: 'tram',\n icon: [512, 512, [], \"f7da\", \"M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faTransgender = {\n prefix: 'fas',\n iconName: 'transgender',\n icon: [384, 512, [], \"f224\", \"M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTransgenderAlt = {\n prefix: 'fas',\n iconName: 'transgender-alt',\n icon: [480, 512, [], \"f225\", \"M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTrash = {\n prefix: 'fas',\n iconName: 'trash',\n icon: [448, 512, [], \"f1f8\", \"M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z\"]\n};\nvar faTrashAlt = {\n prefix: 'fas',\n iconName: 'trash-alt',\n icon: [448, 512, [], \"f2ed\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestore = {\n prefix: 'fas',\n iconName: 'trash-restore',\n icon: [448, 512, [], \"f829\", \"M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestoreAlt = {\n prefix: 'fas',\n iconName: 'trash-restore-alt',\n icon: [448, 512, [], \"f82a\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTree = {\n prefix: 'fas',\n iconName: 'tree',\n icon: [384, 512, [], \"f1bb\", \"M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z\"]\n};\nvar faTrophy = {\n prefix: 'fas',\n iconName: 'trophy',\n icon: [576, 512, [], \"f091\", \"M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z\"]\n};\nvar faTruck = {\n prefix: 'fas',\n iconName: 'truck',\n icon: [640, 512, [], \"f0d1\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faTruckLoading = {\n prefix: 'fas',\n iconName: 'truck-loading',\n icon: [640, 512, [], \"f4de\", \"M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faTruckMonster = {\n prefix: 'fas',\n iconName: 'truck-monster',\n icon: [640, 512, [], \"f63b\", \"M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTruckMoving = {\n prefix: 'fas',\n iconName: 'truck-moving',\n icon: [640, 512, [], \"f4df\", \"M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z\"]\n};\nvar faTruckPickup = {\n prefix: 'fas',\n iconName: 'truck-pickup',\n icon: [640, 512, [], \"f63c\", \"M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faTshirt = {\n prefix: 'fas',\n iconName: 'tshirt',\n icon: [640, 512, [], \"f553\", \"M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z\"]\n};\nvar faTty = {\n prefix: 'fas',\n iconName: 'tty',\n icon: [512, 512, [], \"f1e4\", \"M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faTv = {\n prefix: 'fas',\n iconName: 'tv',\n icon: [640, 512, [], \"f26c\", \"M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z\"]\n};\nvar faUmbrella = {\n prefix: 'fas',\n iconName: 'umbrella',\n icon: [576, 512, [], \"f0e9\", \"M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z\"]\n};\nvar faUmbrellaBeach = {\n prefix: 'fas',\n iconName: 'umbrella-beach',\n icon: [640, 512, [], \"f5ca\", \"M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z\"]\n};\nvar faUnderline = {\n prefix: 'fas',\n iconName: 'underline',\n icon: [448, 512, [], \"f0cd\", \"M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faUndo = {\n prefix: 'fas',\n iconName: 'undo',\n icon: [512, 512, [], \"f0e2\", \"M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z\"]\n};\nvar faUndoAlt = {\n prefix: 'fas',\n iconName: 'undo-alt',\n icon: [512, 512, [], \"f2ea\", \"M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z\"]\n};\nvar faUniversalAccess = {\n prefix: 'fas',\n iconName: 'universal-access',\n icon: [512, 512, [], \"f29a\", \"M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z\"]\n};\nvar faUniversity = {\n prefix: 'fas',\n iconName: 'university',\n icon: [512, 512, [], \"f19c\", \"M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z\"]\n};\nvar faUnlink = {\n prefix: 'fas',\n iconName: 'unlink',\n icon: [512, 512, [], \"f127\", \"M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z\"]\n};\nvar faUnlock = {\n prefix: 'fas',\n iconName: 'unlock',\n icon: [448, 512, [], \"f09c\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faUnlockAlt = {\n prefix: 'fas',\n iconName: 'unlock-alt',\n icon: [448, 512, [], \"f13e\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\"]\n};\nvar faUpload = {\n prefix: 'fas',\n iconName: 'upload',\n icon: [512, 512, [], \"f093\", \"M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faUser = {\n prefix: 'fas',\n iconName: 'user',\n icon: [448, 512, [], \"f007\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserAlt = {\n prefix: 'fas',\n iconName: 'user-alt',\n icon: [512, 512, [], \"f406\", \"M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z\"]\n};\nvar faUserAltSlash = {\n prefix: 'fas',\n iconName: 'user-alt-slash',\n icon: [640, 512, [], \"f4fa\", \"M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z\"]\n};\nvar faUserAstronaut = {\n prefix: 'fas',\n iconName: 'user-astronaut',\n icon: [448, 512, [], \"f4fb\", \"M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z\"]\n};\nvar faUserCheck = {\n prefix: 'fas',\n iconName: 'user-check',\n icon: [640, 512, [], \"f4fc\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"]\n};\nvar faUserCircle = {\n prefix: 'fas',\n iconName: 'user-circle',\n icon: [496, 512, [], \"f2bd\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z\"]\n};\nvar faUserClock = {\n prefix: 'fas',\n iconName: 'user-clock',\n icon: [640, 512, [], \"f4fd\", \"M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z\"]\n};\nvar faUserCog = {\n prefix: 'fas',\n iconName: 'user-cog',\n icon: [640, 512, [], \"f4fe\", \"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"]\n};\nvar faUserEdit = {\n prefix: 'fas',\n iconName: 'user-edit',\n icon: [640, 512, [], \"f4ff\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z\"]\n};\nvar faUserFriends = {\n prefix: 'fas',\n iconName: 'user-friends',\n icon: [640, 512, [], \"f500\", \"M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z\"]\n};\nvar faUserGraduate = {\n prefix: 'fas',\n iconName: 'user-graduate',\n icon: [448, 512, [], \"f501\", \"M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z\"]\n};\nvar faUserInjured = {\n prefix: 'fas',\n iconName: 'user-injured',\n icon: [448, 512, [], \"f728\", \"M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z\"]\n};\nvar faUserLock = {\n prefix: 'fas',\n iconName: 'user-lock',\n icon: [640, 512, [], \"f502\", \"M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z\"]\n};\nvar faUserMd = {\n prefix: 'fas',\n iconName: 'user-md',\n icon: [448, 512, [], \"f0f0\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z\"]\n};\nvar faUserMinus = {\n prefix: 'fas',\n iconName: 'user-minus',\n icon: [640, 512, [], \"f503\", \"M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserNinja = {\n prefix: 'fas',\n iconName: 'user-ninja',\n icon: [448, 512, [], \"f504\", \"M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z\"]\n};\nvar faUserNurse = {\n prefix: 'fas',\n iconName: 'user-nurse',\n icon: [448, 512, [], \"f82f\", \"M319.41,320,224,415.39,128.59,320C57.1,323.1,0,381.6,0,453.79A58.21,58.21,0,0,0,58.21,512H389.79A58.21,58.21,0,0,0,448,453.79C448,381.6,390.9,323.1,319.41,320ZM224,304A128,128,0,0,0,352,176V65.82a32,32,0,0,0-20.76-30L246.47,4.07a64,64,0,0,0-44.94,0L116.76,35.86A32,32,0,0,0,96,65.82V176A128,128,0,0,0,224,304ZM184,71.67a5,5,0,0,1,5-5h21.67V45a5,5,0,0,1,5-5h16.66a5,5,0,0,1,5,5V66.67H259a5,5,0,0,1,5,5V88.33a5,5,0,0,1-5,5H237.33V115a5,5,0,0,1-5,5H215.67a5,5,0,0,1-5-5V93.33H189a5,5,0,0,1-5-5ZM144,160H304v16a80,80,0,0,1-160,0Z\"]\n};\nvar faUserPlus = {\n prefix: 'fas',\n iconName: 'user-plus',\n icon: [640, 512, [], \"f234\", \"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserSecret = {\n prefix: 'fas',\n iconName: 'user-secret',\n icon: [448, 512, [], \"f21b\", \"M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z\"]\n};\nvar faUserShield = {\n prefix: 'fas',\n iconName: 'user-shield',\n icon: [640, 512, [], \"f505\", \"M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z\"]\n};\nvar faUserSlash = {\n prefix: 'fas',\n iconName: 'user-slash',\n icon: [640, 512, [], \"f506\", \"M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z\"]\n};\nvar faUserTag = {\n prefix: 'fas',\n iconName: 'user-tag',\n icon: [640, 512, [], \"f507\", \"M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z\"]\n};\nvar faUserTie = {\n prefix: 'fas',\n iconName: 'user-tie',\n icon: [448, 512, [], \"f508\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z\"]\n};\nvar faUserTimes = {\n prefix: 'fas',\n iconName: 'user-times',\n icon: [640, 512, [], \"f235\", \"M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUsers = {\n prefix: 'fas',\n iconName: 'users',\n icon: [640, 512, [], \"f0c0\", \"M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUsersCog = {\n prefix: 'fas',\n iconName: 'users-cog',\n icon: [640, 512, [], \"f509\", \"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUsersSlash = {\n prefix: 'fas',\n iconName: 'users-slash',\n icon: [640, 512, [], \"e073\", \"M132.65,212.32,36.21,137.78A63.4,63.4,0,0,0,32,160a63.84,63.84,0,0,0,100.65,52.32Zm40.44,62.28A63.79,63.79,0,0,0,128,256H64A64.06,64.06,0,0,0,0,320v32a32,32,0,0,0,32,32H97.91A146.62,146.62,0,0,1,173.09,274.6ZM544,224a64,64,0,1,0-64-64A64.06,64.06,0,0,0,544,224ZM500.56,355.11a114.24,114.24,0,0,0-84.47-65.28L361,247.23c41.46-16.3,71-55.92,71-103.23A111.93,111.93,0,0,0,320,32c-57.14,0-103.69,42.83-110.6,98.08L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM128,403.21V432a48,48,0,0,0,48,48H464a47.45,47.45,0,0,0,12.57-1.87L232,289.13C173.74,294.83,128,343.42,128,403.21ZM576,256H512a63.79,63.79,0,0,0-45.09,18.6A146.29,146.29,0,0,1,542,384h66a32,32,0,0,0,32-32V320A64.06,64.06,0,0,0,576,256Z\"]\n};\nvar faUtensilSpoon = {\n prefix: 'fas',\n iconName: 'utensil-spoon',\n icon: [512, 512, [], \"f2e5\", \"M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z\"]\n};\nvar faUtensils = {\n prefix: 'fas',\n iconName: 'utensils',\n icon: [416, 512, [], \"f2e7\", \"M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z\"]\n};\nvar faVectorSquare = {\n prefix: 'fas',\n iconName: 'vector-square',\n icon: [512, 512, [], \"f5cb\", \"M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z\"]\n};\nvar faVenus = {\n prefix: 'fas',\n iconName: 'venus',\n icon: [288, 512, [], \"f221\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faVenusDouble = {\n prefix: 'fas',\n iconName: 'venus-double',\n icon: [512, 512, [], \"f226\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z\"]\n};\nvar faVenusMars = {\n prefix: 'fas',\n iconName: 'venus-mars',\n icon: [576, 512, [], \"f228\", \"M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faVest = {\n prefix: 'fas',\n iconName: 'vest',\n icon: [448, 512, [], \"e085\", \"M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a24.021,24.021,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A24.021,24.021,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.564A151.518,151.518,0,0,0,224,86.234a151.55,151.55,0,0,0,73.812-19.672L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM131.312,371.312l-48,48a16,16,0,0,1-22.624-22.624l48-48a16,16,0,0,1,22.624,22.624Zm256,48a15.992,15.992,0,0,1-22.624,0l-48-48a16,16,0,0,1,22.624-22.624l48,48A15.993,15.993,0,0,1,387.312,419.312Z\"]\n};\nvar faVestPatches = {\n prefix: 'fas',\n iconName: 'vest-patches',\n icon: [448, 512, [], \"e086\", \"M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a23.982,23.982,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A23.982,23.982,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.561A151.579,151.579,0,0,0,224,86.234a151.565,151.565,0,0,0,73.811-19.668L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM63.5,272.484a12.01,12.01,0,0,1,17-16.968l15.5,15.5,15.5-15.5a12.01,12.01,0,0,1,17,16.968L112.984,288,128.5,303.516a12.01,12.01,0,0,1-17,16.968L96,304.984l-15.5,15.5a12.01,12.01,0,0,1-17-16.968L79.016,288ZM96,456a40,40,0,1,1,40-40A40,40,0,0,1,96,456ZM359.227,335.785,310.7,336a6.671,6.671,0,0,1-6.7-6.7l.215-48.574A24.987,24.987,0,0,1,331.43,256.1c12.789,1.162,22.129,12.619,22.056,25.419l-.037,5.057,5.051-.037c12.826-.035,24.236,9.275,25.4,22.076A24.948,24.948,0,0,1,359.227,335.785Z\"]\n};\nvar faVial = {\n prefix: 'fas',\n iconName: 'vial',\n icon: [480, 512, [], \"f492\", \"M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z\"]\n};\nvar faVials = {\n prefix: 'fas',\n iconName: 'vials',\n icon: [640, 512, [], \"f493\", \"M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z\"]\n};\nvar faVideo = {\n prefix: 'fas',\n iconName: 'video',\n icon: [576, 512, [], \"f03d\", \"M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z\"]\n};\nvar faVideoSlash = {\n prefix: 'fas',\n iconName: 'video-slash',\n icon: [640, 512, [], \"f4e2\", \"M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z\"]\n};\nvar faVihara = {\n prefix: 'fas',\n iconName: 'vihara',\n icon: [640, 512, [], \"f6a7\", \"M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z\"]\n};\nvar faVirus = {\n prefix: 'fas',\n iconName: 'virus',\n icon: [512, 512, [], \"e074\", \"M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z\"]\n};\nvar faVirusSlash = {\n prefix: 'fas',\n iconName: 'virus-slash',\n icon: [640, 512, [], \"e075\", \"M114,227.6H92.4C76.7,227.6,64,240.3,64,256s12.7,28.4,28.4,28.4H114c50.7,0,76.1,61.3,40.2,97.1L139,396.8 c-11.5,10.7-12.2,28.7-1.6,40.2s28.7,12.2,40.2,1.6c0.5-0.5,1.1-1,1.6-1.6l15.2-15.2c35.8-35.8,97.1-10.5,97.1,40.2v21.5 c0,15.7,12.8,28.4,28.5,28.4c15.7,0,28.4-12.7,28.4-28.4V462c0-26.6,17-45.9,38.2-53.4l-244.5-189 C133.7,224.7,123.9,227.5,114,227.6z M617,505.8l19.6-25.3c5.4-7,4.2-17-2.8-22.5L470.6,332c4.2-25.4,24.9-47.5,55.4-47.5h21.5 c15.7,0,28.4-12.7,28.4-28.4s-12.7-28.4-28.4-28.4H526c-50.7,0-76.1-61.3-40.2-97.1l15.2-15.3c10.7-11.5,10-29.5-1.6-40.2 c-10.9-10.1-27.7-10.1-38.6,0l-15.2,15.2c-35.8,35.8-97.1,10.5-97.1-40.2V28.5C348.4,12.7,335.7,0,320,0 c-15.7,0-28.4,12.7-28.4,28.4V50c0,50.7-61.3,76.1-97.1,40.2L179.2,75c-11.1-11.1-29.4-10.6-40.5,0.5L45.5,3.4 c-7-5.4-17-4.2-22.5,2.8L3.4,31.5c-5.4,7-4.2,17,2.8,22.5l588.4,454.7C601.5,514.1,611.6,512.8,617,505.8z M335.4,227.5l-62.9-48.6 c4.9-1.8,10.2-2.8,15.4-2.9c26.5,0,48,21.5,48,48C336,225.2,335.5,226.3,335.4,227.5z\"]\n};\nvar faViruses = {\n prefix: 'fas',\n iconName: 'viruses',\n icon: [640, 512, [], \"e076\", \"M624,352H611.88c-28.51,0-42.79-34.47-22.63-54.63l8.58-8.57a16,16,0,1,0-22.63-22.63l-8.57,8.58C546.47,294.91,512,280.63,512,252.12V240a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.57c20.16,20.16,5.88,54.63-22.63,54.63H368a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.57a16,16,0,1,0,22.63,22.63l8.57-8.58c20.16-20.16,54.63-5.88,54.63,22.63V496a16,16,0,0,0,32,0V483.88c0-28.51,34.47-42.79,54.63-22.63l8.57,8.58a16,16,0,1,0,22.63-22.63l-8.58-8.57C569.09,418.47,583.37,384,611.88,384H624a16,16,0,0,0,0-32ZM480,384a32,32,0,1,1,32-32A32,32,0,0,1,480,384ZM346.51,213.33h16.16a21.33,21.33,0,0,0,0-42.66H346.51c-38,0-57.05-46-30.17-72.84l11.43-11.44A21.33,21.33,0,0,0,297.6,56.23L286.17,67.66c-26.88,26.88-72.84,7.85-72.84-30.17V21.33a21.33,21.33,0,0,0-42.66,0V37.49c0,38-46,57.05-72.84,30.17L86.4,56.23A21.33,21.33,0,0,0,56.23,86.39L67.66,97.83c26.88,26.88,7.85,72.84-30.17,72.84H21.33a21.33,21.33,0,0,0,0,42.66H37.49c38,0,57.05,46,30.17,72.84L56.23,297.6A21.33,21.33,0,1,0,86.4,327.77l11.43-11.43c26.88-26.88,72.84-7.85,72.84,30.17v16.16a21.33,21.33,0,0,0,42.66,0V346.51c0-38,46-57.05,72.84-30.17l11.43,11.43a21.33,21.33,0,0,0,30.17-30.17l-11.43-11.43C289.46,259.29,308.49,213.33,346.51,213.33ZM160,192a32,32,0,1,1,32-32A32,32,0,0,1,160,192Zm80,32a16,16,0,1,1,16-16A16,16,0,0,1,240,224Z\"]\n};\nvar faVoicemail = {\n prefix: 'fas',\n iconName: 'voicemail',\n icon: [640, 512, [], \"f897\", \"M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z\"]\n};\nvar faVolleyballBall = {\n prefix: 'fas',\n iconName: 'volleyball-ball',\n icon: [512, 512, [], \"f45f\", \"M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z\"]\n};\nvar faVolumeDown = {\n prefix: 'fas',\n iconName: 'volume-down',\n icon: [384, 512, [], \"f027\", \"M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z\"]\n};\nvar faVolumeMute = {\n prefix: 'fas',\n iconName: 'volume-mute',\n icon: [512, 512, [], \"f6a9\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z\"]\n};\nvar faVolumeOff = {\n prefix: 'fas',\n iconName: 'volume-off',\n icon: [256, 512, [], \"f026\", \"M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z\"]\n};\nvar faVolumeUp = {\n prefix: 'fas',\n iconName: 'volume-up',\n icon: [576, 512, [], \"f028\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z\"]\n};\nvar faVoteYea = {\n prefix: 'fas',\n iconName: 'vote-yea',\n icon: [640, 512, [], \"f772\", \"M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z\"]\n};\nvar faVrCardboard = {\n prefix: 'fas',\n iconName: 'vr-cardboard',\n icon: [640, 512, [], \"f729\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z\"]\n};\nvar faWalking = {\n prefix: 'fas',\n iconName: 'walking',\n icon: [320, 512, [], \"f554\", \"M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z\"]\n};\nvar faWallet = {\n prefix: 'fas',\n iconName: 'wallet',\n icon: [512, 512, [], \"f555\", \"M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faWarehouse = {\n prefix: 'fas',\n iconName: 'warehouse',\n icon: [640, 512, [], \"f494\", \"M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z\"]\n};\nvar faWater = {\n prefix: 'fas',\n iconName: 'water',\n icon: [576, 512, [], \"f773\", \"M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z\"]\n};\nvar faWaveSquare = {\n prefix: 'fas',\n iconName: 'wave-square',\n icon: [640, 512, [], \"f83e\", \"M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z\"]\n};\nvar faWeight = {\n prefix: 'fas',\n iconName: 'weight',\n icon: [512, 512, [], \"f496\", \"M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z\"]\n};\nvar faWeightHanging = {\n prefix: 'fas',\n iconName: 'weight-hanging',\n icon: [512, 512, [], \"f5cd\", \"M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faWheelchair = {\n prefix: 'fas',\n iconName: 'wheelchair',\n icon: [512, 512, [], \"f193\", \"M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z\"]\n};\nvar faWifi = {\n prefix: 'fas',\n iconName: 'wifi',\n icon: [640, 512, [], \"f1eb\", \"M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z\"]\n};\nvar faWind = {\n prefix: 'fas',\n iconName: 'wind',\n icon: [512, 512, [], \"f72e\", \"M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z\"]\n};\nvar faWindowClose = {\n prefix: 'fas',\n iconName: 'window-close',\n icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z\"]\n};\nvar faWindowMaximize = {\n prefix: 'fas',\n iconName: 'window-maximize',\n icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z\"]\n};\nvar faWindowMinimize = {\n prefix: 'fas',\n iconName: 'window-minimize',\n icon: [512, 512, [], \"f2d1\", \"M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z\"]\n};\nvar faWindowRestore = {\n prefix: 'fas',\n iconName: 'window-restore',\n icon: [512, 512, [], \"f2d2\", \"M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z\"]\n};\nvar faWineBottle = {\n prefix: 'fas',\n iconName: 'wine-bottle',\n icon: [512, 512, [], \"f72f\", \"M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z\"]\n};\nvar faWineGlass = {\n prefix: 'fas',\n iconName: 'wine-glass',\n icon: [288, 512, [], \"f4e3\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z\"]\n};\nvar faWineGlassAlt = {\n prefix: 'fas',\n iconName: 'wine-glass-alt',\n icon: [288, 512, [], \"f5ce\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z\"]\n};\nvar faWonSign = {\n prefix: 'fas',\n iconName: 'won-sign',\n icon: [576, 512, [], \"f159\", \"M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z\"]\n};\nvar faWrench = {\n prefix: 'fas',\n iconName: 'wrench',\n icon: [512, 512, [], \"f0ad\", \"M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faXRay = {\n prefix: 'fas',\n iconName: 'x-ray',\n icon: [640, 512, [], \"f497\", \"M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faYenSign = {\n prefix: 'fas',\n iconName: 'yen-sign',\n icon: [384, 512, [], \"f157\", \"M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z\"]\n};\nvar faYinYang = {\n prefix: 'fas',\n iconName: 'yin-yang',\n icon: [496, 512, [], \"f6ad\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar _iconsCache = {\n faAd: faAd,\n faAddressBook: faAddressBook,\n faAddressCard: faAddressCard,\n faAdjust: faAdjust,\n faAirFreshener: faAirFreshener,\n faAlignCenter: faAlignCenter,\n faAlignJustify: faAlignJustify,\n faAlignLeft: faAlignLeft,\n faAlignRight: faAlignRight,\n faAllergies: faAllergies,\n faAmbulance: faAmbulance,\n faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting,\n faAnchor: faAnchor,\n faAngleDoubleDown: faAngleDoubleDown,\n faAngleDoubleLeft: faAngleDoubleLeft,\n faAngleDoubleRight: faAngleDoubleRight,\n faAngleDoubleUp: faAngleDoubleUp,\n faAngleDown: faAngleDown,\n faAngleLeft: faAngleLeft,\n faAngleRight: faAngleRight,\n faAngleUp: faAngleUp,\n faAngry: faAngry,\n faAnkh: faAnkh,\n faAppleAlt: faAppleAlt,\n faArchive: faArchive,\n faArchway: faArchway,\n faArrowAltCircleDown: faArrowAltCircleDown,\n faArrowAltCircleLeft: faArrowAltCircleLeft,\n faArrowAltCircleRight: faArrowAltCircleRight,\n faArrowAltCircleUp: faArrowAltCircleUp,\n faArrowCircleDown: faArrowCircleDown,\n faArrowCircleLeft: faArrowCircleLeft,\n faArrowCircleRight: faArrowCircleRight,\n faArrowCircleUp: faArrowCircleUp,\n faArrowDown: faArrowDown,\n faArrowLeft: faArrowLeft,\n faArrowRight: faArrowRight,\n faArrowUp: faArrowUp,\n faArrowsAlt: faArrowsAlt,\n faArrowsAltH: faArrowsAltH,\n faArrowsAltV: faArrowsAltV,\n faAssistiveListeningSystems: faAssistiveListeningSystems,\n faAsterisk: faAsterisk,\n faAt: faAt,\n faAtlas: faAtlas,\n faAtom: faAtom,\n faAudioDescription: faAudioDescription,\n faAward: faAward,\n faBaby: faBaby,\n faBabyCarriage: faBabyCarriage,\n faBackspace: faBackspace,\n faBackward: faBackward,\n faBacon: faBacon,\n faBacteria: faBacteria,\n faBacterium: faBacterium,\n faBahai: faBahai,\n faBalanceScale: faBalanceScale,\n faBalanceScaleLeft: faBalanceScaleLeft,\n faBalanceScaleRight: faBalanceScaleRight,\n faBan: faBan,\n faBandAid: faBandAid,\n faBarcode: faBarcode,\n faBars: faBars,\n faBaseballBall: faBaseballBall,\n faBasketballBall: faBasketballBall,\n faBath: faBath,\n faBatteryEmpty: faBatteryEmpty,\n faBatteryFull: faBatteryFull,\n faBatteryHalf: faBatteryHalf,\n faBatteryQuarter: faBatteryQuarter,\n faBatteryThreeQuarters: faBatteryThreeQuarters,\n faBed: faBed,\n faBeer: faBeer,\n faBell: faBell,\n faBellSlash: faBellSlash,\n faBezierCurve: faBezierCurve,\n faBible: faBible,\n faBicycle: faBicycle,\n faBiking: faBiking,\n faBinoculars: faBinoculars,\n faBiohazard: faBiohazard,\n faBirthdayCake: faBirthdayCake,\n faBlender: faBlender,\n faBlenderPhone: faBlenderPhone,\n faBlind: faBlind,\n faBlog: faBlog,\n faBold: faBold,\n faBolt: faBolt,\n faBomb: faBomb,\n faBone: faBone,\n faBong: faBong,\n faBook: faBook,\n faBookDead: faBookDead,\n faBookMedical: faBookMedical,\n faBookOpen: faBookOpen,\n faBookReader: faBookReader,\n faBookmark: faBookmark,\n faBorderAll: faBorderAll,\n faBorderNone: faBorderNone,\n faBorderStyle: faBorderStyle,\n faBowlingBall: faBowlingBall,\n faBox: faBox,\n faBoxOpen: faBoxOpen,\n faBoxTissue: faBoxTissue,\n faBoxes: faBoxes,\n faBraille: faBraille,\n faBrain: faBrain,\n faBreadSlice: faBreadSlice,\n faBriefcase: faBriefcase,\n faBriefcaseMedical: faBriefcaseMedical,\n faBroadcastTower: faBroadcastTower,\n faBroom: faBroom,\n faBrush: faBrush,\n faBug: faBug,\n faBuilding: faBuilding,\n faBullhorn: faBullhorn,\n faBullseye: faBullseye,\n faBurn: faBurn,\n faBus: faBus,\n faBusAlt: faBusAlt,\n faBusinessTime: faBusinessTime,\n faCalculator: faCalculator,\n faCalendar: faCalendar,\n faCalendarAlt: faCalendarAlt,\n faCalendarCheck: faCalendarCheck,\n faCalendarDay: faCalendarDay,\n faCalendarMinus: faCalendarMinus,\n faCalendarPlus: faCalendarPlus,\n faCalendarTimes: faCalendarTimes,\n faCalendarWeek: faCalendarWeek,\n faCamera: faCamera,\n faCameraRetro: faCameraRetro,\n faCampground: faCampground,\n faCandyCane: faCandyCane,\n faCannabis: faCannabis,\n faCapsules: faCapsules,\n faCar: faCar,\n faCarAlt: faCarAlt,\n faCarBattery: faCarBattery,\n faCarCrash: faCarCrash,\n faCarSide: faCarSide,\n faCaravan: faCaravan,\n faCaretDown: faCaretDown,\n faCaretLeft: faCaretLeft,\n faCaretRight: faCaretRight,\n faCaretSquareDown: faCaretSquareDown,\n faCaretSquareLeft: faCaretSquareLeft,\n faCaretSquareRight: faCaretSquareRight,\n faCaretSquareUp: faCaretSquareUp,\n faCaretUp: faCaretUp,\n faCarrot: faCarrot,\n faCartArrowDown: faCartArrowDown,\n faCartPlus: faCartPlus,\n faCashRegister: faCashRegister,\n faCat: faCat,\n faCertificate: faCertificate,\n faChair: faChair,\n faChalkboard: faChalkboard,\n faChalkboardTeacher: faChalkboardTeacher,\n faChargingStation: faChargingStation,\n faChartArea: faChartArea,\n faChartBar: faChartBar,\n faChartLine: faChartLine,\n faChartPie: faChartPie,\n faCheck: faCheck,\n faCheckCircle: faCheckCircle,\n faCheckDouble: faCheckDouble,\n faCheckSquare: faCheckSquare,\n faCheese: faCheese,\n faChess: faChess,\n faChessBishop: faChessBishop,\n faChessBoard: faChessBoard,\n faChessKing: faChessKing,\n faChessKnight: faChessKnight,\n faChessPawn: faChessPawn,\n faChessQueen: faChessQueen,\n faChessRook: faChessRook,\n faChevronCircleDown: faChevronCircleDown,\n faChevronCircleLeft: faChevronCircleLeft,\n faChevronCircleRight: faChevronCircleRight,\n faChevronCircleUp: faChevronCircleUp,\n faChevronDown: faChevronDown,\n faChevronLeft: faChevronLeft,\n faChevronRight: faChevronRight,\n faChevronUp: faChevronUp,\n faChild: faChild,\n faChurch: faChurch,\n faCircle: faCircle,\n faCircleNotch: faCircleNotch,\n faCity: faCity,\n faClinicMedical: faClinicMedical,\n faClipboard: faClipboard,\n faClipboardCheck: faClipboardCheck,\n faClipboardList: faClipboardList,\n faClock: faClock,\n faClone: faClone,\n faClosedCaptioning: faClosedCaptioning,\n faCloud: faCloud,\n faCloudDownloadAlt: faCloudDownloadAlt,\n faCloudMeatball: faCloudMeatball,\n faCloudMoon: faCloudMoon,\n faCloudMoonRain: faCloudMoonRain,\n faCloudRain: faCloudRain,\n faCloudShowersHeavy: faCloudShowersHeavy,\n faCloudSun: faCloudSun,\n faCloudSunRain: faCloudSunRain,\n faCloudUploadAlt: faCloudUploadAlt,\n faCocktail: faCocktail,\n faCode: faCode,\n faCodeBranch: faCodeBranch,\n faCoffee: faCoffee,\n faCog: faCog,\n faCogs: faCogs,\n faCoins: faCoins,\n faColumns: faColumns,\n faComment: faComment,\n faCommentAlt: faCommentAlt,\n faCommentDollar: faCommentDollar,\n faCommentDots: faCommentDots,\n faCommentMedical: faCommentMedical,\n faCommentSlash: faCommentSlash,\n faComments: faComments,\n faCommentsDollar: faCommentsDollar,\n faCompactDisc: faCompactDisc,\n faCompass: faCompass,\n faCompress: faCompress,\n faCompressAlt: faCompressAlt,\n faCompressArrowsAlt: faCompressArrowsAlt,\n faConciergeBell: faConciergeBell,\n faCookie: faCookie,\n faCookieBite: faCookieBite,\n faCopy: faCopy,\n faCopyright: faCopyright,\n faCouch: faCouch,\n faCreditCard: faCreditCard,\n faCrop: faCrop,\n faCropAlt: faCropAlt,\n faCross: faCross,\n faCrosshairs: faCrosshairs,\n faCrow: faCrow,\n faCrown: faCrown,\n faCrutch: faCrutch,\n faCube: faCube,\n faCubes: faCubes,\n faCut: faCut,\n faDatabase: faDatabase,\n faDeaf: faDeaf,\n faDemocrat: faDemocrat,\n faDesktop: faDesktop,\n faDharmachakra: faDharmachakra,\n faDiagnoses: faDiagnoses,\n faDice: faDice,\n faDiceD20: faDiceD20,\n faDiceD6: faDiceD6,\n faDiceFive: faDiceFive,\n faDiceFour: faDiceFour,\n faDiceOne: faDiceOne,\n faDiceSix: faDiceSix,\n faDiceThree: faDiceThree,\n faDiceTwo: faDiceTwo,\n faDigitalTachograph: faDigitalTachograph,\n faDirections: faDirections,\n faDisease: faDisease,\n faDivide: faDivide,\n faDizzy: faDizzy,\n faDna: faDna,\n faDog: faDog,\n faDollarSign: faDollarSign,\n faDolly: faDolly,\n faDollyFlatbed: faDollyFlatbed,\n faDonate: faDonate,\n faDoorClosed: faDoorClosed,\n faDoorOpen: faDoorOpen,\n faDotCircle: faDotCircle,\n faDove: faDove,\n faDownload: faDownload,\n faDraftingCompass: faDraftingCompass,\n faDragon: faDragon,\n faDrawPolygon: faDrawPolygon,\n faDrum: faDrum,\n faDrumSteelpan: faDrumSteelpan,\n faDrumstickBite: faDrumstickBite,\n faDumbbell: faDumbbell,\n faDumpster: faDumpster,\n faDumpsterFire: faDumpsterFire,\n faDungeon: faDungeon,\n faEdit: faEdit,\n faEgg: faEgg,\n faEject: faEject,\n faEllipsisH: faEllipsisH,\n faEllipsisV: faEllipsisV,\n faEnvelope: faEnvelope,\n faEnvelopeOpen: faEnvelopeOpen,\n faEnvelopeOpenText: faEnvelopeOpenText,\n faEnvelopeSquare: faEnvelopeSquare,\n faEquals: faEquals,\n faEraser: faEraser,\n faEthernet: faEthernet,\n faEuroSign: faEuroSign,\n faExchangeAlt: faExchangeAlt,\n faExclamation: faExclamation,\n faExclamationCircle: faExclamationCircle,\n faExclamationTriangle: faExclamationTriangle,\n faExpand: faExpand,\n faExpandAlt: faExpandAlt,\n faExpandArrowsAlt: faExpandArrowsAlt,\n faExternalLinkAlt: faExternalLinkAlt,\n faExternalLinkSquareAlt: faExternalLinkSquareAlt,\n faEye: faEye,\n faEyeDropper: faEyeDropper,\n faEyeSlash: faEyeSlash,\n faFan: faFan,\n faFastBackward: faFastBackward,\n faFastForward: faFastForward,\n faFaucet: faFaucet,\n faFax: faFax,\n faFeather: faFeather,\n faFeatherAlt: faFeatherAlt,\n faFemale: faFemale,\n faFighterJet: faFighterJet,\n faFile: faFile,\n faFileAlt: faFileAlt,\n faFileArchive: faFileArchive,\n faFileAudio: faFileAudio,\n faFileCode: faFileCode,\n faFileContract: faFileContract,\n faFileCsv: faFileCsv,\n faFileDownload: faFileDownload,\n faFileExcel: faFileExcel,\n faFileExport: faFileExport,\n faFileImage: faFileImage,\n faFileImport: faFileImport,\n faFileInvoice: faFileInvoice,\n faFileInvoiceDollar: faFileInvoiceDollar,\n faFileMedical: faFileMedical,\n faFileMedicalAlt: faFileMedicalAlt,\n faFilePdf: faFilePdf,\n faFilePowerpoint: faFilePowerpoint,\n faFilePrescription: faFilePrescription,\n faFileSignature: faFileSignature,\n faFileUpload: faFileUpload,\n faFileVideo: faFileVideo,\n faFileWord: faFileWord,\n faFill: faFill,\n faFillDrip: faFillDrip,\n faFilm: faFilm,\n faFilter: faFilter,\n faFingerprint: faFingerprint,\n faFire: faFire,\n faFireAlt: faFireAlt,\n faFireExtinguisher: faFireExtinguisher,\n faFirstAid: faFirstAid,\n faFish: faFish,\n faFistRaised: faFistRaised,\n faFlag: faFlag,\n faFlagCheckered: faFlagCheckered,\n faFlagUsa: faFlagUsa,\n faFlask: faFlask,\n faFlushed: faFlushed,\n faFolder: faFolder,\n faFolderMinus: faFolderMinus,\n faFolderOpen: faFolderOpen,\n faFolderPlus: faFolderPlus,\n faFont: faFont,\n faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n faFootballBall: faFootballBall,\n faForward: faForward,\n faFrog: faFrog,\n faFrown: faFrown,\n faFrownOpen: faFrownOpen,\n faFunnelDollar: faFunnelDollar,\n faFutbol: faFutbol,\n faGamepad: faGamepad,\n faGasPump: faGasPump,\n faGavel: faGavel,\n faGem: faGem,\n faGenderless: faGenderless,\n faGhost: faGhost,\n faGift: faGift,\n faGifts: faGifts,\n faGlassCheers: faGlassCheers,\n faGlassMartini: faGlassMartini,\n faGlassMartiniAlt: faGlassMartiniAlt,\n faGlassWhiskey: faGlassWhiskey,\n faGlasses: faGlasses,\n faGlobe: faGlobe,\n faGlobeAfrica: faGlobeAfrica,\n faGlobeAmericas: faGlobeAmericas,\n faGlobeAsia: faGlobeAsia,\n faGlobeEurope: faGlobeEurope,\n faGolfBall: faGolfBall,\n faGopuram: faGopuram,\n faGraduationCap: faGraduationCap,\n faGreaterThan: faGreaterThan,\n faGreaterThanEqual: faGreaterThanEqual,\n faGrimace: faGrimace,\n faGrin: faGrin,\n faGrinAlt: faGrinAlt,\n faGrinBeam: faGrinBeam,\n faGrinBeamSweat: faGrinBeamSweat,\n faGrinHearts: faGrinHearts,\n faGrinSquint: faGrinSquint,\n faGrinSquintTears: faGrinSquintTears,\n faGrinStars: faGrinStars,\n faGrinTears: faGrinTears,\n faGrinTongue: faGrinTongue,\n faGrinTongueSquint: faGrinTongueSquint,\n faGrinTongueWink: faGrinTongueWink,\n faGrinWink: faGrinWink,\n faGripHorizontal: faGripHorizontal,\n faGripLines: faGripLines,\n faGripLinesVertical: faGripLinesVertical,\n faGripVertical: faGripVertical,\n faGuitar: faGuitar,\n faHSquare: faHSquare,\n faHamburger: faHamburger,\n faHammer: faHammer,\n faHamsa: faHamsa,\n faHandHolding: faHandHolding,\n faHandHoldingHeart: faHandHoldingHeart,\n faHandHoldingMedical: faHandHoldingMedical,\n faHandHoldingUsd: faHandHoldingUsd,\n faHandHoldingWater: faHandHoldingWater,\n faHandLizard: faHandLizard,\n faHandMiddleFinger: faHandMiddleFinger,\n faHandPaper: faHandPaper,\n faHandPeace: faHandPeace,\n faHandPointDown: faHandPointDown,\n faHandPointLeft: faHandPointLeft,\n faHandPointRight: faHandPointRight,\n faHandPointUp: faHandPointUp,\n faHandPointer: faHandPointer,\n faHandRock: faHandRock,\n faHandScissors: faHandScissors,\n faHandSparkles: faHandSparkles,\n faHandSpock: faHandSpock,\n faHands: faHands,\n faHandsHelping: faHandsHelping,\n faHandsWash: faHandsWash,\n faHandshake: faHandshake,\n faHandshakeAltSlash: faHandshakeAltSlash,\n faHandshakeSlash: faHandshakeSlash,\n faHanukiah: faHanukiah,\n faHardHat: faHardHat,\n faHashtag: faHashtag,\n faHatCowboy: faHatCowboy,\n faHatCowboySide: faHatCowboySide,\n faHatWizard: faHatWizard,\n faHdd: faHdd,\n faHeadSideCough: faHeadSideCough,\n faHeadSideCoughSlash: faHeadSideCoughSlash,\n faHeadSideMask: faHeadSideMask,\n faHeadSideVirus: faHeadSideVirus,\n faHeading: faHeading,\n faHeadphones: faHeadphones,\n faHeadphonesAlt: faHeadphonesAlt,\n faHeadset: faHeadset,\n faHeart: faHeart,\n faHeartBroken: faHeartBroken,\n faHeartbeat: faHeartbeat,\n faHelicopter: faHelicopter,\n faHighlighter: faHighlighter,\n faHiking: faHiking,\n faHippo: faHippo,\n faHistory: faHistory,\n faHockeyPuck: faHockeyPuck,\n faHollyBerry: faHollyBerry,\n faHome: faHome,\n faHorse: faHorse,\n faHorseHead: faHorseHead,\n faHospital: faHospital,\n faHospitalAlt: faHospitalAlt,\n faHospitalSymbol: faHospitalSymbol,\n faHospitalUser: faHospitalUser,\n faHotTub: faHotTub,\n faHotdog: faHotdog,\n faHotel: faHotel,\n faHourglass: faHourglass,\n faHourglassEnd: faHourglassEnd,\n faHourglassHalf: faHourglassHalf,\n faHourglassStart: faHourglassStart,\n faHouseDamage: faHouseDamage,\n faHouseUser: faHouseUser,\n faHryvnia: faHryvnia,\n faICursor: faICursor,\n faIceCream: faIceCream,\n faIcicles: faIcicles,\n faIcons: faIcons,\n faIdBadge: faIdBadge,\n faIdCard: faIdCard,\n faIdCardAlt: faIdCardAlt,\n faIgloo: faIgloo,\n faImage: faImage,\n faImages: faImages,\n faInbox: faInbox,\n faIndent: faIndent,\n faIndustry: faIndustry,\n faInfinity: faInfinity,\n faInfo: faInfo,\n faInfoCircle: faInfoCircle,\n faItalic: faItalic,\n faJedi: faJedi,\n faJoint: faJoint,\n faJournalWhills: faJournalWhills,\n faKaaba: faKaaba,\n faKey: faKey,\n faKeyboard: faKeyboard,\n faKhanda: faKhanda,\n faKiss: faKiss,\n faKissBeam: faKissBeam,\n faKissWinkHeart: faKissWinkHeart,\n faKiwiBird: faKiwiBird,\n faLandmark: faLandmark,\n faLanguage: faLanguage,\n faLaptop: faLaptop,\n faLaptopCode: faLaptopCode,\n faLaptopHouse: faLaptopHouse,\n faLaptopMedical: faLaptopMedical,\n faLaugh: faLaugh,\n faLaughBeam: faLaughBeam,\n faLaughSquint: faLaughSquint,\n faLaughWink: faLaughWink,\n faLayerGroup: faLayerGroup,\n faLeaf: faLeaf,\n faLemon: faLemon,\n faLessThan: faLessThan,\n faLessThanEqual: faLessThanEqual,\n faLevelDownAlt: faLevelDownAlt,\n faLevelUpAlt: faLevelUpAlt,\n faLifeRing: faLifeRing,\n faLightbulb: faLightbulb,\n faLink: faLink,\n faLiraSign: faLiraSign,\n faList: faList,\n faListAlt: faListAlt,\n faListOl: faListOl,\n faListUl: faListUl,\n faLocationArrow: faLocationArrow,\n faLock: faLock,\n faLockOpen: faLockOpen,\n faLongArrowAltDown: faLongArrowAltDown,\n faLongArrowAltLeft: faLongArrowAltLeft,\n faLongArrowAltRight: faLongArrowAltRight,\n faLongArrowAltUp: faLongArrowAltUp,\n faLowVision: faLowVision,\n faLuggageCart: faLuggageCart,\n faLungs: faLungs,\n faLungsVirus: faLungsVirus,\n faMagic: faMagic,\n faMagnet: faMagnet,\n faMailBulk: faMailBulk,\n faMale: faMale,\n faMap: faMap,\n faMapMarked: faMapMarked,\n faMapMarkedAlt: faMapMarkedAlt,\n faMapMarker: faMapMarker,\n faMapMarkerAlt: faMapMarkerAlt,\n faMapPin: faMapPin,\n faMapSigns: faMapSigns,\n faMarker: faMarker,\n faMars: faMars,\n faMarsDouble: faMarsDouble,\n faMarsStroke: faMarsStroke,\n faMarsStrokeH: faMarsStrokeH,\n faMarsStrokeV: faMarsStrokeV,\n faMask: faMask,\n faMedal: faMedal,\n faMedkit: faMedkit,\n faMeh: faMeh,\n faMehBlank: faMehBlank,\n faMehRollingEyes: faMehRollingEyes,\n faMemory: faMemory,\n faMenorah: faMenorah,\n faMercury: faMercury,\n faMeteor: faMeteor,\n faMicrochip: faMicrochip,\n faMicrophone: faMicrophone,\n faMicrophoneAlt: faMicrophoneAlt,\n faMicrophoneAltSlash: faMicrophoneAltSlash,\n faMicrophoneSlash: faMicrophoneSlash,\n faMicroscope: faMicroscope,\n faMinus: faMinus,\n faMinusCircle: faMinusCircle,\n faMinusSquare: faMinusSquare,\n faMitten: faMitten,\n faMobile: faMobile,\n faMobileAlt: faMobileAlt,\n faMoneyBill: faMoneyBill,\n faMoneyBillAlt: faMoneyBillAlt,\n faMoneyBillWave: faMoneyBillWave,\n faMoneyBillWaveAlt: faMoneyBillWaveAlt,\n faMoneyCheck: faMoneyCheck,\n faMoneyCheckAlt: faMoneyCheckAlt,\n faMonument: faMonument,\n faMoon: faMoon,\n faMortarPestle: faMortarPestle,\n faMosque: faMosque,\n faMotorcycle: faMotorcycle,\n faMountain: faMountain,\n faMouse: faMouse,\n faMousePointer: faMousePointer,\n faMugHot: faMugHot,\n faMusic: faMusic,\n faNetworkWired: faNetworkWired,\n faNeuter: faNeuter,\n faNewspaper: faNewspaper,\n faNotEqual: faNotEqual,\n faNotesMedical: faNotesMedical,\n faObjectGroup: faObjectGroup,\n faObjectUngroup: faObjectUngroup,\n faOilCan: faOilCan,\n faOm: faOm,\n faOtter: faOtter,\n faOutdent: faOutdent,\n faPager: faPager,\n faPaintBrush: faPaintBrush,\n faPaintRoller: faPaintRoller,\n faPalette: faPalette,\n faPallet: faPallet,\n faPaperPlane: faPaperPlane,\n faPaperclip: faPaperclip,\n faParachuteBox: faParachuteBox,\n faParagraph: faParagraph,\n faParking: faParking,\n faPassport: faPassport,\n faPastafarianism: faPastafarianism,\n faPaste: faPaste,\n faPause: faPause,\n faPauseCircle: faPauseCircle,\n faPaw: faPaw,\n faPeace: faPeace,\n faPen: faPen,\n faPenAlt: faPenAlt,\n faPenFancy: faPenFancy,\n faPenNib: faPenNib,\n faPenSquare: faPenSquare,\n faPencilAlt: faPencilAlt,\n faPencilRuler: faPencilRuler,\n faPeopleArrows: faPeopleArrows,\n faPeopleCarry: faPeopleCarry,\n faPepperHot: faPepperHot,\n faPercent: faPercent,\n faPercentage: faPercentage,\n faPersonBooth: faPersonBooth,\n faPhone: faPhone,\n faPhoneAlt: faPhoneAlt,\n faPhoneSlash: faPhoneSlash,\n faPhoneSquare: faPhoneSquare,\n faPhoneSquareAlt: faPhoneSquareAlt,\n faPhoneVolume: faPhoneVolume,\n faPhotoVideo: faPhotoVideo,\n faPiggyBank: faPiggyBank,\n faPills: faPills,\n faPizzaSlice: faPizzaSlice,\n faPlaceOfWorship: faPlaceOfWorship,\n faPlane: faPlane,\n faPlaneArrival: faPlaneArrival,\n faPlaneDeparture: faPlaneDeparture,\n faPlaneSlash: faPlaneSlash,\n faPlay: faPlay,\n faPlayCircle: faPlayCircle,\n faPlug: faPlug,\n faPlus: faPlus,\n faPlusCircle: faPlusCircle,\n faPlusSquare: faPlusSquare,\n faPodcast: faPodcast,\n faPoll: faPoll,\n faPollH: faPollH,\n faPoo: faPoo,\n faPooStorm: faPooStorm,\n faPoop: faPoop,\n faPortrait: faPortrait,\n faPoundSign: faPoundSign,\n faPowerOff: faPowerOff,\n faPray: faPray,\n faPrayingHands: faPrayingHands,\n faPrescription: faPrescription,\n faPrescriptionBottle: faPrescriptionBottle,\n faPrescriptionBottleAlt: faPrescriptionBottleAlt,\n faPrint: faPrint,\n faProcedures: faProcedures,\n faProjectDiagram: faProjectDiagram,\n faPumpMedical: faPumpMedical,\n faPumpSoap: faPumpSoap,\n faPuzzlePiece: faPuzzlePiece,\n faQrcode: faQrcode,\n faQuestion: faQuestion,\n faQuestionCircle: faQuestionCircle,\n faQuidditch: faQuidditch,\n faQuoteLeft: faQuoteLeft,\n faQuoteRight: faQuoteRight,\n faQuran: faQuran,\n faRadiation: faRadiation,\n faRadiationAlt: faRadiationAlt,\n faRainbow: faRainbow,\n faRandom: faRandom,\n faReceipt: faReceipt,\n faRecordVinyl: faRecordVinyl,\n faRecycle: faRecycle,\n faRedo: faRedo,\n faRedoAlt: faRedoAlt,\n faRegistered: faRegistered,\n faRemoveFormat: faRemoveFormat,\n faReply: faReply,\n faReplyAll: faReplyAll,\n faRepublican: faRepublican,\n faRestroom: faRestroom,\n faRetweet: faRetweet,\n faRibbon: faRibbon,\n faRing: faRing,\n faRoad: faRoad,\n faRobot: faRobot,\n faRocket: faRocket,\n faRoute: faRoute,\n faRss: faRss,\n faRssSquare: faRssSquare,\n faRubleSign: faRubleSign,\n faRuler: faRuler,\n faRulerCombined: faRulerCombined,\n faRulerHorizontal: faRulerHorizontal,\n faRulerVertical: faRulerVertical,\n faRunning: faRunning,\n faRupeeSign: faRupeeSign,\n faSadCry: faSadCry,\n faSadTear: faSadTear,\n faSatellite: faSatellite,\n faSatelliteDish: faSatelliteDish,\n faSave: faSave,\n faSchool: faSchool,\n faScrewdriver: faScrewdriver,\n faScroll: faScroll,\n faSdCard: faSdCard,\n faSearch: faSearch,\n faSearchDollar: faSearchDollar,\n faSearchLocation: faSearchLocation,\n faSearchMinus: faSearchMinus,\n faSearchPlus: faSearchPlus,\n faSeedling: faSeedling,\n faServer: faServer,\n faShapes: faShapes,\n faShare: faShare,\n faShareAlt: faShareAlt,\n faShareAltSquare: faShareAltSquare,\n faShareSquare: faShareSquare,\n faShekelSign: faShekelSign,\n faShieldAlt: faShieldAlt,\n faShieldVirus: faShieldVirus,\n faShip: faShip,\n faShippingFast: faShippingFast,\n faShoePrints: faShoePrints,\n faShoppingBag: faShoppingBag,\n faShoppingBasket: faShoppingBasket,\n faShoppingCart: faShoppingCart,\n faShower: faShower,\n faShuttleVan: faShuttleVan,\n faSign: faSign,\n faSignInAlt: faSignInAlt,\n faSignLanguage: faSignLanguage,\n faSignOutAlt: faSignOutAlt,\n faSignal: faSignal,\n faSignature: faSignature,\n faSimCard: faSimCard,\n faSink: faSink,\n faSitemap: faSitemap,\n faSkating: faSkating,\n faSkiing: faSkiing,\n faSkiingNordic: faSkiingNordic,\n faSkull: faSkull,\n faSkullCrossbones: faSkullCrossbones,\n faSlash: faSlash,\n faSleigh: faSleigh,\n faSlidersH: faSlidersH,\n faSmile: faSmile,\n faSmileBeam: faSmileBeam,\n faSmileWink: faSmileWink,\n faSmog: faSmog,\n faSmoking: faSmoking,\n faSmokingBan: faSmokingBan,\n faSms: faSms,\n faSnowboarding: faSnowboarding,\n faSnowflake: faSnowflake,\n faSnowman: faSnowman,\n faSnowplow: faSnowplow,\n faSoap: faSoap,\n faSocks: faSocks,\n faSolarPanel: faSolarPanel,\n faSort: faSort,\n faSortAlphaDown: faSortAlphaDown,\n faSortAlphaDownAlt: faSortAlphaDownAlt,\n faSortAlphaUp: faSortAlphaUp,\n faSortAlphaUpAlt: faSortAlphaUpAlt,\n faSortAmountDown: faSortAmountDown,\n faSortAmountDownAlt: faSortAmountDownAlt,\n faSortAmountUp: faSortAmountUp,\n faSortAmountUpAlt: faSortAmountUpAlt,\n faSortDown: faSortDown,\n faSortNumericDown: faSortNumericDown,\n faSortNumericDownAlt: faSortNumericDownAlt,\n faSortNumericUp: faSortNumericUp,\n faSortNumericUpAlt: faSortNumericUpAlt,\n faSortUp: faSortUp,\n faSpa: faSpa,\n faSpaceShuttle: faSpaceShuttle,\n faSpellCheck: faSpellCheck,\n faSpider: faSpider,\n faSpinner: faSpinner,\n faSplotch: faSplotch,\n faSprayCan: faSprayCan,\n faSquare: faSquare,\n faSquareFull: faSquareFull,\n faSquareRootAlt: faSquareRootAlt,\n faStamp: faStamp,\n faStar: faStar,\n faStarAndCrescent: faStarAndCrescent,\n faStarHalf: faStarHalf,\n faStarHalfAlt: faStarHalfAlt,\n faStarOfDavid: faStarOfDavid,\n faStarOfLife: faStarOfLife,\n faStepBackward: faStepBackward,\n faStepForward: faStepForward,\n faStethoscope: faStethoscope,\n faStickyNote: faStickyNote,\n faStop: faStop,\n faStopCircle: faStopCircle,\n faStopwatch: faStopwatch,\n faStopwatch20: faStopwatch20,\n faStore: faStore,\n faStoreAlt: faStoreAlt,\n faStoreAltSlash: faStoreAltSlash,\n faStoreSlash: faStoreSlash,\n faStream: faStream,\n faStreetView: faStreetView,\n faStrikethrough: faStrikethrough,\n faStroopwafel: faStroopwafel,\n faSubscript: faSubscript,\n faSubway: faSubway,\n faSuitcase: faSuitcase,\n faSuitcaseRolling: faSuitcaseRolling,\n faSun: faSun,\n faSuperscript: faSuperscript,\n faSurprise: faSurprise,\n faSwatchbook: faSwatchbook,\n faSwimmer: faSwimmer,\n faSwimmingPool: faSwimmingPool,\n faSynagogue: faSynagogue,\n faSync: faSync,\n faSyncAlt: faSyncAlt,\n faSyringe: faSyringe,\n faTable: faTable,\n faTableTennis: faTableTennis,\n faTablet: faTablet,\n faTabletAlt: faTabletAlt,\n faTablets: faTablets,\n faTachometerAlt: faTachometerAlt,\n faTag: faTag,\n faTags: faTags,\n faTape: faTape,\n faTasks: faTasks,\n faTaxi: faTaxi,\n faTeeth: faTeeth,\n faTeethOpen: faTeethOpen,\n faTemperatureHigh: faTemperatureHigh,\n faTemperatureLow: faTemperatureLow,\n faTenge: faTenge,\n faTerminal: faTerminal,\n faTextHeight: faTextHeight,\n faTextWidth: faTextWidth,\n faTh: faTh,\n faThLarge: faThLarge,\n faThList: faThList,\n faTheaterMasks: faTheaterMasks,\n faThermometer: faThermometer,\n faThermometerEmpty: faThermometerEmpty,\n faThermometerFull: faThermometerFull,\n faThermometerHalf: faThermometerHalf,\n faThermometerQuarter: faThermometerQuarter,\n faThermometerThreeQuarters: faThermometerThreeQuarters,\n faThumbsDown: faThumbsDown,\n faThumbsUp: faThumbsUp,\n faThumbtack: faThumbtack,\n faTicketAlt: faTicketAlt,\n faTimes: faTimes,\n faTimesCircle: faTimesCircle,\n faTint: faTint,\n faTintSlash: faTintSlash,\n faTired: faTired,\n faToggleOff: faToggleOff,\n faToggleOn: faToggleOn,\n faToilet: faToilet,\n faToiletPaper: faToiletPaper,\n faToiletPaperSlash: faToiletPaperSlash,\n faToolbox: faToolbox,\n faTools: faTools,\n faTooth: faTooth,\n faTorah: faTorah,\n faToriiGate: faToriiGate,\n faTractor: faTractor,\n faTrademark: faTrademark,\n faTrafficLight: faTrafficLight,\n faTrailer: faTrailer,\n faTrain: faTrain,\n faTram: faTram,\n faTransgender: faTransgender,\n faTransgenderAlt: faTransgenderAlt,\n faTrash: faTrash,\n faTrashAlt: faTrashAlt,\n faTrashRestore: faTrashRestore,\n faTrashRestoreAlt: faTrashRestoreAlt,\n faTree: faTree,\n faTrophy: faTrophy,\n faTruck: faTruck,\n faTruckLoading: faTruckLoading,\n faTruckMonster: faTruckMonster,\n faTruckMoving: faTruckMoving,\n faTruckPickup: faTruckPickup,\n faTshirt: faTshirt,\n faTty: faTty,\n faTv: faTv,\n faUmbrella: faUmbrella,\n faUmbrellaBeach: faUmbrellaBeach,\n faUnderline: faUnderline,\n faUndo: faUndo,\n faUndoAlt: faUndoAlt,\n faUniversalAccess: faUniversalAccess,\n faUniversity: faUniversity,\n faUnlink: faUnlink,\n faUnlock: faUnlock,\n faUnlockAlt: faUnlockAlt,\n faUpload: faUpload,\n faUser: faUser,\n faUserAlt: faUserAlt,\n faUserAltSlash: faUserAltSlash,\n faUserAstronaut: faUserAstronaut,\n faUserCheck: faUserCheck,\n faUserCircle: faUserCircle,\n faUserClock: faUserClock,\n faUserCog: faUserCog,\n faUserEdit: faUserEdit,\n faUserFriends: faUserFriends,\n faUserGraduate: faUserGraduate,\n faUserInjured: faUserInjured,\n faUserLock: faUserLock,\n faUserMd: faUserMd,\n faUserMinus: faUserMinus,\n faUserNinja: faUserNinja,\n faUserNurse: faUserNurse,\n faUserPlus: faUserPlus,\n faUserSecret: faUserSecret,\n faUserShield: faUserShield,\n faUserSlash: faUserSlash,\n faUserTag: faUserTag,\n faUserTie: faUserTie,\n faUserTimes: faUserTimes,\n faUsers: faUsers,\n faUsersCog: faUsersCog,\n faUsersSlash: faUsersSlash,\n faUtensilSpoon: faUtensilSpoon,\n faUtensils: faUtensils,\n faVectorSquare: faVectorSquare,\n faVenus: faVenus,\n faVenusDouble: faVenusDouble,\n faVenusMars: faVenusMars,\n faVest: faVest,\n faVestPatches: faVestPatches,\n faVial: faVial,\n faVials: faVials,\n faVideo: faVideo,\n faVideoSlash: faVideoSlash,\n faVihara: faVihara,\n faVirus: faVirus,\n faVirusSlash: faVirusSlash,\n faViruses: faViruses,\n faVoicemail: faVoicemail,\n faVolleyballBall: faVolleyballBall,\n faVolumeDown: faVolumeDown,\n faVolumeMute: faVolumeMute,\n faVolumeOff: faVolumeOff,\n faVolumeUp: faVolumeUp,\n faVoteYea: faVoteYea,\n faVrCardboard: faVrCardboard,\n faWalking: faWalking,\n faWallet: faWallet,\n faWarehouse: faWarehouse,\n faWater: faWater,\n faWaveSquare: faWaveSquare,\n faWeight: faWeight,\n faWeightHanging: faWeightHanging,\n faWheelchair: faWheelchair,\n faWifi: faWifi,\n faWind: faWind,\n faWindowClose: faWindowClose,\n faWindowMaximize: faWindowMaximize,\n faWindowMinimize: faWindowMinimize,\n faWindowRestore: faWindowRestore,\n faWineBottle: faWineBottle,\n faWineGlass: faWineGlass,\n faWineGlassAlt: faWineGlassAlt,\n faWonSign: faWonSign,\n faWrench: faWrench,\n faXRay: faXRay,\n faYenSign: faYenSign,\n faYinYang: faYinYang\n};\n\nexport { _iconsCache as fas, prefix, faAd, faAddressBook, faAddressCard, faAdjust, faAirFreshener, faAlignCenter, faAlignJustify, faAlignLeft, faAlignRight, faAllergies, faAmbulance, faAmericanSignLanguageInterpreting, faAnchor, faAngleDoubleDown, faAngleDoubleLeft, faAngleDoubleRight, faAngleDoubleUp, faAngleDown, faAngleLeft, faAngleRight, faAngleUp, faAngry, faAnkh, faAppleAlt, faArchive, faArchway, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faArrowCircleDown, faArrowCircleLeft, faArrowCircleRight, faArrowCircleUp, faArrowDown, faArrowLeft, faArrowRight, faArrowUp, faArrowsAlt, faArrowsAltH, faArrowsAltV, faAssistiveListeningSystems, faAsterisk, faAt, faAtlas, faAtom, faAudioDescription, faAward, faBaby, faBabyCarriage, faBackspace, faBackward, faBacon, faBacteria, faBacterium, faBahai, faBalanceScale, faBalanceScaleLeft, faBalanceScaleRight, faBan, faBandAid, faBarcode, faBars, faBaseballBall, faBasketballBall, faBath, faBatteryEmpty, faBatteryFull, faBatteryHalf, faBatteryQuarter, faBatteryThreeQuarters, faBed, faBeer, faBell, faBellSlash, faBezierCurve, faBible, faBicycle, faBiking, faBinoculars, faBiohazard, faBirthdayCake, faBlender, faBlenderPhone, faBlind, faBlog, faBold, faBolt, faBomb, faBone, faBong, faBook, faBookDead, faBookMedical, faBookOpen, faBookReader, faBookmark, faBorderAll, faBorderNone, faBorderStyle, faBowlingBall, faBox, faBoxOpen, faBoxTissue, faBoxes, faBraille, faBrain, faBreadSlice, faBriefcase, faBriefcaseMedical, faBroadcastTower, faBroom, faBrush, faBug, faBuilding, faBullhorn, faBullseye, faBurn, faBus, faBusAlt, faBusinessTime, faCalculator, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarDay, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCalendarWeek, faCamera, faCameraRetro, faCampground, faCandyCane, faCannabis, faCapsules, faCar, faCarAlt, faCarBattery, faCarCrash, faCarSide, faCaravan, faCaretDown, faCaretLeft, faCaretRight, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faCaretUp, faCarrot, faCartArrowDown, faCartPlus, faCashRegister, faCat, faCertificate, faChair, faChalkboard, faChalkboardTeacher, faChargingStation, faChartArea, faChartBar, faChartLine, faChartPie, faCheck, faCheckCircle, faCheckDouble, faCheckSquare, faCheese, faChess, faChessBishop, faChessBoard, faChessKing, faChessKnight, faChessPawn, faChessQueen, faChessRook, faChevronCircleDown, faChevronCircleLeft, faChevronCircleRight, faChevronCircleUp, faChevronDown, faChevronLeft, faChevronRight, faChevronUp, faChild, faChurch, faCircle, faCircleNotch, faCity, faClinicMedical, faClipboard, faClipboardCheck, faClipboardList, faClock, faClone, faClosedCaptioning, faCloud, faCloudDownloadAlt, faCloudMeatball, faCloudMoon, faCloudMoonRain, faCloudRain, faCloudShowersHeavy, faCloudSun, faCloudSunRain, faCloudUploadAlt, faCocktail, faCode, faCodeBranch, faCoffee, faCog, faCogs, faCoins, faColumns, faComment, faCommentAlt, faCommentDollar, faCommentDots, faCommentMedical, faCommentSlash, faComments, faCommentsDollar, faCompactDisc, faCompass, faCompress, faCompressAlt, faCompressArrowsAlt, faConciergeBell, faCookie, faCookieBite, faCopy, faCopyright, faCouch, faCreditCard, faCrop, faCropAlt, faCross, faCrosshairs, faCrow, faCrown, faCrutch, faCube, faCubes, faCut, faDatabase, faDeaf, faDemocrat, faDesktop, faDharmachakra, faDiagnoses, faDice, faDiceD20, faDiceD6, faDiceFive, faDiceFour, faDiceOne, faDiceSix, faDiceThree, faDiceTwo, faDigitalTachograph, faDirections, faDisease, faDivide, faDizzy, faDna, faDog, faDollarSign, faDolly, faDollyFlatbed, faDonate, faDoorClosed, faDoorOpen, faDotCircle, faDove, faDownload, faDraftingCompass, faDragon, faDrawPolygon, faDrum, faDrumSteelpan, faDrumstickBite, faDumbbell, faDumpster, faDumpsterFire, faDungeon, faEdit, faEgg, faEject, faEllipsisH, faEllipsisV, faEnvelope, faEnvelopeOpen, faEnvelopeOpenText, faEnvelopeSquare, faEquals, faEraser, faEthernet, faEuroSign, faExchangeAlt, faExclamation, faExclamationCircle, faExclamationTriangle, faExpand, faExpandAlt, faExpandArrowsAlt, faExternalLinkAlt, faExternalLinkSquareAlt, faEye, faEyeDropper, faEyeSlash, faFan, faFastBackward, faFastForward, faFaucet, faFax, faFeather, faFeatherAlt, faFemale, faFighterJet, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileContract, faFileCsv, faFileDownload, faFileExcel, faFileExport, faFileImage, faFileImport, faFileInvoice, faFileInvoiceDollar, faFileMedical, faFileMedicalAlt, faFilePdf, faFilePowerpoint, faFilePrescription, faFileSignature, faFileUpload, faFileVideo, faFileWord, faFill, faFillDrip, faFilm, faFilter, faFingerprint, faFire, faFireAlt, faFireExtinguisher, faFirstAid, faFish, faFistRaised, faFlag, faFlagCheckered, faFlagUsa, faFlask, faFlushed, faFolder, faFolderMinus, faFolderOpen, faFolderPlus, faFont, faFontAwesomeLogoFull, faFootballBall, faForward, faFrog, faFrown, faFrownOpen, faFunnelDollar, faFutbol, faGamepad, faGasPump, faGavel, faGem, faGenderless, faGhost, faGift, faGifts, faGlassCheers, faGlassMartini, faGlassMartiniAlt, faGlassWhiskey, faGlasses, faGlobe, faGlobeAfrica, faGlobeAmericas, faGlobeAsia, faGlobeEurope, faGolfBall, faGopuram, faGraduationCap, faGreaterThan, faGreaterThanEqual, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faGripHorizontal, faGripLines, faGripLinesVertical, faGripVertical, faGuitar, faHSquare, faHamburger, faHammer, faHamsa, faHandHolding, faHandHoldingHeart, faHandHoldingMedical, faHandHoldingUsd, faHandHoldingWater, faHandLizard, faHandMiddleFinger, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSparkles, faHandSpock, faHands, faHandsHelping, faHandsWash, faHandshake, faHandshakeAltSlash, faHandshakeSlash, faHanukiah, faHardHat, faHashtag, faHatCowboy, faHatCowboySide, faHatWizard, faHdd, faHeadSideCough, faHeadSideCoughSlash, faHeadSideMask, faHeadSideVirus, faHeading, faHeadphones, faHeadphonesAlt, faHeadset, faHeart, faHeartBroken, faHeartbeat, faHelicopter, faHighlighter, faHiking, faHippo, faHistory, faHockeyPuck, faHollyBerry, faHome, faHorse, faHorseHead, faHospital, faHospitalAlt, faHospitalSymbol, faHospitalUser, faHotTub, faHotdog, faHotel, faHourglass, faHourglassEnd, faHourglassHalf, faHourglassStart, faHouseDamage, faHouseUser, faHryvnia, faICursor, faIceCream, faIcicles, faIcons, faIdBadge, faIdCard, faIdCardAlt, faIgloo, faImage, faImages, faInbox, faIndent, faIndustry, faInfinity, faInfo, faInfoCircle, faItalic, faJedi, faJoint, faJournalWhills, faKaaba, faKey, faKeyboard, faKhanda, faKiss, faKissBeam, faKissWinkHeart, faKiwiBird, faLandmark, faLanguage, faLaptop, faLaptopCode, faLaptopHouse, faLaptopMedical, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLayerGroup, faLeaf, faLemon, faLessThan, faLessThanEqual, faLevelDownAlt, faLevelUpAlt, faLifeRing, faLightbulb, faLink, faLiraSign, faList, faListAlt, faListOl, faListUl, faLocationArrow, faLock, faLockOpen, faLongArrowAltDown, faLongArrowAltLeft, faLongArrowAltRight, faLongArrowAltUp, faLowVision, faLuggageCart, faLungs, faLungsVirus, faMagic, faMagnet, faMailBulk, faMale, faMap, faMapMarked, faMapMarkedAlt, faMapMarker, faMapMarkerAlt, faMapPin, faMapSigns, faMarker, faMars, faMarsDouble, faMarsStroke, faMarsStrokeH, faMarsStrokeV, faMask, faMedal, faMedkit, faMeh, faMehBlank, faMehRollingEyes, faMemory, faMenorah, faMercury, faMeteor, faMicrochip, faMicrophone, faMicrophoneAlt, faMicrophoneAltSlash, faMicrophoneSlash, faMicroscope, faMinus, faMinusCircle, faMinusSquare, faMitten, faMobile, faMobileAlt, faMoneyBill, faMoneyBillAlt, faMoneyBillWave, faMoneyBillWaveAlt, faMoneyCheck, faMoneyCheckAlt, faMonument, faMoon, faMortarPestle, faMosque, faMotorcycle, faMountain, faMouse, faMousePointer, faMugHot, faMusic, faNetworkWired, faNeuter, faNewspaper, faNotEqual, faNotesMedical, faObjectGroup, faObjectUngroup, faOilCan, faOm, faOtter, faOutdent, faPager, faPaintBrush, faPaintRoller, faPalette, faPallet, faPaperPlane, faPaperclip, faParachuteBox, faParagraph, faParking, faPassport, faPastafarianism, faPaste, faPause, faPauseCircle, faPaw, faPeace, faPen, faPenAlt, faPenFancy, faPenNib, faPenSquare, faPencilAlt, faPencilRuler, faPeopleArrows, faPeopleCarry, faPepperHot, faPercent, faPercentage, faPersonBooth, faPhone, faPhoneAlt, faPhoneSlash, faPhoneSquare, faPhoneSquareAlt, faPhoneVolume, faPhotoVideo, faPiggyBank, faPills, faPizzaSlice, faPlaceOfWorship, faPlane, faPlaneArrival, faPlaneDeparture, faPlaneSlash, faPlay, faPlayCircle, faPlug, faPlus, faPlusCircle, faPlusSquare, faPodcast, faPoll, faPollH, faPoo, faPooStorm, faPoop, faPortrait, faPoundSign, faPowerOff, faPray, faPrayingHands, faPrescription, faPrescriptionBottle, faPrescriptionBottleAlt, faPrint, faProcedures, faProjectDiagram, faPumpMedical, faPumpSoap, faPuzzlePiece, faQrcode, faQuestion, faQuestionCircle, faQuidditch, faQuoteLeft, faQuoteRight, faQuran, faRadiation, faRadiationAlt, faRainbow, faRandom, faReceipt, faRecordVinyl, faRecycle, faRedo, faRedoAlt, faRegistered, faRemoveFormat, faReply, faReplyAll, faRepublican, faRestroom, faRetweet, faRibbon, faRing, faRoad, faRobot, faRocket, faRoute, faRss, faRssSquare, faRubleSign, faRuler, faRulerCombined, faRulerHorizontal, faRulerVertical, faRunning, faRupeeSign, faSadCry, faSadTear, faSatellite, faSatelliteDish, faSave, faSchool, faScrewdriver, faScroll, faSdCard, faSearch, faSearchDollar, faSearchLocation, faSearchMinus, faSearchPlus, faSeedling, faServer, faShapes, faShare, faShareAlt, faShareAltSquare, faShareSquare, faShekelSign, faShieldAlt, faShieldVirus, faShip, faShippingFast, faShoePrints, faShoppingBag, faShoppingBasket, faShoppingCart, faShower, faShuttleVan, faSign, faSignInAlt, faSignLanguage, faSignOutAlt, faSignal, faSignature, faSimCard, faSink, faSitemap, faSkating, faSkiing, faSkiingNordic, faSkull, faSkullCrossbones, faSlash, faSleigh, faSlidersH, faSmile, faSmileBeam, faSmileWink, faSmog, faSmoking, faSmokingBan, faSms, faSnowboarding, faSnowflake, faSnowman, faSnowplow, faSoap, faSocks, faSolarPanel, faSort, faSortAlphaDown, faSortAlphaDownAlt, faSortAlphaUp, faSortAlphaUpAlt, faSortAmountDown, faSortAmountDownAlt, faSortAmountUp, faSortAmountUpAlt, faSortDown, faSortNumericDown, faSortNumericDownAlt, faSortNumericUp, faSortNumericUpAlt, faSortUp, faSpa, faSpaceShuttle, faSpellCheck, faSpider, faSpinner, faSplotch, faSprayCan, faSquare, faSquareFull, faSquareRootAlt, faStamp, faStar, faStarAndCrescent, faStarHalf, faStarHalfAlt, faStarOfDavid, faStarOfLife, faStepBackward, faStepForward, faStethoscope, faStickyNote, faStop, faStopCircle, faStopwatch, faStopwatch20, faStore, faStoreAlt, faStoreAltSlash, faStoreSlash, faStream, faStreetView, faStrikethrough, faStroopwafel, faSubscript, faSubway, faSuitcase, faSuitcaseRolling, faSun, faSuperscript, faSurprise, faSwatchbook, faSwimmer, faSwimmingPool, faSynagogue, faSync, faSyncAlt, faSyringe, faTable, faTableTennis, faTablet, faTabletAlt, faTablets, faTachometerAlt, faTag, faTags, faTape, faTasks, faTaxi, faTeeth, faTeethOpen, faTemperatureHigh, faTemperatureLow, faTenge, faTerminal, faTextHeight, faTextWidth, faTh, faThLarge, faThList, faTheaterMasks, faThermometer, faThermometerEmpty, faThermometerFull, faThermometerHalf, faThermometerQuarter, faThermometerThreeQuarters, faThumbsDown, faThumbsUp, faThumbtack, faTicketAlt, faTimes, faTimesCircle, faTint, faTintSlash, faTired, faToggleOff, faToggleOn, faToilet, faToiletPaper, faToiletPaperSlash, faToolbox, faTools, faTooth, faTorah, faToriiGate, faTractor, faTrademark, faTrafficLight, faTrailer, faTrain, faTram, faTransgender, faTransgenderAlt, faTrash, faTrashAlt, faTrashRestore, faTrashRestoreAlt, faTree, faTrophy, faTruck, faTruckLoading, faTruckMonster, faTruckMoving, faTruckPickup, faTshirt, faTty, faTv, faUmbrella, faUmbrellaBeach, faUnderline, faUndo, faUndoAlt, faUniversalAccess, faUniversity, faUnlink, faUnlock, faUnlockAlt, faUpload, faUser, faUserAlt, faUserAltSlash, faUserAstronaut, faUserCheck, faUserCircle, faUserClock, faUserCog, faUserEdit, faUserFriends, faUserGraduate, faUserInjured, faUserLock, faUserMd, faUserMinus, faUserNinja, faUserNurse, faUserPlus, faUserSecret, faUserShield, faUserSlash, faUserTag, faUserTie, faUserTimes, faUsers, faUsersCog, faUsersSlash, faUtensilSpoon, faUtensils, faVectorSquare, faVenus, faVenusDouble, faVenusMars, faVest, faVestPatches, faVial, faVials, faVideo, faVideoSlash, faVihara, faVirus, faVirusSlash, faViruses, faVoicemail, faVolleyballBall, faVolumeDown, faVolumeMute, faVolumeOff, faVolumeUp, faVoteYea, faVrCardboard, faWalking, faWallet, faWarehouse, faWater, faWaveSquare, faWeight, faWeightHanging, faWheelchair, faWifi, faWind, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore, faWineBottle, faWineGlass, faWineGlassAlt, faWonSign, faWrench, faXRay, faYenSign, faYinYang };\n","import {\n WithModuleProps,\n LinkedVisualConsoleProps,\n AnyObject,\n WithAgentProps\n} from \"../lib/types\";\nimport { modulePropsDecoder, linkedVCPropsDecoder, t } from \"../lib\";\nimport Item, { itemBasePropsDecoder, ItemType, ItemProps } from \"../Item\";\nimport { FormContainer, InputGroup } from \"../Form\";\nimport fontAwesomeIcon from \"../lib/FontAwesomeIcon\";\nimport { faTrashAlt, faPlusCircle } from \"@fortawesome/free-solid-svg-icons\";\n\nexport type ColorCloudProps = {\n type: ItemType.COLOR_CLOUD;\n color: string;\n defaultColor: string;\n colorRanges: {\n color: string;\n fromValue: number;\n toValue: number;\n }[];\n // TODO: Add the rest of the color cloud values?\n} & ItemProps &\n WithAgentProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the static graph props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function colorCloudPropsDecoder(\n data: AnyObject\n): ColorCloudProps | never {\n // TODO: Validate the color.\n if (typeof data.color !== \"string\" || data.color.length === 0) {\n throw new TypeError(\"invalid color.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.COLOR_CLOUD,\n color: data.color,\n defaultColor: data.defaultColor,\n colorRanges: data.colorRanges,\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\n/**\n * Class to add item to the Color cloud item form\n * This item consists of a label and a color type input color.\n * Element default color is stored in the color property\n */\nclass ColorInputGroup extends InputGroup<Partial<ColorCloudProps>> {\n protected createContent(): HTMLElement | HTMLElement[] {\n const generalDiv = document.createElement(\"div\");\n generalDiv.className = \"div-input-group\";\n\n const colorLabel = document.createElement(\"label\");\n colorLabel.textContent = t(\"Default color\");\n\n generalDiv.appendChild(colorLabel);\n\n const ColorInput = document.createElement(\"input\");\n ColorInput.type = \"color\";\n ColorInput.required = true;\n\n ColorInput.value = `${this.currentData.defaultColor ||\n this.initialData.defaultColor ||\n \"#000000\"}`;\n\n ColorInput.addEventListener(\"change\", e => {\n this.updateData({\n defaultColor: (e.target as HTMLInputElement).value\n });\n });\n\n generalDiv.appendChild(ColorInput);\n\n return generalDiv;\n }\n}\n\ntype ColorRanges = ColorCloudProps[\"colorRanges\"];\ntype ColorRange = ColorRanges[0];\n\nclass RangesInputGroup extends InputGroup<Partial<ColorCloudProps>> {\n protected createContent(): HTMLElement | HTMLElement[] {\n const generalDiv = document.createElement(\"div\");\n generalDiv.className = \"div-input-group div-ranges-input-group\";\n\n const rangesLabel = this.createLabel(\"Ranges\");\n\n generalDiv.appendChild(rangesLabel);\n\n const rangesControlsContainer = document.createElement(\"div\");\n const createdRangesContainer = document.createElement(\"div\");\n\n generalDiv.appendChild(createdRangesContainer);\n generalDiv.appendChild(rangesControlsContainer);\n\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n\n let buildRanges: (ranges: ColorRanges) => void;\n\n const handleRangeUpdatePartial = (index: number) => (\n range: ColorRange\n ): void => {\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n this.updateData({\n colorRanges: [\n ...colorRanges.slice(0, index),\n range,\n ...colorRanges.slice(index + 1)\n ]\n });\n };\n\n const handleDelete = (index: number) => () => {\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n const newRanges = [\n ...colorRanges.slice(0, index),\n ...colorRanges.slice(index + 1)\n ];\n\n this.updateData({ colorRanges: newRanges });\n buildRanges(newRanges);\n };\n\n const handleCreate = (range: ColorRange): void => {\n const colorRanges =\n this.currentData.colorRanges || this.initialData.colorRanges || [];\n const newRanges = [...colorRanges, range];\n this.updateData({ colorRanges: newRanges });\n buildRanges(newRanges);\n };\n\n buildRanges = ranges => {\n createdRangesContainer.innerHTML = \"\";\n ranges.forEach((colorRange, index) =>\n createdRangesContainer.appendChild(\n this.rangeContainer(\n colorRange,\n handleRangeUpdatePartial(index),\n handleDelete(index)\n )\n )\n );\n };\n\n buildRanges(colorRanges);\n\n rangesControlsContainer.appendChild(\n this.initialRangeContainer(handleCreate)\n );\n\n return generalDiv;\n }\n\n private initialRangeContainer(onCreate: (range: ColorRange) => void) {\n // TODO: Document\n const initialState = { color: \"#ffffff\" };\n\n let state: Partial<ColorRange> = { ...initialState };\n\n const handleFromValue = (value: ColorRange[\"fromValue\"]): void => {\n state.fromValue = value;\n };\n const handleToValue = (value: ColorRange[\"toValue\"]): void => {\n state.toValue = value;\n };\n const handleColor = (value: ColorRange[\"color\"]): void => {\n state.color = value;\n };\n\n // User defined type guard.\n // Docs: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards\n const isValid = (range: Partial<ColorRange>): range is ColorRange =>\n typeof range.color !== \"undefined\" &&\n typeof range.toValue !== \"undefined\" &&\n typeof range.fromValue !== \"undefined\";\n\n const rangesContainer = document.createElement(\"div\");\n\n // Div From value.\n const rangesContainerFromValue = document.createElement(\"div\");\n const rangesLabelFromValue = this.createLabel(\"From Value\");\n const rangesInputFromValue = this.createInputNumber(null, handleFromValue);\n rangesContainerFromValue.appendChild(rangesLabelFromValue);\n rangesContainerFromValue.appendChild(rangesInputFromValue);\n rangesContainer.appendChild(rangesContainerFromValue);\n\n // Div To Value.\n const rangesDivContainerToValue = document.createElement(\"div\");\n const rangesLabelToValue = this.createLabel(\"To Value\");\n const rangesInputToValue = this.createInputNumber(null, handleToValue);\n rangesContainerFromValue.appendChild(rangesLabelToValue);\n rangesContainerFromValue.appendChild(rangesInputToValue);\n rangesContainer.appendChild(rangesDivContainerToValue);\n\n // Div Color.\n const rangesDivContainerColor = document.createElement(\"div\");\n const rangesLabelColor = this.createLabel(\"Color\");\n const rangesInputColor = this.createInputColor(\n initialState.color,\n handleColor\n );\n rangesContainerFromValue.appendChild(rangesLabelColor);\n rangesContainerFromValue.appendChild(rangesInputColor);\n rangesContainer.appendChild(rangesDivContainerColor);\n\n // Button delete.\n const createBtn = document.createElement(\"a\");\n createBtn.appendChild(\n fontAwesomeIcon(faPlusCircle, t(\"Create color range\"), {\n size: \"small\",\n color: \"#565656\"\n })\n );\n\n const handleCreate = () => {\n if (isValid(state)) onCreate(state);\n state = initialState;\n rangesInputFromValue.value = `${state.fromValue || \"\"}`;\n rangesInputToValue.value = `${state.toValue || \"\"}`;\n rangesInputColor.value = `${state.color}`;\n };\n\n createBtn.addEventListener(\"click\", handleCreate);\n\n rangesContainer.appendChild(createBtn);\n\n return rangesContainer;\n }\n\n private rangeContainer(\n colorRange: ColorRange,\n onUpdate: (range: ColorRange) => void,\n onDelete: () => void\n ): HTMLDivElement {\n // TODO: Document\n const state = { ...colorRange };\n\n const handleFromValue = (value: ColorRange[\"fromValue\"]): void => {\n state.fromValue = value;\n onUpdate({ ...state });\n };\n const handleToValue = (value: ColorRange[\"toValue\"]): void => {\n state.toValue = value;\n onUpdate({ ...state });\n };\n const handleColor = (value: ColorRange[\"color\"]): void => {\n state.color = value;\n onUpdate({ ...state });\n };\n\n const rangesContainer = document.createElement(\"div\");\n\n // Div From value.\n const rangesContainerFromValue = document.createElement(\"div\");\n const rangesLabelFromValue = this.createLabel(\"From Value\");\n const rangesInputFromValue = this.createInputNumber(\n colorRange.fromValue,\n handleFromValue\n );\n rangesContainerFromValue.appendChild(rangesLabelFromValue);\n rangesContainerFromValue.appendChild(rangesInputFromValue);\n rangesContainer.appendChild(rangesContainerFromValue);\n\n // Div To Value.\n const rangesDivContainerToValue = document.createElement(\"div\");\n const rangesLabelToValue = this.createLabel(\"To Value\");\n const rangesInputToValue = this.createInputNumber(\n colorRange.toValue,\n handleToValue\n );\n rangesContainerFromValue.appendChild(rangesLabelToValue);\n rangesContainerFromValue.appendChild(rangesInputToValue);\n rangesContainer.appendChild(rangesDivContainerToValue);\n\n // Div Color.\n const rangesDivContainerColor = document.createElement(\"div\");\n const rangesLabelColor = this.createLabel(\"Color\");\n const rangesInputColor = this.createInputColor(\n colorRange.color,\n handleColor\n );\n rangesContainerFromValue.appendChild(rangesLabelColor);\n rangesContainerFromValue.appendChild(rangesInputColor);\n rangesContainer.appendChild(rangesDivContainerColor);\n\n // Button delete.\n const deleteBtn = document.createElement(\"a\");\n deleteBtn.appendChild(\n fontAwesomeIcon(faTrashAlt, t(\"Delete color range\"), {\n size: \"small\",\n color: \"#565656\"\n })\n );\n deleteBtn.addEventListener(\"click\", onDelete);\n\n rangesContainer.appendChild(deleteBtn);\n\n return rangesContainer;\n }\n\n private createLabel(text: string): HTMLLabelElement {\n const label = document.createElement(\"label\");\n label.textContent = t(text);\n return label;\n }\n\n private createInputNumber(\n value: number | null,\n onUpdate: (value: number) => void\n ): HTMLInputElement {\n const input = document.createElement(\"input\");\n input.type = \"number\";\n if (value !== null) input.value = `${value}`;\n input.addEventListener(\"change\", e => {\n const value = parseInt((e.target as HTMLInputElement).value);\n if (!isNaN(value)) onUpdate(value);\n });\n\n return input;\n }\n\n private createInputColor(\n value: string | null,\n onUpdate: (value: string) => void\n ): HTMLInputElement {\n const input = document.createElement(\"input\");\n input.type = \"color\";\n if (value !== null) input.value = value;\n input.addEventListener(\"change\", e =>\n onUpdate((e.target as HTMLInputElement).value)\n );\n\n return input;\n }\n}\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport default class ColorCloud extends Item<ColorCloudProps> {\n protected createDomElement(): HTMLElement {\n const container: HTMLDivElement = document.createElement(\"div\");\n container.className = \"color-cloud\";\n\n // Add the SVG.\n container.append(this.createSvgElement());\n\n return container;\n }\n\n public resizeElement(width: number): void {\n super.resizeElement(width, width);\n }\n\n public createSvgElement(): SVGSVGElement {\n const gradientId = `grad_${this.props.id}`;\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n svg.setAttribute(\"viewBox\", \"0 0 100 100\");\n\n // Defs.\n const defs = document.createElementNS(svgNS, \"defs\");\n // Radial gradient.\n const radialGradient = document.createElementNS(svgNS, \"radialGradient\");\n radialGradient.setAttribute(\"id\", gradientId);\n radialGradient.setAttribute(\"cx\", \"50%\");\n radialGradient.setAttribute(\"cy\", \"50%\");\n radialGradient.setAttribute(\"r\", \"50%\");\n radialGradient.setAttribute(\"fx\", \"50%\");\n radialGradient.setAttribute(\"fy\", \"50%\");\n // Stops.\n const stop0 = document.createElementNS(svgNS, \"stop\");\n stop0.setAttribute(\"offset\", \"0%\");\n stop0.setAttribute(\n \"style\",\n `stop-color:${this.props.color};stop-opacity:0.9`\n );\n const stop100 = document.createElementNS(svgNS, \"stop\");\n stop100.setAttribute(\"offset\", \"100%\");\n stop100.setAttribute(\n \"style\",\n `stop-color:${this.props.color};stop-opacity:0`\n );\n // Circle.\n const circle = document.createElementNS(svgNS, \"circle\");\n circle.setAttribute(\"fill\", `url(#${gradientId})`);\n circle.setAttribute(\"cx\", \"50%\");\n circle.setAttribute(\"cy\", \"50%\");\n circle.setAttribute(\"r\", \"50%\");\n\n // Append elements.\n radialGradient.append(stop0, stop100);\n defs.append(radialGradient);\n svg.append(defs, circle);\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n svg.setAttribute(\"opacity\", \"0.2\");\n }\n\n return svg;\n }\n\n /**\n * @override function to add or remove inputsGroups those that are not necessary.\n * Add to:\n * ColorInputGroup\n * RangesInputGroup\n */\n public getFormContainer(): FormContainer {\n return ColorCloud.getFormContainer(this.props);\n }\n\n public static getFormContainer(\n props: Partial<ColorCloudProps>\n ): FormContainer {\n const formContainer = super.getFormContainer(props);\n formContainer.removeInputGroup(\"label\");\n\n formContainer.addInputGroup(new ColorInputGroup(\"color-cloud\", props), 3);\n formContainer.addInputGroup(new RangesInputGroup(\"ranges-cloud\", props), 4);\n\n return formContainer;\n }\n}\n","import { AnyObject, Position, Size, ItemMeta } from \"../lib/types\";\nimport {\n parseIntOr,\n notEmptyStringOr,\n debounce,\n addMovementListener\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\nimport TypedEvent, { Listener, Disposable } from \"../lib/TypedEvent\";\n\nexport interface LineProps extends ItemProps {\n // Overrided properties.\n type: number;\n label: null;\n isLinkEnabled: false;\n parentId: null;\n aclGroupId: null;\n // Custom properties.\n startPosition: Position;\n endPosition: Position;\n lineWidth: number;\n color: string | null;\n viewportOffsetX: number;\n viewportOffsetY: number;\n labelEnd: string;\n labelStart: string;\n linkedEnd: number | null;\n linkedStart: number | null;\n labelEndWidth: number;\n labelEndHeight: number;\n labelStartWidth: number;\n labelStartHeight: number;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function linePropsDecoder(data: AnyObject): LineProps | never {\n const props: LineProps = {\n ...itemBasePropsDecoder({ ...data, width: 1, height: 1 }), // Object spread. It will merge the properties of the two objects.\n type: ItemType.LINE_ITEM,\n label: null,\n isLinkEnabled: false,\n parentId: null,\n aclGroupId: null,\n // Initialize Position & Size.\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n // Custom properties.\n startPosition: {\n x: parseIntOr(data.startX, 0),\n y: parseIntOr(data.startY, 0)\n },\n endPosition: {\n x: parseIntOr(data.endX, 0),\n y: parseIntOr(data.endY, 0)\n },\n lineWidth: parseIntOr(data.lineWidth || data.borderWidth, 1),\n color: notEmptyStringOr(data.borderColor || data.color, null),\n viewportOffsetX: 0,\n viewportOffsetY: 0,\n labelEnd: notEmptyStringOr(data.labelEnd, \"\"),\n labelEndWidth: parseIntOr(data.labelEndWidth, 0),\n linkedEnd: data.linkedEnd,\n linkedStart: data.linkedStart,\n labelEndHeight: parseIntOr(data.labelEndHeight, 0),\n labelStart: notEmptyStringOr(data.labelStart, \"\"),\n labelStartWidth: parseIntOr(data.labelStartWidth, 0),\n labelStartHeight: parseIntOr(data.labelStartHeight, 0)\n };\n\n /*\n * We need to enhance the props with the extracted size and position\n * of the box cause there are missing at the props update. A better\n * solution would be overriding the props setter to do it there, but\n * the language doesn't allow it while targetting ES5.\n * TODO: We need to figure out a more consistent solution.\n */\n\n return {\n ...props,\n // Enhance the props extracting the box size and position.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n ...Line.extractBoxSizeAndPosition(props.startPosition, props.endPosition)\n };\n}\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport interface LineMovedEvent {\n item: Line;\n startPosition: LineProps[\"startPosition\"];\n endPosition: LineProps[\"endPosition\"];\n}\n\nexport default class Line extends Item<LineProps> {\n protected circleRadius = 8;\n // To control if the line movement is enabled.\n protected moveMode: boolean = false;\n // To control if the line is moving.\n protected isMoving: boolean = false;\n\n // Event manager for moved events.\n public readonly lineMovedEventManager = new TypedEvent<LineMovedEvent>();\n // List of references to clean the event listeners.\n protected readonly lineMovedEventDisposables: Disposable[] = [];\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n protected debouncedStartPositionMovementSave = debounce(\n 500, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n const startPosition = { x, y };\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n startPosition,\n endPosition: this.props.endPosition\n });\n }\n );\n // This property will store the function\n // to clean the movement listener.\n protected removeStartPositionMovement: Function | null = null;\n\n /**\n * Start the movement funtionality for the start position.\n * @param element Element to move inside its container.\n */\n protected initStartPositionMovementListener(\n element: HTMLElement,\n container: HTMLElement\n ): void {\n this.removeStartPositionMovement = addMovementListener(\n element,\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n // Calculate the center of the circle.\n x += this.circleRadius - this.props.viewportOffsetX / 2;\n y += this.circleRadius - this.props.viewportOffsetY / 2;\n\n const startPosition = { x, y };\n\n this.isMoving = true;\n this.props = {\n ...this.props,\n startPosition\n };\n\n // Run the end function.\n this.debouncedStartPositionMovementSave(x, y);\n },\n container\n );\n }\n /**\n * Stop the movement fun\n */\n private stopStartPositionMovementListener(): void {\n if (this.removeStartPositionMovement) {\n this.removeStartPositionMovement();\n this.removeStartPositionMovement = null;\n }\n }\n\n // This function will only run the 2nd arg function after the time\n // of the first arg have passed after its last execution.\n protected debouncedEndPositionMovementSave = debounce(\n 500, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n const endPosition = { x, y };\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n endPosition,\n startPosition: this.props.startPosition\n });\n }\n );\n // This property will store the function\n // to clean the movement listener.\n protected removeEndPositionMovement: Function | null = null;\n\n /**\n * End the movement funtionality for the end position.\n * @param element Element to move inside its container.\n */\n protected initEndPositionMovementListener(\n element: HTMLElement,\n container: HTMLElement\n ): void {\n this.removeEndPositionMovement = addMovementListener(\n element,\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n // Calculate the center of the circle.\n x += this.circleRadius - this.props.viewportOffsetX / 2;\n y += this.circleRadius - this.props.viewportOffsetY / 2;\n\n this.isMoving = true;\n this.props = {\n ...this.props,\n endPosition: { x, y }\n };\n\n // Run the end function.\n this.debouncedEndPositionMovementSave(x, y);\n },\n container\n );\n }\n /**\n * Stop the movement function.\n */\n private stopEndPositionMovementListener(): void {\n if (this.removeEndPositionMovement) {\n this.removeEndPositionMovement();\n this.removeEndPositionMovement = null;\n }\n }\n\n /**\n * @override\n */\n public constructor(props: LineProps, meta: ItemMeta) {\n /*\n * We need to override the constructor cause we need to obtain the\n * box size and position from the start and finish points of the line.\n */\n super(\n {\n ...props,\n ...Line.extractBoxSizeAndPosition(\n props.startPosition,\n props.endPosition\n )\n },\n {\n ...meta\n },\n true\n );\n\n this.moveMode = meta.editMode;\n this.init();\n\n super.resizeElement(\n Math.max(props.width, props.viewportOffsetX),\n Math.max(props.height, props.viewportOffsetY)\n );\n }\n\n /**\n * Classic and protected version of the setter of the `props` property.\n * Useful to override it from children classes.\n * @param newProps\n * @override Item.setProps\n */\n public setProps(newProps: LineProps) {\n super.setProps({\n ...newProps,\n ...Line.extractBoxSizeAndPosition(\n newProps.startPosition,\n newProps.endPosition\n )\n });\n }\n\n /**\n * Classic and protected version of the setter of the `meta` property.\n * Useful to override it from children classes.\n * @param newMetadata\n * @override Item.setMeta\n */\n public setMeta(newMetadata: ItemMeta) {\n this.moveMode = newMetadata.editMode;\n super.setMeta({\n ...newMetadata,\n lineMode: true\n });\n }\n\n /**\n * @override\n * To create the item's DOM representation.\n * @return Item.\n */\n protected createDomElement(): HTMLElement {\n const element: HTMLDivElement = document.createElement(\"div\");\n element.className = \"line\";\n\n let {\n x, // Box x\n y, // Box y\n width, // Box width\n height, // Box height\n lineWidth, // Line thickness,\n viewportOffsetX, // viewport width,\n viewportOffsetY, // viewport heigth,\n startPosition, // Line start position\n endPosition, // Line end position\n color // Line color\n } = this.props;\n\n width = width + viewportOffsetX;\n height = height + viewportOffsetY;\n\n const x1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n const x2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n // Set SVG size.\n svg.setAttribute(\"width\", `${width + lineWidth}`);\n svg.setAttribute(\"height\", `${height + lineWidth}`);\n\n const line = document.createElementNS(svgNS, \"line\");\n line.setAttribute(\"x1\", `${x1}`);\n line.setAttribute(\"y1\", `${y1}`);\n line.setAttribute(\"x2\", `${x2}`);\n line.setAttribute(\"y2\", `${y2}`);\n line.setAttribute(\"stroke\", color || \"black\");\n line.setAttribute(\"stroke-width\", `${lineWidth}`);\n\n svg.append(line);\n element.append(svg);\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n if (element.parentElement != null) {\n element.parentElement.style.cursor = \"default\";\n }\n\n let {\n x, // Box x\n y, // Box y\n width, // Box width\n height, // Box height\n lineWidth, // Line thickness\n viewportOffsetX, // viewport width,\n viewportOffsetY, // viewport heigth,\n startPosition, // Line start position\n endPosition, // Line end position\n color // Line color\n } = this.props;\n\n width = width + viewportOffsetX;\n height = height + viewportOffsetY;\n\n const x1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n const x2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const y2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n const svgs = element.getElementsByTagName(\"svg\");\n\n if (svgs.length > 0) {\n const svg = svgs.item(0);\n\n if (svg != null) {\n // Set SVG size.\n svg.setAttribute(\"width\", `${width + lineWidth}`);\n svg.setAttribute(\"height\", `${height + lineWidth}`);\n\n const lines = svg.getElementsByTagNameNS(svgNS, \"line\");\n\n if (lines.length > 0) {\n const line = lines.item(0);\n\n if (line != null) {\n line.setAttribute(\"x1\", `${x1}`);\n line.setAttribute(\"y1\", `${y1}`);\n line.setAttribute(\"x2\", `${x2}`);\n line.setAttribute(\"y2\", `${y2}`);\n line.setAttribute(\"stroke\", color || \"black\");\n line.setAttribute(\"stroke-width\", `${lineWidth}`);\n }\n }\n }\n }\n\n if (this.moveMode) {\n let startCircle: HTMLElement = document.createElement(\"div\");\n let endCircle: HTMLElement = document.createElement(\"div\");\n\n if (this.isMoving) {\n const circlesStart = element.getElementsByClassName(\n \"visual-console-item-line-circle-start\"\n );\n if (circlesStart.length > 0) {\n const circle = circlesStart.item(0) as HTMLElement;\n if (circle) startCircle = circle;\n }\n const circlesEnd = element.getElementsByClassName(\n \"visual-console-item-line-circle-end\"\n );\n if (circlesEnd.length > 0) {\n const circle = circlesEnd.item(0) as HTMLElement;\n if (circle) endCircle = circle;\n }\n }\n\n startCircle.classList.add(\n \"visual-console-item-line-circle\",\n \"visual-console-item-line-circle-start\"\n );\n startCircle.style.width = `${this.circleRadius * 2}px`;\n startCircle.style.height = `${this.circleRadius * 2}px`;\n startCircle.style.borderRadius = \"50%\";\n startCircle.style.backgroundColor = `${color}`;\n startCircle.style.position = \"absolute\";\n startCircle.style.left = `${x1 - this.circleRadius}px`;\n startCircle.style.top = `${y1 - this.circleRadius}px`;\n startCircle.style.cursor = `move`;\n\n endCircle.classList.add(\n \"visual-console-item-line-circle\",\n \"visual-console-item-line-circle-end\"\n );\n endCircle.style.width = `${this.circleRadius * 2}px`;\n endCircle.style.height = `${this.circleRadius * 2}px`;\n endCircle.style.borderRadius = \"50%\";\n endCircle.style.backgroundColor = `${color}`;\n endCircle.style.position = \"absolute\";\n endCircle.style.left = `${x2 - this.circleRadius}px`;\n endCircle.style.top = `${y2 - this.circleRadius}px`;\n endCircle.style.cursor = `move`;\n\n if (element.parentElement !== null) {\n const circles = element.parentElement.getElementsByClassName(\n \"visual-console-item-line-circle\"\n );\n while (circles.length > 0) {\n const circle = circles.item(0);\n if (circle) circle.remove();\n }\n\n element.parentElement.appendChild(startCircle);\n element.parentElement.appendChild(endCircle);\n }\n\n // Init the movement listeners.\n this.initStartPositionMovementListener(\n startCircle,\n this.elementRef.parentElement as HTMLElement\n );\n this.initEndPositionMovementListener(\n endCircle,\n this.elementRef.parentElement as HTMLElement\n );\n } else if (!this.moveMode) {\n this.stopStartPositionMovementListener();\n // Remove circles.\n if (element.parentElement !== null) {\n const circles = element.parentElement.getElementsByClassName(\n \"visual-console-item-line-circle\"\n );\n\n while (circles.length > 0) {\n const circle = circles.item(0);\n if (circle) circle.remove();\n }\n }\n } else {\n this.stopStartPositionMovementListener();\n }\n }\n\n /**\n * Extract the size and position of the box from\n * the start and the finish of the line.\n * @param props Item properties.\n */\n public static extractBoxSizeAndPosition(\n startPosition: Position,\n endPosition: Position\n ): Size & Position {\n return {\n width: Math.abs(startPosition.x - endPosition.x),\n height: Math.abs(startPosition.y - endPosition.y),\n x: Math.min(startPosition.x, endPosition.x),\n y: Math.min(startPosition.y, endPosition.y)\n };\n }\n\n /**\n * Update the position into the properties and move the DOM container.\n * @param x Horizontal axis position.\n * @param y Vertical axis position.\n * @override item function\n */\n public move(x: number, y: number): void {\n super.moveElement(x, y);\n const startIsLeft =\n this.props.startPosition.x - this.props.endPosition.x <= 0;\n const startIsTop =\n this.props.startPosition.y - this.props.endPosition.y <= 0;\n\n const start = {\n x: startIsLeft ? x : this.props.width + x,\n y: startIsTop ? y : this.props.height + y\n };\n\n const end = {\n x: startIsLeft ? this.props.width + x : x,\n y: startIsTop ? this.props.height + y : y\n };\n\n this.props = {\n ...this.props,\n startPosition: start,\n endPosition: end\n };\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n * @override Item.remove\n */\n public remove(): void {\n // Clear the item's event listeners.\n this.stopStartPositionMovementListener();\n // Call the parent's .remove()\n super.remove();\n }\n\n /**\n * To add an event handler to the movement of visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n *\n * @override Item.onMoved\n */\n public onLineMovementFinished(\n listener: Listener<LineMovedEvent>\n ): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.lineMovedEventManager.on(listener);\n this.lineMovedEventDisposables.push(disposable);\n\n return disposable;\n }\n}\n","import { AnyObject, Position, ItemMeta } from \"../lib/types\";\nimport { debounce, notEmptyStringOr, parseIntOr } from \"../lib\";\nimport { ItemType } from \"../Item\";\nimport Line, { LineProps, linePropsDecoder } from \"./Line\";\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport interface NetworkLinkProps extends LineProps {\n // Overrided properties.\n type: number;\n labelStart: string;\n labelEnd: string;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function networkLinkPropsDecoder(\n data: AnyObject\n): NetworkLinkProps | never {\n return {\n ...linePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.NETWORK_LINK,\n viewportOffsetX: 0,\n viewportOffsetY: 0,\n labelEnd: notEmptyStringOr(data.labelEnd, \"\"),\n labelEndWidth: parseIntOr(data.labelEndWidth, 0),\n labelEndHeight: parseIntOr(data.labelEndHeight, 0),\n labelStart: notEmptyStringOr(data.labelStart, \"\"),\n labelStartWidth: parseIntOr(data.labelStartWidth, 0),\n labelStartHeight: parseIntOr(data.labelStartHeight, 0)\n };\n}\n\nexport default class NetworkLink extends Line {\n /**\n * @override\n */\n public constructor(props: NetworkLinkProps, meta: ItemMeta) {\n /*\n * We need to override the constructor cause we need to obtain the\n * box size and position from the start and finish points of the line.\n */\n super(\n {\n ...props\n },\n {\n ...meta\n }\n );\n\n this.render();\n }\n\n /**\n * @override\n */\n protected debouncedStartPositionMovementSave = debounce(\n 50, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n\n const startPosition = { x, y };\n\n // Re-Paint after move.\n this.render();\n\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n startPosition,\n endPosition: this.props.endPosition\n });\n }\n );\n\n protected debouncedEndPositionMovementSave = debounce(\n 50, // ms.\n (x: Position[\"x\"], y: Position[\"y\"]) => {\n this.isMoving = false;\n const endPosition = { x, y };\n\n // Re-Paint after move.\n this.render();\n\n // Emit the movement event.\n this.lineMovedEventManager.emit({\n item: this,\n endPosition,\n startPosition: this.props.startPosition\n });\n }\n );\n\n protected updateDomElement(element: HTMLElement): void {\n if (this.itemProps.ratio != null) {\n this.itemProps.x /= this.itemProps.ratio;\n this.itemProps.y /= this.itemProps.ratio;\n }\n\n super.updateDomElement(element);\n\n let {\n x, // Box x\n y, // Box y\n lineWidth, // Line thickness\n viewportOffsetX, // viewport width,\n viewportOffsetY, // viewport heigth,\n startPosition, // Line start position\n endPosition, // Line end position\n color, // Line color\n labelEnd,\n labelStart,\n labelEndWidth,\n labelEndHeight,\n labelStartWidth,\n labelStartHeight\n } = this.props;\n\n if (this.itemProps.ratio != null) {\n this.itemProps.x *= this.itemProps.ratio;\n this.itemProps.y *= this.itemProps.ratio;\n }\n\n const svgs = element.getElementsByTagName(\"svg\");\n let line;\n let svg;\n\n if (svgs.length > 0) {\n svg = svgs.item(0);\n\n if (svg != null) {\n // Set SVG size.\n const lines = svg.getElementsByTagNameNS(svgNS, \"line\");\n let groups = svg.getElementsByTagNameNS(svgNS, \"g\");\n while (groups.length > 0) {\n groups[0].remove();\n }\n\n if (lines.length > 0) {\n line = lines.item(0);\n }\n }\n } else {\n // No line or svg, no more actions are required.\n return;\n }\n\n if (svg == null || line == null) {\n // No more actionas are required.\n return;\n }\n\n // Font size and text adjustments.\n const fontsize = 10;\n const adjustment = 25;\n\n const lineX1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const lineY1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n const lineX2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n const lineY2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n let x1 = startPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n let y1 = startPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n let x2 = endPosition.x - x + lineWidth / 2 + viewportOffsetX / 2;\n let y2 = endPosition.y - y + lineWidth / 2 + viewportOffsetY / 2;\n\n // Calculate angle (rotation).\n let rad = Math.atan2(lineY2 - lineY1, lineX2 - lineX1);\n let g = (rad * 180) / Math.PI;\n\n // Calculate effective 'text' box sizes.\n const fontheight = 25;\n if (labelStartWidth <= 0) {\n let lines = labelStart.split(\"<br>\");\n labelStartWidth = 0;\n lines.forEach(l => {\n if (l.length > labelStartWidth) {\n labelStartWidth = l.length * fontsize;\n }\n });\n if (labelStartHeight <= 0) {\n labelStartHeight = lines.length * fontheight;\n }\n }\n\n if (labelEndWidth <= 0) {\n let lines = labelEnd.split(\"<br>\");\n labelEndWidth = 0;\n lines.forEach(l => {\n if (l.length > labelEndWidth) {\n labelEndWidth = l.length * fontsize;\n }\n });\n if (labelEndHeight <= 0) {\n labelEndHeight = lines.length * fontheight;\n }\n }\n\n if (x1 < x2) {\n // x1 on left of x2.\n x1 += adjustment;\n x2 -= adjustment + labelEndWidth;\n }\n\n if (x1 > x2) {\n // x1 on right of x2.\n x1 -= adjustment + labelStartWidth;\n x2 += adjustment;\n }\n\n if (y1 < y2) {\n // y1 on y2.\n y1 += adjustment;\n y2 -= adjustment + labelEndHeight;\n }\n\n if (y1 > y2) {\n // y1 under y2.\n y1 -= adjustment + labelStartHeight;\n y2 += adjustment;\n }\n\n if (typeof color == \"undefined\") {\n color = \"#000\";\n }\n\n // Clean.\n if (element.parentElement !== null) {\n const labels = element.parentElement.getElementsByClassName(\n \"vc-item-nl-label\"\n );\n while (labels.length > 0) {\n const label = labels.item(0);\n if (label) label.remove();\n }\n\n const arrows = element.parentElement.getElementsByClassName(\n \"vc-item-nl-arrow\"\n );\n while (arrows.length > 0) {\n const arrow = arrows.item(0);\n if (arrow) arrow.remove();\n }\n }\n\n let arrowSize = lineWidth * 2;\n\n let arrowPosX = lineX1 + (lineX2 - lineX1) / 2 - arrowSize;\n let arrowPosY = lineY1 + (lineY2 - lineY1) / 2 - arrowSize;\n\n let arrowStart: HTMLElement = document.createElement(\"div\");\n arrowStart.classList.add(\"vc-item-nl-arrow\");\n arrowStart.style.position = \"absolute\";\n arrowStart.style.border = `${arrowSize}px solid transparent`;\n arrowStart.style.borderBottom = `${arrowSize}px solid ${color}`;\n arrowStart.style.left = `${arrowPosX}px`;\n arrowStart.style.top = `${arrowPosY}px`;\n arrowStart.style.transform = `rotate(${90 + g}deg)`;\n\n let arrowEnd: HTMLElement = document.createElement(\"div\");\n arrowEnd.classList.add(\"vc-item-nl-arrow\");\n arrowEnd.style.position = \"absolute\";\n arrowEnd.style.border = `${arrowSize}px solid transparent`;\n arrowEnd.style.borderBottom = `${arrowSize}px solid ${color}`;\n arrowEnd.style.left = `${arrowPosX}px`;\n arrowEnd.style.top = `${arrowPosY}px`;\n arrowEnd.style.transform = `rotate(${270 + g}deg)`;\n\n if (element.parentElement !== null) {\n element.parentElement.appendChild(arrowStart);\n element.parentElement.appendChild(arrowEnd);\n }\n\n if (labelStart != \"\") {\n let htmlLabelStart: HTMLElement = document.createElement(\"div\");\n\n try {\n htmlLabelStart.innerHTML = labelStart;\n htmlLabelStart.style.position = \"absolute\";\n htmlLabelStart.style.left = `${x1}px`;\n htmlLabelStart.style.top = `${y1}px`;\n htmlLabelStart.style.width = `${labelStartWidth}px`;\n htmlLabelStart.style.border = `2px solid ${color}`;\n\n htmlLabelStart.classList.add(\"vc-item-nl-label\", \"label-start\");\n } catch (error) {\n console.error(error);\n }\n\n if (element.parentElement !== null) {\n element.parentElement.appendChild(htmlLabelStart);\n }\n }\n\n if (labelEnd != \"\") {\n let htmlLabelEnd: HTMLElement = document.createElement(\"div\");\n\n try {\n htmlLabelEnd.innerHTML = labelEnd;\n htmlLabelEnd.style.position = \"absolute\";\n htmlLabelEnd.style.left = `${x2}px`;\n htmlLabelEnd.style.top = `${y2}px`;\n htmlLabelEnd.style.width = `${labelEndWidth}px`;\n htmlLabelEnd.style.border = `2px solid ${color}`;\n\n htmlLabelEnd.classList.add(\"vc-item-nl-label\", \"label-end\");\n } catch (error) {\n console.error(error);\n }\n\n if (element.parentElement !== null) {\n element.parentElement.appendChild(htmlLabelEnd);\n }\n }\n }\n}\n","import { LinkedVisualConsoleProps, AnyObject } from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n parseIntOr,\n notEmptyStringOr,\n stringIsEmpty,\n decodeBase64,\n parseBoolean,\n t\n} from \"../lib\";\nimport Item, { ItemProps, itemBasePropsDecoder, ItemType } from \"../Item\";\n\nexport type GroupProps = {\n type: ItemType.GROUP_ITEM;\n groupId: number;\n imageSrc: string | null; // URL?\n statusImageSrc: string | null;\n showStatistics: boolean;\n html?: string | null;\n} & ItemProps &\n LinkedVisualConsoleProps;\n\nfunction extractHtml(data: AnyObject): string | null {\n if (!stringIsEmpty(data.html)) return data.html;\n if (!stringIsEmpty(data.encodedHtml)) return decodeBase64(data.encodedHtml);\n return null;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the group props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function groupPropsDecoder(data: AnyObject): GroupProps | never {\n if (\n (typeof data.imageSrc !== \"string\" || data.imageSrc.length === 0) &&\n data.encodedHtml === null\n ) {\n throw new TypeError(\"invalid image src.\");\n }\n if (parseIntOr(data.groupId, null) === null) {\n throw new TypeError(\"invalid group Id.\");\n }\n\n const showStatistics = parseBoolean(data.showStatistics);\n const html = showStatistics ? extractHtml(data) : null;\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.GROUP_ITEM,\n groupId: parseInt(data.groupId),\n imageSrc: notEmptyStringOr(data.imageSrc, null),\n statusImageSrc: notEmptyStringOr(data.statusImageSrc, null),\n showStatistics,\n html,\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\nexport default class Group extends Item<GroupProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"group\";\n\n if (!this.props.showStatistics && this.props.statusImageSrc !== null) {\n // Icon with status.\n element.style.backgroundImage = `url(${this.props.statusImageSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n } else if (this.props.showStatistics && this.props.html != null) {\n // Stats table.\n element.style.backgroundImage = \"none\";\n element.innerHTML = this.props.html;\n }\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (!this.props.showStatistics && this.props.statusImageSrc !== null) {\n // Icon with status.\n element.style.backgroundImage = `url(${this.props.statusImageSrc})`;\n element.style.backgroundRepeat = \"no-repeat\";\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n element.innerHTML = \"\";\n } else if (this.props.showStatistics && this.props.html != null) {\n // Stats table.\n element.style.backgroundImage = \"none\";\n element.innerHTML = this.props.html;\n }\n }\n}\n","import \"./styles.css\";\n\nimport {\n LinkedVisualConsoleProps,\n AnyObject,\n Size,\n ItemMeta\n} from \"../../lib/types\";\nimport {\n linkedVCPropsDecoder,\n parseIntOr,\n parseBoolean,\n prefixedCssRules,\n notEmptyStringOr,\n humanDate,\n humanTime,\n t\n} from \"../../lib\";\nimport Item, { ItemProps, itemBasePropsDecoder, ItemType } from \"../../Item\";\n\nexport type ClockProps = {\n type: ItemType.CLOCK;\n clockType: \"analogic\" | \"digital\";\n clockFormat: \"datetime\" | \"time\";\n clockTimezone: string;\n clockTimezoneOffset: number; // Offset of the timezone to UTC in seconds.\n showClockTimezone: boolean;\n color?: string | null;\n} & ItemProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param clockType Raw value.\n */\nconst parseClockType = (clockType: unknown): ClockProps[\"clockType\"] => {\n switch (clockType) {\n case \"analogic\":\n case \"digital\":\n return clockType;\n default:\n return \"analogic\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw unknown value.\n * @param clockFormat Raw value.\n */\nconst parseClockFormat = (clockFormat: unknown): ClockProps[\"clockFormat\"] => {\n switch (clockFormat) {\n case \"datetime\":\n case \"time\":\n return clockFormat;\n default:\n return \"datetime\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the clock props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function clockPropsDecoder(data: AnyObject): ClockProps | never {\n if (\n typeof data.clockTimezone !== \"string\" ||\n data.clockTimezone.length === 0\n ) {\n throw new TypeError(\"invalid timezone.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.CLOCK,\n clockType: parseClockType(data.clockType),\n clockFormat: parseClockFormat(data.clockFormat),\n clockTimezone: data.clockTimezone,\n clockTimezoneOffset: parseIntOr(data.clockTimezoneOffset, 0),\n showClockTimezone: parseBoolean(data.showClockTimezone),\n color: notEmptyStringOr(data.color, null),\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Clock extends Item<ClockProps> {\n public static readonly TICK_INTERVAL = 1000; // In ms.\n private intervalRef: number | null = null;\n\n public constructor(props: ClockProps, meta: ItemMeta) {\n // Call the superclass constructor.\n super(props, meta);\n\n /* The item is already loaded and inserted into the DOM.\n * The class properties are now initialized.\n * Now you can modify the item, add event handlers, timers, etc.\n */\n\n /* The use of the arrow function is important here. startTick will\n * use the function passed as an argument to call the global setInterval\n * function. The interval, timeout or event functions, among other, are\n * called into another execution loop and using a different context.\n * The arrow functions, unlike the classic functions, doesn't create\n * their own context (this), so their context at execution time will be\n * use the current context at the declaration time.\n * http://es6-features.org/#Lexicalthis\n */\n this.startTick(\n () => {\n // Replace the old element with the updated date.\n this.childElementRef.innerHTML = this.createClock().innerHTML;\n },\n /* The analogic clock doesn't need to tick,\n * but it will be refreshed every 20 seconds\n * to avoid a desync caused by page freezes.\n */\n this.props.clockType === \"analogic\" ? 20000 : Clock.TICK_INTERVAL\n );\n }\n\n /**\n * Wrap a window.clearInterval call.\n */\n private stopTick(): void {\n if (this.intervalRef !== null) {\n window.clearInterval(this.intervalRef);\n this.intervalRef = null;\n }\n }\n\n /**\n * Wrap a window.setInterval call.\n * @param handler Function to be called every time the interval\n * timer is reached.\n * @param interval Number in milliseconds for the interval timer.\n */\n private startTick(\n handler: TimerHandler,\n interval: number = Clock.TICK_INTERVAL\n ): void {\n this.stopTick();\n this.intervalRef = window.setInterval(handler, interval);\n }\n\n /**\n * Create a element which contains the DOM representation of the item.\n * @return DOM Element.\n * @override\n */\n protected createDomElement(): HTMLElement | never {\n return this.createClock();\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n const { width: newWidth, height: newHeight } = this.getElementSize(\n this.props.width,\n this.props.height\n );\n\n if (this.props.clockType === \"digital\") {\n if (this.meta.isBeingResized === false) {\n super.resizeElement(this.props.width, this.props.height);\n }\n element.classList.replace(\"analogic-clock\", \"digital-clock\");\n } else {\n if (this.meta.isBeingResized === false) {\n super.resizeElement(newWidth, newHeight);\n }\n element.classList.replace(\"digital-clock\", \"analogic-clock\");\n }\n element.innerHTML = this.createDomElement().innerHTML;\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n * @override\n */\n public remove(): void {\n // Clear the interval.\n this.stopTick();\n // Call to the parent clean function.\n super.remove();\n }\n\n /**\n * @override Item.resizeElement\n * Resize the DOM content container.\n * @param width\n * @param height\n */\n public resizeElement(width: number, height: number): void {\n // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n const { width: newWidth, height: newHeight } = this.getElementSize(\n width,\n height\n );\n\n // Re-render the item to force it calculate a new font size.\n if (this.props.clockType === \"digital\") {\n super.resizeElement(width, height);\n // Replace the old element with the updated date.\n //this.childElementRef.innerHTML = this.createClock().innerHTML;\n } else {\n super.resizeElement(newWidth, newHeight);\n }\n }\n\n /**\n * Create a element which contains a representation of a clock.\n * It choose between the clock types.\n * @return DOM Element.\n * @throws Error.\n */\n private createClock(): HTMLElement | never {\n switch (this.props.clockType) {\n case \"analogic\":\n return this.createAnalogicClock();\n case \"digital\":\n return this.createDigitalClock();\n default:\n throw new Error(\"invalid clock type.\");\n }\n }\n\n /**\n * Create a element which contains a representation of an analogic clock.\n * @return DOM Element.\n */\n private createAnalogicClock(): HTMLElement {\n const svgNS = \"http://www.w3.org/2000/svg\";\n const colors = {\n watchFace: \"#FFFFF0\",\n watchFaceBorder: \"#242124\",\n mark: \"#242124\",\n handDark: \"#242124\",\n handLight: \"#525252\",\n secondHand: \"#DC143C\"\n };\n\n const { width, height } = this.getElementSize(); // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n\n // Calculate font size to adapt the font to the item size.\n const baseTimeFontSize = 20; // Per 100px of width.\n const dateFontSizeMultiplier = 0.5;\n const dateFontSize =\n (baseTimeFontSize * dateFontSizeMultiplier * width) / 100;\n\n const div = document.createElement(\"div\");\n div.className = \"analogic-clock\";\n div.style.width = `${width}px`;\n div.style.height = `${height}px`;\n\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n svg.setAttribute(\"viewBox\", \"0 0 100 100\");\n\n // Clock face.\n const clockFace = document.createElementNS(svgNS, \"g\");\n clockFace.setAttribute(\"class\", \"clockface\");\n const clockFaceBackground = document.createElementNS(svgNS, \"circle\");\n clockFaceBackground.setAttribute(\"cx\", \"50\");\n clockFaceBackground.setAttribute(\"cy\", \"50\");\n clockFaceBackground.setAttribute(\"r\", \"48\");\n clockFaceBackground.setAttribute(\"fill\", colors.watchFace);\n clockFaceBackground.setAttribute(\"stroke\", colors.watchFaceBorder);\n clockFaceBackground.setAttribute(\"stroke-width\", \"2\");\n clockFaceBackground.setAttribute(\"stroke-linecap\", \"round\");\n // Insert the clockface background into the clockface group.\n clockFace.append(clockFaceBackground);\n\n // Timezone complication.\n const city = this.getHumanTimezone();\n if (city.length > 0) {\n const timezoneComplication = document.createElementNS(svgNS, \"text\");\n timezoneComplication.setAttribute(\"text-anchor\", \"middle\");\n timezoneComplication.setAttribute(\"font-size\", \"8\");\n timezoneComplication.setAttribute(\n \"transform\",\n \"translate(30 50) rotate(90)\" // Rotate to counter the clock rotation.\n );\n timezoneComplication.setAttribute(\"fill\", colors.mark);\n timezoneComplication.textContent = city;\n clockFace.append(timezoneComplication);\n }\n\n // Marks group.\n const marksGroup = document.createElementNS(svgNS, \"g\");\n marksGroup.setAttribute(\"class\", \"marks\");\n // Build the 12 hours mark.\n const mainMarkGroup = document.createElementNS(svgNS, \"g\");\n mainMarkGroup.setAttribute(\"class\", \"mark\");\n mainMarkGroup.setAttribute(\"transform\", \"translate(50 50)\");\n const mark1a = document.createElementNS(svgNS, \"line\");\n mark1a.setAttribute(\"x1\", \"36\");\n mark1a.setAttribute(\"y1\", \"0\");\n mark1a.setAttribute(\"x2\", \"46\");\n mark1a.setAttribute(\"y2\", \"0\");\n mark1a.setAttribute(\"stroke\", colors.mark);\n mark1a.setAttribute(\"stroke-width\", \"5\");\n const mark1b = document.createElementNS(svgNS, \"line\");\n mark1b.setAttribute(\"x1\", \"36\");\n mark1b.setAttribute(\"y1\", \"0\");\n mark1b.setAttribute(\"x2\", \"46\");\n mark1b.setAttribute(\"y2\", \"0\");\n mark1b.setAttribute(\"stroke\", colors.watchFace);\n mark1b.setAttribute(\"stroke-width\", \"1\");\n // Insert the 12 mark lines into their group.\n mainMarkGroup.append(mark1a, mark1b);\n // Insert the main mark into the marks group.\n marksGroup.append(mainMarkGroup);\n // Build the rest of the marks.\n for (let i = 1; i < 60; i++) {\n const mark = document.createElementNS(svgNS, \"line\");\n mark.setAttribute(\"y1\", \"0\");\n mark.setAttribute(\"y2\", \"0\");\n mark.setAttribute(\"stroke\", colors.mark);\n mark.setAttribute(\"transform\", `translate(50 50) rotate(${i * 6})`);\n\n if (i % 5 === 0) {\n mark.setAttribute(\"x1\", \"38\");\n mark.setAttribute(\"x2\", \"46\");\n mark.setAttribute(\"stroke-width\", i % 15 === 0 ? \"2\" : \"1\");\n } else {\n mark.setAttribute(\"x1\", \"42\");\n mark.setAttribute(\"x2\", \"46\");\n mark.setAttribute(\"stroke-width\", \"0.5\");\n }\n\n // Insert the mark into the marks group.\n marksGroup.append(mark);\n }\n\n /* Clock hands */\n\n // Hour hand.\n const hourHand = document.createElementNS(svgNS, \"g\");\n hourHand.setAttribute(\"class\", \"hour-hand\");\n hourHand.setAttribute(\"transform\", \"translate(50 50)\");\n // This will go back and will act like a border.\n const hourHandA = document.createElementNS(svgNS, \"line\");\n hourHandA.setAttribute(\"class\", \"hour-hand-a\");\n hourHandA.setAttribute(\"x1\", \"0\");\n hourHandA.setAttribute(\"y1\", \"0\");\n hourHandA.setAttribute(\"x2\", \"30\");\n hourHandA.setAttribute(\"y2\", \"0\");\n hourHandA.setAttribute(\"stroke\", colors.handLight);\n hourHandA.setAttribute(\"stroke-width\", \"4\");\n hourHandA.setAttribute(\"stroke-linecap\", \"round\");\n // This will go in front of the previous line.\n const hourHandB = document.createElementNS(svgNS, \"line\");\n hourHandB.setAttribute(\"class\", \"hour-hand-b\");\n hourHandB.setAttribute(\"x1\", \"0\");\n hourHandB.setAttribute(\"y1\", \"0\");\n hourHandB.setAttribute(\"x2\", \"29.9\");\n hourHandB.setAttribute(\"y2\", \"0\");\n hourHandB.setAttribute(\"stroke\", colors.handDark);\n hourHandB.setAttribute(\"stroke-width\", \"3.1\");\n hourHandB.setAttribute(\"stroke-linecap\", \"round\");\n // Append the elements to finish the hour hand.\n hourHand.append(hourHandA, hourHandB);\n\n // Minute hand.\n const minuteHand = document.createElementNS(svgNS, \"g\");\n minuteHand.setAttribute(\"class\", \"minute-hand\");\n minuteHand.setAttribute(\"transform\", \"translate(50 50)\");\n // This will go back and will act like a border.\n const minuteHandA = document.createElementNS(svgNS, \"line\");\n minuteHandA.setAttribute(\"class\", \"minute-hand-a\");\n minuteHandA.setAttribute(\"x1\", \"0\");\n minuteHandA.setAttribute(\"y1\", \"0\");\n minuteHandA.setAttribute(\"x2\", \"40\");\n minuteHandA.setAttribute(\"y2\", \"0\");\n minuteHandA.setAttribute(\"stroke\", colors.handLight);\n minuteHandA.setAttribute(\"stroke-width\", \"2\");\n minuteHandA.setAttribute(\"stroke-linecap\", \"round\");\n // This will go in front of the previous line.\n const minuteHandB = document.createElementNS(svgNS, \"line\");\n minuteHandB.setAttribute(\"class\", \"minute-hand-b\");\n minuteHandB.setAttribute(\"x1\", \"0\");\n minuteHandB.setAttribute(\"y1\", \"0\");\n minuteHandB.setAttribute(\"x2\", \"39.9\");\n minuteHandB.setAttribute(\"y2\", \"0\");\n minuteHandB.setAttribute(\"stroke\", colors.handDark);\n minuteHandB.setAttribute(\"stroke-width\", \"1.5\");\n minuteHandB.setAttribute(\"stroke-linecap\", \"round\");\n const minuteHandPin = document.createElementNS(svgNS, \"circle\");\n minuteHandPin.setAttribute(\"r\", \"3\");\n minuteHandPin.setAttribute(\"fill\", colors.handDark);\n // Append the elements to finish the minute hand.\n minuteHand.append(minuteHandA, minuteHandB, minuteHandPin);\n\n // Second hand.\n const secondHand = document.createElementNS(svgNS, \"g\");\n secondHand.setAttribute(\"class\", \"second-hand\");\n secondHand.setAttribute(\"transform\", \"translate(50 50)\");\n const secondHandBar = document.createElementNS(svgNS, \"line\");\n secondHandBar.setAttribute(\"x1\", \"0\");\n secondHandBar.setAttribute(\"y1\", \"0\");\n secondHandBar.setAttribute(\"x2\", \"46\");\n secondHandBar.setAttribute(\"y2\", \"0\");\n secondHandBar.setAttribute(\"stroke\", colors.secondHand);\n secondHandBar.setAttribute(\"stroke-width\", \"1\");\n secondHandBar.setAttribute(\"stroke-linecap\", \"round\");\n const secondHandPin = document.createElementNS(svgNS, \"circle\");\n secondHandPin.setAttribute(\"r\", \"2\");\n secondHandPin.setAttribute(\"fill\", colors.secondHand);\n // Append the elements to finish the second hand.\n secondHand.append(secondHandBar, secondHandPin);\n\n // Pin.\n const pin = document.createElementNS(svgNS, \"circle\");\n pin.setAttribute(\"cx\", \"50\");\n pin.setAttribute(\"cy\", \"50\");\n pin.setAttribute(\"r\", \"0.3\");\n pin.setAttribute(\"fill\", colors.handDark);\n\n // Get the hand angles.\n const date = this.getOriginDate();\n const seconds = date.getSeconds();\n const minutes = date.getMinutes();\n const hours = date.getHours();\n const secAngle = (360 / 60) * seconds;\n const minuteAngle = (360 / 60) * minutes + (360 / 60) * (seconds / 60);\n const hourAngle = (360 / 12) * hours + (360 / 12) * (minutes / 60);\n // Set the clock time by moving the hands.\n hourHand.setAttribute(\"transform\", `translate(50 50) rotate(${hourAngle})`);\n minuteHand.setAttribute(\n \"transform\",\n `translate(50 50) rotate(${minuteAngle})`\n );\n secondHand.setAttribute(\n \"transform\",\n `translate(50 50) rotate(${secAngle})`\n );\n\n // Build the clock\n svg.append(clockFace, marksGroup, hourHand, minuteHand, secondHand, pin);\n // Rotate the clock to its normal position.\n svg.setAttribute(\"transform\", \"rotate(-90)\");\n\n /* Add the animation declaration to the container.\n * Since the animation keyframes need to know the\n * start angle, this angle is dynamic (current time),\n * and we can't edit keyframes through javascript\n * safely and with backwards compatibility, we need\n * to inject it.\n */\n div.innerHTML = `\n <style>\n @keyframes rotate-hour {\n from {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${hourAngle}deg)`\n ).join(\"\\n\")}\n }\n to {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${hourAngle + 360}deg)`\n ).join(\"\\n\")}\n }\n }\n @keyframes rotate-minute {\n from {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${minuteAngle}deg)`\n ).join(\"\\n\")}\n }\n to {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${minuteAngle + 360}deg)`\n ).join(\"\\n\")}\n }\n }\n @keyframes rotate-second {\n from {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${secAngle}deg)`\n ).join(\"\\n\")}\n }\n to {\n ${prefixedCssRules(\n \"transform\",\n `translate(50px, 50px) rotate(${secAngle + 360}deg)`\n ).join(\"\\n\")}\n }\n }\n </style>\n `;\n // Add the clock to the container\n div.append(svg);\n\n // Date.\n if (this.props.clockFormat === \"datetime\") {\n const dateElem: HTMLSpanElement = document.createElement(\"span\");\n dateElem.className = \"date\";\n dateElem.textContent = humanDate(date, \"default\");\n dateElem.style.fontSize = `${dateFontSize}px`;\n if (this.props.color) dateElem.style.color = this.props.color;\n div.append(dateElem);\n }\n\n return div;\n }\n\n /**\n * Create a element which contains a representation of a digital clock.\n * @return DOM Element.\n */\n private createDigitalClock(): HTMLElement {\n const element: HTMLDivElement = document.createElement(\"div\");\n element.className = \"digital-clock\";\n\n const { width, height } = this.getElementSize(); // Destructuring assigment: http://es6-features.org/#ObjectMatchingShorthandNotation\n let modified = width;\n if (height < width) {\n modified = height;\n }\n\n // Calculate font size to adapt the font to the item size.\n const baseTimeFontSize = 35; // Per 100px of width.\n const dateFontSizeMultiplier = 0.5;\n const tzFontSizeMultiplier = 6 / this.props.clockTimezone.length;\n const timeFontSize = (baseTimeFontSize * modified) / 100;\n const dateFontSize =\n (baseTimeFontSize * dateFontSizeMultiplier * modified) / 100;\n const tzFontSize = Math.min(\n (baseTimeFontSize * tzFontSizeMultiplier * modified) / 100,\n (width / 100) * 10\n );\n\n // Date calculated using the original timezone.\n const date = this.getOriginDate();\n\n // Date.\n if (this.props.clockFormat === \"datetime\") {\n const dateElem: HTMLSpanElement = document.createElement(\"span\");\n dateElem.className = \"date\";\n dateElem.textContent = humanDate(date, \"default\");\n dateElem.style.fontSize = `${dateFontSize}px`;\n if (this.props.color) dateElem.style.color = this.props.color;\n element.append(dateElem);\n }\n\n // Time.\n const timeElem: HTMLSpanElement = document.createElement(\"span\");\n timeElem.className = \"time\";\n timeElem.textContent = humanTime(date);\n timeElem.style.fontSize = `${timeFontSize}px`;\n if (this.props.color) timeElem.style.color = this.props.color;\n element.append(timeElem);\n\n // City name.\n const city = this.getHumanTimezone();\n if (city.length > 0) {\n const tzElem: HTMLSpanElement = document.createElement(\"span\");\n tzElem.className = \"timezone\";\n tzElem.textContent = city;\n tzElem.style.fontSize = `${tzFontSize}px`;\n if (this.props.color) tzElem.style.color = this.props.color;\n element.append(tzElem);\n }\n\n return element;\n }\n\n /**\n * Generate the current date using the timezone offset stored into the properties.\n * @return The current date.\n */\n private getOriginDate(initialDate: Date | null = null): Date {\n const d = initialDate ? initialDate : new Date();\n const targetTZOffset = this.props.clockTimezoneOffset * 1000; // In ms.\n const localTZOffset = d.getTimezoneOffset() * 60 * 1000; // In ms.\n const utimestamp = d.getTime() + targetTZOffset + localTZOffset;\n\n return new Date(utimestamp);\n }\n\n /**\n * Extract a human readable city name from the timezone text.\n * @param timezone Timezone text.\n */\n public getHumanTimezone(timezone: string = this.props.clockTimezone): string {\n const [, city = \"\"] = timezone.split(\"/\");\n return city.replace(\"_\", \" \");\n }\n\n /**\n * Generate a element size using the current size and the default values.\n * @return The size.\n */\n private getElementSize(\n width: number = this.props.width,\n height: number = this.props.height\n ): Size {\n switch (this.props.clockType) {\n case \"analogic\": {\n let diameter = 100; // Default value.\n\n if (width > 0 && height > 0) {\n diameter = Math.min(width, height);\n } else if (width > 0) {\n diameter = width;\n } else if (height > 0) {\n diameter = height;\n }\n\n let extraHeigth = 0;\n if (this.props.clockFormat === \"datetime\") {\n extraHeigth = height / 8;\n }\n\n return {\n width: diameter,\n height: diameter + extraHeigth\n };\n }\n case \"digital\": {\n if (width > 0 && height > 0) {\n // The proportion of the clock should be (width = height / 2) aproximately.\n height = width / 2 < height ? width / 2 : height;\n } else if (width > 0) {\n height = width / 2;\n } else if (height > 0) {\n // The proportion of the clock should be (height * 2 = width) aproximately.\n width = height * 2;\n } else {\n width = 100; // Default value.\n height = 50; // Default value.\n }\n\n return {\n width,\n height\n };\n }\n default:\n throw new Error(\"invalid clock type.\");\n }\n }\n}\n","import { AnyObject } from \"../lib/types\";\nimport { parseIntOr, notEmptyStringOr, t } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\ninterface BoxProps extends ItemProps {\n // Overrided properties.\n readonly type: ItemType.BOX_ITEM;\n label: null;\n isLinkEnabled: false;\n parentId: null;\n aclGroupId: null;\n // Custom properties.\n borderWidth: number;\n borderColor: string | null;\n fillColor: string | null;\n fillTransparent: boolean | null;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the item props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function boxPropsDecoder(data: AnyObject): BoxProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.BOX_ITEM,\n label: null,\n isLinkEnabled: false,\n parentId: null,\n aclGroupId: null,\n // Custom properties.\n borderWidth: parseIntOr(data.borderWidth, 0),\n borderColor: notEmptyStringOr(data.borderColor, null),\n fillColor: notEmptyStringOr(data.fillColor, null),\n fillTransparent: data.fillTransparent\n };\n}\n\nexport default class Box extends Item<BoxProps> {\n protected createDomElement(): HTMLElement {\n const box: HTMLDivElement = document.createElement(\"div\");\n box.className = \"box\";\n // To prevent this item to expand beyond its parent.\n box.style.boxSizing = \"border-box\";\n\n if (this.props.fillTransparent) {\n box.style.backgroundColor = \"transparent\";\n } else {\n if (this.props.fillColor) {\n box.style.backgroundColor = this.props.fillColor;\n }\n }\n\n // Border.\n if (this.props.borderWidth > 0) {\n box.style.borderStyle = \"solid\";\n // Control the max width to prevent this item to expand beyond its parent.\n const maxBorderWidth = Math.min(this.props.width, this.props.height) / 2;\n const borderWidth = Math.min(this.props.borderWidth, maxBorderWidth);\n box.style.borderWidth = `${borderWidth}px`;\n\n if (this.props.borderColor) {\n box.style.borderColor = this.props.borderColor;\n }\n }\n\n return box;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (this.props.fillTransparent) {\n element.style.backgroundColor = \"transparent\";\n } else {\n if (this.props.fillColor) {\n element.style.backgroundColor = this.props.fillColor;\n }\n }\n\n // Border.\n if (this.props.borderWidth > 0) {\n element.style.borderStyle = \"solid\";\n // Control the max width to prevent this item to expand beyond its parent.\n const maxBorderWidth = Math.min(this.props.width, this.props.height) / 2;\n const borderWidth = Math.min(this.props.borderWidth, maxBorderWidth);\n element.style.borderWidth = `${borderWidth}px`;\n\n if (this.props.borderColor) {\n element.style.borderColor = this.props.borderColor;\n }\n }\n }\n}\n","import { LinkedVisualConsoleProps, AnyObject } from \"../lib/types\";\nimport { linkedVCPropsDecoder } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type LabelProps = {\n type: ItemType.LABEL;\n} & ItemProps &\n LinkedVisualConsoleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the label props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function labelPropsDecoder(data: AnyObject): LabelProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.LABEL,\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Label extends Item<LabelProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"label\";\n element.innerHTML = this.getLabelWithMacrosReplaced();\n\n return element;\n }\n\n /**\n * @override Item.createLabelDomElement\n * Create a new label for the visual console item.\n * @return Item label.\n */\n public createLabelDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"visual-console-item-label\";\n // Always return an empty label.\n return element;\n }\n}\n","import {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n parseIntOr,\n modulePropsDecoder,\n replaceMacros\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type SimpleValueProps = {\n type: ItemType.SIMPLE_VALUE;\n valueType: \"string\" | \"image\";\n value: string;\n} & (\n | {\n processValue: \"none\";\n }\n | {\n processValue: \"avg\" | \"max\" | \"min\";\n period: number;\n }\n) &\n ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw value type.\n * @param valueType Raw value.\n */\nconst parseValueType = (valueType: unknown): SimpleValueProps[\"valueType\"] => {\n switch (valueType) {\n case \"string\":\n case \"image\":\n return valueType;\n default:\n return \"string\";\n }\n};\n\n/**\n * Extract a valid enum value from a raw process value.\n * @param processValue Raw value.\n */\nconst parseProcessValue = (\n processValue: unknown\n): SimpleValueProps[\"processValue\"] => {\n switch (processValue) {\n case \"none\":\n case \"avg\":\n case \"max\":\n case \"min\":\n return processValue;\n default:\n return \"none\";\n }\n};\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the simple value props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function simpleValuePropsDecoder(\n data: AnyObject\n): SimpleValueProps | never {\n if (typeof data.value !== \"string\" || data.value.length === 0) {\n throw new TypeError(\"invalid value\");\n }\n\n const processValue = parseProcessValue(data.processValue);\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.SIMPLE_VALUE,\n valueType: parseValueType(data.valueType),\n value: data.value,\n ...(processValue === \"none\"\n ? { processValue }\n : { processValue, period: parseIntOr(data.period, 0) }), // Object spread. It will merge the properties of the two objects.\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class SimpleValue extends Item<SimpleValueProps> {\n protected createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"simple-value\";\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n if (this.props.valueType === \"image\") {\n const img = document.createElement(\"img\");\n img.src = this.props.value;\n element.append(img);\n } else {\n // Add the value to the label and show it.\n let text = this.props.value;\n let label = this.getLabelWithMacrosReplaced();\n if (label.length > 0) {\n text = replaceMacros([{ macro: /\\(?_VALUE_\\)?/i, value: text }], label);\n }\n\n element.innerHTML = text;\n }\n\n return element;\n }\n\n /**\n * Generate a element size\n * using the current size and the default values.\n * @return The size.\n */ protected createLabelDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"visual-console-item-label\";\n // Always return an empty label.\n return element;\n }\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import { arc as arcFactory } from \"d3-shape\";\n\nimport {\n LinkedVisualConsoleProps,\n AnyObject,\n WithModuleProps\n} from \"../lib/types\";\nimport {\n linkedVCPropsDecoder,\n modulePropsDecoder,\n notEmptyStringOr,\n parseIntOr,\n parseFloatOr\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type PercentileProps = {\n type: ItemType.PERCENTILE_BAR;\n percentileType:\n | \"progress-bar\"\n | \"bubble\"\n | \"circular-progress-bar\"\n | \"circular-progress-bar-alt\";\n valueType: \"percent\" | \"value\";\n minValue: number | null;\n maxValue: number | null;\n color: string | null;\n labelColor: string | null;\n value: number | null;\n unit: string | null;\n} & ItemProps &\n WithModuleProps &\n LinkedVisualConsoleProps;\n\n/**\n * Extract a valid enum value from a raw type value.\n * @param type Raw value.\n */\nfunction extractPercentileType(\n type: unknown\n): PercentileProps[\"percentileType\"] {\n switch (type) {\n case \"progress-bar\":\n case \"bubble\":\n case \"circular-progress-bar\":\n case \"circular-progress-bar-alt\":\n return type;\n default:\n case ItemType.PERCENTILE_BAR:\n return \"progress-bar\";\n case ItemType.PERCENTILE_BUBBLE:\n return \"bubble\";\n case ItemType.CIRCULAR_PROGRESS_BAR:\n return \"circular-progress-bar\";\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n return \"circular-progress-bar-alt\";\n }\n}\n\n/**\n * Extract a valid enum value from a raw value type value.\n * @param type Raw value.\n */\nfunction extractValueType(valueType: unknown): PercentileProps[\"valueType\"] {\n switch (valueType) {\n case \"percent\":\n case \"value\":\n return valueType;\n default:\n return \"percent\";\n }\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the percentile props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function percentilePropsDecoder(\n data: AnyObject\n): PercentileProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.PERCENTILE_BAR,\n percentileType: extractPercentileType(data.percentileType || data.type),\n valueType: extractValueType(data.valueType),\n minValue: parseIntOr(data.minValue, null),\n maxValue: parseIntOr(data.maxValue, null),\n color: notEmptyStringOr(data.color, null),\n labelColor: notEmptyStringOr(data.labelColor, null),\n value: parseFloatOr(data.value, null),\n unit: notEmptyStringOr(data.unit, null),\n ...modulePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n ...linkedVCPropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\n\nexport default class Percentile extends Item<PercentileProps> {\n protected createDomElement(): HTMLElement {\n const colors = {\n background: \"#000000\",\n progress: this.props.color || \"#000000\",\n text: this.props.labelColor || \"#bcbcbc\"\n };\n // Progress.\n const progress = this.getProgress();\n // Main element.\n const element = document.createElement(\"div\");\n\n var formatValue;\n if (this.props.value != null) {\n if (Intl) {\n formatValue = Intl.NumberFormat(\"en-EN\").format(this.props.value);\n } else {\n formatValue = this.props.value;\n }\n }\n\n // SVG container.\n const svg = document.createElementNS(svgNS, \"svg\");\n\n switch (this.props.percentileType) {\n case \"progress-bar\":\n {\n const backgroundRect = document.createElementNS(svgNS, \"rect\");\n backgroundRect.setAttribute(\"fill\", colors.background);\n backgroundRect.setAttribute(\"fill-opacity\", \"0.5\");\n backgroundRect.setAttribute(\"width\", \"100%\");\n backgroundRect.setAttribute(\"height\", \"100%\");\n backgroundRect.setAttribute(\"rx\", \"5\");\n backgroundRect.setAttribute(\"ry\", \"5\");\n const progressRect = document.createElementNS(svgNS, \"rect\");\n progressRect.setAttribute(\"fill\", colors.progress);\n progressRect.setAttribute(\"fill-opacity\", \"1\");\n progressRect.setAttribute(\"width\", `${progress}%`);\n progressRect.setAttribute(\"height\", \"100%\");\n progressRect.setAttribute(\"rx\", \"5\");\n progressRect.setAttribute(\"ry\", \"5\");\n const text = document.createElementNS(svgNS, \"text\");\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"alignment-baseline\", \"middle\");\n text.setAttribute(\"font-size\", \"15\");\n text.setAttribute(\"font-family\", \"lato\");\n text.setAttribute(\"font-weight\", \"bold\");\n text.setAttribute(\"text-anchor\", `middle`);\n text.setAttribute(\"alignment-baseline\", `middle`);\n text.setAttribute(\"x\", `50%`);\n text.setAttribute(\"y\", `50%`);\n text.setAttribute(\"fill\", colors.text);\n\n if (this.props.valueType === \"value\") {\n text.style.fontSize = \"6pt\";\n\n text.textContent = this.props.unit\n ? `${formatValue} ${this.props.unit}`\n : `${formatValue}`;\n } else {\n text.textContent = `${progress}%`;\n }\n\n svg.setAttribute(\"width\", \"100%\");\n svg.setAttribute(\"height\", \"100%\");\n svg.append(backgroundRect, progressRect, text);\n }\n break;\n case \"bubble\":\n case \"circular-progress-bar\":\n case \"circular-progress-bar-alt\":\n {\n // Auto resize SVG using the view box magic: https://css-tricks.com/scale-svg/\n svg.setAttribute(\"viewBox\", \"0 0 100 100\");\n\n if (this.props.percentileType === \"bubble\") {\n // Create and append the circles.\n const backgroundCircle = document.createElementNS(svgNS, \"circle\");\n backgroundCircle.setAttribute(\"transform\", \"translate(50 50)\");\n backgroundCircle.setAttribute(\"fill\", colors.background);\n backgroundCircle.setAttribute(\"fill-opacity\", \"0.5\");\n backgroundCircle.setAttribute(\"r\", \"50\");\n const progressCircle = document.createElementNS(svgNS, \"circle\");\n progressCircle.setAttribute(\"transform\", \"translate(50 50)\");\n progressCircle.setAttribute(\"fill\", colors.progress);\n progressCircle.setAttribute(\"fill-opacity\", \"1\");\n progressCircle.setAttribute(\"r\", `${progress / 2}`);\n\n svg.append(backgroundCircle, progressCircle);\n } else {\n // Create and append the circles.\n const arcProps = {\n innerRadius:\n this.props.percentileType === \"circular-progress-bar\" ? 30 : 0,\n outerRadius: 50,\n startAngle: 0,\n endAngle: Math.PI * 2\n };\n const arc = arcFactory();\n\n const backgroundCircle = document.createElementNS(svgNS, \"path\");\n backgroundCircle.setAttribute(\"transform\", \"translate(50 50)\");\n backgroundCircle.setAttribute(\"fill\", colors.background);\n backgroundCircle.setAttribute(\"fill-opacity\", \"0.5\");\n backgroundCircle.setAttribute(\"d\", `${arc(arcProps)}`);\n const progressCircle = document.createElementNS(svgNS, \"path\");\n progressCircle.setAttribute(\"transform\", \"translate(50 50)\");\n progressCircle.setAttribute(\"fill\", colors.progress);\n progressCircle.setAttribute(\"fill-opacity\", \"1\");\n progressCircle.setAttribute(\n \"d\",\n `${arc({\n ...arcProps,\n endAngle: arcProps.endAngle * (progress / 100)\n })}`\n );\n\n svg.append(backgroundCircle, progressCircle);\n }\n\n // Create and append the text.\n const text = document.createElementNS(svgNS, \"text\");\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"alignment-baseline\", \"middle\");\n text.setAttribute(\"font-size\", \"16\");\n text.setAttribute(\"font-family\", \"lato\");\n text.setAttribute(\"font-weight\", \"bold\");\n text.setAttribute(\"fill\", colors.text);\n\n if (this.props.valueType === \"value\" && this.props.value != null) {\n // Show value and unit in 1 (no unit) or 2 lines.\n if (this.props.unit && this.props.unit.length > 0) {\n const value = document.createElementNS(svgNS, \"tspan\");\n value.setAttribute(\"x\", \"0\");\n value.setAttribute(\"dy\", \"1em\");\n value.textContent = `${formatValue}`;\n value.style.fontSize = \"8pt\";\n const unit = document.createElementNS(svgNS, \"tspan\");\n unit.setAttribute(\"x\", \"0\");\n unit.setAttribute(\"dy\", \"1em\");\n unit.textContent = `${this.props.unit}`;\n unit.style.fontSize = \"8pt\";\n text.append(value, unit);\n text.setAttribute(\"transform\", \"translate(50 33)\");\n } else {\n text.textContent = `${formatValue}`;\n text.style.fontSize = \"8pt\";\n text.setAttribute(\"transform\", \"translate(50 50)\");\n }\n } else {\n // Percentage.\n text.textContent = `${progress}%`;\n text.setAttribute(\"transform\", \"translate(50 50)\");\n }\n\n svg.append(text);\n }\n break;\n }\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n svg.setAttribute(\"opacity\", \"0.2\");\n }\n\n if (svg !== null) element.append(svg);\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (this.meta.isBeingResized === false) {\n this.resizeElement(this.props.width, this.props.height);\n }\n element.innerHTML = this.createDomElement().innerHTML;\n }\n\n /**\n * To update the content element.\n * @override resizeElement\n */\n public resizeElement(width: number, height: number): void {\n if (this.props.percentileType === \"progress-bar\") {\n super.resizeElement(width, 35);\n } else {\n super.resizeElement(width, width);\n }\n }\n\n /**\n * To update the content element.\n * @override resize\n */\n public resize(width: number): void {\n this.resizeElement(width, width);\n let height = this.props.maxValue || 0;\n if (this.props.percentileType === \"progress-bar\") {\n height = 35;\n }\n super.setProps({\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n width,\n height\n });\n }\n\n private getProgress(): number {\n const minValue = this.props.minValue || 0;\n const maxValue = this.props.maxValue || 100;\n const value = this.props.value == null ? 0 : this.props.value;\n\n if (value <= minValue) return 0;\n else if (value >= maxValue) return 100;\n else return Math.trunc(((value - minValue) / (maxValue - minValue)) * 100);\n }\n}\n","import { AnyObject } from \"../lib/types\";\nimport {\n stringIsEmpty,\n notEmptyStringOr,\n decodeBase64,\n parseIntOr,\n t\n} from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\nimport { FormContainer, InputGroup } from \"../Form\";\nimport fontAwesomeIcon from \"../lib/FontAwesomeIcon\";\nimport {\n faCircleNotch,\n faExclamationCircle\n} from \"@fortawesome/free-solid-svg-icons\";\n\nexport type ServiceProps = {\n type: ItemType.SERVICE;\n serviceId: number;\n imageSrc: string | null;\n statusImageSrc: string | null;\n encodedTitle: string | null;\n} & ItemProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the service props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function servicePropsDecoder(data: AnyObject): ServiceProps | never {\n if (data.imageSrc !== null) {\n if (\n typeof data.statusImageSrc !== \"string\" ||\n data.imageSrc.statusImageSrc === 0\n ) {\n throw new TypeError(\"invalid status image src.\");\n }\n } else {\n if (stringIsEmpty(data.encodedTitle)) {\n throw new TypeError(\"missing encode tittle content.\");\n }\n }\n\n if (parseIntOr(data.serviceId, null) === null) {\n throw new TypeError(\"invalid service id.\");\n }\n\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.SERVICE,\n serviceId: data.serviceId,\n imageSrc: notEmptyStringOr(data.imageSrc, null),\n statusImageSrc: notEmptyStringOr(data.statusImageSrc, null),\n encodedTitle: notEmptyStringOr(data.encodedTitle, null)\n };\n}\n\nexport default class Service extends Item<ServiceProps> {\n public createDomElement(): HTMLElement {\n const element = document.createElement(\"div\");\n element.className = \"service\";\n\n if (this.props.statusImageSrc !== null) {\n element.style.background = `url(${this.props.statusImageSrc}) no-repeat`;\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n if (this.props.encodedTitle !== null) {\n element.className = \"service image forced_title\";\n element.setAttribute(\"data-use_title_for_force_title\", \"1\");\n element.setAttribute(\n \"data-title\",\n decodeBase64(this.props.encodedTitle)\n );\n }\n } else if (this.props.encodedTitle !== null) {\n element.innerHTML = decodeBase64(this.props.encodedTitle);\n }\n\n return element;\n }\n\n /**\n * To update the content element.\n * @override Item.updateDomElement\n */\n protected updateDomElement(element: HTMLElement): void {\n if (this.props.statusImageSrc !== null) {\n element.style.background = `url(${this.props.statusImageSrc}) no-repeat`;\n element.style.backgroundSize = \"contain\";\n element.style.backgroundPosition = \"center\";\n if (this.props.encodedTitle !== null) {\n element.className = \"service image forced_title\";\n element.setAttribute(\"data-use_title_for_force_title\", \"1\");\n element.setAttribute(\n \"data-title\",\n decodeBase64(this.props.encodedTitle)\n );\n }\n element.innerHTML = \"\";\n } else if (this.props.encodedTitle !== null) {\n element.innerHTML = decodeBase64(this.props.encodedTitle);\n }\n }\n}\n","import { AnyObject, WithModuleProps } from \"../lib/types\";\n\nimport { modulePropsDecoder, parseIntOr, stringIsEmpty, t } from \"../lib\";\nimport Item, { ItemType, ItemProps, itemBasePropsDecoder } from \"../Item\";\n\nexport type OdometerProps = {\n type: ItemType.ODOMETER;\n value: number;\n status: string;\n title: string | null;\n titleModule: string;\n titleColor: string;\n odometerType: string;\n thresholds: string | any;\n minMaxValue: string;\n} & ItemProps &\n WithModuleProps;\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the events history props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function odometerPropsDecoder(data: AnyObject): OdometerProps | never {\n return {\n ...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.\n type: ItemType.ODOMETER,\n value: parseIntOr(data.value, 0),\n status: stringIsEmpty(data.status) ? \"#B2B2B2\" : data.status,\n titleColor: stringIsEmpty(data.titleColor) ? \"#3f3f3f\" : data.titleColor,\n title: stringIsEmpty(data.title) ? \"\" : data.title,\n titleModule: stringIsEmpty(data.titleModule) ? \"\" : data.titleModule,\n thresholds: stringIsEmpty(data.thresholds) ? \"\" : data.thresholds,\n minMaxValue: stringIsEmpty(data.minMaxValue) ? \"\" : data.minMaxValue,\n odometerType: stringIsEmpty(data.odometerType)\n ? \"percent\"\n : data.odometerType,\n ...modulePropsDecoder(data) // Object spread. It will merge the properties of the two objects.\n };\n}\n\nexport default class Odometer extends Item<OdometerProps> {\n protected createDomElement(): HTMLElement {\n let lineWarning = \"\";\n let lineWarning2 = \"\";\n let lineCritical = \"\";\n let lineCritical2 = \"\";\n\n if (this.props.thresholds !== \"\") {\n const thresholds = JSON.parse(this.props.thresholds);\n\n if (thresholds !== null) {\n if (thresholds.min_warning != 0 || thresholds.max_warning != 0) {\n lineWarning = this.getCoords(\n thresholds.min_warning,\n this.props.width / 2\n );\n if (thresholds.max_warning == 0) {\n lineWarning2 = this.getCoords(100, this.props.width / 2);\n } else {\n lineWarning2 = this.getCoords(\n thresholds.max_warning,\n this.props.width / 2\n );\n }\n }\n\n if (thresholds.min_critical != 0 || thresholds.max_critical != 0) {\n lineCritical = this.getCoords(\n thresholds.min_critical,\n this.props.width / 2\n );\n if (thresholds.max_critical == 0) {\n lineCritical2 = this.getCoords(100, this.props.width / 2);\n } else {\n lineCritical2 = this.getCoords(\n thresholds.max_critical,\n this.props.width / 2\n );\n }\n }\n }\n }\n\n let percent = \"\";\n let number;\n // Float\n if (\n Number(this.props.value) === this.props.value &&\n this.props.value % 1 !== 0\n ) {\n number = this.props.value.toFixed(1);\n } else {\n if (this.props.minMaxValue === \"\") {\n percent = \" %\";\n } else {\n percent = this.getSubfix(this.props.value);\n }\n number = new Intl.NumberFormat(\"es\", {\n maximumSignificantDigits: 4,\n maximumFractionDigits: 3\n }).format(this.props.value);\n }\n\n var numb = number.match(/\\d*\\.\\d/);\n if (numb !== null) {\n number = numb[0];\n }\n\n const rotate = this.getRotate(this.props.value);\n\n let backgroundColor = document.getElementById(\n \"visual-console-container\"\n ) as HTMLElement;\n\n if (backgroundColor === null) {\n backgroundColor = document.getElementById(\n `visual-console-container-${this.props.cellId}`\n ) as HTMLElement;\n }\n\n if (backgroundColor.style.backgroundColor == \"\") {\n backgroundColor.style.backgroundColor = \"#fff\";\n }\n\n const anchoB = this.props.width * 0.7;\n\n const element = document.createElement(\"div\");\n element.className = \"odometer\";\n\n if (\n this.props.agentDisabled === true ||\n this.props.moduleDisabled === true\n ) {\n element.style.opacity = \"0.2\";\n }\n\n // Odometer container.\n const odometerContainer = document.createElement(\"div\");\n odometerContainer.className = \"odometer-container\";\n\n // Central semicircle.\n const odometerA = document.createElement(\"div\");\n odometerA.className = \"odometer-a\";\n odometerA.style.backgroundColor = `${backgroundColor.style.backgroundColor}`;\n\n // Semicircle rotating with the value.\n const odometerB = document.createElement(\"div\");\n odometerB.className = \"odometer-b\";\n odometerB.id = `odometerB-${this.props.id}`;\n odometerB.style.backgroundColor = `${this.props.status}`;\n\n // Dark semicircle.\n const odometerC = document.createElement(\"div\");\n odometerC.className = \"odometer-c\";\n\n // Green outer semicircle.\n const gaugeE = document.createElement(\"div\");\n gaugeE.className = \"odometer-d\";\n\n const SVG_NS = \"http://www.w3.org/2000/svg\";\n // Portion of threshold warning\n if (lineWarning != \"\") {\n const svgWarning = document.createElementNS(SVG_NS, \"svg\");\n svgWarning.setAttributeNS(null, \"width\", \"100%\");\n svgWarning.setAttributeNS(null, \"height\", \"100%\");\n svgWarning.setAttributeNS(null, \"style\", \"position:absolute;z-index:1\");\n const pathWarning = document.createElementNS(SVG_NS, \"path\");\n pathWarning.setAttributeNS(null, \"id\", `svgWarning-${this.props.id}`);\n pathWarning.setAttributeNS(\n null,\n \"d\",\n `M${this.props.width / 2},${this.props.width / 2}L${lineWarning}A${this\n .props.width / 2},${this.props.width / 2},0,0,1,${lineWarning2}Z`\n );\n pathWarning.setAttributeNS(null, \"class\", \"svg_warning\");\n svgWarning.appendChild(pathWarning);\n odometerContainer.appendChild(svgWarning);\n }\n\n // Portion of threshold critical\n if (lineCritical != \"\") {\n const svgCritical = document.createElementNS(SVG_NS, \"svg\");\n svgCritical.setAttributeNS(null, \"width\", \"100%\");\n svgCritical.setAttributeNS(null, \"height\", \"100%\");\n svgCritical.setAttributeNS(null, \"style\", \"position:absolute;z-index:2\");\n const pathCritical = document.createElementNS(SVG_NS, \"path\");\n pathCritical.setAttributeNS(null, \"id\", `svgCritical-${this.props.id}`);\n pathCritical.setAttributeNS(\n null,\n \"d\",\n `M${this.props.width / 2},${this.props.width / 2}L${lineCritical}A${this\n .props.width / 2},${this.props.width / 2},0,0,1,${lineCritical2}Z`\n );\n pathCritical.setAttributeNS(null, \"fill\", \"#E63C52\");\n svgCritical.appendChild(pathCritical);\n odometerContainer.appendChild(svgCritical);\n }\n\n // Text.\n const h1 = document.createElement(\"h1\");\n h1.innerText = number + percent;\n h1.style.fontSize = `${anchoB * 0.17}px`;\n h1.style.color = `${this.props.status}`;\n h1.style.lineHeight = \"0\";\n\n const h2 = document.createElement(\"h2\");\n if (this.props.title == \"\") {\n h2.textContent = this.truncateTitle(this.props.moduleName);\n } else {\n h2.textContent = this.truncateTitle(this.props.title);\n }\n h2.title = this.props.titleModule;\n h2.setAttribute(\"title\", this.props.titleModule);\n\n h2.style.fontSize = `${anchoB * 0.06}px`;\n h2.style.color = `${this.props.titleColor}`;\n h2.style.lineHeight = \"0\";\n\n let script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.onload = () => {\n odometerB.style.transform = `rotate(${rotate}turn)`;\n };\n var urlPandora = window.location.pathname.split(\"/\")[1];\n script.src = `${document.dir}/${urlPandora}/include/javascript/pandora_alerts.js`;\n odometerA.appendChild(h1);\n odometerA.appendChild(h2);\n odometerContainer.appendChild(odometerB);\n odometerContainer.appendChild(odometerC);\n odometerContainer.appendChild(gaugeE);\n odometerContainer.appendChild(odometerA);\n odometerContainer.appendChild(script);\n element.appendChild(odometerContainer);\n\n return element;\n }\n\n protected updateDomElement(element: HTMLElement): void {\n element.innerHTML = this.createDomElement().innerHTML;\n\n let rotate = this.getRotate(this.props.value);\n\n const svgWarning = document.getElementById(`svgWarning-${this.props.id}`);\n if (svgWarning != null) {\n svgWarning.style.display = \"none\";\n }\n\n const svgCritical = document.getElementById(`svgCritical-${this.props.id}`);\n if (svgCritical != null) {\n svgCritical.style.display = \"none\";\n }\n\n setTimeout(() => {\n if (svgWarning != null) {\n svgWarning.style.display = \"block\";\n }\n\n if (svgCritical != null) {\n svgCritical.style.display = \"block\";\n }\n\n var odometerB = document.getElementById(`odometerB-${this.props.id}`);\n if (odometerB) {\n odometerB.style.transform = `rotate(${rotate}turn)`;\n }\n }, 500);\n }\n\n public resizeElement(width: number): void {\n super.resizeElement(width, width / 2);\n }\n\n /**\n * To update the content element.\n * @override resize\n */\n public resize(width: number): void {\n this.resizeElement(this.props.width);\n }\n\n private getRotate(value: number): number {\n let rotate = 0;\n if (this.props.minMaxValue === \"\") {\n rotate = value / 2 / 100;\n } else {\n const minMax = JSON.parse(this.props.minMaxValue);\n if (minMax[\"min\"] === value) {\n rotate = 0;\n } else if (minMax[\"max\"] === value) {\n rotate = 0.5;\n } else {\n const limit = minMax[\"max\"] - minMax[\"min\"];\n const valueMax = minMax[\"max\"] - value;\n rotate = (100 - (valueMax * 100) / limit) / 100 / 2;\n }\n }\n\n return rotate;\n }\n\n private getSubfix(value: number): string {\n let subfix = \"\";\n const length = (value + \"\").length;\n if (length > 3 && length <= 6) {\n subfix = \" K\";\n } else if (length > 6 && length <= 9) {\n subfix = \" M\";\n } else if (length > 9 && length <= 12) {\n subfix = \" G\";\n } else if (length > 12 && length <= 15) {\n subfix = \" T\";\n }\n\n return subfix;\n }\n\n private getCoords(percent: number, radio: number): string {\n if (this.props.minMaxValue !== \"\") {\n const minMax = JSON.parse(this.props.minMaxValue);\n if (minMax[\"min\"] === percent) {\n percent = 0;\n } else if (minMax[\"max\"] === percent || percent === 100) {\n percent = 100;\n } else {\n const limit = minMax[\"max\"] - minMax[\"min\"];\n let valueMax = minMax[\"max\"] - percent;\n percent = 100 - (valueMax * 100) / limit;\n }\n }\n\n percent = 180 - percent * 1.8;\n const x = radio + Math.cos((percent * Math.PI) / 180) * radio;\n const y = radio - Math.sin((percent * Math.PI) / 180) * radio;\n return `${x},${y}`;\n }\n\n private truncateTitle(title: any): string {\n if (title != null && title.length > 22) {\n const halfLength = title.length / 2;\n const diff = halfLength - 9;\n const stringBefore = title.substr(0, halfLength - diff);\n const stringAfter = title.substr(halfLength + diff);\n\n return `${stringBefore}...${stringAfter}`;\n } else {\n return title;\n }\n }\n}\n","import { AnyObject, Size, Position, WithModuleProps } from \"./lib/types\";\nimport {\n parseBoolean,\n sizePropsDecoder,\n parseIntOr,\n notEmptyStringOr,\n itemMetaDecoder,\n t,\n ellipsize,\n debounce\n} from \"./lib\";\nimport Item, {\n ItemType,\n ItemProps,\n ItemClickEvent,\n ItemRemoveEvent,\n ItemMovedEvent,\n ItemResizedEvent,\n ItemSelectionChangedEvent\n} from \"./Item\";\nimport StaticGraph, { staticGraphPropsDecoder } from \"./items/StaticGraph\";\nimport Icon, { iconPropsDecoder } from \"./items/Icon\";\nimport ColorCloud, { colorCloudPropsDecoder } from \"./items/ColorCloud\";\nimport NetworkLink, { networkLinkPropsDecoder } from \"./items/NetworkLink\";\nimport Group, { groupPropsDecoder } from \"./items/Group\";\nimport Clock, { clockPropsDecoder } from \"./items/Clock\";\nimport Box, { boxPropsDecoder } from \"./items/Box\";\nimport Line, { linePropsDecoder, LineMovedEvent } from \"./items/Line\";\nimport Label, { labelPropsDecoder } from \"./items/Label\";\nimport SimpleValue, { simpleValuePropsDecoder } from \"./items/SimpleValue\";\nimport EventsHistory, {\n eventsHistoryPropsDecoder\n} from \"./items/EventsHistory\";\nimport Percentile, { percentilePropsDecoder } from \"./items/Percentile\";\nimport TypedEvent, { Disposable, Listener } from \"./lib/TypedEvent\";\nimport DonutGraph, { donutGraphPropsDecoder } from \"./items/DonutGraph\";\nimport BarsGraph, { barsGraphPropsDecoder } from \"./items/BarsGraph\";\nimport ModuleGraph, { moduleGraphPropsDecoder } from \"./items/ModuleGraph\";\nimport Service, { servicePropsDecoder } from \"./items/Service\";\nimport Odometer, { odometerPropsDecoder } from \"./items/Odometer\";\nimport BasicChart, { basicChartPropsDecoder } from \"./items/BasicChart\";\n\n// TODO: Document.\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction itemInstanceFrom(data: AnyObject) {\n const type = parseIntOr(data.type, null);\n if (type == null) throw new TypeError(\"missing item type.\");\n\n const meta = itemMetaDecoder(data);\n\n switch (type as ItemType) {\n case ItemType.STATIC_GRAPH:\n return new StaticGraph(staticGraphPropsDecoder(data), meta);\n case ItemType.MODULE_GRAPH:\n return new ModuleGraph(moduleGraphPropsDecoder(data), meta);\n case ItemType.SIMPLE_VALUE:\n case ItemType.SIMPLE_VALUE_MAX:\n case ItemType.SIMPLE_VALUE_MIN:\n case ItemType.SIMPLE_VALUE_AVG:\n return new SimpleValue(simpleValuePropsDecoder(data), meta);\n case ItemType.PERCENTILE_BAR:\n case ItemType.PERCENTILE_BUBBLE:\n case ItemType.CIRCULAR_PROGRESS_BAR:\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n return new Percentile(percentilePropsDecoder(data), meta);\n case ItemType.LABEL:\n return new Label(labelPropsDecoder(data), meta);\n case ItemType.ICON:\n return new Icon(iconPropsDecoder(data), meta);\n case ItemType.SERVICE:\n return new Service(servicePropsDecoder(data), meta);\n case ItemType.GROUP_ITEM:\n return new Group(groupPropsDecoder(data), meta);\n case ItemType.BOX_ITEM:\n return new Box(boxPropsDecoder(data), meta);\n case ItemType.LINE_ITEM:\n return new Line(linePropsDecoder(data), meta);\n case ItemType.AUTO_SLA_GRAPH:\n return new EventsHistory(eventsHistoryPropsDecoder(data), meta);\n case ItemType.DONUT_GRAPH:\n return new DonutGraph(donutGraphPropsDecoder(data), meta);\n case ItemType.BARS_GRAPH:\n return new BarsGraph(barsGraphPropsDecoder(data), meta);\n case ItemType.CLOCK:\n return new Clock(clockPropsDecoder(data), meta);\n case ItemType.COLOR_CLOUD:\n return new ColorCloud(colorCloudPropsDecoder(data), meta);\n case ItemType.NETWORK_LINK:\n return new NetworkLink(networkLinkPropsDecoder(data), meta);\n case ItemType.ODOMETER:\n return new Odometer(odometerPropsDecoder(data), meta);\n case ItemType.BASIC_CHART:\n return new BasicChart(basicChartPropsDecoder(data), meta);\n default:\n throw new TypeError(\"item not found\");\n }\n}\n\n// TODO: Document.\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction decodeProps(data: AnyObject) {\n const type = parseIntOr(data.type, null);\n if (type == null) throw new TypeError(\"missing item type.\");\n\n switch (type as ItemType) {\n case ItemType.STATIC_GRAPH:\n return staticGraphPropsDecoder(data);\n case ItemType.MODULE_GRAPH:\n return moduleGraphPropsDecoder(data);\n case ItemType.SIMPLE_VALUE:\n case ItemType.SIMPLE_VALUE_MAX:\n case ItemType.SIMPLE_VALUE_MIN:\n case ItemType.SIMPLE_VALUE_AVG:\n return simpleValuePropsDecoder(data);\n case ItemType.PERCENTILE_BAR:\n case ItemType.PERCENTILE_BUBBLE:\n case ItemType.CIRCULAR_PROGRESS_BAR:\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n return percentilePropsDecoder(data);\n case ItemType.LABEL:\n return labelPropsDecoder(data);\n case ItemType.ICON:\n return iconPropsDecoder(data);\n case ItemType.SERVICE:\n return servicePropsDecoder(data);\n case ItemType.GROUP_ITEM:\n return groupPropsDecoder(data);\n case ItemType.BOX_ITEM:\n return boxPropsDecoder(data);\n case ItemType.LINE_ITEM:\n return linePropsDecoder(data);\n case ItemType.AUTO_SLA_GRAPH:\n return eventsHistoryPropsDecoder(data);\n case ItemType.DONUT_GRAPH:\n return donutGraphPropsDecoder(data);\n case ItemType.BARS_GRAPH:\n return barsGraphPropsDecoder(data);\n case ItemType.CLOCK:\n return clockPropsDecoder(data);\n case ItemType.COLOR_CLOUD:\n return colorCloudPropsDecoder(data);\n case ItemType.NETWORK_LINK:\n return networkLinkPropsDecoder(data);\n case ItemType.ODOMETER:\n return odometerPropsDecoder(data);\n case ItemType.BASIC_CHART:\n return basicChartPropsDecoder(data);\n default:\n throw new TypeError(\"decoder not found\");\n }\n}\n\n// Base properties.\nexport interface VisualConsoleProps extends Size {\n readonly id: number;\n name: string;\n groupId: number;\n backgroundURL: string | null; // URL?\n backgroundColor: string | null;\n isFavorite: boolean;\n relationLineWidth: number;\n maintenanceMode: MaintenanceModeInterface | null;\n gridSize: number | 10;\n gridSelected: boolean | false | false;\n}\n\nexport interface MaintenanceModeInterface {\n user: string;\n timestamp: number;\n}\n\n/**\n * Build a valid typed object from a raw object.\n * This will allow us to ensure the type safety.\n *\n * @param data Raw object.\n * @return An object representing the Visual Console props.\n * @throws Will throw a TypeError if some property\n * is missing from the raw object or have an invalid type.\n */\nexport function visualConsolePropsDecoder(\n data: AnyObject\n): VisualConsoleProps | never {\n // Object destructuring: http://es6-features.org/#ObjectMatchingShorthandNotation\n const {\n id,\n name,\n groupId,\n backgroundURL,\n backgroundColor,\n isFavorite,\n relationLineWidth,\n maintenanceMode,\n gridSize,\n gridSelected\n } = data;\n\n if (id == null || isNaN(parseInt(id))) {\n throw new TypeError(\"invalid Id.\");\n }\n if (typeof name !== \"string\" || name.length === 0) {\n throw new TypeError(\"invalid name.\");\n }\n if (groupId == null || isNaN(parseInt(groupId))) {\n throw new TypeError(\"invalid group Id.\");\n }\n\n return {\n id: parseInt(id),\n name,\n groupId: parseInt(groupId),\n backgroundURL: notEmptyStringOr(backgroundURL, null),\n backgroundColor: notEmptyStringOr(backgroundColor, null),\n isFavorite: parseBoolean(isFavorite),\n relationLineWidth: parseIntOr(relationLineWidth, 0),\n maintenanceMode: maintenanceMode,\n gridSize: parseIntOr(gridSize, 10),\n gridSelected: false,\n ...sizePropsDecoder(data)\n };\n}\n\nexport default class VisualConsole {\n // Reference to the DOM element which will contain the items.\n private readonly containerRef: HTMLElement;\n // Properties.\n private _props: VisualConsoleProps;\n // Visual Console Item instances by their Id.\n private elementsById: {\n [key: number]: Item<ItemProps>;\n } = {};\n // Visual Console Item Ids.\n private elementIds: ItemProps[\"id\"][] = [];\n // Dictionary which store the created lines.\n private relations: {\n [key: string]: Line;\n } = {};\n\n // Dictionary which store the related items (by ID).\n private lineLinks: {\n [key: number]: { [key: number]: { [key: string]: number } };\n } = {};\n\n private lines: {\n [key: number]: { [key: string]: number };\n } = {};\n\n // Event manager for click events.\n private readonly clickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for double click events.\n private readonly dblClickEventManager = new TypedEvent<ItemClickEvent>();\n // Event manager for move events.\n private readonly movedEventManager = new TypedEvent<ItemMovedEvent>();\n // Event manager for line move events.\n private readonly lineMovedEventManager = new TypedEvent<LineMovedEvent>();\n // Event manager for resize events.\n private readonly resizedEventManager = new TypedEvent<ItemResizedEvent>();\n // Event manager for remove events.\n private readonly selectionChangedEventManager = new TypedEvent<\n ItemSelectionChangedEvent\n >();\n // List of references to clean the event listeners.\n private readonly disposables: Disposable[] = [];\n\n /**\n * React to a click on an element.\n * @param e Event object.\n */\n private handleElementClick: (e: ItemClickEvent) => void = e => {\n this.clickEventManager.emit(e);\n // console.log(`Clicked element #${e.data.id}`, e);\n };\n\n /**\n * React to a double click on an element.\n * @param e Event object.\n */\n private handleElementDblClick: (e: ItemClickEvent) => void = e => {\n this.dblClickEventManager.emit(e);\n // console.log(`Double clicked element #${e.data.id}`, e);\n };\n\n /**\n * React to a movement on an element.\n * @param e Event object.\n */\n private handleElementMovement: (e: ItemMovedEvent) => void = e => {\n var type = e.item.itemProps.type;\n\n if (\n type !== 13 &&\n type !== 21 &&\n (typeof this.props.gridSelected === \"undefined\" ||\n this.props.gridSelected === false)\n ) {\n this.elements.forEach(item => {\n if (\n item.meta.isSelected === true &&\n e.item.itemProps.id !== item.itemProps.id &&\n item.props.type !== 13 &&\n item.props.type !== 21\n ) {\n const movementX = e.newPosition.x - e.item.props.x;\n const movementY = e.newPosition.y - e.item.props.y;\n\n let newX = item.props.x + movementX;\n let newY = item.props.y + movementY;\n\n if (newX > this.props.width) {\n newX = this.props.width;\n } else if (newX <= 0) {\n newX = 0;\n }\n\n if (newY > this.props.height) {\n newY = this.props.height;\n } else if (newY <= 0) {\n newY = 0;\n }\n\n item.moveElement(newX, newY);\n item.debouncedMovementSave(newX, newY);\n }\n });\n }\n\n if (type !== 13 && type !== 21 && this.props.gridSelected === true) {\n var gridSize = this.props.gridSize;\n var positionX = e.newPosition.x;\n var positionY = e.newPosition.y;\n if (positionX % gridSize !== 0 || positionY % gridSize !== 0) {\n var x = Math.floor(positionX / gridSize) * gridSize;\n var y = Math.floor(positionY / gridSize) * gridSize;\n let elemntSelected = document.getElementById(\n \"item-selected-move\"\n ) as HTMLElement;\n elemntSelected.setAttribute(\n \"style\",\n \"top:\" + y + \"px !important; left:\" + x + \"px !important\"\n );\n return;\n }\n }\n // Move their relation lines.\n const itemId = e.item.props.id;\n const relations = this.getItemRelations(itemId);\n\n relations.forEach(relation => {\n if (relation.parentId === itemId) {\n // Move the line start.\n relation.line.props = {\n ...relation.line.props,\n startPosition: this.getVisualCenter(e.newPosition, e.item)\n };\n } else if (relation.childId === itemId) {\n // Move the line end.\n relation.line.props = {\n ...relation.line.props,\n endPosition: this.getVisualCenter(e.newPosition, e.item)\n };\n }\n });\n\n // Move lines conneted with this item.\n this.updateLinesConnected(e.item.props, e.newPosition, false);\n\n // console.log(`Moved element #${e.item.props.id}`, e);\n };\n\n /**\n * React to a movement finished on an element.\n * @param e Event object.\n */\n private handleElementMovementFinished: (e: ItemMovedEvent) => void = e => {\n this.movedEventManager.emit(e);\n // Move lines conneted with this item.\n this.updateLinesConnected(e.item.props, e.newPosition, true);\n // console.log(`Movement finished for element #${e.item.props.id}`, e);\n };\n\n /**\n * Verifies if x,y are inside item coordinates.\n * @param x Coordinate X\n * @param y Coordinate Y\n * @param item ItemProps instance.\n */\n private coordinatesInItem(x: number, y: number, props: ItemProps) {\n if (\n props.type == ItemType.LINE_ITEM ||\n props.type == ItemType.NETWORK_LINK\n ) {\n return false;\n }\n\n if (\n x > props.x &&\n x < props.x + props.width &&\n y > props.y &&\n y < props.y + props.height\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * React to a line movement.\n * @param e Event object.\n */\n private handleLineElementMovementFinished: (\n e: LineMovedEvent\n ) => void = e => {\n // Update links.\n this.refreshLink(e.item);\n\n // Build line relationships between items and lines.\n this.lineMovedEventManager.emit(e);\n\n // console.log(`Movement finished for element #${e.item.props.id}`, e);\n };\n\n /**\n * React to a resizement on an element.\n * @param e Event object.\n */\n private handleElementResizement: (e: ItemResizedEvent) => void = e => {\n if (\n e.item.props.type !== 13 &&\n e.item.props.type !== 21 &&\n (typeof this.props.gridSelected === \"undefined\" ||\n this.props.gridSelected === false)\n ) {\n this.elements.forEach(item => {\n if (\n item.meta.isSelected === true &&\n e.item.itemProps.id !== item.itemProps.id &&\n item.props.type !== 13 &&\n item.props.type !== 21\n ) {\n item.setMeta({ isUpdating: true });\n // Resize the DOM element.\n item.resizeElement(e.newSize.width, e.newSize.height);\n // Run the save function.\n item.debouncedResizementSave(e.newSize.width, e.newSize.height);\n }\n });\n }\n // Move their relation lines.\n const item = e.item;\n const props = item.props;\n const itemId = props.id;\n const relations = this.getItemRelations(itemId);\n\n const position = {\n x: props.x,\n y: props.y\n };\n\n const meta = this.elementsById[itemId].meta;\n\n this.elementsById[itemId].meta = {\n ...meta,\n isUpdating: true\n };\n\n relations.forEach(relation => {\n if (relation.parentId === itemId) {\n // Move the line start.\n relation.line.props = {\n ...relation.line.props,\n startPosition: this.getVisualCenter(position, item)\n };\n } else if (relation.childId === itemId) {\n // Move the line end.\n relation.line.props = {\n ...relation.line.props,\n endPosition: this.getVisualCenter(position, item)\n };\n }\n });\n\n // console.log(`Resized element #${e.item.props.id}`, e);\n };\n\n /**\n * React to a finished resizement on an element.\n * @param e Event object.\n */\n private handleElementResizementFinished: (\n e: ItemResizedEvent\n ) => void = e => {\n this.resizedEventManager.emit(e);\n // console.log(`Resize fonished for element #${e.item.props.id}`, e);\n };\n\n /**\n * Clear some element references.\n * @param e Event object.\n */\n private handleElementRemove: (e: ItemRemoveEvent) => void = e => {\n // Remove the element from the list and its relations.\n this.elementIds = this.elementIds.filter(id => id !== e.item.props.id);\n delete this.elementsById[e.item.props.id];\n this.clearRelations(e.item.props.id);\n };\n\n /**\n * React to element selection change\n * @param e Event object.\n */\n private handleElementSelectionChanged: (\n e: ItemSelectionChangedEvent\n ) => void = e => {\n if (this.elements.filter(item => item.meta.isSelected == true).length > 0) {\n e.selected = true;\n } else {\n e.selected = false;\n }\n this.selectionChangedEventManager.emit(e);\n };\n\n // TODO: Document\n private handleContainerClick: (e: MouseEvent) => void = () => {\n this.unSelectItems();\n };\n\n /**\n * Refresh link for given line.\n *\n * @param line Line.\n */\n protected refreshLink(l: Line) {\n let line: number = l.props.id;\n let itemAtStart = 0;\n let itemAtEnd = 0;\n\n try {\n for (let i in this.elementsById) {\n if (\n this.coordinatesInItem(\n l.props.startPosition.x,\n l.props.startPosition.y,\n this.elementsById[i].props\n )\n ) {\n // Start position at element i.\n itemAtStart = parseInt(i);\n }\n\n if (\n this.coordinatesInItem(\n l.props.endPosition.x,\n l.props.endPosition.y,\n this.elementsById[i].props\n )\n ) {\n // Start position at element i.\n itemAtEnd = parseInt(i);\n }\n }\n\n if (this.lineLinks == null) {\n this.lineLinks = {};\n }\n\n if (this.lines == null) {\n this.lines = {};\n }\n\n if (itemAtStart == line) {\n itemAtStart = 0;\n }\n\n if (itemAtEnd == line) {\n itemAtEnd = 0;\n }\n\n // Initialize line if not registered.\n if (this.lines[line] == null) {\n this.lines[line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n }\n\n // Register 'start' side of the line.\n if (itemAtStart > 0) {\n // Initialize.\n if (this.lineLinks[itemAtStart] == null) {\n this.lineLinks[itemAtStart] = {};\n }\n\n // Assign.\n this.lineLinks[itemAtStart][line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n\n // Register line if not exists prviously.\n } else {\n // Clean previous line relationship.\n if (this.lines[line][\"start\"] > 0) {\n this.lineLinks[this.lines[line][\"start\"]][line][\"start\"] = 0;\n this.lines[line][\"start\"] = 0;\n }\n }\n\n if (itemAtEnd > 0) {\n if (this.lineLinks[itemAtEnd] == null) {\n this.lineLinks[itemAtEnd] = {};\n }\n\n this.lineLinks[itemAtEnd][line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n } else {\n // Clean previous line relationship.\n if (this.lines[line][\"end\"] > 0) {\n this.lineLinks[this.lines[line][\"end\"]][line][\"end\"] = 0;\n this.lines[line][\"end\"] = 0;\n }\n }\n\n this.lines[line] = {\n start: itemAtStart,\n end: itemAtEnd\n };\n\n // Cleanup.\n for (let i in this.lineLinks) {\n if (this.lineLinks[i][line]) {\n if (\n this.lineLinks[i][line].start == 0 &&\n this.lineLinks[i][line].end == 0\n ) {\n // Object not connected to a line.\n delete this.lineLinks[i][line];\n\n if (Object.keys(this.lineLinks[i]).length === 0) {\n delete this.lineLinks[i];\n }\n }\n\n if (\n (this.lineLinks[i][line].start != itemAtStart &&\n this.lineLinks[i][line].end == itemAtEnd) ||\n (this.lineLinks[i][line].start == itemAtStart &&\n this.lineLinks[i][line].end != itemAtEnd)\n ) {\n // Object not connected to a line.\n delete this.lineLinks[i][line];\n\n if (Object.keys(this.lineLinks[i]).length === 0) {\n delete this.lineLinks[i];\n }\n }\n }\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n /**\n * Updates lines connected to this item.\n *\n * @param item Item moved.\n * @param newPosition New location for item.\n * @param oldPosition Old location for item.\n * @param save Save to ajax or not.\n */\n protected updateLinesConnected(item: ItemProps, to: Position, save: boolean) {\n if (this.lineLinks[item.id] == null) {\n return;\n }\n\n Object.keys(this.lineLinks[item.id]).forEach(i => {\n let lineId = parseInt(i);\n const found = this.elementIds.indexOf(lineId);\n if (found === -1) {\n return;\n }\n let line = this.elementsById[lineId] as Line;\n\n if (line.props) {\n let startX = line.props.startPosition.x;\n let startY = line.props.startPosition.y;\n let endX = line.props.endPosition.x;\n let endY = line.props.endPosition.y;\n\n if (item.id == this.lineLinks[item.id][lineId][\"start\"]) {\n startX = to.x + item.width / 2;\n startY = to.y + item.height / 2;\n }\n\n if (item.id == this.lineLinks[item.id][lineId][\"end\"]) {\n endX = to.x + item.width / 2;\n endY = to.y + item.height / 2;\n }\n\n // Update line movement.\n this.updateElement({\n ...line.props,\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY\n });\n\n if (save) {\n let debouncedLinePositionSave = debounce(\n 500,\n (options: AnyObject) => {\n this.lineMovedEventManager.emit({\n item: options.line,\n startPosition: {\n x: options.startX,\n y: options.startY\n },\n endPosition: {\n x: options.endX,\n y: options.endY\n }\n });\n }\n );\n\n // Save line positon.\n debouncedLinePositionSave({\n line: line,\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY\n });\n }\n }\n });\n\n // Update parents...\n this.buildRelations(item.id, to.x + item.width / 2, to.y + item.height / 2);\n }\n\n public constructor(\n container: HTMLElement,\n props: AnyObject,\n items: AnyObject[]\n ) {\n this.containerRef = container;\n this._props = visualConsolePropsDecoder(props);\n\n // Force the first render.\n this.render();\n\n // Sort by id ASC\n items = items.sort(function(a, b) {\n if (a.id == null || b.id == null) return 0;\n else if (a.id > b.id) return 1;\n else return -1;\n });\n\n // Initialize the items.\n items.forEach(item => this.addElement(item, this));\n\n // Create lines.\n this.buildRelations();\n\n // Re-attach all connected lines if any.\n this.elements.forEach(item => {\n if (item instanceof Line) {\n this.refreshLink(item);\n }\n });\n\n this.containerRef.addEventListener(\"click\", this.handleContainerClick);\n }\n\n /**\n * Public accessor of the `elements` property.\n * @return Properties.\n */\n public get elements(): Item<ItemProps>[] {\n // Ensure the type cause Typescript doesn't know the filter removes null items.\n return this.elementIds\n .map(id => this.elementsById[id])\n .filter(_ => _ != null) as Item<ItemProps>[];\n }\n\n /**\n * To create a new element add it to the DOM.\n * @param item. Raw representation of the item's data.\n */\n public addElement(item: AnyObject, context: this = this) {\n try {\n if (item.ratio == null) {\n item.ratio = 1;\n }\n\n item.x *= item.ratio;\n item.y *= item.ratio;\n if (item.type == ItemType.LINE_ITEM) {\n item.startX *= item.ratio;\n item.startY *= item.ratio;\n item.endX *= item.ratio;\n item.endY *= item.ratio;\n }\n const itemInstance = itemInstanceFrom(item);\n\n // Add the item to the list.\n context.elementsById[itemInstance.props.id] = itemInstance;\n context.elementIds.push(itemInstance.props.id);\n // Item event handlers.\n itemInstance.onRemove(context.handleElementRemove);\n itemInstance.onSelectionChanged(context.handleElementSelectionChanged);\n itemInstance.onClick(context.handleElementClick);\n itemInstance.onDblClick(context.handleElementDblClick);\n\n // TODO:Continue\n if (itemInstance instanceof Line) {\n itemInstance.onLineMovementFinished(\n context.handleLineElementMovementFinished\n );\n this.refreshLink(itemInstance);\n } else {\n itemInstance.onMoved(context.handleElementMovement);\n itemInstance.onMovementFinished(context.handleElementMovementFinished);\n itemInstance.onResized(context.handleElementResizement);\n itemInstance.onResizeFinished(context.handleElementResizementFinished);\n }\n\n if (item.ratio !== 1 && item.type != ItemType.LINE_ITEM) {\n itemInstance.elementRef.style.transform = `scale(${\n item.ratio ? item.ratio : 1\n })`;\n itemInstance.elementRef.style.transformOrigin = \"left top\";\n itemInstance.elementRef.style.minWidth = \"max-content\";\n itemInstance.elementRef.style.minHeight = \"max-content\";\n }\n\n // Add the item to the DOM.\n context.containerRef.append(itemInstance.elementRef);\n return itemInstance;\n } catch (error) {\n console.error(\"Error creating a new element:\", (error as Error).message);\n }\n return;\n }\n\n /**\n * Public setter of the `elements` property.\n * @param items.\n */\n public updateElements(items: AnyObject[]): void {\n // Ensure the type cause Typescript doesn't know the filter removes null items.\n const itemIds = items\n .map(item => item.id || null)\n .filter(id => id != null) as number[];\n // Get the elements we should delete.\n const deletedIds = this.elementIds.filter(id => itemIds.indexOf(id) < 0);\n // Delete the elements.\n deletedIds.forEach(id => {\n if (this.elementsById[id] != null) {\n this.elementsById[id].remove();\n delete this.elementsById[id];\n }\n });\n // Replace the element ids.\n this.elementIds = itemIds;\n\n // Initialize the items.\n items.forEach(item => {\n if (item.id) {\n if (this.elementsById[item.id] == null) {\n // New item.\n this.addElement(item);\n } else {\n // Update item.\n try {\n if (item.ratio != null) {\n item.x *= item.ratio;\n item.y *= item.ratio;\n if (item.type == ItemType.LINE_ITEM) {\n item.startX *= item.ratio;\n item.startY *= item.ratio;\n item.endX *= item.ratio;\n item.endY *= item.ratio;\n }\n }\n this.elementsById[item.id].props = decodeProps(item);\n } catch (error) {\n console.error(\n \"Error updating an element:\",\n (error as Error).message\n );\n }\n }\n }\n });\n\n // Re-build relations.\n this.buildRelations();\n }\n\n /**\n * Public setter of the `element` property.\n * @param item.\n */\n public updateElement(item: AnyObject): void {\n // Update item.\n try {\n this.elementsById[item.id].props = {\n ...decodeProps(item)\n };\n } catch (error) {\n console.error(\"Error updating element:\", (error as Error).message);\n }\n\n // Re-build relations.\n this.buildRelations();\n }\n\n /**\n * Public accessor of the `props` property.\n * @return Properties.\n */\n public get props(): VisualConsoleProps {\n return { ...this._props }; // Return a copy.\n }\n\n /**\n * Public setter of the `props` property.\n * If the new props are different enough than the\n * stored props, a render would be fired.\n * @param newProps\n */\n public set props(newProps: VisualConsoleProps) {\n const prevProps = this.props;\n // Update the internal props.\n this._props = newProps;\n\n // From this point, things which rely on this.props can access to the changes.\n\n // Re-render.\n this.render(prevProps);\n }\n\n /**\n * Recreate or update the HTMLElement which represents the Visual Console into the DOM.\n * @param prevProps If exists it will be used to only DOM updates instead of a full replace.\n */\n public render(prevProps: VisualConsoleProps | null = null): void {\n if (prevProps) {\n if (prevProps.backgroundURL !== this.props.backgroundURL) {\n this.containerRef.style.backgroundImage =\n this.props.backgroundURL !== null\n ? `url(${this.props.backgroundURL})`\n : \"\";\n }\n if (this.props.backgroundColor != null)\n if (prevProps.backgroundColor !== this.props.backgroundColor) {\n this.containerRef.style.backgroundColor = this.props.backgroundColor;\n }\n if (this.sizeChanged(prevProps, this.props)) {\n this.resizeElement(this.props.width, this.props.height);\n }\n } else {\n if (this.props.backgroundURL)\n this.containerRef.style.backgroundImage =\n this.props.backgroundURL !== null\n ? `url(${this.props.backgroundURL})`\n : \"\";\n\n if (this.props.backgroundColor)\n this.containerRef.style.backgroundColor = this.props.backgroundColor;\n this.resizeElement(this.props.width, this.props.height);\n }\n }\n\n /**\n * Compare the previous and the new size and return\n * a boolean value in case the size changed.\n * @param prevSize\n * @param newSize\n * @return Whether the size changed or not.\n */\n public sizeChanged(prevSize: Size, newSize: Size): boolean {\n return (\n prevSize.width !== newSize.width || prevSize.height !== newSize.height\n );\n }\n\n /**\n * Resize the DOM container.\n * @param width\n * @param height\n */\n public resizeElement(width: number, height: number): void {\n this.containerRef.style.width = `${width}px`;\n this.containerRef.style.height = `${height}px`;\n }\n\n /**\n * Update the size into the properties and resize the DOM container.\n * @param width\n * @param height\n */\n public resize(width: number, height: number): void {\n this.props = {\n ...this.props, // Object spread: http://es6-features.org/#SpreadOperator\n width,\n height\n };\n }\n\n /**\n * To remove the event listeners and the elements from the DOM.\n */\n public remove(): void {\n this.disposables.forEach(d => d.dispose()); // Arrow function.\n this.elements.forEach(e => e.remove()); // Arrow function.\n this.elementsById = {};\n this.elementIds = [];\n // Clear relations.\n this.clearRelations();\n // Remove the click event listener.\n this.containerRef.removeEventListener(\"click\", this.handleContainerClick);\n // Clean container.\n this.containerRef.innerHTML = \"\";\n }\n\n /**\n * Create line elements which connect the elements with their parents.\n *\n * When itemId is being moved, overwrite position of the 'parent' or 'child'\n * endpoints of the line, using X and Y values.\n */\n public buildRelations(itemId?: number, x?: number, y?: number): void {\n // Clear relations.\n this.clearRelations();\n // Add relations.\n this.elements.forEach(item => {\n if (item.props.parentId !== null) {\n const parent = this.elementsById[item.props.parentId];\n const child = this.elementsById[item.props.id];\n\n if (parent && child) {\n if (itemId != undefined) {\n if (item.props.parentId == itemId) {\n // Update parent line position.\n this.addRelationLine(parent, child, x, y);\n } else if (item.props.id == itemId) {\n // Update child line position.\n this.addRelationLine(parent, child, undefined, undefined, x, y);\n } else {\n this.addRelationLine(parent, child);\n }\n } else {\n // No movements default behaviour.\n this.addRelationLine(parent, child);\n }\n }\n }\n });\n }\n\n /**\n * @param itemId Optional identifier of a parent or child item.\n * Remove the line elements which connect the elements with their parents.\n */\n private clearRelations(itemId?: number): void {\n if (itemId != null) {\n for (let key in this.relations) {\n const ids = key.split(\"|\");\n const parentId = Number.parseInt(ids[0]);\n const childId = Number.parseInt(ids[1]);\n\n if (itemId === parentId || itemId === childId) {\n this.relations[key].remove();\n delete this.relations[key];\n }\n }\n } else {\n for (let key in this.relations) {\n this.relations[key].remove();\n delete this.relations[key];\n }\n }\n }\n\n /**\n * Retrieve the line element which represent the relation between items.\n * @param parentId Identifier of the parent item.\n * @param childId Itentifier of the child item.\n * @return The line element or nothing.\n */\n private getRelationLine(parentId: number, childId: number): Line | null {\n const identifier = `${parentId}|${childId}`;\n return this.relations[identifier] || null;\n }\n\n // TODO: Document.\n private getItemRelations(\n itemId: number\n ): {\n parentId: number;\n childId: number;\n line: Line;\n }[] {\n const itemRelations = [];\n\n for (let key in this.relations) {\n const ids = key.split(\"|\");\n const parentId = Number.parseInt(ids[0]);\n const childId = Number.parseInt(ids[1]);\n\n if (itemId === parentId || itemId === childId) {\n itemRelations.push({\n parentId,\n childId,\n line: this.relations[key]\n });\n }\n }\n\n return itemRelations;\n }\n\n /**\n * Retrieve the visual center of the item. It's ussually the center of the\n * content, like the label doesn't exist.\n * @param position Initial position.\n * @param element Element we want to use.\n */\n private getVisualCenter(\n position: Position,\n element: Item<ItemProps>\n ): Position {\n let ratio = 1;\n if (element.props.ratio != null) {\n ratio = element.props.ratio;\n }\n\n let x = position.x + (element.elementRef.clientWidth / 2) * ratio;\n let y = position.y + (element.elementRef.clientHeight / 2) * ratio;\n\n if (\n typeof element.props.label !== \"undefined\" ||\n element.props.label !== \"\" ||\n element.props.label !== null\n ) {\n switch (element.props.labelPosition) {\n case \"up\":\n y =\n position.y +\n ((element.elementRef.clientHeight +\n element.labelElementRef.clientHeight) /\n 2) *\n ratio;\n break;\n case \"down\":\n y =\n position.y +\n ((element.elementRef.clientHeight -\n element.labelElementRef.clientHeight) /\n 2) *\n ratio;\n break;\n case \"right\":\n x =\n position.x +\n ((element.elementRef.clientWidth -\n element.labelElementRef.clientWidth) /\n 2) *\n ratio;\n break;\n case \"left\":\n x =\n position.x +\n ((element.elementRef.clientWidth +\n element.labelElementRef.clientWidth) /\n 2) *\n ratio;\n break;\n }\n }\n\n return { x, y };\n }\n\n /**\n * Add a new line item to represent a relation between the items.\n * @param parent Parent item.\n * @param child Child item.\n * @return Whether the line was added or not.\n */\n private addRelationLine(\n parent: Item<ItemProps>,\n child: Item<ItemProps>,\n parentX?: number,\n parentY?: number,\n childX?: number,\n childY?: number\n ): Line {\n const identifier = `${parent.props.id}|${child.props.id}`;\n if (this.relations[identifier] != null) {\n this.relations[identifier].remove();\n }\n\n // Get the items center.\n let { x: startX, y: startY } = this.getVisualCenter(parent.props, parent);\n let { x: endX, y: endY } = this.getVisualCenter(child.props, child);\n\n // Overwrite positions if needed (while moving it!).\n if (parentX != null) {\n startX = parentX;\n }\n\n if (parentY != null) {\n startY = parentY;\n }\n\n if (childX != null) {\n endX = childX;\n }\n\n if (childY != null) {\n endY = childY;\n }\n\n // Line inherits child element status.\n const line = new Line(\n linePropsDecoder({\n id: 0,\n type: ItemType.LINE_ITEM,\n startX,\n startY,\n endX,\n endY,\n width: 0,\n height: 0,\n lineWidth: this.props.relationLineWidth,\n color: notEmptyStringOr(child.props.colorStatus, \"#CCC\"),\n ratio: parent.props.ratio\n }),\n itemMetaDecoder({\n receivedAt: new Date()\n })\n );\n\n // Save a reference to the line item.\n this.relations[identifier] = line;\n\n // Add the line to the DOM.\n line.elementRef.style.zIndex = \"0\";\n this.containerRef.append(line.elementRef);\n\n return line;\n }\n\n /**\n * Add an event handler to the click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is clicked.\n */\n public onItemClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.clickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the double click of the linked visual console elements.\n * @param listener Function which is going to be executed when a linked console is double clicked.\n */\n public onItemDblClick(listener: Listener<ItemClickEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.dblClickEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the movement of the visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onItemMoved(listener: Listener<ItemMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.movedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the movement of the visual console line elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onLineMoved(listener: Listener<LineMovedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.lineMovedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the resizement of the visual console elements.\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onItemResized(listener: Listener<ItemResizedEvent>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.resizedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Add an event handler to the elements selection change of the visual console .\n * @param listener Function which is going to be executed when a linked console is moved.\n */\n public onItemSelectionChanged(\n listener: Listener<ItemSelectionChangedEvent>\n ): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.selectionChangedEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n /**\n * Enable the edition mode.\n */\n public enableEditMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, editMode: true };\n });\n this.containerRef.classList.add(\"is-editing\");\n }\n\n /**\n * Disable the edition mode.\n */\n public disableEditMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, editMode: false };\n });\n this.containerRef.classList.remove(\"is-editing\");\n }\n\n /**\n * Enable the maintenance mode.\n */\n public enableMaintenanceMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, maintenanceMode: true };\n });\n this.containerRef.classList.add(\"is-maintenance\");\n this.containerRef.classList.remove(\"is-editing\");\n }\n\n /**\n * Disable the maintenance mode.\n */\n public disableMaintenanceMode(): void {\n this.elements.forEach(item => {\n item.meta = { ...item.meta, maintenanceMode: false };\n });\n this.containerRef.classList.remove(\"is-maintenance\");\n this.containerRef.classList.add(\"is-editing\");\n }\n\n /**\n * Update the gridSize.\n */\n public updateGridSize(gridSize: string): void {\n this._props.gridSize = parseInt(gridSize);\n this.props.gridSize = parseInt(gridSize);\n }\n\n /**\n * Update the gridSize.\n */\n public updateGridSelected(gridSelected: boolean): void {\n this._props.gridSelected = gridSelected;\n this.props.gridSelected = gridSelected;\n }\n\n /**\n * Select an item.\n * @param itemId Item Id.\n * @param unique To remove the selection of other items or not.\n */\n public selectItem(itemId: number, unique: boolean = false): void {\n if (unique) {\n this.elementIds.forEach(currentItemId => {\n const meta = this.elementsById[currentItemId].meta;\n\n if (currentItemId !== itemId && meta.isSelected) {\n this.elementsById[currentItemId].unSelectItem();\n } else if (currentItemId === itemId && !meta.isSelected) {\n this.elementsById[currentItemId].selectItem();\n }\n });\n } else if (this.elementsById[itemId]) {\n this.elementsById[itemId].selectItem();\n }\n }\n\n /**\n * Unselect an item.\n * @param itemId Item Id.\n */\n public unSelectItem(itemId: number): void {\n if (this.elementsById[itemId]) {\n const meta = this.elementsById[itemId].meta;\n\n if (meta.isSelected) {\n this.elementsById[itemId].unSelectItem();\n }\n }\n }\n\n /**\n * Unselect all items.\n */\n public unSelectItems(): void {\n this.elementIds.forEach(itemId => {\n if (this.elementsById[itemId]) {\n this.elementsById[itemId].unSelectItem();\n }\n });\n }\n\n // TODO: Document.\n public static items = {\n [ItemType.STATIC_GRAPH]: StaticGraph,\n [ItemType.MODULE_GRAPH]: ModuleGraph,\n [ItemType.SIMPLE_VALUE]: SimpleValue,\n [ItemType.SIMPLE_VALUE_MAX]: SimpleValue,\n [ItemType.SIMPLE_VALUE_MIN]: SimpleValue,\n [ItemType.SIMPLE_VALUE_AVG]: SimpleValue,\n [ItemType.PERCENTILE_BAR]: Percentile,\n [ItemType.PERCENTILE_BUBBLE]: Percentile,\n [ItemType.CIRCULAR_PROGRESS_BAR]: Percentile,\n [ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR]: Percentile,\n [ItemType.LABEL]: Label,\n [ItemType.ICON]: Icon,\n [ItemType.SERVICE]: Service,\n [ItemType.GROUP_ITEM]: Group,\n [ItemType.BOX_ITEM]: Box,\n [ItemType.LINE_ITEM]: Line,\n [ItemType.AUTO_SLA_GRAPH]: EventsHistory,\n [ItemType.DONUT_GRAPH]: DonutGraph,\n [ItemType.BARS_GRAPH]: BarsGraph,\n [ItemType.CLOCK]: Clock,\n [ItemType.COLOR_CLOUD]: ColorCloud,\n [ItemType.NETWORK_LINK]: NetworkLink,\n [ItemType.ODOMETER]: Odometer,\n [ItemType.BASIC_CHART]: BasicChart\n };\n\n /**\n * Relying type item and srcimg and agent and module\n * name convert name item representative.\n *\n * @param item Instance item from extract name.\n *\n * @return Name item.\n */\n public static itemDescriptiveName(item: Item<ItemProps>): string {\n let text: string;\n switch (item.props.type) {\n case ItemType.STATIC_GRAPH:\n text = `${t(\"Static graph\")} - ${(item as StaticGraph).props.imageSrc}`;\n break;\n case ItemType.MODULE_GRAPH:\n text = t(\"Module graph\");\n break;\n case ItemType.CLOCK:\n text = t(\"Clock\");\n break;\n case ItemType.BARS_GRAPH:\n text = t(\"Bars graph\");\n break;\n case ItemType.AUTO_SLA_GRAPH:\n text = t(\"Event history graph\");\n break;\n case ItemType.PERCENTILE_BAR:\n text = t(\"Percentile bar\");\n break;\n case ItemType.CIRCULAR_PROGRESS_BAR:\n text = t(\"Circular progress bar\");\n break;\n case ItemType.CIRCULAR_INTERIOR_PROGRESS_BAR:\n text = t(\"Circular progress bar (interior)\");\n break;\n case ItemType.SIMPLE_VALUE:\n text = t(\"Simple Value\");\n break;\n case ItemType.LABEL:\n text = t(\"Label\");\n break;\n case ItemType.GROUP_ITEM:\n text = t(\"Group\");\n break;\n case ItemType.COLOR_CLOUD:\n text = t(\"Color cloud\");\n break;\n case ItemType.ICON:\n text = `${t(\"Icon\")} - ${(item as Icon).props.imageSrc}`;\n break;\n case ItemType.ODOMETER:\n text = t(\"Odometer\");\n break;\n case ItemType.BASIC_CHART:\n text = t(\"BasicChart\");\n break;\n default:\n text = t(\"Item\");\n break;\n }\n\n const linkedAgentAndModuleProps = item.props as Partial<WithModuleProps>;\n if (\n linkedAgentAndModuleProps.agentAlias != null &&\n linkedAgentAndModuleProps.moduleName != null\n ) {\n text += ` (${ellipsize(\n linkedAgentAndModuleProps.agentAlias,\n 18\n )} - ${ellipsize(linkedAgentAndModuleProps.moduleName, 25)})`;\n } else if (linkedAgentAndModuleProps.agentAlias != null) {\n text += ` (${ellipsize(linkedAgentAndModuleProps.agentAlias, 25)})`;\n }\n\n return text;\n }\n}\n","import TypedEvent, { Disposable, Listener } from \"./TypedEvent\";\n\ninterface Cancellable {\n cancel(): void;\n}\n\ntype AsyncTaskStatus = \"waiting\" | \"started\" | \"cancelled\" | \"finished\";\ntype AsyncTaskInitiator = (done: () => void) => Cancellable;\n\n/**\n * Defines an async task which can be started and cancelled.\n * It's possible to observe the status changes of the task.\n */\nclass AsyncTask {\n private readonly taskInitiator: AsyncTaskInitiator;\n private cancellable: Cancellable = { cancel: () => {} };\n private _status: AsyncTaskStatus = \"waiting\";\n\n // Event manager for status change events.\n private readonly statusChangeEventManager = new TypedEvent<AsyncTaskStatus>();\n // List of references to clean the event listeners.\n private readonly disposables: Disposable[] = [];\n\n public constructor(taskInitiator: AsyncTaskInitiator) {\n this.taskInitiator = taskInitiator;\n }\n\n /**\n * Public setter of the `status` property.\n * @param status.\n */\n public set status(status: AsyncTaskStatus) {\n this._status = status;\n this.statusChangeEventManager.emit(status);\n }\n\n /**\n * Public accessor of the `status` property.\n * @return status.\n */\n public get status() {\n return this._status;\n }\n\n /**\n * Start the async task.\n */\n public init(): void {\n this.cancellable = this.taskInitiator(() => {\n this.status = \"finished\";\n });\n this.status = \"started\";\n }\n\n /**\n * Cancel the async task.\n */\n public cancel(): void {\n this.cancellable.cancel();\n this.status = \"cancelled\";\n }\n\n /**\n * Add an event handler to the status change.\n * @param listener Function which is going to be executed when the status changes.\n */\n public onStatusChange(listener: Listener<AsyncTaskStatus>): Disposable {\n /*\n * The '.on' function returns a function which will clean the event\n * listener when executed. We store all the 'dispose' functions to\n * call them when the item should be cleared.\n */\n const disposable = this.statusChangeEventManager.on(listener);\n this.disposables.push(disposable);\n\n return disposable;\n }\n}\n\n/**\n * Wrap an async task into another which will execute that task indefinitely\n * every time the tash finnish and the chosen period ends.\n * Will last until cancellation.\n *\n * @param task Async task to execute.\n * @param period Time in milliseconds to wait until the next async esecution.\n *\n * @return A new async task.\n */\nfunction asyncPeriodic(task: AsyncTask, period: number): AsyncTask {\n return new AsyncTask(() => {\n let ref: number | null = null;\n\n task.onStatusChange(status => {\n if (status === \"finished\") {\n ref = window.setTimeout(() => {\n task.init();\n }, period);\n }\n });\n\n task.init();\n\n return {\n cancel: () => {\n if (ref) clearTimeout(ref);\n task.cancel();\n }\n };\n });\n}\n\n/**\n * Manages a list of async tasks.\n */\nexport default class AsyncTaskManager {\n private tasks: { [identifier: string]: AsyncTask } = {};\n\n /**\n * Adds an async task to the manager.\n *\n * @param identifier Unique identifier.\n * @param taskInitiator Function to initialize the async task.\n * Should return a structure to cancel the task.\n * @param period Optional period to repeat the task indefinitely.\n */\n public add(\n identifier: string,\n taskInitiator: AsyncTaskInitiator,\n period: number = 0\n ): AsyncTask {\n if (this.tasks[identifier] && this.tasks[identifier].status === \"started\") {\n this.tasks[identifier].cancel();\n }\n\n const asyncTask =\n period > 0\n ? asyncPeriodic(new AsyncTask(taskInitiator), period)\n : new AsyncTask(taskInitiator);\n\n this.tasks[identifier] = asyncTask;\n\n return this.tasks[identifier];\n }\n\n /**\n * Starts an async task.\n *\n * @param identifier Unique identifier.\n */\n public init(identifier: string) {\n if (\n this.tasks[identifier] &&\n (this.tasks[identifier].status === \"waiting\" ||\n this.tasks[identifier].status === \"cancelled\" ||\n this.tasks[identifier].status === \"finished\")\n ) {\n this.tasks[identifier].init();\n }\n }\n\n /**\n * Cancel a running async task.\n *\n * @param identifier Unique identifier.\n */\n public cancel(identifier: string) {\n if (this.tasks[identifier] && this.tasks[identifier].status === \"started\") {\n this.tasks[identifier].cancel();\n }\n }\n}\n","/*\n * Useful resources.\n * http://es6-features.org/\n * http://exploringjs.com/es6\n * https://www.typescriptlang.org/\n */\n\nimport \"./main.css\"; // CSS import.\nimport VisualConsole from \"./VisualConsole\";\nimport * as Form from \"./Form\";\nimport AsyncTaskManager from \"./lib/AsyncTaskManager\";\n\n// Export the VisualConsole class to the global object.\n// eslint-disable-next-line\n(window as any).VisualConsole = VisualConsole;\n\n// Export the VisualConsole's Form classes to the global object.\n// eslint-disable-next-line\n(window as any).VisualConsole.Form = Form;\n\n// Export the AsyncTaskManager class to the global object.\n// eslint-disable-next-line\n(window as any).AsyncTaskManager = AsyncTaskManager;\n"],"names":["name","initialData","_name","currentData","dataRequestedEventManager","this","length","RangeError","_element","element","document","createElement","className","content","createContent","Array","forEach","appendChild","reset","updateData","data","requestData","identifier","params","done","emit","onDataRequested","listener","on","title","inputGroups","enabledInputGroups","inputGroupsByName","enabledInputGroupNames","submitEventManager","itemDataRequestedEventManager","handleItemDataRequested","reduce","prevVal","inputGroup","filter","getInputGroup","inputGroupName","addInputGroup","index","slice","removeInputGroup","getFormElement","type","form","id","addEventListener","e","preventDefault","nativeEvent","formContent","onSubmit","onInputGroupDataRequested","parseLabelPosition","labelPosition","itemBasePropsDecoder","isNaN","parseInt","TypeError","label","isLinkEnabled","link","isOnTop","parentId","aclGroupId","cacheExpiration","colorStatus","cellId","alertOutline","ratio","props","metadata","deferInit","elementRef","labelElementRef","childElementRef","clickEventManager","dblClickEventManager","movedEventManager","movementFinishedEventManager","resizedEventManager","resizeFinishedEventManager","removeEventManager","selectionChangedEventManager","disposables","debouncedMovementSave","x","y","_metadata","isBeingMoved","prevPosition","newPosition","positionChanged","move","item","removeMovement","debouncedResizementSave","width","height","isBeingResized","prevSize","newSize","sizeChanged","resize","removeResizement","itemProps","init","initMovementListener","meta","isSelected","moveElement","stopMovementListener","initResizementListener","getBoundingClientRect","labelWidth","labelHeight","resizeElement","stopResizementListener","createContainerDomElement","createLabelDomElement","createDomElement","changeLabelPosition","box","href","classList","add","style","left","top","unSelectItem","selectItem","editMode","stopPropagation","divParent","divSpinner","path","composedPath","containerId","undefined","includes","containerVC","getElementById","maintenanceMode","isFetching","isUpdating","getLabelWithMacrosReplaced","table","row","emptyRow1","emptyRow2","cell","innerHTML","textAlign","macro","value","Date","agentAlias","agentDescription","agentAddress","moduleName","moduleDescription","updateDomElement","newProps","setProps","prevProps","shouldBeUpdated","render","newMetadata","setMeta","prevMetadata","selected","prevMeta","transform","transformOrigin","minWidth","minHeight","oldLabelHtml","newLabelHtml","remove","container","attrs","attributes","i","nodeName","cloneIsNeeded","getAttributeNode","cloneAttr","cloneNode","setAttributeNode","parentNode","replaceChild","setAttribute","div","querySelector","parentElement","removeChild","removeAttribute","disposable","dispose","ignored","position","flexDirection","tables","getElementsByTagName","onClick","push","onDblClick","onMoved","onMovementFinished","onResized","onResizeFinished","onRemove","onSelectionChanged","getFormContainer","VisualConsoleItem","t","titleItem","FormContainer","parseBarsGraphProps","backgroundColor","parseTypeGraph","typeGraph","barsGraphPropsDecoder","html","encodedHtml","gridColor","agentDisabled","moduleDisabled","opacity","scripts","src","setTimeout","eval","trim","basicChartPropsDecoder","period","parseFloat","status","moduleNameColor","header","textContent","color","numberFormat","moduleValue","legendP","margin","overviewGraphs","getElementsByClassName","insertBefore","firstChild","number","forceInteger","unit","shortData","divisor","Math","round","auxDecimals","pad","Number","pos","abs","input","padding","str","donutGraphPropsDecoder","legendBackgroundColor","eventsHistoryPropsDecoder","maxTime","legendColor","flotText","aux","parseBackgroundType","backgroundType","parseGraphType","graphType","moduleGraphPropsDecoder","customGraphId","svgNS","iconDefinition","size","spin","pulse","iconName","icon","createElementNS","pathData","listeners","listenersOncer","off","once","callbackIndex","indexOf","splice","event","pipe","te","parseIntOr","defaultValue","parseFloatOr","stringIsEmpty","notEmptyStringOr","parseBoolean","leftPad","diffLength","substr","substring","repeatTimes","floor","restLength","newPad","positionPropsDecoder","sizePropsDecoder","modulePropsDecoder","moduleId","agentProps","agentId","agentName","metaconsoleId","agentPropsDecoder","linkedVCPropsDecoder","linkedLayoutStatusProps","linkedLayoutStatusType","weight","linkedLayoutStatusTypeWeight","warningThreshold","linkedLayoutStatusTypeWarningThreshold","criticalThreshold","linkedLayoutStatusTypeCriticalThreshold","linkedLayoutId","linkedLayoutNodeId","itemMetaDecoder","receivedAt","getTime","error","Error","isFromCache","lineMode","prefixedCssRules","ruleName","ruleValue","rule","decodeBase64","decodeURIComponent","escape","window","atob","humanDate","date","locale","Intl","DateTimeFormat","day","month","year","format","getDate","getMonth","getFullYear","humanTime","hours","getHours","minutes","getMinutes","seconds","getSeconds","replaceMacros","macros","text","acc","replace","throttle","delay","fn","last","now","args","debounce","timerRef","clearTimeout","getOffset","el","parent","offsetLeft","offsetTop","scrollLeft","scrollTop","offsetParent","addMovementListener","altContainer","isDraggable","draggable","lastX","lastY","lastMouseX","lastMouseY","mouseElementOffsetX","mouseElementOffsetY","containerBounds","containerOffset","containerTop","containerBottom","containerLeft","containerRight","elementBounds","borderWidth","getComputedStyle","borderFix","debouncedMovement","throttledMovement","handleMove","mouseX","pageX","mouseY","pageY","mouseDeltaX","mouseDeltaY","maxX","maxY","outOfBoundsLeft","outOfBoundsRight","outOfBoundsTop","outOfBoundsBottom","handleEnd","removeEventListener","body","userSelect","handleStart","button","elementOffset","offsetX","offsetY","addResizementListener","resizeDraggable","lastWidth","lastHeight","elementTop","elementLeft","debouncedResizement","throttledResizement","handleResize","ellipsize","max","ellipse","__webpack_module_cache__","__webpack_require__","cachedModule","exports","module","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","parseShowLastValueTooltip","showLastValueTooltip","staticGraphPropsDecoder","imageSrc","statusImageSrc","lastValue","imgSrc","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","Item","iconPropsDecoder","image","faPlusCircle","prefix","faTrashAlt","colorCloudPropsDecoder","defaultColor","colorRanges","generalDiv","colorLabel","ColorInput","required","target","InputGroup","rangesLabel","createLabel","rangesControlsContainer","createdRangesContainer","buildRanges","ranges","colorRange","rangeContainer","range","handleRangeUpdatePartial","newRanges","handleDelete","initialRangeContainer","onCreate","initialState","state","rangesContainer","rangesContainerFromValue","rangesLabelFromValue","rangesInputFromValue","createInputNumber","fromValue","rangesDivContainerToValue","rangesLabelToValue","rangesInputToValue","toValue","rangesDivContainerColor","rangesLabelColor","rangesInputColor","createInputColor","createBtn","onUpdate","onDelete","deleteBtn","append","createSvgElement","gradientId","svg","defs","radialGradient","stop0","stop100","circle","ColorCloud","formContainer","ColorInputGroup","RangesInputGroup","linePropsDecoder","startPosition","startX","startY","endPosition","endX","endY","lineWidth","borderColor","viewportOffsetX","viewportOffsetY","labelEnd","labelEndWidth","linkedEnd","linkedStart","labelEndHeight","labelStart","labelStartWidth","labelStartHeight","Line","extractBoxSizeAndPosition","circleRadius","moveMode","isMoving","lineMovedEventManager","TypedEvent","lineMovedEventDisposables","debouncedStartPositionMovementSave","removeStartPositionMovement","debouncedEndPositionMovementSave","removeEndPositionMovement","initStartPositionMovementListener","stopStartPositionMovementListener","initEndPositionMovementListener","stopEndPositionMovementListener","x1","y1","x2","y2","line","cursor","svgs","lines","getElementsByTagNameNS","startCircle","endCircle","circlesStart","circlesEnd","borderRadius","circles","min","startIsLeft","startIsTop","start","end","onLineMovementFinished","networkLinkPropsDecoder","groups","adjustment","lineX1","lineY1","lineX2","lineY2","g","atan2","PI","split","l","labels","arrows","arrow","arrowSize","arrowPosX","arrowPosY","arrowStart","border","borderBottom","arrowEnd","htmlLabelStart","console","htmlLabelEnd","groupPropsDecoder","groupId","showStatistics","extractHtml","parseClockType","clockType","parseClockFormat","clockFormat","clockPropsDecoder","clockTimezone","clockTimezoneOffset","showClockTimezone","intervalRef","startTick","createClock","Clock","TICK_INTERVAL","stopTick","clearInterval","handler","interval","setInterval","getElementSize","newWidth","newHeight","createAnalogicClock","createDigitalClock","colors","dateFontSize","baseTimeFontSize","clockFace","clockFaceBackground","city","getHumanTimezone","timezoneComplication","marksGroup","mainMarkGroup","mark1a","mark1b","mark","hourHand","hourHandA","hourHandB","minuteHand","minuteHandA","minuteHandB","minuteHandPin","secondHand","secondHandBar","secondHandPin","pin","getOriginDate","secAngle","minuteAngle","hourAngle","join","dateElem","fontSize","modified","tzFontSizeMultiplier","timeFontSize","tzFontSize","timeElem","tzElem","initialDate","targetTZOffset","localTZOffset","getTimezoneOffset","utimestamp","timezone","diameter","extraHeigth","boxPropsDecoder","fillColor","fillTransparent","boxSizing","borderStyle","maxBorderWidth","labelPropsDecoder","parseValueType","valueType","simpleValuePropsDecoder","processValue","parseProcessValue","img","pi","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","_","constructor","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","w","h","toString","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","extractPercentileType","extractValueType","percentilePropsDecoder","percentileType","minValue","maxValue","labelColor","formatValue","background","progress","getProgress","NumberFormat","backgroundRect","progressRect","backgroundCircle","progressCircle","arcProps","cornerRadius","constant","padRadius","context","buffer","r0","apply","arguments","t0","t1","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","ax","ay","bx","by","kc","lc","centroid","a","trunc","servicePropsDecoder","encodedTitle","serviceId","odometerPropsDecoder","titleColor","titleModule","thresholds","minMaxValue","odometerType","lineWarning","lineWarning2","lineCritical","lineCritical2","JSON","parse","min_warning","max_warning","getCoords","min_critical","max_critical","percent","toFixed","getSubfix","maximumSignificantDigits","maximumFractionDigits","numb","match","rotate","getRotate","anchoB","odometerContainer","odometerA","odometerB","odometerC","gaugeE","SVG_NS","svgWarning","setAttributeNS","pathWarning","svgCritical","pathCritical","h1","innerText","lineHeight","h2","truncateTitle","script","onload","urlPandora","location","pathname","dir","display","minMax","limit","subfix","radio","halfLength","diff","stringBefore","stringAfter","decodeProps","items","elementsById","elementIds","relations","lineLinks","handleElementClick","handleElementDblClick","handleElementMovement","gridSelected","elements","movementX","movementY","newX","newY","gridSize","positionX","positionY","itemId","getItemRelations","relation","getVisualCenter","childId","updateLinesConnected","handleElementMovementFinished","handleLineElementMovementFinished","refreshLink","handleElementResizement","handleElementResizementFinished","handleElementRemove","clearRelations","handleElementSelectionChanged","handleContainerClick","unSelectItems","containerRef","_props","backgroundURL","isFavorite","relationLineWidth","visualConsolePropsDecoder","sort","b","addElement","buildRelations","coordinatesInItem","itemAtStart","itemAtEnd","keys","to","save","lineId","updateElement","options","debouncedLinePositionSave","map","itemInstance","ModuleGraph","EventsHistory","DonutGraph","BarsGraph","BasicChart","itemInstanceFrom","message","updateElements","itemIds","child","addRelationLine","ids","getRelationLine","itemRelations","clientWidth","clientHeight","parentX","parentY","childX","childY","zIndex","onItemClick","onItemDblClick","onItemMoved","onLineMoved","onItemResized","onItemSelectionChanged","enableEditMode","disableEditMode","enableMaintenanceMode","disableMaintenanceMode","updateGridSize","updateGridSelected","unique","currentItemId","itemDescriptiveName","linkedAgentAndModuleProps","taskInitiator","cancellable","cancel","_status","statusChangeEventManager","onStatusChange","tasks","asyncTask","task","AsyncTask","ref","asyncPeriodic","VisualConsole","Form","AsyncTaskManager"],"sourceRoot":""} \ No newline at end of file diff --git a/pandora_console/index.php b/pandora_console/index.php index 49bccd1b14..464d9fd348 100755 --- a/pandora_console/index.php +++ b/pandora_console/index.php @@ -1199,8 +1199,18 @@ if ($config['pure'] == 0) { // Menu container prepared to autohide menu. $menuCollapsed = (isset($_SESSION['menu_type']) === true && $_SESSION['menu_type'] !== 'classic'); $menuTypeClass = ($menuCollapsed === true) ? 'collapsed' : 'classic'; + // Snow. + $string = '<div id="container-snow" class="tpl-snow invisible"> + <div></div><div></div><div></div><div></div><div></div><div></div><div></div> + <div></div><div></div><div></div><div></div><div></div><div></div><div></div> + <div></div><div></div><div></div><div></div><div></div><div></div><div></div> + <div></div><div></div><div></div><div></div><div></div><div></div><div></div> + <div></div><div></div><div></div><div></div><div></div><div></div><div></div> + <div></div><div></div><div></div><div></div><div></div><div></div><div></div> + <div></div><div></div><div></div><div></div><div></div> + </div>'; // Container. - echo '<div id="container">'; + echo '<div id="container">'.$string; // Notifications content wrapper echo '<div id="notification-content" class="invisible"/></div>'; @@ -1669,12 +1679,31 @@ require 'include/php_to_js_values.php'; autoclose_info_box(item.id, $autocloseTime) } ); - }); - // Cog animations. - $(document).ready(function() { + // Cog animations. $(".submitButton").click(function(){ $("#"+this.id+" > .subIcon.cog").addClass("rotation"); }); + + <?php if ($_GET['logged'] === '1' && enterprise_installed() === false) { ?> + $('#header_table_inner').find('.header_left').trigger('click'); + <?php } ?> }); + + // Snow animations. + $(document).ready(function() { + const date = new Date(); + const today = date.toLocaleDateString(); + const year = date.getFullYear(); + const christmasDay = "25/12/"+year; + let flagEasternEgg = $("#flagEasternEgg").val(); + if (today === christmasDay && flagEasternEgg == true) { + $("#container-snow").removeClass('invisible'); + setTimeout(() => { + $("#container-snow").addClass('invisible'); + }, 30000); + } + + }); + </script> diff --git a/pandora_console/install.php b/pandora_console/install.php index 6ff3a4eb0b..50fc5ee94e 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -131,7 +131,7 @@ <div style='padding-bottom: 50px'> <?php $version = '7.0NG.774'; - $build = '231215'; + $build = '231219'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/operation/agentes/stat_win.php b/pandora_console/operation/agentes/stat_win.php index a16d4c6e65..e945797529 100644 --- a/pandora_console/operation/agentes/stat_win.php +++ b/pandora_console/operation/agentes/stat_win.php @@ -127,6 +127,7 @@ ui_print_message_dialog( <?php require_once $config['homedir'].'/include/graphs/functions_flot.php'; echo include_javascript_dependencies_flot_graph(true, '../'); + echo ui_require_css_file('events', 'include/styles/', true); ?> <script type='text/javascript'> window.onload = function() { @@ -181,35 +182,32 @@ ui_print_message_dialog( } } - $draw_alerts = get_parameter('draw_alerts', 0); + $draw_alerts = get_parameter_checkbox('draw_alerts', 0); $period = get_parameter('period'); $id = get_parameter('id', 0); $start_date = get_parameter('start_date', date('Y/m/d')); $start_time = get_parameter('start_time', date('H:i:s')); - $draw_events = get_parameter('draw_events', 0); + $draw_events = get_parameter_checkbox('draw_events', 0); $graph_type = get_parameter('type', 'sparse'); $zoom = get_parameter('zoom', $config['zoom_graph']); $baseline = get_parameter('baseline', 0); $show_events_graph = get_parameter('show_events_graph', 0); - $show_percentil = get_parameter('show_percentil', 0); - $time_compare_separated = get_parameter('time_compare_separated', 0); - $time_compare_overlapped = get_parameter('time_compare_overlapped', 0); + $show_percentil = get_parameter_checkbox('show_percentil', 0); + $time_compare_separated = get_parameter_checkbox('time_compare_separated', 0); + $time_compare_overlapped = get_parameter_checkbox('time_compare_overlapped', 0); $unknown_graph = get_parameter_checkbox('unknown_graph', 1); $histogram = (bool) get_parameter('histogram', 0); - $enable_projected_period = get_parameter('enable_projected_period', 0); - $period_projected = get_parameter('period_projected', 300); + $period_graph = (int) get_parameter('period_graph', 0); + $enable_projected_period = get_parameter_checkbox('enable_projected_period', 0); + $period_projected = get_parameter('period_projected', SECONDS_5MINUTES); - // FORM TABLE. - $table = html_get_predefined_table('transparent', 2); - $table->width = '100%'; - $table->id = 'stat_win_form_div'; - $table->style[0] = 'text-align:left;font-weight: bold;font-size:8.5pt;line-height:30pt;'; - $table->style[1] = 'text-align:left;font-weight: bold;line-height:30pt;'; - $table->style[2] = 'text-align:left;font-weight: bold;line-height:30pt;'; - $table->style[3] = 'text-align:left;font-weight: bold;line-height:30pt;'; - $table->class = 'table_modal_alternate'; - $table->data = []; + $period_maximum = get_parameter_checkbox('period_maximum', 1); + $period_minimum = get_parameter_checkbox('period_minimum', 1); + $period_average = get_parameter_checkbox('period_average', 1); + $period_summatory = get_parameter_checkbox('period_summatory', 0); + $period_slice_chart = get_parameter('period_slice_chart', SECONDS_1HOUR); + $period_mode = get_parameter('period_mode', CUSTOM_GRAPH_VBARS); $time_compare = false; @@ -236,7 +234,7 @@ ui_print_message_dialog( } } } else { - $fullscale = get_parameter('fullscale', 0); + $fullscale = get_parameter_checkbox('fullscale', 0); } $type_mode_graph = get_parameter_checkbox( @@ -266,277 +264,40 @@ ui_print_message_dialog( $id ); - $table->data[0][0] = __('Refresh time'); - $table->data[0][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( - 'refresh', - $refresh, - '', - '', - 0, - 7, - true - ).'</div>'; - - $table->data[0][2] = __('Show events'); - $disabled = false; - - $table->data[0][3] = html_print_checkbox_switch( - 'draw_events', - 1, - (bool) $draw_events, - true, - $disabled - ); - - $table->data[1][0] = __('Begin date'); - $table->data[1][1] = html_print_input_text( - 'start_date', - $start_date, - '', - 10, - 20, - true, - false, - false, - '', - 'small-input' - ); - - $table->data[1][2] = __('Show alerts'); - $table->data[1][3] = html_print_checkbox_switch( - 'draw_alerts', - 1, - (bool) $draw_alerts, - true - ); - - $table->data[2][0] = __('Begin time'); - $table->data[2][1] = html_print_input_text( - 'start_time', - $start_time, - '', - 10, - 10, - true, - false, - false, - '', - 'small-input' - ); - - $table->data[2][2] = __('Show unknown graph'); - $table->data[2][3] = html_print_checkbox_switch( - 'unknown_graph', - 1, - (bool) $unknown_graph, - true - ); - - $table->data[3][0] = __('Time range'); - $table->data[3][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( - 'period', - $period, - '', - '', - 0, - 7, - true - ).'</div>'; - - $table->data[3][2] = ''; - $table->data[3][3] = ''; - - if (!modules_is_boolean($id)) { - $table->data[4][0] = __('Zoom'); - $options = []; - $options[$zoom] = 'x'.$zoom; - $options[1] = 'x1'; - $options[2] = 'x2'; - $options[3] = 'x3'; - $options[4] = 'x4'; - $options[5] = 'x5'; - $table->data[4][1] = '<div class="small-input-select2">'.html_print_select( - $options, - 'zoom', - $zoom, - '', - '', - 0, - true, - false, - false - ).'</div>'; - - $table->data[4][2] = __('Show percentil'); - $table->data[4][3] = html_print_checkbox_switch( - 'show_percentil', - 1, - (bool) $show_percentil, - true - ); + if (isset($_GET['type']) === true) { + $type = get_parameter_get('type'); } - - $table->data[5][0] = __('Time compare (Overlapped)'); - $table->data[5][1] = html_print_checkbox_switch( - 'time_compare_overlapped', - 1, - (bool) $time_compare_overlapped, - true - ); - - $table->data[5][2] = __('Time compare (Separated)'); - $table->data[5][3] = html_print_checkbox_switch( - 'time_compare_separated', - 1, - (bool) $time_compare_separated, - true - ); - - - $table->data[6][0] = __('Show AVG/MAX/MIN data series in graph'); - $table->data[6][1] = html_print_checkbox_switch( - 'type_mode_graph', - 1, - (bool) $type_mode_graph, - true, - false - ); - - $table->data[6][2] = __('Show full scale graph (TIP)'); - $table->data[6][2] .= ui_print_help_tip( - __('TIP mode charts do not support average - maximum - minimum series, you can only enable TIP or average, maximum or minimum series'), - true - ); - $table->data[6][3] = html_print_checkbox_switch( - 'fullscalee', - 1, - (bool) $fullscale, - true, - false - ); - - $table->data[7][0] = __('Projection graph'); - $table->data[7][0] .= ui_print_help_tip( - __('Projection graph take as begin date the current time'), - true - ); - $table->data[7][1] = html_print_checkbox_switch( - 'enable_projected_period', - 1, - (bool) $enable_projected_period, - true - ); - - $table->data[7][2] = __('Projection period'); - $table->data[7][3] = '<div class="small-input-select2">'.html_print_extended_select_for_time( - 'period_projected', - $period_projected, - '', - '', - 0, - 7, - true - ).'</div>'; - } else { - $table->data[0][0] = __('Begin date'); - $table->data[0][1] = html_print_input_text( - 'start_date', - $start_date, - '', - 10, - 20, - true, - false, - false, - '', - 'small-input' - ); - - $table->data[0][2] = __('Begin time'); - $table->data[0][3] = html_print_input_text( - 'start_time', - $start_time, - '', - 10, - 10, - true, - false, - false, - '', - 'small-input' - ); - - $table->data[1][0] = __('Time range'); - $table->data[1][1] = '<div class="small-input-select2">'.html_print_extended_select_for_time( - 'period', - $period, - '', - '', - 0, - 7, - true - ).'</div>'; - - $table->data[1][2] = __('Time compare (Separated)'); - $table->data[1][3] = html_print_checkbox_switch( - 'time_compare_separated', - 1, - (bool) $time_compare_separated, - true - ); } - $form_table = html_print_table($table, true); - $form_table .= html_print_div( - [ - 'class' => 'action-buttons-right-forced', - 'content' => html_print_submit_button( - __('Reload'), - 'submit', - false, - [ - 'icon' => 'search', - 'mode' => 'secondary mini', - 'class' => 'float-right', - ], - true - ), - ], - true - ); - - echo '<form method="GET" action="stat_win.php" style="margin-bottom: 0">'; - html_print_input_hidden('id', $id); - html_print_input_hidden('label', $label); - - if (empty($server_id) === false) { - html_print_input_hidden('server', $server_id); - } - - html_print_input_hidden('histogram', $histogram); - - if (isset($_GET['type']) === true) { - $type = get_parameter_get('type'); - html_print_input_hidden('type', $type); - } - - ui_toggle( - $form_table, - '<span class="subsection_header_title">'.__('Graph configuration menu').'</span>'.ui_print_help_tip( - __('In Pandora FMS, data is stored compressed. The data visualization in database, charts or CSV exported data won\'t match, because is interpreted at runtime. Please check \'Pandora FMS Engineering\' chapter from documentation.'), - true - ) - ); - echo '</form>'; - - // Hidden div to forced title. - html_print_div( - [ - 'id' => 'forced_title_layer', - 'class' => 'forced_title_layer', - 'hidden' => true, - ] - ); + $form_data = [ + 'id' => $id, + 'refresh' => $refresh, + 'draw_events' => $draw_events, + 'draw_alerts' => $draw_alerts, + 'start_date' => $start_date, + 'start_time' => $start_time, + 'unknown_graph' => $unknown_graph, + 'period' => $period, + 'zoom' => $zoom, + 'show_percentil' => $show_percentil, + 'time_compare_overlapped' => $time_compare_overlapped, + 'time_compare_separated' => $time_compare_separated, + 'type_mode_graph' => $type_mode_graph, + 'fullscale' => $fullscale, + 'enable_projected_period' => $enable_projected_period, + 'period_projected' => $period_projected, + 'type' => $type, + 'label' => $label, + 'server_id' => $server_id, + 'histogram' => $histogram, + 'period_graph' => $period_graph, + 'period_maximum' => $period_maximum, + 'period_minimum' => $period_minimum, + 'period_average' => $period_average, + 'period_summatory' => $period_summatory, + 'period_slice_chart' => $period_slice_chart, + 'period_mode' => $period_mode, + ]; $params = [ 'agent_module_id' => $id, @@ -562,14 +323,59 @@ ui_print_message_dialog( 'begin_date' => strtotime($start_date.' '.$start_time), 'enable_projected_period' => $enable_projected_period, 'period_projected' => $period_projected, + 'period_maximum' => $period_maximum, + 'period_minimum' => $period_minimum, + 'period_average' => $period_average, + 'period_summatory' => $period_summatory, + 'period_slice_chart' => $period_slice_chart, + 'period_mode' => $period_mode, ]; - // Graph. - $output = '<div class="white_box margin-lr-10" id="stat-win-module-graph">'; - $output .= '<div id="stat-win-spinner" class="stat-win-spinner">'; - $output .= html_print_image('images/spinner_charts.gif', true); - $output .= '</div>'; - $output .= '</div>'; + if ($histogram === false) { + $output = '<div id="tabs-chart-modal">'; + $output .= '<ul class="tabs-chart-ul-graphs">'; + $output .= '<li>'; + $output .= '<a href="#tabs-chart-module-graph">'; + $output .= html_print_image( + 'images/module-graph.svg', + true, + [ + 'title' => __('Module graph'), + 'class' => 'invert_filter main_menu_icon', + ] + ); + $output .= __('Module graph'); + $output .= '</a>'; + $output .= '</li>'; + $output .= '<li>'; + $output .= '<a href="#tabs-chart-period-graph">'; + $output .= html_print_image( + 'images/list.png', + true, + [ + 'title' => __('Period graph'), + 'class' => 'invert_filter main_menu_icon', + ] + ); + $output .= __('Sliced'); + $output .= '</a>'; + $output .= '</li>'; + $output .= '</ul>'; + + $output .= '<div id="tabs-chart-module-graph">'; + $output .= draw_container_chart_stat_win('tabs-chart-module-graph'); + $output .= '</div>'; + + $output .= '<div id="tabs-chart-period-graph">'; + $output .= draw_container_chart_stat_win('tabs-chart-period-graph'); + $output .= '</div>'; + + $output .= '</div>'; + } else { + // Graph. + $output .= draw_container_chart_stat_win(); + } + echo $output; if (is_metaconsole() === true && empty($server_id) === false) { @@ -595,77 +401,53 @@ ui_include_time_picker(true); <script> $(document).ready (function () { - $('#checkbox-time_compare_separated').click(function(e) { - if(e.target.checked === true) { - $('#checkbox-time_compare_overlapped').prop('checked', false); - } - }); - $('#checkbox-time_compare_overlapped').click(function(e) { - if(e.target.checked === true) { - $('#checkbox-time_compare_separated').prop('checked', false); - } - }); - - $('#checkbox-fullscale').click(function(e) { - if(e.target.checked === true) { - $('#checkbox-type_mode_graph').prop('checked', false); - } - }); - - $('#checkbox-type_mode_graph').click(function(e) { - if(e.target.checked === true) { - $('#checkbox-fullscale').prop('checked', false); - } - }); - - // Add datepicker and timepicker - $("#text-start_date").datepicker({ - dateFormat: "<?php echo DATE_FORMAT_JS; ?>" - }); - $("#text-start_time").timepicker({ - showSecond: true, - timeFormat: '<?php echo TIME_FORMAT_JS; ?>', - timeOnlyTitle: '<?php echo __('Choose time'); ?>', - timeText: '<?php echo __('Time'); ?>', - hourText: '<?php echo __('Hour'); ?>', - minuteText: '<?php echo __('Minute'); ?>', - secondText: '<?php echo __('Second'); ?>', - currentText: '<?php echo __('Now'); ?>', - closeText: '<?php echo __('Close'); ?>' - }); - - $.datepicker.setDefaults( - $.datepicker.regional["<?php echo $custom_user_language; ?>"] - ); - - // Menu. - $('#module_graph_menu_header').on('click', function(){ - var arrow = $('#module_graph_menu_header .module_graph_menu_arrow'); - var arrow_up = 'arrow_up_green'; - var arrow_down = 'arrow_down_green'; - if( $('.module_graph_menu_content').hasClass( - 'module_graph_menu_content_closed')){ - $('.module_graph_menu_content').show(); - $('.module_graph_menu_content').removeClass( - 'module_graph_menu_content_closed'); - arrow.attr('src',arrow.attr('src').replace(arrow_down, arrow_up)); - } - else{ - $('.module_graph_menu_content').hide(); - $('.module_graph_menu_content').addClass( - 'module_graph_menu_content_closed'); - arrow.attr('src',arrow.attr('src').replace(arrow_up, arrow_down)); - } - }); - var graph_data = "<?php echo base64_encode(json_encode($params)); ?>"; + var form_data = "<?php echo base64_encode(json_encode($form_data)); ?>"; var url = "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>"; var serverId = "<?php echo $server_id; ?>"; - get_ajax_module(url, graph_data, serverId); + var histogram = "<?php echo (int) $histogram; ?>"; + var period_graph = "<?php echo ($period_graph == 1) ? 1 : 0; ?>"; + if(histogram == 0) { + $("#tabs-chart-modal").tabs({ + create: function( event, ui ) { + var tab_active = ui.tab.children(":first").attr('id'); + get_ajax_module(url, graph_data, form_data, serverId, tab_active); + }, + activate: function( event, ui ) { + var tab_active = ui.newTab.children(":first").attr('id'); + change_tabs_periodicity(tab_active); + get_ajax_module(url, graph_data, form_data, serverId, tab_active); + }, + active: period_graph + }); + } else { + get_ajax_module(url, graph_data, form_data, serverId, null); + } }); + function change_tabs_periodicity(tab_active) {; + let pg = 0; + if (tab_active === 'ui-id-2') { + pg = 1; + } - function get_ajax_module(url, graph_data, serverId) { + var regex = /(period_graph=)[^&]+(&?)/gi; + var replacement = "$1" + pg + "$2"; + // Change the URL (if the browser has support). + if ("history" in window) { + var href = window.location.href.replace(regex, replacement); + window.history.replaceState({}, document.title, href); + } + } + + function get_ajax_module(url, graph_data, form_data, serverId, id) { + let active = 'stat-win-module-graph'; + if(id != null) { + active = $("#"+id).parent().attr('aria-controls'); + } + $("#tabs-chart-module-graph-content").empty(); + $("#tabs-chart-period-graph-content").empty(); + $("#"+active+"-spinner").show(); $.ajax({ type: "POST", url: url, @@ -674,11 +456,81 @@ ui_include_time_picker(true); page: "include/ajax/module", get_graph_module: true, graph_data: graph_data, - server_id: serverId + form_data: form_data, + server_id: serverId, + active: active }, success: function (data) { - $("#stat-win-spinner").hide(); - $("#stat-win-module-graph").append(data); + $("#"+active+"-spinner").hide(); + $("#"+active+"-content").append(data); + let pg = 0; + if (active === 'tabs-chart-period-graph') { + pg = 1; + } + $('#hidden-period_graph').val(pg); + $('#checkbox-time_compare_separated').click(function(e) { + if(e.target.checked === true) { + $('#checkbox-time_compare_overlapped').prop('checked', false); + } + }); + + $('#checkbox-time_compare_overlapped').click(function(e) { + if(e.target.checked === true) { + $('#checkbox-time_compare_separated').prop('checked', false); + } + }); + + $('#checkbox-fullscale').click(function(e) { + if(e.target.checked === true) { + $('#checkbox-type_mode_graph').prop('checked', false); + } + }); + + $('#checkbox-type_mode_graph').click(function(e) { + if(e.target.checked === true) { + $('#checkbox-fullscale').prop('checked', false); + } + }); + + // Add datepicker and timepicker + $("#text-start_date").datepicker({ + dateFormat: "<?php echo DATE_FORMAT_JS; ?>" + }); + $("#text-start_time").timepicker({ + showSecond: true, + timeFormat: '<?php echo TIME_FORMAT_JS; ?>', + timeOnlyTitle: '<?php echo __('Choose time'); ?>', + timeText: '<?php echo __('Time'); ?>', + hourText: '<?php echo __('Hour'); ?>', + minuteText: '<?php echo __('Minute'); ?>', + secondText: '<?php echo __('Second'); ?>', + currentText: '<?php echo __('Now'); ?>', + closeText: '<?php echo __('Close'); ?>' + }); + + $.datepicker.setDefaults( + $.datepicker.regional["<?php echo $custom_user_language; ?>"] + ); + + // Menu. + $('#module_graph_menu_header').on('click', function(){ + var arrow = $('#module_graph_menu_header .module_graph_menu_arrow'); + var arrow_up = 'arrow_up_green'; + var arrow_down = 'arrow_down_green'; + if( $('.module_graph_menu_content').hasClass( + 'module_graph_menu_content_closed')){ + $('.module_graph_menu_content').show(); + $('.module_graph_menu_content').removeClass( + 'module_graph_menu_content_closed'); + arrow.attr('src',arrow.attr('src').replace(arrow_down, arrow_up)); + } + else{ + $('.module_graph_menu_content').hide(); + $('.module_graph_menu_content').addClass( + 'module_graph_menu_content_closed'); + arrow.attr('src',arrow.attr('src').replace(arrow_up, arrow_down)); + } + }); }, error: function (error) { console.error(error); diff --git a/pandora_console/operation/agentes/status_monitor.php b/pandora_console/operation/agentes/status_monitor.php index 42b2c9308a..4ceb7681fe 100644 --- a/pandora_console/operation/agentes/status_monitor.php +++ b/pandora_console/operation/agentes/status_monitor.php @@ -1381,8 +1381,6 @@ $sql = 'SELECT ORDER BY '.$order['field'].' '.$order['order'].' LIMIT '.$limit_sql.' OFFSET '.$offset; - hd($sql); - // We do not show the modules until the user searches with the filter. if ($autosearch) { if (is_metaconsole() === false) { diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index d4442496a3..71890643a3 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -523,17 +523,6 @@ if (is_ajax() === true) { $tmp->b64 = base64_encode(json_encode($tmp)); $tmp->evento = $output_event_name; - $tmp->evento = ui_print_truncate_text( - $tmp->evento, - (empty($compact_name_event) === true) ? 'description' : GENERIC_SIZE_TEXT, - false, - true, - false, - '…', - true, - true, - ); - if (empty($tmp->module_name) === false) { $tmp->module_name = ui_print_truncate_text( $tmp->module_name, @@ -771,18 +760,31 @@ if (is_ajax() === true) { $evn = '<a href="javascript:" onclick="show_event_dialog(\''.$tmp->b64.'\')">'; } + $number = ''; // Grouped events. if ((int) $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS) { $counter_extra_id = event_get_counter_extraId($item, $filter); if (empty($counter_extra_id) === false && $counter_extra_id > 1) { - $evn .= '('.$counter_extra_id.') '; + $number = '('.$counter_extra_id.') '; } } else { if (isset($tmp->event_rep) === true && $tmp->event_rep > 1) { - $evn .= '('.$tmp->event_rep.') '; + $number = '('.$tmp->event_rep.') '; } } + $tmp->evento = $number.$tmp->evento; + $tmp->evento = ui_print_truncate_text( + $tmp->evento, + (empty($compact_name_event) === true) ? 'description' : GENERIC_SIZE_TEXT, + false, + true, + false, + '…', + true, + true, + ); + $evn .= $tmp->evento.'</a>'; // Add event severity format to itself. diff --git a/pandora_console/operation/menu.php b/pandora_console/operation/menu.php index e2361fc73f..f0777a61f1 100644 --- a/pandora_console/operation/menu.php +++ b/pandora_console/operation/menu.php @@ -734,24 +734,8 @@ if ($access_console_node === true) { } if ($access_console_node === true) { - // Rest of options, all with AR privilege (or should events be with incidents?) - // ~ if (check_acl ($config['id_user'], 0, "AR")) { // Extensions menu additions. if (is_array($config['extensions'])) { - $sub = []; - $sub2 = []; - - if (check_acl($config['id_user'], 0, 'RR') || check_acl($config['id_user'], 0, 'RW') || check_acl($config['id_user'], 0, 'RM')) { - $sub['operation/agentes/exportdata']['text'] = __('Export data'); - $sub['operation/agentes/exportdata']['id'] = 'Export_data'; - $sub['operation/agentes/exportdata']['subsecs'] = ['operation/agentes/exportdata']; - } - - if (check_acl($config['id_user'], 0, 'AR') || check_acl($config['id_user'], 0, 'AD') || check_acl($config['id_user'], 0, 'AW')) { - $sub['godmode/agentes/planned_downtime.list']['text'] = __('Scheduled downtime'); - $sub['godmode/agentes/planned_downtime.list']['id'] = 'Scheduled_downtime'; - } - foreach ($config['extensions'] as $extension) { // If no operation_menu is a godmode extension. if ($extension['operation_menu'] == '') { @@ -772,39 +756,19 @@ if ($access_console_node === true) { continue; } - // Check if was displayed inside other menu. - if ($extension['operation_menu']['fatherId'] == '') { - if ($extension_menu['name'] == 'Warp update') { - continue; - } - - $sub[$extension_menu['sec2']]['text'] = $extension_menu['name']; - $sub[$extension_menu['sec2']]['id'] = str_replace(' ', '_', $extension_menu['name']); - $sub[$extension_menu['sec2']]['refr'] = 0; - } else { - if (array_key_exists('fatherId', $extension_menu)) { - // Check that extension father ID exists previously on the menu. - if ((strlen($extension_menu['fatherId']) > 0)) { - if (array_key_exists('subfatherId', $extension_menu) && empty($extension_menu['subfatherId']) === false) { - if ((strlen($extension_menu['subfatherId']) > 0)) { - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['id'] = str_replace(' ', '_', $extension_menu['name']); - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['refr'] = 0; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['sec'] = 'extensions'; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['extension'] = true; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; - $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; - } else { - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['id'] = str_replace(' ', '_', $extension_menu['name']); - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['refr'] = 0; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['sec'] = 'extensions'; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['extension'] = true; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; - $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; - } + if (array_key_exists('fatherId', $extension_menu)) { + // Check that extension father ID exists previously on the menu. + if ((strlen($extension_menu['fatherId']) > 0)) { + if (array_key_exists('subfatherId', $extension_menu) && empty($extension_menu['subfatherId']) === false) { + if ((strlen($extension_menu['subfatherId']) > 0)) { + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['id'] = str_replace(' ', '_', $extension_menu['name']); + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['refr'] = 0; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['sec'] = 'extensions'; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['extension'] = true; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; + $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; } else { $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['id'] = str_replace(' ', '_', $extension_menu['name']); @@ -815,13 +779,20 @@ if ($access_console_node === true) { $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; } + } else { + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['id'] = str_replace(' ', '_', $extension_menu['name']); + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['refr'] = 0; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['sec'] = 'extensions'; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['extension'] = true; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; + $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; } } } } } - - // ~ } } $menu_operation['about_operation']['text'] = __('About'); diff --git a/pandora_console/operation/search_modules.php b/pandora_console/operation/search_modules.php index e2ae260d3c..aac30e040b 100644 --- a/pandora_console/operation/search_modules.php +++ b/pandora_console/operation/search_modules.php @@ -177,7 +177,7 @@ if (!$modules || !$searchModules) { $url = 'include/procesos.php?agente='.$module['id_agente_modulo']; $win_handle = dechex(crc32($module['id_agente_modulo'].$module['module_name'])); - $link = "winopeng('".'operation/agentes/stat_win.php?'."type=$graph_type&".'period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&refresh='.SECONDS_10MINUTES."', "."'day_".$win_handle."')"; + $link = "winopeng('".'operation/agentes/stat_win.php?'."type=$graph_type&".'period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&period_graph=0&refresh='.SECONDS_10MINUTES."', "."'day_".$win_handle."')"; $link_module_detail = 'show_module_detail_dialog('.$module['id_agente_modulo'].', '.$module['id_agente'].', '."'', 0, ".SECONDS_1DAY.", '".$module['module_name']."')"; $graphCell = '<a href="javascript:'.$link.'">'.html_print_image('images/module-graph.svg', true, ['border' => 0, 'alt' => '', 'class' => 'main_menu_icon invert_filter' ]).'</a>'; diff --git a/pandora_console/operation/visual_console/view.php b/pandora_console/operation/visual_console/view.php index afefdefc8b..6f193c05c5 100644 --- a/pandora_console/operation/visual_console/view.php +++ b/pandora_console/operation/visual_console/view.php @@ -1149,11 +1149,6 @@ if ($edit_capable === true) { visualConsoleManager.copyItem(item); } }); - setTimeout( - function() - { - visualConsoleManager.forceUpdateVisualConsole(); - }, 500); }); $('.link-create-item').click(function (event){ diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index c991baca63..15c01b5c7f 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -6,7 +6,7 @@ %define debug_package %{nil} %define name pandorafms_console %define version 7.0NG.774 -%define release 231215 +%define release 231219 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 8ae24a1a45..41ce1d5797 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -6,7 +6,7 @@ %define debug_package %{nil} %define name pandorafms_console %define version 7.0NG.774 -%define release 231215 +%define release 231219 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 1f361f37da..b5cb78b60b 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.774 -%define release 231215 +%define release 231219 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 56e49ad467..de16fbd34c 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -92,6 +92,7 @@ CREATE TABLE IF NOT EXISTS `tagente` ( `fixed_ip` TINYINT NOT NULL DEFAULT 0, `disabled_by_downtime` TINYINT NOT NULL DEFAULT 0, `vul_scan_enabled` TINYINT NOT NULL DEFAULT 2, + `ignore_unknown` TINYINT NOT NULL DEFAULT 0, PRIMARY KEY (`id_agente`), KEY `nombre` (`nombre`(255)), KEY `direccion` (`direccion`), @@ -279,6 +280,7 @@ CREATE TABLE IF NOT EXISTS `tagente_modulo` ( `disabled_by_downtime` TINYINT NOT NULL DEFAULT 0, `last_compact` TIMESTAMP NOT NULL DEFAULT 0, `made_enabled` TINYINT UNSIGNED DEFAULT 0, + `ignore_unknown` TINYINT NOT NULL DEFAULT 0, PRIMARY KEY (`id_agente_modulo`), KEY `main_idx` (`id_agente_modulo`,`id_agente`), KEY `tam_agente` (`id_agente`), @@ -1747,7 +1749,8 @@ CREATE TABLE IF NOT EXISTS `tlayout_data` ( `timezone` VARCHAR(60) NOT NULL DEFAULT 'Europe/Madrid', `show_last_value` TINYINT UNSIGNED NULL DEFAULT 0, `cache_expiration` INT UNSIGNED NOT NULL DEFAULT 0, - `title` TEXT , + `title` TEXT, + `period_chart_options` TEXT, PRIMARY KEY(`id`), INDEX `tlayout_data_layout` (`id_layout`) ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; @@ -2539,6 +2542,7 @@ CREATE TABLE IF NOT EXISTS `tpolicy_modules` ( `percentage_critical` TINYINT UNSIGNED DEFAULT 0, `warning_time` INT UNSIGNED DEFAULT 0, `made_enabled` TINYINT UNSIGNED DEFAULT 0, + `ignore_unknown` TINYINT NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `main_idx` (`id_policy`), UNIQUE (`id_policy`, `name`) @@ -3549,6 +3553,7 @@ CREATE TABLE IF NOT EXISTS `tmetaconsole_agent` ( `fixed_ip` TINYINT NOT NULL DEFAULT 0, `disabled_by_downtime` TINYINT NOT NULL DEFAULT 0, `vul_scan_enabled` TINYINT NOT NULL DEFAULT 2, + `ignore_unknown` TINYINT NOT NULL DEFAULT 0, PRIMARY KEY (`id_agente`), KEY `nombre` (`nombre`(255)), KEY `direccion` (`direccion`), @@ -3823,6 +3828,8 @@ CREATE TABLE IF NOT EXISTS `tlayout_template_data` ( `timezone` VARCHAR(60) NOT NULL DEFAULT 'Europe/Madrid', `show_last_value` TINYINT UNSIGNED NULL DEFAULT 0, `cache_expiration` INT UNSIGNED NOT NULL DEFAULT 0, + `title` TEXT, + `period_chart_options` TEXT, PRIMARY KEY(`id`), FOREIGN KEY (`id_layout_template`) REFERENCES tlayout_template(`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; @@ -4555,4 +4562,26 @@ CREATE TABLE IF NOT EXISTS `tpandora_cve` ( `cvss_score` DOUBLE DEFAULT NULL, `cvss_vector` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`cve_id`) -) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; + +-- --------------------------------------------------------------------- +-- Table `tfiles_repo` +-- --------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `tfiles_repo` ( + `id` int(5) unsigned NOT NULL auto_increment, + `name` varchar(255) NOT NULL, + `description` varchar(500) NULL default '', + `hash` varchar(8) NULL default '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- --------------------------------------------------------------------- +-- Table `tfiles_repo_group` +-- --------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `tfiles_repo_group` ( + `id` int(10) unsigned NOT NULL auto_increment, + `id_file` int(5) unsigned NOT NULL, + `id_group` int(4) unsigned NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (`id_file`) REFERENCES tfiles_repo(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index 79cca53917..f0ee7cbcdc 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -125,10 +125,10 @@ INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_report_front_logo', 'images/pandora_logo_white.jpg'), ('custom_report_front_header', ''), ('custom_report_front_footer', ''), -('MR', 66), +('MR', 67), ('identification_reminder', 1), ('identification_reminder_timestamp', 0), -('current_package', 774), +('current_package', 775), ('post_process_custom_values', '{"0.00000038580247":"Seconds to months","0.00000165343915":"Seconds to weeks","0.00001157407407":"Seconds to days","0.01666666666667":"Seconds to minutes","0.00000000093132":"Bytes to Gigabytes","0.00000095367432":"Bytes to Megabytes","0.00097656250000":"Bytes to Kilobytes","0.00000001653439":"Timeticks to weeks","0.00000011574074":"Timeticks to days"}'), ('custom_docs_logo', 'default_docs.png'), ('custom_support_logo', 'default_support.png'), @@ -1240,48 +1240,48 @@ INSERT INTO `tpolicies` VALUES (4,'Basic AIX Local Monitoring','B INSERT INTO `tpolicies` VALUES (5,'Basic HP-UX Local Monitoring','Basic local checks to monitoring HP/UX systems.',2,0,0,0); INSERT INTO `tpolicies` VALUES (6,'Basic Remote Checks','Basic Remote Checks (ping, latency, ports).',9,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (1,1,'module_begin
module_name Bytes per second (Received)
module_type generic_data_inc
module_exec powershell -c "Get-NetAdapterStatistics |Measure-Object -Sum ReceivedBytes |Select -ExpandProperty Sum"
module_end



',4,'','Bytes per second (Received)','',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (2,1,'module_begin
module_name Bytes per second (Sent)
module_type generic_data_inc
module_exec powershell -c "Get-NetAdapterStatistics |Measure-Object -Sum SentBytes |Select -ExpandProperty Sum"
module_end




',4,'','Bytes per second (Sent)','',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (3,1,'module_begin
module_name CPU %
module_type generic_data
module_cpuusage all
module_unit %
module_min_warning 79.00
module_max_warning 90.00;module_min_critical 91.00
module_max_critical 00.00;
module_end





',1,'CPU usage (%)','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,79.00,90.00,'',91.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (4,1,'module_begin
module_name Total processes
module_type generic_data
module_exec tasklist | wc -l | gawk "{print $1}"
module_end


',1,'','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (5,1,'module_begin
module_name Uptime
module_type generic_data
module_exec powershell -c "((get-date) - (gcim Win32_OperatingSystem).LastBootUpTime | Select -ExpandProperty Ticks) / 100000"
module_end




',1,'','Uptime','_timeticks_',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (6,1,'module_begin
module_name WMI Service
module_type generic_proc
module_service winmgmt
module_end

',2,'WMI Service enabled','WMI Service','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (7,2,'module_begin
module_name Bytes per second (Received)
module_type generic_data_inc
module_exec awk '!/lo:/ {s+=$2}END{print s}' /proc/net/dev
module_min_warning 0
module_max_warning 0
module_min_critical 0
module_max_critical 0
module_end

',4,'','Bytes per second (Received)','bytes/sec',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (8,2,'module_begin
module_name Bytes per second (Sent)
module_type generic_data_inc
module_exec awk '!/lo:/ {s+=$10}END{print s}' /proc/net/dev
module_min_warning 0
module_max_warning 0
module_min_critical 0
module_max_critical 0
module_end
',4,'','Bytes per second (Sent)','bytes/sec',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (9,2,'module_begin
module_name CPU %
module_type generic_data
module_exec vmstat 1 1 | tail -1 | awk '{ print $13 + $14 }'
module_unit %
module_end

',1,'Current use of CPU (System + User).','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (10,2,'module_begin
module_name I/O Lock
module_type generic_data
module_exec vmstat 1 1 | tail -1 | awk '{print $16}'
module_description I/O Wait Disk
module_end


',1,'','I/O Lock','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (11,2,'module_begin 
module_name Load Average
module_type generic_data
module_exec cat /proc/loadavg |awk '{print $2}'
module_end

',1,'Average process in CPU (Last 5 minutes).','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (12,2,'module_begin
module_name Port 22 Open (SSH)
module_type generic_proc
module_exec echo > /dev/tcp/127.0.0.1/22 >/dev/null 2>&1 && echo 1 || echo 0
module_end





',2,'Checks if port 22 (SSH) is listening.','Port 22 Open (SSH)','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (13,2,'module_begin
module_name Total processes
module_type generic_data
module_exec ps ax | tail -n +2 | wc -l
module_description Total processes
module_end',1,'','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (14,2,'module_begin
module_name Uptime
module_type generic_data
module_exec awk '{print $1*100}' /proc/uptime
module_end
',1,'Host Up time (Timeticks)','Uptime','_timeticks_',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (15,3,'module_begin
module_name CPU %
module_type generic_data
module_exec vmstat 1 1 | tail -1| awk '{print (100-$NF)}'
module_unit %
module_end
',1,'CPU usage %','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (16,3,'module_begin
module_name Disk / usage (%)
module_type generic_data
module_exec df -k / | tail -1 | tr -d "%" | awk '{print $5}'
module_end



',1,'Disk use percentage for root partition (/)','Disk / usage (%)','',0,0,1,'',0,'','','','',1,1,1,0,0,'','','',0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *','','{\"going_unknown\":0}','W10=',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (17,3,'module_begin
module_name Disk /var usage (%)
module_type generic_data
module_exec df -k /var | tail -1 | tr -d "%" | awk '{print $5}'
module_end



',1,'Disk use percentage for var partition (/var)','Disk /var usage (%)','',0,0,1,'',0,'','','','',1,1,1,0,0,'','','',0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *','','{\"going_unknown\":0}','W10=',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (18,3,'module_begin
module_name Load Average
module_type generic_data
module_exec uptime | awk '{print $(NF-2)}' | tr -d ','
module_end
',1,'Load average','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (19,3,'module_begin
module_name Memory Free %
module_type generic_data
module_freepercentmemory
module_end




',1,'Percentage Mem Free','Memory Free %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,8.00,15.00,'',0.00,7.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (20,3,'module_begin
module_name Port 22 Open (SSH)
module_type generic_proc
module_exec timeout 1 bash -c "echo > /dev/tcp/127.0.0.1/22" >/dev/null 2>&1 && echo 1 || echo 0
module_end



',2,'Checks if port 22 (SSH) is listening.','Port 22 Open (SSH)','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (21,3,'module_begin
module_name Swap Used %
module_type generic_data
module_exec swap -l |tail -1 | awk '{print 100 - ($NF / $(NF-1) * 100)}'
module_unit %
module_end


',1,'Swap memory available in %','Swap Used %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (22,3,'module_begin
module_name Total processes
module_type generic_data
module_exec ps -A | wc -l | awk '{print $1}'
module_end',1,'Total processes','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (23,3,'module_beg
module_name Uptime
module_type generic_data
module_exec perl -e "print 100*(time - $(kstat -p unix:0:system_misc:boot_time |awk '{print $2}'))"
module_end






',1,'Host Up time (Timeticks)','Uptime','_timeticks_',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (24,4,'module_begin
module_name CPU %
module_type generic_data
module_exec sar 1 | tail -1 | awk '{print 100 - $5}'
module_description CPU usage in %
module_unit %
module_end',1,'','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (25,4,'module_begin
module_name CPU User
module_type generic_data
module_exec sar 1 | tail -1 | awk '{print $2}'
module_description CPU usage in %
module_unit %
module_end',1,'','CPU User','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (26,4,'module_begin 
module_name Load Average
module_type generic_data
module_exec uptime | awk '{print $(NF-2)*1}' 
module_description Average process in CPU (Last minute) 
module_end',1,'','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (27,4,'module_begin
module_name Memory Free %
module_type generic_data
module_exec svmon -G|grep memory | awk '{print (1- $3/$2 )*100}'
module_description Percentage Mem Free
module_end
',1,'','Memory Free %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (28,4,'module_begin
module_name Pagination use
module_type generic_data
module_exec  lsps -s | tail -1 | awk '{print $2+0}'
module_end',1,'','Pagination use','',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (29,4,'module_begin
module_name Service sshd status
module_type generic_proc
module_exec lssrc -a | grep ssh | grep active
module_end',2,'','Service sshd status','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (30,4,'module_begin
module_name Uptime
module_type generic_data_string
module_exec uptime |sed "s/us\.*$//g" | sed "s/,\.*$//g"
module_description Host Up time
module_end
',1,'','Uptime','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (31,5,'module_begin
module_name CPU %
module_type generic_data
module_cpuusage all
module_unit %
module_end
',1,'','CPU %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (32,5,'module_begin
module_name CPU User
module_type generic_data
module_exec vmstat 1 2 | tail -1 | awk '{ print $(16) }'
module_description % of User CPU
module_unit %
module_end

',1,'','CPU User','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (33,5,'module_begin
module_name Load Average
module_type generic_data
module_exec uptime | awk '{print $(NF-2)}' | tr -d ','
module_description System load average
module_end
',1,'','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (34,5,'module_begin
module_name Memory Free %
module_type generic_data
module_exec echo "" > /tmp/hpvm_toptest; top -d 1 -f /tmp/hpvm_toptest 2>/dev/null 1>/dev/null; cat /tmp/hpvm_toptest | grep -i Memory | head -1 | awk '{print $8/($2+$5) * 100}'
module_end


',1,'','Memory Free %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (35,5,'module_begin
module_name  Service sshd status
module_type generic_proc
module_exec ps -ef | grep  -v grep | grep "/opt/ssh/sbin/sshd" | wc -l
module_description SSH running
module_end

',2,'','Service sshd status','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (36,5,'module_begin
module_name Total processes
module_type generic_data
module_exec echo $(((`ps -e | wc -l`)-1)) | tr -d “\n”
module_description Total processes
module_end

',1,'','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (37,5,'module_begin
module_name Uptime
module_type generic_data_string
module_exec uptime |sed s/us\.*$//g | sed s/,\.*$//g
module_description Host Up time
module_end
',3,'','Uptime','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (38,5,'module_begin
module_name Zombie processes
module_type generic_data
module_exec ps -­elf | awk '$2~/'Z'/{print $2}' | wc -l | tr -d "\n"
module_description Zombie processes
module_end
',1,'','Zombie processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (39,6,'',6,'','Host Alive','',0,0,300,'',0,'','','','',2,1,2,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (40,6,'',7,'','Host Latency','',0,0,300,'',0,'','','','',2,1,2,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,80.00,149.00,'',150.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (41,6,'',2,'Checks if port 161 is open and reachable for Pandora FMS server.','SNMP Available','',0,0,300,'',0,'','','','',1,1,4,0,0,'','','_field1_;Target IP;;_address_--_field2_;Port;;161',3,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *','{\"1\":{\"macro\":\"_field1_\",\"desc\":\"Target IP\",\"help\":\"\",\"value\":\"_address_\"},\"2\":{\"macro\":\"_field2_\",\"desc\":\"Port\",\"help\":\"\",\"value\":\"161\"}}','{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -INSERT INTO `tpolicy_modules` VALUES (42,6,'',9,'Checks if port 22 is open and reachable for Pandora FMS server.','SSH Reachable','',0,0,300,'',22,'','','','',2,1,2,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (1,1,'module_begin
module_name Bytes per second (Received)
module_type generic_data_inc
module_exec powershell -c "Get-NetAdapterStatistics |Measure-Object -Sum ReceivedBytes |Select -ExpandProperty Sum"
module_end



',4,'','Bytes per second (Received)','',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (2,1,'module_begin
module_name Bytes per second (Sent)
module_type generic_data_inc
module_exec powershell -c "Get-NetAdapterStatistics |Measure-Object -Sum SentBytes |Select -ExpandProperty Sum"
module_end




',4,'','Bytes per second (Sent)','',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (3,1,'module_begin
module_name CPU %
module_type generic_data
module_cpuusage all
module_unit %
module_min_warning 79.00
module_max_warning 90.00;module_min_critical 91.00
module_max_critical 00.00;
module_end





',1,'CPU usage (%)','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,79.00,90.00,'',91.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (4,1,'module_begin
module_name Total processes
module_type generic_data
module_exec tasklist | wc -l | gawk "{print $1}"
module_end


',1,'','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (5,1,'module_begin
module_name Uptime
module_type generic_data
module_exec powershell -c "((get-date) - (gcim Win32_OperatingSystem).LastBootUpTime | Select -ExpandProperty Ticks) / 100000"
module_end




',1,'','Uptime','_timeticks_',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (6,1,'module_begin
module_name WMI Service
module_type generic_proc
module_service winmgmt
module_end

',2,'WMI Service enabled','WMI Service','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (7,2,'module_begin
module_name Bytes per second (Received)
module_type generic_data_inc
module_exec awk '!/lo:/ {s+=$2}END{print s}' /proc/net/dev
module_min_warning 0
module_max_warning 0
module_min_critical 0
module_max_critical 0
module_end

',4,'','Bytes per second (Received)','bytes/sec',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (8,2,'module_begin
module_name Bytes per second (Sent)
module_type generic_data_inc
module_exec awk '!/lo:/ {s+=$10}END{print s}' /proc/net/dev
module_min_warning 0
module_max_warning 0
module_min_critical 0
module_max_critical 0
module_end
',4,'','Bytes per second (Sent)','bytes/sec',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (9,2,'module_begin
module_name CPU %
module_type generic_data
module_exec vmstat 1 1 | tail -1 | awk '{ print $13 + $14 }'
module_unit %
module_end

',1,'Current use of CPU (System + User).','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (10,2,'module_begin
module_name I/O Lock
module_type generic_data
module_exec vmstat 1 1 | tail -1 | awk '{print $16}'
module_description I/O Wait Disk
module_end


',1,'','I/O Lock','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (11,2,'module_begin 
module_name Load Average
module_type generic_data
module_exec cat /proc/loadavg |awk '{print $2}'
module_end

',1,'Average process in CPU (Last 5 minutes).','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (12,2,'module_begin
module_name Port 22 Open (SSH)
module_type generic_proc
module_exec echo > /dev/tcp/127.0.0.1/22 >/dev/null 2>&1 && echo 1 || echo 0
module_end





',2,'Checks if port 22 (SSH) is listening.','Port 22 Open (SSH)','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (13,2,'module_begin
module_name Total processes
module_type generic_data
module_exec ps ax | tail -n +2 | wc -l
module_description Total processes
module_end',1,'','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (14,2,'module_begin
module_name Uptime
module_type generic_data
module_exec awk '{print $1*100}' /proc/uptime
module_end
',1,'Host Up time (Timeticks)','Uptime','_timeticks_',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (15,3,'module_begin
module_name CPU %
module_type generic_data
module_exec vmstat 1 1 | tail -1| awk '{print (100-$NF)}'
module_unit %
module_end
',1,'CPU usage %','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (16,3,'module_begin
module_name Disk / usage (%)
module_type generic_data
module_exec df -k / | tail -1 | tr -d "%" | awk '{print $5}'
module_end



',1,'Disk use percentage for root partition (/)','Disk / usage (%)','',0,0,1,'',0,'','','','',1,1,1,0,0,'','','',0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *','','{\"going_unknown\":0}','W10=',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (17,3,'module_begin
module_name Disk /var usage (%)
module_type generic_data
module_exec df -k /var | tail -1 | tr -d "%" | awk '{print $5}'
module_end



',1,'Disk use percentage for var partition (/var)','Disk /var usage (%)','',0,0,1,'',0,'','','','',1,1,1,0,0,'','','',0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *','','{\"going_unknown\":0}','W10=',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (18,3,'module_begin
module_name Load Average
module_type generic_data
module_exec uptime | awk '{print $(NF-2)}' | tr -d ','
module_end
',1,'Load average','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (19,3,'module_begin
module_name Memory Free %
module_type generic_data
module_freepercentmemory
module_end




',1,'Percentage Mem Free','Memory Free %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,8.00,15.00,'',0.00,7.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (20,3,'module_begin
module_name Port 22 Open (SSH)
module_type generic_proc
module_exec timeout 1 bash -c "echo > /dev/tcp/127.0.0.1/22" >/dev/null 2>&1 && echo 1 || echo 0
module_end



',2,'Checks if port 22 (SSH) is listening.','Port 22 Open (SSH)','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (21,3,'module_begin
module_name Swap Used %
module_type generic_data
module_exec swap -l |tail -1 | awk '{print 100 - ($NF / $(NF-1) * 100)}'
module_unit %
module_end


',1,'Swap memory available in %','Swap Used %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (22,3,'module_begin
module_name Total processes
module_type generic_data
module_exec ps -A | wc -l | awk '{print $1}'
module_end',1,'Total processes','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (23,3,'module_beg
module_name Uptime
module_type generic_data
module_exec perl -e "print 100*(time - $(kstat -p unix:0:system_misc:boot_time |awk '{print $2}'))"
module_end






',1,'Host Up time (Timeticks)','Uptime','_timeticks_',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (24,4,'module_begin
module_name CPU %
module_type generic_data
module_exec sar 1 | tail -1 | awk '{print 100 - $5}'
module_description CPU usage in %
module_unit %
module_end',1,'','CPU %','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (25,4,'module_begin
module_name CPU User
module_type generic_data
module_exec sar 1 | tail -1 | awk '{print $2}'
module_description CPU usage in %
module_unit %
module_end',1,'','CPU User','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (26,4,'module_begin 
module_name Load Average
module_type generic_data
module_exec uptime | awk '{print $(NF-2)*1}' 
module_description Average process in CPU (Last minute) 
module_end',1,'','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (27,4,'module_begin
module_name Memory Free %
module_type generic_data
module_exec svmon -G|grep memory | awk '{print (1- $3/$2 )*100}'
module_description Percentage Mem Free
module_end
',1,'','Memory Free %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (28,4,'module_begin
module_name Pagination use
module_type generic_data
module_exec  lsps -s | tail -1 | awk '{print $2+0}'
module_end',1,'','Pagination use','',0,0,1,'',0,'','','','',1,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (29,4,'module_begin
module_name Service sshd status
module_type generic_proc
module_exec lssrc -a | grep ssh | grep active
module_end',2,'','Service sshd status','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (30,4,'module_begin
module_name Uptime
module_type generic_data_string
module_exec uptime |sed "s/us\.*$//g" | sed "s/,\.*$//g"
module_description Host Up time
module_end
',1,'','Uptime','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (31,5,'module_begin
module_name CPU %
module_type generic_data
module_cpuusage all
module_unit %
module_end
',1,'','CPU %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (32,5,'module_begin
module_name CPU User
module_type generic_data
module_exec vmstat 1 2 | tail -1 | awk '{ print $(16) }'
module_description % of User CPU
module_unit %
module_end

',1,'','CPU User','%',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (33,5,'module_begin
module_name Load Average
module_type generic_data
module_exec uptime | awk '{print $(NF-2)}' | tr -d ','
module_description System load average
module_end
',1,'','Load Average','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (34,5,'module_begin
module_name Memory Free %
module_type generic_data
module_exec echo "" > /tmp/hpvm_toptest; top -d 1 -f /tmp/hpvm_toptest 2>/dev/null 1>/dev/null; cat /tmp/hpvm_toptest | grep -i Memory | head -1 | awk '{print $8/($2+$5) * 100}'
module_end


',1,'','Memory Free %','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (35,5,'module_begin
module_name  Service sshd status
module_type generic_proc
module_exec ps -ef | grep  -v grep | grep "/opt/ssh/sbin/sshd" | wc -l
module_description SSH running
module_end

',2,'','Service sshd status','',0,0,1,'',0,'','','','',3,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (36,5,'module_begin
module_name Total processes
module_type generic_data
module_exec echo $(((`ps -e | wc -l`)-1)) | tr -d “\n”
module_description Total processes
module_end

',1,'','Total processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (37,5,'module_begin
module_name Uptime
module_type generic_data_string
module_exec uptime |sed s/us\.*$//g | sed s/,\.*$//g
module_description Host Up time
module_end
',3,'','Uptime','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (38,5,'module_begin
module_name Zombie processes
module_type generic_data
module_exec ps -­elf | awk '$2~/'Z'/{print $2}' | wc -l | tr -d "\n"
module_description Zombie processes
module_end
',1,'','Zombie processes','',0,0,1,'',0,'','','','',4,1,1,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (39,6,'',6,'','Host Alive','',0,0,300,'',0,'','','','',2,1,2,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (40,6,'',7,'','Host Latency','',0,0,300,'',0,'','','','',2,1,2,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,80.00,149.00,'',150.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (41,6,'',2,'Checks if port 161 is open and reachable for Pandora FMS server.','SNMP Available','',0,0,300,'',0,'','','','',1,1,4,0,0,'','','_field1_;Target IP;;_address_--_field2_;Port;;161',3,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *','{\"1\":{\"macro\":\"_field1_\",\"desc\":\"Target IP\",\"help\":\"\",\"value\":\"_address_\"},\"2\":{\"macro\":\"_field2_\",\"desc\":\"Port\",\"help\":\"\",\"value\":\"161\"}}','{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `tpolicy_modules` VALUES (42,6,'',9,'Checks if port 22 is open and reachable for Pandora FMS server.','SSH Reachable','',0,0,300,'',22,'','','','',2,1,2,0,0,NULL,NULL,NULL,0,0.000000000000000,0,0,0,'',1,0.00,0.00,'',0.00,0.00,'',0,NULL,NULL,NULL,0,0,0,'','','',0,0,0,0,0,'* * * * *',NULL,'{\"going_unknown\":0}','',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `tpolicy_plugins` VALUES (1,1,'cscript.exe //B "%ProgramFiles%\Pandora_Agent\util\df_percent_used.vbs"',0); INSERT INTO `tpolicy_plugins` VALUES (2,1,'cscript.exe //B "%ProgramFiles%\Pandora_Agent\util\mem_percent_used.vbs"',0); diff --git a/pandora_console/required_um_versions.php b/pandora_console/required_um_versions.php new file mode 100644 index 0000000000..ba8e16a5d1 --- /dev/null +++ b/pandora_console/required_um_versions.php @@ -0,0 +1,5 @@ +<?php + +// Versions must be specified as a string in the following formats: '8', '8.0.30', ... +$php_version = '8'; +$mysql_version = '8'; diff --git a/pandora_console/update_manager_client/lib/UpdateManager/Client.php b/pandora_console/update_manager_client/lib/UpdateManager/Client.php index 8abe5f2f83..0931297fdc 100644 --- a/pandora_console/update_manager_client/lib/UpdateManager/Client.php +++ b/pandora_console/update_manager_client/lib/UpdateManager/Client.php @@ -1406,6 +1406,40 @@ class Client } + /** + * Compare version strings. + * + * @param string $version1 Version1. + * @param string $version2 Version2. + * + * @return array + * @throws \Exception On error. + */ + private function compareVersions(string $version1, string $version2):int + { + $v1_components = explode('.', $version1); + $v2_components = explode('.', $version2); + + $maxLength = max(count($v1_components), count($v2_components)); + + for ($i = 0; $i < $maxLength; $i++) { + $v1_part = isset($v1_components[$i]) === true ? intval($v1_components[$i]) : 0; + $v2_part = isset($v2_components[$i]) === true ? intval($v2_components[$i]) : 0; + + if ($v1_part < $v2_part) { + // $version1 is older. + return -1; + } else if ($v1_part > $v2_part) { + // $version1 is newer. + return 1; + } + } + + // Versions are identical. + return 0; + } + + /** * Update files. * @@ -1426,6 +1460,8 @@ class Client bool $classic=false, bool $called_recursively=false ) :void { + global $config; + if (is_dir($from) !== true || is_readable($from) !== true) { throw new \Exception('Cannot access patch files '.$from); } @@ -1445,6 +1481,41 @@ class Client throw new \Exception('Files are not readable'); } + // External path to required versions file. + $download_filepath = $this->tmpDir.'/downloads/'.$version.'/required_um_versions.php'; + + // Fallback file path in console root. + $local_filepath = $config['homedir'].'/required_um_versions.php'; + + $filepath = null; + + if (file_exists($download_filepath) === true) { + $filepath = $download_filepath; + } else if (file_exists($local_filepath) === true) { + $filepath = $local_filepath; + } + + if ($filepath !== null) { + include $filepath; + + $curr_php_version = phpversion(); + $curr_mysql_version = db_get_value_sql('SELECT VERSION() AS version'); + + if (isset($php_version) === true + && is_string($php_version) === true + && $this->compareVersions($curr_php_version, $php_version) < 0 + ) { + throw new \Exception('PHP version >= '.$php_version.' is required'); + } + + if (isset($mysql_version) === true + && is_string($mysql_version) === true + && $this->compareVersions($curr_mysql_version, $mysql_version) < 0 + ) { + throw new \Exception('MySQL version >= '.$mysql_version.' is required'); + } + } + if ($test === true && $called_recursively === false) { // Get size of folder and its subfolders corresponding to "from" path containing those files // that will be updated in product. diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index d8a3838568..fe6f9b2b7d 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.774-231215 +Version: 7.0NG.774-231219 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index d414a23d60..1b8dd00e69 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.774-231215" +pandora_version="7.0NG.774-231219" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 296771f7f5..346346a767 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -46,7 +46,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.774"; -my $pandora_build = "231215"; +my $pandora_build = "231219"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index 84d3d51bd2..c42e993a9a 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -7036,7 +7036,9 @@ sub pandora_module_unknown ($$) { WHERE tagente.id_agente = tagente_estado.id_agente AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente.disabled = 0 + AND tagente.ignore_unknown = 0 AND tagente_modulo.disabled = 0 + AND tagente_modulo.ignore_unknown = 0 AND ((tagente_modulo.id_tipo_modulo IN (21, 22, 23) AND tagente_estado.estado <> 0) OR (' . ($pa_config->{'unknown_updates'} == 0 ? diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 8a311fc159..054993c6a2 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -34,7 +34,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.774"; -my $pandora_build = "231215"; +my $pandora_build = "231219"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 3109a043df..73c27df5ef 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -7,7 +7,7 @@ %define debug_package %{nil} %define name pandorafms_server %define version 7.0NG.774 -%define release 231215 +%define release 231219 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index aab88dca68..a12f69f8f2 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_server %define version 7.0NG.774 -%define release 231215 +%define release 231219 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index b537662939..24e91a5a8e 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.774" -PI_BUILD="231215" +PI_BUILD="231219" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 42040bba40..117580ee48 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -38,7 +38,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.774 Build 231215"; +my $version = "7.0NG.774 Build 231219"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index ae0081273f..eec8cb4cb9 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.774 Build 231215"; +my $version = "7.0NG.774 Build 231219"; # save program name for logging my $progname = basename($0); @@ -145,12 +145,12 @@ sub help_screen{ help_screen_line('--agent_update_custom_fields', '<id_agent> <type_field> <field_to_change> <new_value>', "Update an agent custom field. The fields can be \n\t the following: Serial number, Department ... and types can be 0 text and 1 combo "); print "\nMODULES:\n\n" unless $param ne ''; - help_screen_line('--create_data_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <definition_file> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions> <use_alias>]", 'Add data server module to agent'); - help_screen_line('--create_web_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <retries> <requests> <agent_browser_id> <auth_server> <auth_realm> <definition_file>\n\t <proxy_url> <proxy_auth_login> <proxy_auth_password> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions> <use_alias>].\n\t The valid data types are web_data, web_proc, web_content_data or web_content_string", 'Add web server module to agent'); - help_screen_line('--create_network_module', "<module_name> <module_type> <agent_name> <module_address> \n\t [<module_port> <description> <module_group> <min> <max> <post_process> <interval> \n\t <warning_min> <warning_max> <critical_min> <critical_max> <history_data> <ff_threshold>\n\t <warning_str> <critical_str> <unknown_events> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical> <timeout> <retries>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <use_alias>]", 'Add not snmp network module to agent'); - help_screen_line('--create_snmp_module', "<module_name> <module_type> <agent_name> <module_address> <module_port>\n\t <version> [<community> <oid> <description> <module_group> <min> <max> <post_process> <interval>\n\t <warning_min> <warning_max> <critical_min> <critical_max> <history_data> \n\t <snmp3_priv_method> <snmp3_priv_pass> <snmp3_sec_level> <snmp3_auth_method> \n\t <snmp3_auth_user> <snmp3_auth_pass> <ff_threshold> <warning_str> \n\t <critical_str> <unknown_events> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <timeout> <retries> <use_alias>] + help_screen_line('--create_data_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <definition_file> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions> <use_alias> <ignore_unknown>]", 'Add data server module to agent'); + help_screen_line('--create_web_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <retries> <requests> <agent_browser_id> <auth_server> <auth_realm> <definition_file>\n\t <proxy_url> <proxy_auth_login> <proxy_auth_password> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions> <use_alias> <ignore_unknown>].\n\t The valid data types are web_data, web_proc, web_content_data or web_content_string", 'Add web server module to agent'); + help_screen_line('--create_network_module', "<module_name> <module_type> <agent_name> <module_address> \n\t [<module_port> <description> <module_group> <min> <max> <post_process> <interval> \n\t <warning_min> <warning_max> <critical_min> <critical_max> <history_data> <ff_threshold>\n\t <warning_str> <critical_str> <unknown_events> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical> <timeout> <retries>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <use_alias> <ignore_unknown>]", 'Add not snmp network module to agent'); + help_screen_line('--create_snmp_module', "<module_name> <module_type> <agent_name> <module_address> <module_port>\n\t <version> [<community> <oid> <description> <module_group> <min> <max> <post_process> <interval>\n\t <warning_min> <warning_max> <critical_min> <critical_max> <history_data> \n\t <snmp3_priv_method> <snmp3_priv_pass> <snmp3_sec_level> <snmp3_auth_method> \n\t <snmp3_auth_user> <snmp3_auth_pass> <ff_threshold> <warning_str> \n\t <critical_str> <unknown_events> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <timeout> <retries> <use_alias> <ignore_unknown>] \n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse>]", 'Add snmp network module to agent'); - help_screen_line('--create_plugin_module', "<module_name> <module_type> <agent_name> <module_address> \n\t <module_port> <plugin_name> <user> <password> <parameters> [<description> \n\t <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> \n\t <critical_max> <history_data> <ff_threshold> <warning_str> <critical_str>\n\t <unknown_events> <each_ff> <ff_threshold_normal> <ff_threshold_warning>\n\t <ff_threshold_critical> <timeout> \n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <use_alias>]", 'Add plug-in module to agent'); + help_screen_line('--create_plugin_module', "<module_name> <module_type> <agent_name> <module_address> \n\t <module_port> <plugin_name> <user> <password> <parameters> [<description> \n\t <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> \n\t <critical_max> <history_data> <ff_threshold> <warning_str> <critical_str>\n\t <unknown_events> <each_ff> <ff_threshold_normal> <ff_threshold_warning>\n\t <ff_threshold_critical> <timeout> \n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <use_alias> <ignore_unknown>]", 'Add plug-in module to agent'); help_screen_line('--get_module_group', '[<module_group_name>]', 'Dysplay all module groups'); help_screen_line('--create_module_group', '<module_group_name>'); help_screen_line('--module_group_synch', "<server_name1|server_name2|server_name3...> [<return_type>]", 'Synchronize metaconsole module groups'); @@ -214,12 +214,12 @@ sub help_screen{ help_screen_line('--delete_not_policy_modules', '', 'Delete all modules without policy from configuration file'); help_screen_line('--disable_policy_alerts', '<policy_name>', 'Disable all the alerts of a policy'); help_screen_line('--create_policy', '<policy_name> <group_name> <description>'); - help_screen_line('--create_policy_data_module', "<policy_name> <module_name> <module_type> [<description> \n\t <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> \n\t <critical_min> <critical_max> <history_data> <data_configuration> <warning_str> \n\t <critical_str> <unknown_events> <ff_threshold> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical>\n\t <ff_timeout> <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse>]", 'Add data server module to policy'); - help_screen_line('--create_policy_web_module', "<policy_name> <module_name> <module_type> [<description> \n\t <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> \n\t <critical_min> <critical_max> <history_data> <retries> <requests> <agent_browser_id> <auth_server> <auth_realm> <data_configuration> <proxy_url> <proxy_auth_login> <proxy_auth_password> <warning_str> \n\t <critical_str> <unknown_events> <ff_threshold> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical>\n\t <ff_timeout> <warning_inverse> <critical_inverse> <critical_instructions> <warning_instructions> <unknown_instructions>].\n\t The valid data types are web_data, web_proc, web_content_data or web_content_string", 'Add web server module to policy'); - help_screen_line('--create_policy_network_module', "<policy_name> <module_name> <module_type> [<module_port> \n\t <description> <module_group> <min> <max> <post_process> <interval> \n\t <warning_min> <warning_max> <critical_min> <critical_max> <history_data> <ff_threshold> \n\t <warning_str> <critical_str> <unknown_events> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse>]", "Add not snmp network module to policy"); + help_screen_line('--create_policy_data_module', "<policy_name> <module_name> <module_type> [<description> \n\t <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> \n\t <critical_min> <critical_max> <history_data> <data_configuration> <warning_str> \n\t <critical_str> <unknown_events> <ff_threshold> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical>\n\t <ff_timeout> <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <ignore_unknown>]", 'Add data server module to policy'); + help_screen_line('--create_policy_web_module', "<policy_name> <module_name> <module_type> [<description> \n\t <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> \n\t <critical_min> <critical_max> <history_data> <retries> <requests> <agent_browser_id> <auth_server> <auth_realm> <data_configuration> <proxy_url> <proxy_auth_login> <proxy_auth_password> <warning_str> \n\t <critical_str> <unknown_events> <ff_threshold> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical>\n\t <ff_timeout> <warning_inverse> <critical_inverse> <critical_instructions> <warning_instructions> <unknown_instructions> <ignore_unknown>].\n\t The valid data types are web_data, web_proc, web_content_data or web_content_string", 'Add web server module to policy'); + help_screen_line('--create_policy_network_module', "<policy_name> <module_name> <module_type> [<module_port> \n\t <description> <module_group> <min> <max> <post_process> <interval> \n\t <warning_min> <warning_max> <critical_min> <critical_max> <history_data> <ff_threshold> \n\t <warning_str> <critical_str> <unknown_events> <each_ff>\n\t <ff_threshold_normal> <ff_threshold_warning> <ff_threshold_critical>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <ignore_unknown>]", "Add not snmp network module to policy"); help_screen_line('--create_policy_snmp_module', "<policy_name> <module_name> <module_type> <module_port> \n\t <version> [<community> <oid> <description> <module_group> <min> <max> \n\t <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> <history_data>\n\t <snmp3_priv_method> <snmp3_priv_pass> <snmp3_sec_level> <snmp3_auth_method> <snmp3_auth_user> \n\t <snmp3_priv_pass> <ff_threshold> <warning_str> <critical_str>\n\t <unknown_events> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical>\n\t - <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse>]", 'Add snmp network module to policy'); - help_screen_line('--create_policy_plugin_module', "<policy_name> <module_name> <module_type> \n\t <module_port> <plugin_name> <user> <password> <parameters> [<description> <module_group> <min> \n\t <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max>\n\t <history_data> <ff_threshold> <warning_str> <critical_str>\n\t <unknown_events> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse>]", 'Add plug-in module to policy'); + <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <ignore_unknown>]", 'Add snmp network module to policy'); + help_screen_line('--create_policy_plugin_module', "<policy_name> <module_name> <module_type> \n\t <module_port> <plugin_name> <user> <password> <parameters> [<description> <module_group> <min> \n\t <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max>\n\t <history_data> <ff_threshold> <warning_str> <critical_str>\n\t <unknown_events> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>\n\t <warning_inverse> <critical_inverse> <ignore_unknown>]", 'Add plug-in module to policy'); help_screen_line('--create_policy_data_module_from_local_component', '<policy_name> <component_name>'); help_screen_line('--add_collection_to_policy', "<policy_name> <collection_name>"); help_screen_line('--validate_policy_alerts', '<policy_name>', 'Validate the alerts of a given policy'); @@ -1655,23 +1655,23 @@ sub cli_create_data_module($) { $min,$max,$post_process, $interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data, $definition_file, $configuration_data, $warning_str, $critical_str, $enable_unknown_events, $ff_threshold, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $ff_timeout, - $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias); + $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias, $ignore_unknown); if ($in_policy == 0) { ($module_name, $module_type, $agent_name, $description, $module_group, $min,$max,$post_process, $interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data, $definition_file, $warning_str, $critical_str, $enable_unknown_events, $ff_threshold, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $ff_timeout, - $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias) = @ARGV[2..31]; + $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias, $ignore_unknown) = @ARGV[2..32]; } else { ($policy_name, $module_name, $module_type, $description, $module_group, $min,$max,$post_process, $interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data, $configuration_data, $warning_str, $critical_str, $enable_unknown_events, $ff_threshold, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $ff_timeout, - $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions) = @ARGV[2..31]; + $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $ignore_unknown) = @ARGV[2..32]; } - + my $module_name_def; my $module_type_def; @@ -1790,7 +1790,7 @@ sub cli_create_data_module($) { enterprise_hook('pandora_update_md5_file', [$conf, $agent_name]); } } - + if ($in_policy == 0) { if (defined $use_alias and $use_alias eq 'use_alias') { foreach my $id (@id_agents) { @@ -1886,7 +1886,8 @@ sub cli_create_data_module($) { $parameters{'critical_instructions'} = $critical_instructions unless !defined ($critical_instructions); $parameters{'warning_instructions'} = $warning_instructions unless !defined ($warning_instructions); $parameters{'unknown_instructions'} = $unknown_instructions unless !defined ($unknown_instructions); - + $parameters{'ignore_unknown'} = $ignore_unknown unless !defined ($ignore_unknown); + if ($in_policy == 0) { if (defined $use_alias and $use_alias eq 'use_alias') { foreach my $id (@id_agents) { @@ -1894,6 +1895,9 @@ sub cli_create_data_module($) { pandora_create_module_from_hash ($conf, \%parameters, $dbh); } } else { + if ($parameters{'id_agente'} eq '') { + $parameters{'id_agente'} = $agent_id; + } pandora_create_module_from_hash ($conf, \%parameters, $dbh); } } @@ -1914,7 +1918,7 @@ sub cli_create_web_module($) { $critical_max, $history_data, $retries, $requests, $agent_browser_id, $auth_server, $auth_realm, $definition_file, $proxy_url, $proxy_auth_login, $proxy_auth_password, $configuration_data, $warning_str, $critical_str, $enable_unknown_events, $ff_threshold, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $ff_timeout, - $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias); + $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias, $ignore_unknown); if ($in_policy == 0) { ($module_name, $module_type, $agent_name, $description, $module_group, @@ -1922,7 +1926,7 @@ sub cli_create_web_module($) { $critical_max, $history_data, $retries, $requests, $agent_browser_id, $auth_server, $auth_realm, $definition_file, $proxy_url, $proxy_auth_login, $proxy_auth_password, $warning_str, $critical_str, $enable_unknown_events, $ff_threshold, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $ff_timeout, - $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias) = @ARGV[2..39]; + $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $use_alias, $ignore_unknown) = @ARGV[2..40]; } else { ($policy_name, $module_name, $module_type, $description, $module_group, @@ -1930,7 +1934,7 @@ sub cli_create_web_module($) { $critical_max, $history_data, $retries, $requests, $agent_browser_id, $auth_server, $auth_realm, $configuration_data, $proxy_url, $proxy_auth_login, $proxy_auth_password, $warning_str, $critical_str, $enable_unknown_events, $ff_threshold, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $ff_timeout, - $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions) = @ARGV[2..38]; + $warning_inverse, $critical_inverse, $critical_instructions, $warning_instructions, $unknown_instructions, $ignore_unknown) = @ARGV[2..39]; } my $module_name_def; @@ -2158,6 +2162,7 @@ sub cli_create_web_module($) { $parameters{'tcp_rcv'} = $proxy_auth_password unless !defined ($proxy_auth_password); $parameters{'ip_target'} = $auth_server unless !defined ($auth_server); $parameters{'snmp_community'} = $auth_realm unless !defined ($auth_realm); + $parameters{'ignore_unknown'} = $ignore_unknown unless !defined ($ignore_unknown); @@ -2168,6 +2173,9 @@ sub cli_create_web_module($) { pandora_create_module_from_hash ($conf, \%parameters, $dbh); } } else { + if ($parameters{'id_agente'} eq '') { + $parameters{'id_agente'} = $agent_id; + } pandora_create_module_from_hash ($conf, \%parameters, $dbh); } } @@ -2357,7 +2365,7 @@ sub cli_create_network_module($) { $module_group, $min, $max, $post_process, $interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, $retries, $critical_instructions, - $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias); + $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias, $ignore_unknown); if ($in_policy == 0) { ($module_name, $module_type, $agent_name, $module_address, $module_port, $description, @@ -2365,7 +2373,7 @@ sub cli_create_network_module($) { $critical_max, $history_data, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, $retries,$critical_instructions, $warning_instructions, $unknown_instructions, - $warning_inverse, $critical_inverse, $use_alias) = @ARGV[2..33]; + $warning_inverse, $critical_inverse, $use_alias, $ignore_unknown) = @ARGV[2..34]; } else { ($policy_name, $module_name, $module_type, $module_port, $description, @@ -2373,7 +2381,7 @@ sub cli_create_network_module($) { $critical_max, $history_data, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, $retries, $critical_instructions, $warning_instructions, $unknown_instructions, - $warning_inverse, $critical_inverse) = @ARGV[2..31]; + $warning_inverse, $critical_inverse, $ignore_unknown) = @ARGV[2..34]; } my $module_name_def; @@ -2509,6 +2517,8 @@ sub cli_create_network_module($) { $parameters{'unknown_instructions'} = $unknown_instructions unless !defined ($unknown_instructions); $parameters{'critical_inverse'} = $critical_inverse unless !defined ($critical_inverse); $parameters{'warning_inverse'} = $warning_inverse unless !defined ($warning_inverse); + $parameters{'ignore_unknown'} = $ignore_unknown unless !defined ($ignore_unknown); + if ($in_policy == 0) { if (defined $use_alias and $use_alias eq 'use_alias') { @@ -2517,6 +2527,9 @@ sub cli_create_network_module($) { pandora_create_module_from_hash ($conf, \%parameters, $dbh); } } else { + if ($parameters{'id_agente'} eq '') { + $parameters{'id_agente'} = $agent_id; + } pandora_create_module_from_hash ($conf, \%parameters, $dbh); } } @@ -2537,7 +2550,7 @@ sub cli_create_snmp_module($) { $warning_max, $critical_min, $critical_max, $history_data, $snmp3_priv_method, $snmp3_priv_pass, $snmp3_sec_level, $snmp3_auth_method, $snmp3_auth_user, $snmp3_auth_pass, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, $retries, - $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias); + $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias, $ignore_unknown); if ($in_policy == 0) { ($module_name, $module_type, $agent_name, $module_address, $module_port, $version, $community, @@ -2545,7 +2558,7 @@ sub cli_create_snmp_module($) { $warning_max, $critical_min, $critical_max, $history_data, $snmp3_priv_method, $snmp3_priv_pass, $snmp3_sec_level, $snmp3_auth_method, $snmp3_auth_user, $snmp3_auth_pass, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, $retries, - $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias) = @ARGV[2..42]; + $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias, $ignore_unknown) = @ARGV[2..43]; } else { ($policy_name, $module_name, $module_type, $module_port, $version, $community, @@ -2553,7 +2566,7 @@ sub cli_create_snmp_module($) { $warning_max, $critical_min, $critical_max, $history_data, $snmp3_priv_method, $snmp3_priv_pass, $snmp3_sec_level, $snmp3_auth_method, $snmp3_auth_user, $snmp3_auth_pass, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, $retries, - $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse) = @ARGV[2..40]; + $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $ignore_unknown) = @ARGV[2..41]; } my $module_name_def; @@ -2694,6 +2707,7 @@ sub cli_create_snmp_module($) { $parameters{'unknown_instructions'} = $unknown_instructions unless !defined ($unknown_instructions); $parameters{'critical_inverse'} = $critical_inverse unless !defined ($critical_inverse); $parameters{'warning_inverse'} = $warning_inverse unless !defined ($warning_inverse); + $parameters{'ignore_unknown'} = $ignore_unknown unless !defined ($ignore_unknown); if ($in_policy == 0) { if (defined $use_alias and $use_alias eq 'use_alias') { @@ -2722,7 +2736,7 @@ sub cli_create_plugin_module($) { $interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, - $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias); + $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias, $ignore_unknown); if ($in_policy == 0) { ($module_name, $module_type, $agent_name, $module_address, $module_port, $plugin_name, @@ -2730,7 +2744,7 @@ sub cli_create_plugin_module($) { $interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, - $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias) = @ARGV[2..36]; + $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $use_alias, $ignore_unknown) = @ARGV[2..37]; } else { ($policy_name, $module_name, $module_type, $module_port, $plugin_name, @@ -2738,7 +2752,7 @@ sub cli_create_plugin_module($) { $interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data, $ff_threshold, $warning_str, $critical_str, $enable_unknown_events, $each_ff, $ff_threshold_normal, $ff_threshold_warning, $ff_threshold_critical, $timeout, - $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse) = @ARGV[2..34]; + $critical_instructions, $warning_instructions, $unknown_instructions, $warning_inverse, $critical_inverse, $ignore_unknown) = @ARGV[2..35]; } my $module_name_def; @@ -2894,6 +2908,7 @@ sub cli_create_plugin_module($) { $parameters{'unknown_instructions'} = $unknown_instructions unless !defined ($unknown_instructions); $parameters{'critical_inverse'} = $critical_inverse unless !defined ($critical_inverse); $parameters{'warning_inverse'} = $warning_inverse unless !defined ($warning_inverse); + $parameters{'ignore_unknown'} = $ignore_unknown unless !defined ($ignore_unknown); if ($in_policy == 0) { if (defined $use_alias and $use_alias eq 'use_alias') { @@ -7801,11 +7816,11 @@ sub pandora_manage_main ($$$) { cli_delete_agent(); } elsif ($param eq '--create_data_module') { - param_check($ltotal, 30, 24); + param_check($ltotal, 31, 24); cli_create_data_module(0); } elsif ($param eq '--create_web_module') { - param_check($ltotal, 39, 36); + param_check($ltotal, 40, 36); cli_create_web_module(0); } @@ -7822,15 +7837,15 @@ sub pandora_manage_main ($$$) { cli_module_group_synch(); } elsif ($param eq '--create_network_module') { - param_check($ltotal, 33, 21); + param_check($ltotal, 34, 21); cli_create_network_module(0); } elsif ($param eq '--create_snmp_module') { - param_check($ltotal, 41, 29); + param_check($ltotal, 43, 29); cli_create_snmp_module(0); } elsif ($param eq '--create_plugin_module') { - param_check($ltotal, 35, 20); + param_check($ltotal, 37, 20); cli_create_plugin_module(0); } elsif ($param eq '--delete_module') { @@ -8018,23 +8033,23 @@ sub pandora_manage_main ($$$) { cli_create_policy(); } elsif ($param eq '--create_policy_data_module') { - param_check($ltotal, 29, 21); + param_check($ltotal, 30, 21); cli_create_data_module(1); } elsif ($param eq '--create_policy_web_module') { - param_check($ltotal, 37, 33); + param_check($ltotal, 38, 33); cli_create_web_module(1); } elsif ($param eq '--create_policy_network_module') { - param_check($ltotal, 30, 20); + param_check($ltotal, 34, 20); cli_create_network_module(1); } elsif ($param eq '--create_policy_snmp_module') { - param_check($ltotal, 39, 27); + param_check($ltotal, 41, 27); cli_create_snmp_module(1); } elsif ($param eq '--create_policy_plugin_module') { - param_check($ltotal, 33, 19); + param_check($ltotal, 35, 19); cli_create_plugin_module(1); } elsif ($param eq '--create_alert_template') { diff --git a/visual_console_client/src/Item.ts b/visual_console_client/src/Item.ts index 356421d9d2..f0849c94a6 100644 --- a/visual_console_client/src/Item.ts +++ b/visual_console_client/src/Item.ts @@ -815,7 +815,13 @@ abstract class VisualConsoleItem<Props extends ItemProps> { this.elementRef.style.minWidth = "max-content"; this.elementRef.style.minHeight = "max-content"; } - this.updateDomElement(this.childElementRef); + + if ( + prevProps.type == ItemType.LINE_ITEM || + prevProps.type == ItemType.NETWORK_LINK + ) { + this.updateDomElement(this.childElementRef); + } } // Move box. if (!prevProps || this.positionChanged(prevProps, this.props)) { @@ -863,8 +869,6 @@ abstract class VisualConsoleItem<Props extends ItemProps> { // Change link. if (prevProps && prevProps.isLinkEnabled !== this.props.isLinkEnabled) { const container = this.createContainerDomElement(); - // Add the children of the old element. - container.innerHTML = this.elementRef.innerHTML; // Copy the attributes. const attrs = this.elementRef.attributes; for (let i = 0; i < attrs.length; i++) { @@ -873,7 +877,8 @@ abstract class VisualConsoleItem<Props extends ItemProps> { attrs[i].nodeName ); if (cloneIsNeeded !== null) { - container.setAttributeNode(<any>cloneIsNeeded.cloneNode()); + let cloneAttr = cloneIsNeeded.cloneNode(true) as Attr; + container.setAttributeNode(cloneAttr); } } } @@ -884,6 +889,10 @@ abstract class VisualConsoleItem<Props extends ItemProps> { // Changed the reference to the main element. It's ugly, but needed. this.elementRef = container; + + // Insert the elements into the container. + this.elementRef.appendChild(this.childElementRef); + this.elementRef.appendChild(this.labelElementRef); } if (