From b0960891888cfa4c43e79e96d7e57476237502cb Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 15 Feb 2022 09:55:45 -0500 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=A6=88=F0=9F=8F=A0=F0=9F=90=9C?= =?UTF-8?q?=E2=9D=97=20Initial=20Commit=20=E2=9D=97=F0=9F=90=9C?= =?UTF-8?q?=F0=9F=A6=88=F0=9F=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 7 + .gitignore | 17 + .travis.yml | 29 + Dockerfile | 59 + LICENSE.md | 13 + README.md | 10 + bin/create-blocklists.sh | 72 + bin/entrypoint-squid.sh | 69 + config/apache2/apache2.conf | 204 + config/apache2/mime.types | 1855 +++ config/e2guardian/authplugins/ident.conf | 4 + config/e2guardian/authplugins/ip.conf | 11 + config/e2guardian/authplugins/port.conf | 9 + .../e2guardian/authplugins/proxy-basic.conf | 5 + .../e2guardian/authplugins/proxy-digest.conf | 7 + config/e2guardian/authplugins/proxy-ntlm.conf | 5 + config/e2guardian/common.story | 250 + .../e2guardian/contentscanners/clamdscan.conf | 13 + .../contentscanners/commandlinescan.conf | 45 + .../e2guardian/contentscanners/icapscan.conf | 8 + .../e2guardian/downloadmanagers/default.conf | 17 + config/e2guardian/e2guardian.conf | 699 + config/e2guardian/e2guardianf1.conf | 527 + config/e2guardian/examplef1.story | 48 + .../languages/arspanish/fancydmtemplate.html | 179 + .../e2guardian/languages/arspanish/messages | 119 + .../languages/arspanish/neterr_template.html | 144 + .../languages/arspanish/template.html | 38 + .../languages/bulgarian/fancydmtemplate.html | 179 + .../e2guardian/languages/bulgarian/messages | 119 + .../languages/bulgarian/neterr_template.html | 144 + .../languages/bulgarian/template.html | 59 + .../chinesebig5/fancydmtemplate.html | 179 + .../e2guardian/languages/chinesebig5/messages | 120 + .../chinesebig5/neterr_template.html | 144 + .../languages/chinesebig5/template.html | 46 + .../chinesegb2312/fancydmtemplate.html | 179 + .../languages/chinesegb2312/messages | 119 + .../chinesegb2312/neterr_template.html | 144 + .../languages/chinesegb2312/template.html | 33 + .../languages/czech/fancydmtemplate.html | 173 + config/e2guardian/languages/czech/messages | 119 + .../languages/czech/neterr_template.html | 144 + .../e2guardian/languages/czech/template.html | 42 + .../languages/danish/fancydmtemplate.html | 173 + config/e2guardian/languages/danish/messages | 120 + .../languages/danish/neterr_template.html | 144 + .../e2guardian/languages/danish/template.html | 68 + .../languages/dutch/fancydmtemplate.html | 173 + config/e2guardian/languages/dutch/messages | 119 + .../languages/dutch/neterr_template.html | 144 + .../e2guardian/languages/dutch/template.html | 87 + .../languages/french/fancydmtemplate.html | 181 + config/e2guardian/languages/french/messages | 122 + .../languages/french/neterr_template.html | 144 + .../e2guardian/languages/french/template.html | 89 + .../languages/german/fancydmtemplate.html | 173 + config/e2guardian/languages/german/messages | 119 + .../languages/german/neterr_template.html | 144 + .../e2guardian/languages/german/template.html | 77 + .../languages/hebrew/fancydmtemplate.html | 179 + config/e2guardian/languages/hebrew/messages | 118 + .../languages/hebrew/neterr_template.html | 144 + .../e2guardian/languages/hebrew/template.html | 89 + .../languages/hungarian/fancydmtemplate.html | 179 + .../e2guardian/languages/hungarian/messages | 117 + .../languages/hungarian/neterr_template.html | 144 + .../languages/hungarian/template.html | 77 + .../languages/indonesian/fancydmtemplate.html | 173 + .../e2guardian/languages/indonesian/messages | 121 + .../languages/indonesian/neterr_template.html | 144 + .../languages/indonesian/template.html | 37 + .../languages/italian/fancydmtemplate.html | 179 + config/e2guardian/languages/italian/messages | 118 + .../languages/italian/neterr_template.html | 144 + .../languages/italian/template.html | 38 + .../languages/japanese/fancydmtemplate.html | 179 + config/e2guardian/languages/japanese/messages | 117 + .../languages/japanese/neterr_template.html | 144 + .../languages/japanese/template.html | 61 + .../languages/lithuanian/fancydmtemplate.html | 179 + .../e2guardian/languages/lithuanian/messages | 119 + .../languages/lithuanian/neterr_template.html | 144 + .../languages/lithuanian/template.html | 49 + .../languages/malay/fancydmtemplate.html | 179 + config/e2guardian/languages/malay/messages | 143 + .../languages/malay/neterr_template.html | 144 + .../e2guardian/languages/malay/template.html | 60 + .../languages/mxspanish/fancydmtemplate.html | 179 + .../e2guardian/languages/mxspanish/messages | 120 + .../languages/mxspanish/neterr_template.html | 144 + .../languages/mxspanish/template.html | 40 + .../languages/polish/fancydmtemplate.html | 173 + config/e2guardian/languages/polish/messages | 120 + .../languages/polish/neterr_template.html | 144 + .../e2guardian/languages/polish/template.html | 40 + .../languages/portuguese/fancydmtemplate.html | 173 + .../e2guardian/languages/portuguese/messages | 122 + .../languages/portuguese/neterr_template.html | 144 + .../languages/portuguese/template.html | 83 + .../ptbrazilian/fancydmtemplate.html | 181 + .../e2guardian/languages/ptbrazilian/messages | 121 + .../ptbrazilian/neterr_template.html | 144 + .../languages/ptbrazilian/template.html | 154 + .../russian-1251/fancydmtemplate.html | 179 + .../languages/russian-1251/messages | 119 + .../russian-1251/neterr_template.html | 144 + .../languages/russian-1251/template.html | 77 + .../russian-koi8-r/fancydmtemplate.html | 179 + .../languages/russian-koi8-r/messages | 117 + .../russian-koi8-r/neterr_template.html | 144 + .../languages/russian-koi8-r/template.html | 73 + .../languages/slovak/fancydmtemplate.html | 173 + config/e2guardian/languages/slovak/messages | 120 + .../languages/slovak/neterr_template.html | 144 + .../e2guardian/languages/slovak/template.html | 81 + .../languages/spanish/fancydmtemplate.html | 179 + config/e2guardian/languages/spanish/messages | 118 + .../languages/spanish/neterr_template.html | 144 + .../languages/spanish/template.html | 79 + .../languages/swedish/fancydmtemplate.html | 179 + config/e2guardian/languages/swedish/messages | 118 + .../languages/swedish/neterr_template.html | 144 + .../languages/swedish/template.html | 75 + .../languages/turkish/fancydmtemplate.html | 179 + config/e2guardian/languages/turkish/messages | 119 + .../languages/turkish/neterr_template.html | 144 + .../languages/turkish/template.html | 151 + .../languages/ukenglish/fancydmtemplate.html | 179 + .../e2guardian/languages/ukenglish/messages | 117 + .../languages/ukenglish/neterr_template.html | 144 + .../languages/ukenglish/template.html | 154 + config/e2guardian/lists/addheaderregexplist | 13 + config/e2guardian/lists/authexceptioniplist | 9 + .../e2guardian/lists/authexceptionsiteiplist | 9 + config/e2guardian/lists/authexceptionsitelist | 1 + config/e2guardian/lists/authexceptionurllist | 1 + config/e2guardian/lists/authplugins/ipgroups | 11 + .../e2guardian/lists/authplugins/portgroups | 8 + config/e2guardian/lists/bannedclientlist | 6 + config/e2guardian/lists/bannedextensionlist | 211 + config/e2guardian/lists/bannediplist | 12 + config/e2guardian/lists/bannedmimetypelist | 18 + config/e2guardian/lists/bannedphraselist | 57 + .../e2guardian/lists/bannedregexpheaderlist | 9 + config/e2guardian/lists/bannedregexpurllist | 120 + .../lists/bannedregexpuseragentlist | 7 + config/e2guardian/lists/bannedrooms/default | 2 + config/e2guardian/lists/bannedsearchlist | 9 + .../e2guardian/lists/bannedsearchoveridelist | 0 config/e2guardian/lists/bannedsiteiplist | 12 + config/e2guardian/lists/bannedsitelist | 97 + .../e2guardian/lists/bannedsitelistwithbypass | 64 + config/e2guardian/lists/bannedsslsiteiplist | 15 + config/e2guardian/lists/bannedsslsitelist | 9 + config/e2guardian/lists/bannedurllist | 59 + config/e2guardian/lists/contentregexplist | 93 + .../exceptionvirusextensionlist | 35 + .../exceptionvirusmimetypelist | 28 + .../contentscanners/exceptionvirussitelist | 12 + .../contentscanners/exceptionvirusurllist | 15 + .../e2guardian/lists/embededreferersiteiplist | 10 + .../e2guardian/lists/embededreferersitelist | 2 + config/e2guardian/lists/embededrefererurllist | 5 + config/e2guardian/lists/exceptionclientlist | 16 + .../e2guardian/lists/exceptionextensionlist | 49 + .../e2guardian/lists/exceptionfilesiteiplist | 15 + config/e2guardian/lists/exceptionfilesitelist | 30 + config/e2guardian/lists/exceptionfileurllist | 27 + config/e2guardian/lists/exceptioniplist | 27 + config/e2guardian/lists/exceptionmimetypelist | 40 + config/e2guardian/lists/exceptionphraselist | 18 + .../lists/exceptionregexpheaderlist | 8 + .../e2guardian/lists/exceptionregexpurllist | 15 + .../lists/exceptionregexpuseragentlist | 9 + config/e2guardian/lists/exceptionsiteiplist | 9 + config/e2guardian/lists/exceptionsitelist | 24 + config/e2guardian/lists/exceptionurllist | 15 + .../lists/exceptionvirusextensionlist | 45 + .../e2guardian/lists/exceptionvirussiteiplist | 12 + config/e2guardian/lists/filtergroupslist | 9 + config/e2guardian/lists/greysiteiplist | 16 + config/e2guardian/lists/greysitelist | 59 + config/e2guardian/lists/greysslsiteiplist | 10 + config/e2guardian/lists/greysslsitelist | 4 + config/e2guardian/lists/greyurllist | 27 + config/e2guardian/lists/headerregexplist | 11 + config/e2guardian/lists/localbannedsearchlist | 14 + config/e2guardian/lists/localbannedsiteiplist | 10 + config/e2guardian/lists/localbannedsitelist | 6 + .../e2guardian/lists/localbannedsslsiteiplist | 12 + .../e2guardian/lists/localbannedsslsitelist | 5 + config/e2guardian/lists/localbannedurllist | 1 + .../e2guardian/lists/localexceptionsiteiplist | 10 + .../e2guardian/lists/localexceptionsitelist | 1 + config/e2guardian/lists/localexceptionurllist | 1 + config/e2guardian/lists/localgreysiteiplist | 10 + config/e2guardian/lists/localgreysitelist | 1 + .../e2guardian/lists/localgreysslsiteiplist | 10 + config/e2guardian/lists/localgreysslsitelist | 6 + config/e2guardian/lists/localgreyurllist | 1 + config/e2guardian/lists/logregexpurllist | 12 + config/e2guardian/lists/logsiteiplist | 21 + config/e2guardian/lists/logsitelist | 12 + config/e2guardian/lists/logurllist | 12 + config/e2guardian/lists/nocheckcertsiteiplist | 17 + config/e2guardian/lists/nocheckcertsitelist | 9 + .../lists/phraselists/badwords/weighted_dutch | 36 + .../phraselists/badwords/weighted_french | 43 + .../phraselists/badwords/weighted_german | 34 + .../phraselists/badwords/weighted_portuguese | 16 + .../phraselists/badwords/weighted_spanish | 67 + .../lists/phraselists/chat/weighted | 33 + .../lists/phraselists/chat/weighted_italian | 26 + .../lists/phraselists/conspiracy/weighted | 61 + .../lists/phraselists/domainsforsale/weighted | 31 + .../lists/phraselists/drugadvocacy/weighted | 12 + .../lists/phraselists/forums/weighted | 66 + .../lists/phraselists/gambling/banned | 13 + .../phraselists/gambling/banned_portuguese | 10 + .../lists/phraselists/gambling/weighted | 45 + .../phraselists/gambling/weighted_portuguese | 12 + .../lists/phraselists/games/weighted | 64 + .../lists/phraselists/goodphrases/exception | 6 + .../phraselists/goodphrases/exception_email | 11 + .../phraselists/goodphrases/weighted_general | 425 + .../goodphrases/weighted_general_danish | 6 + .../goodphrases/weighted_general_dutch | 5 + .../goodphrases/weighted_general_malay | 8 + .../goodphrases/weighted_general_polish | 42 + .../goodphrases/weighted_general_portuguese | 44 + .../goodphrases/weighted_general_swedish | 97 + .../phraselists/goodphrases/weighted_news | 36 + .../lists/phraselists/googlesearches/banned | 674 + .../lists/phraselists/gore/weighted | 12 + .../phraselists/gore/weighted_portuguese | 11 + .../lists/phraselists/idtheft/weighted | 27 + .../lists/phraselists/illegaldrugs/banned | 5 + .../lists/phraselists/illegaldrugs/weighted | 81 + .../illegaldrugs/weighted_portuguese | 35 + .../phraselists/intolerance/banned_portuguese | 9 + .../lists/phraselists/intolerance/weighted | 47 + .../intolerance/weighted_portuguese | 20 + .../lists/phraselists/legaldrugs/weighted | 42 + .../lists/phraselists/malware/weighted | 111 + .../lists/phraselists/music/weighted | 87 + .../lists/phraselists/news/weighted | 114 + .../lists/phraselists/nudism/weighted | 30 + .../lists/phraselists/peer2peer/weighted | 53 + .../lists/phraselists/personals/weighted | 56 + .../phraselists/personals/weighted_portuguese | 204 + .../lists/phraselists/pornography/banned | 6 + .../phraselists/pornography/banned_portuguese | 517 + .../lists/phraselists/pornography/weighted | 3861 ++++++ .../phraselists/pornography/weighted_chinese | 17 + .../phraselists/pornography/weighted_danish | 56 + .../phraselists/pornography/weighted_dutch | 38 + .../phraselists/pornography/weighted_french | 134 + .../phraselists/pornography/weighted_german | 99 + .../phraselists/pornography/weighted_italian | 337 + .../phraselists/pornography/weighted_japanese | 265 + .../phraselists/pornography/weighted_malay | 60 + .../pornography/weighted_norwegian | 72 + .../phraselists/pornography/weighted_polish | 209 + .../pornography/weighted_portuguese | 701 + .../phraselists/pornography/weighted_russian | 144 + .../pornography/weighted_russian_utf8 | 144 + .../phraselists/pornography/weighted_spanish | 66 + .../phraselists/pornography/weighted_swedish | 89 + .../lists/phraselists/proxies/weighted | 132 + .../e2guardian/lists/phraselists/rta/banned | 7 + .../lists/phraselists/safelabel/banned | 11 + .../phraselists/secretsocieties/weighted | 64 + .../lists/phraselists/sport/weighted | 557 + .../lists/phraselists/translation/weighted | 70 + .../lists/phraselists/travel/weighted | 108 + .../lists/phraselists/upstreamfilter/weighted | 18 + .../lists/phraselists/violence/weighted | 26 + .../phraselists/violence/weighted_portuguese | 21 + .../lists/phraselists/warezhacking/weighted | 25 + .../lists/phraselists/weapons/weighted | 132 + .../phraselists/weapons/weighted_portuguese | 51 + .../lists/phraselists/webmail/weighted | 46 + .../lists/refererexceptionsiteiplist | 11 + .../e2guardian/lists/refererexceptionsitelist | 2 + .../e2guardian/lists/refererexceptionurllist | 1 + config/e2guardian/lists/searchregexplist | 19 + config/e2guardian/lists/sslsiteregexplist | 23 + config/e2guardian/lists/urlredirectregexplist | 4 + config/e2guardian/lists/urlregexplist | 55 + config/e2guardian/lists/weightedphraselist | 140 + config/e2guardian/preauth.story | 14 + config/e2guardian/site.story | 40 + config/squid/conf.d/debian.conf | 11 + config/squid/errorpage.css | 107 + config/squid/squid.conf | 40 + config/squid/squid.orig | 8564 +++++++++++++ config/squidguard/squidGuard.conf | 82 + data/htdocs/www/404.html | 73 + data/htdocs/www/block.html | 3 + data/htdocs/www/css/bootstrap.min.css | 10531 ++++++++++++++++ data/htdocs/www/css/errorpages.css | 342 + data/htdocs/www/css/index.css | 79 + data/htdocs/www/images/403.png | Bin 0 -> 35464 bytes data/htdocs/www/images/404.gif | Bin 0 -> 95633 bytes data/htdocs/www/images/bg.png | Bin 0 -> 1218 bytes data/htdocs/www/images/favicon.ico | Bin 0 -> 766 bytes data/htdocs/www/images/icon.png | Bin 0 -> 4029 bytes data/htdocs/www/images/icon.svg | 1 + data/htdocs/www/index.html | 48 + data/htdocs/www/js/app.js | 0 data/htdocs/www/js/bootstrap.min.js | 4075 ++++++ data/htdocs/www/js/errorpages/homepage.js | 6 + data/htdocs/www/js/errorpages/isup.js | 7 + data/htdocs/www/js/errorpages/loaddomain.js | 7 + data/htdocs/www/js/errorpages/scale.fix.js | 20 + data/htdocs/www/js/jquery/default.js | 5540 ++++++++ data/htdocs/www/js/passprotect.min.js | 2294 ++++ data/htdocs/www/server-health | 1 + data/htdocs/www/server-health.json | 3 + data/htdocs/www/site.webmanifest | 14 + data/htdocs/www/wpad.dat | 7 + 322 files changed, 62596 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 Dockerfile create mode 100644 LICENSE.md create mode 100644 README.md create mode 100755 bin/create-blocklists.sh create mode 100755 bin/entrypoint-squid.sh create mode 100644 config/apache2/apache2.conf create mode 100644 config/apache2/mime.types create mode 100644 config/e2guardian/authplugins/ident.conf create mode 100644 config/e2guardian/authplugins/ip.conf create mode 100644 config/e2guardian/authplugins/port.conf create mode 100644 config/e2guardian/authplugins/proxy-basic.conf create mode 100644 config/e2guardian/authplugins/proxy-digest.conf create mode 100644 config/e2guardian/authplugins/proxy-ntlm.conf create mode 100644 config/e2guardian/common.story create mode 100644 config/e2guardian/contentscanners/clamdscan.conf create mode 100644 config/e2guardian/contentscanners/commandlinescan.conf create mode 100644 config/e2guardian/contentscanners/icapscan.conf create mode 100644 config/e2guardian/downloadmanagers/default.conf create mode 100644 config/e2guardian/e2guardian.conf create mode 100644 config/e2guardian/e2guardianf1.conf create mode 100644 config/e2guardian/examplef1.story create mode 100644 config/e2guardian/languages/arspanish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/arspanish/messages create mode 100644 config/e2guardian/languages/arspanish/neterr_template.html create mode 100644 config/e2guardian/languages/arspanish/template.html create mode 100644 config/e2guardian/languages/bulgarian/fancydmtemplate.html create mode 100644 config/e2guardian/languages/bulgarian/messages create mode 100644 config/e2guardian/languages/bulgarian/neterr_template.html create mode 100644 config/e2guardian/languages/bulgarian/template.html create mode 100644 config/e2guardian/languages/chinesebig5/fancydmtemplate.html create mode 100644 config/e2guardian/languages/chinesebig5/messages create mode 100644 config/e2guardian/languages/chinesebig5/neterr_template.html create mode 100644 config/e2guardian/languages/chinesebig5/template.html create mode 100644 config/e2guardian/languages/chinesegb2312/fancydmtemplate.html create mode 100644 config/e2guardian/languages/chinesegb2312/messages create mode 100644 config/e2guardian/languages/chinesegb2312/neterr_template.html create mode 100644 config/e2guardian/languages/chinesegb2312/template.html create mode 100644 config/e2guardian/languages/czech/fancydmtemplate.html create mode 100644 config/e2guardian/languages/czech/messages create mode 100644 config/e2guardian/languages/czech/neterr_template.html create mode 100644 config/e2guardian/languages/czech/template.html create mode 100644 config/e2guardian/languages/danish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/danish/messages create mode 100644 config/e2guardian/languages/danish/neterr_template.html create mode 100644 config/e2guardian/languages/danish/template.html create mode 100644 config/e2guardian/languages/dutch/fancydmtemplate.html create mode 100644 config/e2guardian/languages/dutch/messages create mode 100644 config/e2guardian/languages/dutch/neterr_template.html create mode 100644 config/e2guardian/languages/dutch/template.html create mode 100644 config/e2guardian/languages/french/fancydmtemplate.html create mode 100644 config/e2guardian/languages/french/messages create mode 100644 config/e2guardian/languages/french/neterr_template.html create mode 100644 config/e2guardian/languages/french/template.html create mode 100644 config/e2guardian/languages/german/fancydmtemplate.html create mode 100644 config/e2guardian/languages/german/messages create mode 100644 config/e2guardian/languages/german/neterr_template.html create mode 100644 config/e2guardian/languages/german/template.html create mode 100644 config/e2guardian/languages/hebrew/fancydmtemplate.html create mode 100644 config/e2guardian/languages/hebrew/messages create mode 100644 config/e2guardian/languages/hebrew/neterr_template.html create mode 100644 config/e2guardian/languages/hebrew/template.html create mode 100644 config/e2guardian/languages/hungarian/fancydmtemplate.html create mode 100644 config/e2guardian/languages/hungarian/messages create mode 100644 config/e2guardian/languages/hungarian/neterr_template.html create mode 100644 config/e2guardian/languages/hungarian/template.html create mode 100644 config/e2guardian/languages/indonesian/fancydmtemplate.html create mode 100644 config/e2guardian/languages/indonesian/messages create mode 100644 config/e2guardian/languages/indonesian/neterr_template.html create mode 100644 config/e2guardian/languages/indonesian/template.html create mode 100644 config/e2guardian/languages/italian/fancydmtemplate.html create mode 100644 config/e2guardian/languages/italian/messages create mode 100644 config/e2guardian/languages/italian/neterr_template.html create mode 100644 config/e2guardian/languages/italian/template.html create mode 100644 config/e2guardian/languages/japanese/fancydmtemplate.html create mode 100644 config/e2guardian/languages/japanese/messages create mode 100644 config/e2guardian/languages/japanese/neterr_template.html create mode 100644 config/e2guardian/languages/japanese/template.html create mode 100644 config/e2guardian/languages/lithuanian/fancydmtemplate.html create mode 100644 config/e2guardian/languages/lithuanian/messages create mode 100644 config/e2guardian/languages/lithuanian/neterr_template.html create mode 100644 config/e2guardian/languages/lithuanian/template.html create mode 100644 config/e2guardian/languages/malay/fancydmtemplate.html create mode 100644 config/e2guardian/languages/malay/messages create mode 100644 config/e2guardian/languages/malay/neterr_template.html create mode 100644 config/e2guardian/languages/malay/template.html create mode 100644 config/e2guardian/languages/mxspanish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/mxspanish/messages create mode 100644 config/e2guardian/languages/mxspanish/neterr_template.html create mode 100644 config/e2guardian/languages/mxspanish/template.html create mode 100644 config/e2guardian/languages/polish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/polish/messages create mode 100644 config/e2guardian/languages/polish/neterr_template.html create mode 100644 config/e2guardian/languages/polish/template.html create mode 100644 config/e2guardian/languages/portuguese/fancydmtemplate.html create mode 100644 config/e2guardian/languages/portuguese/messages create mode 100644 config/e2guardian/languages/portuguese/neterr_template.html create mode 100644 config/e2guardian/languages/portuguese/template.html create mode 100644 config/e2guardian/languages/ptbrazilian/fancydmtemplate.html create mode 100644 config/e2guardian/languages/ptbrazilian/messages create mode 100644 config/e2guardian/languages/ptbrazilian/neterr_template.html create mode 100644 config/e2guardian/languages/ptbrazilian/template.html create mode 100644 config/e2guardian/languages/russian-1251/fancydmtemplate.html create mode 100644 config/e2guardian/languages/russian-1251/messages create mode 100644 config/e2guardian/languages/russian-1251/neterr_template.html create mode 100644 config/e2guardian/languages/russian-1251/template.html create mode 100644 config/e2guardian/languages/russian-koi8-r/fancydmtemplate.html create mode 100644 config/e2guardian/languages/russian-koi8-r/messages create mode 100644 config/e2guardian/languages/russian-koi8-r/neterr_template.html create mode 100644 config/e2guardian/languages/russian-koi8-r/template.html create mode 100644 config/e2guardian/languages/slovak/fancydmtemplate.html create mode 100644 config/e2guardian/languages/slovak/messages create mode 100644 config/e2guardian/languages/slovak/neterr_template.html create mode 100644 config/e2guardian/languages/slovak/template.html create mode 100644 config/e2guardian/languages/spanish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/spanish/messages create mode 100644 config/e2guardian/languages/spanish/neterr_template.html create mode 100644 config/e2guardian/languages/spanish/template.html create mode 100644 config/e2guardian/languages/swedish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/swedish/messages create mode 100644 config/e2guardian/languages/swedish/neterr_template.html create mode 100644 config/e2guardian/languages/swedish/template.html create mode 100644 config/e2guardian/languages/turkish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/turkish/messages create mode 100644 config/e2guardian/languages/turkish/neterr_template.html create mode 100644 config/e2guardian/languages/turkish/template.html create mode 100644 config/e2guardian/languages/ukenglish/fancydmtemplate.html create mode 100644 config/e2guardian/languages/ukenglish/messages create mode 100644 config/e2guardian/languages/ukenglish/neterr_template.html create mode 100644 config/e2guardian/languages/ukenglish/template.html create mode 100644 config/e2guardian/lists/addheaderregexplist create mode 100644 config/e2guardian/lists/authexceptioniplist create mode 100644 config/e2guardian/lists/authexceptionsiteiplist create mode 100644 config/e2guardian/lists/authexceptionsitelist create mode 100644 config/e2guardian/lists/authexceptionurllist create mode 100644 config/e2guardian/lists/authplugins/ipgroups create mode 100644 config/e2guardian/lists/authplugins/portgroups create mode 100644 config/e2guardian/lists/bannedclientlist create mode 100644 config/e2guardian/lists/bannedextensionlist create mode 100644 config/e2guardian/lists/bannediplist create mode 100644 config/e2guardian/lists/bannedmimetypelist create mode 100644 config/e2guardian/lists/bannedphraselist create mode 100644 config/e2guardian/lists/bannedregexpheaderlist create mode 100644 config/e2guardian/lists/bannedregexpurllist create mode 100644 config/e2guardian/lists/bannedregexpuseragentlist create mode 100644 config/e2guardian/lists/bannedrooms/default create mode 100644 config/e2guardian/lists/bannedsearchlist create mode 100644 config/e2guardian/lists/bannedsearchoveridelist create mode 100644 config/e2guardian/lists/bannedsiteiplist create mode 100644 config/e2guardian/lists/bannedsitelist create mode 100644 config/e2guardian/lists/bannedsitelistwithbypass create mode 100644 config/e2guardian/lists/bannedsslsiteiplist create mode 100644 config/e2guardian/lists/bannedsslsitelist create mode 100644 config/e2guardian/lists/bannedurllist create mode 100644 config/e2guardian/lists/contentregexplist create mode 100644 config/e2guardian/lists/contentscanners/exceptionvirusextensionlist create mode 100644 config/e2guardian/lists/contentscanners/exceptionvirusmimetypelist create mode 100644 config/e2guardian/lists/contentscanners/exceptionvirussitelist create mode 100644 config/e2guardian/lists/contentscanners/exceptionvirusurllist create mode 100644 config/e2guardian/lists/embededreferersiteiplist create mode 100644 config/e2guardian/lists/embededreferersitelist create mode 100644 config/e2guardian/lists/embededrefererurllist create mode 100644 config/e2guardian/lists/exceptionclientlist create mode 100644 config/e2guardian/lists/exceptionextensionlist create mode 100644 config/e2guardian/lists/exceptionfilesiteiplist create mode 100644 config/e2guardian/lists/exceptionfilesitelist create mode 100644 config/e2guardian/lists/exceptionfileurllist create mode 100644 config/e2guardian/lists/exceptioniplist create mode 100644 config/e2guardian/lists/exceptionmimetypelist create mode 100644 config/e2guardian/lists/exceptionphraselist create mode 100644 config/e2guardian/lists/exceptionregexpheaderlist create mode 100644 config/e2guardian/lists/exceptionregexpurllist create mode 100644 config/e2guardian/lists/exceptionregexpuseragentlist create mode 100644 config/e2guardian/lists/exceptionsiteiplist create mode 100644 config/e2guardian/lists/exceptionsitelist create mode 100644 config/e2guardian/lists/exceptionurllist create mode 100644 config/e2guardian/lists/exceptionvirusextensionlist create mode 100644 config/e2guardian/lists/exceptionvirussiteiplist create mode 100644 config/e2guardian/lists/filtergroupslist create mode 100644 config/e2guardian/lists/greysiteiplist create mode 100644 config/e2guardian/lists/greysitelist create mode 100644 config/e2guardian/lists/greysslsiteiplist create mode 100644 config/e2guardian/lists/greysslsitelist create mode 100644 config/e2guardian/lists/greyurllist create mode 100644 config/e2guardian/lists/headerregexplist create mode 100644 config/e2guardian/lists/localbannedsearchlist create mode 100644 config/e2guardian/lists/localbannedsiteiplist create mode 100644 config/e2guardian/lists/localbannedsitelist create mode 100644 config/e2guardian/lists/localbannedsslsiteiplist create mode 100644 config/e2guardian/lists/localbannedsslsitelist create mode 100644 config/e2guardian/lists/localbannedurllist create mode 100644 config/e2guardian/lists/localexceptionsiteiplist create mode 100644 config/e2guardian/lists/localexceptionsitelist create mode 100644 config/e2guardian/lists/localexceptionurllist create mode 100644 config/e2guardian/lists/localgreysiteiplist create mode 100644 config/e2guardian/lists/localgreysitelist create mode 100644 config/e2guardian/lists/localgreysslsiteiplist create mode 100644 config/e2guardian/lists/localgreysslsitelist create mode 100644 config/e2guardian/lists/localgreyurllist create mode 100644 config/e2guardian/lists/logregexpurllist create mode 100644 config/e2guardian/lists/logsiteiplist create mode 100644 config/e2guardian/lists/logsitelist create mode 100644 config/e2guardian/lists/logurllist create mode 100644 config/e2guardian/lists/nocheckcertsiteiplist create mode 100644 config/e2guardian/lists/nocheckcertsitelist create mode 100644 config/e2guardian/lists/phraselists/badwords/weighted_dutch create mode 100644 config/e2guardian/lists/phraselists/badwords/weighted_french create mode 100644 config/e2guardian/lists/phraselists/badwords/weighted_german create mode 100644 config/e2guardian/lists/phraselists/badwords/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/badwords/weighted_spanish create mode 100644 config/e2guardian/lists/phraselists/chat/weighted create mode 100644 config/e2guardian/lists/phraselists/chat/weighted_italian create mode 100644 config/e2guardian/lists/phraselists/conspiracy/weighted create mode 100644 config/e2guardian/lists/phraselists/domainsforsale/weighted create mode 100644 config/e2guardian/lists/phraselists/drugadvocacy/weighted create mode 100644 config/e2guardian/lists/phraselists/forums/weighted create mode 100644 config/e2guardian/lists/phraselists/gambling/banned create mode 100644 config/e2guardian/lists/phraselists/gambling/banned_portuguese create mode 100644 config/e2guardian/lists/phraselists/gambling/weighted create mode 100644 config/e2guardian/lists/phraselists/gambling/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/games/weighted create mode 100644 config/e2guardian/lists/phraselists/goodphrases/exception create mode 100644 config/e2guardian/lists/phraselists/goodphrases/exception_email create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_general create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_general_danish create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_general_dutch create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_general_malay create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_general_polish create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_general_portuguese create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_general_swedish create mode 100644 config/e2guardian/lists/phraselists/goodphrases/weighted_news create mode 100644 config/e2guardian/lists/phraselists/googlesearches/banned create mode 100644 config/e2guardian/lists/phraselists/gore/weighted create mode 100644 config/e2guardian/lists/phraselists/gore/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/idtheft/weighted create mode 100644 config/e2guardian/lists/phraselists/illegaldrugs/banned create mode 100644 config/e2guardian/lists/phraselists/illegaldrugs/weighted create mode 100644 config/e2guardian/lists/phraselists/illegaldrugs/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/intolerance/banned_portuguese create mode 100644 config/e2guardian/lists/phraselists/intolerance/weighted create mode 100644 config/e2guardian/lists/phraselists/intolerance/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/legaldrugs/weighted create mode 100644 config/e2guardian/lists/phraselists/malware/weighted create mode 100644 config/e2guardian/lists/phraselists/music/weighted create mode 100644 config/e2guardian/lists/phraselists/news/weighted create mode 100644 config/e2guardian/lists/phraselists/nudism/weighted create mode 100644 config/e2guardian/lists/phraselists/peer2peer/weighted create mode 100644 config/e2guardian/lists/phraselists/personals/weighted create mode 100644 config/e2guardian/lists/phraselists/personals/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/pornography/banned create mode 100644 config/e2guardian/lists/phraselists/pornography/banned_portuguese create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_chinese create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_danish create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_dutch create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_french create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_german create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_italian create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_japanese create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_malay create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_norwegian create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_polish create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_russian create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_russian_utf8 create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_spanish create mode 100644 config/e2guardian/lists/phraselists/pornography/weighted_swedish create mode 100644 config/e2guardian/lists/phraselists/proxies/weighted create mode 100644 config/e2guardian/lists/phraselists/rta/banned create mode 100644 config/e2guardian/lists/phraselists/safelabel/banned create mode 100644 config/e2guardian/lists/phraselists/secretsocieties/weighted create mode 100644 config/e2guardian/lists/phraselists/sport/weighted create mode 100644 config/e2guardian/lists/phraselists/translation/weighted create mode 100644 config/e2guardian/lists/phraselists/travel/weighted create mode 100644 config/e2guardian/lists/phraselists/upstreamfilter/weighted create mode 100644 config/e2guardian/lists/phraselists/violence/weighted create mode 100644 config/e2guardian/lists/phraselists/violence/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/warezhacking/weighted create mode 100644 config/e2guardian/lists/phraselists/weapons/weighted create mode 100644 config/e2guardian/lists/phraselists/weapons/weighted_portuguese create mode 100644 config/e2guardian/lists/phraselists/webmail/weighted create mode 100644 config/e2guardian/lists/refererexceptionsiteiplist create mode 100644 config/e2guardian/lists/refererexceptionsitelist create mode 100644 config/e2guardian/lists/refererexceptionurllist create mode 100644 config/e2guardian/lists/searchregexplist create mode 100644 config/e2guardian/lists/sslsiteregexplist create mode 100644 config/e2guardian/lists/urlredirectregexplist create mode 100644 config/e2guardian/lists/urlregexplist create mode 100644 config/e2guardian/lists/weightedphraselist create mode 100644 config/e2guardian/preauth.story create mode 100644 config/e2guardian/site.story create mode 100644 config/squid/conf.d/debian.conf create mode 100644 config/squid/errorpage.css create mode 100644 config/squid/squid.conf create mode 100644 config/squid/squid.orig create mode 100644 config/squidguard/squidGuard.conf create mode 100644 data/htdocs/www/404.html create mode 100644 data/htdocs/www/block.html create mode 100644 data/htdocs/www/css/bootstrap.min.css create mode 100644 data/htdocs/www/css/errorpages.css create mode 100644 data/htdocs/www/css/index.css create mode 100644 data/htdocs/www/images/403.png create mode 100644 data/htdocs/www/images/404.gif create mode 100644 data/htdocs/www/images/bg.png create mode 100644 data/htdocs/www/images/favicon.ico create mode 100644 data/htdocs/www/images/icon.png create mode 100644 data/htdocs/www/images/icon.svg create mode 100644 data/htdocs/www/index.html create mode 100644 data/htdocs/www/js/app.js create mode 100644 data/htdocs/www/js/bootstrap.min.js create mode 100644 data/htdocs/www/js/errorpages/homepage.js create mode 100644 data/htdocs/www/js/errorpages/isup.js create mode 100644 data/htdocs/www/js/errorpages/loaddomain.js create mode 100644 data/htdocs/www/js/errorpages/scale.fix.js create mode 100644 data/htdocs/www/js/jquery/default.js create mode 100644 data/htdocs/www/js/passprotect.min.js create mode 100644 data/htdocs/www/server-health create mode 100644 data/htdocs/www/server-health.json create mode 100644 data/htdocs/www/site.webmanifest create mode 100644 data/htdocs/www/wpad.dat diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..810979f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.git +circle.yml +LICENSE +VERSION +README.md +Changelog.md +Makefile diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b763338 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# gitignore created on 02/14/22 at 15:49 +# Disable reminder in prompt +ignoredirmessage + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Other +.installed + + diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..63cd3d3 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,29 @@ +sudo: required +services: + - docker + +env: + DOCKER_COMPOSE_VERSION: 1.5.2 + +before_install: + - sudo rm /usr/local/bin/docker-compose + - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose + - chmod +x docker-compose + - sudo mv docker-compose /usr/local/bin + +script: + - docker-compose build + - docker-compose up -d + # everything running? + - docker-compose ps + - docker-compose ps squidguard | grep Up + # wpad should be available + - docker-compose run squidguard wget -o /dev/null http://squidguard/wpat.dat + # muenchhausen.de should not be blocked + - docker-compose run squidguard wget -e use_proxy=yes -e http_proxy=http://squidguard:3128 -o /dev/null http://www.muenchhausen.de + # lemonlime.de should be blocked because it is not in the whitelist + - docker-compose run squidguard wget -e use_proxy=yes -e http_proxy=http://squidguard:3128 --content-on-error -qO- http://www.lemonlime.de | grep "block" + +notifications: + email: + - derk@muenchhausen.de diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4cab855 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,59 @@ +FROM casjaysdev/debian:latest AS build + +ARG BUILD_DATE="$(date +'%Y-%m-%d %H:%M')" + +LABEL \ + org.label-schema.name="Full proxy server" \ + org.label-schema.description="" \ + org.label-schema.url="https://github.com/casjaysdev/squid" \ + org.label-schema.vcs-url="https://github.com/casjaysdev/squid" \ + org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.version=$BUILD_DATE \ + org.label-schema.vcs-ref=$BUILD_DATE \ + org.label-schema.license="MIT" \ + org.label-schema.vcs-type="Git" \ + org.label-schema.schema-version="latest" \ + org.label-schema.vendor="CasjaysDev" \ + maintainer="CasjaysDev " + +ENV \ + HOSTNAME=proxy \ + SQUID_HOME_DIR=/var/lib/squid \ + SQUID_CACHE_DIR=/data/cache/squid \ + SQUID_LOG_DIR=/data/log/squid \ + SQUID_USER=squid + +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -yy \ + postfix \ + squid \ + squidguard \ + e2guardian \ + c-icap \ + apache2 \ + apache2-bin \ + libapache2-mod-fcgid \ + libapache2-mod-geoip \ + libapache2-mod-proxy-uwsgi \ + libapache2-mod-fcgid \ + libapache2-mod-wsgi \ + && apt-get remove -yy --purge exim* \ + && rm -rf /var/lib/apt/lists/* /etc/apache2/*conf* \ + && mkdir -p /config /data \ + && useradd -d "$SQUID_HOME_DIR" -r -U -m "$SQUID_USER" + +ADD ./config/. /etc/ +ADD ./bin/. /usr/local/bin/ + +ADD ./data/. /usr/local/share/squidFiles/data/ +ADD ./config/. /usr/local/share/squidFiles/config/ + +FROM scratch + +COPY --from=build /. / + +EXPOSE 3127 3128 80 +VOLUME ["/config", "/data"] + +HEALTHCHECK CMD ["/usr/local/bin/entrypoint-squid.sh","healthcheck"] +ENTRYPOINT ["/usr/local/bin/entrypoint-squid.sh"] diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..86d4345 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2022 Jason Hempstead + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 1. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b079138 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +

+👋 Welcome to squidguard 👋 +

+

+StartDocumentationHere +

+ +## Author + +👤 **Jason Hempstead** diff --git a/bin/create-blocklists.sh b/bin/create-blocklists.sh new file mode 100755 index 0000000..592f5b2 --- /dev/null +++ b/bin/create-blocklists.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +set -ex + +SQUID_USER="${SQUID_USER:-squid}" +SQUID_LOG_DIR="${SQUID_LOG_DIR:-/data/log/squid}" +REDIRECT_URL="${REDIRECT_URL:-/}" +BLOCKLIST="${BLOCKLIST:-http://www.shallalist.de/Downloads/shallalist.tar.gz}" +BLOCKED_CATEGORIES="${BLOCKED_CATEGORIES:-adv,aggressive,porn,spyware,violence,warez}" + +CONFIG_FILE="/etc/squidguard/squidGuard.conf" +DB_LOCATION="/data/squidguard/db" +LOG_LOCATION="/data/log" + +echo "Downloading blocklist..." +wget -q "${BLOCKLIST}" -O /tmp/blocklist.tgz + +echo "Extracting blocklist..." +mkdir -p /tmp/blocklist +tar xzf /tmp/blocklist.tgz --strip-components=1 -C /tmp/blocklist + +echo "Creating config file..." +rm "${CONFIG_FILE}" +touch "${CONFIG_FILE}" + +echo "dbhome ${DB_LOCATION}" >>"${CONFIG_FILE}" +echo "logdir ${LOG_LOCATION}" >>"${CONFIG_FILE}" + +for CATEGORY in $(echo ${BLOCKED_CATEGORIES} | sed "s/,/ /g"); do + if [ ! -d "/tmp/blocklist/${CATEGORY}" ]; then + echo "Category ${CATEGORY} not available!" + exit 1 + fi + + cp -r "/tmp/blocklist/${CATEGORY}" "${DB_LOCATION}/" + + echo "dest ${CATEGORY} {" >>"${CONFIG_FILE}" + + if [ -e "${DB_LOCATION}/${CATEGORY}/domains" ]; then + echo " domainlist ${CATEGORY}/domains" >>"${CONFIG_FILE}" + fi + + if [ -e "${DB_LOCATION}/${CATEGORY}/urls" ]; then + echo " urllist ${CATEGORY}/urls" >>"${CONFIG_FILE}" + fi + + if [ -e "${DB_LOCATION}/${CATEGORY}/expressions" ]; then + echo " expressionlist ${CATEGORY}/expressions" >>"${CONFIG_FILE}" + fi + + echo "}" >>"${CONFIG_FILE}" +done + +NOT_LIST="${BLOCKED_CATEGORIES//,/ !}" + +{ + echo "acl {" + echo " default {" + echo " pass !${NOT_LIST} all" + echo " redirect $REDIRECT_URL" + echo " }" + echo "}" +} >>"${CONFIG_FILE}" + +squidGuard -C all + +chown -R ${SQUID_USER}:${SQUID_USER} "${DB_LOCATION}" +chown -R ${SQUID_USER}:${SQUID_USER} "${LOG_LOCATION}" +chown -R ${SQUID_USER}:${SQUID_USER} "${CONFIG_FILE}" + +echo "Cleanup..." +rm -rf /tmp/* diff --git a/bin/entrypoint-squid.sh b/bin/entrypoint-squid.sh new file mode 100755 index 0000000..64da2ec --- /dev/null +++ b/bin/entrypoint-squid.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +set -e + +if [ "$1" = "healthcheck" ]; then + squidclient -h localhost cache_object://localhost/counters + exit $? +fi + +SQUID_USER="${SQUID_USER:-squid}" +SQUID_LOG_DIR="${SQUID_LOG_DIR:-/data/log/squid}" +SQUID_CACHE_DIR="${SQUID_CACHE_DIR:-/data/cache/squid}" +HOSTNAME="${HOSTNAME:-$(hostname -f)}" + +mkdir -p "/config" "/data" + +for dir in apache2 e2guardian squid squidguard; do + if [ -f "/usr/local/share/squidFiles/$dir" ]; then + cp -Rf "/usr/local/share/squidFiles/$dir" "/config/$dir" + elif [ -d "/usr/local/share/squidFiles/$dir" ]; then + cp -Rf "/usr/local/share/squidFiles/$dir/." "/config/$dir/" + else + cp -Rf "/usr/local/share/squidFiles/data/." "/data/" + cp -Rf "usr/local/share/squidFiles/config/." "/config/" + fi +done + +mkdir -p "${SQUID_LOG_DIR}" "${SQUID_CACHE_DIR}" +mkdir -p "/data/log/squidguard" "/data/log/e2guardian" "/data/squidguard/db" +chown -Rf ${SQUID_USER}:${SQUID_USER} "/config" "/data" +chmod -Rf 755 "${SQUID_LOG_DIR}" + +cp -Rf "/config/." "/etc/" + +if [ "${UPDATE_BLACKLIST_URL}" != "" ]; then + sudo wget -O backlist.tar.gz ${UPDATE_BLACKLIST_URL} && + tar -xzf backlist.tar.gz -C "/data/squidguard/db" && + rm -Rf backlist.tar.gz && + chown -Rf ${SQUID_USER}:${SQUID_USER} "/data/squidguard/db" +fi + +if [ "${WPAD_IP}" != "" ]; then + sed 's/{{WPAD_IP}}/'"${WPAD_IP}"'/' -i "/data/htdocs/www/wpad.dat" + sed 's/{{WPAD_NOPROXY_NET}}/'"${WPAD_NOPROXY_NET}"'/' -i "/data/htdocs/www/wpad.dat" + sed 's/{{WPAD_NOPROXY_MASK}}/'"${WPAD_NOPROXY_MASK}"'/' -i "/data/htdocs/www/wpad.dat" +fi + +# allow arguments to be passed to squid +if [[ ${1:0:1} = '-' ]]; then + EXTRA_ARGS="$@" + set -- +elif [[ ${1} == squid || ${1} == $(which squid) ]]; then + EXTRA_ARGS="${@:2}" + set -- +fi + +# start apache to serve wpad.dat file and or block.html +sudo /etc/init.d/apache2 restart + +# default behaviour is to launch squid +if [[ -z ${1} ]]; then + if [[ ! -d ${SQUID_CACHE_DIR}/00 ]]; then + echo "Initializing cache..." + $(which squid) -N -f /etc/squid/squid.conf -z + fi + echo "Starting squid..." + exec $(which squid) -f /etc/squid/squid.conf -NYCd 1 ${EXTRA_ARGS} +else + exec "$@" +fi diff --git a/config/apache2/apache2.conf b/config/apache2/apache2.conf new file mode 100644 index 0000000..fe696fc --- /dev/null +++ b/config/apache2/apache2.conf @@ -0,0 +1,204 @@ +# This is the main Apache HTTP server configuration file. It contains the +# Set to one of: Full | OS | Minor | Minimal | Major | Prod +ServerTokens Prod +ServerRoot /etc/apache2 +Listen 80 + +LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so +LoadModule access_compat_module /usr/lib/apache2/modules/mod_access_compat.so +LoadModule actions_module /usr/lib/apache2/modules/mod_actions.so +LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so +LoadModule allowmethods_module /usr/lib/apache2/modules/mod_allowmethods.so +LoadModule asis_module /usr/lib/apache2/modules/mod_asis.so +LoadModule auth_basic_module /usr/lib/apache2/modules/mod_auth_basic.so +LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so +LoadModule auth_form_module /usr/lib/apache2/modules/mod_auth_form.so +LoadModule authn_anon_module /usr/lib/apache2/modules/mod_authn_anon.so +LoadModule authn_core_module /usr/lib/apache2/modules/mod_authn_core.so +LoadModule authn_dbd_module /usr/lib/apache2/modules/mod_authn_dbd.so +LoadModule authn_dbm_module /usr/lib/apache2/modules/mod_authn_dbm.so +LoadModule authn_file_module /usr/lib/apache2/modules/mod_authn_file.so +LoadModule authn_socache_module /usr/lib/apache2/modules/mod_authn_socache.so +LoadModule authnz_fcgi_module /usr/lib/apache2/modules/mod_authnz_fcgi.so +LoadModule authnz_ldap_module /usr/lib/apache2/modules/mod_authnz_ldap.so +LoadModule authz_core_module /usr/lib/apache2/modules/mod_authz_core.so +LoadModule authz_dbd_module /usr/lib/apache2/modules/mod_authz_dbd.so +LoadModule authz_dbm_module /usr/lib/apache2/modules/mod_authz_dbm.so +LoadModule authz_groupfile_module /usr/lib/apache2/modules/mod_authz_groupfile.so +LoadModule authz_host_module /usr/lib/apache2/modules/mod_authz_host.so +LoadModule authz_owner_module /usr/lib/apache2/modules/mod_authz_owner.so +LoadModule authz_user_module /usr/lib/apache2/modules/mod_authz_user.so +LoadModule autoindex_module /usr/lib/apache2/modules/mod_autoindex.so +LoadModule brotli_module /usr/lib/apache2/modules/mod_brotli.so +LoadModule buffer_module /usr/lib/apache2/modules/mod_buffer.so +LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so +LoadModule cache_disk_module /usr/lib/apache2/modules/mod_cache_disk.so +LoadModule cache_socache_module /usr/lib/apache2/modules/mod_cache_socache.so +LoadModule cern_meta_module /usr/lib/apache2/modules/mod_cern_meta.so +LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so +LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so +LoadModule charset_lite_module /usr/lib/apache2/modules/mod_charset_lite.so +LoadModule data_module /usr/lib/apache2/modules/mod_data.so +LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so +LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so +LoadModule dav_lock_module /usr/lib/apache2/modules/mod_dav_lock.so +LoadModule dbd_module /usr/lib/apache2/modules/mod_dbd.so +LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so +LoadModule dialup_module /usr/lib/apache2/modules/mod_dialup.so +LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so +LoadModule dumpio_module /usr/lib/apache2/modules/mod_dumpio.so +LoadModule echo_module /usr/lib/apache2/modules/mod_echo.so +LoadModule env_module /usr/lib/apache2/modules/mod_env.so +LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so +LoadModule ext_filter_module /usr/lib/apache2/modules/mod_ext_filter.so +LoadModule fcgid_module /usr/lib/apache2/modules/mod_fcgid.so +LoadModule file_cache_module /usr/lib/apache2/modules/mod_file_cache.so +LoadModule filter_module /usr/lib/apache2/modules/mod_filter.so +LoadModule geoip_module /usr/lib/apache2/modules/mod_geoip.so +LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so +LoadModule heartbeat_module /usr/lib/apache2/modules/mod_heartbeat.so +LoadModule heartmonitor_module /usr/lib/apache2/modules/mod_heartmonitor.so +LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so +LoadModule ident_module /usr/lib/apache2/modules/mod_ident.so +LoadModule imagemap_module /usr/lib/apache2/modules/mod_imagemap.so +LoadModule include_module /usr/lib/apache2/modules/mod_include.so +LoadModule info_module /usr/lib/apache2/modules/mod_info.so +LoadModule lbmethod_bybusyness_module /usr/lib/apache2/modules/mod_lbmethod_bybusyness.so +LoadModule lbmethod_byrequests_module /usr/lib/apache2/modules/mod_lbmethod_byrequests.so +LoadModule lbmethod_bytraffic_module /usr/lib/apache2/modules/mod_lbmethod_bytraffic.so +LoadModule lbmethod_heartbeat_module /usr/lib/apache2/modules/mod_lbmethod_heartbeat.so +LoadModule ldap_module /usr/lib/apache2/modules/mod_ldap.so +LoadModule log_debug_module /usr/lib/apache2/modules/mod_log_debug.so +LoadModule log_forensic_module /usr/lib/apache2/modules/mod_log_forensic.so +LoadModule lua_module /usr/lib/apache2/modules/mod_lua.so +LoadModule macro_module /usr/lib/apache2/modules/mod_macro.so +LoadModule md_module /usr/lib/apache2/modules/mod_md.so +LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so +LoadModule mime_magic_module /usr/lib/apache2/modules/mod_mime_magic.so +LoadModule negotiation_module /usr/lib/apache2/modules/mod_negotiation.so +LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so +LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so +LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so +LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so +LoadModule proxy_express_module /usr/lib/apache2/modules/mod_proxy_express.so +LoadModule proxy_fcgi_module /usr/lib/apache2/modules/mod_proxy_fcgi.so +LoadModule proxy_fdpass_module /usr/lib/apache2/modules/mod_proxy_fdpass.so +LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so +LoadModule proxy_hcheck_module /usr/lib/apache2/modules/mod_proxy_hcheck.so +LoadModule proxy_html_module /usr/lib/apache2/modules/mod_proxy_html.so +LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so +LoadModule proxy_http2_module /usr/lib/apache2/modules/mod_proxy_http2.so +LoadModule proxy_scgi_module /usr/lib/apache2/modules/mod_proxy_scgi.so +LoadModule proxy_uwsgi_module /usr/lib/apache2/modules/mod_proxy_uwsgi.so +LoadModule proxy_wstunnel_module /usr/lib/apache2/modules/mod_proxy_wstunnel.so +LoadModule ratelimit_module /usr/lib/apache2/modules/mod_ratelimit.so +LoadModule reflector_module /usr/lib/apache2/modules/mod_reflector.so +LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so +LoadModule reqtimeout_module /usr/lib/apache2/modules/mod_reqtimeout.so +LoadModule request_module /usr/lib/apache2/modules/mod_request.so +LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so +LoadModule sed_module /usr/lib/apache2/modules/mod_sed.so +LoadModule session_module /usr/lib/apache2/modules/mod_session.so +LoadModule session_cookie_module /usr/lib/apache2/modules/mod_session_cookie.so +LoadModule session_crypto_module /usr/lib/apache2/modules/mod_session_crypto.so +LoadModule session_dbd_module /usr/lib/apache2/modules/mod_session_dbd.so +LoadModule setenvif_module /usr/lib/apache2/modules/mod_setenvif.so +LoadModule slotmem_plain_module /usr/lib/apache2/modules/mod_slotmem_plain.so +LoadModule slotmem_shm_module /usr/lib/apache2/modules/mod_slotmem_shm.so +LoadModule socache_dbm_module /usr/lib/apache2/modules/mod_socache_dbm.so +LoadModule socache_memcache_module /usr/lib/apache2/modules/mod_socache_memcache.so +LoadModule socache_shmcb_module /usr/lib/apache2/modules/mod_socache_shmcb.so +LoadModule speling_module /usr/lib/apache2/modules/mod_speling.so +LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so +LoadModule status_module /usr/lib/apache2/modules/mod_status.so +LoadModule substitute_module /usr/lib/apache2/modules/mod_substitute.so +LoadModule suexec_module /usr/lib/apache2/modules/mod_suexec.so +LoadModule unique_id_module /usr/lib/apache2/modules/mod_unique_id.so +LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so +LoadModule usertrack_module /usr/lib/apache2/modules/mod_usertrack.so +LoadModule vhost_alias_module /usr/lib/apache2/modules/mod_vhost_alias.so +LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so +LoadModule xml2enc_module /usr/lib/apache2/modules/mod_xml2enc.so + + +User www-data +Group www-data + + +# 'Main' server configuration +ServerName SERVERNAME +ServerAdmin SERVERADMIN@SERVERNAME +ServerSignature On + + + AllowOverride none + Require all denied + + + + Options Indexes FollowSymLinks MultiViews ExecCGI Includes + AllowOverride All + Require all granted + + + + DirectoryIndex index.html index.html.var index.php index.cgi index.asp index.aspx index.pl index.aspx Default.aspx default.aspx index.shtml awstats.pl index.unknown.php index.default.php + + + + Require all denied + + +ErrorLog /var/log/apache2/error.log +LogLevel warn + + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%h %l %u %t \"%r\" %>s %b" common + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio + + CustomLog /var/log/apache2/access.log combined + + + + Alias /server-health /data/htdocs/www/server-health + Alias /server-health.json /data/htdocs/www/server-health.json + ScriptAlias /cgi-bin/ "/data/htdocs/cgi-bin/" + + + + AllowOverride None + Options ExecCGI + Require all granted + + + + #Scriptsock cgisock + + + + RequestHeader unset Proxy early + + + + TypesConfig /etc/apache2/mime.types + AddType application/x-gzip .tgz + AddEncoding x-compress .Z + AddEncoding x-gzip .gz .tgz + AddType application/x-compress .Z + AddType application/x-gzip .gz .tgz + AddHandler cgi-script .cgi + AddHandler type-map var + AddType text/html .shtml + AddOutputFilter INCLUDES .shtml + AddType application/x-ns-proxy-autoconfig .dat + + + + MIMEMagicFile /etc/apache2/magic + + + +DocumentRoot "/data/htdocs/www" + diff --git a/config/apache2/mime.types b/config/apache2/mime.types new file mode 100644 index 0000000..1a59fd6 --- /dev/null +++ b/config/apache2/mime.types @@ -0,0 +1,1855 @@ +# This file maps Internet media types to unique file extension(s). +# Although created for httpd, this file is used by many software systems +# and has been placed in the public domain for unlimited redisribution. +# +# The table below contains both registered and (common) unregistered types. +# A type that has no unique extension can be ignored -- they are listed +# here to guide configurations toward known types and to make it easier to +# identify "new" types. File extensions are also commonly used to indicate +# content languages and encodings, so choose them carefully. +# +# Internet media types should be registered as described in RFC 4288. +# The registry is at . +# +# MIME type (lowercased) Extensions +# ============================================ ========== +# application/1d-interleaved-parityfec +# application/3gpdash-qoe-report+xml +# application/3gpp-ims+xml +# application/a2l +# application/activemessage +# application/alto-costmap+json +# application/alto-costmapfilter+json +# application/alto-directory+json +# application/alto-endpointcost+json +# application/alto-endpointcostparams+json +# application/alto-endpointprop+json +# application/alto-endpointpropparams+json +# application/alto-error+json +# application/alto-networkmap+json +# application/alto-networkmapfilter+json +# application/aml +application/andrew-inset ez +# application/applefile +application/applixware aw +# application/atf +# application/atfx +application/atom+xml atom +application/atomcat+xml atomcat +# application/atomdeleted+xml +# application/atomicmail +application/atomsvc+xml atomsvc +# application/atxml +# application/auth-policy+xml +# application/bacnet-xdd+zip +# application/batch-smtp +# application/beep+xml +# application/calendar+json +# application/calendar+xml +# application/call-completion +# application/cals-1840 +# application/cbor +# application/ccmp+xml +application/ccxml+xml ccxml +# application/cdfx+xml +application/cdmi-capability cdmia +application/cdmi-container cdmic +application/cdmi-domain cdmid +application/cdmi-object cdmio +application/cdmi-queue cdmiq +# application/cdni +# application/cea +# application/cea-2018+xml +# application/cellml+xml +# application/cfw +# application/cms +# application/cnrp+xml +# application/coap-group+json +# application/commonground +# application/conference-info+xml +# application/cpl+xml +# application/csrattrs +# application/csta+xml +# application/cstadata+xml +# application/csvm+json +application/cu-seeme cu +# application/cybercash +# application/dash+xml +# application/dashdelta +application/davmount+xml davmount +# application/dca-rft +# application/dcd +# application/dec-dx +# application/dialog-info+xml +# application/dicom +# application/dii +# application/dit +# application/dns +application/docbook+xml dbk +# application/dskpp+xml +application/dssc+der dssc +application/dssc+xml xdssc +# application/dvcs +application/ecmascript ecma +# application/edi-consent +# application/edi-x12 +# application/edifact +# application/efi +# application/emergencycalldata.comment+xml +# application/emergencycalldata.deviceinfo+xml +# application/emergencycalldata.providerinfo+xml +# application/emergencycalldata.serviceinfo+xml +# application/emergencycalldata.subscriberinfo+xml +application/emma+xml emma +# application/emotionml+xml +# application/encaprtp +# application/epp+xml +application/epub+zip epub +# application/eshop +# application/example +application/exi exi +# application/fastinfoset +# application/fastsoap +# application/fdt+xml +# application/fits +application/font-tdpfr pfr +# application/framework-attributes+xml +# application/geo+json +application/gml+xml gml +application/gpx+xml gpx +application/gxf gxf +# application/gzip +# application/h224 +# application/held+xml +# application/http +application/hyperstudio stk +# application/ibe-key-request+xml +# application/ibe-pkg-reply+xml +# application/ibe-pp-data +# application/iges +# application/im-iscomposing+xml +# application/index +# application/index.cmd +# application/index.obj +# application/index.response +# application/index.vnd +application/inkml+xml ink inkml +# application/iotp +application/ipfix ipfix +# application/ipp +# application/isup +# application/its+xml +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/javascript js +# application/jose +# application/jose+json +# application/jrd+json +application/json json +# application/json-patch+json +# application/json-seq +application/jsonml+json jsonml +# application/jwk+json +# application/jwk-set+json +# application/jwt +# application/kpml-request+xml +# application/kpml-response+xml +# application/ld+json +# application/lgr+xml +# application/link-format +# application/load-control+xml +application/lost+xml lostxml +# application/lostsync+xml +# application/lxf +application/mac-binhex40 hqx +application/mac-compactpro cpt +# application/macwriteii +application/mads+xml mads +application/marc mrc +application/marcxml+xml mrcx +application/mathematica ma nb mb +application/mathml+xml mathml +# application/mathml-content+xml +# application/mathml-presentation+xml +# application/mbms-associated-procedure-description+xml +# application/mbms-deregister+xml +# application/mbms-envelope+xml +# application/mbms-msk+xml +# application/mbms-msk-response+xml +# application/mbms-protection-description+xml +# application/mbms-reception-report+xml +# application/mbms-register+xml +# application/mbms-register-response+xml +# application/mbms-schedule+xml +# application/mbms-user-service-description+xml +application/mbox mbox +# application/media-policy-dataset+xml +# application/media_control+xml +application/mediaservercontrol+xml mscml +# application/merge-patch+json +application/metalink+xml metalink +application/metalink4+xml meta4 +application/mets+xml mets +# application/mf4 +# application/mikey +application/mods+xml mods +# application/moss-keys +# application/moss-signature +# application/mosskey-data +# application/mosskey-request +application/mp21 m21 mp21 +application/mp4 mp4s +# application/mpeg4-generic +# application/mpeg4-iod +# application/mpeg4-iod-xmt +# application/mrb-consumer+xml +# application/mrb-publish+xml +# application/msc-ivr+xml +# application/msc-mixer+xml +application/msword doc dot +application/mxf mxf +# application/nasdata +# application/news-checkgroups +# application/news-groupinfo +# application/news-transmission +# application/nlsml+xml +# application/nss +# application/ocsp-request +# application/ocsp-response +application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy +application/oda oda +# application/odx +application/oebps-package+xml opf +application/ogg ogx +application/omdoc+xml omdoc +application/onenote onetoc onetoc2 onetmp onepkg +application/oxps oxps +# application/p2p-overlay+xml +# application/parityfec +application/patch-ops-error+xml xer +application/pdf pdf +# application/pdx +application/pgp-encrypted pgp +# application/pgp-keys +application/pgp-signature asc sig +application/pics-rules prf +# application/pidf+xml +# application/pidf-diff+xml +application/pkcs10 p10 +# application/pkcs12 +application/pkcs7-mime p7m p7c +application/pkcs7-signature p7s +application/pkcs8 p8 +application/pkix-attr-cert ac +application/pkix-cert cer +application/pkix-crl crl +application/pkix-pkipath pkipath +application/pkixcmp pki +application/pls+xml pls +# application/poc-settings+xml +application/postscript ai eps ps +# application/ppsp-tracker+json +# application/problem+json +# application/problem+xml +# application/provenance+xml +# application/prs.alvestrand.titrax-sheet +application/prs.cww cww +# application/prs.hpub+zip +# application/prs.nprend +# application/prs.plucker +# application/prs.rdf-xml-crypt +# application/prs.xsf+xml +application/pskc+xml pskcxml +# application/qsig +# application/raptorfec +# application/rdap+json +application/rdf+xml rdf +application/reginfo+xml rif +application/relax-ng-compact-syntax rnc +# application/remote-printing +# application/reputon+json +application/resource-lists+xml rl +application/resource-lists-diff+xml rld +# application/rfc+xml +# application/riscos +# application/rlmi+xml +application/rls-services+xml rs +application/rpki-ghostbusters gbr +application/rpki-manifest mft +application/rpki-roa roa +# application/rpki-updown +application/rsd+xml rsd +application/rss+xml rss +application/rtf rtf +# application/rtploopback +# application/rtx +# application/samlassertion+xml +# application/samlmetadata+xml +application/sbml+xml sbml +# application/scaip+xml +# application/scim+json +application/scvp-cv-request scq +application/scvp-cv-response scs +application/scvp-vp-request spq +application/scvp-vp-response spp +application/sdp sdp +# application/sep+xml +# application/sep-exi +# application/session-info +# application/set-payment +application/set-payment-initiation setpay +# application/set-registration +application/set-registration-initiation setreg +# application/sgml +# application/sgml-open-catalog +application/shf+xml shf +# application/sieve +# application/simple-filter+xml +# application/simple-message-summary +# application/simplesymbolcontainer +# application/slate +# application/smil +application/smil+xml smi smil +# application/smpte336m +# application/soap+fastinfoset +# application/soap+xml +application/sparql-query rq +application/sparql-results+xml srx +# application/spirits-event+xml +# application/sql +application/srgs gram +application/srgs+xml grxml +application/sru+xml sru +application/ssdl+xml ssdl +application/ssml+xml ssml +# application/tamp-apex-update +# application/tamp-apex-update-confirm +# application/tamp-community-update +# application/tamp-community-update-confirm +# application/tamp-error +# application/tamp-sequence-adjust +# application/tamp-sequence-adjust-confirm +# application/tamp-status-query +# application/tamp-status-response +# application/tamp-update +# application/tamp-update-confirm +application/tei+xml tei teicorpus +application/thraud+xml tfi +# application/timestamp-query +# application/timestamp-reply +application/timestamped-data tsd +# application/ttml+xml +# application/tve-trigger +# application/ulpfec +# application/urc-grpsheet+xml +# application/urc-ressheet+xml +# application/urc-targetdesc+xml +# application/urc-uisocketdesc+xml +# application/vcard+json +# application/vcard+xml +# application/vemmi +# application/vividence.scriptfile +# application/vnd.3gpp-prose+xml +# application/vnd.3gpp-prose-pc3ch+xml +# application/vnd.3gpp.access-transfer-events+xml +# application/vnd.3gpp.bsf+xml +# application/vnd.3gpp.mid-call+xml +application/vnd.3gpp.pic-bw-large plb +application/vnd.3gpp.pic-bw-small psb +application/vnd.3gpp.pic-bw-var pvb +# application/vnd.3gpp.sms +# application/vnd.3gpp.sms+xml +# application/vnd.3gpp.srvcc-ext+xml +# application/vnd.3gpp.srvcc-info+xml +# application/vnd.3gpp.state-and-event-info+xml +# application/vnd.3gpp.ussd+xml +# application/vnd.3gpp2.bcmcsinfo+xml +# application/vnd.3gpp2.sms +application/vnd.3gpp2.tcap tcap +# application/vnd.3lightssoftware.imagescal +application/vnd.3m.post-it-notes pwn +application/vnd.accpac.simply.aso aso +application/vnd.accpac.simply.imp imp +application/vnd.acucobol acu +application/vnd.acucorp atc acutc +application/vnd.adobe.air-application-installer-package+zip air +# application/vnd.adobe.flash.movie +application/vnd.adobe.formscentral.fcdt fcdt +application/vnd.adobe.fxp fxp fxpl +# application/vnd.adobe.partial-upload +application/vnd.adobe.xdp+xml xdp +application/vnd.adobe.xfdf xfdf +# application/vnd.aether.imp +# application/vnd.ah-barcode +application/vnd.ahead.space ahead +application/vnd.airzip.filesecure.azf azf +application/vnd.airzip.filesecure.azs azs +application/vnd.amazon.ebook azw +# application/vnd.amazon.mobi8-ebook +application/vnd.americandynamics.acc acc +application/vnd.amiga.ami ami +# application/vnd.amundsen.maze+xml +application/vnd.android.package-archive apk +# application/vnd.anki +application/vnd.anser-web-certificate-issue-initiation cii +application/vnd.anser-web-funds-transfer-initiation fti +application/vnd.antix.game-component atx +# application/vnd.apache.thrift.binary +# application/vnd.apache.thrift.compact +# application/vnd.apache.thrift.json +# application/vnd.api+json +application/vnd.apple.installer+xml mpkg +application/vnd.apple.mpegurl m3u8 +# application/vnd.arastra.swi +application/vnd.aristanetworks.swi swi +# application/vnd.artsquare +application/vnd.astraea-software.iota iota +application/vnd.audiograph aep +# application/vnd.autopackage +# application/vnd.avistar+xml +# application/vnd.balsamiq.bmml+xml +# application/vnd.balsamiq.bmpr +# application/vnd.bekitzur-stech+json +# application/vnd.biopax.rdf+xml +application/vnd.blueice.multipass mpm +# application/vnd.bluetooth.ep.oob +# application/vnd.bluetooth.le.oob +application/vnd.bmi bmi +application/vnd.businessobjects rep +# application/vnd.cab-jscript +# application/vnd.canon-cpdl +# application/vnd.canon-lips +# application/vnd.cendio.thinlinc.clientconf +# application/vnd.century-systems.tcp_stream +application/vnd.chemdraw+xml cdxml +# application/vnd.chess-pgn +application/vnd.chipnuts.karaoke-mmd mmd +application/vnd.cinderella cdy +# application/vnd.cirpack.isdn-ext +# application/vnd.citationstyles.style+xml +application/vnd.claymore cla +application/vnd.cloanto.rp9 rp9 +application/vnd.clonk.c4group c4g c4d c4f c4p c4u +application/vnd.cluetrust.cartomobile-config c11amc +application/vnd.cluetrust.cartomobile-config-pkg c11amz +# application/vnd.coffeescript +# application/vnd.collection+json +# application/vnd.collection.doc+json +# application/vnd.collection.next+json +# application/vnd.comicbook+zip +# application/vnd.commerce-battelle +application/vnd.commonspace csp +application/vnd.contact.cmsg cdbcmsg +# application/vnd.coreos.ignition+json +application/vnd.cosmocaller cmc +application/vnd.crick.clicker clkx +application/vnd.crick.clicker.keyboard clkk +application/vnd.crick.clicker.palette clkp +application/vnd.crick.clicker.template clkt +application/vnd.crick.clicker.wordbank clkw +application/vnd.criticaltools.wbs+xml wbs +application/vnd.ctc-posml pml +# application/vnd.ctct.ws+xml +# application/vnd.cups-pdf +# application/vnd.cups-postscript +application/vnd.cups-ppd ppd +# application/vnd.cups-raster +# application/vnd.cups-raw +# application/vnd.curl +application/vnd.curl.car car +application/vnd.curl.pcurl pcurl +# application/vnd.cyan.dean.root+xml +# application/vnd.cybank +application/vnd.dart dart +application/vnd.data-vision.rdz rdz +# application/vnd.debian.binary-package +application/vnd.dece.data uvf uvvf uvd uvvd +application/vnd.dece.ttml+xml uvt uvvt +application/vnd.dece.unspecified uvx uvvx +application/vnd.dece.zip uvz uvvz +application/vnd.denovo.fcselayout-link fe_launch +# application/vnd.desmume.movie +# application/vnd.dir-bi.plate-dl-nosuffix +# application/vnd.dm.delegation+xml +application/vnd.dna dna +# application/vnd.document+json +application/vnd.dolby.mlp mlp +# application/vnd.dolby.mobile.1 +# application/vnd.dolby.mobile.2 +# application/vnd.doremir.scorecloud-binary-document +application/vnd.dpgraph dpg +application/vnd.dreamfactory dfac +# application/vnd.drive+json +application/vnd.ds-keypoint kpxx +# application/vnd.dtg.local +# application/vnd.dtg.local.flash +# application/vnd.dtg.local.html +application/vnd.dvb.ait ait +# application/vnd.dvb.dvbj +# application/vnd.dvb.esgcontainer +# application/vnd.dvb.ipdcdftnotifaccess +# application/vnd.dvb.ipdcesgaccess +# application/vnd.dvb.ipdcesgaccess2 +# application/vnd.dvb.ipdcesgpdd +# application/vnd.dvb.ipdcroaming +# application/vnd.dvb.iptv.alfec-base +# application/vnd.dvb.iptv.alfec-enhancement +# application/vnd.dvb.notif-aggregate-root+xml +# application/vnd.dvb.notif-container+xml +# application/vnd.dvb.notif-generic+xml +# application/vnd.dvb.notif-ia-msglist+xml +# application/vnd.dvb.notif-ia-registration-request+xml +# application/vnd.dvb.notif-ia-registration-response+xml +# application/vnd.dvb.notif-init+xml +# application/vnd.dvb.pfr +application/vnd.dvb.service svc +# application/vnd.dxr +application/vnd.dynageo geo +# application/vnd.dzr +# application/vnd.easykaraoke.cdgdownload +# application/vnd.ecdis-update +application/vnd.ecowin.chart mag +# application/vnd.ecowin.filerequest +# application/vnd.ecowin.fileupdate +# application/vnd.ecowin.series +# application/vnd.ecowin.seriesrequest +# application/vnd.ecowin.seriesupdate +# application/vnd.emclient.accessrequest+xml +application/vnd.enliven nml +# application/vnd.enphase.envoy +# application/vnd.eprints.data+xml +application/vnd.epson.esf esf +application/vnd.epson.msf msf +application/vnd.epson.quickanime qam +application/vnd.epson.salt slt +application/vnd.epson.ssf ssf +# application/vnd.ericsson.quickcall +application/vnd.eszigno3+xml es3 et3 +# application/vnd.etsi.aoc+xml +# application/vnd.etsi.asic-e+zip +# application/vnd.etsi.asic-s+zip +# application/vnd.etsi.cug+xml +# application/vnd.etsi.iptvcommand+xml +# application/vnd.etsi.iptvdiscovery+xml +# application/vnd.etsi.iptvprofile+xml +# application/vnd.etsi.iptvsad-bc+xml +# application/vnd.etsi.iptvsad-cod+xml +# application/vnd.etsi.iptvsad-npvr+xml +# application/vnd.etsi.iptvservice+xml +# application/vnd.etsi.iptvsync+xml +# application/vnd.etsi.iptvueprofile+xml +# application/vnd.etsi.mcid+xml +# application/vnd.etsi.mheg5 +# application/vnd.etsi.overload-control-policy-dataset+xml +# application/vnd.etsi.pstn+xml +# application/vnd.etsi.sci+xml +# application/vnd.etsi.simservs+xml +# application/vnd.etsi.timestamp-token +# application/vnd.etsi.tsl+xml +# application/vnd.etsi.tsl.der +# application/vnd.eudora.data +application/vnd.ezpix-album ez2 +application/vnd.ezpix-package ez3 +# application/vnd.f-secure.mobile +# application/vnd.fastcopy-disk-image +application/vnd.fdf fdf +application/vnd.fdsn.mseed mseed +application/vnd.fdsn.seed seed dataless +# application/vnd.ffsns +# application/vnd.filmit.zfc +# application/vnd.fints +# application/vnd.firemonkeys.cloudcell +application/vnd.flographit gph +application/vnd.fluxtime.clip ftc +# application/vnd.font-fontforge-sfd +application/vnd.framemaker fm frame maker book +application/vnd.frogans.fnc fnc +application/vnd.frogans.ltf ltf +application/vnd.fsc.weblaunch fsc +application/vnd.fujitsu.oasys oas +application/vnd.fujitsu.oasys2 oa2 +application/vnd.fujitsu.oasys3 oa3 +application/vnd.fujitsu.oasysgp fg5 +application/vnd.fujitsu.oasysprs bh2 +# application/vnd.fujixerox.art-ex +# application/vnd.fujixerox.art4 +application/vnd.fujixerox.ddd ddd +application/vnd.fujixerox.docuworks xdw +application/vnd.fujixerox.docuworks.binder xbd +# application/vnd.fujixerox.docuworks.container +# application/vnd.fujixerox.hbpl +# application/vnd.fut-misnet +application/vnd.fuzzysheet fzs +application/vnd.genomatix.tuxedo txd +# application/vnd.geo+json +# application/vnd.geocube+xml +application/vnd.geogebra.file ggb +application/vnd.geogebra.tool ggt +application/vnd.geometry-explorer gex gre +application/vnd.geonext gxt +application/vnd.geoplan g2w +application/vnd.geospace g3w +# application/vnd.gerber +# application/vnd.globalplatform.card-content-mgt +# application/vnd.globalplatform.card-content-mgt-response +application/vnd.gmx gmx +application/vnd.google-earth.kml+xml kml +application/vnd.google-earth.kmz kmz +# application/vnd.gov.sk.e-form+xml +# application/vnd.gov.sk.e-form+zip +# application/vnd.gov.sk.xmldatacontainer+xml +application/vnd.grafeq gqf gqs +# application/vnd.gridmp +application/vnd.groove-account gac +application/vnd.groove-help ghf +application/vnd.groove-identity-message gim +application/vnd.groove-injector grv +application/vnd.groove-tool-message gtm +application/vnd.groove-tool-template tpl +application/vnd.groove-vcard vcg +# application/vnd.hal+json +application/vnd.hal+xml hal +application/vnd.handheld-entertainment+xml zmm +application/vnd.hbci hbci +# application/vnd.hcl-bireports +# application/vnd.hdt +# application/vnd.heroku+json +application/vnd.hhe.lesson-player les +application/vnd.hp-hpgl hpgl +application/vnd.hp-hpid hpid +application/vnd.hp-hps hps +application/vnd.hp-jlyt jlt +application/vnd.hp-pcl pcl +application/vnd.hp-pclxl pclxl +# application/vnd.httphone +application/vnd.hydrostatix.sof-data sfd-hdstx +# application/vnd.hyperdrive+json +# application/vnd.hzn-3d-crossword +# application/vnd.ibm.afplinedata +# application/vnd.ibm.electronic-media +application/vnd.ibm.minipay mpy +application/vnd.ibm.modcap afp listafp list3820 +application/vnd.ibm.rights-management irm +application/vnd.ibm.secure-container sc +application/vnd.iccprofile icc icm +# application/vnd.ieee.1905 +application/vnd.igloader igl +application/vnd.immervision-ivp ivp +application/vnd.immervision-ivu ivu +# application/vnd.ims.imsccv1p1 +# application/vnd.ims.imsccv1p2 +# application/vnd.ims.imsccv1p3 +# application/vnd.ims.lis.v2.result+json +# application/vnd.ims.lti.v2.toolconsumerprofile+json +# application/vnd.ims.lti.v2.toolproxy+json +# application/vnd.ims.lti.v2.toolproxy.id+json +# application/vnd.ims.lti.v2.toolsettings+json +# application/vnd.ims.lti.v2.toolsettings.simple+json +# application/vnd.informedcontrol.rms+xml +# application/vnd.informix-visionary +# application/vnd.infotech.project +# application/vnd.infotech.project+xml +# application/vnd.innopath.wamp.notification +application/vnd.insors.igm igm +application/vnd.intercon.formnet xpw xpx +application/vnd.intergeo i2g +# application/vnd.intertrust.digibox +# application/vnd.intertrust.nncp +application/vnd.intu.qbo qbo +application/vnd.intu.qfx qfx +# application/vnd.iptc.g2.catalogitem+xml +# application/vnd.iptc.g2.conceptitem+xml +# application/vnd.iptc.g2.knowledgeitem+xml +# application/vnd.iptc.g2.newsitem+xml +# application/vnd.iptc.g2.newsmessage+xml +# application/vnd.iptc.g2.packageitem+xml +# application/vnd.iptc.g2.planningitem+xml +application/vnd.ipunplugged.rcprofile rcprofile +application/vnd.irepository.package+xml irp +application/vnd.is-xpr xpr +application/vnd.isac.fcs fcs +application/vnd.jam jam +# application/vnd.japannet-directory-service +# application/vnd.japannet-jpnstore-wakeup +# application/vnd.japannet-payment-wakeup +# application/vnd.japannet-registration +# application/vnd.japannet-registration-wakeup +# application/vnd.japannet-setstore-wakeup +# application/vnd.japannet-verification +# application/vnd.japannet-verification-wakeup +application/vnd.jcp.javame.midlet-rms rms +application/vnd.jisp jisp +application/vnd.joost.joda-archive joda +# application/vnd.jsk.isdn-ngn +application/vnd.kahootz ktz ktr +application/vnd.kde.karbon karbon +application/vnd.kde.kchart chrt +application/vnd.kde.kformula kfo +application/vnd.kde.kivio flw +application/vnd.kde.kontour kon +application/vnd.kde.kpresenter kpr kpt +application/vnd.kde.kspread ksp +application/vnd.kde.kword kwd kwt +application/vnd.kenameaapp htke +application/vnd.kidspiration kia +application/vnd.kinar kne knp +application/vnd.koan skp skd skt skm +application/vnd.kodak-descriptor sse +application/vnd.las.las+xml lasxml +# application/vnd.liberty-request+xml +application/vnd.llamagraphics.life-balance.desktop lbd +application/vnd.llamagraphics.life-balance.exchange+xml lbe +application/vnd.lotus-1-2-3 123 +application/vnd.lotus-approach apr +application/vnd.lotus-freelance pre +application/vnd.lotus-notes nsf +application/vnd.lotus-organizer org +application/vnd.lotus-screencam scm +application/vnd.lotus-wordpro lwp +application/vnd.macports.portpkg portpkg +# application/vnd.mapbox-vector-tile +# application/vnd.marlin.drm.actiontoken+xml +# application/vnd.marlin.drm.conftoken+xml +# application/vnd.marlin.drm.license+xml +# application/vnd.marlin.drm.mdcf +# application/vnd.mason+json +# application/vnd.maxmind.maxmind-db +application/vnd.mcd mcd +application/vnd.medcalcdata mc1 +application/vnd.mediastation.cdkey cdkey +# application/vnd.meridian-slingshot +application/vnd.mfer mwf +application/vnd.mfmp mfm +# application/vnd.micro+json +application/vnd.micrografx.flo flo +application/vnd.micrografx.igx igx +# application/vnd.microsoft.portable-executable +# application/vnd.miele+json +application/vnd.mif mif +# application/vnd.minisoft-hp3000-save +# application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf daf +application/vnd.mobius.dis dis +application/vnd.mobius.mbk mbk +application/vnd.mobius.mqy mqy +application/vnd.mobius.msl msl +application/vnd.mobius.plc plc +application/vnd.mobius.txf txf +application/vnd.mophun.application mpn +application/vnd.mophun.certificate mpc +# application/vnd.motorola.flexsuite +# application/vnd.motorola.flexsuite.adsi +# application/vnd.motorola.flexsuite.fis +# application/vnd.motorola.flexsuite.gotap +# application/vnd.motorola.flexsuite.kmr +# application/vnd.motorola.flexsuite.ttc +# application/vnd.motorola.flexsuite.wem +# application/vnd.motorola.iprm +application/vnd.mozilla.xul+xml xul +# application/vnd.ms-3mfdocument +application/vnd.ms-artgalry cil +# application/vnd.ms-asf +application/vnd.ms-cab-compressed cab +# application/vnd.ms-color.iccprofile +application/vnd.ms-excel xls xlm xla xlc xlt xlw +application/vnd.ms-excel.addin.macroenabled.12 xlam +application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb +application/vnd.ms-excel.sheet.macroenabled.12 xlsm +application/vnd.ms-excel.template.macroenabled.12 xltm +application/vnd.ms-fontobject eot +application/vnd.ms-htmlhelp chm +application/vnd.ms-ims ims +application/vnd.ms-lrm lrm +# application/vnd.ms-office.activex+xml +application/vnd.ms-officetheme thmx +# application/vnd.ms-opentype +# application/vnd.ms-package.obfuscated-opentype +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +# application/vnd.ms-playready.initiator+xml +application/vnd.ms-powerpoint ppt pps pot +application/vnd.ms-powerpoint.addin.macroenabled.12 ppam +application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm +application/vnd.ms-powerpoint.slide.macroenabled.12 sldm +application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm +application/vnd.ms-powerpoint.template.macroenabled.12 potm +# application/vnd.ms-printdevicecapabilities+xml +# application/vnd.ms-printing.printticket+xml +# application/vnd.ms-printschematicket+xml +application/vnd.ms-project mpp mpt +# application/vnd.ms-tnef +# application/vnd.ms-windows.devicepairing +# application/vnd.ms-windows.nwprinting.oob +# application/vnd.ms-windows.printerpairing +# application/vnd.ms-windows.wsd.oob +# application/vnd.ms-wmdrm.lic-chlg-req +# application/vnd.ms-wmdrm.lic-resp +# application/vnd.ms-wmdrm.meter-chlg-req +# application/vnd.ms-wmdrm.meter-resp +application/vnd.ms-word.document.macroenabled.12 docm +application/vnd.ms-word.template.macroenabled.12 dotm +application/vnd.ms-works wps wks wcm wdb +application/vnd.ms-wpl wpl +application/vnd.ms-xpsdocument xps +# application/vnd.msa-disk-image +application/vnd.mseq mseq +# application/vnd.msign +# application/vnd.multiad.creator +# application/vnd.multiad.creator.cif +# application/vnd.music-niff +application/vnd.musician mus +application/vnd.muvee.style msty +application/vnd.mynfc taglet +# application/vnd.ncd.control +# application/vnd.ncd.reference +# application/vnd.nervana +# application/vnd.netfpx +application/vnd.neurolanguage.nlu nlu +# application/vnd.nintendo.nitro.rom +# application/vnd.nintendo.snes.rom +application/vnd.nitf ntf nitf +application/vnd.noblenet-directory nnd +application/vnd.noblenet-sealer nns +application/vnd.noblenet-web nnw +# application/vnd.nokia.catalogs +# application/vnd.nokia.conml+wbxml +# application/vnd.nokia.conml+xml +# application/vnd.nokia.iptv.config+xml +# application/vnd.nokia.isds-radio-presets +# application/vnd.nokia.landmark+wbxml +# application/vnd.nokia.landmark+xml +# application/vnd.nokia.landmarkcollection+xml +# application/vnd.nokia.n-gage.ac+xml +application/vnd.nokia.n-gage.data ngdat +application/vnd.nokia.n-gage.symbian.install n-gage +# application/vnd.nokia.ncd +# application/vnd.nokia.pcd+wbxml +# application/vnd.nokia.pcd+xml +application/vnd.nokia.radio-preset rpst +application/vnd.nokia.radio-presets rpss +application/vnd.novadigm.edm edm +application/vnd.novadigm.edx edx +application/vnd.novadigm.ext ext +# application/vnd.ntt-local.content-share +# application/vnd.ntt-local.file-transfer +# application/vnd.ntt-local.ogw_remote-access +# application/vnd.ntt-local.sip-ta_remote +# application/vnd.ntt-local.sip-ta_tcp_stream +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.chart-template otc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.formula-template odft +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.image-template oti +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +# application/vnd.obn +# application/vnd.oftn.l10n+json +# application/vnd.oipf.contentaccessdownload+xml +# application/vnd.oipf.contentaccessstreaming+xml +# application/vnd.oipf.cspg-hexbinary +# application/vnd.oipf.dae.svg+xml +# application/vnd.oipf.dae.xhtml+xml +# application/vnd.oipf.mippvcontrolmessage+xml +# application/vnd.oipf.pae.gem +# application/vnd.oipf.spdiscovery+xml +# application/vnd.oipf.spdlist+xml +# application/vnd.oipf.ueprofile+xml +# application/vnd.oipf.userprofile+xml +application/vnd.olpc-sugar xo +# application/vnd.oma-scws-config +# application/vnd.oma-scws-http-request +# application/vnd.oma-scws-http-response +# application/vnd.oma.bcast.associated-procedure-parameter+xml +# application/vnd.oma.bcast.drm-trigger+xml +# application/vnd.oma.bcast.imd+xml +# application/vnd.oma.bcast.ltkm +# application/vnd.oma.bcast.notification+xml +# application/vnd.oma.bcast.provisioningtrigger +# application/vnd.oma.bcast.sgboot +# application/vnd.oma.bcast.sgdd+xml +# application/vnd.oma.bcast.sgdu +# application/vnd.oma.bcast.simple-symbol-container +# application/vnd.oma.bcast.smartcard-trigger+xml +# application/vnd.oma.bcast.sprov+xml +# application/vnd.oma.bcast.stkm +# application/vnd.oma.cab-address-book+xml +# application/vnd.oma.cab-feature-handler+xml +# application/vnd.oma.cab-pcc+xml +# application/vnd.oma.cab-subs-invite+xml +# application/vnd.oma.cab-user-prefs+xml +# application/vnd.oma.dcd +# application/vnd.oma.dcdc +application/vnd.oma.dd2+xml dd2 +# application/vnd.oma.drm.risd+xml +# application/vnd.oma.group-usage-list+xml +# application/vnd.oma.lwm2m+json +# application/vnd.oma.lwm2m+tlv +# application/vnd.oma.pal+xml +# application/vnd.oma.poc.detailed-progress-report+xml +# application/vnd.oma.poc.final-report+xml +# application/vnd.oma.poc.groups+xml +# application/vnd.oma.poc.invocation-descriptor+xml +# application/vnd.oma.poc.optimized-progress-report+xml +# application/vnd.oma.push +# application/vnd.oma.scidm.messages+xml +# application/vnd.oma.xcap-directory+xml +# application/vnd.omads-email+xml +# application/vnd.omads-file+xml +# application/vnd.omads-folder+xml +# application/vnd.omaloc-supl-init +# application/vnd.onepager +# application/vnd.openblox.game+xml +# application/vnd.openblox.game-binary +# application/vnd.openeye.oeb +application/vnd.openofficeorg.extension oxt +# application/vnd.openxmlformats-officedocument.custom-properties+xml +# application/vnd.openxmlformats-officedocument.customxmlproperties+xml +# application/vnd.openxmlformats-officedocument.drawing+xml +# application/vnd.openxmlformats-officedocument.drawingml.chart+xml +# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml +# application/vnd.openxmlformats-officedocument.extended-properties+xml +# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml +# application/vnd.openxmlformats-officedocument.presentationml.comments+xml +# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml +application/vnd.openxmlformats-officedocument.presentationml.slide sldx +# application/vnd.openxmlformats-officedocument.presentationml.slide+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml +application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx +# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml +# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml +# application/vnd.openxmlformats-officedocument.presentationml.tags+xml +application/vnd.openxmlformats-officedocument.presentationml.template potx +# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +# application/vnd.openxmlformats-officedocument.theme+xml +# application/vnd.openxmlformats-officedocument.themeoverride+xml +# application/vnd.openxmlformats-officedocument.vmldrawing +# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml +# application/vnd.openxmlformats-package.core-properties+xml +# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +# application/vnd.openxmlformats-package.relationships+xml +# application/vnd.oracle.resource+json +# application/vnd.orange.indata +# application/vnd.osa.netdeploy +application/vnd.osgeo.mapguide.package mgp +# application/vnd.osgi.bundle +application/vnd.osgi.dp dp +application/vnd.osgi.subsystem esa +# application/vnd.otps.ct-kip+xml +# application/vnd.oxli.countgraph +# application/vnd.pagerduty+json +application/vnd.palm pdb pqa oprc +# application/vnd.panoply +# application/vnd.paos.xml +application/vnd.pawaafile paw +# application/vnd.pcos +application/vnd.pg.format str +application/vnd.pg.osasli ei6 +# application/vnd.piaccess.application-licence +application/vnd.picsel efif +application/vnd.pmi.widget wg +# application/vnd.poc.group-advertisement+xml +application/vnd.pocketlearn plf +application/vnd.powerbuilder6 pbd +# application/vnd.powerbuilder6-s +# application/vnd.powerbuilder7 +# application/vnd.powerbuilder7-s +# application/vnd.powerbuilder75 +# application/vnd.powerbuilder75-s +# application/vnd.preminet +application/vnd.previewsystems.box box +application/vnd.proteus.magazine mgz +application/vnd.publishare-delta-tree qps +application/vnd.pvi.ptid1 ptid +# application/vnd.pwg-multiplexed +# application/vnd.pwg-xhtml-print+xml +# application/vnd.qualcomm.brew-app-res +# application/vnd.quarantainenet +application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb +# application/vnd.quobject-quoxdocument +# application/vnd.radisys.moml+xml +# application/vnd.radisys.msml+xml +# application/vnd.radisys.msml-audit+xml +# application/vnd.radisys.msml-audit-conf+xml +# application/vnd.radisys.msml-audit-conn+xml +# application/vnd.radisys.msml-audit-dialog+xml +# application/vnd.radisys.msml-audit-stream+xml +# application/vnd.radisys.msml-conf+xml +# application/vnd.radisys.msml-dialog+xml +# application/vnd.radisys.msml-dialog-base+xml +# application/vnd.radisys.msml-dialog-fax-detect+xml +# application/vnd.radisys.msml-dialog-fax-sendrecv+xml +# application/vnd.radisys.msml-dialog-group+xml +# application/vnd.radisys.msml-dialog-speech+xml +# application/vnd.radisys.msml-dialog-transform+xml +# application/vnd.rainstor.data +# application/vnd.rapid +# application/vnd.rar +application/vnd.realvnc.bed bed +application/vnd.recordare.musicxml mxl +application/vnd.recordare.musicxml+xml musicxml +# application/vnd.renlearn.rlprint +application/vnd.rig.cryptonote cryptonote +application/vnd.rim.cod cod +application/vnd.rn-realmedia rm +application/vnd.rn-realmedia-vbr rmvb +application/vnd.route66.link66+xml link66 +# application/vnd.rs-274x +# application/vnd.ruckus.download +# application/vnd.s3sms +application/vnd.sailingtracker.track st +# application/vnd.sbm.cid +# application/vnd.sbm.mid2 +# application/vnd.scribus +# application/vnd.sealed.3df +# application/vnd.sealed.csf +# application/vnd.sealed.doc +# application/vnd.sealed.eml +# application/vnd.sealed.mht +# application/vnd.sealed.net +# application/vnd.sealed.ppt +# application/vnd.sealed.tiff +# application/vnd.sealed.xls +# application/vnd.sealedmedia.softseal.html +# application/vnd.sealedmedia.softseal.pdf +application/vnd.seemail see +application/vnd.sema sema +application/vnd.semd semd +application/vnd.semf semf +application/vnd.shana.informed.formdata ifm +application/vnd.shana.informed.formtemplate itp +application/vnd.shana.informed.interchange iif +application/vnd.shana.informed.package ipk +application/vnd.simtech-mindmapper twd twds +# application/vnd.siren+json +application/vnd.smaf mmf +# application/vnd.smart.notebook +application/vnd.smart.teacher teacher +# application/vnd.software602.filler.form+xml +# application/vnd.software602.filler.form-xml-zip +application/vnd.solent.sdkm+xml sdkm sdkd +application/vnd.spotfire.dxp dxp +application/vnd.spotfire.sfs sfs +# application/vnd.sss-cod +# application/vnd.sss-dtf +# application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.stepmania.package smzip +application/vnd.stepmania.stepchart sm +# application/vnd.street-stream +# application/vnd.sun.wadl+xml +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +application/vnd.sus-calendar sus susp +application/vnd.svd svd +# application/vnd.swiftview-ics +application/vnd.symbian.install sis sisx +application/vnd.syncml+xml xsm +application/vnd.syncml.dm+wbxml bdm +application/vnd.syncml.dm+xml xdm +# application/vnd.syncml.dm.notification +# application/vnd.syncml.dmddf+wbxml +# application/vnd.syncml.dmddf+xml +# application/vnd.syncml.dmtnds+wbxml +# application/vnd.syncml.dmtnds+xml +# application/vnd.syncml.ds.notification +application/vnd.tao.intent-module-archive tao +application/vnd.tcpdump.pcap pcap cap dmp +# application/vnd.tmd.mediaflex.api+xml +# application/vnd.tml +application/vnd.tmobile-livetv tmo +application/vnd.trid.tpt tpt +application/vnd.triscape.mxs mxs +application/vnd.trueapp tra +# application/vnd.truedoc +# application/vnd.ubisoft.webplayer +application/vnd.ufdl ufd ufdl +application/vnd.uiq.theme utz +application/vnd.umajin umj +application/vnd.unity unityweb +application/vnd.uoml+xml uoml +# application/vnd.uplanet.alert +# application/vnd.uplanet.alert-wbxml +# application/vnd.uplanet.bearer-choice +# application/vnd.uplanet.bearer-choice-wbxml +# application/vnd.uplanet.cacheop +# application/vnd.uplanet.cacheop-wbxml +# application/vnd.uplanet.channel +# application/vnd.uplanet.channel-wbxml +# application/vnd.uplanet.list +# application/vnd.uplanet.list-wbxml +# application/vnd.uplanet.listcmd +# application/vnd.uplanet.listcmd-wbxml +# application/vnd.uplanet.signal +# application/vnd.uri-map +# application/vnd.valve.source.material +application/vnd.vcx vcx +# application/vnd.vd-study +# application/vnd.vectorworks +# application/vnd.vel+json +# application/vnd.verimatrix.vcas +# application/vnd.vidsoft.vidconference +application/vnd.visio vsd vst vss vsw +application/vnd.visionary vis +# application/vnd.vividence.scriptfile +application/vnd.vsf vsf +# application/vnd.wap.sic +# application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo wtb +# application/vnd.wfa.p2p +# application/vnd.wfa.wsc +# application/vnd.windows.devicepairing +# application/vnd.wmc +# application/vnd.wmf.bootstrap +# application/vnd.wolfram.mathematica +# application/vnd.wolfram.mathematica.package +application/vnd.wolfram.player nbp +application/vnd.wordperfect wpd +application/vnd.wqd wqd +# application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf stf +# application/vnd.wv.csp+wbxml +# application/vnd.wv.csp+xml +# application/vnd.wv.ssp+xml +# application/vnd.xacml+json +application/vnd.xara xar +application/vnd.xfdl xfdl +# application/vnd.xfdl.webform +# application/vnd.xmi+xml +# application/vnd.xmpie.cpkg +# application/vnd.xmpie.dpkg +# application/vnd.xmpie.plan +# application/vnd.xmpie.ppkg +# application/vnd.xmpie.xlim +application/vnd.yamaha.hv-dic hvd +application/vnd.yamaha.hv-script hvs +application/vnd.yamaha.hv-voice hvp +application/vnd.yamaha.openscoreformat osf +application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg +# application/vnd.yamaha.remote-setup +application/vnd.yamaha.smaf-audio saf +application/vnd.yamaha.smaf-phrase spf +# application/vnd.yamaha.through-ngn +# application/vnd.yamaha.tunnel-udpencap +# application/vnd.yaoweme +application/vnd.yellowriver-custom-menu cmp +application/vnd.zul zir zirz +application/vnd.zzazz.deck+xml zaz +application/voicexml+xml vxml +# application/vq-rtcpxr +# application/watcherinfo+xml +# application/whoispp-query +# application/whoispp-response +application/widget wgt +application/winhlp hlp +# application/wita +# application/wordperfect5.1 +application/wsdl+xml wsdl +application/wspolicy+xml wspolicy +application/x-7z-compressed 7z +application/x-abiword abw +application/x-ace-compressed ace +# application/x-amf +application/x-apple-diskimage dmg +application/x-authorware-bin aab x32 u32 vox +application/x-authorware-map aam +application/x-authorware-seg aas +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-blorb blb blorb +application/x-bzip bz +application/x-bzip2 bz2 boz +application/x-cbr cbr cba cbt cbz cb7 +application/x-cdlink vcd +application/x-cfs-compressed cfs +application/x-chat chat +application/x-chess-pgn pgn +# application/x-compress +application/x-conference nsc +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-dgc-compressed dgc +application/x-director dir dcr dxr cst cct cxt w3d fgd swa +application/x-doom wad +application/x-dtbncx+xml ncx +application/x-dtbook+xml dtb +application/x-dtbresource+xml res +application/x-dvi dvi +application/x-envoy evy +application/x-eva eva +application/x-font-bdf bdf +# application/x-font-dos +# application/x-font-framemaker +application/x-font-ghostscript gsf +# application/x-font-libgrx +application/x-font-linux-psf psf +application/x-font-pcf pcf +application/x-font-snf snf +# application/x-font-speedo +# application/x-font-sunos-news +application/x-font-type1 pfa pfb pfm afm +# application/x-font-vfont +application/x-freearc arc +application/x-futuresplash spl +application/x-gca-compressed gca +application/x-glulx ulx +application/x-gnumeric gnumeric +application/x-gramps-xml gramps +application/x-gtar gtar +# application/x-gzip +application/x-hdf hdf +application/x-install-instructions install +application/x-iso9660-image iso +application/x-java-jnlp-file jnlp +application/x-latex latex +application/x-lzh-compressed lzh lha +application/x-mie mie +application/x-mobipocket-ebook prc mobi +application/x-ms-application application +application/x-ms-shortcut lnk +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-ms-xbap xbap +application/x-msaccess mdb +application/x-msbinder obd +application/x-mscardfile crd +application/x-msclip clp +application/x-msdownload exe dll com bat msi +application/x-msmediaview mvb m13 m14 +application/x-msmetafile wmf wmz emf emz +application/x-msmoney mny +application/x-mspublisher pub +application/x-msschedule scd +application/x-msterminal trm +application/x-mswrite wri +application/x-netcdf nc cdf +application/x-nzb nzb +application/x-pkcs12 p12 pfx +application/x-pkcs7-certificates p7b spc +application/x-pkcs7-certreqresp p7r +application/x-rar-compressed rar +application/x-research-info-systems ris +application/x-sh sh +application/x-shar shar +application/x-shockwave-flash swf +application/x-silverlight-app xap +application/x-sql sql +application/x-stuffit sit +application/x-stuffitx sitx +application/x-subrip srt +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-t3vm-image t3 +application/x-tads gam +application/x-tar tar +application/x-tcl tcl +application/x-tex tex +application/x-tex-tfm tfm +application/x-texinfo texinfo texi +application/x-tgif obj +application/x-ustar ustar +application/x-wais-source src +# application/x-www-form-urlencoded +application/x-x509-ca-cert der crt +application/x-xfig fig +application/x-xliff+xml xlf +application/x-xpinstall xpi +application/x-xz xz +application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 +# application/x400-bp +# application/xacml+xml +application/xaml+xml xaml +# application/xcap-att+xml +# application/xcap-caps+xml +application/xcap-diff+xml xdf +# application/xcap-el+xml +# application/xcap-error+xml +# application/xcap-ns+xml +# application/xcon-conference-info+xml +# application/xcon-conference-info-diff+xml +application/xenc+xml xenc +application/xhtml+xml xhtml xht +# application/xhtml-voice+xml +application/xml xml xsl +application/xml-dtd dtd +# application/xml-external-parsed-entity +# application/xml-patch+xml +# application/xmpp+xml +application/xop+xml xop +application/xproc+xml xpl +application/xslt+xml xslt +application/xspf+xml xspf +application/xv+xml mxml xhvml xvml xvm +application/yang yang +application/yin+xml yin +application/zip zip +# application/zlib +# audio/1d-interleaved-parityfec +# audio/32kadpcm +# audio/3gpp +# audio/3gpp2 +# audio/ac3 +audio/adpcm adp +# audio/amr +# audio/amr-wb +# audio/amr-wb+ +# audio/aptx +# audio/asc +# audio/atrac-advanced-lossless +# audio/atrac-x +# audio/atrac3 +audio/basic au snd +# audio/bv16 +# audio/bv32 +# audio/clearmode +# audio/cn +# audio/dat12 +# audio/dls +# audio/dsr-es201108 +# audio/dsr-es202050 +# audio/dsr-es202211 +# audio/dsr-es202212 +# audio/dv +# audio/dvi4 +# audio/eac3 +# audio/encaprtp +# audio/evrc +# audio/evrc-qcp +# audio/evrc0 +# audio/evrc1 +# audio/evrcb +# audio/evrcb0 +# audio/evrcb1 +# audio/evrcnw +# audio/evrcnw0 +# audio/evrcnw1 +# audio/evrcwb +# audio/evrcwb0 +# audio/evrcwb1 +# audio/evs +# audio/example +# audio/fwdred +# audio/g711-0 +# audio/g719 +# audio/g722 +# audio/g7221 +# audio/g723 +# audio/g726-16 +# audio/g726-24 +# audio/g726-32 +# audio/g726-40 +# audio/g728 +# audio/g729 +# audio/g7291 +# audio/g729d +# audio/g729e +# audio/gsm +# audio/gsm-efr +# audio/gsm-hr-08 +# audio/ilbc +# audio/ip-mr_v2.5 +# audio/isac +# audio/l16 +# audio/l20 +# audio/l24 +# audio/l8 +# audio/lpc +audio/midi mid midi kar rmi +# audio/mobile-xmf +audio/mp4 m4a mp4a +# audio/mp4a-latm +# audio/mpa +# audio/mpa-robust +audio/mpeg mpga mp2 mp2a mp3 m2a m3a +# audio/mpeg4-generic +# audio/musepack +audio/ogg oga ogg spx opus +# audio/opus +# audio/parityfec +# audio/pcma +# audio/pcma-wb +# audio/pcmu +# audio/pcmu-wb +# audio/prs.sid +# audio/qcelp +# audio/raptorfec +# audio/red +# audio/rtp-enc-aescm128 +# audio/rtp-midi +# audio/rtploopback +# audio/rtx +audio/s3m s3m +audio/silk sil +# audio/smv +# audio/smv-qcp +# audio/smv0 +# audio/sp-midi +# audio/speex +# audio/t140c +# audio/t38 +# audio/telephone-event +# audio/tone +# audio/uemclip +# audio/ulpfec +# audio/vdvi +# audio/vmr-wb +# audio/vnd.3gpp.iufp +# audio/vnd.4sb +# audio/vnd.audiokoz +# audio/vnd.celp +# audio/vnd.cisco.nse +# audio/vnd.cmles.radio-events +# audio/vnd.cns.anp1 +# audio/vnd.cns.inf1 +audio/vnd.dece.audio uva uvva +audio/vnd.digital-winds eol +# audio/vnd.dlna.adts +# audio/vnd.dolby.heaac.1 +# audio/vnd.dolby.heaac.2 +# audio/vnd.dolby.mlp +# audio/vnd.dolby.mps +# audio/vnd.dolby.pl2 +# audio/vnd.dolby.pl2x +# audio/vnd.dolby.pl2z +# audio/vnd.dolby.pulse.1 +audio/vnd.dra dra +audio/vnd.dts dts +audio/vnd.dts.hd dtshd +# audio/vnd.dvb.file +# audio/vnd.everad.plj +# audio/vnd.hns.audio +audio/vnd.lucent.voice lvp +audio/vnd.ms-playready.media.pya pya +# audio/vnd.nokia.mobile-xmf +# audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 ecelp4800 +audio/vnd.nuera.ecelp7470 ecelp7470 +audio/vnd.nuera.ecelp9600 ecelp9600 +# audio/vnd.octel.sbc +# audio/vnd.qcelp +# audio/vnd.rhetorex.32kadpcm +audio/vnd.rip rip +# audio/vnd.sealedmedia.softseal.mpeg +# audio/vnd.vmx.cvsd +# audio/vorbis +# audio/vorbis-config +audio/webm weba +audio/x-aac aac +audio/x-aiff aif aiff aifc +audio/x-caf caf +audio/x-flac flac +audio/x-matroska mka +audio/x-mpegurl m3u +audio/x-ms-wax wax +audio/x-ms-wma wma +audio/x-pn-realaudio ram ra +audio/x-pn-realaudio-plugin rmp +# audio/x-tta +audio/x-wav wav +audio/xm xm +chemical/x-cdx cdx +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-csml csml +# chemical/x-pdb +chemical/x-xyz xyz +font/collection ttc +font/otf otf +# font/sfnt +font/ttf ttf +font/woff woff +font/woff2 woff2 +image/bmp bmp +image/cgm cgm +# image/dicom-rle +# image/emf +# image/example +# image/fits +image/g3fax g3 +image/gif gif +image/ief ief +# image/jls +# image/jp2 +image/jpeg jpeg jpg jpe +# image/jpm +# image/jpx +image/ktx ktx +# image/naplps +image/png png +image/prs.btif btif +# image/prs.pti +# image/pwg-raster +image/sgi sgi +image/svg+xml svg svgz +# image/t38 +image/tiff tiff tif +# image/tiff-fx +image/vnd.adobe.photoshop psd +# image/vnd.airzip.accelerator.azv +# image/vnd.cns.inf2 +image/vnd.dece.graphic uvi uvvi uvg uvvg +image/vnd.djvu djvu djv +image/vnd.dvb.subtitle sub +image/vnd.dwg dwg +image/vnd.dxf dxf +image/vnd.fastbidsheet fbs +image/vnd.fpx fpx +image/vnd.fst fst +image/vnd.fujixerox.edmics-mmr mmr +image/vnd.fujixerox.edmics-rlc rlc +# image/vnd.globalgraphics.pgb +# image/vnd.microsoft.icon +# image/vnd.mix +# image/vnd.mozilla.apng +image/vnd.ms-modi mdi +image/vnd.ms-photo wdp +image/vnd.net-fpx npx +# image/vnd.radiance +# image/vnd.sealed.png +# image/vnd.sealedmedia.softseal.gif +# image/vnd.sealedmedia.softseal.jpg +# image/vnd.svf +# image/vnd.tencent.tap +# image/vnd.valve.source.texture +image/vnd.wap.wbmp wbmp +image/vnd.xiff xif +# image/vnd.zbrush.pcx +image/webp webp +# image/wmf +image/x-3ds 3ds +image/x-cmu-raster ras +image/x-cmx cmx +image/x-freehand fh fhc fh4 fh5 fh7 +image/x-icon ico +image/x-mrsid-image sid +image/x-pcx pcx +image/x-pict pic pct +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-tga tga +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd +# message/cpim +# message/delivery-status +# message/disposition-notification +# message/example +# message/external-body +# message/feedback-report +# message/global +# message/global-delivery-status +# message/global-disposition-notification +# message/global-headers +# message/http +# message/imdn+xml +# message/news +# message/partial +message/rfc822 eml mime +# message/s-http +# message/sip +# message/sipfrag +# message/tracking-status +# message/vnd.si.simp +# message/vnd.wfa.wsc +# model/example +# model/gltf+json +model/iges igs iges +model/mesh msh mesh silo +model/vnd.collada+xml dae +model/vnd.dwf dwf +# model/vnd.flatland.3dml +model/vnd.gdl gdl +# model/vnd.gs-gdl +# model/vnd.gs.gdl +model/vnd.gtw gtw +# model/vnd.moml+xml +model/vnd.mts mts +# model/vnd.opengex +# model/vnd.parasolid.transmit.binary +# model/vnd.parasolid.transmit.text +# model/vnd.rosette.annotated-data-model +# model/vnd.valve.source.compiled-map +model/vnd.vtu vtu +model/vrml wrl vrml +model/x3d+binary x3db x3dbz +# model/x3d+fastinfoset +model/x3d+vrml x3dv x3dvz +model/x3d+xml x3d x3dz +# model/x3d-vrml +# multipart/alternative +# multipart/appledouble +# multipart/byteranges +# multipart/digest +# multipart/encrypted +# multipart/example +# multipart/form-data +# multipart/header-set +# multipart/mixed +# multipart/parallel +# multipart/related +# multipart/report +# multipart/signed +# multipart/voice-message +# multipart/x-mixed-replace +# text/1d-interleaved-parityfec +text/cache-manifest appcache +text/calendar ics ifb +text/css css +text/csv csv +# text/csv-schema +# text/directory +# text/dns +# text/ecmascript +# text/encaprtp +# text/enriched +# text/example +# text/fwdred +# text/grammar-ref-list +text/html html htm +# text/javascript +# text/jcr-cnd +# text/markdown +# text/mizar +text/n3 n3 +# text/parameters +# text/parityfec +text/plain txt text conf def list log in +# text/provenance-notation +# text/prs.fallenstein.rst +text/prs.lines.tag dsc +# text/prs.prop.logic +# text/raptorfec +# text/red +# text/rfc822-headers +text/richtext rtx +# text/rtf +# text/rtp-enc-aescm128 +# text/rtploopback +# text/rtx +text/sgml sgml sgm +# text/t140 +text/tab-separated-values tsv +text/troff t tr roff man me ms +text/turtle ttl +# text/ulpfec +text/uri-list uri uris urls +text/vcard vcard +# text/vnd.a +# text/vnd.abc +text/vnd.curl curl +text/vnd.curl.dcurl dcurl +text/vnd.curl.mcurl mcurl +text/vnd.curl.scurl scurl +# text/vnd.debian.copyright +# text/vnd.dmclientscript +text/vnd.dvb.subtitle sub +# text/vnd.esmertec.theme-descriptor +text/vnd.fly fly +text/vnd.fmi.flexstor flx +text/vnd.graphviz gv +text/vnd.in3d.3dml 3dml +text/vnd.in3d.spot spot +# text/vnd.iptc.newsml +# text/vnd.iptc.nitf +# text/vnd.latex-z +# text/vnd.motorola.reflex +# text/vnd.ms-mediapackage +# text/vnd.net2phone.commcenter.command +# text/vnd.radisys.msml-basic-layout +# text/vnd.si.uricatalogue +text/vnd.sun.j2me.app-descriptor jad +# text/vnd.trolltech.linguist +# text/vnd.wap.si +# text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-asm s asm +text/x-c c cc cxx cpp h hh dic +text/x-fortran f for f77 f90 +text/x-java-source java +text/x-nfo nfo +text/x-opml opml +text/x-pascal p pas +text/x-setext etx +text/x-sfv sfv +text/x-uuencode uu +text/x-vcalendar vcs +text/x-vcard vcf +# text/xml +# text/xml-external-parsed-entity +# video/1d-interleaved-parityfec +video/3gpp 3gp +# video/3gpp-tt +video/3gpp2 3g2 +# video/bmpeg +# video/bt656 +# video/celb +# video/dv +# video/encaprtp +# video/example +video/h261 h261 +video/h263 h263 +# video/h263-1998 +# video/h263-2000 +video/h264 h264 +# video/h264-rcdo +# video/h264-svc +# video/h265 +# video/iso.segment +video/jpeg jpgv +# video/jpeg2000 +video/jpm jpm jpgm +video/mj2 mj2 mjp2 +# video/mp1s +# video/mp2p +# video/mp2t +video/mp4 mp4 mp4v mpg4 +# video/mp4v-es +video/mpeg mpeg mpg mpe m1v m2v +# video/mpeg4-generic +# video/mpv +# video/nv +video/ogg ogv +# video/parityfec +# video/pointer +video/quicktime qt mov +# video/raptorfec +# video/raw +# video/rtp-enc-aescm128 +# video/rtploopback +# video/rtx +# video/smpte292m +# video/ulpfec +# video/vc1 +# video/vnd.cctv +video/vnd.dece.hd uvh uvvh +video/vnd.dece.mobile uvm uvvm +# video/vnd.dece.mp4 +video/vnd.dece.pd uvp uvvp +video/vnd.dece.sd uvs uvvs +video/vnd.dece.video uvv uvvv +# video/vnd.directv.mpeg +# video/vnd.directv.mpeg-tts +# video/vnd.dlna.mpeg-tts +video/vnd.dvb.file dvb +video/vnd.fvt fvt +# video/vnd.hns.video +# video/vnd.iptvforum.1dparityfec-1010 +# video/vnd.iptvforum.1dparityfec-2005 +# video/vnd.iptvforum.2dparityfec-1010 +# video/vnd.iptvforum.2dparityfec-2005 +# video/vnd.iptvforum.ttsavc +# video/vnd.iptvforum.ttsmpeg2 +# video/vnd.motorola.video +# video/vnd.motorola.videop +video/vnd.mpegurl mxu m4u +video/vnd.ms-playready.media.pyv pyv +# video/vnd.nokia.interleaved-multimedia +# video/vnd.nokia.videovoip +# video/vnd.objectvideo +# video/vnd.radgamettools.bink +# video/vnd.radgamettools.smacker +# video/vnd.sealed.mpeg1 +# video/vnd.sealed.mpeg4 +# video/vnd.sealed.swf +# video/vnd.sealedmedia.softseal.mov +video/vnd.uvvu.mp4 uvu uvvu +video/vnd.vivo viv +# video/vp8 +video/webm webm +video/x-f4v f4v +video/x-fli fli +video/x-flv flv +video/x-m4v m4v +video/x-matroska mkv mk3d mks +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-vob vob +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie +video/x-smv smv +x-conference/x-cooltalk ice diff --git a/config/e2guardian/authplugins/ident.conf b/config/e2guardian/authplugins/ident.conf new file mode 100644 index 0000000..92d61ee --- /dev/null +++ b/config/e2guardian/authplugins/ident.conf @@ -0,0 +1,4 @@ +# Ident auth plugin +# Identifies users via IDENT servers running on client machines + +plugname = 'ident' diff --git a/config/e2guardian/authplugins/ip.conf b/config/e2guardian/authplugins/ip.conf new file mode 100644 index 0000000..914c466 --- /dev/null +++ b/config/e2guardian/authplugins/ip.conf @@ -0,0 +1,11 @@ +# IP-based auth plugin +# +# Maps client IPs to filter groups. +# If "usexforwardedfor" is enabled, grabs the IP from the X-Forwarded-For +# header, if available. + +plugname = 'ip' + +# ipgroups file +# List file assigning IP addresses, subnets and ranges to filter groups +ipgroups = '/etc/e2guardian/lists/authplugins/ipgroups' diff --git a/config/e2guardian/authplugins/port.conf b/config/e2guardian/authplugins/port.conf new file mode 100644 index 0000000..67b0d9e --- /dev/null +++ b/config/e2guardian/authplugins/port.conf @@ -0,0 +1,9 @@ +# IP-Port-based auth plugin +# +# Maps IP Ports to filter groups. + +plugname = 'port' + +# portgroups file +# List file assigning ports to filter groups +portgroups = '/etc/e2guardian/lists/authplugins/portgroups' diff --git a/config/e2guardian/authplugins/proxy-basic.conf b/config/e2guardian/authplugins/proxy-basic.conf new file mode 100644 index 0000000..ce365cd --- /dev/null +++ b/config/e2guardian/authplugins/proxy-basic.conf @@ -0,0 +1,5 @@ +# Proxy-Basic auth plugin +# Identifies usernames in "Proxy-Authorization: Basic" headers; +# relies upon the upstream proxy (squid) to perform the actual password check. + +plugname = 'proxy-basic' diff --git a/config/e2guardian/authplugins/proxy-digest.conf b/config/e2guardian/authplugins/proxy-digest.conf new file mode 100644 index 0000000..3a849b3 --- /dev/null +++ b/config/e2guardian/authplugins/proxy-digest.conf @@ -0,0 +1,7 @@ +# Proxy-Digest auth plugin +# Identifies usernames in "Proxy-Authorization: Digest" headers; +# relies upon the upstream proxy (squid) to perform the actual password check. + +# Contributed by Darryl Sutherland + +plugname = 'proxy-digest' diff --git a/config/e2guardian/authplugins/proxy-ntlm.conf b/config/e2guardian/authplugins/proxy-ntlm.conf new file mode 100644 index 0000000..dbdd08b --- /dev/null +++ b/config/e2guardian/authplugins/proxy-ntlm.conf @@ -0,0 +1,5 @@ +# Proxy-NTLM auth plugin +# Identifies usernames in "Proxy-Authorization: NTLM" headers; +# relies on the upstream proxy (squid) to perform the actual password check. + +plugname = 'proxy-ntlm' diff --git a/config/e2guardian/common.story b/config/e2guardian/common.story new file mode 100644 index 0000000..ae24c9b --- /dev/null +++ b/config/e2guardian/common.story @@ -0,0 +1,250 @@ +# Storyboard library file + +# For ease of upgrade DO NOT CHANGE THIS library file +# Make your function changes by overriding functions +# in the site.story file - for site wide changes +# and in filtergroup specific story file - see examplef1.story +# +# This library is built to largely duplicate the logic in V4 +# +# Many e2guardian[f1].conf flags are replaced by overiding +# library functions - see site.story and examplef1.story +# +# Simple functions are defined which control the logic flow and the +# lists that are used. See notes/Storyboard for details. +# +# The entry point in v5 for standard filtering is 'checkrequest' +# +# Entry function called by proxy module to check http request +function(checkrequest) +if(viruscheckset) checknoscanlists +if(bypassallowset) checknobypasslists +if(exceptionset) return true +if(fullurlin,searchterms) setsearchterm +ifnot(greyset) returnif localcheckrequest +if(connect) return sslrequestcheck +ifnot(greyset) returnif exceptioncheck +ifnot(greyset) greycheck +ifnot(greyset) returnif bannedcheck +if(fullurlin, change) setmodurl +if(true) returnif embeddedcheck +if(headerin,headermods) setmodheader +if(fullurlin, addheader) setaddheader +if(searchin,override) return setgrey +if(searchin,banned) return setblock +if(fullurlin,redirect) return setredirect +if(true) setgrey + + +# Entry function called by proxy module to check http response +function(checkresponse) +if(exceptionset) return false +if(viruscheckset) checknoscantypes +if(urlin,exceptionfile) return false +if(true) return checkfiletype + +# Entry function called by THTTPS module to check https request +function(thttps-checkrequest) +if(true) returnif localsslrequestcheck +if(true) returnif sslrequestcheck +ifnot(hassniset) checksni + +# Entry function called by ICAP module to check reqmod +function(icap-checkrequest) +#unless blocked or redirect or connect - leave logging for RESPMOD +if(connect) return icapsslrequestcheck +ifnot(greyset) icap-checkrequest2 +if(redirectset) return true +ifnot(blockset) setnolog + +function(icap-checkrequest2) +if(viruscheckset) checknoscanlists +if(bypassallowset) checknobypasslists +if(exceptionset) return true +if(fullurlin,searchterms) setsearchterm +ifnot(greyset) returnif localcheckrequest +ifnot(greyset) returnif exceptioncheck +ifnot(greyset) greycheck +ifnot(greyset) returnif bannedcheck +if(fullurlin, change) setmodurl +if(true) returnif embeddedcheck +if(headerin,headermods) setmodheader +if(fullurlin, addheader) setaddheader +if(searchin,override) return setgrey +if(searchin,banned) return setblock +if(true) setgrey + +# Entry function called by ICAP module to check respmod +function(icap-checkresponse) +if(viruscheckset) checknoscanlists +if(true) return checkresponse + +# Checks embeded urls +# returns true if blocked, otherwise false +function(embeddedcheck) +if(embeddedin, localexception) return false +if(embeddedin, localgrey) return false +if(embeddedin, localbanned) return setblock +if(embeddedin, exception) return false +if(embeddedin, grey) return false +if(embeddedin, banned) return setblock + +# Local checks +# returns true if matches local exception or banned +function(localcheckrequest) +if(connect) return localsslrequestcheck +ifnot(greyset) returnif localexceptioncheck +ifnot(greyset) localgreycheck +ifnot(greyset) returnif localbannedcheck +if(searchin,localbanned) return setblock + + +# Local SSL checks +# returns true if matches local exception +function(localsslrequestcheck) +if(sitein, localexception) return setexception +if(sitein, localgreyssl) returnif sslcheckmitm +if(sitein, localbanned) true +ifnot(returnset) return false +if(true) returnif sslcheckmitm +if(true) return setblock + +# SSL site replace (used instead of dns kulge) +# returns true on match and successful replacement +function(sslreplace) +if(fullurlin,sslreplace) return setconnectsite +if(true) return false + +# Local grey check +# returns true on match +function(localgreycheck) +if(urlin, localgrey) return setgrey + +# Local banned check +# returns true on match +function(localbannedcheck) +if(urlin, localbanned) return setblock + +# Local exception check +# returns true on match +function(localexceptioncheck) +if(urlin, localexception) return setexception + +# Exception check +# returns true on match +function(exceptioncheck) +if(urlin, exception) return setexception +if(headerin, exceptionheader) return setexception +if(useragentin, exceptionuseragent) return setexception + +# SSL Exception check +# returns true on match +function(sslexceptioncheck) +if(sitein, exception) return setexception +if(headerin, exceptionheader) return setexception +if(useragentin, exceptionuseragent) return setexception +if(true) return false + +# Greylist check +# returns true on match +function(greycheck) +if(urlin, grey) return setgrey + +# Banned list check +# returns true on match +function(bannedcheck) +if(true) returnif checkblanketblock +if(urlin, banned) return setblock +if(urlin,bannedextension) return setblock +if(useragentin, banneduseragent) return setblock +if(headerin, bannedheader) return setblock + +# Local SSL list(s) check +# returns true on match +function(localsslcheckrequest) +if(sitein, localexception) return setexception +#if(sitein, localbanned) return setblock + +# Check whether to go MITM +# returns true if yes, false if no +function(sslcheckmitm) +# use next line to have general MITM +if(true) return sslcheckmitmgeneral +# use next line instead of last to limit MITM to greylist +#if(true) return sslcheckmitmgreyonly + +# Always go MITM +# returns true if yes, false if no +function(sslcheckmitmgeneral) +if(true) setgomitm +ifnot(returnset) return false +if(sitein, nocheckcert) setnocheckcert +if(true) sslreplace +if(true) return true + +# Only go MITM when in greyssl list +# returns true if yes, false if no +function(sslcheckmitmgreyonly) +if(sitein, greyssl) setgomitm +ifnot(returnset) return false +if(sitein, nocheckcert) setnocheckcert +if(true) sslreplace +if(true) return true + +# SSL request check +# returns true if exception or gomitm +function(sslrequestcheck) +if(true) returnif sslexceptioncheck +if(true) returnif sslcheckmitm +if(sitein, banned) return setblock +if(true) sslreplace +ifnot(returnset) returnif sslcheckblanketblock +if(true) setgrey + +function(checknoscanlists) +if(urlin,exceptionvirus) unsetviruscheck + +function(checknoscantypes) +if(mimein,exceptionvirus) return unsetviruscheck +if(extensionin,exceptionvirus) return unsetviruscheck + +function(checknobypasslists) +if(urlin,bannedbypass) return unsetbypassallow + +# ICAP SSL request check +# returns true if exception +function(icapsslrequestcheck) +if(true) returnif icapsquidbump +if(true) returnif sslexceptioncheck +if(true) sslreplace +if(sitein, banned) return setblock + +# Blanket block +# returns true if to block +# Placeholder function - overide in fn.story +function(checkblanketblock) + +# SSL Blanket block +# returns true if to block +# Placeholder function - overide in fn.story +function(sslcheckblanketblock) + +# ICAP Squid bump +# override in site.story to return true if bump is being deployed on squid +function(icapsquidbump) + +# File type blocking +# returns true if blocking +# Default uses banned lists and allows all others +# Overide in site.story or fn.story if only types in exception file type lists +# are to be allowed +function(checkfiletype) +if(mimein, bannedmime) return setblock +if(extensionin, bannedextension) return setblock + +# SNI checking - determines default action when no SNI or TSL is present on a +# THTTPS connection +# Default blocks all requests with TLS or SNI absent that are not ip site exceptions +function(checksni) +ifnot(tls,,511) return setblock +ifnot(hassniset,,512) return setblock diff --git a/config/e2guardian/contentscanners/clamdscan.conf b/config/e2guardian/contentscanners/clamdscan.conf new file mode 100644 index 0000000..4500e0a --- /dev/null +++ b/config/e2guardian/contentscanners/clamdscan.conf @@ -0,0 +1,13 @@ +plugname = 'clamdscan' + +# edit this to match the location of your ClamD UNIX domain socket +clamdudsfile = '/run/clamav/clamd.ctl' + +# If this string is set, the text it contains shall be removed from the +# beginning of filenames when passing them to ClamD. +# Use it to - for example - support a ClamD running inside a chroot jail: +# if DG's filecachedir is set to "/var/clamdchroot/downloads/" and pathprefix +# is set to "/var/clamdchroot", then file names given to ClamD will be of the +# form "/downloads/tf*" instead of "/var/clamdchroot/downloads/tf*". +#pathprefix = '/var/clamdchroot' + diff --git a/config/e2guardian/contentscanners/commandlinescan.conf b/config/e2guardian/contentscanners/commandlinescan.conf new file mode 100644 index 0000000..9822d99 --- /dev/null +++ b/config/e2guardian/contentscanners/commandlinescan.conf @@ -0,0 +1,45 @@ +plugname = 'commandlinescan' + +# Program to run & initial arguments - filename for scanning will be appended +#progname = /path/to/scanner + +# At least one of the following three options must be defined! +# They are checked in the following order, with the first match determining +# the scan result: +# virusregexp - regular expression for extracting virus names from +# the scanner's output +# cleancodes - program return code(s), as a comma-separated list, for +# uninfected files +# infectedcodes - program return code(s), as a comma-separated list, for +# infected files + +#virusregexp = (someregexp) + +# Which submatch of the above contains the virus name? (0 = all matched text) +#submatch = 1 + +# cleancodes = 0 +# infectedcodes = 1,2,3 + +# Default result when none of the other options triggers a match +# Valid values are "infected" and "clean" +#defaultresult = infected + + + +# +# Example configuration for clamdscan +# + +## Path to binary +#progname = '/usr/bin/clamdscan' + +## Program returns 0 for clean files (for an easy out) +#cleancodes = 0 + +## Regular expression for virus names +#virusregexp = : ([ -/a-zA-Z0-9\.]+) FOUND +#submatch = 1 + +## Default scan result when the above don't match +#defaultresult = infected diff --git a/config/e2guardian/contentscanners/icapscan.conf b/config/e2guardian/contentscanners/icapscan.conf new file mode 100644 index 0000000..8e5dd19 --- /dev/null +++ b/config/e2guardian/contentscanners/icapscan.conf @@ -0,0 +1,8 @@ +plugname = 'icapscan' + +# ICAP URL +# Use hostname rather than IP address +# Always specify the port +# +icapurl = 'icap://icapserver:1344/avscan' + diff --git a/config/e2guardian/downloadmanagers/default.conf b/config/e2guardian/downloadmanagers/default.conf new file mode 100644 index 0000000..61935a8 --- /dev/null +++ b/config/e2guardian/downloadmanagers/default.conf @@ -0,0 +1,17 @@ +# The default download manager. +# This is the safest option for unknown user-agents and content types, and +# hence a good one to include last. + +# Which plugin should be loaded? +plugname = 'default' + +# Regular expression for matching user agents +# When not defined, matches all agents. +#useragentregexp = '.*' + +# Lists of mime types and extensions to manage +# When not defined, matches everything. +# These can be enabled separately; when both enabled, +# a request may match either list. +#managedmimetypelist = '' +#managedextensionlist = '' diff --git a/config/e2guardian/e2guardian.conf b/config/e2guardian/e2guardian.conf new file mode 100644 index 0000000..9ca11eb --- /dev/null +++ b/config/e2guardian/e2guardian.conf @@ -0,0 +1,699 @@ +# e2guardian config file for version 5.3.1 + +#NOTE This file is only read at start-up +# +# but the lists defined in this file are re-read on reload or gentle restart +# as is any rooms directory files. + +# Language dir where languages are stored for internationalisation. +# The HTML template within this dir is only used when reportinglevel +# is set to 3. When used, e2guardian will display the HTML file instead of +# using the perl cgi script. This option is faster, cleaner +# and easier to customise the access denied page. +# The language file is used no matter what setting however. +# +languagedir = '/usr/share/e2guardian/languages' + +# language to use from languagedir. +language = 'ukenglish' + +#Debug Level +#Enable debug e2guardian +#debug one value: +#Eg +# debuglevel = 'ICAP' +#Enable ICAP debug informations only +# +#Eg +# debuglevel = 'ALL' +#Enable ALL debug informations +# +#Additive mode: +#Eg +# debuglevel = 'ICAP,NET' +#Enable ICAP and NET debug informations +# +#Soustractive mode: +#Eg +# debuglevel = 'ALL,-ICAP' +#Enable all debug informations but without ICAP debug informations +# debuglevel = 'ALL,-ICAP,-NET,-FILTER' +#Enable all debug informations but without ICAP, NETWORK and FILTER debug informations +#by default disabled, if this option is required just uncomment the line below +#works also with e2guardian -N (-N Do not go into the background) +#Possible value : ICAP CLAMAV ICAPC (icap client) +#debuglevel = 'ALL' + +#Directory for result of debug level (log) +#Works only if debuglevel is enabled +# +#debuglevelfile = '/data/log/e2guardian/debuge2' + +# Logging Settings +# +# 0 = none 1 = just denied 2 = all text based 3 = all requests +loglevel = 3 + +# Log Exception Hits +# Log if an exception (user, ip, URL, phrase) is matched and so +# the page gets let through. Can be useful for diagnosing +# why a site gets through the filter. +# 0 = never log exceptions +# 1 = log exceptions, but do not explicitly mark them as such +# 2 = always log & mark exceptions (default) +logexceptionhits = 2 + +# Log File Format +# 1 = Dansguardian format (space delimited) +# 2 = CSV-style format +# 3 = Squid Log File Format +# 4 = Tab delimited +# Protex format type 5 Tab delimited, squid style format with extra fields +# for filter block/result codes, reasons, filter group, and system name +# used in arrays so that combined logs show originating server. +# 5 = Protex format +# Protex format type 6 Same format as above but system name field is blank +# used in stand-alone systems. +# 6 = Protex format with server field blanked + +logfileformat = 6 + +# Log a specific value from header +# low case only +# only used with logs: 1,5 and 6 +logheadervalue = 'proxy-authorization:' + +# truncate large items in log lines +# allowable values 10 to 32000 +# default 2000 +# unlimited not longer allowed - 0 will now set default of 2000 +maxlogitemlength = 2000 + +# anonymize logs (blank out usernames & IPs) +#anonymizelogs = off + +# Syslog logging +# +# Use syslog for access logging instead of logging to the file +# at the defined or built-in "loglocation" +#logsyslog = off + +#Suffix to append to program name when logging through syslog +# Default is the e2Guardian instance number +#namesuffix = $z + +# Log file location +# +# Defines the log directory and filename. +loglocation = '/data/log/e2guardian/access.log' + +# Dymamic statistics log file location +# +# Defines the dstats file directory and filename. +# Once every 'dstatinterval' seconds, stats on number of threads in use, +# Q sizes and other useful information is written to this file. +# Format is similar to sar. See notes/dstats_format for more details. +# Default is not to write stats. +dstatlocation = '/data/log/e2guardian/dstats.log' + +# Interval in seconds between stats output +# Default 300 (= 5 mins) +# Minimum 10 +# Maximum 3600 (= 1 hour) +dstatinterval = 300 # = 5 minutes + +# Time format is epoch GMT+0 by default | statshumanreadable change to local zone +statshumanreadable = on + +# Container mode +# the process will not fork into the background AND log in stdout +# In this mode systemd service is disabled ! +# Default: +dockermode = on + +# Network Settings +# +# the IP that e2guardian listens on. If left blank e2guardian will +# listen on all IPs. That would include all NICs, loopback, modem, etc. +# Normally you would have your firewall protecting this, but if you want +# you can limit it to a certain IP. To bind to multiple interfaces, +# specify each IP on an individual filterip line. +# If mapportstoips is 'on' you can have the same IP twice so long as +# it has a different port. +filterip = + +# the ports that e2guardian listens to. Specify one line per filterip +# line. If both mapportstoips and mapauthtoports are set to 'on' +# you can specify different authentication mechanisms per port but +# only if the mechanisms can co-exist (e.g. basic/proxy auth can't) +filterports = 8080 +#filterports = 8081 + +# Map ports to IPs +# If enabled map filterports to filterip - number of filterports must then be same as +# number of filterip +# If disabled will listen on all filterports on all filterips. +# on (default) | off +#mapportstoips = off + +#port for transparent https +#if defined enables tranparent https +transparenthttpsport = 8443 + +#port for ICAP +#if defined enables icap mode +icapport = 1344 + +# the ip of upstream proxy - optional - if blank e2g will go direct to sites. +# default is "" i.e. no proxy +proxyip = 127.0.0.1 + +# the port e2guardian connects to proxy on +proxyport = 3127 + +# Proxy timeout +# Set tcp timeout between the Proxy and e2guardian +# This is a connection timeout +# If proxy is remote you may need to increase this to 10 or more. +# Min 5 - Max 100 +proxytimeout = 5 + +# Connect timeout +# Set tcp timeout between the e2guardian and upstream service (proxy or target host) +# This is a connection timeout +# For remote sites you may need to increase this to 10 or more. +# Min 1 - Max 100 +# default 3 +connecttimeout = 5 + +# Connect retries +# Set the number of retries to make on connection failure before giving up +# Min 1 - Max 100 +# default 1 + +# Proxy header exchange +# Set timeout between the Proxy and e2guardian +# Min 20 - Max 300 +# If this is higher than proxies timeout user will get proxy Gateway error page +# If lower e2guardian Gateway error page +proxyexchange = 61 + +# Pconn timeout +# how long a persistent connection will wait for other requests +# squid apparently defaults to 1 minute (persistent_request_timeout), +# so wait slightly less than this to avoid duff pconns. +# Min 5 - Max 300 +pcontimeout = 55 + +# Whether to retrieve the original destination IP in transparent proxy +# setups and check it against the domain pulled from the HTTP headers. +# +# Be aware that when visiting sites which use a certain type of round-robin +# DNS for load balancing, DG may mark requests as invalid unless DG gets +# exactly the same answers to its DNS requests as clients. The chances of +# this happening can be increased if all clients and servers on the same LAN +# make use of a local, caching DNS server instead of using upstream DNS +# directly. +# +# See http://www.kb.cert.org/vuls/id/435052 +# on (default) | off +#!! Not compiled !! originalip = off + +# Banned image replacement +# Images that are banned due to domain/url/etc reasons including those +# in the adverts blacklists can be replaced by an image. This will, +# for example, hide images from advert sites and remove broken image +# icons from banned domains. +# on (default) | off +usecustombannedimage = on +custombannedimagefile = '/usr/share/e2guardian/transparent1x1.gif' + +#Banned flash replacement +usecustombannedflash = on +custombannedflashfile = '/usr/share/e2guardian/blockedflash.swf' + +# Filter groups options +# filtergroups sets the number of filter groups. A filter group is a set of content +# filtering options you can apply to a group of users. The value must be 1 or more. +# e2guardian will automatically look for e2guardianfN.conf where N is the filter +# group. To assign users to groups use the filtergroupslist option. All users default +# to filter group 1. You must have some sort of authentication to be able to map users +# to a group. +filtergroups = 1 +filtergroupslist = '/etc/e2guardian/lists/filtergroupslist' + +# default filtergroup for standard (explicit) mode +# optional defaults to 1 +#defaultfiltergroup = 1; + +# default filtergroup for transparent proxy mode +# optional defaults to 1 +#defaulttransparentfiltergroup = 1; + +# default filtergroup for ICAP mode +# optional defaults to 1 +#defaulticapfiltergroup = 1; + +# If on it a user without group is considered like unauthenfied +# E2guardian tries the next plugin +# If off the user is connected with group1 +# Defaults to off +# authrequiresuserandgroup = off + +# Authentication files location +# These are now replaced with pre-authstoryboard logic but lists defined here +# +# bannediplist is ONLY for banned client IP +iplist = 'name=bannedclient,messageno=100,logmessageno=103,path=/etc/e2guardian/lists/bannediplist' +# Put client dns names in bannedclientlist if required +#sitelist = 'name=bannedclient,messageno=100,logmessageno=104,path=/etc/e2guardian/lists/bannedclientlist' +# exceptioniplist is ONLY for exception client IP +iplist = 'name=exceptionclient,messageno=600,path=/etc/e2guardian/lists/exceptioniplist' +# Put client dns names in exceptionclientlist if required +#sitelist = 'name=exceptionclient,messageno=631,path=/etc/e2guardian/lists/exceptionclientlist' + +# authexception lists are for exception sites/urls allowed before authentication# to allow for machines to update without user authentication +iplist = 'name=authexception,messageno=602,path=/etc/e2guardian/lists/authexceptioniplist' +sitelist = 'name=authexception,messageno=602,path=/etc/e2guardian/lists/authexceptionsitelist' +urllist = 'name=authexception,messageno=603,path=/etc/e2guardian/lists/authexceptionurllist' + +#Note: only iplist, sitelist, ipsitelist and urllist can currently be defined for use with pre-authstoryboard. + +# Per-Room definition directory +# A directory containing text files containing the room's name followed by IPs or ranges +# and optionaly site and url lists +# Think of it as bannediplist and/or exceptions on crack +# perroomdirectory = '/etc/e2guardian/lists/rooms/' + +# Show weighted phrases found +# If enabled then the phrases found that made up the total which excedes +# the naughtyness limit will be logged and, if the reporting level is +# high enough, reported. on | off +showweightedfound = on + +# Weighted phrase mode +# There are 3 possible modes of operation: +# 0 = off = do not use the weighted phrase feature. +# 1 = on, normal = normal weighted phrase operation. +# 2 = on, singular = each weighted phrase found only counts once on a page. +# +# IMPORTANT: Note that setting this to "0" turns off all features which +# extract phrases from page content, including banned & exception +# phrases (not just weighted), search term filtering, and scanning for +# links to banned URLs. +# +weightedphrasemode = 2 + +# Smart, Raw and Meta/Title phrase content filtering options +# Smart is where the multiple spaces and HTML are removed before phrase filtering +# Raw is where the raw HTML including meta tags are phrase filtered +# Meta/Title is where only meta and title tags are phrase filtered (v. quick) +# CPU usage can be effectively halved by using setting 0 or 1 compared to 2 +# 0 = raw only +# 1 = smart only +# 2 = both of the above (default) +# 3 = meta/title +phrasefiltermode = 2 + +# Lower casing options +# When a document is scanned the uppercase letters are converted to lower case +# in order to compare them with the phrases. However this can break Big5 and +# other 16-bit texts. If needed preserve the case. As of version 2.7.0 accented +# characters are supported. +# 0 = force lower case (default) +# 1 = do not change case +# 2 = scan first in lower case, then in original case +preservecase = 0 + +# Note: +# If phrasefiltermode and preserve case are both 2, this equates to 4 phrase +# filtering passes. If you have a large enough userbase for this to be a +# worry, and need to filter pages in exotic character encodings, it may be +# better to run two instances on separate servers: one with preservecase 1 +# (and possibly forcequicksearch 1) and non ASCII/UTF-8 phrase lists, and one +# with preservecase 0 and ASCII/UTF-8 lists. + +# Hex decoding options +# When a document is scanned it can optionally convert %XX to chars. +# If you find documents are getting past the phrase filtering due to encoding +# then enable. However this can break Big5 and other 16-bit texts. +# off = disabled (default) +# on = enabled +hexdecodecontent = off + +# Force Quick Search rather than DFA search algorithm +# The current DFA implementation is not totally 16-bit character compatible +# but is used by default as it handles large phrase lists much faster. +# If you wish to use a large number of 16-bit character phrases then +# enable this option. +# off (default) | on (Big5 compatible) +forcequicksearch = off + +# Reverse lookups for banned site and URLs. +# If set to on, e2guardian will look up the forward DNS for an IP URL +# address and search for both in the banned site and URL lists. This would +# prevent a user from simply entering the IP for a banned address. +# It will reduce searching speed somewhat so unless you have a local caching +# DNS server, leave it off and use the Blanket IP Block option in the +# f1.story file instead. +reverseaddresslookups = off + +# Reverse lookups for banned and exception IP lists. +# If set to on, e2guardian will look up the forward DNS for the IP +# of the connecting computer. +# If a client computer is matched against an IP given in the lists, then the +# IP will be recorded in any log entries; if forward DNS is successful and a +# match occurs against a hostname, the hostname will be logged instead. +# It will reduce searching speed somewhat so unless you have a local DNS server, +# leave it off. +reverseclientiplookups = off + +# Perform reverse lookups on client IPs for successful requests. +# If set to on, e2guardian will look up the forward DNS for the IP +# of the connecting computer, and log host names (where available) rather than +# IPs against requests. +# This is not dependent on reverseclientiplookups being enabled; however, if it +# is, enabling this option does not incur any additional forward DNS requests. +logclienthostnames = off + +# Max content filter size +# Sometimes web servers label binary files as text which can be very +# large which causes a huge drain on memory and cpu resources. +# To counter this, you can limit the size of the document to be +# filtered and get it to just pass it straight through. +# This setting also applies to content regular expression modification. +# The value must not be higher than maxcontentramcachescansize +# Do not set this too low as this will result in pages that contain a +# long preamble not being content filtered +# The size is in Kibibytes - eg 2048 = 2Mb +# use 0 to set it to maxcontentramcachescansize +maxcontentfiltersize = 1024 + +# Max content ram cache scan size +# This is only used if you use a content scanner plugin such as AV +# This is the max size of file that e2g will download and cache +# in RAM. After this limit is reached it will cache to disk +# This value must be less than or equal to maxcontentfilecachescansize. +# The size is in Kibibytes - eg 10240 = 10Mb +# use 0 to set it to maxcontentfilecachescansize +# This option may be ignored by the configured download manager. +maxcontentramcachescansize = 2000 + +# Max content file cache scan size +# This is only used if you use a content scanner plugin such as AV +# This is the max size file that DG will download +# so that it can be scanned or virus checked. +# This value must be greater or equal to maxcontentramcachescansize. +# The size is in Kibibytes - eg 10240 = 10Mb +maxcontentfilecachescansize = 20000 + +# File cache dir +# Where DG will download files to be scanned if too large for the +# RAM cache. +filecachedir = '/tmp' + +# Delete file cache after user completes download +# When a file gets save to temp it stays there until it is deleted. +# You can choose to have the file deleted when the user makes a sucessful +# download. This will mean if they click on the link to download from +# the temp store a second time it will give a 404 error. +# You should configure something to delete old files in temp to stop it filling up. +# on|off (defaults to on) +deletedownloadedtempfiles = on + +# Initial Trickle delay +# This is the number of seconds a browser connection is left waiting +# before first being sent *something* to keep it alive. The +# *something* depends on the download manager chosen. +# Do not choose a value too low or normal web pages will be affected. +# A value between 20 and 110 would be sensible +# This may be ignored by the configured download manager. +initialtrickledelay = 20 + +# Trickle delay +# This is the number of seconds a browser connection is left waiting +# before being sent more *something* to keep it alive. The +# *something* depends on the download manager chosen. +# This may be ignored by the configured download manager. +trickledelay = 10 + +# Download Managers +# These handle downloads of files to be filtered and scanned. +# They differ in the method they deal with large downloads. +# Files usually need to be downloaded 100% before they can be +# filtered and scanned before being sent on to the browser. +# Normally the browser can just wait, but with content scanning, +# for example to AV, the browser may timeout or the user may get +# confused so the download manager has to do some sort of +# 'keep alive'. +# +# There are various methods possible but not all are included. +# The author does not have the time to write them all so I have +# included a plugin systam. Also, not all methods work with all +# browsers and clients. Specifically some fancy methods don't +# work with software that downloads updates. To solve this, +# each plugin can support a regular expression for matching +# the client's user-agent string, and lists of the mime types +# and extensions it should manage. +# +# Note that these are the matching methods provided by the base plugin +# code, and individual plugins may override or add to them. +# See the individual plugin conf files for supported options. +# +# The plugins are matched in the order you specify and the last +# one is forced to match as the default, regardless of user agent +# and other matching mechanisms. +# +# NOTE - ONLY default downloadmanager is supported in v5 +downloadmanager = '/etc/e2guardian/downloadmanagers/default.conf' + +# Content Scanners (Also known as AV scanners) +# These are plugins that scan the content of all files your browser fetches +# for example to AV scan. You can have more than one content +# scanner. The plugins are run in the order you specify. +# This is one of the few places you can have multiple options of the same name. +# +# Some of the scanner(s) require 3rd party software and libraries eg clamav. +# See the individual plugin conf file for more options (if any). +# +#contentscanner = '/etc/e2guardian/contentscanners/clamdscan.conf' +#contentscanner = '/etc/e2guardian/contentscanners/icapscan.conf' +#contentscanner = '/etc/e2guardian/contentscanners/commandlinescan.conf' + +# Content scanner timeout +# Some of the content scanners support using a timeout value to stop +# processing (eg AV scanning) the file if it takes too long. +# If supported this will be used. +# The default of 60 seconds is probably reasonable. +contentscannertimeout = 60 + +# Content scan exceptions // THIS MOVED to e2guardianf1.conf +# contentscanexceptions = off + +# Auth plugins +# +# Handle the extraction of client usernames from various sources, such as +# Proxy-Authorisation headers and ident servers, enabling requests to be +# handled according to the settings of the user's filter group. +# +# If you do not use multiple filter groups, you need not specify this option. +# +#authplugin = '/etc/e2guardian/authplugins/proxy-basic.conf' +#authplugin = '/etc/e2guardian/authplugins/proxy-digest.conf' +#authplugin = '/etc/e2guardian/authplugins/proxy-ntlm.conf' +#authplugin = '/etc/e2guardian/authplugins/ident.conf' +#authplugin = '/etc/e2guardian/authplugins/ip.conf' +#authplugin = '/etc/e2guardian/authplugins/proxy-header.conf' +#authplugin = '/etc/e2guardian/authplugins/port.conf' + +# Map auth to ports +# If enabled map auth plugins to ips/ports - number of authplugins must then be same as +# number of ports +# If disabled scan authplugins on all ports - number of authplugins can then be different +# to number of ports +# on (default) | off +#mapauthtoports = off + +# Re-check replaced URLs +# As a matter of course, URLs undergo regular expression search/replace (urlregexplist) +# *after* checking the exception site/URL/regexpURL lists, but *before* checking against +# the banned site/URL lists, allowing certain requests that would be matched against the +# latter in their original state to effectively be converted into grey requests. +# With this option enabled, the exception site/URL/regexpURL lists are also re-checked +# after replacement, making it possible for URL replacement to trigger exceptions based +# on them. +# Defaults to off. +recheckreplacedurls = off + +# Misc settings + +# if on it adds an X-Forwarded-For: to the HTTP request +# header. This may help solve some problem sites that need to know the +# source ip. on | off +forwardedfor = on + +# if on it uses the X-Forwarded-For: to determine the client +# IP. This is for when you have squid between the clients and e2guardian. +# Warning - headers are easily spoofed. on | off +usexforwardedfor = on + +# as mentioned above, the headers can be easily spoofed in order to fake the +# request origin by setting the X-Forwarded-For header. If you have the +# "usexforwardedfor" option enabled, you may want to specify the IPs from which +# this kind of header is allowed, such as another upstream proxy server for +# instance If you want authorize multiple IPs, specify each one on an individual +# xforwardedforfilterip line. +# xforwardedforfilterip = + +# if on it logs some debug info regarding accept()ing and failed connections +# which +# can usually be ignored. These are logged by syslog. It is safe to leave +# it on or off +logconnectionhandlingerrors = on + +#sets the number of worker threads to use +# +# This figure is the maximum number of concurrent connections. +# If more connections are made, connections will queue until a worker thread is free. +# On large site you might want to try 5000 (max value 20000) +httpworkers = 500 + +# Process options +# (Change these only if you really know what you are doing). +# These options allow you to run multiple instances of e2guardian on a single machine. +# Remember to edit the log file path above also if that is your intention. + +# PID filename +# +# Defines process id directory and filename. +#pidfilename = '/var/run/e2guardian.pid' + +# Disable daemoning +# If enabled the process will not fork into the background. +# It is not usually advantageous to do this. +# on|off (defaults to off) +nodaemon = off + +# Disable logging process +# on|off (defaults to off) +nologger = off + +# Enable logging of "ADs" category blocks +# on|off (defaults to off) +logadblocks = off + +# Enable logging of client User-Agent +# Some browsers will cause a *lot* of extra information on each line! +# on|off (defaults to off) +loguseragent = off + +# Daemon runas user and group +# This is the user that e2guardian runs as. Normally the user/group nobody. +# Uncomment to use. Defaults to the user set at compile time. +# Temp files created during virus scanning are given owner and group read + +# clamdscan, the two processes must run with either the same group or user ID. +#daemonuser = 'e2guardian' +#daemongroup = 'e2guardian' + + +# Mail program +# Path (sendmail-compatible) email program, with options. +# Not used if usesmtp is disabled (filtergroup specific). +#mailer = '/usr/sbin/sendmail -t' # NOT YET IMPLIMENTED + +# Enable SSL support +# This must be present to enable MITM and/or Cert checking +# default is off +enablessl = off + +#SSL certificate checking path +#Path to CA certificates used to validate the certificates of https sites. +# if left blank openssl default ca certificate bundle will be used +#Leave as default unless you want to load non-default cert bundle +#sslcertificatepath = '' + +#SSL man in the middle +#CA certificate path +#Path to the CA certificate to use as a signing certificate for +#generated certificates. +# default is blank - required if ssl_mitm is enabled. +#cacertificatepath = '/home/e2/e2install/ca.pem' + +#CA private key path +#path to the private key that matches the public key in the CA certificate. +# default is blank - required if ssl_mitm is enabled. +#caprivatekeypath = '/home/e2/e2install/ca.key' + +#Cert private key path +#The public / private key pair used by all generated certificates +# default is blank - required if ssl_mitm is enabled. +#certprivatekeypath = '/home/e2/e2install/cert.key' + +#Generated cert path +#The location where generated certificates will be saved for future use. +#(must be writable by the dg user) +# default is blank - required if ssl_mitm is enabled. +#generatedcertpath = '/home/e2/e2install/generatedcerts/' + +#Warning: if you change the cert start/end time from default on a running +# system you will need to clear the generated certificate +# store and also may get problems on running client browsers + +#Generated cert start time (in unix time) - optional +# defaults to 1417872951 = 6th Dec 2014 +# generatedcertstart = 1417872951 + +#Generated cert end time (in unix time) - optional +# defaults to generatedcertstart + 10 years +#genratedcertend = +# generatedcertstart = + +# monitor helper path +# If defined this script/binary will be called with start or stop appended as follows:- +# Note change in V4!!! - No longer detects cache failure +# At start after e2guardian has started listener and worker threads with +# ' start' appended +# When e2guardian is stopping with ' stop' appended +# monitorhelper = '/usr/local/bin/mymonitor' + +# monitor flag prefix path +# If defined path will be used to generate flag files as follows:- +# +# At start after e2guardian has started listener and worker threads with +# 'running' appended +# When e2guardian is stopping with 'paused' appended +# Note change in V4!!! - No longer detects cache failure +# monitorflagprefix = '/home/e2g/run/e2g_flag_' + +# Much logic has moved to storyboard files +preauthstoryboard = '/etc/e2guardian/preauth.story' + +# Storyboard tracing +# Warning - produces verbose output - do not use in production +# Output goes to syslog (or stderr in debug mode) +# default off +# storyboardtrace = off + +# Abort if list is missing or unreadable +# default is to warn but then ignore missing lists +# To abort on missing list set to on +# abortiflistmissing = off //NOT YET IMPLIMENTED + +#Search sitelist for ip sites +# In v5 a separate set of lists has been introduced for IP sites +# and normally e2g will no longer check site lists for ip's +# If you want to keep backward list compatablity then set this to +# 'on' - but note this incurs an overhead - putting IP in ipsitelists +# and setting this to off gives the fastest implimentation. +# default is 'on' +searchsitelistforip = on + + +# http header checking setings +# +# Limit number of http header lines in a request/response +# (to guard against attacks) +# Minimum 10 max 250 +# default 50 +# maxheaderlines = 50 diff --git a/config/e2guardian/e2guardianf1.conf b/config/e2guardian/e2guardianf1.conf new file mode 100644 index 0000000..bbd92fb --- /dev/null +++ b/config/e2guardian/e2guardianf1.conf @@ -0,0 +1,527 @@ +# e2guardian filter group config file for version 5.3.1 + +# This file is re-read on gentle restart and any changes actioned + +# Filter group mode IS NOT LONGER SUPPORTED +# Unauthenticated users are treated as being in the default filter group. +# groupmode = 1 #DISABLED + +# Filter group name +# Used to fill in the -FILTERGROUP- placeholder in the HTML template file, and to +# name the group in the access logs +# Defaults to empty string +#groupname = '' +groupname = 'no_name_group' + +# Much logic has moved to storyboard files +storyboard = '/etc/e2guardian/examplef1.story' + +# Enable legacy (DG) ssl logic +# +# The following option is replaced by storyboard logic +# ssllegacylogic = off + +# Content filtering files location + +bannedphraselist = '/etc/e2guardian/lists/bannedphraselist' +weightedphraselist = '/etc/e2guardian/lists/weightedphraselist' +exceptionphraselist = '/etc/e2guardian/lists/exceptionphraselist' + +### NOTE - New format for all other list definitions in v5.0 +### see notes/V5_list_definition for details + +#banned lists +sitelist = 'name=banned,messageno=500,path=/etc/e2guardian/lists/bannedsitelist' +ipsitelist = 'name=banned,messageno=510,path=/etc/e2guardian/lists/bannedsiteiplist' +urllist = 'name=banned,messageno=501,path=/etc/e2guardian/lists/bannedurllist' +regexpboollist = 'name=banned,messageno=503,path=/etc/e2guardian/lists/bannedregexpurllist' +regexpboollist = 'name=banneduseragent,messageno=522,path=/etc/e2guardian/lists/bannedregexpuseragentlist' + +sitelist = 'name=bannedssl,messageno=520,path=/etc/e2guardian/lists/bannedsslsitelist' +ipsitelist = 'name=bannedssl,messageno=520,path=/etc/e2guardian/lists/bannedsslsiteiplist' + +#grey (i.e. content check) lists +sitelist = 'name=grey,path=/etc/e2guardian/lists/greysitelist' +ipsitelist = 'name=grey,path=/etc/e2guardian/lists/greysiteiplist' +urllist = 'name=grey,path=/etc/e2guardian/lists/greyurllist' +sitelist = 'name=greyssl,path=/etc/e2guardian/lists/greysslsitelist' +ipsitelist = 'name=greyssl,path=/etc/e2guardian/lists/greysslsiteiplist' + +#exception lists +sitelist = 'name=exception,messageno=602,path=/etc/e2guardian/lists/exceptionsitelist' +ipsitelist = 'name=exception,messageno=602,path=/etc/e2guardian/lists/exceptionsiteiplist' +urllist = 'name=exception,messageno=603,path=/etc/e2guardian/lists/exceptionurllist' +regexpboollist = 'name=exception,messageno=609,path=/etc/e2guardian/lists/exceptionregexpurllist' +regexpboollist = 'name=exceptionuseragent,messageno=610,path=/etc/e2guardian/lists/exceptionregexpuseragentlist' + +sitelist = 'name=refererexception,messageno=620,path=/etc/e2guardian/lists/refererexceptionsitelist' +ipsitelist = 'name=refererexception,messageno=620,path=/etc/e2guardian/lists/refererexceptionsiteiplist' +urllist = 'name=refererexception,messageno=620,path=/etc/e2guardian/lists/refererexceptionurllist' +sitelist = 'name=embededreferer,path=/etc/e2guardian/lists/embededreferersitelist' +ipsitelist = 'name=embededreferer,path=/etc/e2guardian/lists/embededreferersiteiplist' +urllist = 'name=embededreferer,path=/etc/e2guardian/lists/embededrefererurllist' + +#modification lists +regexpreplacelist = 'name=change,path=/etc/e2guardian/lists/urlregexplist' +regexpreplacelist = 'name=sslreplace,path=/etc/e2guardian/lists/sslsiteregexplist' + +#redirection lists +regexpreplacelist = 'name=redirect,path=/etc/e2guardian/lists/urlredirectregexplist' + +contentregexplist = '/etc/e2guardian/lists/contentregexplist' + +# local versions of lists + +#local banned +sitelist = 'name=localbanned,messageno=560,path=/etc/e2guardian/lists/localbannedsitelist' +#ipsitelist = 'name=localbanned,messageno=560,path=/etc/e2guardian/lists/localbannedsiteiplist' +#urllist = 'name=localbanned,messageno=561,path=/etc/e2guardian/lists/localbannedurllist' +#sitelist = 'name=localbannedssl,messageno=580,path=/etc/e2guardian/lists/localbannedsslsitelist' +#ipsitelist = 'name=localbannedssl,messageno=580,path=/etc/e2guardian/lists/localbannedsslsiteiplist' +searchlist = 'name=localbanned,messageno=581,path=/etc/e2guardian/lists/localbannedsearchlist' + +#local grey lists +sitelist = 'name=localgrey,path=/etc/e2guardian/lists/localgreysitelist' +#ipsitelist = 'name=localgrey,path=/etc/e2guardian/lists/localgreysiteiplist' +#urllist = 'name=localgrey,path=/etc/e2guardian/lists/localgreyurllist' +sitelist = 'name=localgreyssl,path=/etc/e2guardian/lists/localgreysslsitelist' +#ipsitelist = 'name=localgreyssl,path=/etc/e2guardian/lists/localgreysslsiteiplist' + +#local exception lists +sitelist = 'name=localexception,messageno=662,path=/etc/e2guardian/lists/localexceptionsitelist' +#ipsitelist = 'name=localexception,messageno=662,path=/etc/e2guardian/lists/localexceptionsiteiplist' +#urllist = 'name=localexception,messageno=663,path=/etc/e2guardian/lists/localexceptionurllist' + + +# Filetype filtering +# +# Allow bannedregexpurllist with grey list mode +# +# The following option is replaced by storyboard logic +# bannedregexwithblanketblock = off +# +# The following option is replaced by storyboard logic +#blockdownloads = off + +# Phrase filtering additional mime types (by default text/*) +# textmimetypes = 'application/xhtml+xml,application/xml,application/json,application/javascript,application/x-javascript' + +# Uncomment the two lines below if want to only allow extentions/mime types in these lists +# You will also need to uncomment the checkfiletype function in site.story to enable this +#fileextlist = 'name=exceptionextension,path=/etc/e2guardian/lists/exceptionextensionlist' +#mimelist = 'name=exceptionmime,path=/etc/e2guardian/lists/exceptionmimelist' +# +# Use the following lists to block specific kinds of file downloads. +# +fileextlist = 'name=bannedextension,messageno=900,path=/etc/e2guardian/lists/bannedextensionlist' +mimelist = 'name=bannedmime,messageno=800,path=/etc/e2guardian/lists/bannedmimetypelist' +# +# In either file filtering mode, the following list can be used to override +# MIME type & extension blocks for particular domains & URLs (trusted download sites). +# +sitelist = 'name=exceptionfile,path=/etc/e2guardian/lists/exceptionfilesitelist' +ipsitelist = 'name=exceptionfile,path=/etc/e2guardian/lists/exceptionfilesiteiplist' +urllist = 'name=exceptionfile,path=/etc/e2guardian/lists/exceptionfileurllist' + +# POST protection (web upload and forms) +# does not block forms without any file upload, i.e. this is just for +# blocking or limiting uploads +# measured in kibibytes after MIME encoding and header bumph +# use 0 for a complete block +# use higher (e.g. 512 = 512Kbytes) for limiting +# use -1 for no blocking +# NOTE: POST PROTECTION IS NOT YET IMPLIMENTED IN V5 +#maxuploadsize = 512 +#maxuploadsize = 0 +maxuploadsize = -1 + +# Categorise without blocking: +# Supply categorised lists here and the category string shall be logged against +# matching requests, but matching these lists does not perform any filtering +# action. +#sitelist = 'name=log,path=/etc/e2guardian/lists/logsitelist' +#ipsitelist = 'name=log,path=/etc/e2guardian/lists/logsiteiplist' +#urllist = 'name=log,path=/etc/e2guardian/lists/logurllist' +#regexpboollist = 'name=log,path=/etc/e2guardian/lists/logregexpurllist' + +# Outgoing HTTP header rules: +# Optional lists for blocking based on, and modification of, outgoing HTTP +# request headers. Format for headerregexplist is one modification rule per +# line, similar to content/URL modifications. Format for +# bannedregexpheaderlist is one regular expression per line, with matching +# headers causing a request to be blocked. +# Headers are matched/replaced on a line-by-line basis, not as a contiguous +# block. +# Use for example, to remove cookies or prevent certain user-agents. +regexpreplacelist = 'name=headermods,path=/etc/e2guardian/lists/headerregexplist' +regexpboollist = 'name=bannedheader,path=/etc/e2guardian/lists/bannedregexpheaderlist' +regexpboollist = 'name=exceptionheader,path=/etc/e2guardian/lists/exceptionregexpheaderlist' +# used for Youtube add cookies etc +regexpreplacelist = 'name=addheader,path=/etc/e2guardian/lists/addheaderregexplist' + +#Virus checking exceptions - matched urls will not be virus checked +#mimelist = 'name=exceptionvirus,path=/etc/e2guardian/lists/contentscanners/exceptionvirusmimetypelist' +#fileextlist = 'name=exceptionvirus,path=/etc/e2guardian/lists/contentscanners/exceptionvirusextensionlist' +#sitelist = 'name=exceptionvirus,path=/etc/e2guardian/lists/contentscanners/exceptionvirussitelist' +#ipsitelist = 'name=exceptionvirus,path=/etc/e2guardian/lists/contentscanners/exceptionvirussiteiplist' +#urllist = 'name=exceptionvirus,path=/etc/e2guardian/lists/contentscanners/exceptionvirusurllist' + +# Weighted phrase mode +# Optional; overrides the weightedphrasemode option in e2guardian.conf +# for this particular group. See documentation for supported values in +# that file. +#weightedphrasemode = 0 + +# Naughtiness limit +# This the limit over which the page will be blocked. Each weighted phrase is given +# a value either positive or negative and the values added up. Phrases to do with +# good subjects will have negative values, and bad subjects will have positive +# values. See the weightedphraselist file for examples. +# As a guide: +# 50 is for young children, 100 for old children, 160 for young adults. +naughtynesslimit = 50 + +# Search term blocking +# Search terms can be extracted from search URLs and filtered using one or +# both of two different methods. + +# Method 1 is that developed by Protex where specific +# search terms are contained in a bannedsearchlist. +# (localbannedsearchlist and bannedsearchoveridelist can be used to suppliment +# and overide this list as required.) +# These lists contain banned search words combinations on each line. +# Words are separated by '+' and must be in sorted order within a line. +# so to block 'sexy girl' then the list must contain the line +# girl+sexy +# and this will block both 'sexy girl' and 'girl sexy' +# To use this method, the searchregexplist must be enabled and the bannedsearchlist(s) defined + +# Method 2 is uses the +# bannedphraselist, weightedphraselist and exceptionphraselist, with a separate +# threshold for blocking than that used for normal page content. +# To do this, the searchregexplist must be enabled and searchtermlimit +# must be greater than 0. + +# +# Search engine regular expression list (need for both options) +# List of regular expressions for matching search engine URLs. It is assumed +# that the search terms themselves will be contained in the +# of output of each expression. +regexpreplacelist = 'name=searchterms,path=/etc/e2guardian/lists/searchregexplist' +# +# Banned Search Term list(s) for option 1 +searchlist = 'name=banned,path=/etc/e2guardian/lists/bannedsearchlist' +searchlist = 'name=override,path=/etc/e2guardian/lists/bannedsearchoveridelist' + + +# Search term limit (for Option 2) +# The limit over which requests will be blocked for containing search terms +# which match the weightedphraselist. This should usually be lower than the +# 'naughtynesslimit' value above, because the amount of text being filtered +# is only a few words, rather than a whole page. +# This option must be uncommented if searchregexplist is uncommented. +# A value of 0 here indicates that search terms should be extracted, +# but no phrase filtering should be performed on the resulting text. +#searchtermlimit = 0 +# +# Search term phrase lists (for Option 2) +# If the three lines below are uncommented, search term blocking will use +# the banned, weighted & exception phrases from these lists, instead of using +# the same phrase lists as for page content. This is optional but recommended, +# as weights for individual phrases in the "normal" lists may not be +# appropriate for blocking when those phrases appear in a much smaller block +# of text. +# Please note that all or none of the below should be uncommented, not a +# mixture. +# NOTE: these are phrase lists and still use the old style defines +#bannedsearchtermlist = '/etc/e2guardian/lists/bannedsearchtermlist' +#weightedsearchtermlist = '/etc/e2guardian/lists/weightedsearchtermlist' +#exceptionsearchtermlist = '/etc/e2guardian/lists/exceptionsearchtermlist' + +# Category display threshold +# This option only applies to pages blocked by weighted phrase filtering. +# Defines the minimum score that must be accumulated within a particular +# category in order for it to show up on the block pages' category list. +# All categories under which the page scores positively will be logged; those +# that were not displayed to the user appear in brackets. +# +# -1 = display only the highest scoring category +# 0 = display all categories (default) +# > 0 = minimum score for a category to be displayed +categorydisplaythreshold = 0 + +# Embedded URL weighting +# When set to something greater than zero, this option causes URLs embedded within a +# page's HTML (from links, image tags, etc.) to be extracted and checked against the +# bannedsitelist and bannedurllist. Each link to a banned page causes the amount set +# here to be added to the page's weighting. +# The behaviour of this option with regards to multiple occurrences of a site/URL is +# affected by the weightedphrasemode setting. +# +# NB: Currently, this feature uses regular expressions that require the PCRE library. +# As such, it is only available if you compiled e2guardian with '--enable-pcre=yes'. +# You can check compile-time options by running 'e2guardian -v'. +# +# Set to 0 to disable. +# Defaults to 0. +# WARNING: This option is highly CPU intensive! +embeddedurlweight = 0 + +# Temporary Denied Page Bypass +# This provides a link on the denied page to bypass the ban for a few minutes. To be +# secure it uses a random hashed secret generated at daemon startup. You define the +# number of seconds the bypass will function for before the deny will appear again. +# To allow the link on the denied page to appear you will need to edit the template.html +# or e2guardian.pl file for your language. +# 300 = enable for 5 minutes +# 0 = disable ( defaults to 0 ) +# -1 - depreciated - for backward compatability enables cgibypass with bypassversion 1 +bypass = 0 + +# Byapss version 2 is experimental, provide a secure cgi communication (see notes/cgi_bypass documentation) +# + +# Bypass version +# can be 1 or 2 +# Always use v2 unless you have old style cgi hash generation in use +# Default is 1 +# bypassversion = 2 + +# cgibypass - Use a separate program/CGI to (in v1 generate) or (in v2 validate) link +# 'on' or 'off' (default) +# cgibypass = 'off' + +# Temporary Denied Page Bypass Secret Key +# Rather than generating a random key you can specify one. It must be more than 8 chars. +# '' = generate a random one (recommended and default) +# 'Mary had a little lamb.' = an example +# '76b42abc1cd0fdcaf6e943dcbc93b826' = an example +bypasskey = '' + +# magic key for cgi bypass v2 - used to sign communications between e2g and cgi +# default is blank +#cgikey = 'you must change this text in order to be secure' + +# Users will not be able to bypass sites/urls in these lists +sitelist = 'name=bannedbypass,messageno=500,path=/etc/e2guardian/lists/bannedsitelistwithbypass' +#ipsitelist = 'name=bannedbypass,messageno=500,path=/etc/e2guardian/lists/bannedsiteiplistwithbypass' +#urllist = 'name=bannedbypass,messageno=501,path=/etc/e2guardian/lists/bannedurllistwithbypass' + +# Infection/Scan Error Bypass +# Similar to the 'bypass' setting, but specifically for bypassing files scanned and found +# to be infected, or files that trigger scanner errors - for example, archive types with +# recognised but unsupported compression schemes, or corrupt archives. +# The option specifies the number of seconds for which the bypass link will be valid. +# 300 = enable for 5 minutes +# 0 = disable (default) +# -1 - depreciated - for backward compatability enables cgiinfectionbypass with bypassversion 1 +infectionbypass = 0 + +# cgiinfectionbypass - Use a separate program/CGI to (v1 generate) or (v2 validate) link +# 'on' or 'off' (default) +# cgiinfectionbypass = 'off' + +# Infection/Scan Error Bypass Secret Key +# Same as the 'bypasskey' option, but used for infection bypass mode. +infectionbypasskey = '' + +# Infection/Scan Error Bypass on Scan Errors Only +# Enable this option to allow infectionbypass links only when virus scanning fails, +# not when a file is found to contain a virus. +# on = enable (default and highly recommended) +# off = disable +infectionbypasserrorsonly = on + +# Disable content scanning +# If you enable this option you will disable content scanning for this group. +# Content scanning primarily is AV scanning (if enabled) but could include +# other types. +# (on|off) default = off. +disablecontentscan = off + +# Disable content scanning with error (timeout, AV crash, etc) +# If you enable this option you will allow object with an unexpected result +# Content scanning primarily is AV scanning (if enabled) but could include +# other types. +# With "on" you can allow INFECTED objects +# (on|off) default = off. (default and highly recommended) +disablecontentscanerror = off + +# If 'on' exception sites, urls, users etc will be scanned +# This is probably not desirable behavour as exceptions are +# supposed to be trusted and will increase load. +# Correct use of grey lists are a better idea. +# (on|off) default = off +contentscanexceptions = off + +# Auth plugins +# Enable Deep URL Analysis +# When enabled, DG looks for URLs within URLs, checking against the bannedsitelist and +# bannedurllist. This can be used, for example, to block images originating from banned +# sites from appearing in Google Images search results, as the original URLs are +# embedded in the thumbnail GET requests. +# (on|off) default = off +deepurlanalysis = off + +# reportinglevel +# +# -1 = log, but do not block - Stealth mode +# 0 = just say 'Access Denied' +# 1 = report why but not what denied phrase +# 2 = report fully +# 3 = use HTML template file (accessdeniedaddress ignored) - recommended +# +# If defined, this overrides the global setting in e2guardian.conf for +# members of this filter group. +# +reportinglevel = 3 + +# accessdeniedaddress is the address of your web server to which the cgi +# e2guardian reporting script was copied. Only used in reporting levels +# 1 and 2. +# +# This webserver must be either: +# 1. Non-proxied. Either a machine on the local network, or listed as an +# exception in your browser's proxy configuration. +# 2. Added to the exceptionsitelist. Option 1 is preferable; this option is +# only for users using both transparent proxying and a non-local server +# to host this script. +# +#accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN/cgi-bin/e2guardian.pl' + +# HTML Template override +# If defined, this specifies a custom HTML template file for members of this +# filter group, overriding the global setting in e2guardian.conf. This is +# only used in reporting level 3. +# +# The default template file path is //template.html +# e.g. /usr/share/e2guardian/languages/ukenglish/template.html when using 'ukenglish' +# language. +# +# This option generates a file path of the form: +# // +# e.g. /usr/share/e2guardian/languages/ukenglish/custom.html +# +#htmltemplate = 'custom.html' + +#Template for use to report network issues and sites which are not responding +# The default template file path is //neterr_template.html +# e.g. /usr/share/e2guardian/languages/ukenglish/neterr_template.html when using 'ukenglish' +# language. +#neterrtemplate = 'custom_neterr_template.html' + +# Non standard delimiter (only used with accessdeniedaddress) +# To help preserve the full banned URL, including parameters, the variables +# passed into the access denied CGI are separated using non-standard +# delimiters. This can be useful to ensure correct operation of the filter +# bypass modes. Parameters are split using "::" in place of "&", and "==" in +# place of "=". +# Default is enabled, but to go back to the standard mode, disable it. + +#nonstandarddelimiter = off + +# Email reporting - original patch by J. Gauthier + +# Use SMTP +# If on, will enable system wide events to be reported by email. +# need to configure mail program (see 'mailer' in global config) +# and email recipients +# default usesmtp = off +usesmtp = off #NOT YET TESTED + +# mailfrom +# who the email would come from +# example: mailfrom = 'e2guardian@mycompany.com' +mailfrom = '' + +# avadmin +# who the virus emails go to (if notify av is on) +# example: avadmin = 'admin@mycompany.com' +avadmin = '' + +# contentdmin +# who the content emails go to (when thresholds are exceeded) +# and contentnotify is on +# example: contentadmin = 'admin@mycompany.com' +contentadmin = '' + +# avsubject +# Subject of the email sent when a virus is caught. +# only applicable if notifyav is on +# default avsubject = 'e2guardian virus block' +avsubject = 'e2guardian virus block' + +# content +# Subject of the email sent when violation thresholds are exceeded +# default contentsubject = 'e2guardian violation' +contentsubject = 'e2guardian violation' + +# notifyAV +# This will send a notification, if usesmtp/notifyav is on, any time an +# infection is found. +# Important: If this option is off, viruses will still be recorded like a +# content infraction. +notifyav = off + +# notifycontent +# This will send a notification, if usesmtp is on, based on thresholds +# below +notifycontent = off + +# thresholdbyuser +# results are only predictable with user authenticated configs +# if enabled the violation/threshold count is kept track of by the user +thresholdbyuser = off + +#violations +# number of violations before notification +# setting to 0 will never trigger a notification +violations = 0 + +#threshold +# this is in seconds. If 'violations' occur in 'threshold' seconds, then +# a notification is made. +# if this is set to 0, then whenever the set number of violations are made a +# notifaction will be sent. +threshold = 0 + +#NOTE to enable SSL MITM or NON-MITM SSL CERT checking +# enablessl must be defined as 'yes' in e2guardian.conf + +#SSL certificate checking +# Check that ssl certificates for servers on https connections are valid +# and signed by a ca in the configured path +# ONLY for connections that are NOT MITM +#sslcertcheck = off - NOT implimented in V5 yet + +#SSL man in the middle +# Forge ssl certificates for all non-exception sites, decrypt the data then re encrypt it +# using a different private key. Used to filter ssl sites +sslmitm = off + +#Limit SSL MITM to sites in greysslsitelist(s) +# ignored if sslmitm is off +# SSL sites not matching greysslsitelist will be treat as if sslmitm is off. +# The following option is replaced by storyboard logic +#onlymitmsslgrey = off - ignored in V5 + +# Enable MITM site certificate checking +# ignored if sslmitm is off +# default (recommended) is 'on' +mitmcheckcert = on + +#Do not check ssl certificates for sites listed +# Can be used to allow sites with self-signed or invalid certificates +# or to reduced CPU load by not checking certs on heavily used sites (e.g. Google, Bing) +# Use with caution! +# Ignored if mitmcheckcert is 'off' +#nocheckcertsitelist = '/etc/e2guardian/lists/nocheckcertsitelist' +sitelist = 'name=nocheckcert,path=/etc/e2guardian/lists/nocheckcertsitelist' +ipsitelist = 'name=nocheckcert,path=/etc/e2guardian/lists/nocheckcertsiteiplist' +# + +# Auto switch to MITM with upstream connection error or to deliver block page +# ignored if sslmitm is off +# To revert to v4 type behavour switch this off +# Default is 'on' +# automitm = on diff --git a/config/e2guardian/examplef1.story b/config/e2guardian/examplef1.story new file mode 100644 index 0000000..a4ea505 --- /dev/null +++ b/config/e2guardian/examplef1.story @@ -0,0 +1,48 @@ +.Include +.Include + +# Add any altered functions for this filtergroup here +# They will overwrite library or site level definitions + +# To allow unfiltered access to this group +# uncomment next 4 lines +#function(checkrequest) +#if(true) return setexception +#function(thttps-checkrequest) +#if(true) return setexception + +# To block all access to this group +# uncomment next 4 lines +#function(checkrequest) +#if(true,,105) return setblock +#function(sslexceptioncheck) +#function(localsslcheckrequest) + +# Note: Blanket blocks are checked after exceptions +# and can be used to make a 'walled garden' filtergroup + +# To create blanket block for http +# uncomment next line and one condition line. +#function(checkblanketblock) +#if(true,,502) return setblock # = ** total blanket +#if(siteisip,,505) return setblock # = *ip ip blanket + +# To create blanket block for SSL +# uncomment next line and one condition line. +#function(sslcheckblanketblock) +#if(true,,506) return setblock # = **s total blanket +#if(siteisip,,507) return setblock # = **ips ip blanket + +# To limit MITM to sslgreylist +# replaces onlymitmsslgrey e2guardianf1.conf option +# uncomment the next 2 lines +#function(sslcheckmitm) +#if(true) return sslcheckmitmgreyonly + + +# SNI checking - overrides default action when no SNI or TSL is present on a +# THTTPS connection +# To allow (tunnell) non-tls and/or non-sni connections uncomment the next 3 lines +#function(checksni) +#ifnot(tls,,511) return setexception # change to setblock to block only non-tls +#ifnot(hassniset,,512) return setexception diff --git a/config/e2guardian/languages/arspanish/fancydmtemplate.html b/config/e2guardian/languages/arspanish/fancydmtemplate.html new file mode 100644 index 0000000..0f79f6b --- /dev/null +++ b/config/e2guardian/languages/arspanish/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/arspanish/messages b/config/e2guardian/languages/arspanish/messages new file mode 100644 index 0000000..65beb6b --- /dev/null +++ b/config/e2guardian/languages/arspanish/messages @@ -0,0 +1,119 @@ +# e2guardian messages file in AR Spanish +# Translated by Roberto Quiroga +"0","Message number absent" # needs translation +"1","Acceso Denegado" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Su dirección IP no esta autorizada a visitar: " +"101","Su dirección IP no esta autorizada navegar." +"102","El usuario no esta autorizado a visitar: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","La URL solicitada esta mal formada." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Se encontró la frase no permitida: " +"301","Se encontró una frase no permitida" +"400","Combinación de frases no permitida: " +"401","Combinación de frases no permitida." +"402","Límite de ponderación de frases de " +"403","Límite de ponderación de frases excedido" +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Sitio no permitido: " +"501","URL no permitida: " +"502","El sitio no esta en la lista permitida por el bloqueo activo." +"503","Banned Regular Expression URL: " +"503","URL bloqueada por Expresion Regular: " +"504","URL bloqueada por Expresion Regular." +"505","Solo se suministro la direccion IP y el bloqueo esta activo." +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Se encontró una excepción por IP de origen." +"601","Se encontró una excepción por usuario de origen." +"602","Se encontró una excepción por lugar." +"603","Se encontró una excepción por URL." +"604","Se encontró una excepción por la frase: " +"605","Se encontró una excepción por la combinación de frases: " +"606","Bypass URL excepción." +"607","Bypass cookie excepción." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +# 606,607 by Daniel Barron - corrections welcome +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","La subida esta bloqueada." +"701","Límite de subida excedido." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Clase MIME bloqueada: " +"900","Extension bloqueada: " +"1000","Clasificación PICS excedida en el sitio indicado." +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/arspanish/neterr_template.html b/config/e2guardian/languages/arspanish/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/arspanish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/arspanish/template.html b/config/e2guardian/languages/arspanish/template.html new file mode 100644 index 0000000..97a00c0 --- /dev/null +++ b/config/e2guardian/languages/arspanish/template.html @@ -0,0 +1,38 @@ +e2guardian - Acceso Denegado + +

EL ACCESO HA SIDO DENEGADO -USER-

+
EL ACCESO A LA PAGINA:

+-URL- +

... ha sido denegado por la siguiente razón:

+-REASONGIVEN- +

Ud. esta viendo este mensaje de error porque la página a la que
+intenta acceder contiene, o esta clasificada como conteniendo,
+material que se considera inapropiado.
+

Si lo desea contacte al Administrador de Sistemas.
+ +

Powered by e2guardian +

+ + + diff --git a/config/e2guardian/languages/bulgarian/fancydmtemplate.html b/config/e2guardian/languages/bulgarian/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/bulgarian/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/bulgarian/messages b/config/e2guardian/languages/bulgarian/messages new file mode 100644 index 0000000..66fdce2 --- /dev/null +++ b/config/e2guardian/languages/bulgarian/messages @@ -0,0 +1,119 @@ +# e2guardian messages file in Bulgarian +# by Pavel Constantinov +"0","Message number absent" # needs translation +"1"," " +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100"," IP : " +"101"," IP ." +"102"," : " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200"," URL ." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300"," : " +"301"," ." +"400"," : " +"401"," ." +"402"," " +"403"," ." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500"," : " +"501"," URL: " +"502"," Blanket Block ." +"503"," URL : " +"504"," URL ." +"505"," Blanket IP Block IP address." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600"," IP ." +"601"," IP ." +"602"," ." +"603"," URL-." +"604"," : " +"605"," : " +"606","Bypass URL exception." +"607","Bypass cookie exception." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +# 606,607 by Daniel Barron - corrections welcome +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700"," ." +"701"," ." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800"," MIME: " +"900"," : " +"1000"," ." +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/bulgarian/neterr_template.html b/config/e2guardian/languages/bulgarian/neterr_template.html new file mode 100644 index 0000000..d2bb67e --- /dev/null +++ b/config/e2guardian/languages/bulgarian/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/bulgarian/template.html b/config/e2guardian/languages/bulgarian/template.html new file mode 100644 index 0000000..d63e349 --- /dev/null +++ b/config/e2guardian/languages/bulgarian/template.html @@ -0,0 +1,59 @@ + + + + + + e2guardian - Access Denied + + + +

+

+ÄÎÑÒÚÏÚÒ Å ÎÒÊÀÇÀÍ, -USER-

+ +
Äîñòúïúò äî ñòðàíèöàòà: +

-URL- +

... å îòêàçàí ïîðàäè ñëåäíàòà ïðè÷èíà: +

-REASONGIVEN-

+ +
+ + + +
+
Âèå âèæäàòå òàçè ãðåøêà, òúé êàòî ñòðàíèöàòà, êîÿòî ñå îïèòâàòå +äà +
âèäèòå, ñúäúðæà èëè å îçíà÷åíà êàòî ñúäúðæàùà íåïîäõîäÿù ìàòåðèàë.
+
+ +
+ + + +
Àêî èìàòå íÿêàêâè âúïðîñè, ñâúðæåòå ñå ñúñ ñâîÿ ICT êîîðäèíàòîð èëè +Ìðåæîâè ìåíèäæúð.
+ +
+

Powered by e2guardian

+ + + + diff --git a/config/e2guardian/languages/chinesebig5/fancydmtemplate.html b/config/e2guardian/languages/chinesebig5/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/chinesebig5/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/chinesebig5/messages b/config/e2guardian/languages/chinesebig5/messages new file mode 100644 index 0000000..addfd1f --- /dev/null +++ b/config/e2guardian/languages/chinesebig5/messages @@ -0,0 +1,120 @@ +# e2guardian messages file +# Translated to Traditional Chinese (Big5) by: Fr. Visminlu Vicente L. Chua, S.J. 2002-10-10 +# 2004-08-20: Translated 606 and 607 +# 2008/10/16: Translated 608, 609, 1100, 1101, 1200, 1210, 1220, 1230 +"0","Message number absent" # needs translation +"1","ڵŪ" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","zϥΪ IP }\sÚºG" +"101","zϥΪ IP }\sÚºC" +"102","zϥΪbWÙ¤\sÚºG" +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","zҽШD URL 榡~C" +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","QTyryG" +"301","QTyryC" +"400","QTզXyryG" +"401","QTզXyryC" +"402","[vyry" +"403","WL[vyryC" +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","QT}G" +"501","QT URLG" +"502","ͮġAÓ¨}buÕ¦WvÌ¡C" +"503","uWÜ¡voOQT URLG" +"504","uWÜ¡vQT URLC" +"505","Ï¥ IP ͮġAÓ¨Ó¦a}uO@IPa}C" +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","PÒ¥~Ȥ IP Û¦PC" +"601","PÒ¥~ȤbÛ¦PC" +"602","PÒ¥~}Û¦PC" +"603","PÒ¥~URLÛ¦PC" +"604","Ò¥~yryG" +"605","Õ¦XÒ¥~yryG" +"606","VL URL Ò¥~C" +"607","VL cookie Ò¥~C" +"608","yɲL URL Ò¥~C" +"609","Wܨҥ~ URL kXG" +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","TWÇ¡C" +"701","WLWÇ·C" +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","QTMIMEwAG" +"900","QTɦWG" +"1000","W}WLFPICSХܼhC" +"1100","frΤ}eC" +"1101","si" +"1200","еy - bUAÔ±y ..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Uü§¹²¦¡C}ly ..." +"1220","yC

Io̤UG " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","ɮפwsb" diff --git a/config/e2guardian/languages/chinesebig5/neterr_template.html b/config/e2guardian/languages/chinesebig5/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/chinesebig5/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/chinesebig5/template.html b/config/e2guardian/languages/chinesebig5/template.html new file mode 100644 index 0000000..cd90907 --- /dev/null +++ b/config/e2guardian/languages/chinesebig5/template.html @@ -0,0 +1,46 @@ + + +e2guardian - ¸T¤îŪ¨ú + + +

¸T¤î -USER- Ū¨ú

+
Ū¨úºô­¶¡G +

-URL- +

... ³Q¸T¤î¦]¤F¥H¤U²z¥Ñ¡G +

-REASONGIVEN- +

+ + + +
±z¬Ý¨ì³o­Ó¿ù»~¦]¬°±z­nŪ¨úªººô­¶¦³¤£¾A·íªº¸ê®Æ¡C +
+

+ + + +
¦p±z¦³°ÝÃD½ÐÁpµ¸ICT¨ó½Õ­û©Îºô¸ôºÞ²z­û¡C +
+

Powered by e2guardian +

+ + + diff --git a/config/e2guardian/languages/chinesegb2312/fancydmtemplate.html b/config/e2guardian/languages/chinesegb2312/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/chinesegb2312/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/chinesegb2312/messages b/config/e2guardian/languages/chinesegb2312/messages new file mode 100644 index 0000000..a329ee3 --- /dev/null +++ b/config/e2guardian/languages/chinesegb2312/messages @@ -0,0 +1,119 @@ +# e2guardian messages file in chinese gb2312 +# By Chen YiFei +"0","Message number absent" # needs translation +"1","ܾ" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100"," IP ַȨ web : " +"101"," IP ַȨ web ʡ" +"102","ʺȨ web ʡ " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200"," URL ʽд" +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","ֱֹĶ: " +"301","ֱֹĶ" +"400","ֱֹ϶: " +"401","ֱֹ϶" +"402"," ȨΪ: " +"403","Ȩơ" +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","ֹվ: " +"501","ֹ URL: " +"502","ȫֹЧվ㲢ڰС" +"503","ʽֹ URL: " +"504","ֱʽֹ URL" +"505","ȫֹʹ IP Чõַһ IP ַ" +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","ƥһĿͻ IP ַ" +"601","ƥһĿͻʺš" +"602","ƥһվ㡣" +"603","ƥһ URL" +"604","Ķ:" +"605","϶: " +"606","Bypass URL exception." +"607","Bypass cookie exception." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +# 606,607 by Daniel Barron - corrections welcome +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","ֹϴļ" +"701","ļϴ޶" +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","ֹ MIME : " +"900","ֹļչ: " +"1000","վ PICS ǩ" +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/chinesegb2312/neterr_template.html b/config/e2guardian/languages/chinesegb2312/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/chinesegb2312/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/chinesegb2312/template.html b/config/e2guardian/languages/chinesegb2312/template.html new file mode 100644 index 0000000..ab72bc4 --- /dev/null +++ b/config/e2guardian/languages/chinesegb2312/template.html @@ -0,0 +1,33 @@ +e2guardian - Access Denied + +

·ÃÎʱ»¾Ü¾ø -USER-

+
·ÃÎʸÃÍøÒ³:

+-URL- +

... ÒòÒÔÏÂÔ­Òò¶ø±»¾Ü¾ø:

+-REASONGIVEN- +

³öÏÖÕâ¸ö´íÎóÐÅÏ¢µÄÔ­ÒòÊÇÓÉÓÚÄúÆóͼ·ÃÎʵÄÍøÒ³º¬Óв»Êʵ±µÄÄÚÈÝ¡£
+

ÈçÓÐÈκÎÒÉÎÊ£¬ÇëÁªÏµÄúµÄ ICT Эµ÷ÈËÔ±»òÍø¹Ü¡£
+ +

Powered by e2guardian +

+ + + diff --git a/config/e2guardian/languages/czech/fancydmtemplate.html b/config/e2guardian/languages/czech/fancydmtemplate.html new file mode 100644 index 0000000..28296b7 --- /dev/null +++ b/config/e2guardian/languages/czech/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Stahuji -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/czech/messages b/config/e2guardian/languages/czech/messages new file mode 100644 index 0000000..4177961 --- /dev/null +++ b/config/e2guardian/languages/czech/messages @@ -0,0 +1,119 @@ +# DansGuardian messages file in Czech +# by Richard Bukovansky bukovansky@atcomp.cz +# updates,recode to utf8 by Jan Bubík bubik@acvyskov.cz +"0","Message number absent" # needs translation +"1","Přístup zamítnut" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","VaÅ¡i IP adrese není povoleno prohlížet: " +"101","VaÅ¡e IP adresa nemá povoleno prohlížení." +"102","VaÅ¡e uživatelské jméno nemá povoleno prohlížet: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","Požadované URL je Å¡patnÄ› zadáno." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Nalezena zakázaná fráze: " +"301","Nalezena zakázaná fráze." +"400","Nalezena zakázaná kombinace frází: " +"401","Nalezena zakázaná kombinace frází." +"402","Limit vážených frází: " +"403","Byl pÅ™ekroÄen limit pro vážené fráze." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Zakázaný webový server: " +"501","Zakázaná webová adresa: " +"502","CeloploÅ¡né blokování přístupu je aktivováno a tento webový server není povolen." +"503","Nalezena zakázaná webová adresa dle regularního výrazu: " +"504","Nalezena zakázaná webová adresa dle regularního výrazu." +"505","CeloploÅ¡né blokovaní IP adres je aktivováno a byla zadána IP adresa." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Nalezena IP adresa s vyjímkou." +"601","Nalezen uživatel s vyjímkou." +"602","Nalezen webový server s vyjímkou." +"603","Nalezena webová adresa s vyjímkou." +"604","Nalezena fráze s vyjímkou: " +"605","Nalezena kombinace frází s vyjímkou: " +"606","Nalezen uživatelem vyžádaný přístup k webové adrese." +"607","Nalezen uživatelem vyžádaný přístup k položce cookie." +"608","Nalezen uživatelem vyžádaný přístup ke Å¡kodlivému kódu." +"609","Nalezen regulární výraz s vyjímkou webové adresy: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Nahrávání souborů na web je zakázáno." +"701","Limit nahrávání souborů na web byl pÅ™ekroÄen." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Zakázaný typ obsahu: " +"900","Zakázaná přípona souboru: " +"1000","Byle pÅ™ekroÄena úroveň hodnocení PICS na tomto webovém serveru." +"1100","Detekován virus nebo Å¡kodlivý obsah." +"1101","Blokována reklama" +"1200","Prosím vyÄkejte - stahuji data k prověření..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Stahování dokonÄeno. Prověřuji..." +"1220","Prověřeno.

Pro stáhnutí klikněte zde: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","Soubor již neexistuje" diff --git a/config/e2guardian/languages/czech/neterr_template.html b/config/e2guardian/languages/czech/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/czech/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/czech/template.html b/config/e2guardian/languages/czech/template.html new file mode 100644 index 0000000..a67a3d5 --- /dev/null +++ b/config/e2guardian/languages/czech/template.html @@ -0,0 +1,42 @@ + +DansGuardian - Přístup zakázán + + + +

PŘÃSTUP ZAKÃZÃN -USER-

+
Přístup na tuto stránku:

+-URL- +

... byl zakázán z důvodu:

+-REASONGIVEN- +

Zobrazení tohoto chybového +hlášení způsobila stránka, na kterou jste se pokusil(a)
+pÅ™istoupit a obsahuje nebo je oznaÄena jako obsahující nepatÅ™iÄný materiál.

+Kategorizace obsahu: -CATEGORIES-
+

Máte-li nÄ›jaké dotazy, obraÅ¥te +se prosím na vaÅ¡eho správce sítÄ› Äi osobu pověřenou správou sítÄ›.
+

Powered by DansGuardian +

+ + + diff --git a/config/e2guardian/languages/danish/fancydmtemplate.html b/config/e2guardian/languages/danish/fancydmtemplate.html new file mode 100644 index 0000000..a65a2bd --- /dev/null +++ b/config/e2guardian/languages/danish/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/danish/messages b/config/e2guardian/languages/danish/messages new file mode 100644 index 0000000..0731f5b --- /dev/null +++ b/config/e2guardian/languages/danish/messages @@ -0,0 +1,120 @@ +# e2guardian messages file in Danish +# +# Translated by Peter Kilsgaard +"0","Message number absent" # needs translation +"1","Adgang ngtet" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Din IP address har ikke lov til at bruge internet: " +"101","Din IP address har ikke lov til at bruge internet." +"102","Dit brugernavn har ikke lov til at bruge internet: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","Den indtastede adresse er ikke valid." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Forbudt stning fundet: " +"301","Forbudt stning fundet." +"400","Forbudt stningskombination fundet: " +"401","Forbudt stningskombination fundet." +"402","Vgtede stningsgrnse p " +"403","Vgtede stningsgrnse overskredet." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Forbudt side: " +"501","Forbudt Adresse: " +"502","Total blokering er aktiveret og den forspurgte side er ikke p positiv listen." +"503","Forbudt ord i adressefelt: " +"504","Forbudt ord i adressefelt fundet." +"505","IP Blokering er aktiveret og den forspurgte side har IP ingen DNS navn." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Undtagelse PC IP match." +"601","Undtagelse brugernavn match." +"602","Undtagelse side match." +"603","Undtagelse adresse match." +"604","Undtagelses stning fundet: " +"605","Kombinations undtagelse stning fundet: " +"606","Bypass URL undtagelse." +"607","Bypass cookie undtagelse." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +# 606,607 by Daniel Barron - corrections welcome +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Web upload er forbudt." +"701","Web upload grnse overskredet." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Forbudt MIME Type: " +"900","Forbudt fil format: " +"1000","PICS niveau overskredet p den pgldende side." +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/danish/neterr_template.html b/config/e2guardian/languages/danish/neterr_template.html new file mode 100644 index 0000000..d2bb67e --- /dev/null +++ b/config/e2guardian/languages/danish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/danish/template.html b/config/e2guardian/languages/danish/template.html new file mode 100644 index 0000000..8abdf13 --- /dev/null +++ b/config/e2guardian/languages/danish/template.html @@ -0,0 +1,68 @@ + + + + + e2guardian - Access Denied + + + + + +

ADGANG NÆGTET -USER-

+


Adgang til denne side:

+

-URL- +

+

... er blevet nægtet på grund af:

+

-REASONGIVEN- +

+
+ + + + +
+

Denne meddelse kommer fordi, siden du forsøger at få + adgang til indeholder, eller er blevet katagoriseret som, uegnet + materiale .

+
+
+
+ + + + + +
+

Hvis du har spørgsmål til + ovennævnte,
bedes du kontakte netværksadministratoren

+
+
+

Powered by +e2guardian +

+

+
+

+ + diff --git a/config/e2guardian/languages/dutch/fancydmtemplate.html b/config/e2guardian/languages/dutch/fancydmtemplate.html new file mode 100644 index 0000000..a65a2bd --- /dev/null +++ b/config/e2guardian/languages/dutch/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/dutch/messages b/config/e2guardian/languages/dutch/messages new file mode 100644 index 0000000..ca01628 --- /dev/null +++ b/config/e2guardian/languages/dutch/messages @@ -0,0 +1,119 @@ +# e2guardian berichten in het Nederlands +# Door S.A. de Heer +# Updates door Eric Hameleers +"0","Message number absent" # needs translation +"1","Toegang geweigerd" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Uw IP adres mag niet websurfen: " +"101","Uw IP adres mag niet websurfen." +"102","Uw gebruikersnaam mag niet websurfen: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","De gevraagde URL is syntactisch incorrect." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Geblokkeerd woord gevonden: " +"301","Geblokkeerd woord gevonden." +"400","Geblokkerde combinatie van woorden gevonden: " +"401","Geblokkerde combinatie van woorden gevonden." +"402","Gewogen woorden limiet van: " +"403","Gewogen woorden limiet overschreden." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Geblokkeerde website: " +"501","Geblokkeerde URL: " +"502","Web blokkade is actief en deze website is niet in de toegangslijst." +"503","Geblokkeerde reguliere expressie in de URL: " +"504","Geblokkeerde reguliere expressie in de URL gevonden." +"505","IP adressen zijn geblokkeerd en dat adres is enkel een IP adres." +"506","SSL is geblokkeerd en deze website komt niet voor op de toegangslijsten." +"507","SSL IP adressen zijn geblokkeerd en dat adres is enkel een IP addres." +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Uitzonderings IP adres gevonden." +"601","Uitzonderings gebruiker gevonden." +"602","Uitzonderings website gevonden." +"603","Uitzonderings URL gevonden." +"604","Uitzonderings woord gevonden: " +"605","Uitzonderings combinatie van woorden gevonden: " +"606","URL omzeiling uitzondering." +"607","Cookie omzeiling uitzondering." +"608","Scan omzeiling URL uitzondering." +"609","Uitzondering reguliere expressie URL gevonden: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Uploaden via het web is geblokkerd." +"701","Web upload limiet overschreden." +"750","Bestands-download is geblokkeerd en dit MIME type komt niet voor op de goedkeuringslijst: " +"751","Bestands-download is geblokkeerd en dit bestand komt niet voor op de goedkeuringslijsten: " +"800","Geblokkeerd MIME Type: " +"900","Geblokkeerd bestandstype: " +"1000","'PICS labeling' niveau overschrijding op bovenvermelde site." +"1100","Virus of onbetamelijke inhoud ontdekt." +"1101","Advertentie geblokkeerd." +"1200","Geduld a.u.b. - bezig met downloaden om te scannen..." +"1201","Waarschuwing: bestand te groot om te scannen. Vermoedt u dat dit bestand groter is dan " +"1202",", ververs dan deze pagina om direct te downloaden." +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Compleet. Scan wordt gestart..." +"1220","Scan compleet.

Klik hier om te downloaden: " +"1221","Download compleet; bestand niet gescand.

Klik hier om te downloaden: " +"1222","Bestand te groot voor tussenopslag.

Klik hier om opnieuw te downloaden zonder scan: " +"1230","Bestand niet langer beschikbaar" diff --git a/config/e2guardian/languages/dutch/neterr_template.html b/config/e2guardian/languages/dutch/neterr_template.html new file mode 100644 index 0000000..d2bb67e --- /dev/null +++ b/config/e2guardian/languages/dutch/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/dutch/template.html b/config/e2guardian/languages/dutch/template.html new file mode 100644 index 0000000..63dd149 --- /dev/null +++ b/config/e2guardian/languages/dutch/template.html @@ -0,0 +1,87 @@ + + + +e2guardian - toegang geweigerd + + + + +

+ + + + + + + + + + + +
+ + De toegang werd geweigerd!! +
+ + -USER-  +
+ + YOUR ORG NAME + + + + Toegang tot de pagina: +

+ -URL- +

+ + ... werd geweigerd om de volgende reden: +

+ + -REASONGIVEN- + +

+ Categorieën: +

+ + -CATEGORIES- + +



+ U ziet deze melding omdat de pagina die u probeerde te benaderen, + materiaal lijkt te bevatten dat ongeschikt is om te bekijken, + of gemarkeerd is als ongeschikt om te bekijken. +

+ Als u hier vragen over heeft neem dan contact op met uw netwerkbeheerder. +



+ + Verzorgd door e2guardian +
+ + + + + + + diff --git a/config/e2guardian/languages/french/fancydmtemplate.html b/config/e2guardian/languages/french/fancydmtemplate.html new file mode 100644 index 0000000..40d40b7 --- /dev/null +++ b/config/e2guardian/languages/french/fancydmtemplate.html @@ -0,0 +1,181 @@ + + + + Téléchargement de -FILENAME- (-FILESIZE- octets) + + + + + + + + + diff --git a/config/e2guardian/languages/french/messages b/config/e2guardian/languages/french/messages new file mode 100644 index 0000000..a5992a2 --- /dev/null +++ b/config/e2guardian/languages/french/messages @@ -0,0 +1,122 @@ +# e2guardian messages file in French +# Translated by: Bernard Wanadoo and Jacques Theys +# Improvements by Jeanuel +# Improvements by Mathieu Parent (2011) +# +# ! Quote "'" changed by backquote "`" to avoid bad interpretation ! +"0","Message number absent" # needs translation +"1","Accès interdit" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","Accès interdit" +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Votre addresse IP n`est pas autorisée à naviguer sur le site : " +"101","Votre addresse IP n`est pas autorisée à naviguer." +"102","Votre compte utilisateur n`est pas autorisé à afficher le site : " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server`s SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","L`URL demandée n'est pas bien formée." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Phrase interdite : " +"301","Phrase interdite trouvée." +"400","Combinaison de mots interdite : " +"401","Combinaison de mots interdite trouvée." +"402","Limite de pondération " +"403","Limite de pondération dépassée." +"450","Terme de recherche interdit : " +"451","Terme de recherche interdit trouvé." +"452","Combinaison de termes de recherche interdite : " +"453","Combinaison de termes de recherche interdite trouvée." +"454","Limite de pondération de termes de recherche " +"455","Limite de pondération de termes de recherche dépassée." +"456","Exception de combinaison de termes de recherche autorisée : " +"457","Exception de terme de recherche autorisé : " +"500","Site interdit : " +"501","URL interdite : " +"502","Le mode liste blanche (Blanket Block) est actif et ce site n`est pas dans la liste autorisée, blanche ou grise." +"503","Expression régulière d`URL interdite : " +"504","Expression régulière d`URL interdite trouvée." +"505","Le mode liste blanche d`IPs (IP Blanket Block) est actif et cette addresse est une adresse IP uniquement." +"506","Le mode liste blanche SSL (SSL Blanket Block) est actif et ce site n`est pas dans la liste autorisée, blanche ou grise." +"507","Le mode liste blanche SSL d`IPs (SSL IP Blanket Block) est actif et cette addresse est une adresse IP uniquement." +"508","Expression régulière d`entète HTTP interdite : ", +"509","Expression régulière d`entète HTTP interdite trouvée." +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Exception d`adresse IP client trouvée." +"601","Exception d`utilisateur client trouvée." +"602","Exception de site trouvée : " +"603","Exception d`URL trouvée : " +"604","Exception de phrase trouvée : " +"605","Exception de combinaison de mots trouvée : " +"606","Exception d`URL sans controle trouvée." +"607","Exception de cookie sans controle trouvée." +"608","Exception d`URL sans inspection des logiciels malveillants trouvée." +"609","Exception d`expression régulière d'URL trouvée : " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local): " # needs translation +"663","URL (local): " # needs translation +"700","L`upload web est interdit." +"701","Dépassement de la limite d`upload Web." +"750","Le mode liste blanche de téléchargement (Blanket file download) est actif et ce type MIME n`est pas dans la liste blanche : " +"751","Le mode liste blanche de téléchargement (Blanket file download) est actif et ce fichier n`est pas dans la liste blanche." +"800","Type MIME interdit: " +"900","Type de fichier interdit : " +"1000","Niveau PICS depassé sur le site entier." +"1100","Logiciel malveillant détecté." +"1101","Publicité bloqué" +"1200","Veuillez patienter - téléchargement du fichier en cours ..." +"1201","Avertissement : fichier trop volumineux pour ètre inspecté. Si vous pensez que le fichier est plus volumineux que " +"1202",", raffraîchissez la page pour le télécharger directement." +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Téléchargement terminé. Inspection des logiciels malveillants en cours ..." +"1220","Inspection du fichier terminée.

Cliquez ici pour le télécharger : " +"1221","Télécharge terminé. fichier non inspecté.

Cliquez ici pour le télécharger : " +"1222","Fichier trop volumineux pour ètre mis en cache.

Cliquez ici pour le télécharger à nouveau, sans inspection des logiciels malveillants : " +"1230","Le fichier n`est plus disponible" diff --git a/config/e2guardian/languages/french/neterr_template.html b/config/e2guardian/languages/french/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/french/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/french/template.html b/config/e2guardian/languages/french/template.html new file mode 100644 index 0000000..7db05e8 --- /dev/null +++ b/config/e2guardian/languages/french/template.html @@ -0,0 +1,89 @@ + + + +e2guardian - Acc&eagrav;s interdit + + + + +

+ + + + + + + + + + + +
+ + Accès interdit ! +
+ + -USER-  +
+ + YOUR ORG NAME + + + + L'accès à la page : +

+ -URL- +

+ + ... a été interdit pour les raisons suivantes : +

+ + -REASONGIVEN- + +

+ Catégories: +

+ + -CATEGORIES- + +



+ Vous voyez ce message parce que vous tentez d'accéder à + une page qui contient, ou est réputée contenir des élements + qui ont été déclarés inappropriés. +

+ Pour toute question, contactez votre administrateur réseau. +



+ + Propulsé par e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/german/fancydmtemplate.html b/config/e2guardian/languages/german/fancydmtemplate.html new file mode 100644 index 0000000..45386c8 --- /dev/null +++ b/config/e2guardian/languages/german/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Herunterladen -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/german/messages b/config/e2guardian/languages/german/messages new file mode 100644 index 0000000..2ed0b6d --- /dev/null +++ b/config/e2guardian/languages/german/messages @@ -0,0 +1,119 @@ +# e2guardian 3 messages file in German +# +# Translated and adapted to Unicode by Peter Vollmar, Klaus Tachtler. +"0","Message number absent" # needs translation +"1","Zugriff verweigert" +"10","IP-Limit erreicht. Limit bei " +"11"," IP-Limit wurde gesetzt." +"50"," von " +"51","VERTRAUENSWÜRDIG" +"52","VERWEIGERT" +"53","INFIZIERT" +"54","ÜBERPRÜFT" +"55","INHALT MODIFIZIERT" +"56","URL MODIFIZIERT" +"57","HEADER MODIFIZIERT" +"58","HEADER HINZUGEFÜGT" +"59","NETZWERKFEHLER" +"70","SSL SEITE" +"71","IP-Limit" +"72","Inhalt überprüfen" +"100","Ihre Arbeitsstation hat keine Erlaubnis zum Surfen auf: " +"101","Ihre Arbeitsstation hat keine Erlaubnis zum Surfen" +"102","Ihr Benutzername hat keine Erlaubnis zum Surfen auf: " +"103","Client-IP geblockt" +"104","Lokation geblockt" +"105","Benutzer geblockt" +"110","Proxy authentication error" # needs translation +"121","Von Ihrer Lokation aus ist nur ein begrenzter Zugriff möglich" +"150","Das vom Server ausgelieferte Zertifikat ist ungültig" +"151","Es konnte keine SSL-Verbindung aufgebaut werden" +"152","Es wurde kein Zertifikat gefunden" +"153","Es konnte kein privater Schlüssel geladen werden" +"154","Es konnte keine Verbindung zum Client hergestellt werden" +"155","Es wurde kein SSL-Zertifikat vom Server ausgeliefert" +"156","Das vom Server ausgelieferte SSL-Zertifikat, passt nicht zum Namen der Domain" +"157","Es konnte kein Verbindung zum lokalen Proxy hergestellt werden" +"158","Verbindungsaufbau fehlgeschlagen" +"159","Es konnte kein Verbindung zum Proxy-Server aufgebaut werden" +"160","Die SSL-Verbindung zum Server konnte nicht hergestellt werden" +"200","Die angeforderte URL ist ungültig" +"201","Antwort vom Upstream-Proxy nicht möglich (Zeitüberschreitung)" +"202","Antwort vom Upstream-Proxy nicht möglich (Fehler)" +"203","Die angeforderte Seite antwortet nicht" +"204"," - Bitte versuchen Sie es später noch einmal" +"205","Upstream-Proxy antwortet nicht (Netzwerkfehler)" +"206"," - Bitte versuchen Sie es später noch einmal" +"207","Die angeforderte Seite existiert nicht" +"208","Die angeforderte Seite hat keine IPv4-Adresse" +"209","Vorübergehender Ausfall des DNS-Dienstes - Bitte versuchen Sie es erneut" +"210","DNS-Dienstfehler - Bitte versuchen Sie es später noch einmal" +"300","Verbotener Ausdruck gefunden: " +"301","Verbotener Ausdruck gefunden" +"400","Verbotene Kombination von Ausdrücken gefunden: " +"401","Verbotene Kombination von Ausdrücken gefunden" +"402","Gewichtete Ausdrucksbeschränkung von " +"403","Gewichtete Ausdrucksbeschränkung überschritten" +"450","Verbotener Suchausdruck gefunden: " +"451","Verbotener Suchausdruck gefunden." +"452","Verbotene Suchausdrücke gefunden: " +"453","Verbotene Suchausdrücke gefunden." +"454","Gewichtetes Suchausdruck-Limit erreicht: " +"455","Gewichtetes Suchausdruck-Limit wurde erreicht." +"456","Kombination von erlaubten Ausdrücken wurde gefunden: " +"457","Erlaubter Ausdruck gefunden: " +"500","Verbotene Seite: " +"501","Verbotene URL: " +"502","Totalsperre für Nur-IP-Adressen aktiv, diese Seite ist nicht auf der Erlaubt-Liste" +"503","Aufgrund von regulären Ausdrücken verbotene URL: " +"504","Aufgrund von regulären Ausdrücken verbotene URL gefunden" +"505","Totalsperre für IP-Adressen aktiv, diese Adresse ist nur eine IP." +"506","HTTPS-Verbindungen sind nur zu vertrauenswürdige Seiten erlaubt." +"507","HTTPS-Verbindungen zu IP-Adressen sind nicht erlaubt." +"508","Verbindungen mit diesem Browser (oder dieser Anwendungen) sind nicht gestattet: " +"509","Verbindungen mit diesem Browser (oder dieser Anwendungen) sind nicht gestattet." +"510","Geblockte Seite (IP) " +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Geblockte HTTPS-Seite: " +"521","Geblockte Ausdrücke: " +"522","Geblockter Benutzer-Agent: " +"560","Geblockte Seite (lokal): " +"561","Geblockte URL (lokal): " +"580","Geblockte HTTPS-Seite (lokal): " +"581","Geblockte Ausdrücke (lokal): " +"600","Übereinstimmung mit Client-IP in Ausnahmeliste" +"601","Übereinstimmung mit Client-Benutzer in Ausnahmeliste" +"602","Übereinstimmung mit Seite in Ausnahmeliste" +"603","Übereinstimmung mit URL in Ausnahmeliste" +"604","Ausnahme-Ausdruck gefunden: " +"605","Kombination von Ausnahme Ausdrücken gefunden: " +"606","Umgehungs-URL gefunden" +"607","Umgehungs-Cookie gefunden" +"608","Überprüfe Umgehungs-URL Ausnahme." +"609","Ausnahme von regular expression URL gefunden: " +"610","Benutzer-Agent Suchmuster-Abgleich: " +"620","Ursprungsseite gefunden: " +"630","URL gefunden in " +"631"," erlaubte Lokations-Liste" +"632","Lokation überschreibt die Liste der zulässigen Seiten" +"662","Seite (lokal)." +"663","URL (lokal)." +"700","Web-Upload verboten" +"701","Web-Upload-Schwellwert erreicht" +"750","Globale Datei-Download Überprüfung ist aktiv und dieser Datei-Typ (MIME type) ist nicht auf der Erlaubt-Liste: " +"751","Globale Datei-Download Überprüfung ist aktiv und diese Datei ist nicht auf der Erlaubt-Liste" +"800","Verbotener Datei-Typ (MIME Type): " +"900","Verbotene Datei-Erweiterung: " +"1000","PICS-Kennzeichnungsschwellwert überschritten" +"1100","Ein Virus oder unerlaubter Inhalt wurde gefunden." +"1101","Werbung blockiert" +"1200","Bitte warten - die heruntergeladene Datei wird überprüft..." +"1201","Warnung: Datei ist zu gross um überprüft zu werden. Wenn Sie glauben das die Datei größer als " +"1202"," ist, rufen Sie die Seite erneut auf, um ein direktes herunterladen durchzuführen." +"1203","WARNUNG: Es konnte keine Inhaltsüberprüfung durchgeführt werden!" +"1210","Herunterladen abgeschlossen. Starte Überprüfung..." +"1220","Überprüfung abgeschlossen.

Zum herunterladen hier klicken: " +"1221","Herunterladen abgeschlossen. Datei konnte nicht überprüft werden.

Zum herunterladen hier klicken: " +"1222","Datei zu gross zum zwischenspeichern.

Zum erneuten herunterladen, OHNE Überprüfung, hier klicken: " +"1230","Die Datei wurde bereits abgerufen und ist daher nicht mehr gespeichert!" diff --git a/config/e2guardian/languages/german/neterr_template.html b/config/e2guardian/languages/german/neterr_template.html new file mode 100644 index 0000000..9d15c61 --- /dev/null +++ b/config/e2guardian/languages/german/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Laden der Webseite nicht möglich + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Ups! Es gab ein Problem beim Aufruf dieser Seite:


+
+ -URL- +

+ Grund
+
+ -REASONGIVEN- +


+

Ihre Details:

+ Benutzer: -USER-   Gruppe: -FILTERGROUP-   IP: -IP- +


+ +Zurück zur vorherigen Seite +
+
+ + diff --git a/config/e2guardian/languages/german/template.html b/config/e2guardian/languages/german/template.html new file mode 100644 index 0000000..3bf6df8 --- /dev/null +++ b/config/e2guardian/languages/german/template.html @@ -0,0 +1,77 @@ + + + +e2guardian - Zugriff verweigert + + + + + +

+ + + + + + + + + + + +
+ + Zugriff verweigert! +
+ + -USER-  +
+ + IHRE FIRMA + + + + Der Zugriff auf die Seite +

+ -URL- +

+ + wurde mit folgender Begründung verweigert: +

+ + -REASONLOGGED- + +



+ Sie sehen diese Fehlermeldung, weil die von Ihnen gewünschte Seite unangebrachte Inhalte aufweist oder als solche gekennzeichnet ist. +

+ Bei Fragen oder Beschwerden wenden Sie sich bitte an Ihren Netzwerkadministrator. +



+ + Powered by e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/hebrew/fancydmtemplate.html b/config/e2guardian/languages/hebrew/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/hebrew/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/hebrew/messages b/config/e2guardian/languages/hebrew/messages new file mode 100644 index 0000000..cad5268 --- /dev/null +++ b/config/e2guardian/languages/hebrew/messages @@ -0,0 +1,118 @@ +# e2guardian messages file in Hebrew +# by Nitzo Tomer +"0","Message number absent" # needs translation +"1"," " +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100"," -IP : " +"101"," -IP ." +"102"," : " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200"," ." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300"," : " +"301"," ." +"400"," : " +"401"," ." +"402"," " +"403"," ." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500"," : " +"501"," : " +"502"," " ." +"503"," : " +"504"," ." +"505"," " ." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600"," IP ." +"601"," ." +"602"," ." +"603"," ." +"604"," : " +"605"," : " +"606"," ." +"607"," ." +"608"," URL ." +"609"," URL : " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700"," ." +"701"," ." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800"," MIME : " +"900"," : " +"1000"," PICS " ." +"1100"," ." +"1101"," " +"1200"," - ..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210"," . ..." +"1220"," .

: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230"," diff --git a/config/e2guardian/languages/hebrew/neterr_template.html b/config/e2guardian/languages/hebrew/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/hebrew/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/hebrew/template.html b/config/e2guardian/languages/hebrew/template.html new file mode 100644 index 0000000..db0d8dc --- /dev/null +++ b/config/e2guardian/languages/hebrew/template.html @@ -0,0 +1,89 @@ + + + e2guardian - äâéùä ðãçéú + + + + + +

+ + + + + + + + + + + + + + +
+ äâéùä ðãçúä! +
+ -USER- +
+ YOUR ORG NAME + + äâéùä ìëúåáú: + +
+ +
+ + -URL- + +
+ +
... ðãçúä îäñéáä äáàä: + +
+ +
-REASONGIVEN-
+ +
+ +
+ +
+ + àúä øåàä àú äåãòú ùâéàä æå îëéååï ùðéñéåï äâéùä ùìê ðøàä ëîëéì, àå îñåîï ëîëéì, çåîø ùîåòøê ëìà + îúàéí. + +
+ +
+ + àí éù ìê ùàìåú ëìùäï ôðä ìîúàí äîéãò ú÷ùåøú åèëðåìåâéä àå ìîðäì äøùú ùìê. + +
+ +
+ +
+ +
Powered by + e2guardian
+
+ diff --git a/config/e2guardian/languages/hungarian/fancydmtemplate.html b/config/e2guardian/languages/hungarian/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/hungarian/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/hungarian/messages b/config/e2guardian/languages/hungarian/messages new file mode 100644 index 0000000..68f25c6 --- /dev/null +++ b/config/e2guardian/languages/hungarian/messages @@ -0,0 +1,117 @@ +# e2guardian 3 messages file in Hungarian +"0","Message number absent" # needs translation +"1","A hozzfrs tiltott" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Az n IP cme nem engedlyezett ehhez a bngszhz: " +"101","Az n IP cme nem engedlyezett ehhez a bngszhz." +"102","A felhasznlneve nem engedlyezett ehhez e abngszhz: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","A krt URL formtuma nem tnik biztonsgosnak." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Tiltott kifejezs: " +"301","Tiltott kifejezs." +"400","Tiltott sszettel kifejezs: " +"401","Tiltott sszettel kifejezs." +"402","A slyozott kifejezs hatra " +"403","A slyozott kifejezs elrte a hatrt." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Tiltott oldal: " +"501","Tiltott URL: " +"502","A domain-alap szrs aktv s ez az oldal sem a 'fehr', sem a 'szrke' listn nincs fent." +"503","Tiltott regulris kifejezs URL: " +"504","Tiltott regulris kifejezs URL." +"505","A cmtartomny alap szrs aktv s ez csak egy egyszer IP-cm." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Kifogsolhat kliens IP egyezs." +"601","Kifogsolhat kliens felhasznl egyezs." +"602","Kifogsolhat oldalegyezs." +"603","Kifogsolhat URL-egyezs." +"604","Kifogsolhat kifejezs: " +"605","Kombincis kifogsolhat kifejezs: " +"606","Tovbbugrat URL kifogs." +"607","Tovbbugrat sti kifogs." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","A Webre trtn feltlts tiltva." +"701","A Webre trtn feltlts korltjt elrte." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Tiltott MIME Tpus: " +"900","Tiltott kiterjeszts: " +"1000","A PICS szervezet jellsi szintjt elrte a fels oldal." +"1100","Vrussal fetztt llomny." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/hungarian/neterr_template.html b/config/e2guardian/languages/hungarian/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/hungarian/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/hungarian/template.html b/config/e2guardian/languages/hungarian/template.html new file mode 100644 index 0000000..98ee361 --- /dev/null +++ b/config/e2guardian/languages/hungarian/template.html @@ -0,0 +1,77 @@ + + + +e2guardian - A hozz�f�r�s tiltva + + + + +

+ + + + + + + + + + + +
+ + A hozz�f�r�s tiltva! +
+ + -USER-  +
+ + YOUR ORG NAME + + + + A hozz�f�r�s ehhez az oldalhoz: +

+ -URL- +

+ + ... nem lehets�ges a k�vetkez� ok miatt: +

+ + -REASONGIVEN- + +



+ �n az�rt l�tja ezt a hiba�zenetet, mert �gy t�nik, amit �n megk�s�relt el�rni tartalmaz + vagy besorol�sa alapj�n tartalmazhat helytelennek v�lt anyagokat. +

+ Amennyiben �nnek ezzel kapcsolatban agg�lyai mer�ltek fel, vegye fel a kapcsolatot az �n + Inform�ci�s- �s kommunk�ci�technol�giai koordin�tor�val vagy a h�l�zati menedzser�vel. +



+ + Powered by e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/indonesian/fancydmtemplate.html b/config/e2guardian/languages/indonesian/fancydmtemplate.html new file mode 100644 index 0000000..a65a2bd --- /dev/null +++ b/config/e2guardian/languages/indonesian/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/indonesian/messages b/config/e2guardian/languages/indonesian/messages new file mode 100644 index 0000000..11d18e0 --- /dev/null +++ b/config/e2guardian/languages/indonesian/messages @@ -0,0 +1,121 @@ +# e2guardian messages file in Indonesian +# +# Indonesian translation by: Kumoro Wisnu Wibowo +# +"0","Message number absent" # needs translation +"1","Akses Ditolak" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Alamat IP Anda tidak diperbolehkan untuk browsing: " +"101","Alamat IP Anda tidak diperbolehkan untuk browsing." +"102","Username Anda tidak diperbolehkan untuk browsing: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","Format alamat URL yang diminta tidak benar." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Frase yang ditolak ditemukan: " +"301","Frase yang ditolak ditemukan." +"400","Kombinasi frase yang ditolak ditemukan: " +"401","Kombinasi frase yang ditolak ditemukan." +"402","Bobot batas frase dari " +"403","Bobot batas frase terlewati." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Situs yang ditolak: " +"501","Alamat URL yang ditolak: " +"502","Blanket Block aktif dan situs tersebut tidak dalam white list." +"503","Alamat Regular Expression URL yang ditolak: " +"504","Alamat Regular Expression URL ditemukan." +"505","Blanket IP Block aktif dan alamat tersebut adalah hanya alamat IP saja." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","IP klien pengecualian cocok." +"601","User klien pengecualian cocok." +"602","Situs pengecualian cocok." +"603","Alamat URL pengecualian cocok." +"604","Frase pengecualian ditemukan: " +"605","Kombinasi frase pengecualian ditemukan: " +"606","Bypass URL cocok." +"607","Bypass cookie cocok." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +# 606,607 by Daniel Barron - corrections welcome +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Web upload ditolak." +"701","Batas untuk web upload terlewati." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Tipe MIME yang ditolak: " +"900","Ekstensi yang ditolak: " +"1000","Level Label PICS terlewati pada situs di atas." +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/indonesian/neterr_template.html b/config/e2guardian/languages/indonesian/neterr_template.html new file mode 100644 index 0000000..d2bb67e --- /dev/null +++ b/config/e2guardian/languages/indonesian/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/indonesian/template.html b/config/e2guardian/languages/indonesian/template.html new file mode 100644 index 0000000..91cb5e2 --- /dev/null +++ b/config/e2guardian/languages/indonesian/template.html @@ -0,0 +1,37 @@ +e2guardian - Akses Ditolak + +

ACCESS DITOLAK -USER-

+
Akses ke halaman:

+-URL- +

... telah ditolak untuk alasan sebagai berikut:

+-REASONGIVEN- +

Anda melihat pesan kesalahan ini karena halaman yang ingin Anda akses
+mengandung isi yang telah dianggap sebagai tidak pantas.
+

Apabila Anda mempunyai pertanyaan-pertanyaan, silakan kontak Manager IT atau +Manager Network Anda.
+ +

Powered by e2guardian +

+ + + diff --git a/config/e2guardian/languages/italian/fancydmtemplate.html b/config/e2guardian/languages/italian/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/italian/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/italian/messages b/config/e2guardian/languages/italian/messages new file mode 100644 index 0000000..33baa97 --- /dev/null +++ b/config/e2guardian/languages/italian/messages @@ -0,0 +1,118 @@ +# e2guardian messages file in IT Italian +# Translated by andrea at diclemente.net +"0","Message number absent" # needs translation +"1","Accesso Negato" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Al tuo indirizzo IP non e' permesso di navigare il web: " +"101","Al tuo indirizzo IP non e' permesso di navigare il web." +"102","Al tuo username non permesso di navigare il web: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","L'URL richiesta e' malformata." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Trovata una frase vietata: " +"301","Trovata una frase vietata." +"400","Trovata una combinazione di frasi vietata: " +"401","Trovata una combinazione di frasi vietata." +"402","Il limite di frasi pesate di " +"403","E' stato superato il limite per le frasi pesate." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Sito vietato: " +"501","URL vietato: " +"502","Il blocco 'Blanket' e' attivo e il sito non e' nella white list." +"503","URL con espressione regolare vietata: " +"504","URL con espressione regolare vietata trovato." +"505","Il blocco 'Blanket' e' attivo e l'indirizzo e' formato dal solo indirizzo IP." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Exception client IP match." +"601","Exception client user match." +"602","Exception site match." +"603","Exception URL match." +"604","Exception phrase found: " +"605","Combination exception phrase found: " +"606","Bypass URL exception." +"607","Bypass cookie exception." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Il Web-upload e' vietato." +"701","E' stato superato il limite per il Web upload." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","MIME Type vietato: " +"900","Extensione vietata: " +"1000","Si e' oltrepassato il limite del livello PICS sul sito." +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/italian/neterr_template.html b/config/e2guardian/languages/italian/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/italian/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/italian/template.html b/config/e2guardian/languages/italian/template.html new file mode 100644 index 0000000..48d968c --- /dev/null +++ b/config/e2guardian/languages/italian/template.html @@ -0,0 +1,38 @@ +e2guardian - Accesso Negato + +

L'ACCESSO E' STATO NEGATO -USER-

+
L'accesso alla pagina:

+-URL- +

... e' stato negato per il seguente motivo:

+-REASONGIVEN- +

Stai vedendo questo errore perche' la pagina che hai cercato
+di accedere contiene, o e' marcata come contenente, materiale che
+e' stato ritenuto non appropriato.
+

Se hai ulteriori domande, contatta il tuo coordinatore ICT o Network Manager.
+ +

Powered by e2guardian +

+ + + diff --git a/config/e2guardian/languages/japanese/fancydmtemplate.html b/config/e2guardian/languages/japanese/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/japanese/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/japanese/messages b/config/e2guardian/languages/japanese/messages new file mode 100644 index 0000000..6b79530 --- /dev/null +++ b/config/e2guardian/languages/japanese/messages @@ -0,0 +1,117 @@ +# e2guardian messages file in 日本語 +"0","Message number absent" # needs translation +"1","アクセス拒å¦" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","ã‚ãªãŸã®IPアドレスã¯é–²è¦§ã®è¨±å¯ãŒã‚ã‚Šã¾ã›ã‚“: " +"101","ã‚ãªãŸã®IPアドレスã¯é–²è¦§ã®è¨±å¯ãŒã‚ã‚Šã¾ã›ã‚“。" +"102","ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶åã¯é–²è¦§ã®è¨±å¯ãŒã‚ã‚Šã¾ã›ã‚“: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","è¦æ±‚ã•ã‚ŒãŸURLã¯ä¸é©åˆ‡ã§ã™ã€‚" +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","ç¦æ­¢ã•ã‚ŒãŸãƒ•ãƒ¬ãƒ¼ã‚ºãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸï¼š " +"301","ç¦æ­¢ã•ã‚ŒãŸãƒ•ãƒ¬ãƒ¼ã‚ºãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" +"400","æ‹’å¦ã•ã‚ŒãŸçµåˆãƒ•ãƒ¬ãƒ¼ã‚ºãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸï¼š " +"401","æ‹’å¦ã•ã‚ŒãŸçµåˆãƒ•ãƒ¬ãƒ¼ã‚ºãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" +"402","é‡ã¿ä»˜ã‘ã•ã‚ŒãŸãƒ•ãƒ¬ãƒ¼ã‚ºã®åˆ¶é™ã‚’越ãˆã¾ã—ãŸ(è¦å®šå€¤ï¼šæ¸¬å®šå€¤) " +"403","é‡ã¿ä»˜ã‘ã•ã‚ŒãŸãƒ•ãƒ¬ãƒ¼ã‚ºã®åˆ¶é™ã‚’越ãˆã¾ã—ãŸã€‚" +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","æ‹’å¦ã•ã‚ŒãŸã‚µã‚¤ãƒˆ: " +"501","æ‹’å¦ã•ã‚ŒãŸURL: " +"502","統括的ãªé®æ–­ã¯æœ‰åŠ¹ã§ã™ã€‚ãã—ã¦ãれらã®ã‚µã‚¤ãƒˆã¯ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã‹ã‚°ãƒ¬ãƒ¼ãƒªã‚¹ãƒˆã«ã‚ã‚Šã¾ã›ã‚“。" +"503","æ‹’å¦ã•ã‚ŒãŸæ­£è¦è¡¨ç¾ã®URL: " +"504","æ‹’å¦ã•ã‚ŒãŸæ­£è¦è¡¨ç¾ã®URLãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" +"505","統括的ãªIPã®é®æ–­ã¯æœ‰åŠ¹ã§ã™ã€‚ãã—ã¦ãれらã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯IPã®ã¿ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚" +"506","統括的ãªSSLã®é®æ–­ã¯æœ‰åŠ¹ã§ã™ã€‚ãã—ã¦ãれらã®ã‚µã‚¤ãƒˆã¯ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã‹ã‚°ãƒ¬ãƒ¼ãƒªã‚¹ãƒˆã«ã‚ã‚Šã¾ã›ã‚“。" +"507","統括的ãªSSL IPã®é®æ–­ã¯æœ‰åŠ¹ã§ã™ã€‚ãã—ã¦ãれらã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯IPã®ã¿ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚" +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","例外クライアントIPマッãƒã€‚" +"601","例外クライアントユーザマッãƒã€‚" +"602","例外サイトマッãƒã€‚" +"603","例外URLマッãƒã€‚" +"604","例外フレーズãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ: " +"605","çµåˆä¾‹å¤–フレーズãŒã¿ã¤ã‹ã‚Šã¾ã—ãŸï¼š " +"606","例外迂回URL" +"607","例外迂回Cookie。" +"608","例外スキャン迂回URL" +"609","例外正è¦è¡¨ç¾URLマッãƒ: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Webã®ã‚¢ãƒƒãƒ—ロードã¯æ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚" +"701","Webã®ã‚¢ãƒƒãƒ—ロードã¯åˆ¶é™ã‚’越ãˆã¾ã—ãŸã€‚" +"750","統括的ãªãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¯æœ‰åŠ¹ã§ã™ã€‚ãã—ã¦ã“ã®MIMEタイプã¯ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã«ã‚ã‚Šã¾ã›ã‚“: " +"751","統括的ãªãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¯æœ‰åŠ¹ã§ã™ã€‚ãã—ã¦ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã«ãƒžãƒƒãƒã—ã¾ã›ã‚“ã§ã—ãŸã€‚" +"800","æ‹’å¦ã•ã‚ŒãŸMIMEタイプ: " +"900","æ‹’å¦ã•ã‚ŒãŸæ‹¡å¼µ: " +"1000","PICSラベリングレベルã¯ä¸Šã®ã‚µã‚¤ãƒˆã§è¶…ãˆã¾ã—ãŸã€‚" +"1100","ウィルスã‹ä¸æ­£ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„を検出ã—ã¾ã—ãŸã€‚" +"1101","広告ã¯æ‹’å¦ã•ã‚Œã¾ã—ãŸ" +"1200","ãŠå¾…ã¡ãã ã•ã„。 - ダウンロードファイルã®ã‚¹ã‚­ãƒ£ãƒ³ä¸­ã§ã™ï½¥ï½¥ï½¥" +"1201","警告: ファイルã¯ã‚¹ã‚­ãƒ£ãƒ³ã™ã‚‹ã®ã«å¤§ãã™ãŽã¾ã™ã€‚ ã“ã®ãµãã„ã‚‹ãŒ" +"1202","より大ãã„ã¨ç–‘ã†ãªã‚‰ã°ç›´æŽ¥ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ãŸã‚ã«ã“ã®ãƒšãƒ¼ã‚¸ã‚’リフレッシュã—ã¦ãã ã•ã„。" +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","ダウンロード完了。スキャンを開始ã—ã¾ã™..." +"1220","スキャンãŒå®Œäº†ã—ã¾ã—ãŸã€‚

ダウンロードをã™ã‚‹ã«ã¯ã“ã“をクリックã—ã¦ãã ã•ã„: " +"1221","ダウンロードã¯å®Œäº†ã—ã¾ã—ãŸã€‚ファイルã¯ã‚¹ã‚­ãƒ£ãƒ³ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚

ダウンロードをã™ã‚‹ã«ã¯ã“ã“をクリックã—ã¦ãã ã•ã„: " +"1222","ファイルã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã™ã‚‹ã®ã«å¤§ãã™ãŽã¾ã™ã€‚

スキャンを迂回ã•ã›ã¦ã€å†ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ãŸã‚ã«ã“ã“をクリックã—ã¦ãã ã•ã„: " +"1230","ファイルã¯é•·ã„ã“ã¨åˆ©ç”¨å¯èƒ½ã§ã¯ã‚ã‚Šã¾ã›ã‚“" diff --git a/config/e2guardian/languages/japanese/neterr_template.html b/config/e2guardian/languages/japanese/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/japanese/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/japanese/template.html b/config/e2guardian/languages/japanese/template.html new file mode 100644 index 0000000..4219546 --- /dev/null +++ b/config/e2guardian/languages/japanese/template.html @@ -0,0 +1,61 @@ + + +Access Denied + + + +

+ + + + + + + + + + + +
+ + アクセスã¯æ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ +
+ + -USER-  +
+ + www.shonbori.com + + + + アクセス先URL: +

+ -URL- +

+ + ã¯ä»¥ä¸‹ã®ç†ç”±ã«ã‚ˆã‚Šæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚: +

+ + -REASONGIVEN- + +

+ カテゴリ: +

+ + -CATEGORIES- + +



+ ä¸é©åˆ‡ã¨æ€ã‚れるコンテンツãŒãƒšãƒ¼ã‚¸å†…ã«å«ã¾ã‚Œã¦ã„る・å«ã¾ã‚Œã¦ã„ã‚‹ã¨æ€ã‚れる場åˆã« + ã“ã®ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ +

+ 何ã‹è³ªå•ãŒã‚ã‚Šã¾ã—ãŸã‚‰ã€ä»¥ä¸‹ã«é€£çµ¡ã—ã¦ãã ã•ã„。 +
+ webmaster@shonbori.com +



+ + Powered by e2guardian +
+ + + + diff --git a/config/e2guardian/languages/lithuanian/fancydmtemplate.html b/config/e2guardian/languages/lithuanian/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/lithuanian/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/lithuanian/messages b/config/e2guardian/languages/lithuanian/messages new file mode 100644 index 0000000..566bddb --- /dev/null +++ b/config/e2guardian/languages/lithuanian/messages @@ -0,0 +1,119 @@ +# e2guardian 3 messages file +# Lithuanian version by Nerijus BaliÅ«nas and Mantas KriauÄiÅ«nas +# charset=utf-8 +"0","Message number absent" # needs translation +"1","Tinklalapis uždraustas" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","IÅ¡ jÅ«sų IP adreso negalima pasiekti tinklalapio: " +"101","Draudžiama narÅ¡yti iÅ¡ jÅ«sų IP adreso." +"102","JÅ«sų naudotojui negalima pasiekti tinklalapio: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","Neteisingas URL." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Rasta uždrausta frazÄ—: " +"301","Rasta uždrausta frazÄ—." +"400","Rasta uždrausta frazių kombinacija: " +"401","Rasta uždrausta frazių kombinacija." +"402","Sumuojamų frazių limitas " +"403","VirÅ¡ytas sumuojamų frazių limitas." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Uždraustas adresas (site): " +"501","Uždraustas URL: " +"502","Leidžiamas priÄ—jimas tik prie tinklalapių, esanÄių 'baltame' ar 'pilkame' sÄ…raÅ¡e, bet Å¡io tinklalapio juose nÄ—ra." +"503","Draudžiamas URL regexp: " +"504","Rastas draudžiamas URL regexp." +"505","PriÄ—jimas prie IP adresų uždraustas, o Å¡is adresas yra tik IP adresas." +"506","Aktyvus Blanket SSL Block ir Å¡is tinklalapis nÄ—ra 'baltame' ar 'pilkame' sÄ…raÅ¡e." +"507","Aktyvus Blanket SSL IP Block ir Å¡is adresas yra tik IP adresas." +"508","Uždrausta reguliarioji iÅ¡raiÅ¡ka (regexp) HTTP antraÅ¡tÄ—je: ", +"509","Rasta draudžiama reguliarioji iÅ¡raiÅ¡ka (regexp) HTTP antraÅ¡tÄ—je." +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Kliento IP yra iÅ¡imÄių sÄ…raÅ¡e." +"601","Kliento vardas yra iÅ¡imÄių sÄ…raÅ¡e." +"602","Adresas yra iÅ¡imÄių sÄ…raÅ¡e." +"603","URL yra iÅ¡imÄių sÄ…raÅ¡e." +"604","Rasta frazÄ— iÅ¡ iÅ¡imÄių sÄ…raÅ¡o: " +"605","Rasta frazių kombinacija iÅ¡ iÅ¡imÄių sÄ…raÅ¡o: " +"606","URL apÄ—jimo iÅ¡imtis." +"607","Slapuko apÄ—jimo iÅ¡imtis." +"608","URL skanavimo apÄ—jimo iÅ¡imtis." +"609","Regexp URL yra iÅ¡imÄių sÄ…raÅ¡e: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Nusiuntimas (upload) yra uždraustas." +"701","VirÅ¡ytas nusiuntimo (upload) limitas." +"750","Aktyvus Blanket failų atsiuntimas ir Å¡is MIME tipas nÄ—ra 'baltame' sÄ…raÅ¡e: " +"751","Aktyvus Blanket failų atsiuntimas ir Å¡is failas netinka pagal 'baltus' sÄ…raÅ¡us." +"800","Uždraustas MIME tipas: " +"900","Uždraustas praplÄ—timas: " +"1000","VirÅ¡ytas Å¡io tinklalapio PICS vertinimo kriterijus." +"1100","Aptiktas virusas arba negeras turinys." +"1101","Reklama užblokuota" +"1200","Palaukite - siunÄiame tikrinimui nuo virusų..." +"1201","DÄ—mesio: failo negalime patikrinti, nes jis per didelis. Jei manote, kad Å¡is failas yra didesnis nei " +"1202",", tuomet nueikite į šį puslapį iÅ¡ naujo (refresh) ir atsisiųskite nepatikrintÄ… failÄ…." +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Atsiųsta. Tikriname nuo virusų..." +"1220","Patikrinta.

Atsisiųskite: " +"1221","Siuntimas baigtas; failas nebuvo patikrintas.

SpustelÄ—kite Äia jei norite atsisiųsti: " +"1222","Failas per didelis.

Jei norite atsisiųsti nepatikrintÄ… failÄ… - spustelÄ—kite Äia: " +"1230","Failas neprieinamas" diff --git a/config/e2guardian/languages/lithuanian/neterr_template.html b/config/e2guardian/languages/lithuanian/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/lithuanian/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/lithuanian/template.html b/config/e2guardian/languages/lithuanian/template.html new file mode 100644 index 0000000..d4cb901 --- /dev/null +++ b/config/e2guardian/languages/lithuanian/template.html @@ -0,0 +1,49 @@ + + +e2guardian - Tinklalapis uždraustas + + + +

+

TINKLALAPIS UŽDRAUSTAS -USER-

+
Interneto turinio filtravimo sistema neleidžia Jums atidaryti šio tinklalapio:

+-URL- +

dėl šios priežasties:

+-REASONGIVEN- +

tinklalapis pateko į šias kategorijas:

+-CATEGORIES- +

+
+Tinklalapis, kurį Jūs bandėte pasiekti, pripažintas nepriimtinu. +
+

Jei turite klausimų, kreipkitės į kompiuterio ar tinklo administratorių.
+ +

Powered by e2guardian +

+ + + + + diff --git a/config/e2guardian/languages/malay/fancydmtemplate.html b/config/e2guardian/languages/malay/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/malay/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/malay/messages b/config/e2guardian/languages/malay/messages new file mode 100644 index 0000000..cbc1aa2 --- /dev/null +++ b/config/e2guardian/languages/malay/messages @@ -0,0 +1,143 @@ +# e2guardian 3 messages file in Malay language +# Edited by Sazarul Izam +"0","Message number absent" # needs translation +"1","Akses Tidak Dibenarkan" +# Access Denied +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","IP anda tidak dibenarkan untuk melayari web: " +"101","IP anda tidak dibenarkan untuk melayari web." +"102","Nama pengguna anda tidak dibenarkan untuk melayari web: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","URL yang diminta adalah malformed." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Frasa larangan dikesan: " +# Banned Phrase found: +"301","Frasa larangan dikesan." +# Banned phrase found. +"400","Kombinasi frasa larangan dikesan: " +# Banned combination phrase found: +"401","Kombinasi frasa larangan dikesan." +# Banned combination phrase found. +"402","Had beban frasa oleh " +# Weighted phrase limit of +"403","Melebihi had beban frasa." +# Weighted phrase limit exceeded. +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Laman larangan: " +# Banned site: +"501","URL larangan: " +# Banned URL: +"502","Blok Blanket adalah aktif dan laman tersebut tidak tersenarai dalam white atau grey list." # Blanket Block is active and that site is not on the white or grey list. +"503","URL Ekspresi Biasa larangan: " +# Banned Regular Expression URL: +"504","URL Ekspresi Biasa larangan dikesan." +# Banned Regular Expression URL found. +"505","Blok Blanket IP adalah aktif dan alamat tersebut hanyalah alamat IP." +#Blanket IP Block is active and that address is an IP only address. +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","IP pengecualian klien sepadan." +# Exception client IP match. +"601","Pengguna pengecualian klien sepadan." +# Exception client user match. +"602","Laman pengecualian sepadan." +# Exception site match. +"603","URL pengecualian sepadan." +# Exception URL match. +"604","Frasa pengecualian sepadan: " +# Exception phrase found: +"605","Kombinasi frasa pengecualian sepadan: " +# Combination exception phrase found: +"606","URL pintasan sepadan." +# Bypass URL exception. +"607","Cookie pintasan sepadan." +# Bypass cookie exception. +"608","Scan bypass URL." # needs translation +"609","URL pattern match: " # needs translation +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Muatnaik laman dilarang." +# Web upload is banned. +"701","Muatnaik laman melebihi had." +# Web upload limit exceeded. +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Jenis MIME larangan: " +# Banned MIME Type: +"900","Extension larangan: " +# Banned extension: +"1000","Penglabelan PICS melebihi peringkat pada laman di atas." +# PICS labeling level exceeded on the above site. +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading file for scanning..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " +"1202",", then refresh this page to download directly." +"1203","WARNING: Could not perform content scan!" +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " +"1222","File too large to cache.

Click here to re-download, bypassing scan: " +"1230","File no longer available" diff --git a/config/e2guardian/languages/malay/neterr_template.html b/config/e2guardian/languages/malay/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/malay/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/malay/template.html b/config/e2guardian/languages/malay/template.html new file mode 100644 index 0000000..69ea9b9 --- /dev/null +++ b/config/e2guardian/languages/malay/template.html @@ -0,0 +1,60 @@ +e2guardian - Akses Tidak Dibenarkan +

+ + + + +
+D a n s G u a r d i a n +  + +h a l a m a n   +t i d a k   b a i k   b e r h e n t i   d i   s i n i +
+ + + + + + +
+H A L A +N G A N +
+Akses ke halaman berkenaan +tidak dibenarkan + +

URL: -URL-
-REASONGIVEN-

Sila hubungi Pentadbir Rangkaian jika terdapat +kesilapan berhubung perkara ini +

Penapis Kandungan Web oleh +e2guardian +
+
+ + + + diff --git a/config/e2guardian/languages/mxspanish/fancydmtemplate.html b/config/e2guardian/languages/mxspanish/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/mxspanish/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/mxspanish/messages b/config/e2guardian/languages/mxspanish/messages new file mode 100644 index 0000000..fa4a0cc --- /dev/null +++ b/config/e2guardian/languages/mxspanish/messages @@ -0,0 +1,120 @@ +# e2guardian messages file in MX Spanish +# Translated by Vladimir Gomez +# Typo corrected by Pedro Fortuny 2003/10/13 +"0","Message number absent" # needs translation +"1","Acceso Denegado" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Su dirección IP no tiene permiso para ver: " +"101","Su dirección IP no esta autorizada a navegar en Internet." +"102","Su usuario no tiene autorizació para ver: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","El URL solicitado esta mal formado." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Frase no permitida: " +"301","Frase no permitida." +"400","Combinación de palabras/frases no permitida: " +"401","Combinación de palabras/frases no permitida." +"402","La frase excede el nivel " +"403","La página solicitada excede el nivel de frases permitidas." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Sitio no permitido: " +"501","URL no permitido: " +"502","Blanket Block esta activado y el sitio no se encuentra en la lista de permitidos." +"503","URL bloqueada por Expresión Regular: " +"504","URL bloqueada por Expresión Regular." +"505","No se puede accesar un sitio por su dirección IP cuando Blanket IP Block está activado." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Dirección ip del cliente presente en la lista de excepciones." +"601","Usuario presente en la lista de excepciones." +"602","Sitio presente en la lista de excepciones." +"603","URL presente en la lista de excepciones." +"604","Frase presente en la lista de excepciones." +"605","Combinación de frases presente en la lista de excepciones: " +"606","Puente URL excepciones." +"607","Puente cookie excepciones." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +# 606,607 by Daniel Barron - corrections welcome +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","No esta permitido enviar archivos a sitios en Internet." +"701","El archivo que intenta enviar excede el tamaño permitido." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Clase MIME no permitida: " +"900","Extensión de archivo bloqueada: " +"1000","Las etiquetas del sitio exceden el nivel PICS." +"1100","Virus or bad content detected." # needs translation +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/mxspanish/neterr_template.html b/config/e2guardian/languages/mxspanish/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/mxspanish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/mxspanish/template.html b/config/e2guardian/languages/mxspanish/template.html new file mode 100644 index 0000000..4842fbb --- /dev/null +++ b/config/e2guardian/languages/mxspanish/template.html @@ -0,0 +1,40 @@ +e2guardian - Acceso Denegado + +

ACCESO DENEGADO -USER-

+
El acceso a la páina:

+-URL- +

... ha sido denegado por la siguiente razón:

+-REASONGIVEN- +

Usted esta viendo esta +página de error porque
el sitio que está tratando de ver +o su contenido
han sido catalogados como inapropiados.
+

Si requiere acceso a esta +página por favor pongase en contacto
con el Administrador de Sistemas +o el Administrador de la Red.
+ +

Powered by e2guardian +

+ + + diff --git a/config/e2guardian/languages/polish/fancydmtemplate.html b/config/e2guardian/languages/polish/fancydmtemplate.html new file mode 100644 index 0000000..a65a2bd --- /dev/null +++ b/config/e2guardian/languages/polish/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/polish/messages b/config/e2guardian/languages/polish/messages new file mode 100644 index 0000000..bea03e0 --- /dev/null +++ b/config/e2guardian/languages/polish/messages @@ -0,0 +1,120 @@ +# e2guardian messages file +# Polish version by Piotr Kapczuk +# charset=iso-8859-2 +"0","Message number absent" # needs translation +"1","Dostp Zabroniony" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Zakazano dostpu z twojego adresu IP do strony: " +"101","Przegldanie stron www z twojego adresu IP jest niedozwolone." +"102","Zakazano dostpu z twoj nazw uytkownika do strony: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","dany URL jest le skonstruowany." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Znaleziono zakazan fraz: " +"301","Znaleziono zakazan fraz." +"400","Znaleziono zakazan kombinacj fraz: " +"401","Znaleziono zakazan kombinacj fraz." +"402","Limit fraz liczonych wagowo " +"403","Przekroczono limit fraz liczonych wagowo." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Zakazany adres (site): " +"501","Zakazany URL: " +"502","Dostp zezwolony jedynie do wybranych stron, a ta strona nie jest na licie dozwolonych." +"503","Zakazane Wyraenie Regularne dla URL: " +"504","Znaleziono zakazane Wyraenie Regularne w URL." +"505","Dostp po samych adresach IP jest zakazany, a ten adres jest jedynie adresem IP." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","IP klienta pasuje do wyjtkw." +"601","Nazwa uytkownika pasuje do wyjtkw." +"602","Adres pasuje do wyjtkw." +"603","URL pasuje do wyjtkw." +"604","Znaleziono fraz, ktra pasuje do wyjtkw: " +"605","Znaleziono kombinacj fraz, ktra pasuje do wyjtkw: " +"606","Bypass URL wyjtkw." +"607","Bypass cookie wyjtkw." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +# 606,607 by Daniel Barron - corrections welcome +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Wgrywanie do sieci jest zakazane." +"701","Przekroczono limit wgrywanych danych." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Zakazany typ MIME: " +"900","Zakazane rozszerzenie: " +"1000","Wedle etykietowania PICS przekroczono dopuszczalny poziom zakazanych treci." +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/polish/neterr_template.html b/config/e2guardian/languages/polish/neterr_template.html new file mode 100644 index 0000000..d2bb67e --- /dev/null +++ b/config/e2guardian/languages/polish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/polish/template.html b/config/e2guardian/languages/polish/template.html new file mode 100644 index 0000000..08a396a --- /dev/null +++ b/config/e2guardian/languages/polish/template.html @@ -0,0 +1,40 @@ +e2guardian - Dostêp Zabroniony + + + +

ZABRONIONO DOSTÊPU -USER-

+
Dostêp do strony:

+-URL- +

... zosta³ zabroniony z nastêpuj±cego powodu:

+-REASONGIVEN- +

+
+Ten b³±d pojawia siê, poniewa¿ strona, do której próbowano uzyskaæ dostêp,
+zawiera lub te¿ jest oznakowana jako zawieraj±ca tre¶ci uznane za nieodpowiednie. +
+

Je¶li masz jakie¶ pytania lub w±tpliwo¶ci skontaktuj siê ze swoim Administratorem Sieci
+ +

Powered by e2guardian +

+ + + + diff --git a/config/e2guardian/languages/portuguese/fancydmtemplate.html b/config/e2guardian/languages/portuguese/fancydmtemplate.html new file mode 100644 index 0000000..a65a2bd --- /dev/null +++ b/config/e2guardian/languages/portuguese/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/portuguese/messages b/config/e2guardian/languages/portuguese/messages new file mode 100644 index 0000000..f91c272 --- /dev/null +++ b/config/e2guardian/languages/portuguese/messages @@ -0,0 +1,122 @@ +# e2guardian 3 messages in Brazilian Portuguese +# Mensagens do e2guardian 3 file em Portugus do Brasil (pt-BR) +# Translated/traduzido (?) by/por Henrique Araujo - Sys Admin +# henrique@colegiosaogoncalo.g12.br +# Cuiab - MT, Brasil +"0","Message number absent" # needs translation +"1","Acesso negado." +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Seu endereço IP não tem permissão de acesso à  web: " +"101","Seu endereço IP não tem permissão de acesso à  web: " +"102","Esse nome de usuário não tem permissão de acesso à  web: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","A URL requerida está mal formada." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Encontrada frase proibida: " +"301","Encontrada frase proibida: " +"400","Encontrada combinação de frases proibida: " +"401","Encontrada combinação de frases proibida: " +"402","Limite de frase ponderada de " +"403","Limite de frase ponderada excedido." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Sítio proibido: " +"501","URL proibida: " +"502","Bloqueio geral está ativo e aquele sítio não está na lista livre." +"503","Expressão Regular proibida em URL: " +"504","Encontrada Expressão Regular proibida em URL: " +"505","Bloqueio geral de IP está ativo e aquele endereço não possui nome." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Cliente IP está na lista de exceções." +"601","Usuário está na lista de exceções." +"602","Sítio está na lista de exceções." +"603","URL está na lista de exceções." +"604","Encontrada frase na lista de exceções: " +"605","Encontrada combinação de frases na lista de exceções: " +"606","Desvio temporário de bloqueio (Bypass URL.)" +"607","Desvio temporário de bloqueio (Bypass cookie.)" +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Transferência de arquivos para web proibida." +"701","Limite de transferência de arquivos para web excedido." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Tipo MIME proibido: " +"900","Extensão proibida: " +"1000","Nível de rotulagem PICS excedido no sítio acima." +# 1,1000 by Andson Gomes - html internet +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/portuguese/neterr_template.html b/config/e2guardian/languages/portuguese/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/portuguese/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/portuguese/template.html b/config/e2guardian/languages/portuguese/template.html new file mode 100644 index 0000000..2125c09 --- /dev/null +++ b/config/e2guardian/languages/portuguese/template.html @@ -0,0 +1,83 @@ + + + +e2guardian - Access Denied + + + + +

+ + + + + + + + + + + +
+ + O acesso foi negado! +
+ + Usu�rio: -USER-  +
+ + Empresa S/A + + + + O acesso a p�gina: +

+ -URL- +

+ + ... foi negado devido a seguinte raz�o: +

+ + -REASONGIVEN- + +

+ Categorias: +

+ + -CATEGORIES- + +



+ Voc� est� vendo esta mensagem porque o que voc� tentou acessar parece conter material que foi julgado impr�prio. +

+ Se voc� tiver alguma d�vida favor entrar em contato com a equipe de suporte de sua rede. +



+ + Powered by e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/ptbrazilian/fancydmtemplate.html b/config/e2guardian/languages/ptbrazilian/fancydmtemplate.html new file mode 100644 index 0000000..26ae56e --- /dev/null +++ b/config/e2guardian/languages/ptbrazilian/fancydmtemplate.html @@ -0,0 +1,181 @@ + + + Baixando -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/ptbrazilian/messages b/config/e2guardian/languages/ptbrazilian/messages new file mode 100644 index 0000000..56286d0 --- /dev/null +++ b/config/e2guardian/languages/ptbrazilian/messages @@ -0,0 +1,121 @@ +# e2guardian messages file in Brazilian Portuguese +# Arquivo de mensagens do e2guardian em Português Brasil +# Traduzido por Renato C. Pacheco - renato.camarao@gmail.com +# Em 2015-04-15 +# +"0","Message number absent" # needs translation +"1","Acesso Negado" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," em " +"51","EXCEÇÃO" +"52","NEGADO" +"53","INFECTADO" +"54","VERIFICADO" +"55","CONTENTMOD" +"56","URLMOD" +"57","HEADERMOD" +"58","HEADERADD" +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Seu endereço IP está impedido de navegar: " +"101","Seu endereço IP está impedido de navegar." +"102","Seu usuário está impedido de navegar: " +"103","IP de Cliente Proibido" +"104","Espaço Bloqueado" +"105","Usuário Proibido" +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","A URL solicitada está mal formada." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Frase proibida encontrada: " +"301","Frase proibida encontrada." +"400","Combinação de frase proibida encontrada: " +"401","Combinação de frase proibida encontrada." +"402","Limite de frase ponderada de " +"403","Limite de frase ponderada excedida." +"450","Termo de busca proibido encontrado: " +"451","Termo de busca proibido encontrado." +"452","Combinação de termo de busca proibido encontrado: " +"453","Combinação de termo de busca proibido encontrado." +"454","Limite de termo de busca ponderado de " +"455","Limite de termo de busca ponderado excedido." +"456","Exceção da combinação do termo de busca encontrado: " +"457","Exceção do termo de busca encontrado: " +"500","Sítio proibido: " +"501","URL Proibida: " +"502","Bloco Restrito está ativado e este sítio não está na lista de exceções." +"503","URL Expressão Regular Proibida: " +"504","URL Expressão Regular Proibida encontrada." +"505","Bloco de IP Restrito está ativado e este endereço é apenas um endereço IP." +"506","Bloco Restrito SSL está ativado e este sítio não está na lista de exceções." +"507","Bloco de IP SSL Restrito está ativado e este endereço é apenas um endereço IP." +"508","Expressão Regular de Cabeçalho HTTP proibida: ", +"509","Expressão Regular de Cabeçalho HTTP proibida encontrada." +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Sítio HTTPS Proibido: " +"521","Palavras de Busca Proibidas: " +"522","Blocked User-Agent: " # needs translation +"560","Sítio bloqueado (local): " +"561","URL bloqueada (local): " +"580","Sítio HTTPS bloqueado (local): " +"581","Palavras de Busca Proibidas (local): " +"600","Exceção IP do cliente confere." +"601","Exceção do usuário cliente confere." +"602","Exceção do sítio confere." +"603","Exceção da URL confere." +"604","Exceção da frase encontrada: " +"605","Combinação de exceção da frase encontrada: " +"606","Exceção de URL ignorada." +"607","Exceção de cookie ignorada." +"608","Verificação de exceção de URL ignorada." +"609","Exceção de expressão de URL confere: " +"610","User-Agent pattern match: " # needs translation +"620","Campo cabeçalho HTTP Referer confere: " +"630","URL confere em " +"631"," Lista de espaço permitida" +"632","Lista permitida além do espaço conferida" +"662","Sítio (local)." +"663","URL (local)." +"700","Upload é proibido." +"701","Upload excedeu o limite." +"750","Download de arquivos restrito está ativado e este MIME type não está nas listas de exceções: " +"751","Download de arquivos restrito está ativado e este arquivo não confere com as listas de exceções." +"800","MIME Type Proibido: " +"900","Extensão Proibida: " +"1000","Nível de rotulagem PICS excedido no sítio acima." +"1100","Malware detectado." +"1101","Anúncio bloqueado" +"1200","Por favor, espere - baixando arquivo para verificação..." +"1201","Aviso: arquivo muito grande para verificar. Se você suspeita que este arquivo maior que " +"1202",", então recarregue esta página para baixar diretamente." +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download completo. Iniciando a verificação..." +"1220","Verificação completa.

Clique aqui para download: " +"1221","Download completo; arquivo não verificado.

Clique aqui para download: " +"1222","Arquivo muito grande para ser armazenado no cache.

Clique aqui para baixar novamente, ignorando a verificação: " +"1230","Arquivo não está mais disponível" diff --git a/config/e2guardian/languages/ptbrazilian/neterr_template.html b/config/e2guardian/languages/ptbrazilian/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/ptbrazilian/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/ptbrazilian/template.html b/config/e2guardian/languages/ptbrazilian/template.html new file mode 100644 index 0000000..822a90e --- /dev/null +++ b/config/e2guardian/languages/ptbrazilian/template.html @@ -0,0 +1,154 @@ + + + + + + + E2Guardian - Acesso negado + + + + + + + + + + + + + + + + +
+ +ACCESS DEINIED + +
+

+

Opa! Você tentou visitar um site que foi considerado inadequado:


+
+ -URL- +

+ Motivo
+
+ -REASONGIVEN-  + -CATEGORIES- +


+

Detalhes da conexão:

+ -USER-  +


+ + Confirmar e continuar +

+
+
+ + diff --git a/config/e2guardian/languages/russian-1251/fancydmtemplate.html b/config/e2guardian/languages/russian-1251/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/russian-1251/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/russian-1251/messages b/config/e2guardian/languages/russian-1251/messages new file mode 100644 index 0000000..ce787dc --- /dev/null +++ b/config/e2guardian/languages/russian-1251/messages @@ -0,0 +1,119 @@ +# e2guardian 3 messages file in russian +# charset=windows-1251 +# version by Shipitsin Igor +"0","Message number absent" # needs translation +"1"," " +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100"," IP :" +"101"," IP ." +"102"," :" +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200"," URL ." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300"," :" +"301"," ." +"400"," :" +"401"," ." +"402"," " +"403"," ." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500"," :" +"501"," URL:" +"502"," - ." +"503"," URL:" +"504"," URL." +"505"," IP - IP, ." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600"," IP ." +"601"," ." +"602"," ." +"603"," URL." +"604"," :" +"605"," :" +"606"," URL ." +"607"," cookie ." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700"," ." +"701"," ." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800"," MIME:" +"900"," :" +"1000"," PICS ." +"1100"," " +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/russian-1251/neterr_template.html b/config/e2guardian/languages/russian-1251/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/russian-1251/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/russian-1251/template.html b/config/e2guardian/languages/russian-1251/template.html new file mode 100644 index 0000000..5c3ef48 --- /dev/null +++ b/config/e2guardian/languages/russian-1251/template.html @@ -0,0 +1,77 @@ + + + +e2guardian - ������ �������� + + + + + + + +

+ + + + + + + + + + + +
+ + ������ ��������! +
+ + -USER-  +
+ + ���� ����������� + + + + ������ � �������� �������: +

+ -URL- +

+ + ... �������� �� ��������� ��������: +

+ + -REASONGIVEN- + +



+ �� ������ ��� ������, ������ ���, ������� ������� ������� � ������� ����������� + ��� ���������� ��� ����������, ��������, ������� ��������� ����������������� ��� �������������� ��������. +

+ ���� � ��� ���� ������� ���������� � ���������� �������������� ���� ����� ����������� . +



+ + ������������e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/russian-koi8-r/fancydmtemplate.html b/config/e2guardian/languages/russian-koi8-r/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/russian-koi8-r/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/russian-koi8-r/messages b/config/e2guardian/languages/russian-koi8-r/messages new file mode 100644 index 0000000..583eee9 --- /dev/null +++ b/config/e2guardian/languages/russian-koi8-r/messages @@ -0,0 +1,117 @@ +# e2guardian messages file in Russian KOI8-R +"0","Message number absent" # needs translation +"1","ДоÑтуп запрещён" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," в " +"51","ИСКЛЮЧЕÐИЕ" +"52","ЗÐПРЕЩЕÐ" +"53","ЗÐРÐЖЕÐ" +"54","ОТСКÐÐИРОВÐÐ" +"55","CONTENTMOD" +"56","URLMOD" +"57","HEADERMOD" +"58","HEADERADD" +"59","NETERROR" +"70","SSL СÐЙТ" +"71","IP Limit" +"72","Сканирование контента" +"100","Вашему IP адреÑу запрещен веб-проÑмотр: " +"101","Вашему IP адреÑу запрещен веб-проÑмотр." +"102","Пользователю запрещён веб-проÑмотр: " +"103","Заблокированный IP клиента" +"104","Ð—Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ" +"105","Заблокированный пользователь" +"110","Proxy authentication error" # needs translation +"121","С вашей локации разрешен только ограниченный доÑтуп" +"150","Сертификат Ñервера не ÑвлÑетÑÑ Ð´ÐµÐ¹Ñтвительным" +"151","Ðевозможно открыть SSL Ñоединение" +"152","Ðе удалоÑÑŒ получить SSL Ñертификат" +"153","Ðе удалоÑÑŒ загрузить приватный ключ Ñертификата" +"154","Ðе удалоÑÑŒ ÑоглаÑовать SSL Ñоединение Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð¼" +"155","Сервер не предоÑтавил SSL Ñертификат" +"156","SSL Ñертификат Ñервера не Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ домена" +"157","Ðе удалоÑÑŒ Ñоздать тоннель через локальный прокÑи" +"158","Ðе удалоÑÑŒ открыть тоннель" +"159","Ðе удалоÑÑŒ подключить к прокÑи Ñерверу" +"160","Ðе удалоÑÑŒ ÑоглаÑовать SSL Ñоединение Ñ Ñервером" +"200","Ðеверный URL" +"201","Ðе удалоÑÑŒ подключитьÑÑ Ðº прокÑи Ñерверу (таймаут)" +"202","Ðе удалоÑÑŒ подключитьÑÑ Ðº прокÑи Ñерверу (ошибка Ñети)" +"203","Запрашиваемый Ñайт не отвечает" +"204"," - ПожалуйÑта попробуйте ещё раз" +"205","ПрокÑи Ñервер не отвечает (ошибка Ñети)" +"206"," - ПожалуйÑта попробуйте ещё раз позже" +"207","Запрашиваемый Ñайт не ÑущеÑтвует" +"208","Запрашиваемый Ñайт не имеет IPv4 адреÑа" +"209","Ошибка ÑервиÑа DNS - попробуйте Ñнова" +"210","Ошибка ÑервиÑа DNS - попробуйте Ñнова" +"300","Ðайдена Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½Ð½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°: " +"301","Ðайдена Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°." +"400","Ðайдена Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ñ„Ñ€Ð°Ð·: " +"401","Ðайдена Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ñ„Ñ€Ð°Ð·." +"402","Лимит проверки контента " +"403","Заблокирован ÑиÑтемой проверки контента." +"450","Ðайден запрещённый поиÑковой запроÑ: " +"451","Ðайден запрещённый поиÑковой запроÑ." +"452","Ðайдена Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð¸Ñковых фраз: " +"453","Ðайдена Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð¸Ñковых фраз." +"454","Лимит веÑа поиÑкового запроÑа " +"455","ДоÑтигнут лимит веÑа поиÑкового запроÑа." +"456","Ðайден доверенный поиÑковой запроÑ: " +"457","Ðайден доверенный поиÑковой запроÑ: " +"500","Заблокированный Ñайт: " +"501","Ð—Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑылка: " +"502","Включен режим белого ÑпиÑка. Данный Ñайт отÑутÑтвует в нём." +"503","СÑылка Ñовпала Ñ Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½Ð½Ñ‹Ð¼ паттерном : " +"504","Ð—Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑылка." +"505","ДоÑтуп по IP запрещён." +"506","HTTPS доÑтупен только к доверенным адреÑам." +"507","HTTPS доÑтуп по IP адреÑу запрещён." +"508","ДоÑтуп Ñ Ñтого браузера запрещён: " +"509","ДоÑтуп Ñ Ñтого браузера запрещён." +"510","Заблокированный IP Ñайт " +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Заблокированный HTTPS Ñайт: " +"521","Ð—Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð¸ÑÐºÐ¾Ð²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°: " +"522","Заблокированный User-Agent: " +"560","Заблокированный Ñайт (локально): " +"561","Ð—Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑылка (локально): " +"580","Заблокированный HTTPS Ñайт (локально): " +"581","Ð—Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð¸ÑÐºÐ¾Ð²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° (локально): " +"600","Совпал IP клиента." +"601","Совпал пользователь." +"602","Совпал Ñайт: " +"603","Совпала ÑÑылка: " +"604","Ðайдена фраза: " +"605","Ðайдена ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ñ„Ñ€Ð°Ð·: " +"606","СÑылка на обход." +"607","Cookie обхода." +"608","ОтÑканировать ÑÑылку обхода." +"609","Совпал паттерн ÑÑылки: " +"610","Совпал паттерн User-Agent: " +"620","Referer match Совпал реферер: " +"630","Совпала ÑÑылка " +"631"," ÑпиÑка доÑтупа локации" +"632","Совпадение Ñо ÑпиÑком доÑтупа локации" +"662","Сайт (локально): " +"663","СÑылка (локально): " +"700","Загрузка заблокирована." +"701","ДоÑтигнут лимит загрузки." +"750","Включен режим белого ÑпиÑка Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ðº и Ñтот MIME type в нем отÑутÑтвует: " +"751","Включен режим белого ÑпиÑка Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ðº и Ñтот MIME type в нем отÑутÑтвует." +"800","Заблокированный MIME type: " +"900","Заблокированное раÑширение файла: " +"1100","Ðайден плохой, либо вируÑный контент." +"1101","Реклама заблокирована" +"1200","ПожалуйÑта подождите. Загрузка файла Ð´Ð»Ñ ÑканированиÑ..." +"1201","Внимание: файл Ñлишком большой Ð´Ð»Ñ ÑканированиÑ. ЕÑли Ñтот файл больше " +"1202",", обновите Ñтраницу Ð´Ð»Ñ Ð¿Ñ€Ñмого ÑкачиваниÑ." +"1203","Ð’ÐИМÐÐИЕ: Ðевозможно произвеÑти Ñканирование контента!" +"1210","Загрузка завершена. Сканирование..." +"1220","Сканирование завершено.

Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸: " +"1221","Загрузка завершена; файл не был отÑканирован.

Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸: " +"1222","Файл Ñлишком большой Ð´Ð»Ñ ÐºÑша.

Ðажмите здеÑÑŒ Ð´Ð»Ñ ÑÐºÐ°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ Ð±ÐµÐ· ÑканированиÑ: " +"1230","Файл недоÑтупен" +"9999","Dummy so master always has higher number" diff --git a/config/e2guardian/languages/russian-koi8-r/neterr_template.html b/config/e2guardian/languages/russian-koi8-r/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/russian-koi8-r/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/russian-koi8-r/template.html b/config/e2guardian/languages/russian-koi8-r/template.html new file mode 100644 index 0000000..9f45b41 --- /dev/null +++ b/config/e2guardian/languages/russian-koi8-r/template.html @@ -0,0 +1,73 @@ + + + e2guardian - Access Denied + + + + + +

+ + + + + + + + + + + +
+ + ������ ��������! +
+ + -USER-  +
+ + �������� ����� ����������� + + + + ������ � ��������:

-URL-

+ + ... ��� �������� �� ��������� �������: +

+ + -REASONGIVEN- + +



�� ������ ��� ���������, ��������� �� + ��������� �������� ������ � ����, ��� �������� (��� ���������, + ��� ��������) ����������� ���������.

���� � ��� + ���������� �������, �� ��������� � ����� ������� + ���������������.



+ + Powered by e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/slovak/fancydmtemplate.html b/config/e2guardian/languages/slovak/fancydmtemplate.html new file mode 100644 index 0000000..a65a2bd --- /dev/null +++ b/config/e2guardian/languages/slovak/fancydmtemplate.html @@ -0,0 +1,173 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + diff --git a/config/e2guardian/languages/slovak/messages b/config/e2guardian/languages/slovak/messages new file mode 100644 index 0000000..989ce36 --- /dev/null +++ b/config/e2guardian/languages/slovak/messages @@ -0,0 +1,120 @@ +# e2guardian messages file in Slovak +# by DuÅ¡an BiroÅ¡Äák biroscak@gmail.com +# corrections Peter Tuhársky tuharsky@misbb.sk +# charset=utf-8 +"0","Message number absent" # needs translation +"1","Prístup bol odopretý +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","VaÅ¡ej IP adrese nie je dovolené prehliadaÅ¥: " +"101","VaÅ¡a IP adresa nemá dovolené prohliadanie." +"102","VaÅ¡e používateľské meno nemá dovolené prehliadaÅ¥: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","Požadovaná URL je chybne zadaná." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","NaÅ¡la sa zakázaná fráza: " +"301","NaÅ¡la sa zakázaná fráza." +"400","NaÅ¡la sa zakázaná kombinácia fráz: " +"401","NaÅ¡la sa zakázaná kombinácia fráz." +"402","Limit vážených fráz: " +"403","Bol prekroÄený limit pre vážené frázy." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Zakázaná doména: " +"501","Zakázaná URL: " +"502","CeloploÅ¡né blokovanie prístupu je aktivované a táto webová doména nie je povolená." +"503","NaÅ¡la sa zakázaná URL adresa podľa regulárneho výrazu: " +"504","NaÅ¡la sa zakázaná URL adresa podľa regulárneho výrazu." +"505","CeloploÅ¡né blokovanie IP adries je aktivované a bola zadaná len IP adresa." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","NaÅ¡la sa výnimková IP adresa klienta." +"601","NaÅ¡iel sa výnimkový používateľ." +"602","NaÅ¡la sa výnimková webová doména." +"603","NaÅ¡la sa výnimková URL adresa." +"604","NaÅ¡la sa výnimková fráza: " +"605","NaÅ¡la sa kombinácia výnimkových fráz: " +"606","PrekonaÅ¥ výnimku URL." +"607","PrekonaÅ¥ cookie výnimku." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Odosielanie na web je zakázané." +"701","Limit pre odosielanie na web bol prekroÄený." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Zakázaný obsah súboru (MIME): " +"900","Zakázaná prípona súboru: " +"1000","Na tejto webovej doméne bola prekroÄená úroveň oznaÄovania PICS." +"1100","V tomto obsahu sa naÅ¡iel vírus." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/slovak/neterr_template.html b/config/e2guardian/languages/slovak/neterr_template.html new file mode 100644 index 0000000..d2bb67e --- /dev/null +++ b/config/e2guardian/languages/slovak/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/slovak/template.html b/config/e2guardian/languages/slovak/template.html new file mode 100644 index 0000000..48908f9 --- /dev/null +++ b/config/e2guardian/languages/slovak/template.html @@ -0,0 +1,81 @@ + + + + + e2guardian - Prístup bol odopretý + + + +
+

+ + + + + + + + + + + + + +
+ Prístup +na túto stránku bol odopretý. +
+ -USER-  +
+ YOUR ORG NAME + + +Prístup na túto stránku: +

+ -URL- +

+ +... bol odopretý z týchto dôvodov: +

+ + -REASONGIVEN- + +



+Zobrazenie tohto hlásenia spôsobila +webstránka, ktorú ste sa +pokúsili otvoriÅ¥, +pretože obsahuje alebo je oznaÄená ako obsahujúca +nepatriÄný obsah. +

+Ak máte nejaké otázky alebo +námietky, prosím obráÅ¥te sa na svojho +správcu siete. +



+ +Beží na e2guardian +
+
+ + + + + + diff --git a/config/e2guardian/languages/spanish/fancydmtemplate.html b/config/e2guardian/languages/spanish/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/spanish/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/spanish/messages b/config/e2guardian/languages/spanish/messages new file mode 100644 index 0000000..4de8f3e --- /dev/null +++ b/config/e2guardian/languages/spanish/messages @@ -0,0 +1,118 @@ +# e2guardian 3 messages file in Spanish +# Translated by Roberto Quiroga, adapted for Unicode by Peter Vollmar +"0","Message number absent" # needs translation +"1","Acceso Denegado" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Su dirección IP no está autorizada a visitar: " +"101","Su dirección IP no está autorizada a navegar." +"102","El usuario no está autorizado a visitar: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","La URL solicitada está mal formada." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Se encontró la frase no permitida: " +"301","Se encontró una frase no permitida" +"400","Combinación de frases no permitida: " +"401","Combinación de frases no permitida." +"402","Límite de ponderación de frases de " +"403","Límite de ponderación de frases excedido" +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Sitio no permitido: " +"501","URL no permitida: " +"502","Bloqueo general de IP está activo y el sitio deseado no está en la lista de IPs permitidas." +"503","URL bloqueada por expresión regular: " +"504","URL bloqueada por expresión regular." +"505","Bloqueo general de IP está activo y la dirección deseada consiste únicamente en IP." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Dirección IP del cliente presente en la lista de excepciones." +"601","Usuario presente en la lista de excepciones." +"602","Sitio presente en la lista de excepciones." +"603","URL presente en la lista de excepciones." +"604","Frase presente en la lista de excepciones." +"605","Combinación de frases presente en la lista de excepciones: " +"606","Puente URL en la lista de excepciones." +"607","Puente cookie en la lista de excepciones." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","La subida está bloqueada." +"701","Límite de subida excedido." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Clase MIME bloqueada: " +"900","Extensión bloqueada: " +"1000","Clasificación PICS excedida en el sitio indicado." +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/spanish/neterr_template.html b/config/e2guardian/languages/spanish/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/spanish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/spanish/template.html b/config/e2guardian/languages/spanish/template.html new file mode 100644 index 0000000..140f060 --- /dev/null +++ b/config/e2guardian/languages/spanish/template.html @@ -0,0 +1,79 @@ + + + +e2guardian Acceso denegado + + + + + +

+ + + + + + + + + + + +
+ + Acceso denegado! +
+ + -USER-  +
+ +SU COMPANIA + + + +El acceso a la página web +

+ -URL- +

+ +ha sido denegado por la siguiente razón: +

+ + -REASONGIVEN- + +



+Usted está viendo este mensaje de error porque la página a la que
+intenta acceder contiene, o está clasificada como conteniendo,
+material que se considera inapropiado. +

+Si tiene preguntas, por favor póngase en contacto
con el Administrador de Sistemas o el Administrador de la Red. +



+ + Powered by e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/swedish/fancydmtemplate.html b/config/e2guardian/languages/swedish/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/swedish/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/swedish/messages b/config/e2guardian/languages/swedish/messages new file mode 100644 index 0000000..a0a4c16 --- /dev/null +++ b/config/e2guardian/languages/swedish/messages @@ -0,0 +1,118 @@ +# e2guardian messages file in Swedish +# Swedish translation by: David Hed +"0","Message number absent" # needs translation +"1","åtkomst nekad" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Din IP adress har inte tillstånd att surfa: " +"101","Din IP adress har inte tillstånd att surfa." +"102","Din användaridentitet har inte tillstånd att surfa: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","Begärd URL är felformaterad." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Förbjuden fras funnen: " +"301","Förbjuden fras funnen." +"400","Förbjuden kombination av fraser funnen: " +"401","Förbjuden kombination av fraser funnen." +"402","Viktad frasbedömning av " +"403","Viktad fras begränsning överskriden." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Förbjuden webbplats: " +"501","Förbjuden adress: " +"502","Blanket Block är aktiverat och webbplatsen är inte grå eller vitlistad." +"503","Förbjudet ord i adressfältet: " +"504","Förbjudet ord i adressfältet funnen." +"505","Blanket IP Block är aktiverat och denna adress är en endast IP adress." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Undantagen Dators IP-adress matchar." +"601","Undantagen användaridentitet matchar." +"602","Undantagen webbplats matchar." +"603","Undantagen URL matchar." +"604","Undantagsfras funnen: " +"605","Kombinerad undantagsfras funnen: " +"606","Kringgå URL begränsning." +"607","Kringgå cookie begränsning." +"608","Scan bypass URL exception." +"609","Exception regular expression URL match: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Webbuppladdning är förbjuden." +"701","Storlek för webbuppladdning är överskriden." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Förbjuden MIME typ: " +"900","Förbjuden filändelse: " +"1000","PICS klassificiering överskriden på ovanstående webbplats." +"1100","Virusinfekterat innehåll funnet." +"1101","Advert blocked" +"1200","Please wait - downloading to be scanned..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","File no longer available" diff --git a/config/e2guardian/languages/swedish/neterr_template.html b/config/e2guardian/languages/swedish/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/swedish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/swedish/template.html b/config/e2guardian/languages/swedish/template.html new file mode 100644 index 0000000..3fffa88 --- /dev/null +++ b/config/e2guardian/languages/swedish/template.html @@ -0,0 +1,75 @@ + + + +e2guardian - Åtkomst nekad + + + + +

+ + + + + + + + + + + +
+ + Åtkomst förhindrad av proxy! +
+ + -USER-  +
+ + YOUR ORG NAME + + + + Åtkomst till sidan: +

+ -URL- +

+ + ... har blivit nekad på grund av följande skäl: +

+ + -REASONGIVEN- + +



+ Den centrala proxyservern är inställd på att filtrera undan eventuell skadlig kod eller av policyskäl begränsade nerladdningar. Bedömningen är automatisk så programmet kan ibland på felaktiga grunder förhindra åtkomst. +

+ Anser du att denna blockering är felaktig eller har andra frågor, kontakta din systemadministratör. +



+ + Powered by e2guardian +
+ + + + + + diff --git a/config/e2guardian/languages/turkish/fancydmtemplate.html b/config/e2guardian/languages/turkish/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/turkish/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/turkish/messages b/config/e2guardian/languages/turkish/messages new file mode 100644 index 0000000..ff73e1e --- /dev/null +++ b/config/e2guardian/languages/turkish/messages @@ -0,0 +1,119 @@ +# e2guardian messages file in Turkish +# Translation by Ozgur Karatas +# trdocmaster at e2guardian dot org +"0","Message number absent" # needs translation +"1","Erisim Engellendi" +"10","IP limit exceeded. There is a " # needs translation +"11"," IP limit set." # needs translation +"50"," in " # needs translation +"51","TRUSTED" # needs translation +"52","DENIED" # needs translation +"53","INFECTED" # needs translation +"54","SCANNED" # needs translation +"55","CONTENTMOD" # needs translation +"56","URLMOD" # needs translation +"57","HEADERMOD" # needs translation +"58","HEADERADD" # needs translation +"59","NETERROR" # needs translation +"70","SSL SITE" # needs translation +"71","IP Limit" # needs translation +"72","Content scanning" # needs translation +"100","Bu IP adresi ile internete erisim engellenmistir: " +"101","Bu IP ile internete erisim engellenmistir." +"102","Bu kullanici adi ile internete erisim engellenmistir.: " +"103","Banned Client IP" # needs translation +"104","Banned Location" # needs translation +"105","Banned User" # needs translation +"110","Proxy authentication error" # needs translation +"121","Only limited access allowed from your location" # needs translation +"150","Certificate supplied by server was not valid" # needs translation +"151","Could not open ssl connection" # needs translation +"152","Failed to get ssl certificate" # needs translation +"153","Failed to load ssl private key" # needs translation +"154","Failed to negotiate ssl connection to client" # needs translation +"155","No SSL certificate supplied by server" # needs translation +"156","Server's SSL certificate does not match domain name" # needs translation +"157","Unable to create tunnel through local proxy" # needs translation +"158","Opening tunnel failed" # needs translation +"159","Could not connect to proxy server" # needs translation +"160","Failed to nogotiate ssl connection to server" # needs translation +"200","Gitmek istediginiz URL hatalidir." +"201","Unable to get response from upstream proxy (timeout)" # needs translation +"202","Unable to get response from upstream proxy (error)" # needs translation +"203","The site requested is not responding" # needs translation +"204"," - Please try again later" # needs translation +"205","Upstream proxy is not responding (network error)" # needs translation +"206"," - Please try again later" # needs translation +"207","The site requested does not exist" # needs translation +"208","The site requested does not have an IPv4 address" # needs translation +"209","Temporary DNS service failure - please try again" # needs translation +"210","DNS service failure - please try again later" # needs translation +"300","Yasaklanmis bir ifade iceren sayfaya girmeye calisiyorsunuz: " +"301","Sistem yoneticisi tarafindan engellenmis bir ifade tespit edildi." +"400","Yasaklanmis kelimeler bulundu: " +"401","Yasaklanmis kelimeler tespit edildi." +"402","Engellenmis ifadelerin limiti asildi: " +"403","Engellenmis kelime limiti asildi." +"450","Banned search term found: " # needs translation +"451","Banned search term found." # needs translation +"452","Banned combination search term found: " # needs translation +"453","Banned combination search term found." # needs translation +"454","Weighted search term limit of " # needs translation +"455","Weighted search term limit exceeded." # needs translation +"456","Exception combination search term found: " # needs translation +"457","Exception search term found: " # needs translation +"500","Yasaklanmis Site: " +"501","Yasaklanmis URL: " +"502","Erisilebilir listesinde bulunmayan bir siteye giremezsiniz." +"503","Yasaklanmis dzensiz ifade (URL): " +"504","Yasaklanmis duzensiz ifadeye rastlandi." +"505","Bu IP adresinin asagidaki siteye girisi engellenmistir." +"506","HTTPS access is only allowed to trusted sites." # needs translation +"507","HTTPS access by IP address is not allowed." # needs translation +"508","Access not allowed using this browser (or app): " # needs translation +"509","Access not allowed using this browser (or app)." # needs translation +"510","Blocked IP site " # needs translation +"511","Tranparent https connection is not TLS: " # needs translation +"512","Tranparent https connection does not have SNI: " # needs translation +"520","Blocked HTTPS site: " # needs translation +"521","Banned Search Words: " # needs translation +"522","Blocked User-Agent: " # needs translation +"560","Blocked site (local): " # needs translation +"561","Blocked URL (local): " # needs translation +"580","Blocked HTTPS site (local): " # needs translation +"581","Banned Search Words (local): " # needs translation +"600","Ayricalikli IP adresine sahipsiniz." +"601","Ayricalikli kullanici adina sahipsiniz." +"602","Ayricalikli bir siteye girdiniz." +"603","Ayricalikli bir URL adresine girdiniz." +"604","Ayricalikli ifade bulundu: " +"605","Kombinasyonu ertelenmis ifade bulundu: " +"606","URL adresi ayricalikli listesine alinmalidir." +"607","Bu sitede cookie kesfedildi." +"608","Ayricalikli URL adresi taraniyor." +"609","Ayricalikli duzenlenmis url adresi: " +"610","User-Agent pattern match: " # needs translation +"620","Referer match: " # needs translation +"630","URL match in " # needs translation +"631"," location allow list" # needs translation +"632","Location overide allow list matched" # needs translation +"662","Site (local)." # needs translation +"663","URL (local)." # needs translation +"700","Internet zerinden dosya gnderimi yasaklanmistir." +"701","Internet zerinden dosya gnderimi sinirini astiniz." +"750","Blanket file download is active and this MIME type is not on the white list: " # needs translation +"751","Blanket file download is active and this file is not matched by the white lists." # needs translation +"800","Yasaklanmis MIME Tr: " +"900","Yasaklanmis dosya uzantisi: " +"1000","Bu sitedeki resim siniri asildi." +"1100","Virus ve kotu icerige rastlandi." +"1101","Site bloklandi. Adware veya spyware tespit edildi." +"1200","Lutfen bekleyiniz, icerik taranarak yukleniyor.." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " # needs translation +"1202",", then refresh this page to download directly." # needs translation +"1203","WARNING: Could not perform content scan!" # needs translation +"1210","Yukleme bitti, taramadan geciriliyor.." +"1220","Tarama bitti.

Yuklemek icin tiklayiniz: " +"1221","Download complete; file not scanned.

Click here to download: " # needs translation +"1222","File too large to cache.

Click here to re-download, bypassing scan: " # needs translation +"1230","Dosya uzunlugu gecersizdir." diff --git a/config/e2guardian/languages/turkish/neterr_template.html b/config/e2guardian/languages/turkish/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/turkish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/turkish/template.html b/config/e2guardian/languages/turkish/template.html new file mode 100644 index 0000000..4ef166d --- /dev/null +++ b/config/e2guardian/languages/turkish/template.html @@ -0,0 +1,151 @@ + + + + + + + + E2Guardian - Erisim Engellendi + + + + + + + + + + + + + + + + +
+ +ACCESS DEINIED + +
+

+

Asagidaki adrese erisiminiz engellenmistir:


+
+ -URL- +

+ Erisim kisitlama sebebi:
+
+ Category: -CATEGORIES-   + -REASONGIVEN- +


+

Sistem yöneticiniz tarafindan girilmesine izin verilmeyen bir sayfaya erisim yapmaya calisiyorsunuz.

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+

+
+
+ diff --git a/config/e2guardian/languages/ukenglish/fancydmtemplate.html b/config/e2guardian/languages/ukenglish/fancydmtemplate.html new file mode 100644 index 0000000..11fff02 --- /dev/null +++ b/config/e2guardian/languages/ukenglish/fancydmtemplate.html @@ -0,0 +1,179 @@ + + + Downloading -FILENAME- (-FILESIZE- bytes) + + + + + + + + diff --git a/config/e2guardian/languages/ukenglish/messages b/config/e2guardian/languages/ukenglish/messages new file mode 100644 index 0000000..3d5fffb --- /dev/null +++ b/config/e2guardian/languages/ukenglish/messages @@ -0,0 +1,117 @@ +# e2guardian messages file in UK English +"0","Message number absent" +"1","Access Denied" +"10","IP limit exceeded. There is a " +"11"," IP limit set." +"50"," in " +"51","TRUSTED" +"52","DENIED" +"53","INFECTED" +"54","SCANNED" +"55","CONTENTMOD" +"56","URLMOD" +"57","HEADERMOD" +"58","HEADERADD" +"59","NETERROR" +"70","SSL SITE" +"71","IP Limit" +"72","Content scanning" +"100","Your IP address is not allowed to web browse: " +"101","Your IP address is not allowed to web browse." +"102","Your username is not allowed to web browse: " +"103","Banned Client IP" +"104","Banned Location" +"105","Banned User" +"110","Proxy authentication error" +"121","Only limited access allowed from your location" +"150","Certificate supplied by server was not valid" +"151","Could not open ssl connection" +"152","Failed to get ssl certificate" +"153","Failed to load ssl private key" +"154","Failed to negotiate ssl connection to client" +"155","No SSL certificate supplied by server" +"156","Servers SSL certificate does not match domain name" +"157","Unable to create tunnel through local proxy" +"158","Opening tunnel failed" +"159","Could not connect to proxy server" +"160","Failed to nogotiate ssl connection to server" +"200","The requested URL is malformed." +"201","Unable to get response from upstream proxy (timeout)" +"202","Unable to connect to upstream proxy (network error)" +"203","The site requested is not responding" +"204"," - Please try again later" +"205","Upstream proxy is not responding (network error)" +"206"," - Please try again later" +"207","The site requested does not exist" +"208","The site requested does not have an IPv4 address" +"209","Temporary DNS service failure - please try again" +"210","DNS service failure - please try again later" +"300","Banned phrase found: " +"301","Banned phrase found." +"400","Banned combination phrase found: " +"401","Banned combination phrase found." +"402","Content Check limit of " +"403","Blocked by Content Checking." +"450","Banned search term found: " +"451","Banned search term found." +"452","Banned combination search term found: " +"453","Banned combination search term found." +"454","Weighted search term limit of " +"455","Weighted search term limit exceeded." +"456","Exception combination search term found: " +"457","Exception search term found: " +"500","Blocked site: " +"501","Blocked URL: " +"502","Walled Garden is on and the site is not available to you." +"503","Banned pattern matched URL: " +"504","Blocked URL." +"505","Access to sites by IP address is not allowed." +"506","HTTPS access is only allowed to trusted sites." +"507","HTTPS access by IP address is not allowed." +"508","Access not allowed using this browser (or app): " +"509","Access not allowed using this browser (or app)." +"510","Blocked IP site " +"511","Tranparent https connection is not TLS: " +"512","Tranparent https connection does not have SNI: " +"520","Blocked HTTPS site: " +"521","Banned Search Words: " +"522","Blocked User-Agent: " +"560","Blocked site (local): " +"561","Blocked URL (local): " +"580","Blocked HTTPS site (local): " +"581","Banned Search Words (local): " +"600","Client IP match." +"601","Client user match." +"602","Site match: " +"603","URL match: " +"604","Phrase found: " +"605","Combination phrase found: " +"606","Bypass URL." +"607","Bypass cookie." +"608","Scan bypass URL." +"609","URL pattern match: " +"610","User-Agent pattern match: " +"620","Referer match: " +"630","URL match in " +"631"," location allow list" +"632","Location overide allow list matched" +"662","Site (local): " +"663","URL (local): " +"700","Web upload is banned." +"701","Web upload limit exceeded." +"750","Blanket file download is active and this MIME type is not on the white list: " +"751","Blanket file download is active and this file is not matched by the white lists." +"800","Banned MIME file type: " +"900","Banned file extension: " +"1100","Virus or bad content detected." +"1101","Advert blocked" +"1200","Please wait - downloading file for scanning..." +"1201","Warning: file too large to scan. If you suspect that this file is larger than " +"1202",", then refresh this page to download directly." +"1203","WARNING: Could not perform content scan!" +"1210","Download Complete. Starting scan..." +"1220","Scan complete.

Click here to download: " +"1221","Download complete; file not scanned.

Click here to download: " +"1222","File too large to cache.

Click here to re-download, bypassing scan: " +"1230","File no longer available" +"9999","Dummy so master always has higher number" diff --git a/config/e2guardian/languages/ukenglish/neterr_template.html b/config/e2guardian/languages/ukenglish/neterr_template.html new file mode 100644 index 0000000..aec3aed --- /dev/null +++ b/config/e2guardian/languages/ukenglish/neterr_template.html @@ -0,0 +1,144 @@ + + + + + + + + E2Guardian - Unable to load website + + + + + + + + + + + + + + + + +
+ +Page unavailable + +
+

+

Oops! There seems to be an issue loading this page:


+
+ -URL- +

+ Because
+
+ -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ +Go Back to previous page +
+
+ + diff --git a/config/e2guardian/languages/ukenglish/template.html b/config/e2guardian/languages/ukenglish/template.html new file mode 100644 index 0000000..60c1524 --- /dev/null +++ b/config/e2guardian/languages/ukenglish/template.html @@ -0,0 +1,154 @@ + + + + + + + + E2Guardian - Access Denied + + + + + + + + + + + + + + + + +
+ +ACCESS DEINIED + +
+

+

Oops! You have tried visiting a website which has been deemed inappropriate:


+
+ -URL- +

+ Because
+
+ Category: -CATEGORIES-   + -REASONGIVEN- +


+

Your details are below:

+ User: -USER-   Group: -FILTERGROUP-   IP: -IP- +


+ + Acknowledge +

+
+
+ + diff --git a/config/e2guardian/lists/addheaderregexplist b/config/e2guardian/lists/addheaderregexplist new file mode 100644 index 0000000..8447024 --- /dev/null +++ b/config/e2guardian/lists/addheaderregexplist @@ -0,0 +1,13 @@ +#Add header where url matches +# +## to enable restricted YouTube +#"(^http://www\.youtube\.com/.*$)"->"YouTube-Restrict: Strict" +#"(^http://m\.youtube\.com/.*$)"->"YouTube-Restrict: Strict" +#"(^http://youtubei\.googleapis\.com/.*$)"->"YouTube-Restrict: Strict" +#"(^http://youtube\.googleapis\.com/.*$)"->"YouTube-Restrict: Strict" +#"(^http://www\.youtube-nocookie\.com/.*$)"->"YouTube-Restrict: Strict" +#"(^http://www\.youtube\.com$)"->"YouTube-Restrict: Strict" +#"(^http://m\.youtube\.com$)"->"YouTube-Restrict: Strict" +#"(^http://youtubei\.googleapis\.com$)"->"YouTube-Restrict: Strict" +#"(^http://youtube\.googleapis\.com$)"->"YouTube-Restrict: Strict" +#"(^http://www\.youtube-nocookie\.com$)"->"YouTube-Restrict: Strict" diff --git a/config/e2guardian/lists/authexceptioniplist b/config/e2guardian/lists/authexceptioniplist new file mode 100644 index 0000000..f6b8ec5 --- /dev/null +++ b/config/e2guardian/lists/authexceptioniplist @@ -0,0 +1,9 @@ +#Access allowed prior to authentication +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/authexceptionsiteiplist b/config/e2guardian/lists/authexceptionsiteiplist new file mode 100644 index 0000000..f6b8ec5 --- /dev/null +++ b/config/e2guardian/lists/authexceptionsiteiplist @@ -0,0 +1,9 @@ +#Access allowed prior to authentication +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/authexceptionsitelist b/config/e2guardian/lists/authexceptionsitelist new file mode 100644 index 0000000..570abd3 --- /dev/null +++ b/config/e2guardian/lists/authexceptionsitelist @@ -0,0 +1 @@ +#Access allowed prior to authentication diff --git a/config/e2guardian/lists/authexceptionurllist b/config/e2guardian/lists/authexceptionurllist new file mode 100644 index 0000000..570abd3 --- /dev/null +++ b/config/e2guardian/lists/authexceptionurllist @@ -0,0 +1 @@ +#Access allowed prior to authentication diff --git a/config/e2guardian/lists/authplugins/ipgroups b/config/e2guardian/lists/authplugins/ipgroups new file mode 100644 index 0000000..5ec6b58 --- /dev/null +++ b/config/e2guardian/lists/authplugins/ipgroups @@ -0,0 +1,11 @@ +# IP-Group list +# Used by the IP-based auth plugin to assign IP addresses to filter groups. +# +# Examples: +# Straight IP matching: +#192.168.0.1 = filter1 +# Subnet matching: +#192.168.1.0/255.255.255.0 = filter1 +# Range matching: +#192.168.1.0-192.168.1.255 = filter1 + diff --git a/config/e2guardian/lists/authplugins/portgroups b/config/e2guardian/lists/authplugins/portgroups new file mode 100644 index 0000000..4938e98 --- /dev/null +++ b/config/e2guardian/lists/authplugins/portgroups @@ -0,0 +1,8 @@ +# Port-Group list +# Used by the Port-based auth plugin to assign Ports to filter groups. +# +# Note that ports MUST be entered in ascending order +# +# Examples: +#8080 = filter0 +#8081 = filter1 diff --git a/config/e2guardian/lists/bannedclientlist b/config/e2guardian/lists/bannedclientlist new file mode 100644 index 0000000..bd7eff1 --- /dev/null +++ b/config/e2guardian/lists/bannedclientlist @@ -0,0 +1,6 @@ +# Domain names of client machines to +# disallow web access to. +# +# This is not the the domains of web servers +# you want to filter. + diff --git a/config/e2guardian/lists/bannedextensionlist b/config/e2guardian/lists/bannedextensionlist new file mode 100644 index 0000000..ad42160 --- /dev/null +++ b/config/e2guardian/lists/bannedextensionlist @@ -0,0 +1,211 @@ +#Banned extension list + +# File extensions with executable code + +# The following file extensions can contain executable code. +# This means they can potentially carry a virus to infect your computer. + +.ade # Microsoft Access project extension +.adp # Microsoft Access project +.asx # Windows Media Audio / Video +.bas # Microsoft Visual Basic class module +.bat # Batch file +.cab # Windows setup file +.chm # Compiled HTML Help file +.cmd # Microsoft Windows NT Command script +.com # Microsoft MS-DOS program +.cpl # Control Panel extension +.crt # Security certificate +.dll # Windows system file +.exe # Program +.hlp # Help file +.ini # Windows system file +.hta # HTML program +.inf # Setup Information +.ins # Internet Naming Service +.isp # Internet Communication settings +# .js # JScript file - often needed in web pages +# .jse # Jscript Encoded Script file - often needed in web pages +.lnk # Windows Shortcut +.mda # Microsoft Access add-in program +.mdb # Microsoft Access program +.mde # Microsoft Access MDE database +.mdt # Microsoft Access workgroup information +.mdw # Microsoft Access workgroup information +.mdz # Microsoft Access wizard program +.msc # Microsoft Common Console document +.msi # Microsoft Windows Installer package +.msp # Microsoft Windows Installer patch +.mst # Microsoft Visual Test source files +.pcd # Photo CD image, Microsoft Visual compiled script +.pif # Shortcut to MS-DOS program +.prf # Microsoft Outlook profile settings +.reg # Windows registry entries +.scf # Windows Explorer command +.scr # Screen saver +.sct # Windows Script Component +.sh # Shell script +.shs # Shell Scrap object +.shb # Shell Scrap object +.sys # Windows system file +.url # Internet shortcut +.vb # VBScript file +.vbe # VBScript Encoded script file +.vbs # VBScript file +.vxd # Windows system file +.wsc # Windows Script Component +.wsf # Windows Script file +.wsh # Windows Script Host Settings file +.otf # Font file - can be used to instant reboot 2k and xp +.ops # Office XP settings + + + +# Files which one normally things as non-executable but +# can contain harmful macros and viruses + +.doc # Word document +.xls # Excel document +.pps + + +# Other files which may contain files with executable code + +.gz # Gziped file +.tar # Tape ARchive file +.zip # Windows compressed file +.tgz # Unix compressed file +.bz2 # Unix compressed file +.cdr # Mac disk image +.dmg # Mac disk image +.smi # Mac self mounting disk image +.sit # Mac compressed file +.sea # Mac compressed file, self extracting +.bin # Mac binary compressed file +.hqx # Mac binhex encoded file +.rar # Similar to zip + + +# Time/bandwidth wasting files + +.mp3 # Music file +.mpeg # Movie file +.mpg # Movie file +.avi # Movie file +.asf # this can also exploit a security hole allowing virus infection +.iso # CD ISO image +.ogg # Music file +.wmf # Movie file +.bin # CD ISO image +.cue # CD ISO image + +# Banned Media extension list (Audio , Video , Streaming) +# Arrange Alphabetically +# Some have no Description +#.3g2 # +#.3gp # Nokia Movie File +#.3gp2 +#.3gpp +#.3gpp2 +#.aac # AAC Audio +#.acp # AAC for SD Media +#.adts +#.aif +#.aifc +#.aiff # AIFF Audio +#.amc # AMC Media +#.amr # narrow-Band Content +#.asf # Media / this can also exploit a security hole allowing virus infection +#.asx # Windows Media Audio / Video +#.au # uLaw/AU Audio +#.avi # Movie file +#.awb # AMR Wide-Band Content +#.bwf +#.caf # CAF Audio +#.cda # Audio CD File +#.cdda # Audio CD File +#.cel +#.cue # CD ISO image +#.dif +#.divx # Compress Movie +#.dv # Video Format used in Portable Camera +#.flc # Autodesk Animator +#.fli +#.flv # Internet Movies +#.gsm +#.ivf +#.kar # Karaoke Media Files +#.m15 +#.m1a +#.m1s +#.m1v +#.m2v +#.m3u # MP3 Playlist +#.m4a # AAC Audio +#.m4b +#.m4e +#.m4p # AAC Audio (Protected) +#.m4v # Video (Protected) +#.m75 +#.mid # Midi Audio Files +#.midi # Midi Audio Files +#.mjpg +#.mov # Movie Files +#.mp1 +#.mp2 +#.mp3 # Music file +#.mp4 # Mpeg-4 Media +#.mpa +#.mpe +#.mpeg # Movie file +#.mpg # Movie file +#.mpga +#.mpm +#.mps +#.mpv +#.mpv2 +#.mqv # Quicktime Movies +#.mv +#.ogg # Music file +#.ogm # Ogg Based Movie Files +#.pls # Shoutcast type of radio +#.qcp # Qualcomm Purevoice Audio +#.qt # Quicktime File +#.qtc +#.qtl # Quicktime Movies +#.ra # Real Audio +#.ram # Real Audio Media +#.rm # Real Media Files +#.rmi +#.rmm +#.rmp +#.rmvb # Real Media Video +#.rnx +#.rp # Real Player Files +#.rt +#.rts +#.rtsp +#.rv +#.sd2 # Sound Designer II +#.sdp # Stream Descriptor +#.sdv # SD Video +#.sf +#.smf +#.smi # +#.smil # SMIL Multimedia Presentation (Video and Audio Presentation +#.snd +#.ssm # Streaming Media Metafile +#.swa # MP3 Audio +#.swf # Shockwave Streaming files +#.ulw +#.vfw # Video for Windows +#.wav +#.wax +#.wm +#.wma +#.wmf # Movie file +#.wmp +#.wmv # Windows Media Video +#.wmx +#.wvx +#.xpl diff --git a/config/e2guardian/lists/bannediplist b/config/e2guardian/lists/bannediplist new file mode 100644 index 0000000..9ddddaa --- /dev/null +++ b/config/e2guardian/lists/bannediplist @@ -0,0 +1,12 @@ +# IP addresses of client machines to +# disallow web access to. +# +# This is not the IP of web servers +# you want to filter. + +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/bannedmimetypelist b/config/e2guardian/lists/bannedmimetypelist new file mode 100644 index 0000000..791ffea --- /dev/null +++ b/config/e2guardian/lists/bannedmimetypelist @@ -0,0 +1,18 @@ +# banned MIME types + +audio/mpeg +audio/x-mpeg +audio/x-pn-realaudio +audio/x-wav +video/mpeg +video/x-mpeg2 +video/acorn-replay +video/quicktime +video/x-msvideo +video/msvideo +application/gzip +application/x-gzip +application/zip +application/compress +application/x-compress +application/java-vm diff --git a/config/e2guardian/lists/bannedphraselist b/config/e2guardian/lists/bannedphraselist new file mode 100644 index 0000000..3d7da1d --- /dev/null +++ b/config/e2guardian/lists/bannedphraselist @@ -0,0 +1,57 @@ +# BANNEDPHRASELIST - INSTRUCTIONS FOR USE +# +# To block any page with the word "sex". +# < sex > +# +# To block any page with words that contain the string "sex". (ie. sexual) +# +# +# To block any page with the string "sex magazine". +# +# +# To block any page containing the words/strings "sex" and "fetish". +# , +# +# < test> will match any word with the string 'test' at the beginning +# will match any word with the string 'test' at the end +# will match any word with the string 'test' at any point in the word +# < test > will match only the word 'test' +# will match that exact phrase +# , will match if both words are found in the page +# A combination of the above can also be used eg < test>, +# +# +# Extra phrase-list files to include +# .Include +# +# +# All phrases need to be within < and > to work, othewise they will be +# ignored. + +# MORE EXAMPLE LISTS CAN BE DOWNLOADED FROM DANSGUARDIAN.ORG + +# Phrase Exceptions are no longer listed in this file, they are now +# listed in the exceptionphraselist file. +# + +#listcategory: "Banned Phrases" + +# The following banned phraselists enable Website Content Labeling systems. These are enabled by default, but may also be activated using phraselists. + +.Include +#.Include + +# The following banned phraselists are included in the default DG distribution. + +.Include +##.Include + +#.Include + +#.Include +##.Include + +#.Include + + + diff --git a/config/e2guardian/lists/bannedregexpheaderlist b/config/e2guardian/lists/bannedregexpheaderlist new file mode 100644 index 0000000..ac2a8eb --- /dev/null +++ b/config/e2guardian/lists/bannedregexpheaderlist @@ -0,0 +1,9 @@ +#Banned outgoing HTTP headers based on regular expressions +# +# E.g. 'User-Agent: .*MSIE' would block several versions of Internet Explorer +# (assuming the user-agent is not being spoofed by the client) +# +# Headers are matched line-by-line, not as a single block. + +#listcategory: "Banned Regular Expression HTTP Headers" + diff --git a/config/e2guardian/lists/bannedregexpurllist b/config/e2guardian/lists/bannedregexpurllist new file mode 100644 index 0000000..647d4e1 --- /dev/null +++ b/config/e2guardian/lists/bannedregexpurllist @@ -0,0 +1,120 @@ +#Banned URLs based on Regular Expressions +# +# E.g. 'sex' would block sex.com and middlesex.com etc + +#listcategory: "Banned Regular Expression URLs" + +#Banned URLs based on Regular Expressions + + +###################################################### +# Pornography, Modelling and Adult Sites +###################################################### + +# The following two lines may work better than the above - Philip Pearce 9/11/2004 +(big|cyber|hard|huge|mega|small|soft|super|tiny|bare|naked|nude|anal|oral|topp?les|sex|phone)+.*(anal|babe|bharath|boob|breast|busen|busty|clit|cum|cunt|dick|fetish|fuck|girl|hooter|lez|lust|naked|nude|oral|orgy|penis|porn|porno|pupper|pussy|rotten|sex|shit|smutpump|teen|tit|topp?les|xxx)s? +(anal|babe|bharath|boob|breast|busen|busty|clit|cum|cunt|dick|fetish|fuck|girl|hooter|lez|lust|naked|nude|oral|orgy|penis|porn|porno|pupper|pussy|rotten|sex|shit|smutpump|teen|tit|topp?les|xxx)+.*(big|cyber|hard|huge|mega|small|soft|super|tiny|bare|naked|nude|anal|oral|topp?les|sex)+ + +#HardCore phrases +(adultsight|adultsite|adultsonly|adultweb|blowjob|bondage|centerfold|cumshot|cyberlust|cybercore|hardcore|masturbat) +(bangbros|pussylip|playmate|pornstar|sexdream|showgirl|softcore|striptease) + +#SoftCore phrases - more likely to overblock - possibly on news sites +#(incest|obscene|pedophil|pedofil) + +#Photo Modeling - supplied by David Burkholder +#(male|m[ae]n|boy|girl|beaut|agen[ct]|glam)+.*(model|talent) + +# The following will help to block explicit media files (images and video) +(sex|fuck|boob|cunt|fetish|tits|anal|hooter|asses|shemale|submission|porn|xxx|busty|knockers|slut|nude|naked|pussy)+.*(\.jpg|\.wmv|\.mpg|\.mpeg|\.gif|\.mov) +(girls|babes|bikini|model)+.*(\.jpg|\.wmv|\.mpg|\.mpeg|\.gif|\.mov) + +#Block Naturism and Nudist sites +#(naturism|naturist|nude|nudist|nudism|nekkid|nakt|naakt) + + +###################################################### +# Search Engine and Related +###################################################### + +#Block unfiltered options on various search engines +#(^|[\?+=&/])(.*\.google\..*/.*\?.*safe=off)([\?+=&/]|$) +#(^|[\?+=&/])(.*\.alltheweb.com/customize\?.*copt_offensive=off)([\?+=&/]|$) + +#Block images and video on altavista, alltheweb, yahoo etc - as they are anonomised +#(yahoo.com\/image\/) +#(yimg.com\/image\/) +#(altavista.com\/image\/) +#(altavista.com\/video\/) +#(picsearch.com\/is) + +#Block images and video on google +#(images.google)+.*(\.jpg|\.wmv|\.mpg|\.mpeg|\.gif|\.mov) +#(google.com\/video) #block all video +#(google.com\/ThumbnailServer) #block video thumbnails +#(google.com\/videoplay) #block only playing the video + + +###################################################### +# Proxy Sites +###################################################### + +#Block Cgiproxy, Poxy, PHProxy and other Web-based proxies +(cecid.php|nph-webpr|nph-pro|/dmirror|cgiproxy|phpwebproxy|__proxy_url|proxy.php) + +#Block websites containing proxy lists +(anonymizer|proxify|megaproxy) + +#AGRESSIVE blocking of all URLs containing proxy - WARNING - this WILL overblock!! +#(proxy) + + +###################################################### +# Gambling - supplied by David Burkholder +###################################################### +#(casino|bet(ting|s)|lott(ery|o)|gam(e[rs]|ing|bl(e|ing))|sweepstake|poker) + + +###################################################### +# Sport - supplied by David Burkholder +###################################################### +#(bowling|badminton|box(e[dr]|ing)|skat(e[rs]|ing)|hockey|soccer|nascar|wrest|rugby|tennis|sports|cheerlead|rodeo|cricket|badminton|stadium|derby) +#((paint|volley|bas(e|ket)|foot|quet)ball|/players[/\.]?|(carn|fest)ival) + +#Racing - supplied by David Burkholder +#(speed(st|wa|y)|corvette|rac[eiy]|wrest|harley|motorcycle|nascar) + + +###################################################### +# News sites - supplied by David Burkholder +###################################################### +#(news(watch|pap|cast)|herald|sentinel|courier|gazet|tribune|chronicle|daily|ning)news) + + +###################################################### +# Dating Sites - supplied by David Burkholder +###################################################### +#(meet|hook|mailord|latin|(asi|mexic|dominic|russi|kore|colombi|balk)an|brazil|filip|french|chinese|ukrain|thai|tour|foreign|date)+.*(dar?[lt]ing|(sing|coup)le|m[ae]n|girl|boy|guy|mat(e|ing)|l[ou]ve?|partner|meet) +#(marr(y|i[ae])|roman(ce|tic)|fiance|bachelo|dating|affair|personals) + + +###################################################### +# Miscellaneous - Productivity etc. +###################################################### + +#Use this to block web counters: +#(adlog.php|cnt.cgi|count.cgi|count.dat|count.jsp|count.pl|count.php|counter.cgi|counter.js|counter.pl|countlink.cgi|fpcount.exe|logitpro.cgi|rcounter.dll|track.pl|w_counter.js) +#Contributed by proxy@barendse.to + +#Free stuff - supplied by David Burkholder +#(free|phone|mobile)+.*(love|music|movie|dvd|video|stuff|site|arcade|wallpaper|mp3) +#((ring|real)tone) + +#Music - supplied by David Burkholder +#(rock|pop|jazz|rap|punk)+.*(cult|roll|geek|drum|music|history|band) + +# WARNING: This is part of the URL for the e2guardian.org sample virus archive. +# You probably don't want to go there unintentionally. +(Variants/AVTest) + + diff --git a/config/e2guardian/lists/bannedregexpuseragentlist b/config/e2guardian/lists/bannedregexpuseragentlist new file mode 100644 index 0000000..3ebc2eb --- /dev/null +++ b/config/e2guardian/lists/bannedregexpuseragentlist @@ -0,0 +1,7 @@ +#Banned User-Agents based on regular expressions +# +# E.g. ' .*MSIE' would block several versions of Internet Explorer +# (assuming the user-agent is not being spoofed by the client) +# +#listcategory: "user-agent" + diff --git a/config/e2guardian/lists/bannedrooms/default b/config/e2guardian/lists/bannedrooms/default new file mode 100644 index 0000000..127f5d3 --- /dev/null +++ b/config/e2guardian/lists/bannedrooms/default @@ -0,0 +1,2 @@ +#Untitled room +192.168.42.42 diff --git a/config/e2guardian/lists/bannedsearchlist b/config/e2guardian/lists/bannedsearchlist new file mode 100644 index 0000000..18c50cb --- /dev/null +++ b/config/e2guardian/lists/bannedsearchlist @@ -0,0 +1,9 @@ +#Banned Search Words +# +#Words must be in alphabetic order within a single line +# and separated by a '+' sign. +#All combinations of the words will be blocked +# e.g. girl+naughty +# will block naughty+girl as well as girl+naughty + + diff --git a/config/e2guardian/lists/bannedsearchoveridelist b/config/e2guardian/lists/bannedsearchoveridelist new file mode 100644 index 0000000..e69de29 diff --git a/config/e2guardian/lists/bannedsiteiplist b/config/e2guardian/lists/bannedsiteiplist new file mode 100644 index 0000000..097078b --- /dev/null +++ b/config/e2guardian/lists/bannedsiteiplist @@ -0,0 +1,12 @@ +# IP sites in banned list + +#The bannedsiteiplist is for blocking ALL of an IP site + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/bannedsitelist b/config/e2guardian/lists/bannedsitelist new file mode 100644 index 0000000..8ecec1d --- /dev/null +++ b/config/e2guardian/lists/bannedsitelist @@ -0,0 +1,97 @@ +#domains in banned list +#Don't bother with the www. or the http:// + +#The bannedurllist is for blocking PART of a site +#The bannedsitelist is for blocking ALL of a site + +#NOTE: Sites using just IP should be put into bannedsiteiplist + +#You can include +#.tld so for example you can match .gov for example + +#The 'grey' lists override the 'banned' lists. +#The 'exception' lists override the 'banned' lists also. +#The difference is that the 'exception' lists completely switch +#off *all* other filtering for the match. 'grey' lists only +#stop the URL filtering and allow the normal filtering to work. + +#An example of grey list use is when in Blanket Block (whitelist) +#mode and you want to allow some sites but still filter as normal +#on their content + +#Another example of grey list use is when you ban a site but want +#to allow part of it. + +#To include additional files in this list use this example: +#.Include + +#You can have multiple .Includes. + +# Time limiting syntax: +# #time: +# Example: +##time: 9 0 17 0 01234 +# Remove the first # from the line above to enable this list only from +# 9am to 5pm, Monday to Friday. + +# List categorisation +#listcategory: "Banned Sites" + +#List other sites to block: + +# badboys.com + +# NOTE: From v5 Blanket blocks are now implimented using Storyboarding +# WARNING: Old style Blanket blocks in this file will be silently ignored + + +# The squidGuard advert domain/URL lists are now included by default. +# To work with advanced ad blocking & the logadblocks option, advert +# phrase/site/URL lists should have the string "ADs" in their listcategory. +# .Include + +#Remove the # from the following and edit as needed to use a stock +#squidGuard/urlblacklists collection. +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include + +# You will need to edit to add and remove categories you want diff --git a/config/e2guardian/lists/bannedsitelistwithbypass b/config/e2guardian/lists/bannedsitelistwithbypass new file mode 100644 index 0000000..9f36333 --- /dev/null +++ b/config/e2guardian/lists/bannedsitelistwithbypass @@ -0,0 +1,64 @@ +#domains in bannedwithbypass list +# User are not allowed to bypass sites in this list + +#Don't bother with the www. or the http:// + +#NOTE: Sites using just IP should be put into bannedsiteiplistwithbypass + +#You can include +#.tld so for example you can match .gov for example + +#.Include + +#You can have multiple .Includes. + +# WARNING: Old style Blanket blocks in this file will be silently ignored + + +# .Include + +#Remove the # from the following and edit as needed to use a stock +#squidGuard/urlblacklists collection. +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include + +# You will need to edit to add and remove categories you want diff --git a/config/e2guardian/lists/bannedsslsiteiplist b/config/e2guardian/lists/bannedsslsiteiplist new file mode 100644 index 0000000..bba2c2d --- /dev/null +++ b/config/e2guardian/lists/bannedsslsiteiplist @@ -0,0 +1,15 @@ +#IP sites in banned ssl list +#This list is only used for SSL (or CONNECT) requests +#Unlike the bannedsitelist it overides all other lists +# so can be used ban an https site white the http is allowed or made an exception +# +#Only list sites where you only want the https site blocked +#Use bannedsiteiplist for sites where you want both http & https blocked +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/bannedsslsitelist b/config/e2guardian/lists/bannedsslsitelist new file mode 100644 index 0000000..66baaed --- /dev/null +++ b/config/e2guardian/lists/bannedsslsitelist @@ -0,0 +1,9 @@ +#domains in banned ssl list +#Don't bother with the www. or the https:// +#This list is only used for SSL (or CONNECT) requests +# and will not have any effect when MITM is enabled. +#Unlike the bannedsitelist it overides all other lists +# so can be used ban an https site white the http is allowed or made an exception +# +#Only list sites where you only want the https site blocked +#Use bannedsitelist for sites where you want both http & https blocked diff --git a/config/e2guardian/lists/bannedurllist b/config/e2guardian/lists/bannedurllist new file mode 100644 index 0000000..6d6b563 --- /dev/null +++ b/config/e2guardian/lists/bannedurllist @@ -0,0 +1,59 @@ +#URLs in banned list +#Don't bother with the http:// or the www + +#The bannedurllist is for blocking PART of a site +#The bannedsitelist is for blocking ALL of a site + +#The 'grey' lists override the 'banned' lists. +#The 'exception' lists override the 'banned' lists also. +#The difference is that the 'exception' lists completely switch +#off *all* other filtering for the match. 'grey' lists only +#stop the URL filtering and allow the normal filtering to work. + +#An example of grey list use is when in Blanket Block (whitelist) +#mode and you want to allow some sites but still filter as normal +#on their content + +#Another example of grey list use is when you ban a site but want +#to allow part of it. + +#To include additional files in this list use this example: +#.Include + +#You can have multiple .Includes. + +#listcategory: "Banned URLs" + +#List other URLs to block: + +# members.home.net/uporn + +# The squidGuard advert domain/URL lists are now included by default. +# To work with advanced ad blocking & the logadblocks option, advert +# phrase/site/URL lists should have the string "ADs" in their listcategory. +#.Include + +#Remove the # from the following and edit as needed to use a stock +#squidGuard/urlblacklist blacklists collection. +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +#.Include +# You will need to edit to add and remove categories you want diff --git a/config/e2guardian/lists/contentregexplist b/config/e2guardian/lists/contentregexplist new file mode 100644 index 0000000..e0b55f0 --- /dev/null +++ b/config/e2guardian/lists/contentregexplist @@ -0,0 +1,93 @@ +#Content modifying Regular Expressions +# +# The format is: "extended regular expression"->"replacement straight string" +# E.g. "shit"->"censored" would replace all occurances of shit in any case. +# Far more complicated matches are possible. See other sources for examples +# of extended regular expressions. + +# These are just some examples. If you write any, for example, to +# remove popups etc, please send them to author at e2guardian.org. +# +#"" +#"=[ ]*?window\.open[ ]*?\("->"=fwo(" +#""->"" + +# Fix Firefox <= 1.0.7 DoS +# http://www.whitedust.net/speaks/1432/ +#"(("->"$1dosremovedtext" + +# Disable ActiveX objects. +#"]*application\/x-oleobject[^>]*>.*?<\/object>"->"" +#"]*(application/x-oleobject).*?>(.*?)?"->"" + +# Warn about address bar spoofing. +#"(]*href[^>]*)(\x01|\x02|\x03|%0[012])"->"$1MALICIOUS-LINK" + +# Disable all popups in JavaScript and HTML. It may cause unavoidable +# Javascript warnings or errors. Do not enable at the same time as other +# popup removing lines. +#"((\W\s*)(window|this|parent)\.)open\s*\\?\("->"$1concat(" +#"\starget\s*=\s*(['"]?)_?(blank|new)\1?"->" notarget" + +# Removes the APPLET tag which is generally used Java applets. +#"]*>.*?<\/applet>"->"" + +# Disable the BLINK and MARQUEE tags. +#"]*>"->"" + +# Warn about potential cross-site-scripting vulnerability described here: +# http://online.securityfocus.com/archive/1/298748/2002-11-02/2002-11-08/2 +#"f\("javascript:location.replace\('mk:@MSITStore:C:'\)"\);"->"alert\("This page looks like it tries to use a vulnerability described here:\n http://online.securityfocus.com/archive/1/298748/2002-11-02/2002-11-08/2"\);" + +# Removes the SCRIPT tag with JavaScript. This will likely break sites that are +# badly written and thus rely on JavaScript. This should not be used at the same +# time as the 'script' category. +#""->"
WARNING: This Server is infected with Nimda!" + +# Disable onunload (page close) popups. +#"(]*)onunload"->"$1never" +#"()"->"$1never" + +# Removes the SCRIPT tag which could include JavaScript, perlscript and vbscript. +# This will likely break sites that are badly written and thus rely on client +# side scripts. This should not be used at the same time as the 'javascript' line. +#"]*>.*?<\/script>"->"" + +# Disable Sockwave Flash objects. +#"]*macromedia[^>]*>.*?<\/object>"->"" +#"]*(application/x-shockwave-flash\|\.swf).*?>(.*?)?"->"" + +# Disable unsolicited popups. +#"([^'"]\s*)(?=\s*[^'"])"->"$1" +#"([^\w\s.]\s*)((window|this|parent)\.)?open\s*\("->"$1SWGuardianWindowOpen(" +#"([^'"]\s*)(?!\s*(\\n|'|"))"->"$1" + +# Remove 1x1 GIFs used for user tracking. +#"]*(?:(width)|(height))\s*=\s*['"]?[01](?=\D)[^>]*(?:(width)|(height))\s*=\s*['"]?[01](?=\D)[^>]*?>"->"" + +# Prevent windows from resizing and moving themselves. +#"(?:window|this|self|top)\.(?:move|resize)(?:to|by)\("->"''.concat(" diff --git a/config/e2guardian/lists/contentscanners/exceptionvirusextensionlist b/config/e2guardian/lists/contentscanners/exceptionvirusextensionlist new file mode 100644 index 0000000..e8554b8 --- /dev/null +++ b/config/e2guardian/lists/contentscanners/exceptionvirusextensionlist @@ -0,0 +1,35 @@ +#Exception Virus extension list + +#This file originally from: +#http://dgav.sourceforge.net + +# The Virus scanning code will ignore files with these extensions. + +# File extensions with executable code + + +# Files which one normally things as non-executable but +# can contain harmful macros and viruses + + +# Other files which may contain files with executable code + + +# Time/bandwidth wasting files + +.mp3 # Music file +.mpeg # Movie file +.mpg # Movie file +.avi # Movie file +.ra # Real Audio +.ram # " +.rm # " + +# Image files not to scan +.gif +.png +.tiff +.ico +# http://www.kb.cert.org/vuls/id/297462 +#.jpg +#.jpeg diff --git a/config/e2guardian/lists/contentscanners/exceptionvirusmimetypelist b/config/e2guardian/lists/contentscanners/exceptionvirusmimetypelist new file mode 100644 index 0000000..6eab11a --- /dev/null +++ b/config/e2guardian/lists/contentscanners/exceptionvirusmimetypelist @@ -0,0 +1,28 @@ +# MIME types the virus scanning code ignores. + +#This file originally from: +#http://dgav.sourceforge.net + +audio/mpeg +audio/x-mpeg +audio/x-pn-realaudio +audio/x-wav +audio/x-realaudio +audio/x-pn-realaudio +audio/vnd.rn-realaudio +application/ogg +video/mpeg +video/x-mpeg2 +video/acorn-replay +video/quicktime +video/x-msvideo +video/msvideo +video/vnd.rn-realvideo + +image/png +image/gif +image/tiff +# http://www.kb.cert.org/vuls/id/297462 +# image/jpeg + +# text/html diff --git a/config/e2guardian/lists/contentscanners/exceptionvirussitelist b/config/e2guardian/lists/contentscanners/exceptionvirussitelist new file mode 100644 index 0000000..731f118 --- /dev/null +++ b/config/e2guardian/lists/contentscanners/exceptionvirussitelist @@ -0,0 +1,12 @@ +#Sites in virus exception list will not be virus scanned +#Don't bother with the www. or +#the http:// +# +#These are specifically domains and are not URLs. +#For example 'foo.bar/porn/' is no good, you need +#to just have 'foo.bar'. +# +#You can also match IPs here too. +# + +example.com diff --git a/config/e2guardian/lists/contentscanners/exceptionvirusurllist b/config/e2guardian/lists/contentscanners/exceptionvirusurllist new file mode 100644 index 0000000..30c2c30 --- /dev/null +++ b/config/e2guardian/lists/contentscanners/exceptionvirusurllist @@ -0,0 +1,15 @@ +#URLs in exception virus list will not be virus scanned +#Don't bother with the www. or +#the http:// +# +#These are parts of sites that filtering should +#be switched off for. +# +#These should not be domains, i.e. entire sites, +#they should be a domain with a path. +# +#For example 'foo.bar' is no good, you need +#to just have 'foo.bar/porn'. +# +#Another example: +#generallybadsite.tld/partthatsok diff --git a/config/e2guardian/lists/embededreferersiteiplist b/config/e2guardian/lists/embededreferersiteiplist new file mode 100644 index 0000000..e081a53 --- /dev/null +++ b/config/e2guardian/lists/embededreferersiteiplist @@ -0,0 +1,10 @@ +# Embeded referer IP sites +# sites which may contain embeded exception referer sites in the url +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/embededreferersitelist b/config/e2guardian/lists/embededreferersitelist new file mode 100644 index 0000000..0f782be --- /dev/null +++ b/config/e2guardian/lists/embededreferersitelist @@ -0,0 +1,2 @@ +# Embeded referer sites +# sites which may contain embeded exception referer sites in the url diff --git a/config/e2guardian/lists/embededrefererurllist b/config/e2guardian/lists/embededrefererurllist new file mode 100644 index 0000000..2c67d9d --- /dev/null +++ b/config/e2guardian/lists/embededrefererurllist @@ -0,0 +1,5 @@ +# Embeded referer urls +# urls which may contain embeded exception referer sites in the url + +# e.g. to allow youtube video when embeded in a trusted referer site/urls +# www.youtube.com/get_video_info diff --git a/config/e2guardian/lists/exceptionclientlist b/config/e2guardian/lists/exceptionclientlist new file mode 100644 index 0000000..e051e41 --- /dev/null +++ b/config/e2guardian/lists/exceptionclientlist @@ -0,0 +1,16 @@ +# Doamin names of computers from which +# web access should not be filtered. +# +# These would be servers which +# need unfiltered access for +# updates. Also administrator +# workstations which need to +# download programs and check +# out blocked sites should be +# put here. +# +# To work you must +# cater for reverse DNS lookups +# on your LAN and enable the +# "reverseclientiplookups" option in +# e2guardian.conf diff --git a/config/e2guardian/lists/exceptionextensionlist b/config/e2guardian/lists/exceptionextensionlist new file mode 100644 index 0000000..fff466d --- /dev/null +++ b/config/e2guardian/lists/exceptionextensionlist @@ -0,0 +1,49 @@ +# Exception file extension list +# Use as a filter group's "exceptionextensionlist", +# to override a blanket download block. +# (blockdownloads = on) +# +# DOES NOT override content/virus scanning or site/URL bans. +# +# Default list: +# Unblock web pages & graphics + +# Text/web document types + +.css +.html +.shtml +.htm +.stm +.asp +.php +.txt +.rtx +.xml +.xsl +.cgi +.pl + +# Image types + +.bmp +.cod +.gif +.ief +.jpe +.jpeg +.jpg +.jfif +.tif +.tiff +.ras +.cmx +.ico +.pnm +.pbm +.pgm +.ppm +.rgb +.xbm +.xpm +.xwd diff --git a/config/e2guardian/lists/exceptionfilesiteiplist b/config/e2guardian/lists/exceptionfilesiteiplist new file mode 100644 index 0000000..8307b4d --- /dev/null +++ b/config/e2guardian/lists/exceptionfilesiteiplist @@ -0,0 +1,15 @@ +# Exception file site ip list +# Use this list to define ip sites from which files can be downloaded, +# overriding a blanket download block (blockdownloads = on) or the +# banned MIME type and extension lists (blockdownloads = off). +# +# DOES NOT override content/virus scanning or site/URL bans. + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/exceptionfilesitelist b/config/e2guardian/lists/exceptionfilesitelist new file mode 100644 index 0000000..a95ba1d --- /dev/null +++ b/config/e2guardian/lists/exceptionfilesitelist @@ -0,0 +1,30 @@ +# Exception file site list +# Use this list to define sites from which files can be downloaded, +# overriding a blanket download block (blockdownloads = on) or the +# banned MIME type and extension lists (blockdownloads = off). +# +# DOES NOT override content/virus scanning or site/URL bans. + +# Don't bother with the www. or +# the http:// +# +# These are specifically domains and are not URLs. +# For example 'foo.bar/porn/' is no good, you need +# to just have 'foo.bar'. +# +# You can also match IPs here too. +# +# As of DansGuardian 2.7.3 you can now include +# .tld so for example you can match .gov for example + + +# Time limiting syntax: +# #time: +# Example: +##time: 9 0 17 0 01234 +# Remove the first # from the line above to enable this list only from +# 9am to 5pm, Monday to Friday. + +windowsupdate.microsoft.com +update.microsoft.com +download.windowsupdate.com diff --git a/config/e2guardian/lists/exceptionfileurllist b/config/e2guardian/lists/exceptionfileurllist new file mode 100644 index 0000000..9b80e9e --- /dev/null +++ b/config/e2guardian/lists/exceptionfileurllist @@ -0,0 +1,27 @@ +# Exception file URL list +# Use this list to define URLs from which files can be downloaded, +# overriding a blanket download block (blockdownloads = on) or the +# banned MIME type and extension lists (blockdownloads = off). +# +# DOES NOT override content/virus scanning or site/URL bans. + +# Don't bother with the www. or +# the http:// +# +# These are specifically domains and are not URLs. +# For example 'foo.bar/porn/' is no good, you need +# to just have 'foo.bar'. +# +# You can also match IPs here too. +# +# As of DansGuardian 2.7.3 you can now include +# .tld so for example you can match .gov for example + + +# Time limiting syntax: +# #time: +# Example: +##time: 9 0 17 0 01234 +# Remove the first # from the line above to enable this list only from +# 9am to 5pm, Monday to Friday. + diff --git a/config/e2guardian/lists/exceptioniplist b/config/e2guardian/lists/exceptioniplist new file mode 100644 index 0000000..134c0a9 --- /dev/null +++ b/config/e2guardian/lists/exceptioniplist @@ -0,0 +1,27 @@ +# IP addresses of computers from which +# web access should not be filtered. +# +# These would be servers which +# need unfiltered access for +# updates. Also administrator +# workstations which need to +# download programs and check +# out blocked sites should be +# put here. +# +# Hostnames are NOT allowed here, +# put these in exceptionclientlist and +# enable the reverseclientlookups option. +# +# This is not the IP of web servers +# you don't want to filter. + +#192.168.0.1 +#192.168.0.2 +#192.168.42.2 + +# Ranges and subnets can also be used, +# e.g. +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/exceptionmimetypelist b/config/e2guardian/lists/exceptionmimetypelist new file mode 100644 index 0000000..86f2a79 --- /dev/null +++ b/config/e2guardian/lists/exceptionmimetypelist @@ -0,0 +1,40 @@ +# Exception MIME type list +# Use as a filter group's "exceptionmimetypelist", +# to override a blanket download block. +# (blockdownloads = on) +# +# DOES NOT override content/virus scanning or site/URL bans. +# +# Default list: +# Unblock web pages & graphics + +# Text/web document types + +text/plain +text/html +text/css +text/xml +text/xsl +text/richtext + +# Image types + +image/bmp +image/cis-cod +image/gif +image/ief +image/jpeg +image/pipeg +image/png +image/tiff +image/x-cmu-raster +image/x-cmx +image/x-icon +image/x-portable-anymap +image/x-portable-bitmap +image/x-portable-graymap +image/x-portable-pixmap +image/x-rgb +image/x-xbitmap +image/x-xpixmap +image/x-xwindowdump diff --git a/config/e2guardian/lists/exceptionphraselist b/config/e2guardian/lists/exceptionphraselist new file mode 100644 index 0000000..0b160d7 --- /dev/null +++ b/config/e2guardian/lists/exceptionphraselist @@ -0,0 +1,18 @@ +# EXCEPTIONPHRASELIST - INSTRUCTIONS FOR USE +# +# If any of the phrases listed below appear in a web page +# then it will bypass the filtering and be allowed through +# eg +# < medical > +# +# +# Combinations +# Unblock the page if the following phrases are found on the same page. +# Each line is a new combination. +# eg +#,, +# +# See the bannedphraselist for more examples. + +.Include +#.Include diff --git a/config/e2guardian/lists/exceptionregexpheaderlist b/config/e2guardian/lists/exceptionregexpheaderlist new file mode 100644 index 0000000..0a1e863 --- /dev/null +++ b/config/e2guardian/lists/exceptionregexpheaderlist @@ -0,0 +1,8 @@ +#Allowed outgoing HTTP headers based on regular expressions +# +# E.g. 'User-Agent: .*MSIE' would allow several versions of Internet Explorer +# (assuming the user-agent is not being spoofed by the client) +# +# Headers are matched line-by-line, not as a single block. + +#listcategory: "Allowed Regular Expression HTTP Headers" diff --git a/config/e2guardian/lists/exceptionregexpurllist b/config/e2guardian/lists/exceptionregexpurllist new file mode 100644 index 0000000..440cacb --- /dev/null +++ b/config/e2guardian/lists/exceptionregexpurllist @@ -0,0 +1,15 @@ +#Exception URLs based on Regular Expressions +# +# E.g. 'news' would unblock news.bbc.com etc + +# Example +#news + +# Prevent content scanning of CSS and/or JavaScript files +#^[^?]*\.css($|\?) +#^[^?]*\.jsp?($|\?) + +# Allow Facebook plugin applications like +# http://apps.facebook.com/neighborhoods/Setup.aspx and others. +mock_ajax_proxy.php + diff --git a/config/e2guardian/lists/exceptionregexpuseragentlist b/config/e2guardian/lists/exceptionregexpuseragentlist new file mode 100644 index 0000000..9c601de --- /dev/null +++ b/config/e2guardian/lists/exceptionregexpuseragentlist @@ -0,0 +1,9 @@ +#Exception User-Agent based on regular expressions +# +# E.g. ' .*MSIE' would allow several versions of Internet Explorer +# (assuming the user-agent is not being spoofed by the client) +# +# Usefull for allowing 'apps' to work + +#listcategory: "user-agent" + diff --git a/config/e2guardian/lists/exceptionsiteiplist b/config/e2guardian/lists/exceptionsiteiplist new file mode 100644 index 0000000..00b1a22 --- /dev/null +++ b/config/e2guardian/lists/exceptionsiteiplist @@ -0,0 +1,9 @@ +#IP Sites in exception list +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/exceptionsitelist b/config/e2guardian/lists/exceptionsitelist new file mode 100644 index 0000000..776b501 --- /dev/null +++ b/config/e2guardian/lists/exceptionsitelist @@ -0,0 +1,24 @@ +#Sites in exception list +#Don't bother with the www. or +#the http:// +# +#These are specifically domains and are not URLs. +#For example 'foo.bar/porn/' is no good, you need +#to just have 'foo.bar'. +# +# IP must be put in exceptionsiteiplist +# +#.tld so for example you can match .gov for example + + +# Time limiting syntax: +# #time: +# Example: +##time: 9 0 17 0 01234 +# Remove the first # from the line above to enable this list only from +# 9am to 5pm, Monday to Friday. + +# NOTE: From v5 Blanket exceptions are now implimented using Storyboarding +# WARNING: Old style Blanket blocks in this file will be silently ignored + +windowsupdate.microsoft.com diff --git a/config/e2guardian/lists/exceptionurllist b/config/e2guardian/lists/exceptionurllist new file mode 100644 index 0000000..a90150d --- /dev/null +++ b/config/e2guardian/lists/exceptionurllist @@ -0,0 +1,15 @@ +#URLs in exception list +#Don't bother with the www. or +#the http:// +# +#These are parts of sites that filtering should +#be switched off for. +# +#These should not be domains, i.e. entire sites, +#they should be a domain with a path. +# +#For example 'foo.bar' is no good, you need +#to just have 'foo.bar/porn/'. +# +#Another example: +#generallybadsite.tld/partthatsok/ diff --git a/config/e2guardian/lists/exceptionvirusextensionlist b/config/e2guardian/lists/exceptionvirusextensionlist new file mode 100644 index 0000000..d55c4b2 --- /dev/null +++ b/config/e2guardian/lists/exceptionvirusextensionlist @@ -0,0 +1,45 @@ +# Exception file extension list +# Use as a filter group's "exceptionvirusextensionlist", +# +# Default list: +# Unblock web pages & graphics + +# Text/web document types + +.css +.html +.shtml +.htm +.stm +.asp +.php +.txt +.rtx +.xml +.xsl +.cgi +.pl + +# Image types + +.bmp +.cod +.gif +.ief +.jpe +.jpeg +.jpg +.jfif +.tif +.tiff +.ras +.cmx +.ico +.pnm +.pbm +.pgm +.ppm +.rgb +.xbm +.xpm +.xwd diff --git a/config/e2guardian/lists/exceptionvirussiteiplist b/config/e2guardian/lists/exceptionvirussiteiplist new file mode 100644 index 0000000..018d541 --- /dev/null +++ b/config/e2guardian/lists/exceptionvirussiteiplist @@ -0,0 +1,12 @@ +# IP sites in exceptionvirussiteiplist + +#The exceptionvirussiteiplist is for allowing ALL of an IP site + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/filtergroupslist b/config/e2guardian/lists/filtergroupslist new file mode 100644 index 0000000..483383c --- /dev/null +++ b/config/e2guardian/lists/filtergroupslist @@ -0,0 +1,9 @@ +# Filter Groups List file for DansGuardian +# +# Format is =filter<1-9> where 1-9 are the groups +# +# Eg: +# daniel=filter2 +# +# This file is only of use if you have more than 1 filter group +# diff --git a/config/e2guardian/lists/greysiteiplist b/config/e2guardian/lists/greysiteiplist new file mode 100644 index 0000000..8bcf54f --- /dev/null +++ b/config/e2guardian/lists/greysiteiplist @@ -0,0 +1,16 @@ +# IP site in grey list + +#The 'grey' lists override the 'banned' lists. +#The 'exception' lists override the 'banned' lists also. +#The difference is that the 'exception' lists completely switch +#off *all* other filtering for the match. 'grey' lists only +#stop the URL filtering and allow the normal filtering to work. + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/greysitelist b/config/e2guardian/lists/greysitelist new file mode 100644 index 0000000..5e7e465 --- /dev/null +++ b/config/e2guardian/lists/greysitelist @@ -0,0 +1,59 @@ +#domains in grey list +#Don't bother with the www. or the http:// + +#The 'grey' lists override the 'banned' lists. +#The 'exception' lists override the 'banned' lists also. +#The difference is that the 'exception' lists completely switch +#off *all* other filtering for the match. 'grey' lists only +#stop the URL filtering and allow the normal filtering to work. + +#An example of grey list use is when in Blanket Block (whitelist) +#mode and you want to allow some sites but still filter as normal +#on their content + +#Another example of grey list use is when you ban a site but want +#to allow part of it. + +#The greyurllist is for partly unblocking PART of a site +#The greysitelist is for partly unblocking ALL of a site + +#As of DansGuardian 2.7.3 you can now include +#.tld so for example you can match .gov for example + +#To include additional files in this list use this example: +#.Include + +#You can have multiple .Includes. + +# Time limiting syntax: +# #time: +# Example: +##time: 9 0 17 0 01234 +# Remove the first # from the line above to enable this list only from +# 9am to 5pm, Monday to Friday. + + +# Blanket match. To greylist all sites except those in the +# exceptionsitelist and greysitelist files, remove +# the # from the next line to leave only a '**': +#** + +# Blanket SSL/CONNECT match. To greylist all SSL +# and CONNECT tunnels except to addresses in the +# exceptionsitelist and greysitelist files, remove +# the # from the next line to leave only a '**s': +#**s + +# Blanket IP match. To greylist all sites specified only as an IP, +# remove the # from the next line to leave only a '*ip': +#*ip + +# Blanket SSL/CONNECT IP match. To greylist all SSL and CONNECT +# tunnels to sites specified only as an IP, +# remove the # from the next line to leave only a '*ips': +#*ips + + +#List other sites to greylist: + +#www.bbc.co.uk diff --git a/config/e2guardian/lists/greysslsiteiplist b/config/e2guardian/lists/greysslsiteiplist new file mode 100644 index 0000000..c6934d6 --- /dev/null +++ b/config/e2guardian/lists/greysslsiteiplist @@ -0,0 +1,10 @@ +# IP sites in SSL grey list + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/greysslsitelist b/config/e2guardian/lists/greysslsitelist new file mode 100644 index 0000000..b0726b8 --- /dev/null +++ b/config/e2guardian/lists/greysslsitelist @@ -0,0 +1,4 @@ +#domains in SSL grey list +#Don't bother with the www. or the https:// + +#This 'grey' lists override the 'banned' lists for SSL only. diff --git a/config/e2guardian/lists/greyurllist b/config/e2guardian/lists/greyurllist new file mode 100644 index 0000000..99fee88 --- /dev/null +++ b/config/e2guardian/lists/greyurllist @@ -0,0 +1,27 @@ +#URLs in grey list +#Don't bother with the http:// or the www + +#The greyurllist is for partly unblocking PART of a site +#The greysitelist is for partly unblocking ALL of a site + +#The 'grey' lists override the 'banned' lists. +#The 'exception' lists override the 'banned' lists also. +#The difference is that the 'exception' lists completely switch +#off *all* other filtering for the match. 'grey' lists only +#stop the URL filtering and allow the normal filtering to work. + +#An example of grey list use is when in Blanket Block (whitelist) +#mode and you want to allow some sites but still filter as normal +#on their content + +#Another example of grey list use is when you ban a site but want +#to allow part of it. + +#To include additional files in this list use this example: +#.Include + +#You can have multiple .Includes. + +#List other URLs to block: + +#members.home.net/nice diff --git a/config/e2guardian/lists/headerregexplist b/config/e2guardian/lists/headerregexplist new file mode 100644 index 0000000..95467dc --- /dev/null +++ b/config/e2guardian/lists/headerregexplist @@ -0,0 +1,11 @@ +# Outgoing HTTP header modifying Regular Expressions +# +# The format is: "extended regular expression"->"replacement straight string" +# E.g. "shit"->"censored" would replace all occurances of shit in any case. +# Far more complicated matches are possible. See other sources for examples +# of extended regular expressions. +# +# Headers are run through replacements line-by-line, not as a single block. + +# Windows Live Search cookie replacement - force filtering on +#"cookie:(.*)&ADLT=(OFF|DEMOTE)"->"Cookie:$1&ADLT=STRICT" diff --git a/config/e2guardian/lists/localbannedsearchlist b/config/e2guardian/lists/localbannedsearchlist new file mode 100644 index 0000000..51f25e3 --- /dev/null +++ b/config/e2guardian/lists/localbannedsearchlist @@ -0,0 +1,14 @@ +#Local Banned Search Words +# +#Words must be in alphabetic order within a single line +# and separated by a '+' sign. +#All combinations of the words will be blocked +# e.g. girl+naughty +# will block naughty+girl as well as girl+naughty + + +#.Include +#.Include +#.Include +#.Include +#.Include diff --git a/config/e2guardian/lists/localbannedsiteiplist b/config/e2guardian/lists/localbannedsiteiplist new file mode 100644 index 0000000..e462d29 --- /dev/null +++ b/config/e2guardian/lists/localbannedsiteiplist @@ -0,0 +1,10 @@ +# IP sites in local banned list + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/localbannedsitelist b/config/e2guardian/lists/localbannedsitelist new file mode 100644 index 0000000..fb6c766 --- /dev/null +++ b/config/e2guardian/lists/localbannedsitelist @@ -0,0 +1,6 @@ +#domains in local banned list +#.Include +#.Include +#.Include +#.Include +#.Include diff --git a/config/e2guardian/lists/localbannedsslsiteiplist b/config/e2guardian/lists/localbannedsslsiteiplist new file mode 100644 index 0000000..050c4f4 --- /dev/null +++ b/config/e2guardian/lists/localbannedsslsiteiplist @@ -0,0 +1,12 @@ +# IP sites in local banned ssl list +#This list is only used for SSL (or CONNECT) requests +#Unlike the bannedsitelist it overides all other lists + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/localbannedsslsitelist b/config/e2guardian/lists/localbannedsslsitelist new file mode 100644 index 0000000..f26c70c --- /dev/null +++ b/config/e2guardian/lists/localbannedsslsitelist @@ -0,0 +1,5 @@ +#domains in banned ssl list +#Don't bother with the www. or the https:// +#This list is only used for SSL (or CONNECT) requests +# and has no effect when MITM is enabled +#Unlike the bannedsitelist it overides all other lists diff --git a/config/e2guardian/lists/localbannedurllist b/config/e2guardian/lists/localbannedurllist new file mode 100644 index 0000000..8ec7619 --- /dev/null +++ b/config/e2guardian/lists/localbannedurllist @@ -0,0 +1 @@ +#URLs in local banned list diff --git a/config/e2guardian/lists/localexceptionsiteiplist b/config/e2guardian/lists/localexceptionsiteiplist new file mode 100644 index 0000000..0c717be --- /dev/null +++ b/config/e2guardian/lists/localexceptionsiteiplist @@ -0,0 +1,10 @@ +#IP Sites in local exception list + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/localexceptionsitelist b/config/e2guardian/lists/localexceptionsitelist new file mode 100644 index 0000000..8d0067d --- /dev/null +++ b/config/e2guardian/lists/localexceptionsitelist @@ -0,0 +1 @@ +#Sites in local exception list diff --git a/config/e2guardian/lists/localexceptionurllist b/config/e2guardian/lists/localexceptionurllist new file mode 100644 index 0000000..a031365 --- /dev/null +++ b/config/e2guardian/lists/localexceptionurllist @@ -0,0 +1 @@ +#URLs in local exception list diff --git a/config/e2guardian/lists/localgreysiteiplist b/config/e2guardian/lists/localgreysiteiplist new file mode 100644 index 0000000..6ba4dac --- /dev/null +++ b/config/e2guardian/lists/localgreysiteiplist @@ -0,0 +1,10 @@ +# IP sites in local grey list + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/localgreysitelist b/config/e2guardian/lists/localgreysitelist new file mode 100644 index 0000000..af02151 --- /dev/null +++ b/config/e2guardian/lists/localgreysitelist @@ -0,0 +1 @@ +#domains in local grey list diff --git a/config/e2guardian/lists/localgreysslsiteiplist b/config/e2guardian/lists/localgreysslsiteiplist new file mode 100644 index 0000000..3495c9f --- /dev/null +++ b/config/e2guardian/lists/localgreysslsiteiplist @@ -0,0 +1,10 @@ +# IP sites in local SSL grey list + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/localgreysslsitelist b/config/e2guardian/lists/localgreysslsitelist new file mode 100644 index 0000000..da2e9e0 --- /dev/null +++ b/config/e2guardian/lists/localgreysslsitelist @@ -0,0 +1,6 @@ +#domains in SSL grey list +#Don't bother with the www. or the https:// + +#This 'grey' lists overrides the main site 'exception' lists for SSL allowing MITM to be enabled in order to check https full url. + +# Use to overcome issue where ssl url is in local blocked url list but is overriden by main site exception list forcing tunnel mode and so url never checked. diff --git a/config/e2guardian/lists/localgreyurllist b/config/e2guardian/lists/localgreyurllist new file mode 100644 index 0000000..1eb8ccc --- /dev/null +++ b/config/e2guardian/lists/localgreyurllist @@ -0,0 +1 @@ +#URLs in local grey list diff --git a/config/e2guardian/lists/logregexpurllist b/config/e2guardian/lists/logregexpurllist new file mode 100644 index 0000000..2698766 --- /dev/null +++ b/config/e2guardian/lists/logregexpurllist @@ -0,0 +1,12 @@ +# Log regular expression URL list +# +# This acts as a list of URL regexes which, if matched, will have their category +# recorded but no specific filtering action taken. It is only really useful +# in conjunction with log analysers, to perform meaningful categorisation and +# analysis upon non-blocked/exception requests, and so is disabled and empty +# by default. +# +# If you would like to enable this feature, uncomment "logregexpurllist" in your +# e2guardianf*.conf file(s), and place .Include<> statements here for the +# categories you would like to log. Included list files must contain a +# "#listcategory" directive. diff --git a/config/e2guardian/lists/logsiteiplist b/config/e2guardian/lists/logsiteiplist new file mode 100644 index 0000000..2877709 --- /dev/null +++ b/config/e2guardian/lists/logsiteiplist @@ -0,0 +1,21 @@ +# Log IP site list +# +# This acts as a list of IP sites which, when found, will have their category +# recorded but no specific filtering action taken. It is only really useful +# in conjunction with log analysers, to perform meaningful categorisation and +# analysis upon non-blocked/exception requests, and so is disabled and empty +# by default. +# +# If you would like to enable this feature, uncomment "logsitelist" in your +# e2guardianf*.conf file(s), and place .Include<> statements here for the +# categories you would like to log. Included list files must contain a +# "#listcategory" directive. + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/logsitelist b/config/e2guardian/lists/logsitelist new file mode 100644 index 0000000..d2a6cf8 --- /dev/null +++ b/config/e2guardian/lists/logsitelist @@ -0,0 +1,12 @@ +# Log site list +# +# This acts as a list of domains which, when found, will have their category +# recorded but no specific filtering action taken. It is only really useful +# in conjunction with log analysers, to perform meaningful categorisation and +# analysis upon non-blocked/exception requests, and so is disabled and empty +# by default. +# +# If you would like to enable this feature, uncomment "logsitelist" in your +# e2guardianf*.conf file(s), and place .Include<> statements here for the +# categories you would like to log. Included list files must contain a +# "#listcategory" directive. diff --git a/config/e2guardian/lists/logurllist b/config/e2guardian/lists/logurllist new file mode 100644 index 0000000..cd5a0e2 --- /dev/null +++ b/config/e2guardian/lists/logurllist @@ -0,0 +1,12 @@ +# Log URL list +# +# This acts as a list of URLs which, when found, will have their category +# recorded but no specific filtering action taken. It is only really useful +# in conjunction with log analysers, to perform meaningful categorisation and +# analysis upon non-blocked/exception requests, and so is disabled and empty +# by default. +# +# If you would like to enable this feature, uncomment "logurllist" in your +# e2guardianf*.conf file(s), and place .Include<> statements here for the +# categories you would like to log. Included list files must contain a +# "#listcategory" directive. diff --git a/config/e2guardian/lists/nocheckcertsiteiplist b/config/e2guardian/lists/nocheckcertsiteiplist new file mode 100644 index 0000000..158c3f6 --- /dev/null +++ b/config/e2guardian/lists/nocheckcertsiteiplist @@ -0,0 +1,17 @@ +# IP sites which are NOT to have their certificates checked (when in MITM mode) +# +# Do not check ssl certificates for IP sites listed +# +# Can be used to allow sites with self-signed or invalid certificates +# or to reduced CPU load by not checking certs on heavily used sites (e.g. Google, Bing) +# Use with caution! +# Ignored if mitmcheckcert is 'off' + +# IP site addresses +# +# Single IPs, ranges and subnets can be used, +# e.g. +# 192.168.0.1 +# 10.0.0.1-10.0.0.3 +# 10.0.0.0/24 +# diff --git a/config/e2guardian/lists/nocheckcertsitelist b/config/e2guardian/lists/nocheckcertsitelist new file mode 100644 index 0000000..b54735f --- /dev/null +++ b/config/e2guardian/lists/nocheckcertsitelist @@ -0,0 +1,9 @@ +# domains which are NOT to have their certificates checked (when in MITM mode) +# +# Do not check ssl certificates for sites/domains listed +# +# Can be used to allow sites with self-signed or invalid certificates +# or to reduced CPU load by not checking certs on heavily used sites (e.g. Google, Bing) +# Use with caution! +# Ignored if mitmcheckcert is 'off' +#Don't bother with the https:// diff --git a/config/e2guardian/lists/phraselists/badwords/weighted_dutch b/config/e2guardian/lists/phraselists/badwords/weighted_dutch new file mode 100644 index 0000000..d92f3dd --- /dev/null +++ b/config/e2guardian/lists/phraselists/badwords/weighted_dutch @@ -0,0 +1,36 @@ +# +# Dutch Swear Words Weighted Phrases +# Taken from swif.zip from dansguardian website +# + +#listcategory: "Bad words (Dutch)" + +< apenaaier ><75> #monkey-fucker +< bruinweker ><50> #literally: brown-creeper = fagget +< droogkloot ><25> #literally: dry-nut (as in: testicle) +< flikker ><50> #fagget/sissy +< hoer ><25> #hooker +< hoerenjong ><65> #son-of-bitch +< hondelul ><50> #cock-of-a-dog (commonly used, also by kids) +< kak ><10> #shit +< klootzak ><50> #ass-hole +< kut ><5> #cunt/pussy +< kutwijf ><90> #fucking bitch +< lul ><50> #dick/cock +< moederneuker ><75> #motherfucker +< nauwe gaatje ><50> #literally: ass-hole +< paardenlul ><50> #horse-cock +< pik omhoog ><80> #boner +< reetneuker ><70> #literally: ass-fucker +< rukker ><50> #jerk-off +< schijt ><50> #shit +< schijtlul ><50> #literally: shit-cock; commonly used for a chicken-shit +< slet ><50> #slut +< smerige kankerhoer ><75> #fucking whore (bad..) +< spast ><50> #spastic +< stront ><25> #shit +< sufkut ><75> #literally; sleepy-cunt +< sukkel ><20> #dumbo +< vuile kankerlijer ><75> #fucking ass-hole (bad one) +< zakkewasser ><42> #ass-hole + diff --git a/config/e2guardian/lists/phraselists/badwords/weighted_french b/config/e2guardian/lists/phraselists/badwords/weighted_french new file mode 100644 index 0000000..8ab0b79 --- /dev/null +++ b/config/e2guardian/lists/phraselists/badwords/weighted_french @@ -0,0 +1,43 @@ +# +# French Swear Words Weighted Phrases +# + +#listcategory: "Bad words (French)" + +< merde ><50> +< tu m'emmerdes ><80> +< tu me fais chier ><50> # you are pissing me off +< retourne enculer ><80> # go and fuck yourself +< enculé ><70> +< salope ><60> +< conasse ><40> +< poufiasse ><40> +< ordure ><20> # mess / rubbish +< chier ><50> # to shit +< faire foutre ><80> +< fils de pute ><90> # son of a whore +< branler ><50> +< bique ><50> # cock +< trou du cul ><80> # literally hole of arse +< le con ><60> +< la chatte ><90> # pussy +< baiser ><60> +< conneries ><30> +< fait moi jouir ><80> # make me cum +< tête moi le dard ><80> +< tête moi le noeud ><80> +< pédé ><40> +< tantouze ><50> +< couilles ><60> # balls +< putain ><60> # whore +< pute ><60> +< cul ><40> +< pauvre con ><60> # poor bastard +< pisser dans ><50> +< fils de pute ><90> +< salope ><60> +< Va te branler ><70> +< Va te tripoter ><80> +< Va te faire enculer ><90> +< choleque de merde ><60> + diff --git a/config/e2guardian/lists/phraselists/badwords/weighted_german b/config/e2guardian/lists/phraselists/badwords/weighted_german new file mode 100644 index 0000000..89d0af7 --- /dev/null +++ b/config/e2guardian/lists/phraselists/badwords/weighted_german @@ -0,0 +1,34 @@ +# +# German Swear Words Weighted Phrases +# Taken from swif.zip from dansguardian website +# + +#listcategory: "Bad words (German)" + +< arschloch ><20> +< scheiss ><20> +< scheisse ><20> +< fotze ><20> +< schwuchtl ><20> +< lesbe ><20> +< mutterficker ><20> +< hurensohn ><20> +< hure ><20> +< arschgesicht ><20> +< fick ><20> +< scheissdreck ><20> +< arschficker ><20> +< arsch ><20> +< scheisskopf ><20> +< schnoodle noodle ><20> +< verpiss dich ><20> +< wichser ><20> +< arschgeige ><20> +< hosenscheisser ><20> +< schwanz ><20> +< affenschwanz ><20> +< schlampe><20> # - tramp or slut +< schweinebacke><20> # - double crossing so and so +< dumpfbacke><20> # - idiot (mainly for female) +< arschkriecher><20> # - person who kisses bosses arse + diff --git a/config/e2guardian/lists/phraselists/badwords/weighted_portuguese b/config/e2guardian/lists/phraselists/badwords/weighted_portuguese new file mode 100644 index 0000000..261c5a2 --- /dev/null +++ b/config/e2guardian/lists/phraselists/badwords/weighted_portuguese @@ -0,0 +1,16 @@ +# +# Brazilian Portuguese Swear Words Weighted Phrases +# + +#listcategory: "Bad words (Portuguese)" + +<80> +<10> +<10> +<10> +<10> +<5> +<10> +<10> +< viad><15> + diff --git a/config/e2guardian/lists/phraselists/badwords/weighted_spanish b/config/e2guardian/lists/phraselists/badwords/weighted_spanish new file mode 100644 index 0000000..c91a45c --- /dev/null +++ b/config/e2guardian/lists/phraselists/badwords/weighted_spanish @@ -0,0 +1,67 @@ +# +# Spanish Swear Words Weighted Phrases +# Taken from swif.zip from dansguardian website +# + +#listcategory: "Bad words (Spanish)" + +< marica ><20> +< maricón ><20> +< mariconazo ><20> +< mariquita ><20> +< chapero ><20> +< bastardo ><20> +< cabron ><20> +< polla ><20> +< nabo ><20> +< rabo ><20> +< verga ><20> +< cipote ><20> +< gilipollas ><20> +< tontopollas ><20> +< pichacorta ><20> +< cojones ><20> +< pelotas ><20> +< huevos ><20> +< cojonazos ><20> +< coño ><20> +< chocho ><20> +< raja ><20> +< chichi ><20> +< pelos de los huevos ><20> +< pelos de los coño ><20> +< mierda ><20> +< cagar ><20> +< jiñar ><20> +< chupame la polla ><20> +< chupamela ><20> +< chupar ><20> +< puta ><20> +< zorra ><20> +< guarra ><20> +< follar ><20> +< jode ><20> +< chingar ><20> +< me cago en ti ><20> +< que te jodan ><20> +< culo ><20> +< cabron ><20> +< calientapollas ><20> + +#South American spanish: +< mariposa ><20> +< joto ><20> +< pinga ><20> +< chilito ><20> +< panocha ><20> +< chimba ><20> +< chichis ><20> +< Chinga ><20> +< pendejo ><20> +< pendeja ><20> +< cago en tu leche ><20> +< hazte cojer ><20> +< pinche cabron ><20> +< concha ><20> +< coger ><20> + diff --git a/config/e2guardian/lists/phraselists/chat/weighted b/config/e2guardian/lists/phraselists/chat/weighted new file mode 100644 index 0000000..11dec57 --- /dev/null +++ b/config/e2guardian/lists/phraselists/chat/weighted @@ -0,0 +1,33 @@ +#listcategory: "Chat" + +< javachat ><50> +< webbchat ><50> +< webbtjatt ><50> +< webchat ><50> +< chatkamer ><50> +< chatroom ><50> +< irc ><50> +< ircd ><50> +< javachat ><50> +< javatjatt ><50> + +#Web-based Instant Messaging +< gaim ><30> +< icq ><30> +<30> +<30> +< wbmsn ><30> +<30> +< kiwibox ><30> +< webmessenger ><30> +< e-messenger ><30> +< web2messenger ><30> +< onlinemessenger ><30> +< msnger><30> +< jpager><30> +< easymessage ><30> +<30> +< instant messenger ><10> +,,< msn ><50> +,<30> + diff --git a/config/e2guardian/lists/phraselists/chat/weighted_italian b/config/e2guardian/lists/phraselists/chat/weighted_italian new file mode 100644 index 0000000..e590314 --- /dev/null +++ b/config/e2guardian/lists/phraselists/chat/weighted_italian @@ -0,0 +1,26 @@ +#listcategory: "Chat (Italian)" + +< scegliere la ragazza><30> +< scegliere le ragazze><30> +<30> +<30> +,< ragazza >,< preferita><30> +,< ragazza >,< che preferisci><30> +< scegliere >,< ragazza >,< che preferisci><30> +< scegliere >,< ragazza >,< preferita><30> +< conoscere >,< ragazz><10> +< incontrare>,< ragazz><10> +< dal vivo><30> +< incontri eccitanti><30> +< incontrare persone><10> +< interagire con><10> +< chat><10> +<10> +<10> +< spregiudicat><10> +< eros ><10> +< video-chat><20> +< scambio coppie><30> +< videocamer>,< nascost><10> +< telecamer>,< nascost><10> + diff --git a/config/e2guardian/lists/phraselists/conspiracy/weighted b/config/e2guardian/lists/phraselists/conspiracy/weighted new file mode 100644 index 0000000..7ccebc5 --- /dev/null +++ b/config/e2guardian/lists/phraselists/conspiracy/weighted @@ -0,0 +1,61 @@ +# Originally created by David Burkholder +# +# +# listcategory: "conspiracy" +# + + +<30> +<40> +<40> +<40> +<40> +<25> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<20> +<40> +<40> +<40> +<40> +<40> +<55> + + +#New world order +<40> +<40> +<40> +<40> +<40> +<75> +<75> + +#Ufo +< ufo><40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> +<40> \ No newline at end of file diff --git a/config/e2guardian/lists/phraselists/domainsforsale/weighted b/config/e2guardian/lists/phraselists/domainsforsale/weighted new file mode 100644 index 0000000..471230e --- /dev/null +++ b/config/e2guardian/lists/phraselists/domainsforsale/weighted @@ -0,0 +1,31 @@ +# +# Phraselists to block parked domains - domains that are for sale +# Originally created by Fernand Jonker +# +# If you use this list please send feedback to phrasemaster@dansguardian.org +# Waiting for feedback and input +# + +#listcategory: "Domain for Sale" + +,<150> +<50> +<50> +<50> +<50> +<50> +<50> +<50> +<50> +<50> +< sedo><50> +<50> +<150> +,<150> + +#Companies + +<100> +<50> +<50> +<50> \ No newline at end of file diff --git a/config/e2guardian/lists/phraselists/drugadvocacy/weighted b/config/e2guardian/lists/phraselists/drugadvocacy/weighted new file mode 100644 index 0000000..b5b169a --- /dev/null +++ b/config/e2guardian/lists/phraselists/drugadvocacy/weighted @@ -0,0 +1,12 @@ +#listcategory: "Drug Advocacy" + +< american cannabis society ><40> +< drogenpolitik ><60> +< ganga ><50> +< ganja ><50> +< marihuanabeleid ><60> +< marijuanalagstiftning ><60> +< marijuanalovgivning ><60> +< medicinal marijuana ><40> +< spliff ><60> + diff --git a/config/e2guardian/lists/phraselists/forums/weighted b/config/e2guardian/lists/phraselists/forums/weighted new file mode 100644 index 0000000..7682a29 --- /dev/null +++ b/config/e2guardian/lists/phraselists/forums/weighted @@ -0,0 +1,66 @@ +# +# Phraselists to block forum sites +# Originally Created by Fernand Jonker +# +#listcategory: "Forums" + +#General +< Member>,< register><20> +< Search>,< faq><20> +< Login>,< home><20> +< Moderator><20> +<20> +<20> +<20> +<20> +<20> +<20> +,,<20> +<20> +<20> +<20> +<20> +<20> +<20> +<20> +<20> +<20> + +#PHPBB +<100> + +#UBB +<100> + +#Web Wiz Forums +<100> + +#vBulletin +<100> +<100> + +#Simple Machines +<100> +< SMF >,<100> + +#PostNuke +<100> + +#Snitz +<100> + +#Invision Power Board +<100> +<20> + +#FUDForum +<100> + +#Groupee Community +<100> + +#Mailgust +<100> + +#php Bulletin Board +<40> diff --git a/config/e2guardian/lists/phraselists/gambling/banned b/config/e2guardian/lists/phraselists/gambling/banned new file mode 100644 index 0000000..03bab10 --- /dev/null +++ b/config/e2guardian/lists/phraselists/gambling/banned @@ -0,0 +1,13 @@ +#listcategory: "Gambling" + + + + +< loto > +< lotto > +< video poker > + + + + + diff --git a/config/e2guardian/lists/phraselists/gambling/banned_portuguese b/config/e2guardian/lists/phraselists/gambling/banned_portuguese new file mode 100644 index 0000000..88a31d5 --- /dev/null +++ b/config/e2guardian/lists/phraselists/gambling/banned_portuguese @@ -0,0 +1,10 @@ +#listcategory: "Gambling (Portuguese)" + +< cassino virtual > +< cassinos virtuais > +< loteria virtual > +< loterias virtuais > +< lotomania virtual > +< megasena virtual > +< vegas virtual > + diff --git a/config/e2guardian/lists/phraselists/gambling/weighted b/config/e2guardian/lists/phraselists/gambling/weighted new file mode 100644 index 0000000..6ede17b --- /dev/null +++ b/config/e2guardian/lists/phraselists/gambling/weighted @@ -0,0 +1,45 @@ +# +# Phraselists to block gambling sites +# + +#listcategory: "Gambling" + +< bet >,<40> +< betting ><30> +< blackjack ><30> +< casino ><30> +< casinon ><30> +< casinos ><30> +< gamblers ><30> +< gambling ><30> +< jackpot ><20> +< jackpott ><20> +< kasino><30> +< kasinon ><30> +< loto ><30> +< lotteri ><30> +< lotterier ><30> +< lotteries ><20> +< lottery ><30> +< lotto ><30> +< prispott ><20> +< roulette ><30> +< snake eyes ><20> +< snakeeyes ><20> +< sports book ><10> +< sportsbook ><10> +< totalisator ><30> +< video poker ><30> +< wagering ><50> +< wager ><30> +<10> +<30> +<30> +,<50> +,<50> +,<50> +<30> +<30> +<30> +<30> + diff --git a/config/e2guardian/lists/phraselists/gambling/weighted_portuguese b/config/e2guardian/lists/phraselists/gambling/weighted_portuguese new file mode 100644 index 0000000..87772fd --- /dev/null +++ b/config/e2guardian/lists/phraselists/gambling/weighted_portuguese @@ -0,0 +1,12 @@ +#listcategory: "Gambling (Portuguese)" + +< aposta ><10> +< apostadores ><10> +< apostando ><10> +< casino><20> +< cassino><20> +< jogo de vinte e um ><10> +< jogos de vinte e um ><10> +< jogo de azar><10> +< jogos de azar><10> + diff --git a/config/e2guardian/lists/phraselists/games/weighted b/config/e2guardian/lists/phraselists/games/weighted new file mode 100644 index 0000000..2f24d88 --- /dev/null +++ b/config/e2guardian/lists/phraselists/games/weighted @@ -0,0 +1,64 @@ +# +# Phraselists to block gaming websites +# Originally created by Fernand Jonker +# +# This list is seriously ALPHA - it blocks many pages, but may overblock. +# This list has NOT been tested in a production environment! +# If you use this list please send feedback to phrasemaster@dansguardian.org +# Waiting for input :-) +# + +#listcategory: "Games" + +< games><10> +< puzzles><10> +<40> +<30> +<30> +<20> + +#game names +<30> +<30> +<30> +<30> +<30> +<30> +<30> +<30> +<10> +<30> +<30> +<30> +<30> +<30> + +<30> +<30> +<30> +<30> +<30> + +#game companies +<30> +<10> +<10> +<10> +<20> +,< psp ><20> +<20> +<20> +<20> +<20> +<20> + +#general gaming +,<30> +#,<30> +,< simulation><30> +,< strategy><30> +,< adventure><30> +#,< action><30> +,< rpg><30> +,< sport><30> + diff --git a/config/e2guardian/lists/phraselists/goodphrases/exception b/config/e2guardian/lists/phraselists/goodphrases/exception new file mode 100644 index 0000000..c517fa6 --- /dev/null +++ b/config/e2guardian/lists/phraselists/goodphrases/exception @@ -0,0 +1,6 @@ + +#< ringtone > +# + + + diff --git a/config/e2guardian/lists/phraselists/goodphrases/exception_email b/config/e2guardian/lists/phraselists/goodphrases/exception_email new file mode 100644 index 0000000..a8763c1 --- /dev/null +++ b/config/e2guardian/lists/phraselists/goodphrases/exception_email @@ -0,0 +1,11 @@ + + + + + +, + + + + + diff --git a/config/e2guardian/lists/phraselists/goodphrases/weighted_general b/config/e2guardian/lists/phraselists/goodphrases/weighted_general new file mode 100644 index 0000000..12d98bb --- /dev/null +++ b/config/e2guardian/lists/phraselists/goodphrases/weighted_general @@ -0,0 +1,425 @@ +# +#Generally Good Phrases to balance out bad phrases tagged on a page. +# + +#Following Added to exempt DansGuardian blocking sites +,<-200> +<-20> +<-20> +<-20> +<-20> +< logrotat>,<-200> +< weightedphraselist><-50> +< weightedphrasemode>,<-200> +< configuring>,<-200> +< building><-20> +< apache>,<-20> +< binary><-20> +< naughtynesslimit><-50> +# + +< smoothwall ><-20> +<-20> +<-50> +< dns ><-20> +< wikipedia ><-30> +<-50> +<-50> +< vpn ><-20> +<-50> +<-50> +<-10> +<-10> +<-10> +<-50> +<-10> +<-10> +<-10> +<-10> +<-20> +<-20> +<-20> +<-30> +<-10> +<-50> +<-20> +,,<-50> +,,<-50> +,,<-50> +,,<-50> +,<-50> +,,<-50> +<-50> +,<-30> +,<-30> +,<-30> +<-20> +,,<-50> +< amd ><-20> +<-50> +<-50> +<-100> +<-20> +<-50> +<-50> +<-20> +<-10> +<-50> +
,<-30> +
,<-30> +
,<-30> +
,<-30> +
,<-30> +
,<-30> +
,<-30> +
,<-30> +
,<-30> +<-20> +<-30> +<-50> +,<-30> +,<-30> +,<-30> +<-10> +<-10> +<-10> +<-50> +<-20> +,,<-20> +<-20> +<-20> +<-20> +<-10> +<-20> +<-10> +<-30> +<-10> +<-50> +<-20> +<-40> +<-10> +<-20> +<-20> +<-50> +<-50> +,,<-50> +,<-30> +<-50> +<-10> +<-30> +,<-30> +,<-30> +,<-30> +,<-30> +,<-30> +,<-30> +,<-30> +<-20> +<-10> +<-10> +<-20> +<-10> +<-20> +<-50> +<-40> +<-10> +<-40> +<-40> +<-20> +<-30> +<-40> +<-60> +<-10> +<-10> +<-30> +<-20> +<-20> +<-20> +<-20> +<-10> +<-10> +<-1000> +<-10> +<-10> +<-30> +<-20> +<-30> +<-50> +<-50> +<-10> +<-10> +<-10> +<-10> +<-30> +<-30> +,<-50> +<-50> +,< vinyl><-50> +<-50> +<-20> +<-30> +<-20> +<-50> +<-20> +<-20> +<-40> +<-40> +< e-card><-10> +< ecard><-10> +<-20> +,<-20> +,<-20> +<-10> +<-20> +<-20> +<-10> +<-20> +<-30> +<-50> +< ex-><-20> +<-10> +<-5> +<-40> +<-40> +,<-20> +,<-20> +,<-60> +,<-10> +<-20> +<-5> +<-5> +<-5> +<-30> +<-20> +<-30> +<-40> +<-40> +<-10> +<-20> +<-30> +<-30> +<-50> +<-20> +<-30> +<-30> +<-20> +<-50> +<-20> +<-30> +<-50> +<-40> +<-30> +<-40> +<-40> +<-40> +<-30> +<-20> +< health ><-10> +<-30> +<-30> +,<-10> +,<-20> +,<-20> +,<-20> +,<-20> +,<-20> +<-20> +<-20> +< h.i.v ><-50> +< hiv ><-50> +<-20> +,<-30> +<-50> +,<-30> +,<-30> +<-10> +<-10> +<-30> +<-40> +< intel ><-20> +<-20> +<-80> +<-20> +<-10> +<-50> +<-500> +<-40> +<-20> +,<-30> +,<-30> +<-10> +<-30> +,<-50> +,<-50> +<-10> +,<-50> +,<-50> +<-30> +<-40> +<-20> +<-30> +<-60> +<-20> +<-100> +<-100> +<-20> +<-50> +<-30> +<-20> +,<-20> +<-50> +<-50> +<-50> +<-10> +<-10> +<-50> +<-20> +<-40> +<-20> +<-10> +<-50> +<-20> +<-30> +<-50> +<-5> +<-20> +<-50> +<-20> +<-10> +<-80> +<-40> +<-10> +<-5> +<-20> +<-40> +<-50> +<-30> +<-30> +<-50> +<-30> +<-30> +<-30> +<-30> +<-30> +<-30> +<-50> +<-50> +<-20> +<-20> +<-50> +<-10> +<-20> +<-20> +<-20> +<-20> +<-20> +<-50> +,<-30> +<-20> +<-50> +<-40> +<-40> +<-40> +<-40> +<-50> +<-50> +<-50> +<-40> +<-30> +,,<-30> +<-15> +<-50> +< research ><-20> +<-20> +<-10> +<-30> +<-20> +<-50> +<-50> +<-20> +<-30> +<-30> + + + + + + + + + 404 Not Found + + + + +
+
+

+ + 404 Not Found +

+

+ We apologize but we can't seem to be able to find what you're looking + for! +

+ + error
+
+ + +
+ + diff --git a/data/htdocs/www/block.html b/data/htdocs/www/block.html new file mode 100644 index 0000000..85d47a3 --- /dev/null +++ b/data/htdocs/www/block.html @@ -0,0 +1,3 @@ + + This URL was blocked by your squid! + diff --git a/data/htdocs/www/css/bootstrap.min.css b/data/htdocs/www/css/bootstrap.min.css new file mode 100644 index 0000000..f7f8545 --- /dev/null +++ b/data/htdocs/www/css/bootstrap.min.css @@ -0,0 +1,10531 @@ +/*! + * Bootswatch v5.1.3 + * Homepage: https://bootswatch.com + * Copyright 2012-2021 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*/ /*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +@import url(https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400&display=swap); +:root { + --bs-blue: #375a7f; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #e83e8c; + --bs-red: #e74c3c; + --bs-orange: #fd7e14; + --bs-yellow: #f39c12; + --bs-green: #00bc8c; + --bs-teal: #20c997; + --bs-cyan: #3498db; + --bs-white: #fff; + --bs-gray: #888; + --bs-gray-dark: #303030; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #ebebeb; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #888; + --bs-gray-700: #444; + --bs-gray-800: #303030; + --bs-gray-900: #222; + --bs-primary: #375a7f; + --bs-secondary: #444; + --bs-success: #00bc8c; + --bs-info: #3498db; + --bs-warning: #f39c12; + --bs-danger: #e74c3c; + --bs-light: #adb5bd; + --bs-dark: #303030; + --bs-primary-rgb: 55, 90, 127; + --bs-secondary-rgb: 68, 68, 68; + --bs-success-rgb: 0, 188, 140; + --bs-info-rgb: 52, 152, 219; + --bs-warning-rgb: 243, 156, 18; + --bs-danger-rgb: 231, 76, 60; + --bs-light-rgb: 173, 181, 189; + --bs-dark-rgb: 48, 48, 48; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 255, 255, 255; + --bs-body-bg-rgb: 34, 34, 34; + --bs-font-sans-serif: Lato, -apple-system, BlinkMacSystemFont, 'Segoe UI', + Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol'; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, + 'Liberation Mono', 'Courier New', monospace; + --bs-gradient: linear-gradient( + 180deg, + rgba(255, 255, 255, 0.15), + rgba(255, 255, 255, 0) + ); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #fff; + --bs-body-bg: #222; +} +*, +::after, +::before { + box-sizing: border-box; +} +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; +} +hr { + margin: 1rem 0; + color: inherit; + background-color: currentColor; + border: 0; + opacity: 0.25; +} +hr:not([size]) { + height: 1px; +} +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} +.h1, +h1 { + font-size: calc(1.425rem + 2.1vw); +} +@media (min-width: 1200px) { + .h1, + h1 { + font-size: 3rem; + } +} +.h2, +h2 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + .h2, + h2 { + font-size: 2.5rem; + } +} +.h3, +h3 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + .h3, + h3 { + font-size: 2rem; + } +} +.h4, +h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + .h4, + h4 { + font-size: 1.5rem; + } +} +.h5, +h5 { + font-size: 1.25rem; +} +.h6, +h6 { + font-size: 1rem; +} +p { + margin-top: 0; + margin-bottom: 1rem; +} +abbr[data-bs-original-title], +abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} +ol, +ul { + padding-left: 2rem; +} +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1rem; +} +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} +dt { + font-weight: 700; +} +dd { + margin-bottom: 0.5rem; + margin-left: 0; +} +blockquote { + margin: 0 0 1rem; +} +b, +strong { + font-weight: bolder; +} +.small, +small { + font-size: 0.875em; +} +.mark, +mark { + padding: 0.2em; + background-color: #fcf8e3; +} +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +a { + color: #00bc8c; + text-decoration: underline; +} +a:hover { + color: #009670; +} +a:not([href]):not([class]), +a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} +code, +kbd, +pre, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; + direction: ltr; + unicode-bidi: bidi-override; +} +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; + color: inherit; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} +code { + font-size: 0.875em; + color: #e83e8c; + word-wrap: break-word; +} +a > code { + color: inherit; +} +kbd { + padding: 0.2rem 0.4rem; + font-size: 0.875em; + color: #fff; + background-color: #222; + border-radius: 0.2rem; +} +kbd kbd { + padding: 0; + font-size: 1em; + font-weight: 700; +} +figure { + margin: 0 0 1rem; +} +img, +svg { + vertical-align: middle; +} +table { + caption-side: bottom; + border-collapse: collapse; +} +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #888; + text-align: left; +} +th { + text-align: inherit; + text-align: -webkit-match-parent; +} +tbody, +td, +tfoot, +th, +thead, +tr { + border-color: inherit; + border-style: solid; + border-width: 0; +} +label { + display: inline-block; +} +button { + border-radius: 0; +} +button:focus:not(:focus-visible) { + outline: 0; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +button, +select { + text-transform: none; +} +[role='button'] { + cursor: pointer; +} +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} +[list]::-webkit-calendar-picker-indicator { + display: none; +} +[type='button'], +[type='reset'], +[type='submit'], +button { + -webkit-appearance: button; +} +[type='button']:not(:disabled), +[type='reset']:not(:disabled), +[type='submit']:not(:disabled), +button:not(:disabled) { + cursor: pointer; +} +::-moz-focus-inner { + padding: 0; + border-style: none; +} +textarea { + resize: vertical; +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-year-field { + padding: 0; +} +::-webkit-inner-spin-button { + height: auto; +} +[type='search'] { + outline-offset: -2px; + -webkit-appearance: textfield; +} +::-webkit-search-decoration { + -webkit-appearance: none; +} +::-webkit-color-swatch-wrapper { + padding: 0; +} +::file-selector-button { + font: inherit; +} +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} +output { + display: inline-block; +} +iframe { + border: 0; +} +summary { + display: list-item; + cursor: pointer; +} +progress { + vertical-align: baseline; +} +[hidden] { + display: none !important; +} +.lead { + font-size: 1.25rem; + font-weight: 300; +} +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; +} +.list-inline-item { + display: inline-block; +} +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.blockquote > :last-child { + margin-bottom: 0; +} +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #888; +} +.blockquote-footer::before { + content: '\2014\00A0'; +} +.img-fluid { + max-width: 100%; + height: auto; +} +.img-thumbnail { + padding: 0.25rem; + background-color: #222; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} +.figure { + display: inline-block; +} +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} +.figure-caption { + font-size: 0.875em; + color: #888; +} +.container, +.container-fluid, +.container-lg, +.container-md, +.container-sm, +.container-xl, +.container-xxl { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} +@media (min-width: 576px) { + .container, + .container-sm { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container, + .container-md, + .container-sm { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container, + .container-lg, + .container-md, + .container-sm { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container, + .container-lg, + .container-md, + .container-sm, + .container-xl { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container, + .container-lg, + .container-md, + .container-sm, + .container-xl, + .container-xxl { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} +.col { + -ms-flex: 1 0 0%; + flex: 1 0 0%; +} +.row-cols-auto > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; +} +.row-cols-1 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; +} +.row-cols-2 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; +} +.row-cols-3 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; +} +.row-cols-4 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; +} +.row-cols-5 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 20%; +} +.row-cols-6 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; +} +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; +} +.col-1 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 8.333333%; +} +.col-2 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; +} +.col-3 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; +} +.col-4 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; +} +.col-5 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 41.666667%; +} +.col-6 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; +} +.col-7 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 58.333333%; +} +.col-8 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 66.666667%; +} +.col-9 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 75%; +} +.col-10 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 83.333333%; +} +.col-11 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 91.666667%; +} +.col-12 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; +} +.offset-1 { + margin-left: 8.333333%; +} +.offset-2 { + margin-left: 16.666667%; +} +.offset-3 { + margin-left: 25%; +} +.offset-4 { + margin-left: 33.333333%; +} +.offset-5 { + margin-left: 41.666667%; +} +.offset-6 { + margin-left: 50%; +} +.offset-7 { + margin-left: 58.333333%; +} +.offset-8 { + margin-left: 66.666667%; +} +.offset-9 { + margin-left: 75%; +} +.offset-10 { + margin-left: 83.333333%; +} +.offset-11 { + margin-left: 91.666667%; +} +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} +@media (min-width: 576px) { + .col-sm { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .row-cols-sm-4 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; + } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; + } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; + } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; + } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; + } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + } + .row-cols-md-auto > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .row-cols-md-4 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; + } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; + } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; + } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; + } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; + } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .row-cols-lg-4 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; + } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; + } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; + } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; + } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; + } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .row-cols-xl-4 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; + } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; + } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; + } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; + } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; + } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .row-cols-xxl-4 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-xxl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 8.333333%; + } + .col-xxl-2 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 16.666667%; + } + .col-xxl-3 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 33.333333%; + } + .col-xxl-5 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 41.666667%; + } + .col-xxl-6 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 58.333333%; + } + .col-xxl-8 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 66.666667%; + } + .col-xxl-9 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 83.333333%; + } + .col-xxl-11 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 91.666667%; + } + .col-xxl-12 { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-left: 0; + } + .offset-xxl-1 { + margin-left: 8.333333%; + } + .offset-xxl-2 { + margin-left: 16.666667%; + } + .offset-xxl-3 { + margin-left: 25%; + } + .offset-xxl-4 { + margin-left: 33.333333%; + } + .offset-xxl-5 { + margin-left: 41.666667%; + } + .offset-xxl-6 { + margin-left: 50%; + } + .offset-xxl-7 { + margin-left: 58.333333%; + } + .offset-xxl-8 { + margin-left: 66.666667%; + } + .offset-xxl-9 { + margin-left: 75%; + } + .offset-xxl-10 { + margin-left: 83.333333%; + } + .offset-xxl-11 { + margin-left: 91.666667%; + } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; + } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; + } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.table { + --bs-table-bg: transparent; + --bs-table-accent-bg: transparent; + --bs-table-striped-color: #fff; + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: #fff; + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: #fff; + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: #fff; + vertical-align: top; + border-color: #444; +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} +.table > :not(:first-child) { + border-top: 2px solid currentColor; +} +.caption-top { + caption-side: top; +} +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} +.table-bordered > :not(caption) > * { + border-width: 1px 0; +} +.table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} +.table-borderless > :not(:first-child) { + border-top-width: 0; +} +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} +.table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} +.table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} +.table-primary { + --bs-table-bg: #375a7f; + --bs-table-striped-bg: #416285; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #4b6b8c; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #466689; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #4b6b8c; +} +.table-secondary { + --bs-table-bg: #444444; + --bs-table-striped-bg: #4d4d4d; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #575757; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #525252; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #575757; +} +.table-success { + --bs-table-bg: #00bc8c; + --bs-table-striped-bg: #0dbf92; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #1ac398; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #13c195; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #1ac398; +} +.table-info { + --bs-table-bg: #3498db; + --bs-table-striped-bg: #3e9ddd; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #48a2df; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #43a0de; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #48a2df; +} +.table-warning { + --bs-table-bg: #f39c12; + --bs-table-striped-bg: #f4a11e; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #f4a62a; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #f4a324; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #f4a62a; +} +.table-danger { + --bs-table-bg: #e74c3c; + --bs-table-striped-bg: #e85546; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #e95e50; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #e9594b; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #e95e50; +} +.table-light { + --bs-table-bg: #adb5bd; + --bs-table-striped-bg: #b1b9c0; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #b5bcc4; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #b3bbc2; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #b5bcc4; +} +.table-dark { + --bs-table-bg: #303030; + --bs-table-striped-bg: #3a3a3a; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #454545; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #404040; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #454545; +} +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.form-label { + margin-bottom: 0.5rem; +} +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #888; +} +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #303030; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #222; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} +.form-control[type='file'] { + overflow: hidden; +} +.form-control[type='file']:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control:focus { + color: #303030; + background-color: #fff; + border-color: #9badbf; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-control::-webkit-date-and-time-value { + height: 1.5em; +} +.form-control::-webkit-input-placeholder { + color: #888; + opacity: 1; +} +.form-control::-moz-placeholder { + color: #888; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #888; + opacity: 1; +} +.form-control::-ms-input-placeholder { + color: #888; + opacity: 1; +} +.form-control::placeholder { + color: #888; + opacity: 1; +} +.form-control:disabled, +.form-control[readonly] { + background-color: #ebebeb; + opacity: 1; +} +.form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + -moz-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #fff; + background-color: #444; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #414141; +} +.form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #fff; + background-color: #444; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, + background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #414141; +} +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #fff; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} +.form-control-plaintext.form-control-lg, +.form-control-plaintext.form-control-sm { + padding-right: 0; + padding-left: 0; +} +.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} +.form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + -moz-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} +.form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} +.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} +.form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + -moz-margin-end: 1rem; + margin-inline-end: 1rem; +} +.form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} +textarea.form-control { + min-height: calc(1.5em + 0.75rem + 2px); +} +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} +.form-control-color { + width: 3rem; + height: auto; + padding: 0.375rem; +} +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control-color::-moz-color-swatch { + height: 1.5em; + border-radius: 0.25rem; +} +.form-control-color::-webkit-color-swatch { + height: 1.5em; + border-radius: 0.25rem; +} +.form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #303030; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23303030' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #222; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; + } +} +.form-select:focus { + border-color: #9badbf; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-select[multiple], +.form-select[size]:not([size='1']) { + padding-right: 0.75rem; + background-image: none; +} +.form-select:disabled { + background-color: #ebebeb; +} +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #303030; +} +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.form-check .form-check-input { + float: left; + margin-left: -1.5em; +} +.form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; +} +.form-check-input[type='checkbox'] { + border-radius: 0.25em; +} +.form-check-input[type='radio'] { + border-radius: 50%; +} +.form-check-input:active { + -webkit-filter: brightness(90%); + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #9badbf; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-check-input:checked { + background-color: #375a7f; + border-color: #375a7f; +} +.form-check-input:checked[type='checkbox'] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type='radio'] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-input[type='checkbox']:indeterminate { + background-color: #375a7f; + border-color: #375a7f; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + pointer-events: none; + -webkit-filter: none; + filter: none; + opacity: 0.5; +} +.form-check-input:disabled ~ .form-check-label, +.form-check-input[disabled] ~ .form-check-label { + opacity: 0.5; +} +.form-switch { + padding-left: 2.5em; +} +.form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; + } +} +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%239badbf'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.btn-check:disabled + .btn, +.btn-check[disabled] + .btn { + pointer-events: none; + -webkit-filter: none; + filter: none; + opacity: 0.65; +} +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-range:focus { + outline: 0; +} +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #222, 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #222, 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-range::-moz-focus-outer { + border: 0; +} +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #375a7f; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} +.form-range::-webkit-slider-thumb:active { + background-color: #c3ced9; +} +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #375a7f; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} +.form-range::-moz-range-thumb:active { + background-color: #c3ced9; +} +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} +.form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} +.form-floating { + position: relative; +} +.form-floating > .form-control, +.form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} +.form-floating > label { + position: absolute; + top: 0; + left: 0; + height: 100%; + padding: 1rem 0.75rem; + pointer-events: none; + border: 1px solid transparent; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, + -webkit-transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; + } +} +.form-floating > .form-control { + padding: 1rem 0.75rem; +} +.form-floating > .form-control::-webkit-input-placeholder { + color: transparent; +} +.form-floating > .form-control::-moz-placeholder { + color: transparent; +} +.form-floating > .form-control:-ms-input-placeholder { + color: transparent; +} +.form-floating > .form-control::-ms-input-placeholder { + color: transparent; +} +.form-floating > .form-control::placeholder { + color: transparent; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:not(:-ms-input-placeholder) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:focus, +.form-floating > .form-control:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:not(:-ms-input-placeholder) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .form-select ~ label { + opacity: 0.65; + -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; +} +.input-group > .form-control, +.input-group > .form-select { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.input-group > .form-control:focus, +.input-group > .form-select:focus { + z-index: 3; +} +.input-group .btn { + position: relative; + z-index: 2; +} +.input-group .btn:focus { + z-index: 3; +} +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #adb5bd; + text-align: center; + white-space: nowrap; + background-color: #444; + border: 1px solid #222; + border-radius: 0.25rem; +} +.input-group-lg > .btn, +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} +.input-group-sm > .btn, +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; +} +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3), +.input-group:not(.has-validation) + > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4), +.input-group.has-validation + > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group + > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #00bc8c; +} +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(0, 188, 140, 0.9); + border-radius: 0.25rem; +} +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip, +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip { + display: block; +} +.form-control.is-valid, +.was-validated .form-control:valid { + border-color: #00bc8c; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.form-control.is-valid:focus, +.was-validated .form-control:valid:focus { + border-color: #00bc8c; + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25); +} +.was-validated textarea.form-control:valid, +textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right + calc(0.375em + 0.1875rem); +} +.form-select.is-valid, +.was-validated .form-select:valid { + border-color: #00bc8c; +} +.form-select.is-valid:not([multiple]):not([size]), +.form-select.is-valid:not([multiple])[size='1'], +.was-validated .form-select:valid:not([multiple]):not([size]), +.was-validated .form-select:valid:not([multiple])[size='1'] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23303030' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.form-select.is-valid:focus, +.was-validated .form-select:valid:focus { + border-color: #00bc8c; + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25); +} +.form-check-input.is-valid, +.was-validated .form-check-input:valid { + border-color: #00bc8c; +} +.form-check-input.is-valid:checked, +.was-validated .form-check-input:valid:checked { + background-color: #00bc8c; +} +.form-check-input.is-valid:focus, +.was-validated .form-check-input:valid:focus { + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25); +} +.form-check-input.is-valid ~ .form-check-label, +.was-validated .form-check-input:valid ~ .form-check-label { + color: #00bc8c; +} +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} +.input-group .form-control.is-valid, +.input-group .form-select.is-valid, +.was-validated .input-group .form-control:valid, +.was-validated .input-group .form-select:valid { + z-index: 1; +} +.input-group .form-control.is-valid:focus, +.input-group .form-select.is-valid:focus, +.was-validated .input-group .form-control:valid:focus, +.was-validated .input-group .form-select:valid:focus { + z-index: 3; +} +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #e74c3c; +} +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(231, 76, 60, 0.9); + border-radius: 0.25rem; +} +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip, +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip { + display: block; +} +.form-control.is-invalid, +.was-validated .form-control:invalid { + border-color: #e74c3c; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.form-control.is-invalid:focus, +.was-validated .form-control:invalid:focus { + border-color: #e74c3c; + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25); +} +.was-validated textarea.form-control:invalid, +textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right + calc(0.375em + 0.1875rem); +} +.form-select.is-invalid, +.was-validated .form-select:invalid { + border-color: #e74c3c; +} +.form-select.is-invalid:not([multiple]):not([size]), +.form-select.is-invalid:not([multiple])[size='1'], +.was-validated .form-select:invalid:not([multiple]):not([size]), +.was-validated .form-select:invalid:not([multiple])[size='1'] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23303030' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.form-select.is-invalid:focus, +.was-validated .form-select:invalid:focus { + border-color: #e74c3c; + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25); +} +.form-check-input.is-invalid, +.was-validated .form-check-input:invalid { + border-color: #e74c3c; +} +.form-check-input.is-invalid:checked, +.was-validated .form-check-input:invalid:checked { + background-color: #e74c3c; +} +.form-check-input.is-invalid:focus, +.was-validated .form-check-input:invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25); +} +.form-check-input.is-invalid ~ .form-check-label, +.was-validated .form-check-input:invalid ~ .form-check-label { + color: #e74c3c; +} +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} +.input-group .form-control.is-invalid, +.input-group .form-select.is-invalid, +.was-validated .input-group .form-control:invalid, +.was-validated .input-group .form-select:invalid { + z-index: 2; +} +.input-group .form-control.is-invalid:focus, +.input-group .form-select.is-invalid:focus, +.was-validated .input-group .form-control:invalid:focus, +.was-validated .input-group .form-select:invalid:focus { + z-index: 3; +} +.btn { + display: inline-block; + font-weight: 400; + line-height: 1.5; + color: #fff; + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: #fff; +} +.btn-check:focus + .btn, +.btn:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.btn.disabled, +.btn:disabled, +fieldset:disabled .btn { + pointer-events: none; + opacity: 0.65; +} +.btn-primary { + color: #fff; + background-color: #375a7f; + border-color: #375a7f; +} +.btn-primary:hover { + color: #fff; + background-color: #2f4d6c; + border-color: #2c4866; +} +.btn-check:focus + .btn-primary, +.btn-primary:focus { + color: #fff; + background-color: #2f4d6c; + border-color: #2c4866; + box-shadow: 0 0 0 0.25rem rgba(85, 115, 146, 0.5); +} +.btn-check:active + .btn-primary, +.btn-check:checked + .btn-primary, +.btn-primary.active, +.btn-primary:active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #2c4866; + border-color: #29445f; +} +.btn-check:active + .btn-primary:focus, +.btn-check:checked + .btn-primary:focus, +.btn-primary.active:focus, +.btn-primary:active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(85, 115, 146, 0.5); +} +.btn-primary.disabled, +.btn-primary:disabled { + color: #fff; + background-color: #375a7f; + border-color: #375a7f; +} +.btn-secondary { + color: #fff; + background-color: #444; + border-color: #444; +} +.btn-secondary:hover { + color: #fff; + background-color: #3a3a3a; + border-color: #363636; +} +.btn-check:focus + .btn-secondary, +.btn-secondary:focus { + color: #fff; + background-color: #3a3a3a; + border-color: #363636; + box-shadow: 0 0 0 0.25rem rgba(96, 96, 96, 0.5); +} +.btn-check:active + .btn-secondary, +.btn-check:checked + .btn-secondary, +.btn-secondary.active, +.btn-secondary:active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #363636; + border-color: #333; +} +.btn-check:active + .btn-secondary:focus, +.btn-check:checked + .btn-secondary:focus, +.btn-secondary.active:focus, +.btn-secondary:active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(96, 96, 96, 0.5); +} +.btn-secondary.disabled, +.btn-secondary:disabled { + color: #fff; + background-color: #444; + border-color: #444; +} +.btn-success { + color: #fff; + background-color: #00bc8c; + border-color: #00bc8c; +} +.btn-success:hover { + color: #fff; + background-color: #00a077; + border-color: #009670; +} +.btn-check:focus + .btn-success, +.btn-success:focus { + color: #fff; + background-color: #00a077; + border-color: #009670; + box-shadow: 0 0 0 0.25rem rgba(38, 198, 157, 0.5); +} +.btn-check:active + .btn-success, +.btn-check:checked + .btn-success, +.btn-success.active, +.btn-success:active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #009670; + border-color: #008d69; +} +.btn-check:active + .btn-success:focus, +.btn-check:checked + .btn-success:focus, +.btn-success.active:focus, +.btn-success:active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(38, 198, 157, 0.5); +} +.btn-success.disabled, +.btn-success:disabled { + color: #fff; + background-color: #00bc8c; + border-color: #00bc8c; +} +.btn-info { + color: #fff; + background-color: #3498db; + border-color: #3498db; +} +.btn-info:hover { + color: #fff; + background-color: #2c81ba; + border-color: #2a7aaf; +} +.btn-check:focus + .btn-info, +.btn-info:focus { + color: #fff; + background-color: #2c81ba; + border-color: #2a7aaf; + box-shadow: 0 0 0 0.25rem rgba(82, 167, 224, 0.5); +} +.btn-check:active + .btn-info, +.btn-check:checked + .btn-info, +.btn-info.active, +.btn-info:active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #2a7aaf; + border-color: #2772a4; +} +.btn-check:active + .btn-info:focus, +.btn-check:checked + .btn-info:focus, +.btn-info.active:focus, +.btn-info:active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(82, 167, 224, 0.5); +} +.btn-info.disabled, +.btn-info:disabled { + color: #fff; + background-color: #3498db; + border-color: #3498db; +} +.btn-warning { + color: #fff; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-warning:hover { + color: #fff; + background-color: #cf850f; + border-color: #c27d0e; +} +.btn-check:focus + .btn-warning, +.btn-warning:focus { + color: #fff; + background-color: #cf850f; + border-color: #c27d0e; + box-shadow: 0 0 0 0.25rem rgba(245, 171, 54, 0.5); +} +.btn-check:active + .btn-warning, +.btn-check:checked + .btn-warning, +.btn-warning.active, +.btn-warning:active, +.show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #c27d0e; + border-color: #b6750e; +} +.btn-check:active + .btn-warning:focus, +.btn-check:checked + .btn-warning:focus, +.btn-warning.active:focus, +.btn-warning:active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(245, 171, 54, 0.5); +} +.btn-warning.disabled, +.btn-warning:disabled { + color: #fff; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-danger { + color: #fff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-danger:hover { + color: #fff; + background-color: #c44133; + border-color: #b93d30; +} +.btn-check:focus + .btn-danger, +.btn-danger:focus { + color: #fff; + background-color: #c44133; + border-color: #b93d30; + box-shadow: 0 0 0 0.25rem rgba(235, 103, 89, 0.5); +} +.btn-check:active + .btn-danger, +.btn-check:checked + .btn-danger, +.btn-danger.active, +.btn-danger:active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #b93d30; + border-color: #ad392d; +} +.btn-check:active + .btn-danger:focus, +.btn-check:checked + .btn-danger:focus, +.btn-danger.active:focus, +.btn-danger:active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(235, 103, 89, 0.5); +} +.btn-danger.disabled, +.btn-danger:disabled { + color: #fff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-light { + color: #fff; + background-color: #adb5bd; + border-color: #adb5bd; +} +.btn-light:hover { + color: #fff; + background-color: #939aa1; + border-color: #8a9197; +} +.btn-check:focus + .btn-light, +.btn-light:focus { + color: #fff; + background-color: #939aa1; + border-color: #8a9197; + box-shadow: 0 0 0 0.25rem rgba(185, 192, 199, 0.5); +} +.btn-check:active + .btn-light, +.btn-check:checked + .btn-light, +.btn-light.active, +.btn-light:active, +.show > .btn-light.dropdown-toggle { + color: #fff; + background-color: #8a9197; + border-color: #82888e; +} +.btn-check:active + .btn-light:focus, +.btn-check:checked + .btn-light:focus, +.btn-light.active:focus, +.btn-light:active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(185, 192, 199, 0.5); +} +.btn-light.disabled, +.btn-light:disabled { + color: #fff; + background-color: #adb5bd; + border-color: #adb5bd; +} +.btn-dark { + color: #fff; + background-color: #303030; + border-color: #303030; +} +.btn-dark:hover { + color: #fff; + background-color: #292929; + border-color: #262626; +} +.btn-check:focus + .btn-dark, +.btn-dark:focus { + color: #fff; + background-color: #292929; + border-color: #262626; + box-shadow: 0 0 0 0.25rem rgba(79, 79, 79, 0.5); +} +.btn-check:active + .btn-dark, +.btn-check:checked + .btn-dark, +.btn-dark.active, +.btn-dark:active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #262626; + border-color: #242424; +} +.btn-check:active + .btn-dark:focus, +.btn-check:checked + .btn-dark:focus, +.btn-dark.active:focus, +.btn-dark:active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(79, 79, 79, 0.5); +} +.btn-dark.disabled, +.btn-dark:disabled { + color: #fff; + background-color: #303030; + border-color: #303030; +} +.btn-outline-primary { + color: #375a7f; + border-color: #375a7f; +} +.btn-outline-primary:hover { + color: #fff; + background-color: #375a7f; + border-color: #375a7f; +} +.btn-check:focus + .btn-outline-primary, +.btn-outline-primary:focus { + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.5); +} +.btn-check:active + .btn-outline-primary, +.btn-check:checked + .btn-outline-primary, +.btn-outline-primary.active, +.btn-outline-primary.dropdown-toggle.show, +.btn-outline-primary:active { + color: #fff; + background-color: #375a7f; + border-color: #375a7f; +} +.btn-check:active + .btn-outline-primary:focus, +.btn-check:checked + .btn-outline-primary:focus, +.btn-outline-primary.active:focus, +.btn-outline-primary.dropdown-toggle.show:focus, +.btn-outline-primary:active:focus { + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.5); +} +.btn-outline-primary.disabled, +.btn-outline-primary:disabled { + color: #375a7f; + background-color: transparent; +} +.btn-outline-secondary { + color: #444; + border-color: #444; +} +.btn-outline-secondary:hover { + color: #fff; + background-color: #444; + border-color: #444; +} +.btn-check:focus + .btn-outline-secondary, +.btn-outline-secondary:focus { + box-shadow: 0 0 0 0.25rem rgba(68, 68, 68, 0.5); +} +.btn-check:active + .btn-outline-secondary, +.btn-check:checked + .btn-outline-secondary, +.btn-outline-secondary.active, +.btn-outline-secondary.dropdown-toggle.show, +.btn-outline-secondary:active { + color: #fff; + background-color: #444; + border-color: #444; +} +.btn-check:active + .btn-outline-secondary:focus, +.btn-check:checked + .btn-outline-secondary:focus, +.btn-outline-secondary.active:focus, +.btn-outline-secondary.dropdown-toggle.show:focus, +.btn-outline-secondary:active:focus { + box-shadow: 0 0 0 0.25rem rgba(68, 68, 68, 0.5); +} +.btn-outline-secondary.disabled, +.btn-outline-secondary:disabled { + color: #444; + background-color: transparent; +} +.btn-outline-success { + color: #00bc8c; + border-color: #00bc8c; +} +.btn-outline-success:hover { + color: #fff; + background-color: #00bc8c; + border-color: #00bc8c; +} +.btn-check:focus + .btn-outline-success, +.btn-outline-success:focus { + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.5); +} +.btn-check:active + .btn-outline-success, +.btn-check:checked + .btn-outline-success, +.btn-outline-success.active, +.btn-outline-success.dropdown-toggle.show, +.btn-outline-success:active { + color: #fff; + background-color: #00bc8c; + border-color: #00bc8c; +} +.btn-check:active + .btn-outline-success:focus, +.btn-check:checked + .btn-outline-success:focus, +.btn-outline-success.active:focus, +.btn-outline-success.dropdown-toggle.show:focus, +.btn-outline-success:active:focus { + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.5); +} +.btn-outline-success.disabled, +.btn-outline-success:disabled { + color: #00bc8c; + background-color: transparent; +} +.btn-outline-info { + color: #3498db; + border-color: #3498db; +} +.btn-outline-info:hover { + color: #fff; + background-color: #3498db; + border-color: #3498db; +} +.btn-check:focus + .btn-outline-info, +.btn-outline-info:focus { + box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.5); +} +.btn-check:active + .btn-outline-info, +.btn-check:checked + .btn-outline-info, +.btn-outline-info.active, +.btn-outline-info.dropdown-toggle.show, +.btn-outline-info:active { + color: #fff; + background-color: #3498db; + border-color: #3498db; +} +.btn-check:active + .btn-outline-info:focus, +.btn-check:checked + .btn-outline-info:focus, +.btn-outline-info.active:focus, +.btn-outline-info.dropdown-toggle.show:focus, +.btn-outline-info:active:focus { + box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.5); +} +.btn-outline-info.disabled, +.btn-outline-info:disabled { + color: #3498db; + background-color: transparent; +} +.btn-outline-warning { + color: #f39c12; + border-color: #f39c12; +} +.btn-outline-warning:hover { + color: #fff; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-check:focus + .btn-outline-warning, +.btn-outline-warning:focus { + box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5); +} +.btn-check:active + .btn-outline-warning, +.btn-check:checked + .btn-outline-warning, +.btn-outline-warning.active, +.btn-outline-warning.dropdown-toggle.show, +.btn-outline-warning:active { + color: #fff; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-check:active + .btn-outline-warning:focus, +.btn-check:checked + .btn-outline-warning:focus, +.btn-outline-warning.active:focus, +.btn-outline-warning.dropdown-toggle.show:focus, +.btn-outline-warning:active:focus { + box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5); +} +.btn-outline-warning.disabled, +.btn-outline-warning:disabled { + color: #f39c12; + background-color: transparent; +} +.btn-outline-danger { + color: #e74c3c; + border-color: #e74c3c; +} +.btn-outline-danger:hover { + color: #fff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-check:focus + .btn-outline-danger, +.btn-outline-danger:focus { + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5); +} +.btn-check:active + .btn-outline-danger, +.btn-check:checked + .btn-outline-danger, +.btn-outline-danger.active, +.btn-outline-danger.dropdown-toggle.show, +.btn-outline-danger:active { + color: #fff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-check:active + .btn-outline-danger:focus, +.btn-check:checked + .btn-outline-danger:focus, +.btn-outline-danger.active:focus, +.btn-outline-danger.dropdown-toggle.show:focus, +.btn-outline-danger:active:focus { + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5); +} +.btn-outline-danger.disabled, +.btn-outline-danger:disabled { + color: #e74c3c; + background-color: transparent; +} +.btn-outline-light { + color: #adb5bd; + border-color: #adb5bd; +} +.btn-outline-light:hover { + color: #fff; + background-color: #adb5bd; + border-color: #adb5bd; +} +.btn-check:focus + .btn-outline-light, +.btn-outline-light:focus { + box-shadow: 0 0 0 0.25rem rgba(173, 181, 189, 0.5); +} +.btn-check:active + .btn-outline-light, +.btn-check:checked + .btn-outline-light, +.btn-outline-light.active, +.btn-outline-light.dropdown-toggle.show, +.btn-outline-light:active { + color: #fff; + background-color: #adb5bd; + border-color: #adb5bd; +} +.btn-check:active + .btn-outline-light:focus, +.btn-check:checked + .btn-outline-light:focus, +.btn-outline-light.active:focus, +.btn-outline-light.dropdown-toggle.show:focus, +.btn-outline-light:active:focus { + box-shadow: 0 0 0 0.25rem rgba(173, 181, 189, 0.5); +} +.btn-outline-light.disabled, +.btn-outline-light:disabled { + color: #adb5bd; + background-color: transparent; +} +.btn-outline-dark { + color: #303030; + border-color: #303030; +} +.btn-outline-dark:hover { + color: #fff; + background-color: #303030; + border-color: #303030; +} +.btn-check:focus + .btn-outline-dark, +.btn-outline-dark:focus { + box-shadow: 0 0 0 0.25rem rgba(48, 48, 48, 0.5); +} +.btn-check:active + .btn-outline-dark, +.btn-check:checked + .btn-outline-dark, +.btn-outline-dark.active, +.btn-outline-dark.dropdown-toggle.show, +.btn-outline-dark:active { + color: #fff; + background-color: #303030; + border-color: #303030; +} +.btn-check:active + .btn-outline-dark:focus, +.btn-check:checked + .btn-outline-dark:focus, +.btn-outline-dark.active:focus, +.btn-outline-dark.dropdown-toggle.show:focus, +.btn-outline-dark:active:focus { + box-shadow: 0 0 0 0.25rem rgba(48, 48, 48, 0.5); +} +.btn-outline-dark.disabled, +.btn-outline-dark:disabled { + color: #303030; + background-color: transparent; +} +.btn-link { + font-weight: 400; + color: #00bc8c; + text-decoration: underline; +} +.btn-link:hover { + color: #009670; +} +.btn-link.disabled, +.btn-link:disabled { + color: #888; +} +.btn-group-lg > .btn, +.btn-lg { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} +.btn-group-sm > .btn, +.btn-sm { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} +.fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} +.fade:not(.show) { + opacity: 0; +} +.collapse:not(.show) { + display: none; +} +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; + } +} +.dropdown, +.dropend, +.dropstart, +.dropup { + position: relative; +} +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} +.dropdown-menu { + position: absolute; + z-index: 1000; + display: none; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0; + font-size: 1rem; + color: #fff; + text-align: left; + list-style: none; + background-color: #222; + background-clip: padding-box; + border: 1px solid #444; + border-radius: 0.25rem; +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: 0.125rem; +} +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #444; +} +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: 400; + color: #fff; + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.dropdown-item:focus, +.dropdown-item:hover { + color: #fff; + background-color: #375a7f; +} +.dropdown-item.active, +.dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #375a7f; +} +.dropdown-item.disabled, +.dropdown-item:disabled { + color: #adb5bd; + pointer-events: none; + background-color: transparent; +} +.dropdown-menu.show { + display: block; +} +.dropdown-header { + display: block; + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #888; + white-space: nowrap; +} +.dropdown-item-text { + display: block; + padding: 0.25rem 1rem; + color: #fff; +} +.dropdown-menu-dark { + color: #dee2e6; + background-color: #303030; + border-color: #444; +} +.dropdown-menu-dark .dropdown-item { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-item:focus, +.dropdown-menu-dark .dropdown-item:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.15); +} +.dropdown-menu-dark .dropdown-item.active, +.dropdown-menu-dark .dropdown-item:active { + color: #fff; + background-color: #375a7f; +} +.dropdown-menu-dark .dropdown-item.disabled, +.dropdown-menu-dark .dropdown-item:disabled { + color: #adb5bd; +} +.dropdown-menu-dark .dropdown-divider { + border-color: #444; +} +.dropdown-menu-dark .dropdown-item-text { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-header { + color: #adb5bd; +} +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} +.btn-group-vertical > .btn, +.btn-group > .btn { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn.active, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:hover, +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn.active, +.btn-group > .btn:active, +.btn-group > .btn:focus, +.btn-group > .btn:hover { + z-index: 1; +} +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} +.btn-group > .btn-group:not(:first-child), +.btn-group > .btn:not(:first-child) { + margin-left: -1px; +} +.btn-group > .btn-group:not(:last-child) > .btn, +.btn-group > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:not(:first-child) > .btn, +.btn-group > .btn:nth-child(n + 3), +.btn-group > :not(.btn-check) + .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, +.dropend .dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} +.btn-group-sm > .btn + .dropdown-toggle-split, +.btn-sm + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} +.btn-group-lg > .btn + .dropdown-toggle-split, +.btn-lg + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} +.btn-group-vertical { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn-group:not(:first-child), +.btn-group-vertical > .btn:not(:first-child) { + margin-top: -1px; +} +.btn-group-vertical > .btn-group:not(:last-child) > .btn, +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child) > .btn, +.btn-group-vertical > .btn ~ .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav-link { + display: block; + padding: 0.5rem 2rem; + color: #00bc8c; + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; + } +} +.nav-link:focus, +.nav-link:hover { + color: #009670; +} +.nav-link.disabled { + color: #adb5bd; + pointer-events: none; + cursor: default; +} +.nav-tabs { + border-bottom: 1px solid #444; +} +.nav-tabs .nav-link { + margin-bottom: -1px; + background: 0 0; + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.nav-tabs .nav-link:focus, +.nav-tabs .nav-link:hover { + border-color: #444 #444 transparent; + isolation: isolate; +} +.nav-tabs .nav-link.disabled { + color: #adb5bd; + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-item.show .nav-link, +.nav-tabs .nav-link.active { + color: #fff; + background-color: #222; + border-color: #444 #444 transparent; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.nav-pills .nav-link { + background: 0 0; + border: 0; + border-radius: 0.25rem; +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #375a7f; +} +.nav-fill .nav-item, +.nav-fill > .nav-link { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} +.nav-justified .nav-item, +.nav-justified > .nav-link { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; +} +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding-top: 1rem; + padding-bottom: 1rem; +} +.navbar > .container, +.navbar > .container-fluid, +.navbar > .container-lg, +.navbar > .container-md, +.navbar > .container-sm, +.navbar > .container-xl, +.navbar > .container-xxl { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: inherit; + flex-wrap: inherit; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; +} +.navbar-brand { + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + text-decoration: none; + white-space: nowrap; +} +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} +.navbar-nav .dropdown-menu { + position: static; +} +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center; +} +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; + transition: box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; + } +} +.navbar-toggler:hover { + text-decoration: none; +} +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 0.25rem; +} +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} +@media (min-width: 576px) { + .navbar-expand-sm { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + .navbar-expand-sm .offcanvas-header { + display: none; + } + .navbar-expand-sm .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-positive: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + .navbar-expand-sm .offcanvas-bottom, + .navbar-expand-sm .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-sm .offcanvas-body { + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 768px) { + .navbar-expand-md { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + .navbar-expand-md .offcanvas-header { + display: none; + } + .navbar-expand-md .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-positive: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + .navbar-expand-md .offcanvas-bottom, + .navbar-expand-md .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-md .offcanvas-body { + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 992px) { + .navbar-expand-lg { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + .navbar-expand-lg .offcanvas-header { + display: none; + } + .navbar-expand-lg .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-positive: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + .navbar-expand-lg .offcanvas-bottom, + .navbar-expand-lg .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-lg .offcanvas-body { + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1200px) { + .navbar-expand-xl { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + .navbar-expand-xl .offcanvas-header { + display: none; + } + .navbar-expand-xl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-positive: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + .navbar-expand-xl .offcanvas-bottom, + .navbar-expand-xl .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-xl .offcanvas-body { + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1400px) { + .navbar-expand-xxl { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } + .navbar-expand-xxl .offcanvas-header { + display: none; + } + .navbar-expand-xxl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-positive: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + .navbar-expand-xxl .offcanvas-bottom, + .navbar-expand-xxl .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-xxl .offcanvas-body { + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +.navbar-expand { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; +} +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; +} +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.navbar-expand .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; +} +.navbar-expand .navbar-toggler { + display: none; +} +.navbar-expand .offcanvas-header { + display: none; +} +.navbar-expand .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-positive: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; +} +.navbar-expand .offcanvas-bottom, +.navbar-expand .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; +} +.navbar-expand .offcanvas-body { + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} +.navbar-light .navbar-brand { + color: #222; +} +.navbar-light .navbar-brand:focus, +.navbar-light .navbar-brand:hover { + color: #222; +} +.navbar-light .navbar-nav .nav-link { + color: rgba(34, 34, 34, 0.7); +} +.navbar-light .navbar-nav .nav-link:focus, +.navbar-light .navbar-nav .nav-link:hover { + color: #222; +} +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .show > .nav-link { + color: #222; +} +.navbar-light .navbar-toggler { + color: rgba(34, 34, 34, 0.7); + border-color: rgba(34, 34, 34, 0.1); +} +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2834, 34, 34, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-light .navbar-text { + color: rgba(34, 34, 34, 0.7); +} +.navbar-light .navbar-text a, +.navbar-light .navbar-text a:focus, +.navbar-light .navbar-text a:hover { + color: #222; +} +.navbar-dark .navbar-brand { + color: #fff; +} +.navbar-dark .navbar-brand:focus, +.navbar-dark .navbar-brand:hover { + color: #fff; +} +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.6); +} +.navbar-dark .navbar-nav .nav-link:focus, +.navbar-dark .navbar-nav .nav-link:hover { + color: #fff; +} +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} +.navbar-dark .navbar-nav .nav-link.active, +.navbar-dark .navbar-nav .show > .nav-link { + color: #fff; +} +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.6); + border-color: rgba(255, 255, 255, 0.1); +} +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.6%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.6); +} +.navbar-dark .navbar-text a, +.navbar-dark .navbar-text a:focus, +.navbar-dark .navbar-text a:hover { + color: #fff; +} +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #303030; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem 1rem; +} +.card-title { + margin-bottom: 0.5rem; +} +.card-subtitle { + margin-top: -0.25rem; + margin-bottom: 0; +} +.card-text:last-child { + margin-bottom: 0; +} +.card-link + .card-link { + margin-left: 1rem; +} +.card-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + background-color: #444; + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} +.card-footer { + padding: 0.5rem 1rem; + background-color: #444; + border-top: 1px solid rgba(0, 0, 0, 0.125); +} +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} +.card-header-tabs { + margin-right: -0.5rem; + margin-bottom: -0.5rem; + margin-left: -0.5rem; + border-bottom: 0; +} +.card-header-tabs .nav-link.active { + background-color: #303030; + border-bottom-color: #303030; +} +.card-header-pills { + margin-right: -0.5rem; + margin-left: -0.5rem; +} +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1rem; + border-radius: calc(0.25rem - 1px); +} +.card-img, +.card-img-bottom, +.card-img-top { + width: 100%; +} +.card-img, +.card-img-top { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.card-img, +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.card-group > .card { + margin-bottom: 0.75rem; +} +@media (min-width: 576px) { + .card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-header, + .card-group > .card:not(:last-child) .card-img-top { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-footer, + .card-group > .card:not(:last-child) .card-img-bottom { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-header, + .card-group > .card:not(:first-child) .card-img-top { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-footer, + .card-group > .card:not(:first-child) .card-img-bottom { + border-bottom-left-radius: 0; + } +} +.accordion-button { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + width: 100%; + padding: 1rem 1.25rem; + font-size: 1rem; + color: #fff; + text-align: left; + background-color: #222; + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + border-radius 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: #325172; + background-color: #ebeff2; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125); +} +.accordion-button:not(.collapsed)::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23325172'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + -webkit-transform: rotate(-180deg); + transform: rotate(-180deg); +} +.accordion-button::after { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 1.25rem; + height: 1.25rem; + margin-left: auto; + content: ''; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-size: 1.25rem; + transition: -webkit-transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + border-color: #9badbf; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.accordion-header { + margin-bottom: 0; +} +.accordion-item { + background-color: #222; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.accordion-item:first-of-type { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.accordion-item:first-of-type .accordion-button { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.accordion-item:not(:first-of-type) { + border-top: 0; +} +.accordion-item:last-of-type { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.accordion-body { + padding: 1rem 1.25rem; +} +.accordion-flush .accordion-collapse { + border-width: 0; +} +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.accordion-flush .accordion-item:first-child { + border-top: 0; +} +.accordion-flush .accordion-item:last-child { + border-bottom: 0; +} +.accordion-flush .accordion-item .accordion-button { + border-radius: 0; +} +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.375rem 0.75rem; + margin-bottom: 1rem; + list-style: none; + background-color: #444; + border-radius: 0.25rem; +} +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: 0.5rem; + color: #888; + content: var(--bs-breadcrumb-divider, '/'); +} +.breadcrumb-item.active { + color: #888; +} +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; +} +.page-link { + position: relative; + display: block; + color: #fff; + text-decoration: none; + background-color: #00bc8c; + border: 0 solid transparent; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; + } +} +.page-link:hover { + z-index: 2; + color: #fff; + background-color: #00efb2; + border-color: transparent; +} +.page-link:focus { + z-index: 3; + color: #009670; + background-color: #ebebeb; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.page-item:not(:first-child) .page-link { + margin-left: 0; +} +.page-item.active .page-link { + z-index: 3; + color: #fff; + background-color: #00efb2; + border-color: transparent; +} +.page-item.disabled .page-link { + color: #fff; + pointer-events: none; + background-color: #007053; + border-color: transparent; +} +.page-link { + padding: 0.375rem 0.75rem; +} +.page-item:first-child .page-link { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; +} +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; +} +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} +.badge { + display: inline-block; + padding: 0.35em 0.65em; + font-size: 0.75em; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.alert { + position: relative; + padding: 1rem 1rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} +.alert-heading { + color: inherit; +} +.alert-link { + font-weight: 700; +} +.alert-dismissible { + padding-right: 3rem; +} +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} +.alert-primary { + color: #21364c; + background-color: #d7dee5; + border-color: #c3ced9; +} +.alert-primary .alert-link { + color: #1a2b3d; +} +.alert-secondary { + color: #292929; + background-color: #dadada; + border-color: #c7c7c7; +} +.alert-secondary .alert-link { + color: #212121; +} +.alert-success { + color: #007154; + background-color: #ccf2e8; + border-color: #b3ebdd; +} +.alert-success .alert-link { + color: #005a43; +} +.alert-info { + color: #1f5b83; + background-color: #d6eaf8; + border-color: #c2e0f4; +} +.alert-info .alert-link { + color: #194969; +} +.alert-warning { + color: #925e0b; + background-color: #fdebd0; + border-color: #fbe1b8; +} +.alert-warning .alert-link { + color: #754b09; +} +.alert-danger { + color: #8b2e24; + background-color: #fadbd8; + border-color: #f8c9c5; +} +.alert-danger .alert-link { + color: #6f251d; +} +.alert-light { + color: #686d71; + background-color: #eff0f2; + border-color: #e6e9eb; +} +.alert-light .alert-link { + color: #53575a; +} +.alert-dark { + color: #1d1d1d; + background-color: #d6d6d6; + border-color: #c1c1c1; +} +.alert-dark .alert-link { + color: #171717; +} +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.progress { + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #444; + border-radius: 0.25rem; +} +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #375a7f; + transition: width 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} +.progress-bar-striped { + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-size: 1rem 1rem; +} +.progress-bar-animated { + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: 0.25rem; +} +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > li::before { + content: counters(section, '.') '. '; + counter-increment: section; +} +.list-group-item-action { + width: 100%; + color: #444; + text-align: inherit; +} +.list-group-item-action:focus, +.list-group-item-action:hover { + z-index: 1; + color: #fff; + text-decoration: none; + background-color: #444; +} +.list-group-item-action:active { + color: #fff; + background-color: #222; +} +.list-group-item { + position: relative; + display: block; + padding: 0.5rem 1rem; + color: #fff; + text-decoration: none; + background-color: #303030; + border: 1px solid #444; +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, +.list-group-item:disabled { + color: #888; + pointer-events: none; + background-color: #303030; +} +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #375a7f; + border-color: #375a7f; +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} +.list-group-horizontal { + -ms-flex-direction: row; + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} +@media (min-width: 576px) { + .list-group-horizontal-sm { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} +.list-group-item-primary { + color: #21364c; + background-color: #d7dee5; +} +.list-group-item-primary.list-group-item-action:focus, +.list-group-item-primary.list-group-item-action:hover { + color: #21364c; + background-color: #c2c8ce; +} +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #21364c; + border-color: #21364c; +} +.list-group-item-secondary { + color: #292929; + background-color: #dadada; +} +.list-group-item-secondary.list-group-item-action:focus, +.list-group-item-secondary.list-group-item-action:hover { + color: #292929; + background-color: #c4c4c4; +} +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #292929; + border-color: #292929; +} +.list-group-item-success { + color: #007154; + background-color: #ccf2e8; +} +.list-group-item-success.list-group-item-action:focus, +.list-group-item-success.list-group-item-action:hover { + color: #007154; + background-color: #b8dad1; +} +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #007154; + border-color: #007154; +} +.list-group-item-info { + color: #1f5b83; + background-color: #d6eaf8; +} +.list-group-item-info.list-group-item-action:focus, +.list-group-item-info.list-group-item-action:hover { + color: #1f5b83; + background-color: #c1d3df; +} +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #1f5b83; + border-color: #1f5b83; +} +.list-group-item-warning { + color: #925e0b; + background-color: #fdebd0; +} +.list-group-item-warning.list-group-item-action:focus, +.list-group-item-warning.list-group-item-action:hover { + color: #925e0b; + background-color: #e4d4bb; +} +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #925e0b; + border-color: #925e0b; +} +.list-group-item-danger { + color: #8b2e24; + background-color: #fadbd8; +} +.list-group-item-danger.list-group-item-action:focus, +.list-group-item-danger.list-group-item-action:hover { + color: #8b2e24; + background-color: #e1c5c2; +} +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #8b2e24; + border-color: #8b2e24; +} +.list-group-item-light { + color: #686d71; + background-color: #eff0f2; +} +.list-group-item-light.list-group-item-action:focus, +.list-group-item-light.list-group-item-action:hover { + color: #686d71; + background-color: #d7d8da; +} +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #686d71; + border-color: #686d71; +} +.list-group-item-dark { + color: #1d1d1d; + background-color: #d6d6d6; +} +.list-group-item-dark.list-group-item-action:focus, +.list-group-item-dark.list-group-item-action:hover { + color: #1d1d1d; + background-color: #c1c1c1; +} +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1d1d1d; + border-color: #1d1d1d; +} +.btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #fff; + background: transparent + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") + center/1em auto no-repeat; + border: 0; + border-radius: 0.25rem; + opacity: 0.4; +} +.btn-close:hover { + color: #fff; + text-decoration: none; + opacity: 1; +} +.btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); + opacity: 1; +} +.btn-close.disabled, +.btn-close:disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + opacity: 0.25; +} +.btn-close-white { + -webkit-filter: invert(1) grayscale(100%) brightness(200%); + filter: invert(1) grayscale(100%) brightness(200%); +} +.toast { + width: 350px; + max-width: 100%; + font-size: 0.875rem; + pointer-events: auto; + background-color: #444; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.toast.showing { + opacity: 0; +} +.toast:not(.show) { + display: none; +} +.toast-container { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: 0.75rem; +} +.toast-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.5rem 0.75rem; + color: #888; + background-color: #303030; + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.toast-header .btn-close { + margin-right: -0.375rem; + margin-left: 0.75rem; +} +.toast-body { + padding: 0.75rem; + word-wrap: break-word; +} +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1055; + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} +.modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -50px); + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + -webkit-transform: none; + transform: none; +} +.modal.modal-static .modal-dialog { + -webkit-transform: scale(1.02); + transform: scale(1.02); +} +.modal-dialog-scrollable { + height: calc(100% - 1rem); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - 1rem); +} +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #303030; + background-clip: padding-box; + border: 1px solid #444; + border-radius: 0.3rem; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + width: 100vw; + height: 100vh; + background-color: #000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: 0.5; +} +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-negative: 0; + flex-shrink: 0; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #444; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.modal-header .btn-close { + padding: 0.5rem 0.5rem; + margin: -0.5rem -0.5rem -0.5rem auto; +} +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; +} +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-negative: 0; + flex-shrink: 0; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid #444; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius: calc(0.3rem - 1px); +} +.modal-footer > * { + margin: 0.25rem; +} +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + height: calc(100% - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-sm { + max-width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } +} +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.modal-fullscreen .modal-header { + border-radius: 0; +} +.modal-fullscreen .modal-body { + overflow-y: auto; +} +.modal-fullscreen .modal-footer { + border-radius: 0; +} +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } +} +.tooltip { + position: absolute; + z-index: 1080; + display: block; + margin: 0; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: 0.9; +} +.tooltip .tooltip-arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ''; + border-color: transparent; + border-style: solid; +} +.bs-tooltip-auto[data-popper-placement^='top'], +.bs-tooltip-top { + padding: 0.4rem 0; +} +.bs-tooltip-auto[data-popper-placement^='top'] .tooltip-arrow, +.bs-tooltip-top .tooltip-arrow { + bottom: 0; +} +.bs-tooltip-auto[data-popper-placement^='top'] .tooltip-arrow::before, +.bs-tooltip-top .tooltip-arrow::before { + top: -1px; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} +.bs-tooltip-auto[data-popper-placement^='right'], +.bs-tooltip-end { + padding: 0 0.4rem; +} +.bs-tooltip-auto[data-popper-placement^='right'] .tooltip-arrow, +.bs-tooltip-end .tooltip-arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-auto[data-popper-placement^='right'] .tooltip-arrow::before, +.bs-tooltip-end .tooltip-arrow::before { + right: -1px; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} +.bs-tooltip-auto[data-popper-placement^='bottom'], +.bs-tooltip-bottom { + padding: 0.4rem 0; +} +.bs-tooltip-auto[data-popper-placement^='bottom'] .tooltip-arrow, +.bs-tooltip-bottom .tooltip-arrow { + top: 0; +} +.bs-tooltip-auto[data-popper-placement^='bottom'] .tooltip-arrow::before, +.bs-tooltip-bottom .tooltip-arrow::before { + bottom: -1px; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} +.bs-tooltip-auto[data-popper-placement^='left'], +.bs-tooltip-start { + padding: 0 0.4rem; +} +.bs-tooltip-auto[data-popper-placement^='left'] .tooltip-arrow, +.bs-tooltip-start .tooltip-arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-auto[data-popper-placement^='left'] .tooltip-arrow::before, +.bs-tooltip-start .tooltip-arrow::before { + left: -1px; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1070; + display: block; + max-width: 276px; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #303030; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} +.popover .popover-arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; +} +.popover .popover-arrow::after, +.popover .popover-arrow::before { + position: absolute; + display: block; + content: ''; + border-color: transparent; + border-style: solid; +} +.bs-popover-auto[data-popper-placement^='top'] > .popover-arrow, +.bs-popover-top > .popover-arrow { + bottom: calc(-0.5rem - 1px); +} +.bs-popover-auto[data-popper-placement^='top'] > .popover-arrow::before, +.bs-popover-top > .popover-arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-auto[data-popper-placement^='top'] > .popover-arrow::after, +.bs-popover-top > .popover-arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #303030; +} +.bs-popover-auto[data-popper-placement^='right'] > .popover-arrow, +.bs-popover-end > .popover-arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-auto[data-popper-placement^='right'] > .popover-arrow::before, +.bs-popover-end > .popover-arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-auto[data-popper-placement^='right'] > .popover-arrow::after, +.bs-popover-end > .popover-arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #303030; +} +.bs-popover-auto[data-popper-placement^='bottom'] > .popover-arrow, +.bs-popover-bottom > .popover-arrow { + top: calc(-0.5rem - 1px); +} +.bs-popover-auto[data-popper-placement^='bottom'] > .popover-arrow::before, +.bs-popover-bottom > .popover-arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-auto[data-popper-placement^='bottom'] > .popover-arrow::after, +.bs-popover-bottom > .popover-arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #303030; +} +.bs-popover-auto[data-popper-placement^='bottom'] .popover-header::before, +.bs-popover-bottom .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ''; + border-bottom: 1px solid #444; +} +.bs-popover-auto[data-popper-placement^='left'] > .popover-arrow, +.bs-popover-start > .popover-arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-auto[data-popper-placement^='left'] > .popover-arrow::before, +.bs-popover-start > .popover-arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-auto[data-popper-placement^='left'] > .popover-arrow::after, +.bs-popover-start > .popover-arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #303030; +} +.popover-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #444; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.popover-header:empty { + display: none; +} +.popover-body { + padding: 1rem 1rem; + color: #fff; +} +.carousel { + position: relative; +} +.carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner::after { + display: block; + clear: both; + content: ''; +} +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} +.carousel-item-next, +.carousel-item-prev, +.carousel-item.active { + display: block; +} +.active.carousel-item-end, +.carousel-item-next:not(.carousel-item-start) { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} +.active.carousel-item-start, +.carousel-item-prev:not(.carousel-item-end) { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + -webkit-transform: none; + transform: none; +} +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end, +.carousel-fade .carousel-item.active { + z-index: 1; + opacity: 1; +} +.carousel-fade .active.carousel-item-end, +.carousel-fade .active.carousel-item-start { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-end, + .carousel-fade .active.carousel-item-start { + transition: none; + } +} +.carousel-control-next, +.carousel-control-prev { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: 0 0; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-control-next, + .carousel-control-prev { + transition: none; + } +} +.carousel-control-next:focus, +.carousel-control-next:hover, +.carousel-control-prev:focus, +.carousel-control-prev:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} +.carousel-control-prev { + left: 0; +} +.carousel-control-next { + right: 0; +} +.carousel-control-next-icon, +.carousel-control-prev-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; + } +} +.carousel-indicators .active { + opacity: 1; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} +.carousel-dark .carousel-control-next-icon, +.carousel-dark .carousel-control-prev-icon { + -webkit-filter: invert(1) grayscale(100); + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} +.carousel-dark .carousel-caption { + color: #000; +} +@-webkit-keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: 0.75s linear infinite spinner-border; + animation: 0.75s linear infinite spinner-border; +} +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} +@-webkit-keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +@keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: 0.75s linear infinite spinner-grow; + animation: 0.75s linear infinite spinner-grow; +} +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + -webkit-animation-duration: 1.5s; + animation-duration: 1.5s; + } +} +.offcanvas { + position: fixed; + bottom: 0; + z-index: 1045; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + max-width: 100%; + visibility: hidden; + background-color: #303030; + background-clip: padding-box; + outline: 0; + transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; + } +} +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.offcanvas-backdrop.fade { + opacity: 0; +} +.offcanvas-backdrop.show { + opacity: 0.5; +} +.offcanvas-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem 1rem; +} +.offcanvas-header .btn-close { + padding: 0.5rem 0.5rem; + margin-top: -0.5rem; + margin-right: -0.5rem; + margin-bottom: -0.5rem; +} +.offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} +.offcanvas-body { + -ms-flex-positive: 1; + flex-grow: 1; + padding: 1rem 1rem; + overflow-y: auto; +} +.offcanvas-start { + top: 0; + left: 0; + width: 400px; + border-right: 1px solid #444; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} +.offcanvas-end { + top: 0; + right: 0; + width: 400px; + border-left: 1px solid #444; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} +.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: 30vh; + max-height: 100%; + border-bottom: 1px solid #444; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); +} +.offcanvas-bottom { + right: 0; + left: 0; + height: 30vh; + max-height: 100%; + border-top: 1px solid #444; + -webkit-transform: translateY(100%); + transform: translateY(100%); +} +.offcanvas.show { + -webkit-transform: none; + transform: none; +} +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentColor; + opacity: 0.5; +} +.placeholder.btn::before { + display: inline-block; + content: ''; +} +.placeholder-xs { + min-height: 0.6em; +} +.placeholder-sm { + min-height: 0.8em; +} +.placeholder-lg { + min-height: 1.2em; +} +.placeholder-glow .placeholder { + -webkit-animation: placeholder-glow 2s ease-in-out infinite; + animation: placeholder-glow 2s ease-in-out infinite; +} +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.placeholder-wave { + -webkit-mask-image: linear-gradient( + 130deg, + #000 55%, + rgba(0, 0, 0, 0.8) 75%, + #000 95% + ); + mask-image: linear-gradient( + 130deg, + #000 55%, + rgba(0, 0, 0, 0.8) 75%, + #000 95% + ); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + -webkit-animation: placeholder-wave 2s linear infinite; + animation: placeholder-wave 2s linear infinite; +} +@-webkit-keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0; + mask-position: -200% 0; + } +} +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0; + mask-position: -200% 0; + } +} +.clearfix::after { + display: block; + clear: both; + content: ''; +} +.link-primary { + color: #375a7f; +} +.link-primary:focus, +.link-primary:hover { + color: #2c4866; +} +.link-secondary { + color: #444; +} +.link-secondary:focus, +.link-secondary:hover { + color: #363636; +} +.link-success { + color: #00bc8c; +} +.link-success:focus, +.link-success:hover { + color: #009670; +} +.link-info { + color: #3498db; +} +.link-info:focus, +.link-info:hover { + color: #2a7aaf; +} +.link-warning { + color: #f39c12; +} +.link-warning:focus, +.link-warning:hover { + color: #c27d0e; +} +.link-danger { + color: #e74c3c; +} +.link-danger:focus, +.link-danger:hover { + color: #b93d30; +} +.link-light { + color: #adb5bd; +} +.link-light:focus, +.link-light:hover { + color: #8a9197; +} +.link-dark { + color: #303030; +} +.link-dark:focus, +.link-dark:hover { + color: #262626; +} +.ratio { + position: relative; + width: 100%; +} +.ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ''; +} +.ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ratio-1x1 { + --bs-aspect-ratio: 100%; +} +.ratio-4x3 { + --bs-aspect-ratio: calc(3 / 4 * 100%); +} +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); +} +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); +} +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} +@media (min-width: 576px) { + .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +.hstack { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-align: center; + align-items: center; + -ms-flex-item-align: stretch; + align-self: stretch; +} +.vstack { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-item-align: stretch; + align-self: stretch; +} +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ''; +} +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.vr { + display: inline-block; + -ms-flex-item-align: stretch; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentColor; + opacity: 0.25; +} +.align-baseline { + vertical-align: baseline !important; +} +.align-top { + vertical-align: top !important; +} +.align-middle { + vertical-align: middle !important; +} +.align-bottom { + vertical-align: bottom !important; +} +.align-text-bottom { + vertical-align: text-bottom !important; +} +.align-text-top { + vertical-align: text-top !important; +} +.float-start { + float: left !important; +} +.float-end { + float: right !important; +} +.float-none { + float: none !important; +} +.opacity-0 { + opacity: 0 !important; +} +.opacity-25 { + opacity: 0.25 !important; +} +.opacity-50 { + opacity: 0.5 !important; +} +.opacity-75 { + opacity: 0.75 !important; +} +.opacity-100 { + opacity: 1 !important; +} +.overflow-auto { + overflow: auto !important; +} +.overflow-hidden { + overflow: hidden !important; +} +.overflow-visible { + overflow: visible !important; +} +.overflow-scroll { + overflow: scroll !important; +} +.d-inline { + display: inline !important; +} +.d-inline-block { + display: inline-block !important; +} +.d-block { + display: block !important; +} +.d-grid { + display: grid !important; +} +.d-table { + display: table !important; +} +.d-table-row { + display: table-row !important; +} +.d-table-cell { + display: table-cell !important; +} +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} +.d-none { + display: none !important; +} +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} +.shadow-none { + box-shadow: none !important; +} +.position-static { + position: static !important; +} +.position-relative { + position: relative !important; +} +.position-absolute { + position: absolute !important; +} +.position-fixed { + position: fixed !important; +} +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} +.top-0 { + top: 0 !important; +} +.top-50 { + top: 50% !important; +} +.top-100 { + top: 100% !important; +} +.bottom-0 { + bottom: 0 !important; +} +.bottom-50 { + bottom: 50% !important; +} +.bottom-100 { + bottom: 100% !important; +} +.start-0 { + left: 0 !important; +} +.start-50 { + left: 50% !important; +} +.start-100 { + left: 100% !important; +} +.end-0 { + right: 0 !important; +} +.end-50 { + right: 50% !important; +} +.end-100 { + right: 100% !important; +} +.translate-middle { + -webkit-transform: translate(-50%, -50%) !important; + transform: translate(-50%, -50%) !important; +} +.translate-middle-x { + -webkit-transform: translateX(-50%) !important; + transform: translateX(-50%) !important; +} +.translate-middle-y { + -webkit-transform: translateY(-50%) !important; + transform: translateY(-50%) !important; +} +.border { + border: 1px solid #dee2e6 !important; +} +.border-0 { + border: 0 !important; +} +.border-top { + border-top: 1px solid #dee2e6 !important; +} +.border-top-0 { + border-top: 0 !important; +} +.border-end { + border-right: 1px solid #dee2e6 !important; +} +.border-end-0 { + border-right: 0 !important; +} +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} +.border-bottom-0 { + border-bottom: 0 !important; +} +.border-start { + border-left: 1px solid #dee2e6 !important; +} +.border-start-0 { + border-left: 0 !important; +} +.border-primary { + border-color: #375a7f !important; +} +.border-secondary { + border-color: #444 !important; +} +.border-success { + border-color: #00bc8c !important; +} +.border-info { + border-color: #3498db !important; +} +.border-warning { + border-color: #f39c12 !important; +} +.border-danger { + border-color: #e74c3c !important; +} +.border-light { + border-color: #adb5bd !important; +} +.border-dark { + border-color: #303030 !important; +} +.border-white { + border-color: #fff !important; +} +.border-1 { + border-width: 1px !important; +} +.border-2 { + border-width: 2px !important; +} +.border-3 { + border-width: 3px !important; +} +.border-4 { + border-width: 4px !important; +} +.border-5 { + border-width: 5px !important; +} +.w-25 { + width: 25% !important; +} +.w-50 { + width: 50% !important; +} +.w-75 { + width: 75% !important; +} +.w-100 { + width: 100% !important; +} +.w-auto { + width: auto !important; +} +.mw-100 { + max-width: 100% !important; +} +.vw-100 { + width: 100vw !important; +} +.min-vw-100 { + min-width: 100vw !important; +} +.h-25 { + height: 25% !important; +} +.h-50 { + height: 50% !important; +} +.h-75 { + height: 75% !important; +} +.h-100 { + height: 100% !important; +} +.h-auto { + height: auto !important; +} +.mh-100 { + max-height: 100% !important; +} +.vh-100 { + height: 100vh !important; +} +.min-vh-100 { + min-height: 100vh !important; +} +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} +.gap-0 { + gap: 0 !important; +} +.gap-1 { + gap: 0.25rem !important; +} +.gap-2 { + gap: 0.5rem !important; +} +.gap-3 { + gap: 1rem !important; +} +.gap-4 { + gap: 1.5rem !important; +} +.gap-5 { + gap: 3rem !important; +} +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} +.justify-content-evenly { + -ms-flex-pack: space-evenly !important; + justify-content: space-evenly !important; +} +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} +.order-first { + -ms-flex-order: -1 !important; + order: -1 !important; +} +.order-0 { + -ms-flex-order: 0 !important; + order: 0 !important; +} +.order-1 { + -ms-flex-order: 1 !important; + order: 1 !important; +} +.order-2 { + -ms-flex-order: 2 !important; + order: 2 !important; +} +.order-3 { + -ms-flex-order: 3 !important; + order: 3 !important; +} +.order-4 { + -ms-flex-order: 4 !important; + order: 4 !important; +} +.order-5 { + -ms-flex-order: 5 !important; + order: 5 !important; +} +.order-last { + -ms-flex-order: 6 !important; + order: 6 !important; +} +.m-0 { + margin: 0 !important; +} +.m-1 { + margin: 0.25rem !important; +} +.m-2 { + margin: 0.5rem !important; +} +.m-3 { + margin: 1rem !important; +} +.m-4 { + margin: 1.5rem !important; +} +.m-5 { + margin: 3rem !important; +} +.m-auto { + margin: auto !important; +} +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} +.mt-0 { + margin-top: 0 !important; +} +.mt-1 { + margin-top: 0.25rem !important; +} +.mt-2 { + margin-top: 0.5rem !important; +} +.mt-3 { + margin-top: 1rem !important; +} +.mt-4 { + margin-top: 1.5rem !important; +} +.mt-5 { + margin-top: 3rem !important; +} +.mt-auto { + margin-top: auto !important; +} +.me-0 { + margin-right: 0 !important; +} +.me-1 { + margin-right: 0.25rem !important; +} +.me-2 { + margin-right: 0.5rem !important; +} +.me-3 { + margin-right: 1rem !important; +} +.me-4 { + margin-right: 1.5rem !important; +} +.me-5 { + margin-right: 3rem !important; +} +.me-auto { + margin-right: auto !important; +} +.mb-0 { + margin-bottom: 0 !important; +} +.mb-1 { + margin-bottom: 0.25rem !important; +} +.mb-2 { + margin-bottom: 0.5rem !important; +} +.mb-3 { + margin-bottom: 1rem !important; +} +.mb-4 { + margin-bottom: 1.5rem !important; +} +.mb-5 { + margin-bottom: 3rem !important; +} +.mb-auto { + margin-bottom: auto !important; +} +.ms-0 { + margin-left: 0 !important; +} +.ms-1 { + margin-left: 0.25rem !important; +} +.ms-2 { + margin-left: 0.5rem !important; +} +.ms-3 { + margin-left: 1rem !important; +} +.ms-4 { + margin-left: 1.5rem !important; +} +.ms-5 { + margin-left: 3rem !important; +} +.ms-auto { + margin-left: auto !important; +} +.p-0 { + padding: 0 !important; +} +.p-1 { + padding: 0.25rem !important; +} +.p-2 { + padding: 0.5rem !important; +} +.p-3 { + padding: 1rem !important; +} +.p-4 { + padding: 1.5rem !important; +} +.p-5 { + padding: 3rem !important; +} +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} +.pt-0 { + padding-top: 0 !important; +} +.pt-1 { + padding-top: 0.25rem !important; +} +.pt-2 { + padding-top: 0.5rem !important; +} +.pt-3 { + padding-top: 1rem !important; +} +.pt-4 { + padding-top: 1.5rem !important; +} +.pt-5 { + padding-top: 3rem !important; +} +.pe-0 { + padding-right: 0 !important; +} +.pe-1 { + padding-right: 0.25rem !important; +} +.pe-2 { + padding-right: 0.5rem !important; +} +.pe-3 { + padding-right: 1rem !important; +} +.pe-4 { + padding-right: 1.5rem !important; +} +.pe-5 { + padding-right: 3rem !important; +} +.pb-0 { + padding-bottom: 0 !important; +} +.pb-1 { + padding-bottom: 0.25rem !important; +} +.pb-2 { + padding-bottom: 0.5rem !important; +} +.pb-3 { + padding-bottom: 1rem !important; +} +.pb-4 { + padding-bottom: 1.5rem !important; +} +.pb-5 { + padding-bottom: 3rem !important; +} +.ps-0 { + padding-left: 0 !important; +} +.ps-1 { + padding-left: 0.25rem !important; +} +.ps-2 { + padding-left: 0.5rem !important; +} +.ps-3 { + padding-left: 1rem !important; +} +.ps-4 { + padding-left: 1.5rem !important; +} +.ps-5 { + padding-left: 3rem !important; +} +.font-monospace { + font-family: var(--bs-font-monospace) !important; +} +.fs-1 { + font-size: calc(1.425rem + 2.1vw) !important; +} +.fs-2 { + font-size: calc(1.375rem + 1.5vw) !important; +} +.fs-3 { + font-size: calc(1.325rem + 0.9vw) !important; +} +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} +.fs-5 { + font-size: 1.25rem !important; +} +.fs-6 { + font-size: 1rem !important; +} +.fst-italic { + font-style: italic !important; +} +.fst-normal { + font-style: normal !important; +} +.fw-light { + font-weight: 300 !important; +} +.fw-lighter { + font-weight: lighter !important; +} +.fw-normal { + font-weight: 400 !important; +} +.fw-bold { + font-weight: 700 !important; +} +.fw-bolder { + font-weight: bolder !important; +} +.lh-1 { + line-height: 1 !important; +} +.lh-sm { + line-height: 1.25 !important; +} +.lh-base { + line-height: 1.5 !important; +} +.lh-lg { + line-height: 2 !important; +} +.text-start { + text-align: left !important; +} +.text-end { + text-align: right !important; +} +.text-center { + text-align: center !important; +} +.text-decoration-none { + text-decoration: none !important; +} +.text-decoration-underline { + text-decoration: underline !important; +} +.text-decoration-line-through { + text-decoration: line-through !important; +} +.text-lowercase { + text-transform: lowercase !important; +} +.text-uppercase { + text-transform: uppercase !important; +} +.text-capitalize { + text-transform: capitalize !important; +} +.text-wrap { + white-space: normal !important; +} +.text-nowrap { + white-space: nowrap !important; +} +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; +} +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; +} +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; +} +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; +} +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; +} +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; +} +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; +} +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; +} +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; +} +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; +} +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; +} +.text-muted { + --bs-text-opacity: 1; + color: #888 !important; +} +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} +.text-opacity-25 { + --bs-text-opacity: 0.25; +} +.text-opacity-50 { + --bs-text-opacity: 0.5; +} +.text-opacity-75 { + --bs-text-opacity: 0.75; +} +.text-opacity-100 { + --bs-text-opacity: 1; +} +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba( + var(--bs-primary-rgb), + var(--bs-bg-opacity) + ) !important; +} +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba( + var(--bs-secondary-rgb), + var(--bs-bg-opacity) + ) !important; +} +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba( + var(--bs-success-rgb), + var(--bs-bg-opacity) + ) !important; +} +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; +} +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba( + var(--bs-warning-rgb), + var(--bs-bg-opacity) + ) !important; +} +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; +} +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; +} +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; +} +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; +} +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; +} +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba( + var(--bs-body-bg-rgb), + var(--bs-bg-opacity) + ) !important; +} +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; +} +.bg-opacity-10 { + --bs-bg-opacity: 0.1; +} +.bg-opacity-25 { + --bs-bg-opacity: 0.25; +} +.bg-opacity-50 { + --bs-bg-opacity: 0.5; +} +.bg-opacity-75 { + --bs-bg-opacity: 0.75; +} +.bg-opacity-100 { + --bs-bg-opacity: 1; +} +.bg-gradient { + background-image: var(--bs-gradient) !important; +} +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + -ms-user-select: auto !important; + user-select: auto !important; +} +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; +} +.pe-none { + pointer-events: none !important; +} +.pe-auto { + pointer-events: auto !important; +} +.rounded { + border-radius: 0.25rem !important; +} +.rounded-0 { + border-radius: 0 !important; +} +.rounded-1 { + border-radius: 0.2rem !important; +} +.rounded-2 { + border-radius: 0.25rem !important; +} +.rounded-3 { + border-radius: 0.3rem !important; +} +.rounded-circle { + border-radius: 50% !important; +} +.rounded-pill { + border-radius: 50rem !important; +} +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} +.rounded-end { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} +.rounded-start { + border-bottom-left-radius: 0.25rem !important; + border-top-left-radius: 0.25rem !important; +} +.visible { + visibility: visible !important; +} +.invisible { + visibility: hidden !important; +} +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + .float-sm-end { + float: right !important; + } + .float-sm-none { + float: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-grid { + display: grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .gap-sm-0 { + gap: 0 !important; + } + .gap-sm-1 { + gap: 0.25rem !important; + } + .gap-sm-2 { + gap: 0.5rem !important; + } + .gap-sm-3 { + gap: 1rem !important; + } + .gap-sm-4 { + gap: 1.5rem !important; + } + .gap-sm-5 { + gap: 3rem !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .justify-content-sm-evenly { + -ms-flex-pack: space-evenly !important; + justify-content: space-evenly !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + .order-sm-first { + -ms-flex-order: -1 !important; + order: -1 !important; + } + .order-sm-0 { + -ms-flex-order: 0 !important; + order: 0 !important; + } + .order-sm-1 { + -ms-flex-order: 1 !important; + order: 1 !important; + } + .order-sm-2 { + -ms-flex-order: 2 !important; + order: 2 !important; + } + .order-sm-3 { + -ms-flex-order: 3 !important; + order: 3 !important; + } + .order-sm-4 { + -ms-flex-order: 4 !important; + order: 4 !important; + } + .order-sm-5 { + -ms-flex-order: 5 !important; + order: 5 !important; + } + .order-sm-last { + -ms-flex-order: 6 !important; + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-right: 0 !important; + } + .me-sm-1 { + margin-right: 0.25rem !important; + } + .me-sm-2 { + margin-right: 0.5rem !important; + } + .me-sm-3 { + margin-right: 1rem !important; + } + .me-sm-4 { + margin-right: 1.5rem !important; + } + .me-sm-5 { + margin-right: 3rem !important; + } + .me-sm-auto { + margin-right: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-left: 0 !important; + } + .ms-sm-1 { + margin-left: 0.25rem !important; + } + .ms-sm-2 { + margin-left: 0.5rem !important; + } + .ms-sm-3 { + margin-left: 1rem !important; + } + .ms-sm-4 { + margin-left: 1.5rem !important; + } + .ms-sm-5 { + margin-left: 3rem !important; + } + .ms-sm-auto { + margin-left: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-right: 0 !important; + } + .pe-sm-1 { + padding-right: 0.25rem !important; + } + .pe-sm-2 { + padding-right: 0.5rem !important; + } + .pe-sm-3 { + padding-right: 1rem !important; + } + .pe-sm-4 { + padding-right: 1.5rem !important; + } + .pe-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-left: 0 !important; + } + .ps-sm-1 { + padding-left: 0.25rem !important; + } + .ps-sm-2 { + padding-left: 0.5rem !important; + } + .ps-sm-3 { + padding-left: 1rem !important; + } + .ps-sm-4 { + padding-left: 1.5rem !important; + } + .ps-sm-5 { + padding-left: 3rem !important; + } + .text-sm-start { + text-align: left !important; + } + .text-sm-end { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .float-md-start { + float: left !important; + } + .float-md-end { + float: right !important; + } + .float-md-none { + float: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-grid { + display: grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .gap-md-0 { + gap: 0 !important; + } + .gap-md-1 { + gap: 0.25rem !important; + } + .gap-md-2 { + gap: 0.5rem !important; + } + .gap-md-3 { + gap: 1rem !important; + } + .gap-md-4 { + gap: 1.5rem !important; + } + .gap-md-5 { + gap: 3rem !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .justify-content-md-evenly { + -ms-flex-pack: space-evenly !important; + justify-content: space-evenly !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + .order-md-first { + -ms-flex-order: -1 !important; + order: -1 !important; + } + .order-md-0 { + -ms-flex-order: 0 !important; + order: 0 !important; + } + .order-md-1 { + -ms-flex-order: 1 !important; + order: 1 !important; + } + .order-md-2 { + -ms-flex-order: 2 !important; + order: 2 !important; + } + .order-md-3 { + -ms-flex-order: 3 !important; + order: 3 !important; + } + .order-md-4 { + -ms-flex-order: 4 !important; + order: 4 !important; + } + .order-md-5 { + -ms-flex-order: 5 !important; + order: 5 !important; + } + .order-md-last { + -ms-flex-order: 6 !important; + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-right: 0 !important; + } + .me-md-1 { + margin-right: 0.25rem !important; + } + .me-md-2 { + margin-right: 0.5rem !important; + } + .me-md-3 { + margin-right: 1rem !important; + } + .me-md-4 { + margin-right: 1.5rem !important; + } + .me-md-5 { + margin-right: 3rem !important; + } + .me-md-auto { + margin-right: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-left: 0 !important; + } + .ms-md-1 { + margin-left: 0.25rem !important; + } + .ms-md-2 { + margin-left: 0.5rem !important; + } + .ms-md-3 { + margin-left: 1rem !important; + } + .ms-md-4 { + margin-left: 1.5rem !important; + } + .ms-md-5 { + margin-left: 3rem !important; + } + .ms-md-auto { + margin-left: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-right: 0 !important; + } + .pe-md-1 { + padding-right: 0.25rem !important; + } + .pe-md-2 { + padding-right: 0.5rem !important; + } + .pe-md-3 { + padding-right: 1rem !important; + } + .pe-md-4 { + padding-right: 1.5rem !important; + } + .pe-md-5 { + padding-right: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-left: 0 !important; + } + .ps-md-1 { + padding-left: 0.25rem !important; + } + .ps-md-2 { + padding-left: 0.5rem !important; + } + .ps-md-3 { + padding-left: 1rem !important; + } + .ps-md-4 { + padding-left: 1.5rem !important; + } + .ps-md-5 { + padding-left: 3rem !important; + } + .text-md-start { + text-align: left !important; + } + .text-md-end { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .float-lg-start { + float: left !important; + } + .float-lg-end { + float: right !important; + } + .float-lg-none { + float: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-grid { + display: grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .gap-lg-0 { + gap: 0 !important; + } + .gap-lg-1 { + gap: 0.25rem !important; + } + .gap-lg-2 { + gap: 0.5rem !important; + } + .gap-lg-3 { + gap: 1rem !important; + } + .gap-lg-4 { + gap: 1.5rem !important; + } + .gap-lg-5 { + gap: 3rem !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .justify-content-lg-evenly { + -ms-flex-pack: space-evenly !important; + justify-content: space-evenly !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + .order-lg-first { + -ms-flex-order: -1 !important; + order: -1 !important; + } + .order-lg-0 { + -ms-flex-order: 0 !important; + order: 0 !important; + } + .order-lg-1 { + -ms-flex-order: 1 !important; + order: 1 !important; + } + .order-lg-2 { + -ms-flex-order: 2 !important; + order: 2 !important; + } + .order-lg-3 { + -ms-flex-order: 3 !important; + order: 3 !important; + } + .order-lg-4 { + -ms-flex-order: 4 !important; + order: 4 !important; + } + .order-lg-5 { + -ms-flex-order: 5 !important; + order: 5 !important; + } + .order-lg-last { + -ms-flex-order: 6 !important; + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-right: 0 !important; + } + .me-lg-1 { + margin-right: 0.25rem !important; + } + .me-lg-2 { + margin-right: 0.5rem !important; + } + .me-lg-3 { + margin-right: 1rem !important; + } + .me-lg-4 { + margin-right: 1.5rem !important; + } + .me-lg-5 { + margin-right: 3rem !important; + } + .me-lg-auto { + margin-right: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-left: 0 !important; + } + .ms-lg-1 { + margin-left: 0.25rem !important; + } + .ms-lg-2 { + margin-left: 0.5rem !important; + } + .ms-lg-3 { + margin-left: 1rem !important; + } + .ms-lg-4 { + margin-left: 1.5rem !important; + } + .ms-lg-5 { + margin-left: 3rem !important; + } + .ms-lg-auto { + margin-left: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-right: 0 !important; + } + .pe-lg-1 { + padding-right: 0.25rem !important; + } + .pe-lg-2 { + padding-right: 0.5rem !important; + } + .pe-lg-3 { + padding-right: 1rem !important; + } + .pe-lg-4 { + padding-right: 1.5rem !important; + } + .pe-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-left: 0 !important; + } + .ps-lg-1 { + padding-left: 0.25rem !important; + } + .ps-lg-2 { + padding-left: 0.5rem !important; + } + .ps-lg-3 { + padding-left: 1rem !important; + } + .ps-lg-4 { + padding-left: 1.5rem !important; + } + .ps-lg-5 { + padding-left: 3rem !important; + } + .text-lg-start { + text-align: left !important; + } + .text-lg-end { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; + } + .float-xl-end { + float: right !important; + } + .float-xl-none { + float: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-grid { + display: grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .gap-xl-0 { + gap: 0 !important; + } + .gap-xl-1 { + gap: 0.25rem !important; + } + .gap-xl-2 { + gap: 0.5rem !important; + } + .gap-xl-3 { + gap: 1rem !important; + } + .gap-xl-4 { + gap: 1.5rem !important; + } + .gap-xl-5 { + gap: 3rem !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .justify-content-xl-evenly { + -ms-flex-pack: space-evenly !important; + justify-content: space-evenly !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + .order-xl-first { + -ms-flex-order: -1 !important; + order: -1 !important; + } + .order-xl-0 { + -ms-flex-order: 0 !important; + order: 0 !important; + } + .order-xl-1 { + -ms-flex-order: 1 !important; + order: 1 !important; + } + .order-xl-2 { + -ms-flex-order: 2 !important; + order: 2 !important; + } + .order-xl-3 { + -ms-flex-order: 3 !important; + order: 3 !important; + } + .order-xl-4 { + -ms-flex-order: 4 !important; + order: 4 !important; + } + .order-xl-5 { + -ms-flex-order: 5 !important; + order: 5 !important; + } + .order-xl-last { + -ms-flex-order: 6 !important; + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-right: 0 !important; + } + .me-xl-1 { + margin-right: 0.25rem !important; + } + .me-xl-2 { + margin-right: 0.5rem !important; + } + .me-xl-3 { + margin-right: 1rem !important; + } + .me-xl-4 { + margin-right: 1.5rem !important; + } + .me-xl-5 { + margin-right: 3rem !important; + } + .me-xl-auto { + margin-right: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-left: 0 !important; + } + .ms-xl-1 { + margin-left: 0.25rem !important; + } + .ms-xl-2 { + margin-left: 0.5rem !important; + } + .ms-xl-3 { + margin-left: 1rem !important; + } + .ms-xl-4 { + margin-left: 1.5rem !important; + } + .ms-xl-5 { + margin-left: 3rem !important; + } + .ms-xl-auto { + margin-left: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-right: 0 !important; + } + .pe-xl-1 { + padding-right: 0.25rem !important; + } + .pe-xl-2 { + padding-right: 0.5rem !important; + } + .pe-xl-3 { + padding-right: 1rem !important; + } + .pe-xl-4 { + padding-right: 1.5rem !important; + } + .pe-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-left: 0 !important; + } + .ps-xl-1 { + padding-left: 0.25rem !important; + } + .ps-xl-2 { + padding-left: 0.5rem !important; + } + .ps-xl-3 { + padding-left: 1rem !important; + } + .ps-xl-4 { + padding-left: 1.5rem !important; + } + .ps-xl-5 { + padding-left: 3rem !important; + } + .text-xl-start { + text-align: left !important; + } + .text-xl-end { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; + } + .float-xxl-end { + float: right !important; + } + .float-xxl-none { + float: none !important; + } + .d-xxl-inline { + display: inline !important; + } + .d-xxl-inline-block { + display: inline-block !important; + } + .d-xxl-block { + display: block !important; + } + .d-xxl-grid { + display: grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xxl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xxl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xxl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xxl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .gap-xxl-0 { + gap: 0 !important; + } + .gap-xxl-1 { + gap: 0.25rem !important; + } + .gap-xxl-2 { + gap: 0.5rem !important; + } + .gap-xxl-3 { + gap: 1rem !important; + } + .gap-xxl-4 { + gap: 1.5rem !important; + } + .gap-xxl-5 { + gap: 3rem !important; + } + .justify-content-xxl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xxl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xxl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xxl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xxl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + -ms-flex-pack: space-evenly !important; + justify-content: space-evenly !important; + } + .align-items-xxl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xxl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xxl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xxl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xxl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xxl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xxl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xxl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xxl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xxl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xxl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xxl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xxl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xxl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xxl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xxl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xxl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + .order-xxl-first { + -ms-flex-order: -1 !important; + order: -1 !important; + } + .order-xxl-0 { + -ms-flex-order: 0 !important; + order: 0 !important; + } + .order-xxl-1 { + -ms-flex-order: 1 !important; + order: 1 !important; + } + .order-xxl-2 { + -ms-flex-order: 2 !important; + order: 2 !important; + } + .order-xxl-3 { + -ms-flex-order: 3 !important; + order: 3 !important; + } + .order-xxl-4 { + -ms-flex-order: 4 !important; + order: 4 !important; + } + .order-xxl-5 { + -ms-flex-order: 5 !important; + order: 5 !important; + } + .order-xxl-last { + -ms-flex-order: 6 !important; + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-right: 0 !important; + } + .me-xxl-1 { + margin-right: 0.25rem !important; + } + .me-xxl-2 { + margin-right: 0.5rem !important; + } + .me-xxl-3 { + margin-right: 1rem !important; + } + .me-xxl-4 { + margin-right: 1.5rem !important; + } + .me-xxl-5 { + margin-right: 3rem !important; + } + .me-xxl-auto { + margin-right: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-left: 0 !important; + } + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .ms-xxl-3 { + margin-left: 1rem !important; + } + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .ms-xxl-5 { + margin-left: 3rem !important; + } + .ms-xxl-auto { + margin-left: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-right: 0 !important; + } + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .pe-xxl-3 { + padding-right: 1rem !important; + } + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .pe-xxl-5 { + padding-right: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-left: 0 !important; + } + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .ps-xxl-3 { + padding-left: 1rem !important; + } + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .ps-xxl-5 { + padding-left: 3rem !important; + } + .text-xxl-start { + text-align: left !important; + } + .text-xxl-end { + text-align: right !important; + } + .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .fs-1 { + font-size: 3rem !important; + } + .fs-2 { + font-size: 2.5rem !important; + } + .fs-3 { + font-size: 2rem !important; + } + .fs-4 { + font-size: 1.5rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} +.blockquote-footer { + color: #888; +} +.input-group-addon { + color: #fff; +} +.form-floating > label { + color: #444; +} +.nav-pills .nav-item.open .nav-link, +.nav-pills .nav-item.open .nav-link:focus, +.nav-pills .nav-item.open .nav-link:hover, +.nav-pills .nav-link, +.nav-pills .nav-link.active, +.nav-pills .nav-link.active:focus, +.nav-pills .nav-link.active:hover, +.nav-tabs .nav-item.open .nav-link, +.nav-tabs .nav-item.open .nav-link:focus, +.nav-tabs .nav-item.open .nav-link:hover, +.nav-tabs .nav-link, +.nav-tabs .nav-link.active, +.nav-tabs .nav-link.active:focus, +.nav-tabs .nav-link.active:hover { + color: #fff; +} +.breadcrumb a { + color: #fff; +} +.pagination a:hover { + text-decoration: none; +} +.alert { + border: none; + color: #fff; +} +.alert .alert-link, +.alert a { + color: #fff; + text-decoration: underline; +} +.alert-primary { + background-color: #375a7f; +} +.alert-secondary { + background-color: #444; +} +.alert-success { + background-color: #00bc8c; +} +.alert-info { + background-color: #3498db; +} +.alert-warning { + background-color: #f39c12; +} +.alert-danger { + background-color: #e74c3c; +} +.alert-light { + background-color: #adb5bd; +} +.alert-dark { + background-color: #303030; +} diff --git a/data/htdocs/www/css/errorpages.css b/data/htdocs/www/css/errorpages.css new file mode 100644 index 0000000..5645b88 --- /dev/null +++ b/data/htdocs/www/css/errorpages.css @@ -0,0 +1,342 @@ +@import url( + https://fonts.googleapis.com/css?family=Lato:300italic, + 700italic, + 300, + 700 +); + +body { + padding: 50px; + font: 14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #777; + font-weight: 300; + padding: 1.5em 0; +} + +/* Layout */ +.jumbotron { + line-height: 2.1428571435; + color: inherit; + padding: 10px 0px; +} + +/* Main marketing message and sign up button */ +.jumbotron { + text-align: center; + background-color: transparent; +} + +.jumbotron .btn { + font-size: 21px; + padding: 1.5em 2em; +} + +/* Everything but the jumbotron gets side spacing for mobile-first views */ +.masthead, +.body-content { + padding: 0 15px; +} + +/* Colors */ +.green { + color: green; +} + +.orange { + color: orange; +} + +.red { + color: red; +} + +.blue { + color: blue; +} + +.yellow { + color: yellow; +} + +h2, +h3, +h4, +h5, +h6 { + color: #222; + margin: 0 0 40px; +} + +p, +ul, +ol, +table, +pre, +dl { + margin: 0 0 20px; +} + +h2, +h3 { + line-height: 1.1; +} + +h1 { + line-height: 1.1; + text-align: center; + font: Lato; + font-size: 80px; + color: #222; + margin: 0 0 40px; +} + +h2 { + color: #393939; +} + +h3, +h4, +h5, +h6 { + color: #494949; +} + +a { + color: #39c; + font-weight: 400; + text-decoration: none; +} + +a small { + font-size: 11px; + color: #777; + margin-top: -0.6em; + display: block; +} + +.wrapper { + width: 860px; + margin: 0 auto; +} + +blockquote { + border-left: 1px solid #e5e5e5; + margin: 0; + padding: 0 0 0 20px; + font-style: italic; +} + +.btn-block { + width: 40%; + text-align: center; + display: block; + margin: 0 auto; +} + +code, +pre { + font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + color: #333; + font-size: 12px; +} + +pre { + padding: 8px 15px; + background: #f8f8f8; + border-radius: 5px; + border: 1px solid #e5e5e5; + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; +} + +th, +td { + text-align: left; + padding: 5px 10px; + border-bottom: 1px solid #e5e5e5; +} + +dt { + color: #444; + font-weight: 700; +} + +th { + color: #444; +} + +img { + max-width: 100%; +} + +header { + width: 270px; + float: left; + position: fixed; +} + +header ul { + list-style: none; + height: 40px; + + padding: 0; + + background: #eee; + background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0%, #f8f8f8), + color-stop(100%, #dddddd) + ); + background: -webkit-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -o-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -ms-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + + border-radius: 5px; + border: 1px solid #d2d2d2; + box-shadow: inset #fff 0 1px 0, inset rgba(0, 0, 0, 0.03) 0 -1px 0; + width: 270px; +} + +header li { + width: 89px; + float: left; + border-right: 1px solid #d2d2d2; + height: 40px; +} + +header ul a { + line-height: 1; + font-size: 11px; + color: #999; + display: block; + text-align: center; + padding-top: 6px; + height: 40px; +} + +strong { + color: #222; + font-weight: 700; +} + +header ul li + li { + width: 88px; + border-left: 1px solid #fff; +} + +header ul li + li + li { + border-right: none; + width: 89px; +} + +header ul a strong { + font-size: 14px; + display: block; + color: #222; +} + +section { + width: 500px; + float: right; + padding-bottom: 50px; +} + +small { + font-size: 11px; +} + +hr { + border: 0; + background: #e5e5e5; + height: 1px; + margin: 0 0 20px; +} + +footer { + width: 270px; + float: left; + position: fixed; + bottom: 50px; +} + +@media print, screen and (max-width: 960px) { + div.wrapper { + width: auto; + margin: 0; + } + + header, + section, + footer { + float: none; + position: static; + width: auto; + } + + header { + padding-right: 320px; + } + + section { + border: 1px solid #e5e5e5; + border-width: 1px 0; + padding: 20px 0; + margin: 0 0 20px; + } + + header a small { + display: inline; + } + + header ul { + position: absolute; + right: 50px; + top: 52px; + } +} + +@media print, screen and (max-width: 720px) { + body { + word-wrap: break-word; + } + + header { + padding: 0; + } + + header ul, + header p.view { + position: static; + } + + pre, + code { + word-wrap: normal; + } +} + +@media print, screen and (max-width: 480px) { + body { + padding: 15px; + } + + header ul { + display: none; + } +} + +@media print { + body { + padding: 0.4in; + font-size: 12pt; + color: #444; + } +} diff --git a/data/htdocs/www/css/index.css b/data/htdocs/www/css/index.css new file mode 100644 index 0000000..647284d --- /dev/null +++ b/data/htdocs/www/css/index.css @@ -0,0 +1,79 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700); +@import url(./bootstrap.min.css); + +body { + color: purple; + background-image: url('../images/bg.png'); +} + +th { + background-color: #333; + color: #ffffff; + border-top: 1px solid #678ca0; + vertical-align: middle; + height: 50px; +} + +td { + background-color: 333; + border-top: 1px solid #678ca0; +} + +.box { + border: 1px solid #678ca0; + padding: 0px; + width: 100%; + background-color: #333; + margin-bottom: 10px; + width: 600px; +} + +.spacer { + margin: 0px; + width: 100%; + background-color: #333; +} + +.leftspacer { + margin: 0px; + padding: 5px; + width: 100%; + text-align: left; + background-color: #333; +} + +.serviceup { + color: green; +} + +.servicedown { + color: red; +} + +a { + text-decoration: none; + color: #5d83a9; +} + +p.main { + margin-top: 5px; + margin-bottom: 5px; + text-align: center; + font-size: 10px; +} + +a:visited { + color: #c39; +} + +a:hover { + color: #f00; +} + +a:active { + color: #c0f; +} + +tr:hover { + background-color: #f5f5f5; +} diff --git a/data/htdocs/www/images/403.png b/data/htdocs/www/images/403.png new file mode 100644 index 0000000000000000000000000000000000000000..29356971dc861408a6b8aca3ed3785ba68a0b3d6 GIT binary patch literal 35464 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 P{Bf{#)SR$(U-$n2VJms6 literal 0 HcmV?d00001 diff --git a/data/htdocs/www/images/404.gif b/data/htdocs/www/images/404.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad19c4e10585e734c755882f781a52edd02f5c95 GIT binary patch literal 95633 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ξLYw-0 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%0D;ZN=92JzvmJ?+e;AY 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 literal 0 HcmV?d00001 diff --git a/data/htdocs/www/images/favicon.ico b/data/htdocs/www/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be74abd69ad6a32de7375df13cab9354798e328f GIT binary patch literal 766 zcmc(dze~eV5XUd2fg&jH87YDYDQKxq1{4b-_ydP-wqS9vgGh17QXQQAwOE{VaBvi* zmu^z9t({y-&1ey8Y_x;?x+`BviV9;aRjMgZ8M*!jgkRrFqSI9;F zHyfX@Az|AvVmn~YWWZP`0&JWEY~BFm?*Vq}VD7&_%x%MP$p`D`4JMC!K|B7pt?Mmp zUJAB7rxMXS6=!P+AtLU9V)J#61WPxwipRXCHO{BJ`l{m53#=t97a!znv~vfmr|AaP zRGIT7#0FyJy3Z*hL{GQp-0TRhX8UzZ)+>%?mK0^goaX4Q;xkoG_P!lF_+$k;;moo~MP{oen-d(OT0oZo$ZzjM$1-E*GjiAI^|v4I7_3=9lx2Kq=d`u^#E zCkQ}aCz}pY3=AC44Uk%QpD?bZhX)E73`U%~7cQl85yvVXk(g;IUxeEq-gAn`O#OGr z&lO(^T_yYT*6U?-xaqF>yQNy04owaZTcEWi85lr72tIo@UX7J#rUIBw~lJs={CYso;p)qnluna#RzIviF z@XZ9aXw3jLGsYiRA9QXSBQ0g8nvapf3GwJckKb+73+ey{f{A?pDZc1rRRp8J`eE{{ z12JxDMe;-X+2{~b8vxQ@V~^p|pRo&j-hK3?0HH28U;1{w2ngwys?NrTti=FA`$T!T zWQv0~2?Ezt()hh=Kb*P7^9=EYtP-u>vPa~wP}kMQgxcDviA`8}&)>U$C)PUNAT?UbMk-poy=~^hjqHKnI3X=cZp-P;XD9*pla$REW99w&It*Gp-~k}4%869y z&75l9QBIC77(y%a7F0CpRI&mOI)cS|2G^(9c}R(dLg1mseUuF!Fip+R_aKwl4%%uj zlX2n}oG-heo>Vvj?eAXyA{Zm*=ok=ZaL!#;5M1SRAVx>y)(5UJAJiEcBVWyKd1#y?aD-LnG zMC`33$8jx0dMU7WPc|M#u(wXi0@GOU?K}P^?X3|lR7|v=Vg^wZDpj2x*3|TGKydpR zU&=<7K9K64`B2||j*v}!6l4rM7?yl-rb=#F2`gn$il9VYQWGV$TuoDx$aZ)EpYE|T5oqmIZ63g_SCfJl zigFx_JCR8xHRqU%GC!Uph;`N2VafmeCiuy_~JBx;+d|yA`?-``$ zhxc*=UqF&=VcN!=!6Mvdc`vdMB}S@H6mb6}R5=v^$0bKcrSg|eD>sgOqy1k2yyl%& zUe>(103E_Fj1uq#@8g4s41<|rHi>NOHhSwSA7`dOQP{oc`Xw0Pc*N+%8U68yES-U; zZD2x$?}_*Qlbf#CvoPL?P#r>%tuqvbd{Uvle~>rZ)hFUM?dw5rky$kpLCpTdLll3^ zXZr$pIZO43yL03_r_{_`U&f3_di1vvm2=Dq5u%(@TMZvOn#L}zr;nyajZs%_#BoTb z{)KobkGI6J!cuc{b+j>#?I?=FV`jjuhNE%wA1jIRvPo>r3A$G~rM`w>C!7g58si{? zLQ8)ZXH9z;0)LdYVFei{_T?E!?Y#W{_?@Q?CH@sWk+`(*B>21SVO;MNlO-4sPAqHs zqy^eyDN`i1?}%)k<>Cj?FX!;lSi5Ohfw!PKR1^^YQsn-LFe0R<_2FS$%ELqUkH_)w z3xM!w@1`%GS+_XWq>V_Z?`qzA;z{m-5L9hvCet0g_B=k0x`a{VGG#ftNCb50q?<5t z33^P3jw0V1Yb^JnB^W$+Iv<9Zer(Qsr5}&WRqX3w0VTzegy62fX72hEiI(=sa26q= z)wefEn@1-cNoK+T!UpR>VX$V%IZ*T9T{ne`3EmK=1ULUlS=CxZ3jZ6J2X(B__#H}u zR%riaMEc0t8(8%S(rt8m2$$>%ydzm(N4`JVyEXDAgp`_p2h!NOPYAuf^)Yh_+mH@7`kD{Hn!h2huDs=X zG~T&{anJTiR^{xs*_pZ^Bw5JQaHvkMSh`%)x#y2KN~lGxhZQ066kuiDyDczU=) z&fBobH^_VT$}MzY+-cvejN{j`=Bom;LC^dg61vtWGqz?bUbO0IUbMfUiov zhNP$Hm~$v4zeNX~gU3bVpP1hFP!##}?w8}veUZnmEhf$_RwyTh&?jk`lS)iod{%nN zCDwMY1g2L=AyvH$;l_|j)f4ZjHa``o@d{p7hmQ_{n8C-vuwZ0&mb`0^NU32E-B>SILeRoh9rqKOJZQ{fy^efaIdh8pI0Ccek}X1~4_dfdSAXl^`xW&0 zRLQiIbI$6*qCn{BZ;QMRp;mu3iCD9aa7zZ)4Drx)Q5(XR-wyg>Pj|((eyp6WbVgF$ z=f4MUa-G+&y!!%YktS=44wUQ180A0xVH0AVf?cT3u_f>9t`$|XiE4P}Ev?YOBuK&q@s$TeB3c?&tYER|*Y-)x?(ci?lb^UT`!w*o<%7=&3B4=_t_f z)U}wHZp`VGeJN}EitL8{%XAY#(Z8E_{F}+bnAB$YR`Gsj@|E#tT`IzpYT1_L9eCzT z+iJ^DdaFItX#@mUk>O!+%@FPACreI`7sOT6VT)x$MROOPuQ|SVL*7@#L{NrI|LXLF z1ED|(BYOfO9CjOjWdPk!xbW(usP75SZf1!e$u zS5lD(B2ID&qstc|OmUOAcxZh}V%`mU4=KyXLhdlw!tV<6* z!{({uC}VTS)PvsluA)2QJxqiYg9I5Uw?1unxjts~B&sILmy54e?>c9C*p0nT$JI4FWg+m7gHWD^F3*qM$hS1!6qWsQ6%huv8 zqayPU6s0#dn9h1fzuMO#EGT8y+m#?RTDO%#2U-UL=jlH^$pRN5HoiS)w;sB@IGf#2 z#ZEZ7$jC=^nM*y>UE+BGJk;cO7O>w|W5-s5@b*+-(K_K=ae?I+rj7d-MqL-{cMpB8K z3%N%-Mg;hNFnbRM_p3Ua(Nb2hVjc`*CKg3fhd zK0taD|LFDphqeZHlgbJLoj&Oj{xOlIwJB_cCJP2V8-W^Qg`xFT@lrNhDZn$Tbf)ck~d=i9dg z%e8`DpHvS-%kx_fo<6%YroouuIX2L*)NSzLht1l4SnMnf$z^)`tYwIZ#5+B#RZXuT z7$zh^N0=V#BToN#l4CAT$OpSz8(Vt6vNu(|{=wXs>Bqg6mR7g6aKzMJV`8k`F_B}q zSSYfdE6_?(0C>48wb@fBuYT>b;nG&DIkk0_ey>j<5hmC3OGww&bQiLQ{bc%@kGV7d z&|pHlZxX!hYS{@l|7@t=4p}RiuUaH5H7NxD!nV|KG|U?jA82`&_Bmv6FB zr8HvTl(3*bmo#xpQz>&EWjeIWt|BIi%!CZ5Du?ArFJBd}4D`+lMfAvSGk;B^DcCeW z*N6s~OA`TMK}MnLeuvWm(3I0d%w|{+rBQ6JZ)(pNqE=|*R>1#wcU1^{7w&%nAmUKp z*0RsNE$jO0#B8SvDk$sL^!@PUxKDVZWFVd{&U@r7ue3u!x%(Ub@0{0{kNwJ3m&~t@ zhK$v$xyvmjVJGQ7zl4#X`&tTEjUJ)DPuAre+obOLcP{GUp1WRf6<&SO00boVGwx{} z$C6~jZvWsSU$33wN`3ih6q%X8-Y?!AYXag}(!?_Mdxv(fwVLIDfr4SO4?DuE;Vc18 zV4;LrlF2rm%SWoA{ny?n6h=44=3@RL8=AWe2#QR08P}QUKu(pZEZZQ?u3B>J{Q;MX zh#gLS_au{=AR5bd6qga)JjV=w9`KY}fWNy~Ka0YWymJO{=Yn>mfg2I&fpZ=h9EvF5 zt9qEEYa-1=kf6Hwy8c diff --git a/data/htdocs/www/index.html b/data/htdocs/www/index.html new file mode 100644 index 0000000..b9b2495 --- /dev/null +++ b/data/htdocs/www/index.html @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Welcome + + + +
+

Congratulations

+

+ Your apache container has been setup.




+

+
+ + diff --git a/data/htdocs/www/js/app.js b/data/htdocs/www/js/app.js new file mode 100644 index 0000000..e69de29 diff --git a/data/htdocs/www/js/bootstrap.min.js b/data/htdocs/www/js/bootstrap.min.js new file mode 100644 index 0000000..641156c --- /dev/null +++ b/data/htdocs/www/js/bootstrap.min.js @@ -0,0 +1,4075 @@ +/*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!(function (t, e) { + 'object' == typeof exports && 'undefined' != typeof module + ? (module.exports = e()) + : 'function' == typeof define && define.amd + ? define(e) + : ((t = + 'undefined' != typeof globalThis ? globalThis : t || self).bootstrap = + e()); +})(this, function () { + 'use strict'; + const t = 'transitionend', + e = (t) => { + let e = t.getAttribute('data-bs-target'); + if (!e || '#' === e) { + let i = t.getAttribute('href'); + if (!i || (!i.includes('#') && !i.startsWith('.'))) return null; + i.includes('#') && !i.startsWith('#') && (i = `#${i.split('#')[1]}`), + (e = i && '#' !== i ? i.trim() : null); + } + return e; + }, + i = (t) => { + const i = e(t); + return i && document.querySelector(i) ? i : null; + }, + n = (t) => { + const i = e(t); + return i ? document.querySelector(i) : null; + }, + s = (e) => { + e.dispatchEvent(new Event(t)); + }, + o = (t) => + !(!t || 'object' != typeof t) && + (void 0 !== t.jquery && (t = t[0]), void 0 !== t.nodeType), + r = (t) => + o(t) + ? t.jquery + ? t[0] + : t + : 'string' == typeof t && t.length > 0 + ? document.querySelector(t) + : null, + a = (t, e, i) => { + Object.keys(i).forEach((n) => { + const s = i[n], + r = e[n], + a = + r && o(r) + ? 'element' + : null == (l = r) + ? `${l}` + : {}.toString + .call(l) + .match(/\s([a-z]+)/i)[1] + .toLowerCase(); + var l; + if (!new RegExp(s).test(a)) + throw new TypeError( + `${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".` + ); + }); + }, + l = (t) => + !(!o(t) || 0 === t.getClientRects().length) && + 'visible' === getComputedStyle(t).getPropertyValue('visibility'), + c = (t) => + !t || + t.nodeType !== Node.ELEMENT_NODE || + !!t.classList.contains('disabled') || + (void 0 !== t.disabled + ? t.disabled + : t.hasAttribute('disabled') && 'false' !== t.getAttribute('disabled')), + h = (t) => { + if (!document.documentElement.attachShadow) return null; + if ('function' == typeof t.getRootNode) { + const e = t.getRootNode(); + return e instanceof ShadowRoot ? e : null; + } + return t instanceof ShadowRoot + ? t + : t.parentNode + ? h(t.parentNode) + : null; + }, + d = () => {}, + u = (t) => { + t.offsetHeight; + }, + f = () => { + const { jQuery: t } = window; + return t && !document.body.hasAttribute('data-bs-no-jquery') ? t : null; + }, + p = [], + m = () => 'rtl' === document.documentElement.dir, + g = (t) => { + var e; + (e = () => { + const e = f(); + if (e) { + const i = t.NAME, + n = e.fn[i]; + (e.fn[i] = t.jQueryInterface), + (e.fn[i].Constructor = t), + (e.fn[i].noConflict = () => ((e.fn[i] = n), t.jQueryInterface)); + } + }), + 'loading' === document.readyState + ? (p.length || + document.addEventListener('DOMContentLoaded', () => { + p.forEach((t) => t()); + }), + p.push(e)) + : e(); + }, + _ = (t) => { + 'function' == typeof t && t(); + }, + b = (e, i, n = !0) => { + if (!n) return void _(e); + const o = + ((t) => { + if (!t) return 0; + let { transitionDuration: e, transitionDelay: i } = + window.getComputedStyle(t); + const n = Number.parseFloat(e), + s = Number.parseFloat(i); + return n || s + ? ((e = e.split(',')[0]), + (i = i.split(',')[0]), + 1e3 * (Number.parseFloat(e) + Number.parseFloat(i))) + : 0; + })(i) + 5; + let r = !1; + const a = ({ target: n }) => { + n === i && ((r = !0), i.removeEventListener(t, a), _(e)); + }; + i.addEventListener(t, a), + setTimeout(() => { + r || s(i); + }, o); + }, + v = (t, e, i, n) => { + let s = t.indexOf(e); + if (-1 === s) return t[!i && n ? t.length - 1 : 0]; + const o = t.length; + return ( + (s += i ? 1 : -1), + n && (s = (s + o) % o), + t[Math.max(0, Math.min(s, o - 1))] + ); + }, + y = /[^.]*(?=\..*)\.|.*/, + w = /\..*/, + E = /::\d+$/, + A = {}; + let T = 1; + const O = { mouseenter: 'mouseover', mouseleave: 'mouseout' }, + C = /^(mouseenter|mouseleave)/i, + k = new Set([ + 'click', + 'dblclick', + 'mouseup', + 'mousedown', + 'contextmenu', + 'mousewheel', + 'DOMMouseScroll', + 'mouseover', + 'mouseout', + 'mousemove', + 'selectstart', + 'selectend', + 'keydown', + 'keypress', + 'keyup', + 'orientationchange', + 'touchstart', + 'touchmove', + 'touchend', + 'touchcancel', + 'pointerdown', + 'pointermove', + 'pointerup', + 'pointerleave', + 'pointercancel', + 'gesturestart', + 'gesturechange', + 'gestureend', + 'focus', + 'blur', + 'change', + 'reset', + 'select', + 'submit', + 'focusin', + 'focusout', + 'load', + 'unload', + 'beforeunload', + 'resize', + 'move', + 'DOMContentLoaded', + 'readystatechange', + 'error', + 'abort', + 'scroll', + ]); + function L(t, e) { + return (e && `${e}::${T++}`) || t.uidEvent || T++; + } + function x(t) { + const e = L(t); + return (t.uidEvent = e), (A[e] = A[e] || {}), A[e]; + } + function D(t, e, i = null) { + const n = Object.keys(t); + for (let s = 0, o = n.length; s < o; s++) { + const o = t[n[s]]; + if (o.originalHandler === e && o.delegationSelector === i) return o; + } + return null; + } + function S(t, e, i) { + const n = 'string' == typeof e, + s = n ? i : e; + let o = P(t); + return k.has(o) || (o = t), [n, s, o]; + } + function N(t, e, i, n, s) { + if ('string' != typeof e || !t) return; + if ((i || ((i = n), (n = null)), C.test(e))) { + const t = (t) => + function (e) { + if ( + !e.relatedTarget || + (e.relatedTarget !== e.delegateTarget && + !e.delegateTarget.contains(e.relatedTarget)) + ) + return t.call(this, e); + }; + n ? (n = t(n)) : (i = t(i)); + } + const [o, r, a] = S(e, i, n), + l = x(t), + c = l[a] || (l[a] = {}), + h = D(c, r, o ? i : null); + if (h) return void (h.oneOff = h.oneOff && s); + const d = L(r, e.replace(y, '')), + u = o + ? (function (t, e, i) { + return function n(s) { + const o = t.querySelectorAll(e); + for (let { target: r } = s; r && r !== this; r = r.parentNode) + for (let a = o.length; a--; ) + if (o[a] === r) + return ( + (s.delegateTarget = r), + n.oneOff && j.off(t, s.type, e, i), + i.apply(r, [s]) + ); + return null; + }; + })(t, i, n) + : (function (t, e) { + return function i(n) { + return ( + (n.delegateTarget = t), + i.oneOff && j.off(t, n.type, e), + e.apply(t, [n]) + ); + }; + })(t, i); + (u.delegationSelector = o ? i : null), + (u.originalHandler = r), + (u.oneOff = s), + (u.uidEvent = d), + (c[d] = u), + t.addEventListener(a, u, o); + } + function I(t, e, i, n, s) { + const o = D(e[i], n, s); + o && (t.removeEventListener(i, o, Boolean(s)), delete e[i][o.uidEvent]); + } + function P(t) { + return (t = t.replace(w, '')), O[t] || t; + } + const j = { + on(t, e, i, n) { + N(t, e, i, n, !1); + }, + one(t, e, i, n) { + N(t, e, i, n, !0); + }, + off(t, e, i, n) { + if ('string' != typeof e || !t) return; + const [s, o, r] = S(e, i, n), + a = r !== e, + l = x(t), + c = e.startsWith('.'); + if (void 0 !== o) { + if (!l || !l[r]) return; + return void I(t, l, r, o, s ? i : null); + } + c && + Object.keys(l).forEach((i) => { + !(function (t, e, i, n) { + const s = e[i] || {}; + Object.keys(s).forEach((o) => { + if (o.includes(n)) { + const n = s[o]; + I(t, e, i, n.originalHandler, n.delegationSelector); + } + }); + })(t, l, i, e.slice(1)); + }); + const h = l[r] || {}; + Object.keys(h).forEach((i) => { + const n = i.replace(E, ''); + if (!a || e.includes(n)) { + const e = h[i]; + I(t, l, r, e.originalHandler, e.delegationSelector); + } + }); + }, + trigger(t, e, i) { + if ('string' != typeof e || !t) return null; + const n = f(), + s = P(e), + o = e !== s, + r = k.has(s); + let a, + l = !0, + c = !0, + h = !1, + d = null; + return ( + o && + n && + ((a = n.Event(e, i)), + n(t).trigger(a), + (l = !a.isPropagationStopped()), + (c = !a.isImmediatePropagationStopped()), + (h = a.isDefaultPrevented())), + r + ? ((d = document.createEvent('HTMLEvents')), d.initEvent(s, l, !0)) + : (d = new CustomEvent(e, { bubbles: l, cancelable: !0 })), + void 0 !== i && + Object.keys(i).forEach((t) => { + Object.defineProperty(d, t, { get: () => i[t] }); + }), + h && d.preventDefault(), + c && t.dispatchEvent(d), + d.defaultPrevented && void 0 !== a && a.preventDefault(), + d + ); + }, + }, + M = new Map(), + H = { + set(t, e, i) { + M.has(t) || M.set(t, new Map()); + const n = M.get(t); + n.has(e) || 0 === n.size + ? n.set(e, i) + : console.error( + `Bootstrap doesn't allow more than one instance per element. Bound instance: ${ + Array.from(n.keys())[0] + }.` + ); + }, + get: (t, e) => (M.has(t) && M.get(t).get(e)) || null, + remove(t, e) { + if (!M.has(t)) return; + const i = M.get(t); + i.delete(e), 0 === i.size && M.delete(t); + }, + }; + class B { + constructor(t) { + (t = r(t)) && + ((this._element = t), + H.set(this._element, this.constructor.DATA_KEY, this)); + } + dispose() { + H.remove(this._element, this.constructor.DATA_KEY), + j.off(this._element, this.constructor.EVENT_KEY), + Object.getOwnPropertyNames(this).forEach((t) => { + this[t] = null; + }); + } + _queueCallback(t, e, i = !0) { + b(t, e, i); + } + static getInstance(t) { + return H.get(r(t), this.DATA_KEY); + } + static getOrCreateInstance(t, e = {}) { + return ( + this.getInstance(t) || new this(t, 'object' == typeof e ? e : null) + ); + } + static get VERSION() { + return '5.1.3'; + } + static get NAME() { + throw new Error( + 'You have to implement the static method "NAME", for each component!' + ); + } + static get DATA_KEY() { + return `bs.${this.NAME}`; + } + static get EVENT_KEY() { + return `.${this.DATA_KEY}`; + } + } + const R = (t, e = 'hide') => { + const i = `click.dismiss${t.EVENT_KEY}`, + s = t.NAME; + j.on(document, i, `[data-bs-dismiss="${s}"]`, function (i) { + if ((['A', 'AREA'].includes(this.tagName) && i.preventDefault(), c(this))) + return; + const o = n(this) || this.closest(`.${s}`); + t.getOrCreateInstance(o)[e](); + }); + }; + class W extends B { + static get NAME() { + return 'alert'; + } + close() { + if (j.trigger(this._element, 'close.bs.alert').defaultPrevented) return; + this._element.classList.remove('show'); + const t = this._element.classList.contains('fade'); + this._queueCallback(() => this._destroyElement(), this._element, t); + } + _destroyElement() { + this._element.remove(), + j.trigger(this._element, 'closed.bs.alert'), + this.dispose(); + } + static jQueryInterface(t) { + return this.each(function () { + const e = W.getOrCreateInstance(this); + if ('string' == typeof t) { + if (void 0 === e[t] || t.startsWith('_') || 'constructor' === t) + throw new TypeError(`No method named "${t}"`); + e[t](this); + } + }); + } + } + R(W, 'close'), g(W); + const $ = '[data-bs-toggle="button"]'; + class z extends B { + static get NAME() { + return 'button'; + } + toggle() { + this._element.setAttribute( + 'aria-pressed', + this._element.classList.toggle('active') + ); + } + static jQueryInterface(t) { + return this.each(function () { + const e = z.getOrCreateInstance(this); + 'toggle' === t && e[t](); + }); + } + } + function q(t) { + return ( + 'true' === t || + ('false' !== t && + (t === Number(t).toString() + ? Number(t) + : '' === t || 'null' === t + ? null + : t)) + ); + } + function F(t) { + return t.replace(/[A-Z]/g, (t) => `-${t.toLowerCase()}`); + } + j.on(document, 'click.bs.button.data-api', $, (t) => { + t.preventDefault(); + const e = t.target.closest($); + z.getOrCreateInstance(e).toggle(); + }), + g(z); + const U = { + setDataAttribute(t, e, i) { + t.setAttribute(`data-bs-${F(e)}`, i); + }, + removeDataAttribute(t, e) { + t.removeAttribute(`data-bs-${F(e)}`); + }, + getDataAttributes(t) { + if (!t) return {}; + const e = {}; + return ( + Object.keys(t.dataset) + .filter((t) => t.startsWith('bs')) + .forEach((i) => { + let n = i.replace(/^bs/, ''); + (n = n.charAt(0).toLowerCase() + n.slice(1, n.length)), + (e[n] = q(t.dataset[i])); + }), + e + ); + }, + getDataAttribute: (t, e) => q(t.getAttribute(`data-bs-${F(e)}`)), + offset(t) { + const e = t.getBoundingClientRect(); + return { + top: e.top + window.pageYOffset, + left: e.left + window.pageXOffset, + }; + }, + position: (t) => ({ top: t.offsetTop, left: t.offsetLeft }), + }, + V = { + find: (t, e = document.documentElement) => + [].concat(...Element.prototype.querySelectorAll.call(e, t)), + findOne: (t, e = document.documentElement) => + Element.prototype.querySelector.call(e, t), + children: (t, e) => [].concat(...t.children).filter((t) => t.matches(e)), + parents(t, e) { + const i = []; + let n = t.parentNode; + for (; n && n.nodeType === Node.ELEMENT_NODE && 3 !== n.nodeType; ) + n.matches(e) && i.push(n), (n = n.parentNode); + return i; + }, + prev(t, e) { + let i = t.previousElementSibling; + for (; i; ) { + if (i.matches(e)) return [i]; + i = i.previousElementSibling; + } + return []; + }, + next(t, e) { + let i = t.nextElementSibling; + for (; i; ) { + if (i.matches(e)) return [i]; + i = i.nextElementSibling; + } + return []; + }, + focusableChildren(t) { + const e = [ + 'a', + 'button', + 'input', + 'textarea', + 'select', + 'details', + '[tabindex]', + '[contenteditable="true"]', + ] + .map((t) => `${t}:not([tabindex^="-"])`) + .join(', '); + return this.find(e, t).filter((t) => !c(t) && l(t)); + }, + }, + K = 'carousel', + X = { + interval: 5e3, + keyboard: !0, + slide: !1, + pause: 'hover', + wrap: !0, + touch: !0, + }, + Y = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean', + touch: 'boolean', + }, + Q = 'next', + G = 'prev', + Z = 'left', + J = 'right', + tt = { ArrowLeft: J, ArrowRight: Z }, + et = 'slid.bs.carousel', + it = 'active', + nt = '.active.carousel-item'; + class st extends B { + constructor(t, e) { + super(t), + (this._items = null), + (this._interval = null), + (this._activeElement = null), + (this._isPaused = !1), + (this._isSliding = !1), + (this.touchTimeout = null), + (this.touchStartX = 0), + (this.touchDeltaX = 0), + (this._config = this._getConfig(e)), + (this._indicatorsElement = V.findOne( + '.carousel-indicators', + this._element + )), + (this._touchSupported = + 'ontouchstart' in document.documentElement || + navigator.maxTouchPoints > 0), + (this._pointerEvent = Boolean(window.PointerEvent)), + this._addEventListeners(); + } + static get Default() { + return X; + } + static get NAME() { + return K; + } + next() { + this._slide(Q); + } + nextWhenVisible() { + !document.hidden && l(this._element) && this.next(); + } + prev() { + this._slide(G); + } + pause(t) { + t || (this._isPaused = !0), + V.findOne('.carousel-item-next, .carousel-item-prev', this._element) && + (s(this._element), this.cycle(!0)), + clearInterval(this._interval), + (this._interval = null); + } + cycle(t) { + t || (this._isPaused = !1), + this._interval && + (clearInterval(this._interval), (this._interval = null)), + this._config && + this._config.interval && + !this._isPaused && + (this._updateInterval(), + (this._interval = setInterval( + (document.visibilityState ? this.nextWhenVisible : this.next).bind( + this + ), + this._config.interval + ))); + } + to(t) { + this._activeElement = V.findOne(nt, this._element); + const e = this._getItemIndex(this._activeElement); + if (t > this._items.length - 1 || t < 0) return; + if (this._isSliding) + return void j.one(this._element, et, () => this.to(t)); + if (e === t) return this.pause(), void this.cycle(); + const i = t > e ? Q : G; + this._slide(i, this._items[t]); + } + _getConfig(t) { + return ( + (t = { + ...X, + ...U.getDataAttributes(this._element), + ...('object' == typeof t ? t : {}), + }), + a(K, t, Y), + t + ); + } + _handleSwipe() { + const t = Math.abs(this.touchDeltaX); + if (t <= 40) return; + const e = t / this.touchDeltaX; + (this.touchDeltaX = 0), e && this._slide(e > 0 ? J : Z); + } + _addEventListeners() { + this._config.keyboard && + j.on(this._element, 'keydown.bs.carousel', (t) => this._keydown(t)), + 'hover' === this._config.pause && + (j.on(this._element, 'mouseenter.bs.carousel', (t) => this.pause(t)), + j.on(this._element, 'mouseleave.bs.carousel', (t) => this.cycle(t))), + this._config.touch && + this._touchSupported && + this._addTouchEventListeners(); + } + _addTouchEventListeners() { + const t = (t) => + this._pointerEvent && + ('pen' === t.pointerType || 'touch' === t.pointerType), + e = (e) => { + t(e) + ? (this.touchStartX = e.clientX) + : this._pointerEvent || (this.touchStartX = e.touches[0].clientX); + }, + i = (t) => { + this.touchDeltaX = + t.touches && t.touches.length > 1 + ? 0 + : t.touches[0].clientX - this.touchStartX; + }, + n = (e) => { + t(e) && (this.touchDeltaX = e.clientX - this.touchStartX), + this._handleSwipe(), + 'hover' === this._config.pause && + (this.pause(), + this.touchTimeout && clearTimeout(this.touchTimeout), + (this.touchTimeout = setTimeout( + (t) => this.cycle(t), + 500 + this._config.interval + ))); + }; + V.find('.carousel-item img', this._element).forEach((t) => { + j.on(t, 'dragstart.bs.carousel', (t) => t.preventDefault()); + }), + this._pointerEvent + ? (j.on(this._element, 'pointerdown.bs.carousel', (t) => e(t)), + j.on(this._element, 'pointerup.bs.carousel', (t) => n(t)), + this._element.classList.add('pointer-event')) + : (j.on(this._element, 'touchstart.bs.carousel', (t) => e(t)), + j.on(this._element, 'touchmove.bs.carousel', (t) => i(t)), + j.on(this._element, 'touchend.bs.carousel', (t) => n(t))); + } + _keydown(t) { + if (/input|textarea/i.test(t.target.tagName)) return; + const e = tt[t.key]; + e && (t.preventDefault(), this._slide(e)); + } + _getItemIndex(t) { + return ( + (this._items = + t && t.parentNode ? V.find('.carousel-item', t.parentNode) : []), + this._items.indexOf(t) + ); + } + _getItemByOrder(t, e) { + const i = t === Q; + return v(this._items, e, i, this._config.wrap); + } + _triggerSlideEvent(t, e) { + const i = this._getItemIndex(t), + n = this._getItemIndex(V.findOne(nt, this._element)); + return j.trigger(this._element, 'slide.bs.carousel', { + relatedTarget: t, + direction: e, + from: n, + to: i, + }); + } + _setActiveIndicatorElement(t) { + if (this._indicatorsElement) { + const e = V.findOne('.active', this._indicatorsElement); + e.classList.remove(it), e.removeAttribute('aria-current'); + const i = V.find('[data-bs-target]', this._indicatorsElement); + for (let e = 0; e < i.length; e++) + if ( + Number.parseInt(i[e].getAttribute('data-bs-slide-to'), 10) === + this._getItemIndex(t) + ) { + i[e].classList.add(it), i[e].setAttribute('aria-current', 'true'); + break; + } + } + } + _updateInterval() { + const t = this._activeElement || V.findOne(nt, this._element); + if (!t) return; + const e = Number.parseInt(t.getAttribute('data-bs-interval'), 10); + e + ? ((this._config.defaultInterval = + this._config.defaultInterval || this._config.interval), + (this._config.interval = e)) + : (this._config.interval = + this._config.defaultInterval || this._config.interval); + } + _slide(t, e) { + const i = this._directionToOrder(t), + n = V.findOne(nt, this._element), + s = this._getItemIndex(n), + o = e || this._getItemByOrder(i, n), + r = this._getItemIndex(o), + a = Boolean(this._interval), + l = i === Q, + c = l ? 'carousel-item-start' : 'carousel-item-end', + h = l ? 'carousel-item-next' : 'carousel-item-prev', + d = this._orderToDirection(i); + if (o && o.classList.contains(it)) return void (this._isSliding = !1); + if (this._isSliding) return; + if (this._triggerSlideEvent(o, d).defaultPrevented) return; + if (!n || !o) return; + (this._isSliding = !0), + a && this.pause(), + this._setActiveIndicatorElement(o), + (this._activeElement = o); + const f = () => { + j.trigger(this._element, et, { + relatedTarget: o, + direction: d, + from: s, + to: r, + }); + }; + if (this._element.classList.contains('slide')) { + o.classList.add(h), u(o), n.classList.add(c), o.classList.add(c); + const t = () => { + o.classList.remove(c, h), + o.classList.add(it), + n.classList.remove(it, h, c), + (this._isSliding = !1), + setTimeout(f, 0); + }; + this._queueCallback(t, n, !0); + } else n.classList.remove(it), o.classList.add(it), (this._isSliding = !1), f(); + a && this.cycle(); + } + _directionToOrder(t) { + return [J, Z].includes(t) + ? m() + ? t === Z + ? G + : Q + : t === Z + ? Q + : G + : t; + } + _orderToDirection(t) { + return [Q, G].includes(t) + ? m() + ? t === G + ? Z + : J + : t === G + ? J + : Z + : t; + } + static carouselInterface(t, e) { + const i = st.getOrCreateInstance(t, e); + let { _config: n } = i; + 'object' == typeof e && (n = { ...n, ...e }); + const s = 'string' == typeof e ? e : n.slide; + if ('number' == typeof e) i.to(e); + else if ('string' == typeof s) { + if (void 0 === i[s]) throw new TypeError(`No method named "${s}"`); + i[s](); + } else n.interval && n.ride && (i.pause(), i.cycle()); + } + static jQueryInterface(t) { + return this.each(function () { + st.carouselInterface(this, t); + }); + } + static dataApiClickHandler(t) { + const e = n(this); + if (!e || !e.classList.contains('carousel')) return; + const i = { ...U.getDataAttributes(e), ...U.getDataAttributes(this) }, + s = this.getAttribute('data-bs-slide-to'); + s && (i.interval = !1), + st.carouselInterface(e, i), + s && st.getInstance(e).to(s), + t.preventDefault(); + } + } + j.on( + document, + 'click.bs.carousel.data-api', + '[data-bs-slide], [data-bs-slide-to]', + st.dataApiClickHandler + ), + j.on(window, 'load.bs.carousel.data-api', () => { + const t = V.find('[data-bs-ride="carousel"]'); + for (let e = 0, i = t.length; e < i; e++) + st.carouselInterface(t[e], st.getInstance(t[e])); + }), + g(st); + const ot = 'collapse', + rt = { toggle: !0, parent: null }, + at = { toggle: 'boolean', parent: '(null|element)' }, + lt = 'show', + ct = 'collapse', + ht = 'collapsing', + dt = 'collapsed', + ut = ':scope .collapse .collapse', + ft = '[data-bs-toggle="collapse"]'; + class pt extends B { + constructor(t, e) { + super(t), + (this._isTransitioning = !1), + (this._config = this._getConfig(e)), + (this._triggerArray = []); + const n = V.find(ft); + for (let t = 0, e = n.length; t < e; t++) { + const e = n[t], + s = i(e), + o = V.find(s).filter((t) => t === this._element); + null !== s && + o.length && + ((this._selector = s), this._triggerArray.push(e)); + } + this._initializeChildren(), + this._config.parent || + this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), + this._config.toggle && this.toggle(); + } + static get Default() { + return rt; + } + static get NAME() { + return ot; + } + toggle() { + this._isShown() ? this.hide() : this.show(); + } + show() { + if (this._isTransitioning || this._isShown()) return; + let t, + e = []; + if (this._config.parent) { + const t = V.find(ut, this._config.parent); + e = V.find( + '.collapse.show, .collapse.collapsing', + this._config.parent + ).filter((e) => !t.includes(e)); + } + const i = V.findOne(this._selector); + if (e.length) { + const n = e.find((t) => i !== t); + if (((t = n ? pt.getInstance(n) : null), t && t._isTransitioning)) + return; + } + if (j.trigger(this._element, 'show.bs.collapse').defaultPrevented) return; + e.forEach((e) => { + i !== e && pt.getOrCreateInstance(e, { toggle: !1 }).hide(), + t || H.set(e, 'bs.collapse', null); + }); + const n = this._getDimension(); + this._element.classList.remove(ct), + this._element.classList.add(ht), + (this._element.style[n] = 0), + this._addAriaAndCollapsedClass(this._triggerArray, !0), + (this._isTransitioning = !0); + const s = `scroll${n[0].toUpperCase() + n.slice(1)}`; + this._queueCallback( + () => { + (this._isTransitioning = !1), + this._element.classList.remove(ht), + this._element.classList.add(ct, lt), + (this._element.style[n] = ''), + j.trigger(this._element, 'shown.bs.collapse'); + }, + this._element, + !0 + ), + (this._element.style[n] = `${this._element[s]}px`); + } + hide() { + if (this._isTransitioning || !this._isShown()) return; + if (j.trigger(this._element, 'hide.bs.collapse').defaultPrevented) return; + const t = this._getDimension(); + (this._element.style[t] = `${ + this._element.getBoundingClientRect()[t] + }px`), + u(this._element), + this._element.classList.add(ht), + this._element.classList.remove(ct, lt); + const e = this._triggerArray.length; + for (let t = 0; t < e; t++) { + const e = this._triggerArray[t], + i = n(e); + i && !this._isShown(i) && this._addAriaAndCollapsedClass([e], !1); + } + (this._isTransitioning = !0), + (this._element.style[t] = ''), + this._queueCallback( + () => { + (this._isTransitioning = !1), + this._element.classList.remove(ht), + this._element.classList.add(ct), + j.trigger(this._element, 'hidden.bs.collapse'); + }, + this._element, + !0 + ); + } + _isShown(t = this._element) { + return t.classList.contains(lt); + } + _getConfig(t) { + return ( + ((t = { ...rt, ...U.getDataAttributes(this._element), ...t }).toggle = + Boolean(t.toggle)), + (t.parent = r(t.parent)), + a(ot, t, at), + t + ); + } + _getDimension() { + return this._element.classList.contains('collapse-horizontal') + ? 'width' + : 'height'; + } + _initializeChildren() { + if (!this._config.parent) return; + const t = V.find(ut, this._config.parent); + V.find(ft, this._config.parent) + .filter((e) => !t.includes(e)) + .forEach((t) => { + const e = n(t); + e && this._addAriaAndCollapsedClass([t], this._isShown(e)); + }); + } + _addAriaAndCollapsedClass(t, e) { + t.length && + t.forEach((t) => { + e ? t.classList.remove(dt) : t.classList.add(dt), + t.setAttribute('aria-expanded', e); + }); + } + static jQueryInterface(t) { + return this.each(function () { + const e = {}; + 'string' == typeof t && /show|hide/.test(t) && (e.toggle = !1); + const i = pt.getOrCreateInstance(this, e); + if ('string' == typeof t) { + if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); + i[t](); + } + }); + } + } + j.on(document, 'click.bs.collapse.data-api', ft, function (t) { + ('A' === t.target.tagName || + (t.delegateTarget && 'A' === t.delegateTarget.tagName)) && + t.preventDefault(); + const e = i(this); + V.find(e).forEach((t) => { + pt.getOrCreateInstance(t, { toggle: !1 }).toggle(); + }); + }), + g(pt); + var mt = 'top', + gt = 'bottom', + _t = 'right', + bt = 'left', + vt = 'auto', + yt = [mt, gt, _t, bt], + wt = 'start', + Et = 'end', + At = 'clippingParents', + Tt = 'viewport', + Ot = 'popper', + Ct = 'reference', + kt = yt.reduce(function (t, e) { + return t.concat([e + '-' + wt, e + '-' + Et]); + }, []), + Lt = [].concat(yt, [vt]).reduce(function (t, e) { + return t.concat([e, e + '-' + wt, e + '-' + Et]); + }, []), + xt = 'beforeRead', + Dt = 'read', + St = 'afterRead', + Nt = 'beforeMain', + It = 'main', + Pt = 'afterMain', + jt = 'beforeWrite', + Mt = 'write', + Ht = 'afterWrite', + Bt = [xt, Dt, St, Nt, It, Pt, jt, Mt, Ht]; + function Rt(t) { + return t ? (t.nodeName || '').toLowerCase() : null; + } + function Wt(t) { + if (null == t) return window; + if ('[object Window]' !== t.toString()) { + var e = t.ownerDocument; + return (e && e.defaultView) || window; + } + return t; + } + function $t(t) { + return t instanceof Wt(t).Element || t instanceof Element; + } + function zt(t) { + return t instanceof Wt(t).HTMLElement || t instanceof HTMLElement; + } + function qt(t) { + return ( + 'undefined' != typeof ShadowRoot && + (t instanceof Wt(t).ShadowRoot || t instanceof ShadowRoot) + ); + } + const Ft = { + name: 'applyStyles', + enabled: !0, + phase: 'write', + fn: function (t) { + var e = t.state; + Object.keys(e.elements).forEach(function (t) { + var i = e.styles[t] || {}, + n = e.attributes[t] || {}, + s = e.elements[t]; + zt(s) && + Rt(s) && + (Object.assign(s.style, i), + Object.keys(n).forEach(function (t) { + var e = n[t]; + !1 === e + ? s.removeAttribute(t) + : s.setAttribute(t, !0 === e ? '' : e); + })); + }); + }, + effect: function (t) { + var e = t.state, + i = { + popper: { + position: e.options.strategy, + left: '0', + top: '0', + margin: '0', + }, + arrow: { position: 'absolute' }, + reference: {}, + }; + return ( + Object.assign(e.elements.popper.style, i.popper), + (e.styles = i), + e.elements.arrow && Object.assign(e.elements.arrow.style, i.arrow), + function () { + Object.keys(e.elements).forEach(function (t) { + var n = e.elements[t], + s = e.attributes[t] || {}, + o = Object.keys( + e.styles.hasOwnProperty(t) ? e.styles[t] : i[t] + ).reduce(function (t, e) { + return (t[e] = ''), t; + }, {}); + zt(n) && + Rt(n) && + (Object.assign(n.style, o), + Object.keys(s).forEach(function (t) { + n.removeAttribute(t); + })); + }); + } + ); + }, + requires: ['computeStyles'], + }; + function Ut(t) { + return t.split('-')[0]; + } + function Vt(t, e) { + var i = t.getBoundingClientRect(); + return { + width: i.width / 1, + height: i.height / 1, + top: i.top / 1, + right: i.right / 1, + bottom: i.bottom / 1, + left: i.left / 1, + x: i.left / 1, + y: i.top / 1, + }; + } + function Kt(t) { + var e = Vt(t), + i = t.offsetWidth, + n = t.offsetHeight; + return ( + Math.abs(e.width - i) <= 1 && (i = e.width), + Math.abs(e.height - n) <= 1 && (n = e.height), + { x: t.offsetLeft, y: t.offsetTop, width: i, height: n } + ); + } + function Xt(t, e) { + var i = e.getRootNode && e.getRootNode(); + if (t.contains(e)) return !0; + if (i && qt(i)) { + var n = e; + do { + if (n && t.isSameNode(n)) return !0; + n = n.parentNode || n.host; + } while (n); + } + return !1; + } + function Yt(t) { + return Wt(t).getComputedStyle(t); + } + function Qt(t) { + return ['table', 'td', 'th'].indexOf(Rt(t)) >= 0; + } + function Gt(t) { + return ( + ($t(t) ? t.ownerDocument : t.document) || window.document + ).documentElement; + } + function Zt(t) { + return 'html' === Rt(t) + ? t + : t.assignedSlot || t.parentNode || (qt(t) ? t.host : null) || Gt(t); + } + function Jt(t) { + return zt(t) && 'fixed' !== Yt(t).position ? t.offsetParent : null; + } + function te(t) { + for (var e = Wt(t), i = Jt(t); i && Qt(i) && 'static' === Yt(i).position; ) + i = Jt(i); + return i && + ('html' === Rt(i) || ('body' === Rt(i) && 'static' === Yt(i).position)) + ? e + : i || + (function (t) { + var e = -1 !== navigator.userAgent.toLowerCase().indexOf('firefox'); + if ( + -1 !== navigator.userAgent.indexOf('Trident') && + zt(t) && + 'fixed' === Yt(t).position + ) + return null; + for ( + var i = Zt(t); + zt(i) && ['html', 'body'].indexOf(Rt(i)) < 0; + + ) { + var n = Yt(i); + if ( + 'none' !== n.transform || + 'none' !== n.perspective || + 'paint' === n.contain || + -1 !== ['transform', 'perspective'].indexOf(n.willChange) || + (e && 'filter' === n.willChange) || + (e && n.filter && 'none' !== n.filter) + ) + return i; + i = i.parentNode; + } + return null; + })(t) || + e; + } + function ee(t) { + return ['top', 'bottom'].indexOf(t) >= 0 ? 'x' : 'y'; + } + var ie = Math.max, + ne = Math.min, + se = Math.round; + function oe(t, e, i) { + return ie(t, ne(e, i)); + } + function re(t) { + return Object.assign({}, { top: 0, right: 0, bottom: 0, left: 0 }, t); + } + function ae(t, e) { + return e.reduce(function (e, i) { + return (e[i] = t), e; + }, {}); + } + const le = { + name: 'arrow', + enabled: !0, + phase: 'main', + fn: function (t) { + var e, + i = t.state, + n = t.name, + s = t.options, + o = i.elements.arrow, + r = i.modifiersData.popperOffsets, + a = Ut(i.placement), + l = ee(a), + c = [bt, _t].indexOf(a) >= 0 ? 'height' : 'width'; + if (o && r) { + var h = (function (t, e) { + return re( + 'number' != + typeof (t = + 'function' == typeof t + ? t(Object.assign({}, e.rects, { placement: e.placement })) + : t) + ? t + : ae(t, yt) + ); + })(s.padding, i), + d = Kt(o), + u = 'y' === l ? mt : bt, + f = 'y' === l ? gt : _t, + p = + i.rects.reference[c] + + i.rects.reference[l] - + r[l] - + i.rects.popper[c], + m = r[l] - i.rects.reference[l], + g = te(o), + _ = g ? ('y' === l ? g.clientHeight || 0 : g.clientWidth || 0) : 0, + b = p / 2 - m / 2, + v = h[u], + y = _ - d[c] - h[f], + w = _ / 2 - d[c] / 2 + b, + E = oe(v, w, y), + A = l; + i.modifiersData[n] = (((e = {})[A] = E), (e.centerOffset = E - w), e); + } + }, + effect: function (t) { + var e = t.state, + i = t.options.element, + n = void 0 === i ? '[data-popper-arrow]' : i; + null != n && + ('string' != typeof n || (n = e.elements.popper.querySelector(n))) && + Xt(e.elements.popper, n) && + (e.elements.arrow = n); + }, + requires: ['popperOffsets'], + requiresIfExists: ['preventOverflow'], + }; + function ce(t) { + return t.split('-')[1]; + } + var he = { top: 'auto', right: 'auto', bottom: 'auto', left: 'auto' }; + function de(t) { + var e, + i = t.popper, + n = t.popperRect, + s = t.placement, + o = t.variation, + r = t.offsets, + a = t.position, + l = t.gpuAcceleration, + c = t.adaptive, + h = t.roundOffsets, + d = + !0 === h + ? (function (t) { + var e = t.x, + i = t.y, + n = window.devicePixelRatio || 1; + return { x: se(se(e * n) / n) || 0, y: se(se(i * n) / n) || 0 }; + })(r) + : 'function' == typeof h + ? h(r) + : r, + u = d.x, + f = void 0 === u ? 0 : u, + p = d.y, + m = void 0 === p ? 0 : p, + g = r.hasOwnProperty('x'), + _ = r.hasOwnProperty('y'), + b = bt, + v = mt, + y = window; + if (c) { + var w = te(i), + E = 'clientHeight', + A = 'clientWidth'; + w === Wt(i) && + 'static' !== Yt((w = Gt(i))).position && + 'absolute' === a && + ((E = 'scrollHeight'), (A = 'scrollWidth')), + (w = w), + (s !== mt && ((s !== bt && s !== _t) || o !== Et)) || + ((v = gt), (m -= w[E] - n.height), (m *= l ? 1 : -1)), + (s !== bt && ((s !== mt && s !== gt) || o !== Et)) || + ((b = _t), (f -= w[A] - n.width), (f *= l ? 1 : -1)); + } + var T, + O = Object.assign({ position: a }, c && he); + return l + ? Object.assign( + {}, + O, + (((T = {})[v] = _ ? '0' : ''), + (T[b] = g ? '0' : ''), + (T.transform = + (y.devicePixelRatio || 1) <= 1 + ? 'translate(' + f + 'px, ' + m + 'px)' + : 'translate3d(' + f + 'px, ' + m + 'px, 0)'), + T) + ) + : Object.assign( + {}, + O, + (((e = {})[v] = _ ? m + 'px' : ''), + (e[b] = g ? f + 'px' : ''), + (e.transform = ''), + e) + ); + } + const ue = { + name: 'computeStyles', + enabled: !0, + phase: 'beforeWrite', + fn: function (t) { + var e = t.state, + i = t.options, + n = i.gpuAcceleration, + s = void 0 === n || n, + o = i.adaptive, + r = void 0 === o || o, + a = i.roundOffsets, + l = void 0 === a || a, + c = { + placement: Ut(e.placement), + variation: ce(e.placement), + popper: e.elements.popper, + popperRect: e.rects.popper, + gpuAcceleration: s, + }; + null != e.modifiersData.popperOffsets && + (e.styles.popper = Object.assign( + {}, + e.styles.popper, + de( + Object.assign({}, c, { + offsets: e.modifiersData.popperOffsets, + position: e.options.strategy, + adaptive: r, + roundOffsets: l, + }) + ) + )), + null != e.modifiersData.arrow && + (e.styles.arrow = Object.assign( + {}, + e.styles.arrow, + de( + Object.assign({}, c, { + offsets: e.modifiersData.arrow, + position: 'absolute', + adaptive: !1, + roundOffsets: l, + }) + ) + )), + (e.attributes.popper = Object.assign({}, e.attributes.popper, { + 'data-popper-placement': e.placement, + })); + }, + data: {}, + }; + var fe = { passive: !0 }; + const pe = { + name: 'eventListeners', + enabled: !0, + phase: 'write', + fn: function () {}, + effect: function (t) { + var e = t.state, + i = t.instance, + n = t.options, + s = n.scroll, + o = void 0 === s || s, + r = n.resize, + a = void 0 === r || r, + l = Wt(e.elements.popper), + c = [].concat(e.scrollParents.reference, e.scrollParents.popper); + return ( + o && + c.forEach(function (t) { + t.addEventListener('scroll', i.update, fe); + }), + a && l.addEventListener('resize', i.update, fe), + function () { + o && + c.forEach(function (t) { + t.removeEventListener('scroll', i.update, fe); + }), + a && l.removeEventListener('resize', i.update, fe); + } + ); + }, + data: {}, + }; + var me = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; + function ge(t) { + return t.replace(/left|right|bottom|top/g, function (t) { + return me[t]; + }); + } + var _e = { start: 'end', end: 'start' }; + function be(t) { + return t.replace(/start|end/g, function (t) { + return _e[t]; + }); + } + function ve(t) { + var e = Wt(t); + return { scrollLeft: e.pageXOffset, scrollTop: e.pageYOffset }; + } + function ye(t) { + return Vt(Gt(t)).left + ve(t).scrollLeft; + } + function we(t) { + var e = Yt(t), + i = e.overflow, + n = e.overflowX, + s = e.overflowY; + return /auto|scroll|overlay|hidden/.test(i + s + n); + } + function Ee(t) { + return ['html', 'body', '#document'].indexOf(Rt(t)) >= 0 + ? t.ownerDocument.body + : zt(t) && we(t) + ? t + : Ee(Zt(t)); + } + function Ae(t, e) { + var i; + void 0 === e && (e = []); + var n = Ee(t), + s = n === (null == (i = t.ownerDocument) ? void 0 : i.body), + o = Wt(n), + r = s ? [o].concat(o.visualViewport || [], we(n) ? n : []) : n, + a = e.concat(r); + return s ? a : a.concat(Ae(Zt(r))); + } + function Te(t) { + return Object.assign({}, t, { + left: t.x, + top: t.y, + right: t.x + t.width, + bottom: t.y + t.height, + }); + } + function Oe(t, e) { + return e === Tt + ? Te( + (function (t) { + var e = Wt(t), + i = Gt(t), + n = e.visualViewport, + s = i.clientWidth, + o = i.clientHeight, + r = 0, + a = 0; + return ( + n && + ((s = n.width), + (o = n.height), + /^((?!chrome|android).)*safari/i.test(navigator.userAgent) || + ((r = n.offsetLeft), (a = n.offsetTop))), + { width: s, height: o, x: r + ye(t), y: a } + ); + })(t) + ) + : zt(e) + ? (function (t) { + var e = Vt(t); + return ( + (e.top = e.top + t.clientTop), + (e.left = e.left + t.clientLeft), + (e.bottom = e.top + t.clientHeight), + (e.right = e.left + t.clientWidth), + (e.width = t.clientWidth), + (e.height = t.clientHeight), + (e.x = e.left), + (e.y = e.top), + e + ); + })(e) + : Te( + (function (t) { + var e, + i = Gt(t), + n = ve(t), + s = null == (e = t.ownerDocument) ? void 0 : e.body, + o = ie( + i.scrollWidth, + i.clientWidth, + s ? s.scrollWidth : 0, + s ? s.clientWidth : 0 + ), + r = ie( + i.scrollHeight, + i.clientHeight, + s ? s.scrollHeight : 0, + s ? s.clientHeight : 0 + ), + a = -n.scrollLeft + ye(t), + l = -n.scrollTop; + return ( + 'rtl' === Yt(s || i).direction && + (a += ie(i.clientWidth, s ? s.clientWidth : 0) - o), + { width: o, height: r, x: a, y: l } + ); + })(Gt(t)) + ); + } + function Ce(t) { + var e, + i = t.reference, + n = t.element, + s = t.placement, + o = s ? Ut(s) : null, + r = s ? ce(s) : null, + a = i.x + i.width / 2 - n.width / 2, + l = i.y + i.height / 2 - n.height / 2; + switch (o) { + case mt: + e = { x: a, y: i.y - n.height }; + break; + case gt: + e = { x: a, y: i.y + i.height }; + break; + case _t: + e = { x: i.x + i.width, y: l }; + break; + case bt: + e = { x: i.x - n.width, y: l }; + break; + default: + e = { x: i.x, y: i.y }; + } + var c = o ? ee(o) : null; + if (null != c) { + var h = 'y' === c ? 'height' : 'width'; + switch (r) { + case wt: + e[c] = e[c] - (i[h] / 2 - n[h] / 2); + break; + case Et: + e[c] = e[c] + (i[h] / 2 - n[h] / 2); + } + } + return e; + } + function ke(t, e) { + void 0 === e && (e = {}); + var i = e, + n = i.placement, + s = void 0 === n ? t.placement : n, + o = i.boundary, + r = void 0 === o ? At : o, + a = i.rootBoundary, + l = void 0 === a ? Tt : a, + c = i.elementContext, + h = void 0 === c ? Ot : c, + d = i.altBoundary, + u = void 0 !== d && d, + f = i.padding, + p = void 0 === f ? 0 : f, + m = re('number' != typeof p ? p : ae(p, yt)), + g = h === Ot ? Ct : Ot, + _ = t.rects.popper, + b = t.elements[u ? g : h], + v = (function (t, e, i) { + var n = + 'clippingParents' === e + ? (function (t) { + var e = Ae(Zt(t)), + i = + ['absolute', 'fixed'].indexOf(Yt(t).position) >= 0 && + zt(t) + ? te(t) + : t; + return $t(i) + ? e.filter(function (t) { + return $t(t) && Xt(t, i) && 'body' !== Rt(t); + }) + : []; + })(t) + : [].concat(e), + s = [].concat(n, [i]), + o = s[0], + r = s.reduce(function (e, i) { + var n = Oe(t, i); + return ( + (e.top = ie(n.top, e.top)), + (e.right = ne(n.right, e.right)), + (e.bottom = ne(n.bottom, e.bottom)), + (e.left = ie(n.left, e.left)), + e + ); + }, Oe(t, o)); + return ( + (r.width = r.right - r.left), + (r.height = r.bottom - r.top), + (r.x = r.left), + (r.y = r.top), + r + ); + })($t(b) ? b : b.contextElement || Gt(t.elements.popper), r, l), + y = Vt(t.elements.reference), + w = Ce({ reference: y, element: _, strategy: 'absolute', placement: s }), + E = Te(Object.assign({}, _, w)), + A = h === Ot ? E : y, + T = { + top: v.top - A.top + m.top, + bottom: A.bottom - v.bottom + m.bottom, + left: v.left - A.left + m.left, + right: A.right - v.right + m.right, + }, + O = t.modifiersData.offset; + if (h === Ot && O) { + var C = O[s]; + Object.keys(T).forEach(function (t) { + var e = [_t, gt].indexOf(t) >= 0 ? 1 : -1, + i = [mt, gt].indexOf(t) >= 0 ? 'y' : 'x'; + T[t] += C[i] * e; + }); + } + return T; + } + function Le(t, e) { + void 0 === e && (e = {}); + var i = e, + n = i.placement, + s = i.boundary, + o = i.rootBoundary, + r = i.padding, + a = i.flipVariations, + l = i.allowedAutoPlacements, + c = void 0 === l ? Lt : l, + h = ce(n), + d = h + ? a + ? kt + : kt.filter(function (t) { + return ce(t) === h; + }) + : yt, + u = d.filter(function (t) { + return c.indexOf(t) >= 0; + }); + 0 === u.length && (u = d); + var f = u.reduce(function (e, i) { + return ( + (e[i] = ke(t, { + placement: i, + boundary: s, + rootBoundary: o, + padding: r, + })[Ut(i)]), + e + ); + }, {}); + return Object.keys(f).sort(function (t, e) { + return f[t] - f[e]; + }); + } + const xe = { + name: 'flip', + enabled: !0, + phase: 'main', + fn: function (t) { + var e = t.state, + i = t.options, + n = t.name; + if (!e.modifiersData[n]._skip) { + for ( + var s = i.mainAxis, + o = void 0 === s || s, + r = i.altAxis, + a = void 0 === r || r, + l = i.fallbackPlacements, + c = i.padding, + h = i.boundary, + d = i.rootBoundary, + u = i.altBoundary, + f = i.flipVariations, + p = void 0 === f || f, + m = i.allowedAutoPlacements, + g = e.options.placement, + _ = Ut(g), + b = + l || + (_ !== g && p + ? (function (t) { + if (Ut(t) === vt) return []; + var e = ge(t); + return [be(t), e, be(e)]; + })(g) + : [ge(g)]), + v = [g].concat(b).reduce(function (t, i) { + return t.concat( + Ut(i) === vt + ? Le(e, { + placement: i, + boundary: h, + rootBoundary: d, + padding: c, + flipVariations: p, + allowedAutoPlacements: m, + }) + : i + ); + }, []), + y = e.rects.reference, + w = e.rects.popper, + E = new Map(), + A = !0, + T = v[0], + O = 0; + O < v.length; + O++ + ) { + var C = v[O], + k = Ut(C), + L = ce(C) === wt, + x = [mt, gt].indexOf(k) >= 0, + D = x ? 'width' : 'height', + S = ke(e, { + placement: C, + boundary: h, + rootBoundary: d, + altBoundary: u, + padding: c, + }), + N = x ? (L ? _t : bt) : L ? gt : mt; + y[D] > w[D] && (N = ge(N)); + var I = ge(N), + P = []; + if ( + (o && P.push(S[k] <= 0), + a && P.push(S[N] <= 0, S[I] <= 0), + P.every(function (t) { + return t; + })) + ) { + (T = C), (A = !1); + break; + } + E.set(C, P); + } + if (A) + for ( + var j = function (t) { + var e = v.find(function (e) { + var i = E.get(e); + if (i) + return i.slice(0, t).every(function (t) { + return t; + }); + }); + if (e) return (T = e), 'break'; + }, + M = p ? 3 : 1; + M > 0 && 'break' !== j(M); + M-- + ); + e.placement !== T && + ((e.modifiersData[n]._skip = !0), (e.placement = T), (e.reset = !0)); + } + }, + requiresIfExists: ['offset'], + data: { _skip: !1 }, + }; + function De(t, e, i) { + return ( + void 0 === i && (i = { x: 0, y: 0 }), + { + top: t.top - e.height - i.y, + right: t.right - e.width + i.x, + bottom: t.bottom - e.height + i.y, + left: t.left - e.width - i.x, + } + ); + } + function Se(t) { + return [mt, _t, gt, bt].some(function (e) { + return t[e] >= 0; + }); + } + const Ne = { + name: 'hide', + enabled: !0, + phase: 'main', + requiresIfExists: ['preventOverflow'], + fn: function (t) { + var e = t.state, + i = t.name, + n = e.rects.reference, + s = e.rects.popper, + o = e.modifiersData.preventOverflow, + r = ke(e, { elementContext: 'reference' }), + a = ke(e, { altBoundary: !0 }), + l = De(r, n), + c = De(a, s, o), + h = Se(l), + d = Se(c); + (e.modifiersData[i] = { + referenceClippingOffsets: l, + popperEscapeOffsets: c, + isReferenceHidden: h, + hasPopperEscaped: d, + }), + (e.attributes.popper = Object.assign({}, e.attributes.popper, { + 'data-popper-reference-hidden': h, + 'data-popper-escaped': d, + })); + }, + }, + Ie = { + name: 'offset', + enabled: !0, + phase: 'main', + requires: ['popperOffsets'], + fn: function (t) { + var e = t.state, + i = t.options, + n = t.name, + s = i.offset, + o = void 0 === s ? [0, 0] : s, + r = Lt.reduce(function (t, i) { + return ( + (t[i] = (function (t, e, i) { + var n = Ut(t), + s = [bt, mt].indexOf(n) >= 0 ? -1 : 1, + o = + 'function' == typeof i + ? i(Object.assign({}, e, { placement: t })) + : i, + r = o[0], + a = o[1]; + return ( + (r = r || 0), + (a = (a || 0) * s), + [bt, _t].indexOf(n) >= 0 ? { x: a, y: r } : { x: r, y: a } + ); + })(i, e.rects, o)), + t + ); + }, {}), + a = r[e.placement], + l = a.x, + c = a.y; + null != e.modifiersData.popperOffsets && + ((e.modifiersData.popperOffsets.x += l), + (e.modifiersData.popperOffsets.y += c)), + (e.modifiersData[n] = r); + }, + }, + Pe = { + name: 'popperOffsets', + enabled: !0, + phase: 'read', + fn: function (t) { + var e = t.state, + i = t.name; + e.modifiersData[i] = Ce({ + reference: e.rects.reference, + element: e.rects.popper, + strategy: 'absolute', + placement: e.placement, + }); + }, + data: {}, + }, + je = { + name: 'preventOverflow', + enabled: !0, + phase: 'main', + fn: function (t) { + var e = t.state, + i = t.options, + n = t.name, + s = i.mainAxis, + o = void 0 === s || s, + r = i.altAxis, + a = void 0 !== r && r, + l = i.boundary, + c = i.rootBoundary, + h = i.altBoundary, + d = i.padding, + u = i.tether, + f = void 0 === u || u, + p = i.tetherOffset, + m = void 0 === p ? 0 : p, + g = ke(e, { + boundary: l, + rootBoundary: c, + padding: d, + altBoundary: h, + }), + _ = Ut(e.placement), + b = ce(e.placement), + v = !b, + y = ee(_), + w = 'x' === y ? 'y' : 'x', + E = e.modifiersData.popperOffsets, + A = e.rects.reference, + T = e.rects.popper, + O = + 'function' == typeof m + ? m(Object.assign({}, e.rects, { placement: e.placement })) + : m, + C = { x: 0, y: 0 }; + if (E) { + if (o || a) { + var k = 'y' === y ? mt : bt, + L = 'y' === y ? gt : _t, + x = 'y' === y ? 'height' : 'width', + D = E[y], + S = E[y] + g[k], + N = E[y] - g[L], + I = f ? -T[x] / 2 : 0, + P = b === wt ? A[x] : T[x], + j = b === wt ? -T[x] : -A[x], + M = e.elements.arrow, + H = f && M ? Kt(M) : { width: 0, height: 0 }, + B = e.modifiersData['arrow#persistent'] + ? e.modifiersData['arrow#persistent'].padding + : { top: 0, right: 0, bottom: 0, left: 0 }, + R = B[k], + W = B[L], + $ = oe(0, A[x], H[x]), + z = v ? A[x] / 2 - I - $ - R - O : P - $ - R - O, + q = v ? -A[x] / 2 + I + $ + W + O : j + $ + W + O, + F = e.elements.arrow && te(e.elements.arrow), + U = F ? ('y' === y ? F.clientTop || 0 : F.clientLeft || 0) : 0, + V = e.modifiersData.offset + ? e.modifiersData.offset[e.placement][y] + : 0, + K = E[y] + z - V - U, + X = E[y] + q - V; + if (o) { + var Y = oe(f ? ne(S, K) : S, D, f ? ie(N, X) : N); + (E[y] = Y), (C[y] = Y - D); + } + if (a) { + var Q = 'x' === y ? mt : bt, + G = 'x' === y ? gt : _t, + Z = E[w], + J = Z + g[Q], + tt = Z - g[G], + et = oe(f ? ne(J, K) : J, Z, f ? ie(tt, X) : tt); + (E[w] = et), (C[w] = et - Z); + } + } + e.modifiersData[n] = C; + } + }, + requiresIfExists: ['offset'], + }; + function Me(t, e, i) { + void 0 === i && (i = !1); + var n = zt(e); + zt(e) && + (function (t) { + var e = t.getBoundingClientRect(); + e.width, t.offsetWidth, e.height, t.offsetHeight; + })(e); + var s, + o, + r = Gt(e), + a = Vt(t), + l = { scrollLeft: 0, scrollTop: 0 }, + c = { x: 0, y: 0 }; + return ( + (n || (!n && !i)) && + (('body' !== Rt(e) || we(r)) && + (l = + (s = e) !== Wt(s) && zt(s) + ? { scrollLeft: (o = s).scrollLeft, scrollTop: o.scrollTop } + : ve(s)), + zt(e) + ? (((c = Vt(e)).x += e.clientLeft), (c.y += e.clientTop)) + : r && (c.x = ye(r))), + { + x: a.left + l.scrollLeft - c.x, + y: a.top + l.scrollTop - c.y, + width: a.width, + height: a.height, + } + ); + } + function He(t) { + var e = new Map(), + i = new Set(), + n = []; + function s(t) { + i.add(t.name), + [] + .concat(t.requires || [], t.requiresIfExists || []) + .forEach(function (t) { + if (!i.has(t)) { + var n = e.get(t); + n && s(n); + } + }), + n.push(t); + } + return ( + t.forEach(function (t) { + e.set(t.name, t); + }), + t.forEach(function (t) { + i.has(t.name) || s(t); + }), + n + ); + } + var Be = { placement: 'bottom', modifiers: [], strategy: 'absolute' }; + function Re() { + for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) + e[i] = arguments[i]; + return !e.some(function (t) { + return !(t && 'function' == typeof t.getBoundingClientRect); + }); + } + function We(t) { + void 0 === t && (t = {}); + var e = t, + i = e.defaultModifiers, + n = void 0 === i ? [] : i, + s = e.defaultOptions, + o = void 0 === s ? Be : s; + return function (t, e, i) { + void 0 === i && (i = o); + var s, + r, + a = { + placement: 'bottom', + orderedModifiers: [], + options: Object.assign({}, Be, o), + modifiersData: {}, + elements: { reference: t, popper: e }, + attributes: {}, + styles: {}, + }, + l = [], + c = !1, + h = { + state: a, + setOptions: function (i) { + var s = 'function' == typeof i ? i(a.options) : i; + d(), + (a.options = Object.assign({}, o, a.options, s)), + (a.scrollParents = { + reference: $t(t) + ? Ae(t) + : t.contextElement + ? Ae(t.contextElement) + : [], + popper: Ae(e), + }); + var r, + c, + u = (function (t) { + var e = He(t); + return Bt.reduce(function (t, i) { + return t.concat( + e.filter(function (t) { + return t.phase === i; + }) + ); + }, []); + })( + ((r = [].concat(n, a.options.modifiers)), + (c = r.reduce(function (t, e) { + var i = t[e.name]; + return ( + (t[e.name] = i + ? Object.assign({}, i, e, { + options: Object.assign({}, i.options, e.options), + data: Object.assign({}, i.data, e.data), + }) + : e), + t + ); + }, {})), + Object.keys(c).map(function (t) { + return c[t]; + })) + ); + return ( + (a.orderedModifiers = u.filter(function (t) { + return t.enabled; + })), + a.orderedModifiers.forEach(function (t) { + var e = t.name, + i = t.options, + n = void 0 === i ? {} : i, + s = t.effect; + if ('function' == typeof s) { + var o = s({ state: a, name: e, instance: h, options: n }); + l.push(o || function () {}); + } + }), + h.update() + ); + }, + forceUpdate: function () { + if (!c) { + var t = a.elements, + e = t.reference, + i = t.popper; + if (Re(e, i)) { + (a.rects = { + reference: Me(e, te(i), 'fixed' === a.options.strategy), + popper: Kt(i), + }), + (a.reset = !1), + (a.placement = a.options.placement), + a.orderedModifiers.forEach(function (t) { + return (a.modifiersData[t.name] = Object.assign( + {}, + t.data + )); + }); + for (var n = 0; n < a.orderedModifiers.length; n++) + if (!0 !== a.reset) { + var s = a.orderedModifiers[n], + o = s.fn, + r = s.options, + l = void 0 === r ? {} : r, + d = s.name; + 'function' == typeof o && + (a = + o({ state: a, options: l, name: d, instance: h }) || a); + } else (a.reset = !1), (n = -1); + } + } + }, + update: + ((s = function () { + return new Promise(function (t) { + h.forceUpdate(), t(a); + }); + }), + function () { + return ( + r || + (r = new Promise(function (t) { + Promise.resolve().then(function () { + (r = void 0), t(s()); + }); + })), + r + ); + }), + destroy: function () { + d(), (c = !0); + }, + }; + if (!Re(t, e)) return h; + function d() { + l.forEach(function (t) { + return t(); + }), + (l = []); + } + return ( + h.setOptions(i).then(function (t) { + !c && i.onFirstUpdate && i.onFirstUpdate(t); + }), + h + ); + }; + } + var $e = We(), + ze = We({ defaultModifiers: [pe, Pe, ue, Ft] }), + qe = We({ defaultModifiers: [pe, Pe, ue, Ft, Ie, xe, je, le, Ne] }); + const Fe = Object.freeze({ + __proto__: null, + popperGenerator: We, + detectOverflow: ke, + createPopperBase: $e, + createPopper: qe, + createPopperLite: ze, + top: mt, + bottom: gt, + right: _t, + left: bt, + auto: vt, + basePlacements: yt, + start: wt, + end: Et, + clippingParents: At, + viewport: Tt, + popper: Ot, + reference: Ct, + variationPlacements: kt, + placements: Lt, + beforeRead: xt, + read: Dt, + afterRead: St, + beforeMain: Nt, + main: It, + afterMain: Pt, + beforeWrite: jt, + write: Mt, + afterWrite: Ht, + modifierPhases: Bt, + applyStyles: Ft, + arrow: le, + computeStyles: ue, + eventListeners: pe, + flip: xe, + hide: Ne, + offset: Ie, + popperOffsets: Pe, + preventOverflow: je, + }), + Ue = 'dropdown', + Ve = 'Escape', + Ke = 'Space', + Xe = 'ArrowUp', + Ye = 'ArrowDown', + Qe = new RegExp('ArrowUp|ArrowDown|Escape'), + Ge = 'click.bs.dropdown.data-api', + Ze = 'keydown.bs.dropdown.data-api', + Je = 'show', + ti = '[data-bs-toggle="dropdown"]', + ei = '.dropdown-menu', + ii = m() ? 'top-end' : 'top-start', + ni = m() ? 'top-start' : 'top-end', + si = m() ? 'bottom-end' : 'bottom-start', + oi = m() ? 'bottom-start' : 'bottom-end', + ri = m() ? 'left-start' : 'right-start', + ai = m() ? 'right-start' : 'left-start', + li = { + offset: [0, 2], + boundary: 'clippingParents', + reference: 'toggle', + display: 'dynamic', + popperConfig: null, + autoClose: !0, + }, + ci = { + offset: '(array|string|function)', + boundary: '(string|element)', + reference: '(string|element|object)', + display: 'string', + popperConfig: '(null|object|function)', + autoClose: '(boolean|string)', + }; + class hi extends B { + constructor(t, e) { + super(t), + (this._popper = null), + (this._config = this._getConfig(e)), + (this._menu = this._getMenuElement()), + (this._inNavbar = this._detectNavbar()); + } + static get Default() { + return li; + } + static get DefaultType() { + return ci; + } + static get NAME() { + return Ue; + } + toggle() { + return this._isShown() ? this.hide() : this.show(); + } + show() { + if (c(this._element) || this._isShown(this._menu)) return; + const t = { relatedTarget: this._element }; + if (j.trigger(this._element, 'show.bs.dropdown', t).defaultPrevented) + return; + const e = hi.getParentFromElement(this._element); + this._inNavbar + ? U.setDataAttribute(this._menu, 'popper', 'none') + : this._createPopper(e), + 'ontouchstart' in document.documentElement && + !e.closest('.navbar-nav') && + [] + .concat(...document.body.children) + .forEach((t) => j.on(t, 'mouseover', d)), + this._element.focus(), + this._element.setAttribute('aria-expanded', !0), + this._menu.classList.add(Je), + this._element.classList.add(Je), + j.trigger(this._element, 'shown.bs.dropdown', t); + } + hide() { + if (c(this._element) || !this._isShown(this._menu)) return; + const t = { relatedTarget: this._element }; + this._completeHide(t); + } + dispose() { + this._popper && this._popper.destroy(), super.dispose(); + } + update() { + (this._inNavbar = this._detectNavbar()), + this._popper && this._popper.update(); + } + _completeHide(t) { + j.trigger(this._element, 'hide.bs.dropdown', t).defaultPrevented || + ('ontouchstart' in document.documentElement && + [] + .concat(...document.body.children) + .forEach((t) => j.off(t, 'mouseover', d)), + this._popper && this._popper.destroy(), + this._menu.classList.remove(Je), + this._element.classList.remove(Je), + this._element.setAttribute('aria-expanded', 'false'), + U.removeDataAttribute(this._menu, 'popper'), + j.trigger(this._element, 'hidden.bs.dropdown', t)); + } + _getConfig(t) { + if ( + ((t = { + ...this.constructor.Default, + ...U.getDataAttributes(this._element), + ...t, + }), + a(Ue, t, this.constructor.DefaultType), + 'object' == typeof t.reference && + !o(t.reference) && + 'function' != typeof t.reference.getBoundingClientRect) + ) + throw new TypeError( + `${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.` + ); + return t; + } + _createPopper(t) { + if (void 0 === Fe) + throw new TypeError( + "Bootstrap's dropdowns require Popper (https://popper.js.org)" + ); + let e = this._element; + 'parent' === this._config.reference + ? (e = t) + : o(this._config.reference) + ? (e = r(this._config.reference)) + : 'object' == typeof this._config.reference && + (e = this._config.reference); + const i = this._getPopperConfig(), + n = i.modifiers.find( + (t) => 'applyStyles' === t.name && !1 === t.enabled + ); + (this._popper = qe(e, this._menu, i)), + n && U.setDataAttribute(this._menu, 'popper', 'static'); + } + _isShown(t = this._element) { + return t.classList.contains(Je); + } + _getMenuElement() { + return V.next(this._element, ei)[0]; + } + _getPlacement() { + const t = this._element.parentNode; + if (t.classList.contains('dropend')) return ri; + if (t.classList.contains('dropstart')) return ai; + const e = + 'end' === + getComputedStyle(this._menu).getPropertyValue('--bs-position').trim(); + return t.classList.contains('dropup') ? (e ? ni : ii) : e ? oi : si; + } + _detectNavbar() { + return null !== this._element.closest('.navbar'); + } + _getOffset() { + const { offset: t } = this._config; + return 'string' == typeof t + ? t.split(',').map((t) => Number.parseInt(t, 10)) + : 'function' == typeof t + ? (e) => t(e, this._element) + : t; + } + _getPopperConfig() { + const t = { + placement: this._getPlacement(), + modifiers: [ + { + name: 'preventOverflow', + options: { boundary: this._config.boundary }, + }, + { name: 'offset', options: { offset: this._getOffset() } }, + ], + }; + return ( + 'static' === this._config.display && + (t.modifiers = [{ name: 'applyStyles', enabled: !1 }]), + { + ...t, + ...('function' == typeof this._config.popperConfig + ? this._config.popperConfig(t) + : this._config.popperConfig), + } + ); + } + _selectMenuItem({ key: t, target: e }) { + const i = V.find( + '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)', + this._menu + ).filter(l); + i.length && v(i, e, t === Ye, !i.includes(e)).focus(); + } + static jQueryInterface(t) { + return this.each(function () { + const e = hi.getOrCreateInstance(this, t); + if ('string' == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + static clearMenus(t) { + if (t && (2 === t.button || ('keyup' === t.type && 'Tab' !== t.key))) + return; + const e = V.find(ti); + for (let i = 0, n = e.length; i < n; i++) { + const n = hi.getInstance(e[i]); + if (!n || !1 === n._config.autoClose) continue; + if (!n._isShown()) continue; + const s = { relatedTarget: n._element }; + if (t) { + const e = t.composedPath(), + i = e.includes(n._menu); + if ( + e.includes(n._element) || + ('inside' === n._config.autoClose && !i) || + ('outside' === n._config.autoClose && i) + ) + continue; + if ( + n._menu.contains(t.target) && + (('keyup' === t.type && 'Tab' === t.key) || + /input|select|option|textarea|form/i.test(t.target.tagName)) + ) + continue; + 'click' === t.type && (s.clickEvent = t); + } + n._completeHide(s); + } + } + static getParentFromElement(t) { + return n(t) || t.parentNode; + } + static dataApiKeydownHandler(t) { + if ( + /input|textarea/i.test(t.target.tagName) + ? t.key === Ke || + (t.key !== Ve && + ((t.key !== Ye && t.key !== Xe) || t.target.closest(ei))) + : !Qe.test(t.key) + ) + return; + const e = this.classList.contains(Je); + if (!e && t.key === Ve) return; + if ((t.preventDefault(), t.stopPropagation(), c(this))) return; + const i = this.matches(ti) ? this : V.prev(this, ti)[0], + n = hi.getOrCreateInstance(i); + if (t.key !== Ve) + return t.key === Xe || t.key === Ye + ? (e || n.show(), void n._selectMenuItem(t)) + : void ((e && t.key !== Ke) || hi.clearMenus()); + n.hide(); + } + } + j.on(document, Ze, ti, hi.dataApiKeydownHandler), + j.on(document, Ze, ei, hi.dataApiKeydownHandler), + j.on(document, Ge, hi.clearMenus), + j.on(document, 'keyup.bs.dropdown.data-api', hi.clearMenus), + j.on(document, Ge, ti, function (t) { + t.preventDefault(), hi.getOrCreateInstance(this).toggle(); + }), + g(hi); + const di = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + ui = '.sticky-top'; + class fi { + constructor() { + this._element = document.body; + } + getWidth() { + const t = document.documentElement.clientWidth; + return Math.abs(window.innerWidth - t); + } + hide() { + const t = this.getWidth(); + this._disableOverFlow(), + this._setElementAttributes(this._element, 'paddingRight', (e) => e + t), + this._setElementAttributes(di, 'paddingRight', (e) => e + t), + this._setElementAttributes(ui, 'marginRight', (e) => e - t); + } + _disableOverFlow() { + this._saveInitialAttribute(this._element, 'overflow'), + (this._element.style.overflow = 'hidden'); + } + _setElementAttributes(t, e, i) { + const n = this.getWidth(); + this._applyManipulationCallback(t, (t) => { + if (t !== this._element && window.innerWidth > t.clientWidth + n) + return; + this._saveInitialAttribute(t, e); + const s = window.getComputedStyle(t)[e]; + t.style[e] = `${i(Number.parseFloat(s))}px`; + }); + } + reset() { + this._resetElementAttributes(this._element, 'overflow'), + this._resetElementAttributes(this._element, 'paddingRight'), + this._resetElementAttributes(di, 'paddingRight'), + this._resetElementAttributes(ui, 'marginRight'); + } + _saveInitialAttribute(t, e) { + const i = t.style[e]; + i && U.setDataAttribute(t, e, i); + } + _resetElementAttributes(t, e) { + this._applyManipulationCallback(t, (t) => { + const i = U.getDataAttribute(t, e); + void 0 === i + ? t.style.removeProperty(e) + : (U.removeDataAttribute(t, e), (t.style[e] = i)); + }); + } + _applyManipulationCallback(t, e) { + o(t) ? e(t) : V.find(t, this._element).forEach(e); + } + isOverflowing() { + return this.getWidth() > 0; + } + } + const pi = { + className: 'modal-backdrop', + isVisible: !0, + isAnimated: !1, + rootElement: 'body', + clickCallback: null, + }, + mi = { + className: 'string', + isVisible: 'boolean', + isAnimated: 'boolean', + rootElement: '(element|string)', + clickCallback: '(function|null)', + }, + gi = 'show', + _i = 'mousedown.bs.backdrop'; + class bi { + constructor(t) { + (this._config = this._getConfig(t)), + (this._isAppended = !1), + (this._element = null); + } + show(t) { + this._config.isVisible + ? (this._append(), + this._config.isAnimated && u(this._getElement()), + this._getElement().classList.add(gi), + this._emulateAnimation(() => { + _(t); + })) + : _(t); + } + hide(t) { + this._config.isVisible + ? (this._getElement().classList.remove(gi), + this._emulateAnimation(() => { + this.dispose(), _(t); + })) + : _(t); + } + _getElement() { + if (!this._element) { + const t = document.createElement('div'); + (t.className = this._config.className), + this._config.isAnimated && t.classList.add('fade'), + (this._element = t); + } + return this._element; + } + _getConfig(t) { + return ( + ((t = { ...pi, ...('object' == typeof t ? t : {}) }).rootElement = r( + t.rootElement + )), + a('backdrop', t, mi), + t + ); + } + _append() { + this._isAppended || + (this._config.rootElement.append(this._getElement()), + j.on(this._getElement(), _i, () => { + _(this._config.clickCallback); + }), + (this._isAppended = !0)); + } + dispose() { + this._isAppended && + (j.off(this._element, _i), + this._element.remove(), + (this._isAppended = !1)); + } + _emulateAnimation(t) { + b(t, this._getElement(), this._config.isAnimated); + } + } + const vi = { trapElement: null, autofocus: !0 }, + yi = { trapElement: 'element', autofocus: 'boolean' }, + wi = '.bs.focustrap', + Ei = 'backward'; + class Ai { + constructor(t) { + (this._config = this._getConfig(t)), + (this._isActive = !1), + (this._lastTabNavDirection = null); + } + activate() { + const { trapElement: t, autofocus: e } = this._config; + this._isActive || + (e && t.focus(), + j.off(document, wi), + j.on(document, 'focusin.bs.focustrap', (t) => this._handleFocusin(t)), + j.on(document, 'keydown.tab.bs.focustrap', (t) => + this._handleKeydown(t) + ), + (this._isActive = !0)); + } + deactivate() { + this._isActive && ((this._isActive = !1), j.off(document, wi)); + } + _handleFocusin(t) { + const { target: e } = t, + { trapElement: i } = this._config; + if (e === document || e === i || i.contains(e)) return; + const n = V.focusableChildren(i); + 0 === n.length + ? i.focus() + : this._lastTabNavDirection === Ei + ? n[n.length - 1].focus() + : n[0].focus(); + } + _handleKeydown(t) { + 'Tab' === t.key && + (this._lastTabNavDirection = t.shiftKey ? Ei : 'forward'); + } + _getConfig(t) { + return ( + (t = { ...vi, ...('object' == typeof t ? t : {}) }), + a('focustrap', t, yi), + t + ); + } + } + const Ti = 'modal', + Oi = 'Escape', + Ci = { backdrop: !0, keyboard: !0, focus: !0 }, + ki = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + }, + Li = 'hidden.bs.modal', + xi = 'show.bs.modal', + Di = 'resize.bs.modal', + Si = 'click.dismiss.bs.modal', + Ni = 'keydown.dismiss.bs.modal', + Ii = 'mousedown.dismiss.bs.modal', + Pi = 'modal-open', + ji = 'show', + Mi = 'modal-static'; + class Hi extends B { + constructor(t, e) { + super(t), + (this._config = this._getConfig(e)), + (this._dialog = V.findOne('.modal-dialog', this._element)), + (this._backdrop = this._initializeBackDrop()), + (this._focustrap = this._initializeFocusTrap()), + (this._isShown = !1), + (this._ignoreBackdropClick = !1), + (this._isTransitioning = !1), + (this._scrollBar = new fi()); + } + static get Default() { + return Ci; + } + static get NAME() { + return Ti; + } + toggle(t) { + return this._isShown ? this.hide() : this.show(t); + } + show(t) { + this._isShown || + this._isTransitioning || + j.trigger(this._element, xi, { relatedTarget: t }).defaultPrevented || + ((this._isShown = !0), + this._isAnimated() && (this._isTransitioning = !0), + this._scrollBar.hide(), + document.body.classList.add(Pi), + this._adjustDialog(), + this._setEscapeEvent(), + this._setResizeEvent(), + j.on(this._dialog, Ii, () => { + j.one(this._element, 'mouseup.dismiss.bs.modal', (t) => { + t.target === this._element && (this._ignoreBackdropClick = !0); + }); + }), + this._showBackdrop(() => this._showElement(t))); + } + hide() { + if (!this._isShown || this._isTransitioning) return; + if (j.trigger(this._element, 'hide.bs.modal').defaultPrevented) return; + this._isShown = !1; + const t = this._isAnimated(); + t && (this._isTransitioning = !0), + this._setEscapeEvent(), + this._setResizeEvent(), + this._focustrap.deactivate(), + this._element.classList.remove(ji), + j.off(this._element, Si), + j.off(this._dialog, Ii), + this._queueCallback(() => this._hideModal(), this._element, t); + } + dispose() { + [window, this._dialog].forEach((t) => j.off(t, '.bs.modal')), + this._backdrop.dispose(), + this._focustrap.deactivate(), + super.dispose(); + } + handleUpdate() { + this._adjustDialog(); + } + _initializeBackDrop() { + return new bi({ + isVisible: Boolean(this._config.backdrop), + isAnimated: this._isAnimated(), + }); + } + _initializeFocusTrap() { + return new Ai({ trapElement: this._element }); + } + _getConfig(t) { + return ( + (t = { + ...Ci, + ...U.getDataAttributes(this._element), + ...('object' == typeof t ? t : {}), + }), + a(Ti, t, ki), + t + ); + } + _showElement(t) { + const e = this._isAnimated(), + i = V.findOne('.modal-body', this._dialog); + (this._element.parentNode && + this._element.parentNode.nodeType === Node.ELEMENT_NODE) || + document.body.append(this._element), + (this._element.style.display = 'block'), + this._element.removeAttribute('aria-hidden'), + this._element.setAttribute('aria-modal', !0), + this._element.setAttribute('role', 'dialog'), + (this._element.scrollTop = 0), + i && (i.scrollTop = 0), + e && u(this._element), + this._element.classList.add(ji), + this._queueCallback( + () => { + this._config.focus && this._focustrap.activate(), + (this._isTransitioning = !1), + j.trigger(this._element, 'shown.bs.modal', { relatedTarget: t }); + }, + this._dialog, + e + ); + } + _setEscapeEvent() { + this._isShown + ? j.on(this._element, Ni, (t) => { + this._config.keyboard && t.key === Oi + ? (t.preventDefault(), this.hide()) + : this._config.keyboard || + t.key !== Oi || + this._triggerBackdropTransition(); + }) + : j.off(this._element, Ni); + } + _setResizeEvent() { + this._isShown + ? j.on(window, Di, () => this._adjustDialog()) + : j.off(window, Di); + } + _hideModal() { + (this._element.style.display = 'none'), + this._element.setAttribute('aria-hidden', !0), + this._element.removeAttribute('aria-modal'), + this._element.removeAttribute('role'), + (this._isTransitioning = !1), + this._backdrop.hide(() => { + document.body.classList.remove(Pi), + this._resetAdjustments(), + this._scrollBar.reset(), + j.trigger(this._element, Li); + }); + } + _showBackdrop(t) { + j.on(this._element, Si, (t) => { + this._ignoreBackdropClick + ? (this._ignoreBackdropClick = !1) + : t.target === t.currentTarget && + (!0 === this._config.backdrop + ? this.hide() + : 'static' === this._config.backdrop && + this._triggerBackdropTransition()); + }), + this._backdrop.show(t); + } + _isAnimated() { + return this._element.classList.contains('fade'); + } + _triggerBackdropTransition() { + if (j.trigger(this._element, 'hidePrevented.bs.modal').defaultPrevented) + return; + const { classList: t, scrollHeight: e, style: i } = this._element, + n = e > document.documentElement.clientHeight; + (!n && 'hidden' === i.overflowY) || + t.contains(Mi) || + (n || (i.overflowY = 'hidden'), + t.add(Mi), + this._queueCallback(() => { + t.remove(Mi), + n || + this._queueCallback(() => { + i.overflowY = ''; + }, this._dialog); + }, this._dialog), + this._element.focus()); + } + _adjustDialog() { + const t = + this._element.scrollHeight > document.documentElement.clientHeight, + e = this._scrollBar.getWidth(), + i = e > 0; + ((!i && t && !m()) || (i && !t && m())) && + (this._element.style.paddingLeft = `${e}px`), + ((i && !t && !m()) || (!i && t && m())) && + (this._element.style.paddingRight = `${e}px`); + } + _resetAdjustments() { + (this._element.style.paddingLeft = ''), + (this._element.style.paddingRight = ''); + } + static jQueryInterface(t, e) { + return this.each(function () { + const i = Hi.getOrCreateInstance(this, t); + if ('string' == typeof t) { + if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); + i[t](e); + } + }); + } + } + j.on( + document, + 'click.bs.modal.data-api', + '[data-bs-toggle="modal"]', + function (t) { + const e = n(this); + ['A', 'AREA'].includes(this.tagName) && t.preventDefault(), + j.one(e, xi, (t) => { + t.defaultPrevented || + j.one(e, Li, () => { + l(this) && this.focus(); + }); + }); + const i = V.findOne('.modal.show'); + i && Hi.getInstance(i).hide(), Hi.getOrCreateInstance(e).toggle(this); + } + ), + R(Hi), + g(Hi); + const Bi = 'offcanvas', + Ri = { backdrop: !0, keyboard: !0, scroll: !1 }, + Wi = { backdrop: 'boolean', keyboard: 'boolean', scroll: 'boolean' }, + $i = 'show', + zi = '.offcanvas.show', + qi = 'hidden.bs.offcanvas'; + class Fi extends B { + constructor(t, e) { + super(t), + (this._config = this._getConfig(e)), + (this._isShown = !1), + (this._backdrop = this._initializeBackDrop()), + (this._focustrap = this._initializeFocusTrap()), + this._addEventListeners(); + } + static get NAME() { + return Bi; + } + static get Default() { + return Ri; + } + toggle(t) { + return this._isShown ? this.hide() : this.show(t); + } + show(t) { + this._isShown || + j.trigger(this._element, 'show.bs.offcanvas', { relatedTarget: t }) + .defaultPrevented || + ((this._isShown = !0), + (this._element.style.visibility = 'visible'), + this._backdrop.show(), + this._config.scroll || new fi().hide(), + this._element.removeAttribute('aria-hidden'), + this._element.setAttribute('aria-modal', !0), + this._element.setAttribute('role', 'dialog'), + this._element.classList.add($i), + this._queueCallback( + () => { + this._config.scroll || this._focustrap.activate(), + j.trigger(this._element, 'shown.bs.offcanvas', { + relatedTarget: t, + }); + }, + this._element, + !0 + )); + } + hide() { + this._isShown && + (j.trigger(this._element, 'hide.bs.offcanvas').defaultPrevented || + (this._focustrap.deactivate(), + this._element.blur(), + (this._isShown = !1), + this._element.classList.remove($i), + this._backdrop.hide(), + this._queueCallback( + () => { + this._element.setAttribute('aria-hidden', !0), + this._element.removeAttribute('aria-modal'), + this._element.removeAttribute('role'), + (this._element.style.visibility = 'hidden'), + this._config.scroll || new fi().reset(), + j.trigger(this._element, qi); + }, + this._element, + !0 + ))); + } + dispose() { + this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose(); + } + _getConfig(t) { + return ( + (t = { + ...Ri, + ...U.getDataAttributes(this._element), + ...('object' == typeof t ? t : {}), + }), + a(Bi, t, Wi), + t + ); + } + _initializeBackDrop() { + return new bi({ + className: 'offcanvas-backdrop', + isVisible: this._config.backdrop, + isAnimated: !0, + rootElement: this._element.parentNode, + clickCallback: () => this.hide(), + }); + } + _initializeFocusTrap() { + return new Ai({ trapElement: this._element }); + } + _addEventListeners() { + j.on(this._element, 'keydown.dismiss.bs.offcanvas', (t) => { + this._config.keyboard && 'Escape' === t.key && this.hide(); + }); + } + static jQueryInterface(t) { + return this.each(function () { + const e = Fi.getOrCreateInstance(this, t); + if ('string' == typeof t) { + if (void 0 === e[t] || t.startsWith('_') || 'constructor' === t) + throw new TypeError(`No method named "${t}"`); + e[t](this); + } + }); + } + } + j.on( + document, + 'click.bs.offcanvas.data-api', + '[data-bs-toggle="offcanvas"]', + function (t) { + const e = n(this); + if ((['A', 'AREA'].includes(this.tagName) && t.preventDefault(), c(this))) + return; + j.one(e, qi, () => { + l(this) && this.focus(); + }); + const i = V.findOne(zi); + i && i !== e && Fi.getInstance(i).hide(), + Fi.getOrCreateInstance(e).toggle(this); + } + ), + j.on(window, 'load.bs.offcanvas.data-api', () => + V.find(zi).forEach((t) => Fi.getOrCreateInstance(t).show()) + ), + R(Fi), + g(Fi); + const Ui = new Set([ + 'background', + 'cite', + 'href', + 'itemtype', + 'longdesc', + 'poster', + 'src', + 'xlink:href', + ]), + Vi = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i, + Ki = + /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i, + Xi = (t, e) => { + const i = t.nodeName.toLowerCase(); + if (e.includes(i)) + return ( + !Ui.has(i) || Boolean(Vi.test(t.nodeValue) || Ki.test(t.nodeValue)) + ); + const n = e.filter((t) => t instanceof RegExp); + for (let t = 0, e = n.length; t < e; t++) if (n[t].test(i)) return !0; + return !1; + }; + function Yi(t, e, i) { + if (!t.length) return t; + if (i && 'function' == typeof i) return i(t); + const n = new window.DOMParser().parseFromString(t, 'text/html'), + s = [].concat(...n.body.querySelectorAll('*')); + for (let t = 0, i = s.length; t < i; t++) { + const i = s[t], + n = i.nodeName.toLowerCase(); + if (!Object.keys(e).includes(n)) { + i.remove(); + continue; + } + const o = [].concat(...i.attributes), + r = [].concat(e['*'] || [], e[n] || []); + o.forEach((t) => { + Xi(t, r) || i.removeAttribute(t.nodeName); + }); + } + return n.body.innerHTML; + } + const Qi = 'tooltip', + Gi = new Set(['sanitize', 'allowList', 'sanitizeFn']), + Zi = { + animation: 'boolean', + template: 'string', + title: '(string|element|function)', + trigger: 'string', + delay: '(number|object)', + html: 'boolean', + selector: '(string|boolean)', + placement: '(string|function)', + offset: '(array|string|function)', + container: '(string|element|boolean)', + fallbackPlacements: 'array', + boundary: '(string|element)', + customClass: '(string|function)', + sanitize: 'boolean', + sanitizeFn: '(null|function)', + allowList: 'object', + popperConfig: '(null|object|function)', + }, + Ji = { + AUTO: 'auto', + TOP: 'top', + RIGHT: m() ? 'left' : 'right', + BOTTOM: 'bottom', + LEFT: m() ? 'right' : 'left', + }, + tn = { + animation: !0, + template: + '', + trigger: 'hover focus', + title: '', + delay: 0, + html: !1, + selector: !1, + placement: 'top', + offset: [0, 0], + container: !1, + fallbackPlacements: ['top', 'right', 'bottom', 'left'], + boundary: 'clippingParents', + customClass: '', + sanitize: !0, + sanitizeFn: null, + allowList: { + '*': ['class', 'dir', 'id', 'lang', 'role', /^aria-[\w-]*$/i], + a: ['target', 'href', 'title', 'rel'], + area: [], + b: [], + br: [], + col: [], + code: [], + div: [], + em: [], + hr: [], + h1: [], + h2: [], + h3: [], + h4: [], + h5: [], + h6: [], + i: [], + img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], + li: [], + ol: [], + p: [], + pre: [], + s: [], + small: [], + span: [], + sub: [], + sup: [], + strong: [], + u: [], + ul: [], + }, + popperConfig: null, + }, + en = { + HIDE: 'hide.bs.tooltip', + HIDDEN: 'hidden.bs.tooltip', + SHOW: 'show.bs.tooltip', + SHOWN: 'shown.bs.tooltip', + INSERTED: 'inserted.bs.tooltip', + CLICK: 'click.bs.tooltip', + FOCUSIN: 'focusin.bs.tooltip', + FOCUSOUT: 'focusout.bs.tooltip', + MOUSEENTER: 'mouseenter.bs.tooltip', + MOUSELEAVE: 'mouseleave.bs.tooltip', + }, + nn = 'fade', + sn = 'show', + on = 'show', + rn = 'out', + an = '.tooltip-inner', + ln = '.modal', + cn = 'hide.bs.modal', + hn = 'hover', + dn = 'focus'; + class un extends B { + constructor(t, e) { + if (void 0 === Fe) + throw new TypeError( + "Bootstrap's tooltips require Popper (https://popper.js.org)" + ); + super(t), + (this._isEnabled = !0), + (this._timeout = 0), + (this._hoverState = ''), + (this._activeTrigger = {}), + (this._popper = null), + (this._config = this._getConfig(e)), + (this.tip = null), + this._setListeners(); + } + static get Default() { + return tn; + } + static get NAME() { + return Qi; + } + static get Event() { + return en; + } + static get DefaultType() { + return Zi; + } + enable() { + this._isEnabled = !0; + } + disable() { + this._isEnabled = !1; + } + toggleEnabled() { + this._isEnabled = !this._isEnabled; + } + toggle(t) { + if (this._isEnabled) + if (t) { + const e = this._initializeOnDelegatedTarget(t); + (e._activeTrigger.click = !e._activeTrigger.click), + e._isWithActiveTrigger() ? e._enter(null, e) : e._leave(null, e); + } else { + if (this.getTipElement().classList.contains(sn)) + return void this._leave(null, this); + this._enter(null, this); + } + } + dispose() { + clearTimeout(this._timeout), + j.off(this._element.closest(ln), cn, this._hideModalHandler), + this.tip && this.tip.remove(), + this._disposePopper(), + super.dispose(); + } + show() { + if ('none' === this._element.style.display) + throw new Error('Please use show on visible elements'); + if (!this.isWithContent() || !this._isEnabled) return; + const t = j.trigger(this._element, this.constructor.Event.SHOW), + e = h(this._element), + i = + null === e + ? this._element.ownerDocument.documentElement.contains( + this._element + ) + : e.contains(this._element); + if (t.defaultPrevented || !i) return; + 'tooltip' === this.constructor.NAME && + this.tip && + this.getTitle() !== this.tip.querySelector(an).innerHTML && + (this._disposePopper(), this.tip.remove(), (this.tip = null)); + const n = this.getTipElement(), + s = ((t) => { + do { + t += Math.floor(1e6 * Math.random()); + } while (document.getElementById(t)); + return t; + })(this.constructor.NAME); + n.setAttribute('id', s), + this._element.setAttribute('aria-describedby', s), + this._config.animation && n.classList.add(nn); + const o = + 'function' == typeof this._config.placement + ? this._config.placement.call(this, n, this._element) + : this._config.placement, + r = this._getAttachment(o); + this._addAttachmentClass(r); + const { container: a } = this._config; + H.set(n, this.constructor.DATA_KEY, this), + this._element.ownerDocument.documentElement.contains(this.tip) || + (a.append(n), + j.trigger(this._element, this.constructor.Event.INSERTED)), + this._popper + ? this._popper.update() + : (this._popper = qe(this._element, n, this._getPopperConfig(r))), + n.classList.add(sn); + const l = this._resolvePossibleFunction(this._config.customClass); + l && n.classList.add(...l.split(' ')), + 'ontouchstart' in document.documentElement && + [].concat(...document.body.children).forEach((t) => { + j.on(t, 'mouseover', d); + }); + const c = this.tip.classList.contains(nn); + this._queueCallback( + () => { + const t = this._hoverState; + (this._hoverState = null), + j.trigger(this._element, this.constructor.Event.SHOWN), + t === rn && this._leave(null, this); + }, + this.tip, + c + ); + } + hide() { + if (!this._popper) return; + const t = this.getTipElement(); + if ( + j.trigger(this._element, this.constructor.Event.HIDE).defaultPrevented + ) + return; + t.classList.remove(sn), + 'ontouchstart' in document.documentElement && + [] + .concat(...document.body.children) + .forEach((t) => j.off(t, 'mouseover', d)), + (this._activeTrigger.click = !1), + (this._activeTrigger.focus = !1), + (this._activeTrigger.hover = !1); + const e = this.tip.classList.contains(nn); + this._queueCallback( + () => { + this._isWithActiveTrigger() || + (this._hoverState !== on && t.remove(), + this._cleanTipClass(), + this._element.removeAttribute('aria-describedby'), + j.trigger(this._element, this.constructor.Event.HIDDEN), + this._disposePopper()); + }, + this.tip, + e + ), + (this._hoverState = ''); + } + update() { + null !== this._popper && this._popper.update(); + } + isWithContent() { + return Boolean(this.getTitle()); + } + getTipElement() { + if (this.tip) return this.tip; + const t = document.createElement('div'); + t.innerHTML = this._config.template; + const e = t.children[0]; + return ( + this.setContent(e), e.classList.remove(nn, sn), (this.tip = e), this.tip + ); + } + setContent(t) { + this._sanitizeAndSetContent(t, this.getTitle(), an); + } + _sanitizeAndSetContent(t, e, i) { + const n = V.findOne(i, t); + e || !n ? this.setElementContent(n, e) : n.remove(); + } + setElementContent(t, e) { + if (null !== t) + return o(e) + ? ((e = r(e)), + void (this._config.html + ? e.parentNode !== t && ((t.innerHTML = ''), t.append(e)) + : (t.textContent = e.textContent))) + : void (this._config.html + ? (this._config.sanitize && + (e = Yi(e, this._config.allowList, this._config.sanitizeFn)), + (t.innerHTML = e)) + : (t.textContent = e)); + } + getTitle() { + const t = + this._element.getAttribute('data-bs-original-title') || + this._config.title; + return this._resolvePossibleFunction(t); + } + updateAttachment(t) { + return 'right' === t ? 'end' : 'left' === t ? 'start' : t; + } + _initializeOnDelegatedTarget(t, e) { + return ( + e || + this.constructor.getOrCreateInstance( + t.delegateTarget, + this._getDelegateConfig() + ) + ); + } + _getOffset() { + const { offset: t } = this._config; + return 'string' == typeof t + ? t.split(',').map((t) => Number.parseInt(t, 10)) + : 'function' == typeof t + ? (e) => t(e, this._element) + : t; + } + _resolvePossibleFunction(t) { + return 'function' == typeof t ? t.call(this._element) : t; + } + _getPopperConfig(t) { + const e = { + placement: t, + modifiers: [ + { + name: 'flip', + options: { fallbackPlacements: this._config.fallbackPlacements }, + }, + { name: 'offset', options: { offset: this._getOffset() } }, + { + name: 'preventOverflow', + options: { boundary: this._config.boundary }, + }, + { + name: 'arrow', + options: { element: `.${this.constructor.NAME}-arrow` }, + }, + { + name: 'onChange', + enabled: !0, + phase: 'afterWrite', + fn: (t) => this._handlePopperPlacementChange(t), + }, + ], + onFirstUpdate: (t) => { + t.options.placement !== t.placement && + this._handlePopperPlacementChange(t); + }, + }; + return { + ...e, + ...('function' == typeof this._config.popperConfig + ? this._config.popperConfig(e) + : this._config.popperConfig), + }; + } + _addAttachmentClass(t) { + this.getTipElement().classList.add( + `${this._getBasicClassPrefix()}-${this.updateAttachment(t)}` + ); + } + _getAttachment(t) { + return Ji[t.toUpperCase()]; + } + _setListeners() { + this._config.trigger.split(' ').forEach((t) => { + if ('click' === t) + j.on( + this._element, + this.constructor.Event.CLICK, + this._config.selector, + (t) => this.toggle(t) + ); + else if ('manual' !== t) { + const e = + t === hn + ? this.constructor.Event.MOUSEENTER + : this.constructor.Event.FOCUSIN, + i = + t === hn + ? this.constructor.Event.MOUSELEAVE + : this.constructor.Event.FOCUSOUT; + j.on(this._element, e, this._config.selector, (t) => this._enter(t)), + j.on(this._element, i, this._config.selector, (t) => + this._leave(t) + ); + } + }), + (this._hideModalHandler = () => { + this._element && this.hide(); + }), + j.on(this._element.closest(ln), cn, this._hideModalHandler), + this._config.selector + ? (this._config = { + ...this._config, + trigger: 'manual', + selector: '', + }) + : this._fixTitle(); + } + _fixTitle() { + const t = this._element.getAttribute('title'), + e = typeof this._element.getAttribute('data-bs-original-title'); + (t || 'string' !== e) && + (this._element.setAttribute('data-bs-original-title', t || ''), + !t || + this._element.getAttribute('aria-label') || + this._element.textContent || + this._element.setAttribute('aria-label', t), + this._element.setAttribute('title', '')); + } + _enter(t, e) { + (e = this._initializeOnDelegatedTarget(t, e)), + t && (e._activeTrigger['focusin' === t.type ? dn : hn] = !0), + e.getTipElement().classList.contains(sn) || e._hoverState === on + ? (e._hoverState = on) + : (clearTimeout(e._timeout), + (e._hoverState = on), + e._config.delay && e._config.delay.show + ? (e._timeout = setTimeout(() => { + e._hoverState === on && e.show(); + }, e._config.delay.show)) + : e.show()); + } + _leave(t, e) { + (e = this._initializeOnDelegatedTarget(t, e)), + t && + (e._activeTrigger['focusout' === t.type ? dn : hn] = + e._element.contains(t.relatedTarget)), + e._isWithActiveTrigger() || + (clearTimeout(e._timeout), + (e._hoverState = rn), + e._config.delay && e._config.delay.hide + ? (e._timeout = setTimeout(() => { + e._hoverState === rn && e.hide(); + }, e._config.delay.hide)) + : e.hide()); + } + _isWithActiveTrigger() { + for (const t in this._activeTrigger) + if (this._activeTrigger[t]) return !0; + return !1; + } + _getConfig(t) { + const e = U.getDataAttributes(this._element); + return ( + Object.keys(e).forEach((t) => { + Gi.has(t) && delete e[t]; + }), + ((t = { + ...this.constructor.Default, + ...e, + ...('object' == typeof t && t ? t : {}), + }).container = !1 === t.container ? document.body : r(t.container)), + 'number' == typeof t.delay && + (t.delay = { show: t.delay, hide: t.delay }), + 'number' == typeof t.title && (t.title = t.title.toString()), + 'number' == typeof t.content && (t.content = t.content.toString()), + a(Qi, t, this.constructor.DefaultType), + t.sanitize && (t.template = Yi(t.template, t.allowList, t.sanitizeFn)), + t + ); + } + _getDelegateConfig() { + const t = {}; + for (const e in this._config) + this.constructor.Default[e] !== this._config[e] && + (t[e] = this._config[e]); + return t; + } + _cleanTipClass() { + const t = this.getTipElement(), + e = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g'), + i = t.getAttribute('class').match(e); + null !== i && + i.length > 0 && + i.map((t) => t.trim()).forEach((e) => t.classList.remove(e)); + } + _getBasicClassPrefix() { + return 'bs-tooltip'; + } + _handlePopperPlacementChange(t) { + const { state: e } = t; + e && + ((this.tip = e.elements.popper), + this._cleanTipClass(), + this._addAttachmentClass(this._getAttachment(e.placement))); + } + _disposePopper() { + this._popper && (this._popper.destroy(), (this._popper = null)); + } + static jQueryInterface(t) { + return this.each(function () { + const e = un.getOrCreateInstance(this, t); + if ('string' == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + g(un); + const fn = { + ...un.Default, + placement: 'right', + offset: [0, 8], + trigger: 'click', + content: '', + template: + '', + }, + pn = { ...un.DefaultType, content: '(string|element|function)' }, + mn = { + HIDE: 'hide.bs.popover', + HIDDEN: 'hidden.bs.popover', + SHOW: 'show.bs.popover', + SHOWN: 'shown.bs.popover', + INSERTED: 'inserted.bs.popover', + CLICK: 'click.bs.popover', + FOCUSIN: 'focusin.bs.popover', + FOCUSOUT: 'focusout.bs.popover', + MOUSEENTER: 'mouseenter.bs.popover', + MOUSELEAVE: 'mouseleave.bs.popover', + }; + class gn extends un { + static get Default() { + return fn; + } + static get NAME() { + return 'popover'; + } + static get Event() { + return mn; + } + static get DefaultType() { + return pn; + } + isWithContent() { + return this.getTitle() || this._getContent(); + } + setContent(t) { + this._sanitizeAndSetContent(t, this.getTitle(), '.popover-header'), + this._sanitizeAndSetContent(t, this._getContent(), '.popover-body'); + } + _getContent() { + return this._resolvePossibleFunction(this._config.content); + } + _getBasicClassPrefix() { + return 'bs-popover'; + } + static jQueryInterface(t) { + return this.each(function () { + const e = gn.getOrCreateInstance(this, t); + if ('string' == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + g(gn); + const _n = 'scrollspy', + bn = { offset: 10, method: 'auto', target: '' }, + vn = { offset: 'number', method: 'string', target: '(string|element)' }, + yn = 'active', + wn = '.nav-link, .list-group-item, .dropdown-item', + En = 'position'; + class An extends B { + constructor(t, e) { + super(t), + (this._scrollElement = + 'BODY' === this._element.tagName ? window : this._element), + (this._config = this._getConfig(e)), + (this._offsets = []), + (this._targets = []), + (this._activeTarget = null), + (this._scrollHeight = 0), + j.on(this._scrollElement, 'scroll.bs.scrollspy', () => this._process()), + this.refresh(), + this._process(); + } + static get Default() { + return bn; + } + static get NAME() { + return _n; + } + refresh() { + const t = + this._scrollElement === this._scrollElement.window ? 'offset' : En, + e = 'auto' === this._config.method ? t : this._config.method, + n = e === En ? this._getScrollTop() : 0; + (this._offsets = []), + (this._targets = []), + (this._scrollHeight = this._getScrollHeight()), + V.find(wn, this._config.target) + .map((t) => { + const s = i(t), + o = s ? V.findOne(s) : null; + if (o) { + const t = o.getBoundingClientRect(); + if (t.width || t.height) return [U[e](o).top + n, s]; + } + return null; + }) + .filter((t) => t) + .sort((t, e) => t[0] - e[0]) + .forEach((t) => { + this._offsets.push(t[0]), this._targets.push(t[1]); + }); + } + dispose() { + j.off(this._scrollElement, '.bs.scrollspy'), super.dispose(); + } + _getConfig(t) { + return ( + ((t = { + ...bn, + ...U.getDataAttributes(this._element), + ...('object' == typeof t && t ? t : {}), + }).target = r(t.target) || document.documentElement), + a(_n, t, vn), + t + ); + } + _getScrollTop() { + return this._scrollElement === window + ? this._scrollElement.pageYOffset + : this._scrollElement.scrollTop; + } + _getScrollHeight() { + return ( + this._scrollElement.scrollHeight || + Math.max( + document.body.scrollHeight, + document.documentElement.scrollHeight + ) + ); + } + _getOffsetHeight() { + return this._scrollElement === window + ? window.innerHeight + : this._scrollElement.getBoundingClientRect().height; + } + _process() { + const t = this._getScrollTop() + this._config.offset, + e = this._getScrollHeight(), + i = this._config.offset + e - this._getOffsetHeight(); + if ((this._scrollHeight !== e && this.refresh(), t >= i)) { + const t = this._targets[this._targets.length - 1]; + this._activeTarget !== t && this._activate(t); + } else { + if (this._activeTarget && t < this._offsets[0] && this._offsets[0] > 0) + return (this._activeTarget = null), void this._clear(); + for (let e = this._offsets.length; e--; ) + this._activeTarget !== this._targets[e] && + t >= this._offsets[e] && + (void 0 === this._offsets[e + 1] || t < this._offsets[e + 1]) && + this._activate(this._targets[e]); + } + } + _activate(t) { + (this._activeTarget = t), this._clear(); + const e = wn + .split(',') + .map((e) => `${e}[data-bs-target="${t}"],${e}[href="${t}"]`), + i = V.findOne(e.join(','), this._config.target); + i.classList.add(yn), + i.classList.contains('dropdown-item') + ? V.findOne('.dropdown-toggle', i.closest('.dropdown')).classList.add( + yn + ) + : V.parents(i, '.nav, .list-group').forEach((t) => { + V.prev(t, '.nav-link, .list-group-item').forEach((t) => + t.classList.add(yn) + ), + V.prev(t, '.nav-item').forEach((t) => { + V.children(t, '.nav-link').forEach((t) => + t.classList.add(yn) + ); + }); + }), + j.trigger(this._scrollElement, 'activate.bs.scrollspy', { + relatedTarget: t, + }); + } + _clear() { + V.find(wn, this._config.target) + .filter((t) => t.classList.contains(yn)) + .forEach((t) => t.classList.remove(yn)); + } + static jQueryInterface(t) { + return this.each(function () { + const e = An.getOrCreateInstance(this, t); + if ('string' == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + j.on(window, 'load.bs.scrollspy.data-api', () => { + V.find('[data-bs-spy="scroll"]').forEach((t) => new An(t)); + }), + g(An); + const Tn = 'active', + On = 'fade', + Cn = 'show', + kn = '.active', + Ln = ':scope > li > .active'; + class xn extends B { + static get NAME() { + return 'tab'; + } + show() { + if ( + this._element.parentNode && + this._element.parentNode.nodeType === Node.ELEMENT_NODE && + this._element.classList.contains(Tn) + ) + return; + let t; + const e = n(this._element), + i = this._element.closest('.nav, .list-group'); + if (i) { + const e = 'UL' === i.nodeName || 'OL' === i.nodeName ? Ln : kn; + (t = V.find(e, i)), (t = t[t.length - 1]); + } + const s = t + ? j.trigger(t, 'hide.bs.tab', { relatedTarget: this._element }) + : null; + if ( + j.trigger(this._element, 'show.bs.tab', { relatedTarget: t }) + .defaultPrevented || + (null !== s && s.defaultPrevented) + ) + return; + this._activate(this._element, i); + const o = () => { + j.trigger(t, 'hidden.bs.tab', { relatedTarget: this._element }), + j.trigger(this._element, 'shown.bs.tab', { relatedTarget: t }); + }; + e ? this._activate(e, e.parentNode, o) : o(); + } + _activate(t, e, i) { + const n = ( + !e || ('UL' !== e.nodeName && 'OL' !== e.nodeName) + ? V.children(e, kn) + : V.find(Ln, e) + )[0], + s = i && n && n.classList.contains(On), + o = () => this._transitionComplete(t, n, i); + n && s ? (n.classList.remove(Cn), this._queueCallback(o, t, !0)) : o(); + } + _transitionComplete(t, e, i) { + if (e) { + e.classList.remove(Tn); + const t = V.findOne(':scope > .dropdown-menu .active', e.parentNode); + t && t.classList.remove(Tn), + 'tab' === e.getAttribute('role') && + e.setAttribute('aria-selected', !1); + } + t.classList.add(Tn), + 'tab' === t.getAttribute('role') && t.setAttribute('aria-selected', !0), + u(t), + t.classList.contains(On) && t.classList.add(Cn); + let n = t.parentNode; + if ( + (n && 'LI' === n.nodeName && (n = n.parentNode), + n && n.classList.contains('dropdown-menu')) + ) { + const e = t.closest('.dropdown'); + e && V.find('.dropdown-toggle', e).forEach((t) => t.classList.add(Tn)), + t.setAttribute('aria-expanded', !0); + } + i && i(); + } + static jQueryInterface(t) { + return this.each(function () { + const e = xn.getOrCreateInstance(this); + if ('string' == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + j.on( + document, + 'click.bs.tab.data-api', + '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]', + function (t) { + ['A', 'AREA'].includes(this.tagName) && t.preventDefault(), + c(this) || xn.getOrCreateInstance(this).show(); + } + ), + g(xn); + const Dn = 'toast', + Sn = 'hide', + Nn = 'show', + In = 'showing', + Pn = { animation: 'boolean', autohide: 'boolean', delay: 'number' }, + jn = { animation: !0, autohide: !0, delay: 5e3 }; + class Mn extends B { + constructor(t, e) { + super(t), + (this._config = this._getConfig(e)), + (this._timeout = null), + (this._hasMouseInteraction = !1), + (this._hasKeyboardInteraction = !1), + this._setListeners(); + } + static get DefaultType() { + return Pn; + } + static get Default() { + return jn; + } + static get NAME() { + return Dn; + } + show() { + j.trigger(this._element, 'show.bs.toast').defaultPrevented || + (this._clearTimeout(), + this._config.animation && this._element.classList.add('fade'), + this._element.classList.remove(Sn), + u(this._element), + this._element.classList.add(Nn), + this._element.classList.add(In), + this._queueCallback( + () => { + this._element.classList.remove(In), + j.trigger(this._element, 'shown.bs.toast'), + this._maybeScheduleHide(); + }, + this._element, + this._config.animation + )); + } + hide() { + this._element.classList.contains(Nn) && + (j.trigger(this._element, 'hide.bs.toast').defaultPrevented || + (this._element.classList.add(In), + this._queueCallback( + () => { + this._element.classList.add(Sn), + this._element.classList.remove(In), + this._element.classList.remove(Nn), + j.trigger(this._element, 'hidden.bs.toast'); + }, + this._element, + this._config.animation + ))); + } + dispose() { + this._clearTimeout(), + this._element.classList.contains(Nn) && + this._element.classList.remove(Nn), + super.dispose(); + } + _getConfig(t) { + return ( + (t = { + ...jn, + ...U.getDataAttributes(this._element), + ...('object' == typeof t && t ? t : {}), + }), + a(Dn, t, this.constructor.DefaultType), + t + ); + } + _maybeScheduleHide() { + this._config.autohide && + (this._hasMouseInteraction || + this._hasKeyboardInteraction || + (this._timeout = setTimeout(() => { + this.hide(); + }, this._config.delay))); + } + _onInteraction(t, e) { + switch (t.type) { + case 'mouseover': + case 'mouseout': + this._hasMouseInteraction = e; + break; + case 'focusin': + case 'focusout': + this._hasKeyboardInteraction = e; + } + if (e) return void this._clearTimeout(); + const i = t.relatedTarget; + this._element === i || + this._element.contains(i) || + this._maybeScheduleHide(); + } + _setListeners() { + j.on(this._element, 'mouseover.bs.toast', (t) => + this._onInteraction(t, !0) + ), + j.on(this._element, 'mouseout.bs.toast', (t) => + this._onInteraction(t, !1) + ), + j.on(this._element, 'focusin.bs.toast', (t) => + this._onInteraction(t, !0) + ), + j.on(this._element, 'focusout.bs.toast', (t) => + this._onInteraction(t, !1) + ); + } + _clearTimeout() { + clearTimeout(this._timeout), (this._timeout = null); + } + static jQueryInterface(t) { + return this.each(function () { + const e = Mn.getOrCreateInstance(this, t); + if ('string' == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](this); + } + }); + } + } + return ( + R(Mn), + g(Mn), + { + Alert: W, + Button: z, + Carousel: st, + Collapse: pt, + Dropdown: hi, + Modal: Hi, + Offcanvas: Fi, + Popover: gn, + ScrollSpy: An, + Tab: xn, + Toast: Mn, + Tooltip: un, + } + ); +}); +//# sourceMappingURL=bootstrap.bundle.min.js.map diff --git a/data/htdocs/www/js/errorpages/homepage.js b/data/htdocs/www/js/errorpages/homepage.js new file mode 100644 index 0000000..bd3925d --- /dev/null +++ b/data/htdocs/www/js/errorpages/homepage.js @@ -0,0 +1,6 @@ +function homepage() { + let proto = location.protocol; + let port = location.port; + let currentSite = window.location.hostname; + window.location = proto + '//' + currentSite + ':' + port; +} diff --git a/data/htdocs/www/js/errorpages/isup.js b/data/htdocs/www/js/errorpages/isup.js new file mode 100644 index 0000000..60a653f --- /dev/null +++ b/data/htdocs/www/js/errorpages/isup.js @@ -0,0 +1,7 @@ +function isupme() { + let proto = location.protocol; + let port = location.port; + let currentSite = window.location.hostname; + fullurllocation = proto + '//' + currentSite + ':' + port; + window.location = 'http://isup.me/' + fullurllocation; +} diff --git a/data/htdocs/www/js/errorpages/loaddomain.js b/data/htdocs/www/js/errorpages/loaddomain.js new file mode 100644 index 0000000..067ac9e --- /dev/null +++ b/data/htdocs/www/js/errorpages/loaddomain.js @@ -0,0 +1,7 @@ +function loadDomain() { + let proto = location.protocol; + let port = location.port; + let url = location.hostname; + var display = document.getElementById('display-domain'); + display.innerHTML = proto + '//' + url + ':' + port; +} diff --git a/data/htdocs/www/js/errorpages/scale.fix.js b/data/htdocs/www/js/errorpages/scale.fix.js new file mode 100644 index 0000000..33fb0d4 --- /dev/null +++ b/data/htdocs/www/js/errorpages/scale.fix.js @@ -0,0 +1,20 @@ +var metas = document.getElementsByTagName('meta'); +var i; +if (navigator.userAgent.match(/iPhone/i)) { + for (i = 0; i < metas.length; i++) { + if (metas[i].name == 'viewport') { + metas[i].content = + 'width=device-width, minimum-scale=1.0, maximum-scale=1.0'; + } + } + document.addEventListener('gesturestart', gestureStart, false); +} + +function gestureStart() { + for (i = 0; i < metas.length; i++) { + if (metas[i].name == 'viewport') { + metas[i].content = + 'width=device-width, minimum-scale=0.25, maximum-scale=1.6'; + } + } +} diff --git a/data/htdocs/www/js/jquery/default.js b/data/htdocs/www/js/jquery/default.js new file mode 100644 index 0000000..d47405a --- /dev/null +++ b/data/htdocs/www/js/jquery/default.js @@ -0,0 +1,5540 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!(function (e, t) { + "use strict"; + "object" == typeof module && "object" == typeof module.exports + ? (module.exports = e.document + ? t(e, !0) + : function (e) { + if (!e.document) + throw new Error("jQuery requires a window with a document"); + return t(e); + }) + : t(e); +})("undefined" != typeof window ? window : this, function (C, e) { + "use strict"; + var t = [], + r = Object.getPrototypeOf, + s = t.slice, + g = t.flat + ? function (e) { + return t.flat.call(e); + } + : function (e) { + return t.concat.apply([], e); + }, + u = t.push, + i = t.indexOf, + n = {}, + o = n.toString, + v = n.hasOwnProperty, + a = v.toString, + l = a.call(Object), + y = {}, + m = function (e) { + return "function" == typeof e && "number" != typeof e.nodeType; + }, + x = function (e) { + return null != e && e === e.window; + }, + E = C.document, + c = { type: !0, src: !0, nonce: !0, noModule: !0 }; + function b(e, t, n) { + var r, + i, + o = (n = n || E).createElement("script"); + if (((o.text = e), t)) + for (r in c) + (i = t[r] || (t.getAttribute && t.getAttribute(r))) && + o.setAttribute(r, i); + n.head.appendChild(o).parentNode.removeChild(o); + } + function w(e) { + return null == e + ? e + "" + : "object" == typeof e || "function" == typeof e + ? n[o.call(e)] || "object" + : typeof e; + } + var f = "3.5.1", + S = function (e, t) { + return new S.fn.init(e, t); + }; + function p(e) { + var t = !!e && "length" in e && e.length, + n = w(e); + return ( + !m(e) && + !x(e) && + ("array" === n || + 0 === t || + ("number" == typeof t && 0 < t && t - 1 in e)) + ); + } + (S.fn = S.prototype = { + jquery: f, + constructor: S, + length: 0, + toArray: function () { + return s.call(this); + }, + get: function (e) { + return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e]; + }, + pushStack: function (e) { + var t = S.merge(this.constructor(), e); + return (t.prevObject = this), t; + }, + each: function (e) { + return S.each(this, e); + }, + map: function (n) { + return this.pushStack( + S.map(this, function (e, t) { + return n.call(e, t, e); + }) + ); + }, + slice: function () { + return this.pushStack(s.apply(this, arguments)); + }, + first: function () { + return this.eq(0); + }, + last: function () { + return this.eq(-1); + }, + even: function () { + return this.pushStack( + S.grep(this, function (e, t) { + return (t + 1) % 2; + }) + ); + }, + odd: function () { + return this.pushStack( + S.grep(this, function (e, t) { + return t % 2; + }) + ); + }, + eq: function (e) { + var t = this.length, + n = +e + (e < 0 ? t : 0); + return this.pushStack(0 <= n && n < t ? [this[n]] : []); + }, + end: function () { + return this.prevObject || this.constructor(); + }, + push: u, + sort: t.sort, + splice: t.splice, + }), + (S.extend = S.fn.extend = function () { + var e, + t, + n, + r, + i, + o, + a = arguments[0] || {}, + s = 1, + u = arguments.length, + l = !1; + for ( + "boolean" == typeof a && ((l = a), (a = arguments[s] || {}), s++), + "object" == typeof a || m(a) || (a = {}), + s === u && ((a = this), s--); + s < u; + s++ + ) + if (null != (e = arguments[s])) + for (t in e) + (r = e[t]), + "__proto__" !== t && + a !== r && + (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) + ? ((n = a[t]), + (o = + i && !Array.isArray(n) + ? [] + : i || S.isPlainObject(n) + ? n + : {}), + (i = !1), + (a[t] = S.extend(l, o, r))) + : void 0 !== r && (a[t] = r)); + return a; + }), + S.extend({ + expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""), + isReady: !0, + error: function (e) { + throw new Error(e); + }, + noop: function () {}, + isPlainObject: function (e) { + var t, n; + return ( + !(!e || "[object Object]" !== o.call(e)) && + (!(t = r(e)) || + ("function" == + typeof (n = v.call(t, "constructor") && t.constructor) && + a.call(n) === l)) + ); + }, + isEmptyObject: function (e) { + var t; + for (t in e) return !1; + return !0; + }, + globalEval: function (e, t, n) { + b(e, { nonce: t && t.nonce }, n); + }, + each: function (e, t) { + var n, + r = 0; + if (p(e)) { + for (n = e.length; r < n; r++) + if (!1 === t.call(e[r], r, e[r])) break; + } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; + return e; + }, + makeArray: function (e, t) { + var n = t || []; + return ( + null != e && + (p(Object(e)) + ? S.merge(n, "string" == typeof e ? [e] : e) + : u.call(n, e)), + n + ); + }, + inArray: function (e, t, n) { + return null == t ? -1 : i.call(t, e, n); + }, + merge: function (e, t) { + for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r]; + return (e.length = i), e; + }, + grep: function (e, t, n) { + for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) + !t(e[i], i) !== a && r.push(e[i]); + return r; + }, + map: function (e, t, n) { + var r, + i, + o = 0, + a = []; + if (p(e)) + for (r = e.length; o < r; o++) + null != (i = t(e[o], o, n)) && a.push(i); + else for (o in e) null != (i = t(e[o], o, n)) && a.push(i); + return g(a); + }, + guid: 1, + support: y, + }), + "function" == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), + S.each( + "Boolean Number String Function Array Date RegExp Object Error Symbol".split( + " " + ), + function (e, t) { + n["[object " + t + "]"] = t.toLowerCase(); + } + ); + var d = (function (n) { + var e, + d, + b, + o, + i, + h, + f, + g, + w, + u, + l, + T, + C, + a, + E, + v, + s, + c, + y, + S = "sizzle" + 1 * new Date(), + p = n.document, + k = 0, + r = 0, + m = ue(), + x = ue(), + A = ue(), + N = ue(), + D = function (e, t) { + return e === t && (l = !0), 0; + }, + j = {}.hasOwnProperty, + t = [], + q = t.pop, + L = t.push, + H = t.push, + O = t.slice, + P = function (e, t) { + for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n; + return -1; + }, + R = + "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + M = "[\\x20\\t\\r\\n\\f]", + I = + "(?:\\\\[\\da-fA-F]{1,6}" + + M + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + W = + "\\[" + + M + + "*(" + + I + + ")(?:" + + M + + "*([*^$|!~]?=)" + + M + + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + + I + + "))|)" + + M + + "*\\]", + F = + ":(" + + I + + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + + W + + ")*)|.*)\\)|)", + B = new RegExp(M + "+", "g"), + $ = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"), + _ = new RegExp("^" + M + "*," + M + "*"), + z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"), + U = new RegExp(M + "|>"), + X = new RegExp(F), + V = new RegExp("^" + I + "$"), + G = { + ID: new RegExp("^#(" + I + ")"), + CLASS: new RegExp("^\\.(" + I + ")"), + TAG: new RegExp("^(" + I + "|[*])"), + ATTR: new RegExp("^" + W), + PSEUDO: new RegExp("^" + F), + CHILD: new RegExp( + "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + M + + "*(even|odd|(([+-]|)(\\d*)n|)" + + M + + "*(?:([+-]|)" + + M + + "*(\\d+)|))" + + M + + "*\\)|)", + "i" + ), + bool: new RegExp("^(?:" + R + ")$", "i"), + needsContext: new RegExp( + "^" + + M + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + M + + "*((?:-\\d)?\\d*)" + + M + + "*\\)|)(?=[^-]|$)", + "i" + ), + }, + Y = /HTML$/i, + Q = /^(?:input|select|textarea|button)$/i, + J = /^h\d$/i, + K = /^[^{]+\{\s*\[native \w/, + Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + ee = /[+~]/, + te = new RegExp("\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\([^\\r\\n\\f])", "g"), + ne = function (e, t) { + var n = "0x" + e.slice(1) - 65536; + return ( + t || + (n < 0 + ? String.fromCharCode(n + 65536) + : String.fromCharCode((n >> 10) | 55296, (1023 & n) | 56320)) + ); + }, + re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + ie = function (e, t) { + return t + ? "\0" === e + ? "\ufffd" + : e.slice(0, -1) + + "\\" + + e.charCodeAt(e.length - 1).toString(16) + + " " + : "\\" + e; + }, + oe = function () { + T(); + }, + ae = be( + function (e) { + return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase(); + }, + { dir: "parentNode", next: "legend" } + ); + try { + H.apply((t = O.call(p.childNodes)), p.childNodes), + t[p.childNodes.length].nodeType; + } catch (e) { + H = { + apply: t.length + ? function (e, t) { + L.apply(e, O.call(t)); + } + : function (e, t) { + var n = e.length, + r = 0; + while ((e[n++] = t[r++])); + e.length = n - 1; + }, + }; + } + function se(t, e, n, r) { + var i, + o, + a, + s, + u, + l, + c, + f = e && e.ownerDocument, + p = e ? e.nodeType : 9; + if ( + ((n = n || []), + "string" != typeof t || !t || (1 !== p && 9 !== p && 11 !== p)) + ) + return n; + if (!r && (T(e), (e = e || C), E)) { + if (11 !== p && (u = Z.exec(t))) + if ((i = u[1])) { + if (9 === p) { + if (!(a = e.getElementById(i))) return n; + if (a.id === i) return n.push(a), n; + } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) + return n.push(a), n; + } else { + if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n; + if ( + (i = u[3]) && + d.getElementsByClassName && + e.getElementsByClassName + ) + return H.apply(n, e.getElementsByClassName(i)), n; + } + if ( + d.qsa && + !N[t + " "] && + (!v || !v.test(t)) && + (1 !== p || "object" !== e.nodeName.toLowerCase()) + ) { + if (((c = t), (f = e), 1 === p && (U.test(t) || z.test(t)))) { + ((f = (ee.test(t) && ye(e.parentNode)) || e) === e && d.scope) || + ((s = e.getAttribute("id")) + ? (s = s.replace(re, ie)) + : e.setAttribute("id", (s = S))), + (o = (l = h(t)).length); + while (o--) l[o] = (s ? "#" + s : ":scope") + " " + xe(l[o]); + c = l.join(","); + } + try { + return H.apply(n, f.querySelectorAll(c)), n; + } catch (e) { + N(t, !0); + } finally { + s === S && e.removeAttribute("id"); + } + } + } + return g(t.replace($, "$1"), e, n, r); + } + function ue() { + var r = []; + return function e(t, n) { + return ( + r.push(t + " ") > b.cacheLength && delete e[r.shift()], + (e[t + " "] = n) + ); + }; + } + function le(e) { + return (e[S] = !0), e; + } + function ce(e) { + var t = C.createElement("fieldset"); + try { + return !!e(t); + } catch (e) { + return !1; + } finally { + t.parentNode && t.parentNode.removeChild(t), (t = null); + } + } + function fe(e, t) { + var n = e.split("|"), + r = n.length; + while (r--) b.attrHandle[n[r]] = t; + } + function pe(e, t) { + var n = t && e, + r = + n && + 1 === e.nodeType && + 1 === t.nodeType && + e.sourceIndex - t.sourceIndex; + if (r) return r; + if (n) while ((n = n.nextSibling)) if (n === t) return -1; + return e ? 1 : -1; + } + function de(t) { + return function (e) { + return "input" === e.nodeName.toLowerCase() && e.type === t; + }; + } + function he(n) { + return function (e) { + var t = e.nodeName.toLowerCase(); + return ("input" === t || "button" === t) && e.type === n; + }; + } + function ge(t) { + return function (e) { + return "form" in e + ? e.parentNode && !1 === e.disabled + ? "label" in e + ? "label" in e.parentNode + ? e.parentNode.disabled === t + : e.disabled === t + : e.isDisabled === t || (e.isDisabled !== !t && ae(e) === t) + : e.disabled === t + : "label" in e && e.disabled === t; + }; + } + function ve(a) { + return le(function (o) { + return ( + (o = +o), + le(function (e, t) { + var n, + r = a([], e.length, o), + i = r.length; + while (i--) e[(n = r[i])] && (e[n] = !(t[n] = e[n])); + }) + ); + }); + } + function ye(e) { + return e && "undefined" != typeof e.getElementsByTagName && e; + } + for (e in ((d = se.support = {}), + (i = se.isXML = function (e) { + var t = e.namespaceURI, + n = (e.ownerDocument || e).documentElement; + return !Y.test(t || (n && n.nodeName) || "HTML"); + }), + (T = se.setDocument = function (e) { + var t, + n, + r = e ? e.ownerDocument || e : p; + return ( + r != C && + 9 === r.nodeType && + r.documentElement && + ((a = (C = r).documentElement), + (E = !i(C)), + p != C && + (n = C.defaultView) && + n.top !== n && + (n.addEventListener + ? n.addEventListener("unload", oe, !1) + : n.attachEvent && n.attachEvent("onunload", oe)), + (d.scope = ce(function (e) { + return ( + a.appendChild(e).appendChild(C.createElement("div")), + "undefined" != typeof e.querySelectorAll && + !e.querySelectorAll(":scope fieldset div").length + ); + })), + (d.attributes = ce(function (e) { + return (e.className = "i"), !e.getAttribute("className"); + })), + (d.getElementsByTagName = ce(function (e) { + return ( + e.appendChild(C.createComment("")), + !e.getElementsByTagName("*").length + ); + })), + (d.getElementsByClassName = K.test(C.getElementsByClassName)), + (d.getById = ce(function (e) { + return ( + (a.appendChild(e).id = S), + !C.getElementsByName || !C.getElementsByName(S).length + ); + })), + d.getById + ? ((b.filter.ID = function (e) { + var t = e.replace(te, ne); + return function (e) { + return e.getAttribute("id") === t; + }; + }), + (b.find.ID = function (e, t) { + if ("undefined" != typeof t.getElementById && E) { + var n = t.getElementById(e); + return n ? [n] : []; + } + })) + : ((b.filter.ID = function (e) { + var n = e.replace(te, ne); + return function (e) { + var t = + "undefined" != typeof e.getAttributeNode && + e.getAttributeNode("id"); + return t && t.value === n; + }; + }), + (b.find.ID = function (e, t) { + if ("undefined" != typeof t.getElementById && E) { + var n, + r, + i, + o = t.getElementById(e); + if (o) { + if ((n = o.getAttributeNode("id")) && n.value === e) + return [o]; + (i = t.getElementsByName(e)), (r = 0); + while ((o = i[r++])) + if ((n = o.getAttributeNode("id")) && n.value === e) + return [o]; + } + return []; + } + })), + (b.find.TAG = d.getElementsByTagName + ? function (e, t) { + return "undefined" != typeof t.getElementsByTagName + ? t.getElementsByTagName(e) + : d.qsa + ? t.querySelectorAll(e) + : void 0; + } + : function (e, t) { + var n, + r = [], + i = 0, + o = t.getElementsByTagName(e); + if ("*" === e) { + while ((n = o[i++])) 1 === n.nodeType && r.push(n); + return r; + } + return o; + }), + (b.find.CLASS = + d.getElementsByClassName && + function (e, t) { + if ("undefined" != typeof t.getElementsByClassName && E) + return t.getElementsByClassName(e); + }), + (s = []), + (v = []), + (d.qsa = K.test(C.querySelectorAll)) && + (ce(function (e) { + var t; + (a.appendChild(e).innerHTML = + "
"), + e.querySelectorAll("[msallowcapture^='']").length && + v.push("[*^$]=" + M + "*(?:''|\"\")"), + e.querySelectorAll("[selected]").length || + v.push("\\[" + M + "*(?:value|" + R + ")"), + e.querySelectorAll("[id~=" + S + "-]").length || v.push("~="), + (t = C.createElement("input")).setAttribute("name", ""), + e.appendChild(t), + e.querySelectorAll("[name='']").length || + v.push("\\[" + M + "*name" + M + "*=" + M + "*(?:''|\"\")"), + e.querySelectorAll(":checked").length || v.push(":checked"), + e.querySelectorAll("a#" + S + "+*").length || + v.push(".#.+[+~]"), + e.querySelectorAll("\\\f"), + v.push("[\\r\\n\\f]"); + }), + ce(function (e) { + e.innerHTML = + ""; + var t = C.createElement("input"); + t.setAttribute("type", "hidden"), + e.appendChild(t).setAttribute("name", "D"), + e.querySelectorAll("[name=d]").length && + v.push("name" + M + "*[*^$|!~]?="), + 2 !== e.querySelectorAll(":enabled").length && + v.push(":enabled", ":disabled"), + (a.appendChild(e).disabled = !0), + 2 !== e.querySelectorAll(":disabled").length && + v.push(":enabled", ":disabled"), + e.querySelectorAll("*,:x"), + v.push(",.*:"); + })), + (d.matchesSelector = K.test( + (c = + a.matches || + a.webkitMatchesSelector || + a.mozMatchesSelector || + a.oMatchesSelector || + a.msMatchesSelector) + )) && + ce(function (e) { + (d.disconnectedMatch = c.call(e, "*")), + c.call(e, "[s!='']:x"), + s.push("!=", F); + }), + (v = v.length && new RegExp(v.join("|"))), + (s = s.length && new RegExp(s.join("|"))), + (t = K.test(a.compareDocumentPosition)), + (y = + t || K.test(a.contains) + ? function (e, t) { + var n = 9 === e.nodeType ? e.documentElement : e, + r = t && t.parentNode; + return ( + e === r || + !( + !r || + 1 !== r.nodeType || + !(n.contains + ? n.contains(r) + : e.compareDocumentPosition && + 16 & e.compareDocumentPosition(r)) + ) + ); + } + : function (e, t) { + if (t) while ((t = t.parentNode)) if (t === e) return !0; + return !1; + }), + (D = t + ? function (e, t) { + if (e === t) return (l = !0), 0; + var n = !e.compareDocumentPosition - !t.compareDocumentPosition; + return ( + n || + (1 & + (n = + (e.ownerDocument || e) == (t.ownerDocument || t) + ? e.compareDocumentPosition(t) + : 1) || + (!d.sortDetached && t.compareDocumentPosition(e) === n) + ? e == C || (e.ownerDocument == p && y(p, e)) + ? -1 + : t == C || (t.ownerDocument == p && y(p, t)) + ? 1 + : u + ? P(u, e) - P(u, t) + : 0 + : 4 & n + ? -1 + : 1) + ); + } + : function (e, t) { + if (e === t) return (l = !0), 0; + var n, + r = 0, + i = e.parentNode, + o = t.parentNode, + a = [e], + s = [t]; + if (!i || !o) + return e == C + ? -1 + : t == C + ? 1 + : i + ? -1 + : o + ? 1 + : u + ? P(u, e) - P(u, t) + : 0; + if (i === o) return pe(e, t); + n = e; + while ((n = n.parentNode)) a.unshift(n); + n = t; + while ((n = n.parentNode)) s.unshift(n); + while (a[r] === s[r]) r++; + return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0; + })), + C + ); + }), + (se.matches = function (e, t) { + return se(e, null, null, t); + }), + (se.matchesSelector = function (e, t) { + if ( + (T(e), + d.matchesSelector && + E && + !N[t + " "] && + (!s || !s.test(t)) && + (!v || !v.test(t))) + ) + try { + var n = c.call(e, t); + if ( + n || + d.disconnectedMatch || + (e.document && 11 !== e.document.nodeType) + ) + return n; + } catch (e) { + N(t, !0); + } + return 0 < se(t, C, null, [e]).length; + }), + (se.contains = function (e, t) { + return (e.ownerDocument || e) != C && T(e), y(e, t); + }), + (se.attr = function (e, t) { + (e.ownerDocument || e) != C && T(e); + var n = b.attrHandle[t.toLowerCase()], + r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0; + return void 0 !== r + ? r + : d.attributes || !E + ? e.getAttribute(t) + : (r = e.getAttributeNode(t)) && r.specified + ? r.value + : null; + }), + (se.escape = function (e) { + return (e + "").replace(re, ie); + }), + (se.error = function (e) { + throw new Error("Syntax error, unrecognized expression: " + e); + }), + (se.uniqueSort = function (e) { + var t, + n = [], + r = 0, + i = 0; + if ( + ((l = !d.detectDuplicates), + (u = !d.sortStable && e.slice(0)), + e.sort(D), + l) + ) { + while ((t = e[i++])) t === e[i] && (r = n.push(i)); + while (r--) e.splice(n[r], 1); + } + return (u = null), e; + }), + (o = se.getText = function (e) { + var t, + n = "", + r = 0, + i = e.nodeType; + if (i) { + if (1 === i || 9 === i || 11 === i) { + if ("string" == typeof e.textContent) return e.textContent; + for (e = e.firstChild; e; e = e.nextSibling) n += o(e); + } else if (3 === i || 4 === i) return e.nodeValue; + } else while ((t = e[r++])) n += o(t); + return n; + }), + ((b = se.selectors = { + cacheLength: 50, + createPseudo: le, + match: G, + attrHandle: {}, + find: {}, + relative: { + ">": { dir: "parentNode", first: !0 }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: !0 }, + "~": { dir: "previousSibling" }, + }, + preFilter: { + ATTR: function (e) { + return ( + (e[1] = e[1].replace(te, ne)), + (e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne)), + "~=" === e[2] && (e[3] = " " + e[3] + " "), + e.slice(0, 4) + ); + }, + CHILD: function (e) { + return ( + (e[1] = e[1].toLowerCase()), + "nth" === e[1].slice(0, 3) + ? (e[3] || se.error(e[0]), + (e[4] = +(e[4] + ? e[5] + (e[6] || 1) + : 2 * ("even" === e[3] || "odd" === e[3]))), + (e[5] = +(e[7] + e[8] || "odd" === e[3]))) + : e[3] && se.error(e[0]), + e + ); + }, + PSEUDO: function (e) { + var t, + n = !e[6] && e[2]; + return G.CHILD.test(e[0]) + ? null + : (e[3] + ? (e[2] = e[4] || e[5] || "") + : n && + X.test(n) && + (t = h(n, !0)) && + (t = n.indexOf(")", n.length - t) - n.length) && + ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))), + e.slice(0, 3)); + }, + }, + filter: { + TAG: function (e) { + var t = e.replace(te, ne).toLowerCase(); + return "*" === e + ? function () { + return !0; + } + : function (e) { + return e.nodeName && e.nodeName.toLowerCase() === t; + }; + }, + CLASS: function (e) { + var t = m[e + " "]; + return ( + t || + ((t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && + m(e, function (e) { + return t.test( + ("string" == typeof e.className && e.className) || + ("undefined" != typeof e.getAttribute && + e.getAttribute("class")) || + "" + ); + })) + ); + }, + ATTR: function (n, r, i) { + return function (e) { + var t = se.attr(e, n); + return null == t + ? "!=" === r + : !r || + ((t += ""), + "=" === r + ? t === i + : "!=" === r + ? t !== i + : "^=" === r + ? i && 0 === t.indexOf(i) + : "*=" === r + ? i && -1 < t.indexOf(i) + : "$=" === r + ? i && t.slice(-i.length) === i + : "~=" === r + ? -1 < (" " + t.replace(B, " ") + " ").indexOf(i) + : "|=" === r && + (t === i || t.slice(0, i.length + 1) === i + "-")); + }; + }, + CHILD: function (h, e, t, g, v) { + var y = "nth" !== h.slice(0, 3), + m = "last" !== h.slice(-4), + x = "of-type" === e; + return 1 === g && 0 === v + ? function (e) { + return !!e.parentNode; + } + : function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l = y !== m ? "nextSibling" : "previousSibling", + c = e.parentNode, + f = x && e.nodeName.toLowerCase(), + p = !n && !x, + d = !1; + if (c) { + if (y) { + while (l) { + a = e; + while ((a = a[l])) + if ( + x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType + ) + return !1; + u = l = "only" === h && !u && "nextSibling"; + } + return !0; + } + if (((u = [m ? c.firstChild : c.lastChild]), m && p)) { + (d = + (s = + (r = + (i = + (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && + r[2]), + (a = s && c.childNodes[s]); + while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop())) + if (1 === a.nodeType && ++d && a === e) { + i[h] = [k, s, d]; + break; + } + } else if ( + (p && + (d = s = + (r = + (i = + (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), + !1 === d) + ) + while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop())) + if ( + (x + ? a.nodeName.toLowerCase() === f + : 1 === a.nodeType) && + ++d && + (p && + ((i = + (o = a[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] = [k, d]), + a === e) + ) + break; + return (d -= v) === g || (d % g == 0 && 0 <= d / g); + } + }; + }, + PSEUDO: function (e, o) { + var t, + a = + b.pseudos[e] || + b.setFilters[e.toLowerCase()] || + se.error("unsupported pseudo: " + e); + return a[S] + ? a(o) + : 1 < a.length + ? ((t = [e, e, "", o]), + b.setFilters.hasOwnProperty(e.toLowerCase()) + ? le(function (e, t) { + var n, + r = a(e, o), + i = r.length; + while (i--) e[(n = P(e, r[i]))] = !(t[n] = r[i]); + }) + : function (e) { + return a(e, 0, t); + }) + : a; + }, + }, + pseudos: { + not: le(function (e) { + var r = [], + i = [], + s = f(e.replace($, "$1")); + return s[S] + ? le(function (e, t, n, r) { + var i, + o = s(e, null, r, []), + a = e.length; + while (a--) (i = o[a]) && (e[a] = !(t[a] = i)); + }) + : function (e, t, n) { + return (r[0] = e), s(r, null, n, i), (r[0] = null), !i.pop(); + }; + }), + has: le(function (t) { + return function (e) { + return 0 < se(t, e).length; + }; + }), + contains: le(function (t) { + return ( + (t = t.replace(te, ne)), + function (e) { + return -1 < (e.textContent || o(e)).indexOf(t); + } + ); + }), + lang: le(function (n) { + return ( + V.test(n || "") || se.error("unsupported lang: " + n), + (n = n.replace(te, ne).toLowerCase()), + function (e) { + var t; + do { + if ( + (t = E + ? e.lang + : e.getAttribute("xml:lang") || e.getAttribute("lang")) + ) + return ( + (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-") + ); + } while ((e = e.parentNode) && 1 === e.nodeType); + return !1; + } + ); + }), + target: function (e) { + var t = n.location && n.location.hash; + return t && t.slice(1) === e.id; + }, + root: function (e) { + return e === a; + }, + focus: function (e) { + return ( + e === C.activeElement && + (!C.hasFocus || C.hasFocus()) && + !!(e.type || e.href || ~e.tabIndex) + ); + }, + enabled: ge(!1), + disabled: ge(!0), + checked: function (e) { + var t = e.nodeName.toLowerCase(); + return ( + ("input" === t && !!e.checked) || ("option" === t && !!e.selected) + ); + }, + selected: function (e) { + return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected; + }, + empty: function (e) { + for (e = e.firstChild; e; e = e.nextSibling) + if (e.nodeType < 6) return !1; + return !0; + }, + parent: function (e) { + return !b.pseudos.empty(e); + }, + header: function (e) { + return J.test(e.nodeName); + }, + input: function (e) { + return Q.test(e.nodeName); + }, + button: function (e) { + var t = e.nodeName.toLowerCase(); + return ("input" === t && "button" === e.type) || "button" === t; + }, + text: function (e) { + var t; + return ( + "input" === e.nodeName.toLowerCase() && + "text" === e.type && + (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) + ); + }, + first: ve(function () { + return [0]; + }), + last: ve(function (e, t) { + return [t - 1]; + }), + eq: ve(function (e, t, n) { + return [n < 0 ? n + t : n]; + }), + even: ve(function (e, t) { + for (var n = 0; n < t; n += 2) e.push(n); + return e; + }), + odd: ve(function (e, t) { + for (var n = 1; n < t; n += 2) e.push(n); + return e; + }), + lt: ve(function (e, t, n) { + for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; ) e.push(r); + return e; + }), + gt: ve(function (e, t, n) { + for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r); + return e; + }), + }, + }).pseudos.nth = b.pseudos.eq), + { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 })) + b.pseudos[e] = de(e); + for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e); + function me() {} + function xe(e) { + for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value; + return r; + } + function be(s, e, t) { + var u = e.dir, + l = e.next, + c = l || u, + f = t && "parentNode" === c, + p = r++; + return e.first + ? function (e, t, n) { + while ((e = e[u])) if (1 === e.nodeType || f) return s(e, t, n); + return !1; + } + : function (e, t, n) { + var r, + i, + o, + a = [k, p]; + if (n) { + while ((e = e[u])) + if ((1 === e.nodeType || f) && s(e, t, n)) return !0; + } else + while ((e = e[u])) + if (1 === e.nodeType || f) + if ( + ((i = + (o = e[S] || (e[S] = {}))[e.uniqueID] || + (o[e.uniqueID] = {})), + l && l === e.nodeName.toLowerCase()) + ) + e = e[u] || e; + else { + if ((r = i[c]) && r[0] === k && r[1] === p) + return (a[2] = r[2]); + if (((i[c] = a)[2] = s(e, t, n))) return !0; + } + return !1; + }; + } + function we(i) { + return 1 < i.length + ? function (e, t, n) { + var r = i.length; + while (r--) if (!i[r](e, t, n)) return !1; + return !0; + } + : i[0]; + } + function Te(e, t, n, r, i) { + for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++) + (o = e[s]) && ((n && !n(o, r, i)) || (a.push(o), l && t.push(s))); + return a; + } + function Ce(d, h, g, v, y, e) { + return ( + v && !v[S] && (v = Ce(v)), + y && !y[S] && (y = Ce(y, e)), + le(function (e, t, n, r) { + var i, + o, + a, + s = [], + u = [], + l = t.length, + c = + e || + (function (e, t, n) { + for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n); + return n; + })(h || "*", n.nodeType ? [n] : n, []), + f = !d || (!e && h) ? c : Te(c, s, d, n, r), + p = g ? (y || (e ? d : l || v) ? [] : t) : f; + if ((g && g(f, p, n, r), v)) { + (i = Te(p, u)), v(i, [], n, r), (o = i.length); + while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a)); + } + if (e) { + if (y || d) { + if (y) { + (i = []), (o = p.length); + while (o--) (a = p[o]) && i.push((f[o] = a)); + y(null, (p = []), i, r); + } + o = p.length; + while (o--) + (a = p[o]) && + -1 < (i = y ? P(e, a) : s[o]) && + (e[i] = !(t[i] = a)); + } + } else (p = Te(p === t ? p.splice(l, p.length) : p)), y ? y(null, t, p, r) : H.apply(t, p); + }) + ); + } + function Ee(e) { + for ( + var i, + t, + n, + r = e.length, + o = b.relative[e[0].type], + a = o || b.relative[" "], + s = o ? 1 : 0, + u = be( + function (e) { + return e === i; + }, + a, + !0 + ), + l = be( + function (e) { + return -1 < P(i, e); + }, + a, + !0 + ), + c = [ + function (e, t, n) { + var r = + (!o && (n || t !== w)) || + ((i = t).nodeType ? u(e, t, n) : l(e, t, n)); + return (i = null), r; + }, + ]; + s < r; + s++ + ) + if ((t = b.relative[e[s].type])) c = [be(we(c), t)]; + else { + if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) { + for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break; + return Ce( + 1 < s && we(c), + 1 < s && + xe( + e + .slice(0, s - 1) + .concat({ value: " " === e[s - 2].type ? "*" : "" }) + ).replace($, "$1"), + t, + s < n && Ee(e.slice(s, n)), + n < r && Ee((e = e.slice(n))), + n < r && xe(e) + ); + } + c.push(t); + } + return we(c); + } + return ( + (me.prototype = b.filters = b.pseudos), + (b.setFilters = new me()), + (h = se.tokenize = function (e, t) { + var n, + r, + i, + o, + a, + s, + u, + l = x[e + " "]; + if (l) return t ? 0 : l.slice(0); + (a = e), (s = []), (u = b.preFilter); + while (a) { + for (o in ((n && !(r = _.exec(a))) || + (r && (a = a.slice(r[0].length) || a), s.push((i = []))), + (n = !1), + (r = z.exec(a)) && + ((n = r.shift()), + i.push({ value: n, type: r[0].replace($, " ") }), + (a = a.slice(n.length))), + b.filter)) + !(r = G[o].exec(a)) || + (u[o] && !(r = u[o](r))) || + ((n = r.shift()), + i.push({ value: n, type: o, matches: r }), + (a = a.slice(n.length))); + if (!n) break; + } + return t ? a.length : a ? se.error(e) : x(e, s).slice(0); + }), + (f = se.compile = function (e, t) { + var n, + v, + y, + m, + x, + r, + i = [], + o = [], + a = A[e + " "]; + if (!a) { + t || (t = h(e)), (n = t.length); + while (n--) (a = Ee(t[n]))[S] ? i.push(a) : o.push(a); + (a = A( + e, + ((v = o), + (m = 0 < (y = i).length), + (x = 0 < v.length), + (r = function (e, t, n, r, i) { + var o, + a, + s, + u = 0, + l = "0", + c = e && [], + f = [], + p = w, + d = e || (x && b.find.TAG("*", i)), + h = (k += null == p ? 1 : Math.random() || 0.1), + g = d.length; + for ( + i && (w = t == C || t || i); + l !== g && null != (o = d[l]); + l++ + ) { + if (x && o) { + (a = 0), t || o.ownerDocument == C || (T(o), (n = !E)); + while ((s = v[a++])) + if (s(o, t || C, n)) { + r.push(o); + break; + } + i && (k = h); + } + m && ((o = !s && o) && u--, e && c.push(o)); + } + if (((u += l), m && l !== u)) { + a = 0; + while ((s = y[a++])) s(c, f, t, n); + if (e) { + if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r)); + f = Te(f); + } + H.apply(r, f), + i && + !e && + 0 < f.length && + 1 < u + y.length && + se.uniqueSort(r); + } + return i && ((k = h), (w = p)), c; + }), + m ? le(r) : r) + )).selector = e; + } + return a; + }), + (g = se.select = function (e, t, n, r) { + var i, + o, + a, + s, + u, + l = "function" == typeof e && e, + c = !r && h((e = l.selector || e)); + if (((n = n || []), 1 === c.length)) { + if ( + 2 < (o = c[0] = c[0].slice(0)).length && + "ID" === (a = o[0]).type && + 9 === t.nodeType && + E && + b.relative[o[1].type] + ) { + if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) + return n; + l && (t = t.parentNode), (e = e.slice(o.shift().value.length)); + } + i = G.needsContext.test(e) ? 0 : o.length; + while (i--) { + if (((a = o[i]), b.relative[(s = a.type)])) break; + if ( + (u = b.find[s]) && + (r = u( + a.matches[0].replace(te, ne), + (ee.test(o[0].type) && ye(t.parentNode)) || t + )) + ) { + if ((o.splice(i, 1), !(e = r.length && xe(o)))) + return H.apply(n, r), n; + break; + } + } + } + return ( + (l || f(e, c))( + r, + t, + !E, + n, + !t || (ee.test(e) && ye(t.parentNode)) || t + ), + n + ); + }), + (d.sortStable = S.split("").sort(D).join("") === S), + (d.detectDuplicates = !!l), + T(), + (d.sortDetached = ce(function (e) { + return 1 & e.compareDocumentPosition(C.createElement("fieldset")); + })), + ce(function (e) { + return ( + (e.innerHTML = ""), + "#" === e.firstChild.getAttribute("href") + ); + }) || + fe("type|href|height|width", function (e, t, n) { + if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2); + }), + (d.attributes && + ce(function (e) { + return ( + (e.innerHTML = ""), + e.firstChild.setAttribute("value", ""), + "" === e.firstChild.getAttribute("value") + ); + })) || + fe("value", function (e, t, n) { + if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue; + }), + ce(function (e) { + return null == e.getAttribute("disabled"); + }) || + fe(R, function (e, t, n) { + var r; + if (!n) + return !0 === e[t] + ? t.toLowerCase() + : (r = e.getAttributeNode(t)) && r.specified + ? r.value + : null; + }), + se + ); + })(C); + (S.find = d), + (S.expr = d.selectors), + (S.expr[":"] = S.expr.pseudos), + (S.uniqueSort = S.unique = d.uniqueSort), + (S.text = d.getText), + (S.isXMLDoc = d.isXML), + (S.contains = d.contains), + (S.escapeSelector = d.escape); + var h = function (e, t, n) { + var r = [], + i = void 0 !== n; + while ((e = e[t]) && 9 !== e.nodeType) + if (1 === e.nodeType) { + if (i && S(e).is(n)) break; + r.push(e); + } + return r; + }, + T = function (e, t) { + for (var n = []; e; e = e.nextSibling) + 1 === e.nodeType && e !== t && n.push(e); + return n; + }, + k = S.expr.match.needsContext; + function A(e, t) { + return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase(); + } + var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; + function D(e, n, r) { + return m(n) + ? S.grep(e, function (e, t) { + return !!n.call(e, t, e) !== r; + }) + : n.nodeType + ? S.grep(e, function (e) { + return (e === n) !== r; + }) + : "string" != typeof n + ? S.grep(e, function (e) { + return -1 < i.call(n, e) !== r; + }) + : S.filter(n, e, r); + } + (S.filter = function (e, t, n) { + var r = t[0]; + return ( + n && (e = ":not(" + e + ")"), + 1 === t.length && 1 === r.nodeType + ? S.find.matchesSelector(r, e) + ? [r] + : [] + : S.find.matches( + e, + S.grep(t, function (e) { + return 1 === e.nodeType; + }) + ) + ); + }), + S.fn.extend({ + find: function (e) { + var t, + n, + r = this.length, + i = this; + if ("string" != typeof e) + return this.pushStack( + S(e).filter(function () { + for (t = 0; t < r; t++) if (S.contains(i[t], this)) return !0; + }) + ); + for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n); + return 1 < r ? S.uniqueSort(n) : n; + }, + filter: function (e) { + return this.pushStack(D(this, e || [], !1)); + }, + not: function (e) { + return this.pushStack(D(this, e || [], !0)); + }, + is: function (e) { + return !!D(this, "string" == typeof e && k.test(e) ? S(e) : e || [], !1) + .length; + }, + }); + var j, + q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; + ((S.fn.init = function (e, t, n) { + var r, i; + if (!e) return this; + if (((n = n || j), "string" == typeof e)) { + if ( + !(r = + "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length + ? [null, e, null] + : q.exec(e)) || + (!r[1] && t) + ) + return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); + if (r[1]) { + if ( + ((t = t instanceof S ? t[0] : t), + S.merge( + this, + S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0) + ), + N.test(r[1]) && S.isPlainObject(t)) + ) + for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); + return this; + } + return ( + (i = E.getElementById(r[2])) && ((this[0] = i), (this.length = 1)), this + ); + } + return e.nodeType + ? ((this[0] = e), (this.length = 1), this) + : m(e) + ? void 0 !== n.ready + ? n.ready(e) + : e(S) + : S.makeArray(e, this); + }).prototype = S.fn), + (j = S(E)); + var L = /^(?:parents|prev(?:Until|All))/, + H = { children: !0, contents: !0, next: !0, prev: !0 }; + function O(e, t) { + while ((e = e[t]) && 1 !== e.nodeType); + return e; + } + S.fn.extend({ + has: function (e) { + var t = S(e, this), + n = t.length; + return this.filter(function () { + for (var e = 0; e < n; e++) if (S.contains(this, t[e])) return !0; + }); + }, + closest: function (e, t) { + var n, + r = 0, + i = this.length, + o = [], + a = "string" != typeof e && S(e); + if (!k.test(e)) + for (; r < i; r++) + for (n = this[r]; n && n !== t; n = n.parentNode) + if ( + n.nodeType < 11 && + (a + ? -1 < a.index(n) + : 1 === n.nodeType && S.find.matchesSelector(n, e)) + ) { + o.push(n); + break; + } + return this.pushStack(1 < o.length ? S.uniqueSort(o) : o); + }, + index: function (e) { + return e + ? "string" == typeof e + ? i.call(S(e), this[0]) + : i.call(this, e.jquery ? e[0] : e) + : this[0] && this[0].parentNode + ? this.first().prevAll().length + : -1; + }, + add: function (e, t) { + return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t)))); + }, + addBack: function (e) { + return this.add(null == e ? this.prevObject : this.prevObject.filter(e)); + }, + }), + S.each( + { + parent: function (e) { + var t = e.parentNode; + return t && 11 !== t.nodeType ? t : null; + }, + parents: function (e) { + return h(e, "parentNode"); + }, + parentsUntil: function (e, t, n) { + return h(e, "parentNode", n); + }, + next: function (e) { + return O(e, "nextSibling"); + }, + prev: function (e) { + return O(e, "previousSibling"); + }, + nextAll: function (e) { + return h(e, "nextSibling"); + }, + prevAll: function (e) { + return h(e, "previousSibling"); + }, + nextUntil: function (e, t, n) { + return h(e, "nextSibling", n); + }, + prevUntil: function (e, t, n) { + return h(e, "previousSibling", n); + }, + siblings: function (e) { + return T((e.parentNode || {}).firstChild, e); + }, + children: function (e) { + return T(e.firstChild); + }, + contents: function (e) { + return null != e.contentDocument && r(e.contentDocument) + ? e.contentDocument + : (A(e, "template") && (e = e.content || e), + S.merge([], e.childNodes)); + }, + }, + function (r, i) { + S.fn[r] = function (e, t) { + var n = S.map(this, i, e); + return ( + "Until" !== r.slice(-5) && (t = e), + t && "string" == typeof t && (n = S.filter(t, n)), + 1 < this.length && + (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), + this.pushStack(n) + ); + }; + } + ); + var P = /[^\x20\t\r\n\f]+/g; + function R(e) { + return e; + } + function M(e) { + throw e; + } + function I(e, t, n, r) { + var i; + try { + e && m((i = e.promise)) + ? i.call(e).done(t).fail(n) + : e && m((i = e.then)) + ? i.call(e, t, n) + : t.apply(void 0, [e].slice(r)); + } catch (e) { + n.apply(void 0, [e]); + } + } + (S.Callbacks = function (r) { + var e, n; + r = + "string" == typeof r + ? ((e = r), + (n = {}), + S.each(e.match(P) || [], function (e, t) { + n[t] = !0; + }), + n) + : S.extend({}, r); + var i, + t, + o, + a, + s = [], + u = [], + l = -1, + c = function () { + for (a = a || r.once, o = i = !0; u.length; l = -1) { + t = u.shift(); + while (++l < s.length) + !1 === s[l].apply(t[0], t[1]) && + r.stopOnFalse && + ((l = s.length), (t = !1)); + } + r.memory || (t = !1), (i = !1), a && (s = t ? [] : ""); + }, + f = { + add: function () { + return ( + s && + (t && !i && ((l = s.length - 1), u.push(t)), + (function n(e) { + S.each(e, function (e, t) { + m(t) + ? (r.unique && f.has(t)) || s.push(t) + : t && t.length && "string" !== w(t) && n(t); + }); + })(arguments), + t && !i && c()), + this + ); + }, + remove: function () { + return ( + S.each(arguments, function (e, t) { + var n; + while (-1 < (n = S.inArray(t, s, n))) + s.splice(n, 1), n <= l && l--; + }), + this + ); + }, + has: function (e) { + return e ? -1 < S.inArray(e, s) : 0 < s.length; + }, + empty: function () { + return s && (s = []), this; + }, + disable: function () { + return (a = u = []), (s = t = ""), this; + }, + disabled: function () { + return !s; + }, + lock: function () { + return (a = u = []), t || i || (s = t = ""), this; + }, + locked: function () { + return !!a; + }, + fireWith: function (e, t) { + return ( + a || + ((t = [e, (t = t || []).slice ? t.slice() : t]), + u.push(t), + i || c()), + this + ); + }, + fire: function () { + return f.fireWith(this, arguments), this; + }, + fired: function () { + return !!o; + }, + }; + return f; + }), + S.extend({ + Deferred: function (e) { + var o = [ + [ + "notify", + "progress", + S.Callbacks("memory"), + S.Callbacks("memory"), + 2, + ], + [ + "resolve", + "done", + S.Callbacks("once memory"), + S.Callbacks("once memory"), + 0, + "resolved", + ], + [ + "reject", + "fail", + S.Callbacks("once memory"), + S.Callbacks("once memory"), + 1, + "rejected", + ], + ], + i = "pending", + a = { + state: function () { + return i; + }, + always: function () { + return s.done(arguments).fail(arguments), this; + }, + catch: function (e) { + return a.then(null, e); + }, + pipe: function () { + var i = arguments; + return S.Deferred(function (r) { + S.each(o, function (e, t) { + var n = m(i[t[4]]) && i[t[4]]; + s[t[1]](function () { + var e = n && n.apply(this, arguments); + e && m(e.promise) + ? e + .promise() + .progress(r.notify) + .done(r.resolve) + .fail(r.reject) + : r[t[0] + "With"](this, n ? [e] : arguments); + }); + }), + (i = null); + }).promise(); + }, + then: function (t, n, r) { + var u = 0; + function l(i, o, a, s) { + return function () { + var n = this, + r = arguments, + e = function () { + var e, t; + if (!(i < u)) { + if ((e = a.apply(n, r)) === o.promise()) + throw new TypeError("Thenable self-resolution"); + (t = + e && + ("object" == typeof e || "function" == typeof e) && + e.then), + m(t) + ? s + ? t.call(e, l(u, o, R, s), l(u, o, M, s)) + : (u++, + t.call( + e, + l(u, o, R, s), + l(u, o, M, s), + l(u, o, R, o.notifyWith) + )) + : (a !== R && ((n = void 0), (r = [e])), + (s || o.resolveWith)(n, r)); + } + }, + t = s + ? e + : function () { + try { + e(); + } catch (e) { + S.Deferred.exceptionHook && + S.Deferred.exceptionHook(e, t.stackTrace), + u <= i + 1 && + (a !== M && ((n = void 0), (r = [e])), + o.rejectWith(n, r)); + } + }; + i + ? t() + : (S.Deferred.getStackHook && + (t.stackTrace = S.Deferred.getStackHook()), + C.setTimeout(t)); + }; + } + return S.Deferred(function (e) { + o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), + o[1][3].add(l(0, e, m(t) ? t : R)), + o[2][3].add(l(0, e, m(n) ? n : M)); + }).promise(); + }, + promise: function (e) { + return null != e ? S.extend(e, a) : a; + }, + }, + s = {}; + return ( + S.each(o, function (e, t) { + var n = t[2], + r = t[5]; + (a[t[1]] = n.add), + r && + n.add( + function () { + i = r; + }, + o[3 - e][2].disable, + o[3 - e][3].disable, + o[0][2].lock, + o[0][3].lock + ), + n.add(t[3].fire), + (s[t[0]] = function () { + return ( + s[t[0] + "With"](this === s ? void 0 : this, arguments), this + ); + }), + (s[t[0] + "With"] = n.fireWith); + }), + a.promise(s), + e && e.call(s, s), + s + ); + }, + when: function (e) { + var n = arguments.length, + t = n, + r = Array(t), + i = s.call(arguments), + o = S.Deferred(), + a = function (t) { + return function (e) { + (r[t] = this), + (i[t] = 1 < arguments.length ? s.call(arguments) : e), + --n || o.resolveWith(r, i); + }; + }; + if ( + n <= 1 && + (I(e, o.done(a(t)).resolve, o.reject, !n), + "pending" === o.state() || m(i[t] && i[t].then)) + ) + return o.then(); + while (t--) I(i[t], a(t), o.reject); + return o.promise(); + }, + }); + var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + (S.Deferred.exceptionHook = function (e, t) { + C.console && + C.console.warn && + e && + W.test(e.name) && + C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t); + }), + (S.readyException = function (e) { + C.setTimeout(function () { + throw e; + }); + }); + var F = S.Deferred(); + function B() { + E.removeEventListener("DOMContentLoaded", B), + C.removeEventListener("load", B), + S.ready(); + } + (S.fn.ready = function (e) { + return ( + F.then(e)["catch"](function (e) { + S.readyException(e); + }), + this + ); + }), + S.extend({ + isReady: !1, + readyWait: 1, + ready: function (e) { + (!0 === e ? --S.readyWait : S.isReady) || + ((S.isReady = !0) !== e && 0 < --S.readyWait) || + F.resolveWith(E, [S]); + }, + }), + (S.ready.then = F.then), + "complete" === E.readyState || + ("loading" !== E.readyState && !E.documentElement.doScroll) + ? C.setTimeout(S.ready) + : (E.addEventListener("DOMContentLoaded", B), + C.addEventListener("load", B)); + var $ = function (e, t, n, r, i, o, a) { + var s = 0, + u = e.length, + l = null == n; + if ("object" === w(n)) + for (s in ((i = !0), n)) $(e, t, s, n[s], !0, o, a); + else if ( + void 0 !== r && + ((i = !0), + m(r) || (a = !0), + l && + (a + ? (t.call(e, r), (t = null)) + : ((l = t), + (t = function (e, t, n) { + return l.call(S(e), n); + }))), + t) + ) + for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))); + return i ? e : l ? t.call(e) : u ? t(e[0], n) : o; + }, + _ = /^-ms-/, + z = /-([a-z])/g; + function U(e, t) { + return t.toUpperCase(); + } + function X(e) { + return e.replace(_, "ms-").replace(z, U); + } + var V = function (e) { + return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType; + }; + function G() { + this.expando = S.expando + G.uid++; + } + (G.uid = 1), + (G.prototype = { + cache: function (e) { + var t = e[this.expando]; + return ( + t || + ((t = {}), + V(e) && + (e.nodeType + ? (e[this.expando] = t) + : Object.defineProperty(e, this.expando, { + value: t, + configurable: !0, + }))), + t + ); + }, + set: function (e, t, n) { + var r, + i = this.cache(e); + if ("string" == typeof t) i[X(t)] = n; + else for (r in t) i[X(r)] = t[r]; + return i; + }, + get: function (e, t) { + return void 0 === t + ? this.cache(e) + : e[this.expando] && e[this.expando][X(t)]; + }, + access: function (e, t, n) { + return void 0 === t || (t && "string" == typeof t && void 0 === n) + ? this.get(e, t) + : (this.set(e, t, n), void 0 !== n ? n : t); + }, + remove: function (e, t) { + var n, + r = e[this.expando]; + if (void 0 !== r) { + if (void 0 !== t) { + n = (t = Array.isArray(t) + ? t.map(X) + : (t = X(t)) in r + ? [t] + : t.match(P) || []).length; + while (n--) delete r[t[n]]; + } + (void 0 === t || S.isEmptyObject(r)) && + (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]); + } + }, + hasData: function (e) { + var t = e[this.expando]; + return void 0 !== t && !S.isEmptyObject(t); + }, + }); + var Y = new G(), + Q = new G(), + J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + K = /[A-Z]/g; + function Z(e, t, n) { + var r, i; + if (void 0 === n && 1 === e.nodeType) + if ( + ((r = "data-" + t.replace(K, "-$&").toLowerCase()), + "string" == typeof (n = e.getAttribute(r))) + ) { + try { + n = + "true" === (i = n) || + ("false" !== i && + ("null" === i + ? null + : i === +i + "" + ? +i + : J.test(i) + ? JSON.parse(i) + : i)); + } catch (e) {} + Q.set(e, t, n); + } else n = void 0; + return n; + } + S.extend({ + hasData: function (e) { + return Q.hasData(e) || Y.hasData(e); + }, + data: function (e, t, n) { + return Q.access(e, t, n); + }, + removeData: function (e, t) { + Q.remove(e, t); + }, + _data: function (e, t, n) { + return Y.access(e, t, n); + }, + _removeData: function (e, t) { + Y.remove(e, t); + }, + }), + S.fn.extend({ + data: function (n, e) { + var t, + r, + i, + o = this[0], + a = o && o.attributes; + if (void 0 === n) { + if ( + this.length && + ((i = Q.get(o)), 1 === o.nodeType && !Y.get(o, "hasDataAttrs")) + ) { + t = a.length; + while (t--) + a[t] && + 0 === (r = a[t].name).indexOf("data-") && + ((r = X(r.slice(5))), Z(o, r, i[r])); + Y.set(o, "hasDataAttrs", !0); + } + return i; + } + return "object" == typeof n + ? this.each(function () { + Q.set(this, n); + }) + : $( + this, + function (e) { + var t; + if (o && void 0 === e) + return void 0 !== (t = Q.get(o, n)) + ? t + : void 0 !== (t = Z(o, n)) + ? t + : void 0; + this.each(function () { + Q.set(this, n, e); + }); + }, + null, + e, + 1 < arguments.length, + null, + !0 + ); + }, + removeData: function (e) { + return this.each(function () { + Q.remove(this, e); + }); + }, + }), + S.extend({ + queue: function (e, t, n) { + var r; + if (e) + return ( + (t = (t || "fx") + "queue"), + (r = Y.get(e, t)), + n && + (!r || Array.isArray(n) + ? (r = Y.access(e, t, S.makeArray(n))) + : r.push(n)), + r || [] + ); + }, + dequeue: function (e, t) { + t = t || "fx"; + var n = S.queue(e, t), + r = n.length, + i = n.shift(), + o = S._queueHooks(e, t); + "inprogress" === i && ((i = n.shift()), r--), + i && + ("fx" === t && n.unshift("inprogress"), + delete o.stop, + i.call( + e, + function () { + S.dequeue(e, t); + }, + o + )), + !r && o && o.empty.fire(); + }, + _queueHooks: function (e, t) { + var n = t + "queueHooks"; + return ( + Y.get(e, n) || + Y.access(e, n, { + empty: S.Callbacks("once memory").add(function () { + Y.remove(e, [t + "queue", n]); + }), + }) + ); + }, + }), + S.fn.extend({ + queue: function (t, n) { + var e = 2; + return ( + "string" != typeof t && ((n = t), (t = "fx"), e--), + arguments.length < e + ? S.queue(this[0], t) + : void 0 === n + ? this + : this.each(function () { + var e = S.queue(this, t, n); + S._queueHooks(this, t), + "fx" === t && "inprogress" !== e[0] && S.dequeue(this, t); + }) + ); + }, + dequeue: function (e) { + return this.each(function () { + S.dequeue(this, e); + }); + }, + clearQueue: function (e) { + return this.queue(e || "fx", []); + }, + promise: function (e, t) { + var n, + r = 1, + i = S.Deferred(), + o = this, + a = this.length, + s = function () { + --r || i.resolveWith(o, [o]); + }; + "string" != typeof e && ((t = e), (e = void 0)), (e = e || "fx"); + while (a--) + (n = Y.get(o[a], e + "queueHooks")) && + n.empty && + (r++, n.empty.add(s)); + return s(), i.promise(t); + }, + }); + var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + te = new RegExp("^(?:([+-])=|)(" + ee + ")([a-z%]*)$", "i"), + ne = ["Top", "Right", "Bottom", "Left"], + re = E.documentElement, + ie = function (e) { + return S.contains(e.ownerDocument, e); + }, + oe = { composed: !0 }; + re.getRootNode && + (ie = function (e) { + return ( + S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument + ); + }); + var ae = function (e, t) { + return ( + "none" === (e = t || e).style.display || + ("" === e.style.display && ie(e) && "none" === S.css(e, "display")) + ); + }; + function se(e, t, n, r) { + var i, + o, + a = 20, + s = r + ? function () { + return r.cur(); + } + : function () { + return S.css(e, t, ""); + }, + u = s(), + l = (n && n[3]) || (S.cssNumber[t] ? "" : "px"), + c = + e.nodeType && + (S.cssNumber[t] || ("px" !== l && +u)) && + te.exec(S.css(e, t)); + if (c && c[3] !== l) { + (u /= 2), (l = l || c[3]), (c = +u || 1); + while (a--) + S.style(e, t, c + l), + (1 - o) * (1 - (o = s() / u || 0.5)) <= 0 && (a = 0), + (c /= o); + (c *= 2), S.style(e, t, c + l), (n = n || []); + } + return ( + n && + ((c = +c || +u || 0), + (i = n[1] ? c + (n[1] + 1) * n[2] : +n[2]), + r && ((r.unit = l), (r.start = c), (r.end = i))), + i + ); + } + var ue = {}; + function le(e, t) { + for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++) + (r = e[c]).style && + ((n = r.style.display), + t + ? ("none" === n && + ((l[c] = Y.get(r, "display") || null), + l[c] || (r.style.display = "")), + "" === r.style.display && + ae(r) && + (l[c] = + ((u = a = o = void 0), + (a = (i = r).ownerDocument), + (s = i.nodeName), + (u = ue[s]) || + ((o = a.body.appendChild(a.createElement(s))), + (u = S.css(o, "display")), + o.parentNode.removeChild(o), + "none" === u && (u = "block"), + (ue[s] = u))))) + : "none" !== n && ((l[c] = "none"), Y.set(r, "display", n))); + for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]); + return e; + } + S.fn.extend({ + show: function () { + return le(this, !0); + }, + hide: function () { + return le(this); + }, + toggle: function (e) { + return "boolean" == typeof e + ? e + ? this.show() + : this.hide() + : this.each(function () { + ae(this) ? S(this).show() : S(this).hide(); + }); + }, + }); + var ce, + fe, + pe = /^(?:checkbox|radio)$/i, + de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, + he = /^$|^module$|\/(?:java|ecma)script/i; + (ce = E.createDocumentFragment().appendChild(E.createElement("div"))), + (fe = E.createElement("input")).setAttribute("type", "radio"), + fe.setAttribute("checked", "checked"), + fe.setAttribute("name", "t"), + ce.appendChild(fe), + (y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked), + (ce.innerHTML = ""), + (y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue), + (ce.innerHTML = ""), + (y.option = !!ce.lastChild); + var ge = { + thead: [1, "", "
"], + col: [2, "", "
"], + tr: [2, "", "
"], + td: [3, "", "
"], + _default: [0, "", ""], + }; + function ve(e, t) { + var n; + return ( + (n = + "undefined" != typeof e.getElementsByTagName + ? e.getElementsByTagName(t || "*") + : "undefined" != typeof e.querySelectorAll + ? e.querySelectorAll(t || "*") + : []), + void 0 === t || (t && A(e, t)) ? S.merge([e], n) : n + ); + } + function ye(e, t) { + for (var n = 0, r = e.length; n < r; n++) + Y.set(e[n], "globalEval", !t || Y.get(t[n], "globalEval")); + } + (ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead), + (ge.th = ge.td), + y.option || + (ge.optgroup = ge.option = [ + 1, + "", + ]); + var me = /<|&#?\w+;/; + function xe(e, t, n, r, i) { + for ( + var o, + a, + s, + u, + l, + c, + f = t.createDocumentFragment(), + p = [], + d = 0, + h = e.length; + d < h; + d++ + ) + if ((o = e[d]) || 0 === o) + if ("object" === w(o)) S.merge(p, o.nodeType ? [o] : o); + else if (me.test(o)) { + (a = a || f.appendChild(t.createElement("div"))), + (s = (de.exec(o) || ["", ""])[1].toLowerCase()), + (u = ge[s] || ge._default), + (a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2]), + (c = u[0]); + while (c--) a = a.lastChild; + S.merge(p, a.childNodes), ((a = f.firstChild).textContent = ""); + } else p.push(t.createTextNode(o)); + (f.textContent = ""), (d = 0); + while ((o = p[d++])) + if (r && -1 < S.inArray(o, r)) i && i.push(o); + else if ( + ((l = ie(o)), (a = ve(f.appendChild(o), "script")), l && ye(a), n) + ) { + c = 0; + while ((o = a[c++])) he.test(o.type || "") && n.push(o); + } + return f; + } + var be = /^key/, + we = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + Te = /^([^.]*)(?:\.(.+)|)/; + function Ce() { + return !0; + } + function Ee() { + return !1; + } + function Se(e, t) { + return ( + (e === + (function () { + try { + return E.activeElement; + } catch (e) {} + })()) == + ("focus" === t) + ); + } + function ke(e, t, n, r, i, o) { + var a, s; + if ("object" == typeof t) { + for (s in ("string" != typeof n && ((r = r || n), (n = void 0)), t)) + ke(e, s, n, r, t[s], o); + return e; + } + if ( + (null == r && null == i + ? ((i = n), (r = n = void 0)) + : null == i && + ("string" == typeof n + ? ((i = r), (r = void 0)) + : ((i = r), (r = n), (n = void 0))), + !1 === i) + ) + i = Ee; + else if (!i) return e; + return ( + 1 === o && + ((a = i), + ((i = function (e) { + return S().off(e), a.apply(this, arguments); + }).guid = a.guid || (a.guid = S.guid++))), + e.each(function () { + S.event.add(this, t, i, r, n); + }) + ); + } + function Ae(e, i, o) { + o + ? (Y.set(e, i, !1), + S.event.add(e, i, { + namespace: !1, + handler: function (e) { + var t, + n, + r = Y.get(this, i); + if (1 & e.isTrigger && this[i]) { + if (r.length) + (S.event.special[i] || {}).delegateType && e.stopPropagation(); + else if ( + ((r = s.call(arguments)), + Y.set(this, i, r), + (t = o(this, i)), + this[i](), + r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : (n = {}), + r !== n) + ) + return ( + e.stopImmediatePropagation(), e.preventDefault(), n.value + ); + } else + r.length && + (Y.set(this, i, { + value: S.event.trigger( + S.extend(r[0], S.Event.prototype), + r.slice(1), + this + ), + }), + e.stopImmediatePropagation()); + }, + })) + : void 0 === Y.get(e, i) && S.event.add(e, i, Ce); + } + (S.event = { + global: {}, + add: function (t, e, n, r, i) { + var o, + a, + s, + u, + l, + c, + f, + p, + d, + h, + g, + v = Y.get(t); + if (V(t)) { + n.handler && ((n = (o = n).handler), (i = o.selector)), + i && S.find.matchesSelector(re, i), + n.guid || (n.guid = S.guid++), + (u = v.events) || (u = v.events = Object.create(null)), + (a = v.handle) || + (a = v.handle = function (e) { + return "undefined" != typeof S && S.event.triggered !== e.type + ? S.event.dispatch.apply(t, arguments) + : void 0; + }), + (l = (e = (e || "").match(P) || [""]).length); + while (l--) + (d = g = (s = Te.exec(e[l]) || [])[1]), + (h = (s[2] || "").split(".").sort()), + d && + ((f = S.event.special[d] || {}), + (d = (i ? f.delegateType : f.bindType) || d), + (f = S.event.special[d] || {}), + (c = S.extend( + { + type: d, + origType: g, + data: r, + handler: n, + guid: n.guid, + selector: i, + needsContext: i && S.expr.match.needsContext.test(i), + namespace: h.join("."), + }, + o + )), + (p = u[d]) || + (((p = u[d] = []).delegateCount = 0), + (f.setup && !1 !== f.setup.call(t, r, h, a)) || + (t.addEventListener && t.addEventListener(d, a))), + f.add && + (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), + i ? p.splice(p.delegateCount++, 0, c) : p.push(c), + (S.event.global[d] = !0)); + } + }, + remove: function (e, t, n, r, i) { + var o, + a, + s, + u, + l, + c, + f, + p, + d, + h, + g, + v = Y.hasData(e) && Y.get(e); + if (v && (u = v.events)) { + l = (t = (t || "").match(P) || [""]).length; + while (l--) + if ( + ((d = g = (s = Te.exec(t[l]) || [])[1]), + (h = (s[2] || "").split(".").sort()), + d) + ) { + (f = S.event.special[d] || {}), + (p = u[(d = (r ? f.delegateType : f.bindType) || d)] || []), + (s = + s[2] && + new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)")), + (a = o = p.length); + while (o--) + (c = p[o]), + (!i && g !== c.origType) || + (n && n.guid !== c.guid) || + (s && !s.test(c.namespace)) || + (r && r !== c.selector && ("**" !== r || !c.selector)) || + (p.splice(o, 1), + c.selector && p.delegateCount--, + f.remove && f.remove.call(e, c)); + a && + !p.length && + ((f.teardown && !1 !== f.teardown.call(e, h, v.handle)) || + S.removeEvent(e, d, v.handle), + delete u[d]); + } else for (d in u) S.event.remove(e, d + t[l], n, r, !0); + S.isEmptyObject(u) && Y.remove(e, "handle events"); + } + }, + dispatch: function (e) { + var t, + n, + r, + i, + o, + a, + s = new Array(arguments.length), + u = S.event.fix(e), + l = (Y.get(this, "events") || Object.create(null))[u.type] || [], + c = S.event.special[u.type] || {}; + for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t]; + if ( + ((u.delegateTarget = this), + !c.preDispatch || !1 !== c.preDispatch.call(this, u)) + ) { + (a = S.event.handlers.call(this, u, l)), (t = 0); + while ((i = a[t++]) && !u.isPropagationStopped()) { + (u.currentTarget = i.elem), (n = 0); + while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) + (u.rnamespace && + !1 !== o.namespace && + !u.rnamespace.test(o.namespace)) || + ((u.handleObj = o), + (u.data = o.data), + void 0 !== + (r = ( + (S.event.special[o.origType] || {}).handle || o.handler + ).apply(i.elem, s)) && + !1 === (u.result = r) && + (u.preventDefault(), u.stopPropagation())); + } + return c.postDispatch && c.postDispatch.call(this, u), u.result; + } + }, + handlers: function (e, t) { + var n, + r, + i, + o, + a, + s = [], + u = t.delegateCount, + l = e.target; + if (u && l.nodeType && !("click" === e.type && 1 <= e.button)) + for (; l !== this; l = l.parentNode || this) + if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) { + for (o = [], a = {}, n = 0; n < u; n++) + void 0 === a[(i = (r = t[n]).selector + " ")] && + (a[i] = r.needsContext + ? -1 < S(i, this).index(l) + : S.find(i, this, null, [l]).length), + a[i] && o.push(r); + o.length && s.push({ elem: l, handlers: o }); + } + return ( + (l = this), u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s + ); + }, + addProp: function (t, e) { + Object.defineProperty(S.Event.prototype, t, { + enumerable: !0, + configurable: !0, + get: m(e) + ? function () { + if (this.originalEvent) return e(this.originalEvent); + } + : function () { + if (this.originalEvent) return this.originalEvent[t]; + }, + set: function (e) { + Object.defineProperty(this, t, { + enumerable: !0, + configurable: !0, + writable: !0, + value: e, + }); + }, + }); + }, + fix: function (e) { + return e[S.expando] ? e : new S.Event(e); + }, + special: { + load: { noBubble: !0 }, + click: { + setup: function (e) { + var t = this || e; + return ( + pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click", Ce), + !1 + ); + }, + trigger: function (e) { + var t = this || e; + return ( + pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click"), !0 + ); + }, + _default: function (e) { + var t = e.target; + return ( + (pe.test(t.type) && + t.click && + A(t, "input") && + Y.get(t, "click")) || + A(t, "a") + ); + }, + }, + beforeunload: { + postDispatch: function (e) { + void 0 !== e.result && + e.originalEvent && + (e.originalEvent.returnValue = e.result); + }, + }, + }, + }), + (S.removeEvent = function (e, t, n) { + e.removeEventListener && e.removeEventListener(t, n); + }), + (S.Event = function (e, t) { + if (!(this instanceof S.Event)) return new S.Event(e, t); + e && e.type + ? ((this.originalEvent = e), + (this.type = e.type), + (this.isDefaultPrevented = + e.defaultPrevented || + (void 0 === e.defaultPrevented && !1 === e.returnValue) + ? Ce + : Ee), + (this.target = + e.target && 3 === e.target.nodeType + ? e.target.parentNode + : e.target), + (this.currentTarget = e.currentTarget), + (this.relatedTarget = e.relatedTarget)) + : (this.type = e), + t && S.extend(this, t), + (this.timeStamp = (e && e.timeStamp) || Date.now()), + (this[S.expando] = !0); + }), + (S.Event.prototype = { + constructor: S.Event, + isDefaultPrevented: Ee, + isPropagationStopped: Ee, + isImmediatePropagationStopped: Ee, + isSimulated: !1, + preventDefault: function () { + var e = this.originalEvent; + (this.isDefaultPrevented = Ce), + e && !this.isSimulated && e.preventDefault(); + }, + stopPropagation: function () { + var e = this.originalEvent; + (this.isPropagationStopped = Ce), + e && !this.isSimulated && e.stopPropagation(); + }, + stopImmediatePropagation: function () { + var e = this.originalEvent; + (this.isImmediatePropagationStopped = Ce), + e && !this.isSimulated && e.stopImmediatePropagation(), + this.stopPropagation(); + }, + }), + S.each( + { + altKey: !0, + bubbles: !0, + cancelable: !0, + changedTouches: !0, + ctrlKey: !0, + detail: !0, + eventPhase: !0, + metaKey: !0, + pageX: !0, + pageY: !0, + shiftKey: !0, + view: !0, + char: !0, + code: !0, + charCode: !0, + key: !0, + keyCode: !0, + button: !0, + buttons: !0, + clientX: !0, + clientY: !0, + offsetX: !0, + offsetY: !0, + pointerId: !0, + pointerType: !0, + screenX: !0, + screenY: !0, + targetTouches: !0, + toElement: !0, + touches: !0, + which: function (e) { + var t = e.button; + return null == e.which && be.test(e.type) + ? null != e.charCode + ? e.charCode + : e.keyCode + : !e.which && void 0 !== t && we.test(e.type) + ? 1 & t + ? 1 + : 2 & t + ? 3 + : 4 & t + ? 2 + : 0 + : e.which; + }, + }, + S.event.addProp + ), + S.each({ focus: "focusin", blur: "focusout" }, function (e, t) { + S.event.special[e] = { + setup: function () { + return Ae(this, e, Se), !1; + }, + trigger: function () { + return Ae(this, e), !0; + }, + delegateType: t, + }; + }), + S.each( + { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout", + }, + function (e, i) { + S.event.special[e] = { + delegateType: i, + bindType: i, + handle: function (e) { + var t, + n = e.relatedTarget, + r = e.handleObj; + return ( + (n && (n === this || S.contains(this, n))) || + ((e.type = r.origType), + (t = r.handler.apply(this, arguments)), + (e.type = i)), + t + ); + }, + }; + } + ), + S.fn.extend({ + on: function (e, t, n, r) { + return ke(this, e, t, n, r); + }, + one: function (e, t, n, r) { + return ke(this, e, t, n, r, 1); + }, + off: function (e, t, n) { + var r, i; + if (e && e.preventDefault && e.handleObj) + return ( + (r = e.handleObj), + S(e.delegateTarget).off( + r.namespace ? r.origType + "." + r.namespace : r.origType, + r.selector, + r.handler + ), + this + ); + if ("object" == typeof e) { + for (i in e) this.off(i, t, e[i]); + return this; + } + return ( + (!1 !== t && "function" != typeof t) || ((n = t), (t = void 0)), + !1 === n && (n = Ee), + this.each(function () { + S.event.remove(this, e, n, t); + }) + ); + }, + }); + var Ne = /\s*$/g; + function qe(e, t) { + return ( + (A(e, "table") && + A(11 !== t.nodeType ? t : t.firstChild, "tr") && + S(e).children("tbody")[0]) || + e + ); + } + function Le(e) { + return (e.type = (null !== e.getAttribute("type")) + "/" + e.type), e; + } + function He(e) { + return ( + "true/" === (e.type || "").slice(0, 5) + ? (e.type = e.type.slice(5)) + : e.removeAttribute("type"), + e + ); + } + function Oe(e, t) { + var n, r, i, o, a, s; + if (1 === t.nodeType) { + if (Y.hasData(e) && (s = Y.get(e).events)) + for (i in (Y.remove(t, "handle events"), s)) + for (n = 0, r = s[i].length; n < r; n++) S.event.add(t, i, s[i][n]); + Q.hasData(e) && ((o = Q.access(e)), (a = S.extend({}, o)), Q.set(t, a)); + } + } + function Pe(n, r, i, o) { + r = g(r); + var e, + t, + a, + s, + u, + l, + c = 0, + f = n.length, + p = f - 1, + d = r[0], + h = m(d); + if (h || (1 < f && "string" == typeof d && !y.checkClone && De.test(d))) + return n.each(function (e) { + var t = n.eq(e); + h && (r[0] = d.call(this, e, t.html())), Pe(t, r, i, o); + }); + if ( + f && + ((t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild), + 1 === e.childNodes.length && (e = t), + t || o) + ) { + for (s = (a = S.map(ve(e, "script"), Le)).length; c < f; c++) + (u = e), + c !== p && + ((u = S.clone(u, !0, !0)), s && S.merge(a, ve(u, "script"))), + i.call(n[c], u, c); + if (s) + for (l = a[a.length - 1].ownerDocument, S.map(a, He), c = 0; c < s; c++) + (u = a[c]), + he.test(u.type || "") && + !Y.access(u, "globalEval") && + S.contains(l, u) && + (u.src && "module" !== (u.type || "").toLowerCase() + ? S._evalUrl && + !u.noModule && + S._evalUrl( + u.src, + { nonce: u.nonce || u.getAttribute("nonce") }, + l + ) + : b(u.textContent.replace(je, ""), u, l)); + } + return n; + } + function Re(e, t, n) { + for (var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++) + n || 1 !== r.nodeType || S.cleanData(ve(r)), + r.parentNode && + (n && ie(r) && ye(ve(r, "script")), r.parentNode.removeChild(r)); + return e; + } + S.extend({ + htmlPrefilter: function (e) { + return e; + }, + clone: function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l, + c = e.cloneNode(!0), + f = ie(e); + if ( + !( + y.noCloneChecked || + (1 !== e.nodeType && 11 !== e.nodeType) || + S.isXMLDoc(e) + ) + ) + for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++) + (s = o[r]), + (u = a[r]), + void 0, + "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) + ? (u.checked = s.checked) + : ("input" !== l && "textarea" !== l) || + (u.defaultValue = s.defaultValue); + if (t) + if (n) + for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) + Oe(o[r], a[r]); + else Oe(e, c); + return ( + 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")), c + ); + }, + cleanData: function (e) { + for (var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++) + if (V(n)) { + if ((t = n[Y.expando])) { + if (t.events) + for (r in t.events) + i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle); + n[Y.expando] = void 0; + } + n[Q.expando] && (n[Q.expando] = void 0); + } + }, + }), + S.fn.extend({ + detach: function (e) { + return Re(this, e, !0); + }, + remove: function (e) { + return Re(this, e); + }, + text: function (e) { + return $( + this, + function (e) { + return void 0 === e + ? S.text(this) + : this.empty().each(function () { + (1 !== this.nodeType && + 11 !== this.nodeType && + 9 !== this.nodeType) || + (this.textContent = e); + }); + }, + null, + e, + arguments.length + ); + }, + append: function () { + return Pe(this, arguments, function (e) { + (1 !== this.nodeType && + 11 !== this.nodeType && + 9 !== this.nodeType) || + qe(this, e).appendChild(e); + }); + }, + prepend: function () { + return Pe(this, arguments, function (e) { + if ( + 1 === this.nodeType || + 11 === this.nodeType || + 9 === this.nodeType + ) { + var t = qe(this, e); + t.insertBefore(e, t.firstChild); + } + }); + }, + before: function () { + return Pe(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this); + }); + }, + after: function () { + return Pe(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this.nextSibling); + }); + }, + empty: function () { + for (var e, t = 0; null != (e = this[t]); t++) + 1 === e.nodeType && (S.cleanData(ve(e, !1)), (e.textContent = "")); + return this; + }, + clone: function (e, t) { + return ( + (e = null != e && e), + (t = null == t ? e : t), + this.map(function () { + return S.clone(this, e, t); + }) + ); + }, + html: function (e) { + return $( + this, + function (e) { + var t = this[0] || {}, + n = 0, + r = this.length; + if (void 0 === e && 1 === t.nodeType) return t.innerHTML; + if ( + "string" == typeof e && + !Ne.test(e) && + !ge[(de.exec(e) || ["", ""])[1].toLowerCase()] + ) { + e = S.htmlPrefilter(e); + try { + for (; n < r; n++) + 1 === (t = this[n] || {}).nodeType && + (S.cleanData(ve(t, !1)), (t.innerHTML = e)); + t = 0; + } catch (e) {} + } + t && this.empty().append(e); + }, + null, + e, + arguments.length + ); + }, + replaceWith: function () { + var n = []; + return Pe( + this, + arguments, + function (e) { + var t = this.parentNode; + S.inArray(this, n) < 0 && + (S.cleanData(ve(this)), t && t.replaceChild(e, this)); + }, + n + ); + }, + }), + S.each( + { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith", + }, + function (e, a) { + S.fn[e] = function (e) { + for (var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++) + (t = o === i ? this : this.clone(!0)), + S(r[o])[a](t), + u.apply(n, t.get()); + return this.pushStack(n); + }; + } + ); + var Me = new RegExp("^(" + ee + ")(?!px)[a-z%]+$", "i"), + Ie = function (e) { + var t = e.ownerDocument.defaultView; + return (t && t.opener) || (t = C), t.getComputedStyle(e); + }, + We = function (e, t, n) { + var r, + i, + o = {}; + for (i in t) (o[i] = e.style[i]), (e.style[i] = t[i]); + for (i in ((r = n.call(e)), t)) e.style[i] = o[i]; + return r; + }, + Fe = new RegExp(ne.join("|"), "i"); + function Be(e, t, n) { + var r, + i, + o, + a, + s = e.style; + return ( + (n = n || Ie(e)) && + ("" !== (a = n.getPropertyValue(t) || n[t]) || + ie(e) || + (a = S.style(e, t)), + !y.pixelBoxStyles() && + Me.test(a) && + Fe.test(t) && + ((r = s.width), + (i = s.minWidth), + (o = s.maxWidth), + (s.minWidth = s.maxWidth = s.width = a), + (a = n.width), + (s.width = r), + (s.minWidth = i), + (s.maxWidth = o))), + void 0 !== a ? a + "" : a + ); + } + function $e(e, t) { + return { + get: function () { + if (!e()) return (this.get = t).apply(this, arguments); + delete this.get; + }, + }; + } + !(function () { + function e() { + if (l) { + (u.style.cssText = + "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0"), + (l.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%"), + re.appendChild(u).appendChild(l); + var e = C.getComputedStyle(l); + (n = "1%" !== e.top), + (s = 12 === t(e.marginLeft)), + (l.style.right = "60%"), + (o = 36 === t(e.right)), + (r = 36 === t(e.width)), + (l.style.position = "absolute"), + (i = 12 === t(l.offsetWidth / 3)), + re.removeChild(u), + (l = null); + } + } + function t(e) { + return Math.round(parseFloat(e)); + } + var n, + r, + i, + o, + a, + s, + u = E.createElement("div"), + l = E.createElement("div"); + l.style && + ((l.style.backgroundClip = "content-box"), + (l.cloneNode(!0).style.backgroundClip = ""), + (y.clearCloneStyle = "content-box" === l.style.backgroundClip), + S.extend(y, { + boxSizingReliable: function () { + return e(), r; + }, + pixelBoxStyles: function () { + return e(), o; + }, + pixelPosition: function () { + return e(), n; + }, + reliableMarginLeft: function () { + return e(), s; + }, + scrollboxSize: function () { + return e(), i; + }, + reliableTrDimensions: function () { + var e, t, n, r; + return ( + null == a && + ((e = E.createElement("table")), + (t = E.createElement("tr")), + (n = E.createElement("div")), + (e.style.cssText = "position:absolute;left:-11111px"), + (t.style.height = "1px"), + (n.style.height = "9px"), + re.appendChild(e).appendChild(t).appendChild(n), + (r = C.getComputedStyle(t)), + (a = 3 < parseInt(r.height)), + re.removeChild(e)), + a + ); + }, + })); + })(); + var _e = ["Webkit", "Moz", "ms"], + ze = E.createElement("div").style, + Ue = {}; + function Xe(e) { + var t = S.cssProps[e] || Ue[e]; + return ( + t || + (e in ze + ? e + : (Ue[e] = + (function (e) { + var t = e[0].toUpperCase() + e.slice(1), + n = _e.length; + while (n--) if ((e = _e[n] + t) in ze) return e; + })(e) || e)) + ); + } + var Ve = /^(none|table(?!-c[ea]).+)/, + Ge = /^--/, + Ye = { position: "absolute", visibility: "hidden", display: "block" }, + Qe = { letterSpacing: "0", fontWeight: "400" }; + function Je(e, t, n) { + var r = te.exec(t); + return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t; + } + function Ke(e, t, n, r, i, o) { + var a = "width" === t ? 1 : 0, + s = 0, + u = 0; + if (n === (r ? "border" : "content")) return 0; + for (; a < 4; a += 2) + "margin" === n && (u += S.css(e, n + ne[a], !0, i)), + r + ? ("content" === n && (u -= S.css(e, "padding" + ne[a], !0, i)), + "margin" !== n && + (u -= S.css(e, "border" + ne[a] + "Width", !0, i))) + : ((u += S.css(e, "padding" + ne[a], !0, i)), + "padding" !== n + ? (u += S.css(e, "border" + ne[a] + "Width", !0, i)) + : (s += S.css(e, "border" + ne[a] + "Width", !0, i))); + return ( + !r && + 0 <= o && + (u += + Math.max( + 0, + Math.ceil( + e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - 0.5 + ) + ) || 0), + u + ); + } + function Ze(e, t, n) { + var r = Ie(e), + i = + (!y.boxSizingReliable() || n) && + "border-box" === S.css(e, "boxSizing", !1, r), + o = i, + a = Be(e, t, r), + s = "offset" + t[0].toUpperCase() + t.slice(1); + if (Me.test(a)) { + if (!n) return a; + a = "auto"; + } + return ( + ((!y.boxSizingReliable() && i) || + (!y.reliableTrDimensions() && A(e, "tr")) || + "auto" === a || + (!parseFloat(a) && "inline" === S.css(e, "display", !1, r))) && + e.getClientRects().length && + ((i = "border-box" === S.css(e, "boxSizing", !1, r)), + (o = s in e) && (a = e[s])), + (a = parseFloat(a) || 0) + + Ke(e, t, n || (i ? "border" : "content"), o, r, a) + + "px" + ); + } + function et(e, t, n, r, i) { + return new et.prototype.init(e, t, n, r, i); + } + S.extend({ + cssHooks: { + opacity: { + get: function (e, t) { + if (t) { + var n = Be(e, "opacity"); + return "" === n ? "1" : n; + } + }, + }, + }, + cssNumber: { + animationIterationCount: !0, + columnCount: !0, + fillOpacity: !0, + flexGrow: !0, + flexShrink: !0, + fontWeight: !0, + gridArea: !0, + gridColumn: !0, + gridColumnEnd: !0, + gridColumnStart: !0, + gridRow: !0, + gridRowEnd: !0, + gridRowStart: !0, + lineHeight: !0, + opacity: !0, + order: !0, + orphans: !0, + widows: !0, + zIndex: !0, + zoom: !0, + }, + cssProps: {}, + style: function (e, t, n, r) { + if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { + var i, + o, + a, + s = X(t), + u = Ge.test(t), + l = e.style; + if ( + (u || (t = Xe(s)), (a = S.cssHooks[t] || S.cssHooks[s]), void 0 === n) + ) + return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t]; + "string" === (o = typeof n) && + (i = te.exec(n)) && + i[1] && + ((n = se(e, t, i)), (o = "number")), + null != n && + n == n && + ("number" !== o || + u || + (n += (i && i[3]) || (S.cssNumber[s] ? "" : "px")), + y.clearCloneStyle || + "" !== n || + 0 !== t.indexOf("background") || + (l[t] = "inherit"), + (a && "set" in a && void 0 === (n = a.set(e, n, r))) || + (u ? l.setProperty(t, n) : (l[t] = n))); + } + }, + css: function (e, t, n, r) { + var i, + o, + a, + s = X(t); + return ( + Ge.test(t) || (t = Xe(s)), + (a = S.cssHooks[t] || S.cssHooks[s]) && + "get" in a && + (i = a.get(e, !0, n)), + void 0 === i && (i = Be(e, t, r)), + "normal" === i && t in Qe && (i = Qe[t]), + "" === n || n + ? ((o = parseFloat(i)), !0 === n || isFinite(o) ? o || 0 : i) + : i + ); + }, + }), + S.each(["height", "width"], function (e, u) { + S.cssHooks[u] = { + get: function (e, t, n) { + if (t) + return !Ve.test(S.css(e, "display")) || + (e.getClientRects().length && e.getBoundingClientRect().width) + ? Ze(e, u, n) + : We(e, Ye, function () { + return Ze(e, u, n); + }); + }, + set: function (e, t, n) { + var r, + i = Ie(e), + o = !y.scrollboxSize() && "absolute" === i.position, + a = (o || n) && "border-box" === S.css(e, "boxSizing", !1, i), + s = n ? Ke(e, u, n, a, i) : 0; + return ( + a && + o && + (s -= Math.ceil( + e["offset" + u[0].toUpperCase() + u.slice(1)] - + parseFloat(i[u]) - + Ke(e, u, "border", !1, i) - + 0.5 + )), + s && + (r = te.exec(t)) && + "px" !== (r[3] || "px") && + ((e.style[u] = t), (t = S.css(e, u))), + Je(0, t, s) + ); + }, + }; + }), + (S.cssHooks.marginLeft = $e(y.reliableMarginLeft, function (e, t) { + if (t) + return ( + (parseFloat(Be(e, "marginLeft")) || + e.getBoundingClientRect().left - + We(e, { marginLeft: 0 }, function () { + return e.getBoundingClientRect().left; + })) + "px" + ); + })), + S.each({ margin: "", padding: "", border: "Width" }, function (i, o) { + (S.cssHooks[i + o] = { + expand: function (e) { + for ( + var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; + t < 4; + t++ + ) + n[i + ne[t] + o] = r[t] || r[t - 2] || r[0]; + return n; + }, + }), + "margin" !== i && (S.cssHooks[i + o].set = Je); + }), + S.fn.extend({ + css: function (e, t) { + return $( + this, + function (e, t, n) { + var r, + i, + o = {}, + a = 0; + if (Array.isArray(t)) { + for (r = Ie(e), i = t.length; a < i; a++) + o[t[a]] = S.css(e, t[a], !1, r); + return o; + } + return void 0 !== n ? S.style(e, t, n) : S.css(e, t); + }, + e, + t, + 1 < arguments.length + ); + }, + }), + (((S.Tween = et).prototype = { + constructor: et, + init: function (e, t, n, r, i, o) { + (this.elem = e), + (this.prop = n), + (this.easing = i || S.easing._default), + (this.options = t), + (this.start = this.now = this.cur()), + (this.end = r), + (this.unit = o || (S.cssNumber[n] ? "" : "px")); + }, + cur: function () { + var e = et.propHooks[this.prop]; + return e && e.get ? e.get(this) : et.propHooks._default.get(this); + }, + run: function (e) { + var t, + n = et.propHooks[this.prop]; + return ( + this.options.duration + ? (this.pos = t = S.easing[this.easing]( + e, + this.options.duration * e, + 0, + 1, + this.options.duration + )) + : (this.pos = t = e), + (this.now = (this.end - this.start) * t + this.start), + this.options.step && + this.options.step.call(this.elem, this.now, this), + n && n.set ? n.set(this) : et.propHooks._default.set(this), + this + ); + }, + }).init.prototype = et.prototype), + ((et.propHooks = { + _default: { + get: function (e) { + var t; + return 1 !== e.elem.nodeType || + (null != e.elem[e.prop] && null == e.elem.style[e.prop]) + ? e.elem[e.prop] + : (t = S.css(e.elem, e.prop, "")) && "auto" !== t + ? t + : 0; + }, + set: function (e) { + S.fx.step[e.prop] + ? S.fx.step[e.prop](e) + : 1 !== e.elem.nodeType || + (!S.cssHooks[e.prop] && null == e.elem.style[Xe(e.prop)]) + ? (e.elem[e.prop] = e.now) + : S.style(e.elem, e.prop, e.now + e.unit); + }, + }, + }).scrollTop = et.propHooks.scrollLeft = { + set: function (e) { + e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now); + }, + }), + (S.easing = { + linear: function (e) { + return e; + }, + swing: function (e) { + return 0.5 - Math.cos(e * Math.PI) / 2; + }, + _default: "swing", + }), + (S.fx = et.prototype.init), + (S.fx.step = {}); + var tt, + nt, + rt, + it, + ot = /^(?:toggle|show|hide)$/, + at = /queueHooks$/; + function st() { + nt && + (!1 === E.hidden && C.requestAnimationFrame + ? C.requestAnimationFrame(st) + : C.setTimeout(st, S.fx.interval), + S.fx.tick()); + } + function ut() { + return ( + C.setTimeout(function () { + tt = void 0; + }), + (tt = Date.now()) + ); + } + function lt(e, t) { + var n, + r = 0, + i = { height: e }; + for (t = t ? 1 : 0; r < 4; r += 2 - t) + i["margin" + (n = ne[r])] = i["padding" + n] = e; + return t && (i.opacity = i.width = e), i; + } + function ct(e, t, n) { + for ( + var r, + i = (ft.tweeners[t] || []).concat(ft.tweeners["*"]), + o = 0, + a = i.length; + o < a; + o++ + ) + if ((r = i[o].call(n, t, e))) return r; + } + function ft(o, e, t) { + var n, + a, + r = 0, + i = ft.prefilters.length, + s = S.Deferred().always(function () { + delete u.elem; + }), + u = function () { + if (a) return !1; + for ( + var e = tt || ut(), + t = Math.max(0, l.startTime + l.duration - e), + n = 1 - (t / l.duration || 0), + r = 0, + i = l.tweens.length; + r < i; + r++ + ) + l.tweens[r].run(n); + return ( + s.notifyWith(o, [l, n, t]), + n < 1 && i + ? t + : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1) + ); + }, + l = s.promise({ + elem: o, + props: S.extend({}, e), + opts: S.extend(!0, { specialEasing: {}, easing: S.easing._default }, t), + originalProperties: e, + originalOptions: t, + startTime: tt || ut(), + duration: t.duration, + tweens: [], + createTween: function (e, t) { + var n = S.Tween( + o, + l.opts, + e, + t, + l.opts.specialEasing[e] || l.opts.easing + ); + return l.tweens.push(n), n; + }, + stop: function (e) { + var t = 0, + n = e ? l.tweens.length : 0; + if (a) return this; + for (a = !0; t < n; t++) l.tweens[t].run(1); + return ( + e + ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) + : s.rejectWith(o, [l, e]), + this + ); + }, + }), + c = l.props; + for ( + !(function (e, t) { + var n, r, i, o, a; + for (n in e) + if ( + ((i = t[(r = X(n))]), + (o = e[n]), + Array.isArray(o) && ((i = o[1]), (o = e[n] = o[0])), + n !== r && ((e[r] = o), delete e[n]), + (a = S.cssHooks[r]) && ("expand" in a)) + ) + for (n in ((o = a.expand(o)), delete e[r], o)) + (n in e) || ((e[n] = o[n]), (t[n] = i)); + else t[r] = i; + })(c, l.opts.specialEasing); + r < i; + r++ + ) + if ((n = ft.prefilters[r].call(l, o, c, l.opts))) + return ( + m(n.stop) && + (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), + n + ); + return ( + S.map(c, ct, l), + m(l.opts.start) && l.opts.start.call(o, l), + l + .progress(l.opts.progress) + .done(l.opts.done, l.opts.complete) + .fail(l.opts.fail) + .always(l.opts.always), + S.fx.timer(S.extend(u, { elem: o, anim: l, queue: l.opts.queue })), + l + ); + } + (S.Animation = S.extend(ft, { + tweeners: { + "*": [ + function (e, t) { + var n = this.createTween(e, t); + return se(n.elem, e, te.exec(t), n), n; + }, + ], + }, + tweener: function (e, t) { + m(e) ? ((t = e), (e = ["*"])) : (e = e.match(P)); + for (var n, r = 0, i = e.length; r < i; r++) + (n = e[r]), + (ft.tweeners[n] = ft.tweeners[n] || []), + ft.tweeners[n].unshift(t); + }, + prefilters: [ + function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l, + c, + f = "width" in t || "height" in t, + p = this, + d = {}, + h = e.style, + g = e.nodeType && ae(e), + v = Y.get(e, "fxshow"); + for (r in (n.queue || + (null == (a = S._queueHooks(e, "fx")).unqueued && + ((a.unqueued = 0), + (s = a.empty.fire), + (a.empty.fire = function () { + a.unqueued || s(); + })), + a.unqueued++, + p.always(function () { + p.always(function () { + a.unqueued--, S.queue(e, "fx").length || a.empty.fire(); + }); + })), + t)) + if (((i = t[r]), ot.test(i))) { + if ( + (delete t[r], + (o = o || "toggle" === i), + i === (g ? "hide" : "show")) + ) { + if ("show" !== i || !v || void 0 === v[r]) continue; + g = !0; + } + d[r] = (v && v[r]) || S.style(e, r); + } + if ((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d)) + for (r in (f && + 1 === e.nodeType && + ((n.overflow = [h.overflow, h.overflowX, h.overflowY]), + null == (l = v && v.display) && (l = Y.get(e, "display")), + "none" === (c = S.css(e, "display")) && + (l + ? (c = l) + : (le([e], !0), + (l = e.style.display || l), + (c = S.css(e, "display")), + le([e]))), + ("inline" === c || ("inline-block" === c && null != l)) && + "none" === S.css(e, "float") && + (u || + (p.done(function () { + h.display = l; + }), + null == l && ((c = h.display), (l = "none" === c ? "" : c))), + (h.display = "inline-block"))), + n.overflow && + ((h.overflow = "hidden"), + p.always(function () { + (h.overflow = n.overflow[0]), + (h.overflowX = n.overflow[1]), + (h.overflowY = n.overflow[2]); + })), + (u = !1), + d)) + u || + (v + ? "hidden" in v && (g = v.hidden) + : (v = Y.access(e, "fxshow", { display: l })), + o && (v.hidden = !g), + g && le([e], !0), + p.done(function () { + for (r in (g || le([e]), Y.remove(e, "fxshow"), d)) + S.style(e, r, d[r]); + })), + (u = ct(g ? v[r] : 0, r, p)), + r in v || + ((v[r] = u.start), g && ((u.end = u.start), (u.start = 0))); + }, + ], + prefilter: function (e, t) { + t ? ft.prefilters.unshift(e) : ft.prefilters.push(e); + }, + })), + (S.speed = function (e, t, n) { + var r = + e && "object" == typeof e + ? S.extend({}, e) + : { + complete: n || (!n && t) || (m(e) && e), + duration: e, + easing: (n && t) || (t && !m(t) && t), + }; + return ( + S.fx.off + ? (r.duration = 0) + : "number" != typeof r.duration && + (r.duration in S.fx.speeds + ? (r.duration = S.fx.speeds[r.duration]) + : (r.duration = S.fx.speeds._default)), + (null != r.queue && !0 !== r.queue) || (r.queue = "fx"), + (r.old = r.complete), + (r.complete = function () { + m(r.old) && r.old.call(this), r.queue && S.dequeue(this, r.queue); + }), + r + ); + }), + S.fn.extend({ + fadeTo: function (e, t, n, r) { + return this.filter(ae) + .css("opacity", 0) + .show() + .end() + .animate({ opacity: t }, e, n, r); + }, + animate: function (t, e, n, r) { + var i = S.isEmptyObject(t), + o = S.speed(e, n, r), + a = function () { + var e = ft(this, S.extend({}, t), o); + (i || Y.get(this, "finish")) && e.stop(!0); + }; + return ( + (a.finish = a), + i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) + ); + }, + stop: function (i, e, o) { + var a = function (e) { + var t = e.stop; + delete e.stop, t(o); + }; + return ( + "string" != typeof i && ((o = e), (e = i), (i = void 0)), + e && this.queue(i || "fx", []), + this.each(function () { + var e = !0, + t = null != i && i + "queueHooks", + n = S.timers, + r = Y.get(this); + if (t) r[t] && r[t].stop && a(r[t]); + else for (t in r) r[t] && r[t].stop && at.test(t) && a(r[t]); + for (t = n.length; t--; ) + n[t].elem !== this || + (null != i && n[t].queue !== i) || + (n[t].anim.stop(o), (e = !1), n.splice(t, 1)); + (!e && o) || S.dequeue(this, i); + }) + ); + }, + finish: function (a) { + return ( + !1 !== a && (a = a || "fx"), + this.each(function () { + var e, + t = Y.get(this), + n = t[a + "queue"], + r = t[a + "queueHooks"], + i = S.timers, + o = n ? n.length : 0; + for ( + t.finish = !0, + S.queue(this, a, []), + r && r.stop && r.stop.call(this, !0), + e = i.length; + e--; + + ) + i[e].elem === this && + i[e].queue === a && + (i[e].anim.stop(!0), i.splice(e, 1)); + for (e = 0; e < o; e++) + n[e] && n[e].finish && n[e].finish.call(this); + delete t.finish; + }) + ); + }, + }), + S.each(["toggle", "show", "hide"], function (e, r) { + var i = S.fn[r]; + S.fn[r] = function (e, t, n) { + return null == e || "boolean" == typeof e + ? i.apply(this, arguments) + : this.animate(lt(r, !0), e, t, n); + }; + }), + S.each( + { + slideDown: lt("show"), + slideUp: lt("hide"), + slideToggle: lt("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" }, + }, + function (e, r) { + S.fn[e] = function (e, t, n) { + return this.animate(r, e, t, n); + }; + } + ), + (S.timers = []), + (S.fx.tick = function () { + var e, + t = 0, + n = S.timers; + for (tt = Date.now(); t < n.length; t++) + (e = n[t])() || n[t] !== e || n.splice(t--, 1); + n.length || S.fx.stop(), (tt = void 0); + }), + (S.fx.timer = function (e) { + S.timers.push(e), S.fx.start(); + }), + (S.fx.interval = 13), + (S.fx.start = function () { + nt || ((nt = !0), st()); + }), + (S.fx.stop = function () { + nt = null; + }), + (S.fx.speeds = { slow: 600, fast: 200, _default: 400 }), + (S.fn.delay = function (r, e) { + return ( + (r = (S.fx && S.fx.speeds[r]) || r), + (e = e || "fx"), + this.queue(e, function (e, t) { + var n = C.setTimeout(e, r); + t.stop = function () { + C.clearTimeout(n); + }; + }) + ); + }), + (rt = E.createElement("input")), + (it = E.createElement("select").appendChild(E.createElement("option"))), + (rt.type = "checkbox"), + (y.checkOn = "" !== rt.value), + (y.optSelected = it.selected), + ((rt = E.createElement("input")).value = "t"), + (rt.type = "radio"), + (y.radioValue = "t" === rt.value); + var pt, + dt = S.expr.attrHandle; + S.fn.extend({ + attr: function (e, t) { + return $(this, S.attr, e, t, 1 < arguments.length); + }, + removeAttr: function (e) { + return this.each(function () { + S.removeAttr(this, e); + }); + }, + }), + S.extend({ + attr: function (e, t, n) { + var r, + i, + o = e.nodeType; + if (3 !== o && 8 !== o && 2 !== o) + return "undefined" == typeof e.getAttribute + ? S.prop(e, t, n) + : ((1 === o && S.isXMLDoc(e)) || + (i = + S.attrHooks[t.toLowerCase()] || + (S.expr.match.bool.test(t) ? pt : void 0)), + void 0 !== n + ? null === n + ? void S.removeAttr(e, t) + : i && "set" in i && void 0 !== (r = i.set(e, n, t)) + ? r + : (e.setAttribute(t, n + ""), n) + : i && "get" in i && null !== (r = i.get(e, t)) + ? r + : null == (r = S.find.attr(e, t)) + ? void 0 + : r); + }, + attrHooks: { + type: { + set: function (e, t) { + if (!y.radioValue && "radio" === t && A(e, "input")) { + var n = e.value; + return e.setAttribute("type", t), n && (e.value = n), t; + } + }, + }, + }, + removeAttr: function (e, t) { + var n, + r = 0, + i = t && t.match(P); + if (i && 1 === e.nodeType) while ((n = i[r++])) e.removeAttribute(n); + }, + }), + (pt = { + set: function (e, t, n) { + return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n), n; + }, + }), + S.each(S.expr.match.bool.source.match(/\w+/g), function (e, t) { + var a = dt[t] || S.find.attr; + dt[t] = function (e, t, n) { + var r, + i, + o = t.toLowerCase(); + return ( + n || + ((i = dt[o]), + (dt[o] = r), + (r = null != a(e, t, n) ? o : null), + (dt[o] = i)), + r + ); + }; + }); + var ht = /^(?:input|select|textarea|button)$/i, + gt = /^(?:a|area)$/i; + function vt(e) { + return (e.match(P) || []).join(" "); + } + function yt(e) { + return (e.getAttribute && e.getAttribute("class")) || ""; + } + function mt(e) { + return Array.isArray(e) ? e : ("string" == typeof e && e.match(P)) || []; + } + S.fn.extend({ + prop: function (e, t) { + return $(this, S.prop, e, t, 1 < arguments.length); + }, + removeProp: function (e) { + return this.each(function () { + delete this[S.propFix[e] || e]; + }); + }, + }), + S.extend({ + prop: function (e, t, n) { + var r, + i, + o = e.nodeType; + if (3 !== o && 8 !== o && 2 !== o) + return ( + (1 === o && S.isXMLDoc(e)) || + ((t = S.propFix[t] || t), (i = S.propHooks[t])), + void 0 !== n + ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) + ? r + : (e[t] = n) + : i && "get" in i && null !== (r = i.get(e, t)) + ? r + : e[t] + ); + }, + propHooks: { + tabIndex: { + get: function (e) { + var t = S.find.attr(e, "tabindex"); + return t + ? parseInt(t, 10) + : ht.test(e.nodeName) || (gt.test(e.nodeName) && e.href) + ? 0 + : -1; + }, + }, + }, + propFix: { for: "htmlFor", class: "className" }, + }), + y.optSelected || + (S.propHooks.selected = { + get: function (e) { + var t = e.parentNode; + return t && t.parentNode && t.parentNode.selectedIndex, null; + }, + set: function (e) { + var t = e.parentNode; + t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex); + }, + }), + S.each( + [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable", + ], + function () { + S.propFix[this.toLowerCase()] = this; + } + ), + S.fn.extend({ + addClass: function (t) { + var e, + n, + r, + i, + o, + a, + s, + u = 0; + if (m(t)) + return this.each(function (e) { + S(this).addClass(t.call(this, e, yt(this))); + }); + if ((e = mt(t)).length) + while ((n = this[u++])) + if (((i = yt(n)), (r = 1 === n.nodeType && " " + vt(i) + " "))) { + a = 0; + while ((o = e[a++])) + r.indexOf(" " + o + " ") < 0 && (r += o + " "); + i !== (s = vt(r)) && n.setAttribute("class", s); + } + return this; + }, + removeClass: function (t) { + var e, + n, + r, + i, + o, + a, + s, + u = 0; + if (m(t)) + return this.each(function (e) { + S(this).removeClass(t.call(this, e, yt(this))); + }); + if (!arguments.length) return this.attr("class", ""); + if ((e = mt(t)).length) + while ((n = this[u++])) + if (((i = yt(n)), (r = 1 === n.nodeType && " " + vt(i) + " "))) { + a = 0; + while ((o = e[a++])) + while (-1 < r.indexOf(" " + o + " ")) + r = r.replace(" " + o + " ", " "); + i !== (s = vt(r)) && n.setAttribute("class", s); + } + return this; + }, + toggleClass: function (i, t) { + var o = typeof i, + a = "string" === o || Array.isArray(i); + return "boolean" == typeof t && a + ? t + ? this.addClass(i) + : this.removeClass(i) + : m(i) + ? this.each(function (e) { + S(this).toggleClass(i.call(this, e, yt(this), t), t); + }) + : this.each(function () { + var e, t, n, r; + if (a) { + (t = 0), (n = S(this)), (r = mt(i)); + while ((e = r[t++])) + n.hasClass(e) ? n.removeClass(e) : n.addClass(e); + } else (void 0 !== i && "boolean" !== o) || ((e = yt(this)) && Y.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Y.get(this, "__className__") || "")); + }); + }, + hasClass: function (e) { + var t, + n, + r = 0; + t = " " + e + " "; + while ((n = this[r++])) + if (1 === n.nodeType && -1 < (" " + vt(yt(n)) + " ").indexOf(t)) + return !0; + return !1; + }, + }); + var xt = /\r/g; + S.fn.extend({ + val: function (n) { + var r, + e, + i, + t = this[0]; + return arguments.length + ? ((i = m(n)), + this.each(function (e) { + var t; + 1 === this.nodeType && + (null == (t = i ? n.call(this, e, S(this).val()) : n) + ? (t = "") + : "number" == typeof t + ? (t += "") + : Array.isArray(t) && + (t = S.map(t, function (e) { + return null == e ? "" : e + ""; + })), + ((r = + S.valHooks[this.type] || + S.valHooks[this.nodeName.toLowerCase()]) && + "set" in r && + void 0 !== r.set(this, t, "value")) || + (this.value = t)); + })) + : t + ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && + "get" in r && + void 0 !== (e = r.get(t, "value")) + ? e + : "string" == typeof (e = t.value) + ? e.replace(xt, "") + : null == e + ? "" + : e + : void 0; + }, + }), + S.extend({ + valHooks: { + option: { + get: function (e) { + var t = S.find.attr(e, "value"); + return null != t ? t : vt(S.text(e)); + }, + }, + select: { + get: function (e) { + var t, + n, + r, + i = e.options, + o = e.selectedIndex, + a = "select-one" === e.type, + s = a ? null : [], + u = a ? o + 1 : i.length; + for (r = o < 0 ? u : a ? o : 0; r < u; r++) + if ( + ((n = i[r]).selected || r === o) && + !n.disabled && + (!n.parentNode.disabled || !A(n.parentNode, "optgroup")) + ) { + if (((t = S(n).val()), a)) return t; + s.push(t); + } + return s; + }, + set: function (e, t) { + var n, + r, + i = e.options, + o = S.makeArray(t), + a = i.length; + while (a--) + ((r = i[a]).selected = + -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0); + return n || (e.selectedIndex = -1), o; + }, + }, + }, + }), + S.each(["radio", "checkbox"], function () { + (S.valHooks[this] = { + set: function (e, t) { + if (Array.isArray(t)) + return (e.checked = -1 < S.inArray(S(e).val(), t)); + }, + }), + y.checkOn || + (S.valHooks[this].get = function (e) { + return null === e.getAttribute("value") ? "on" : e.value; + }); + }), + (y.focusin = "onfocusin" in C); + var bt = /^(?:focusinfocus|focusoutblur)$/, + wt = function (e) { + e.stopPropagation(); + }; + S.extend(S.event, { + trigger: function (e, t, n, r) { + var i, + o, + a, + s, + u, + l, + c, + f, + p = [n || E], + d = v.call(e, "type") ? e.type : e, + h = v.call(e, "namespace") ? e.namespace.split(".") : []; + if ( + ((o = f = a = n = n || E), + 3 !== n.nodeType && + 8 !== n.nodeType && + !bt.test(d + S.event.triggered) && + (-1 < d.indexOf(".") && ((d = (h = d.split(".")).shift()), h.sort()), + (u = d.indexOf(":") < 0 && "on" + d), + ((e = e[S.expando] + ? e + : new S.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3), + (e.namespace = h.join(".")), + (e.rnamespace = e.namespace + ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") + : null), + (e.result = void 0), + e.target || (e.target = n), + (t = null == t ? [e] : S.makeArray(t, [e])), + (c = S.event.special[d] || {}), + r || !c.trigger || !1 !== c.trigger.apply(n, t))) + ) { + if (!r && !c.noBubble && !x(n)) { + for ( + s = c.delegateType || d, bt.test(s + d) || (o = o.parentNode); + o; + o = o.parentNode + ) + p.push(o), (a = o); + a === (n.ownerDocument || E) && + p.push(a.defaultView || a.parentWindow || C); + } + i = 0; + while ((o = p[i++]) && !e.isPropagationStopped()) + (f = o), + (e.type = 1 < i ? s : c.bindType || d), + (l = + (Y.get(o, "events") || Object.create(null))[e.type] && + Y.get(o, "handle")) && l.apply(o, t), + (l = u && o[u]) && + l.apply && + V(o) && + ((e.result = l.apply(o, t)), + !1 === e.result && e.preventDefault()); + return ( + (e.type = d), + r || + e.isDefaultPrevented() || + (c._default && !1 !== c._default.apply(p.pop(), t)) || + !V(n) || + (u && + m(n[d]) && + !x(n) && + ((a = n[u]) && (n[u] = null), + (S.event.triggered = d), + e.isPropagationStopped() && f.addEventListener(d, wt), + n[d](), + e.isPropagationStopped() && f.removeEventListener(d, wt), + (S.event.triggered = void 0), + a && (n[u] = a))), + e.result + ); + } + }, + simulate: function (e, t, n) { + var r = S.extend(new S.Event(), n, { type: e, isSimulated: !0 }); + S.event.trigger(r, null, t); + }, + }), + S.fn.extend({ + trigger: function (e, t) { + return this.each(function () { + S.event.trigger(e, t, this); + }); + }, + triggerHandler: function (e, t) { + var n = this[0]; + if (n) return S.event.trigger(e, t, n, !0); + }, + }), + y.focusin || + S.each({ focus: "focusin", blur: "focusout" }, function (n, r) { + var i = function (e) { + S.event.simulate(r, e.target, S.event.fix(e)); + }; + S.event.special[r] = { + setup: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r); + t || e.addEventListener(n, i, !0), Y.access(e, r, (t || 0) + 1); + }, + teardown: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r) - 1; + t + ? Y.access(e, r, t) + : (e.removeEventListener(n, i, !0), Y.remove(e, r)); + }, + }; + }); + var Tt = C.location, + Ct = { guid: Date.now() }, + Et = /\?/; + S.parseXML = function (e) { + var t; + if (!e || "string" != typeof e) return null; + try { + t = new C.DOMParser().parseFromString(e, "text/xml"); + } catch (e) { + t = void 0; + } + return ( + (t && !t.getElementsByTagName("parsererror").length) || + S.error("Invalid XML: " + e), + t + ); + }; + var St = /\[\]$/, + kt = /\r?\n/g, + At = /^(?:submit|button|image|reset|file)$/i, + Nt = /^(?:input|select|textarea|keygen)/i; + function Dt(n, e, r, i) { + var t; + if (Array.isArray(e)) + S.each(e, function (e, t) { + r || St.test(n) + ? i(n, t) + : Dt( + n + "[" + ("object" == typeof t && null != t ? e : "") + "]", + t, + r, + i + ); + }); + else if (r || "object" !== w(e)) i(n, e); + else for (t in e) Dt(n + "[" + t + "]", e[t], r, i); + } + (S.param = function (e, t) { + var n, + r = [], + i = function (e, t) { + var n = m(t) ? t() : t; + r[r.length] = + encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n); + }; + if (null == e) return ""; + if (Array.isArray(e) || (e.jquery && !S.isPlainObject(e))) + S.each(e, function () { + i(this.name, this.value); + }); + else for (n in e) Dt(n, e[n], t, i); + return r.join("&"); + }), + S.fn.extend({ + serialize: function () { + return S.param(this.serializeArray()); + }, + serializeArray: function () { + return this.map(function () { + var e = S.prop(this, "elements"); + return e ? S.makeArray(e) : this; + }) + .filter(function () { + var e = this.type; + return ( + this.name && + !S(this).is(":disabled") && + Nt.test(this.nodeName) && + !At.test(e) && + (this.checked || !pe.test(e)) + ); + }) + .map(function (e, t) { + var n = S(this).val(); + return null == n + ? null + : Array.isArray(n) + ? S.map(n, function (e) { + return { name: t.name, value: e.replace(kt, "\r\n") }; + }) + : { name: t.name, value: n.replace(kt, "\r\n") }; + }) + .get(); + }, + }); + var jt = /%20/g, + qt = /#.*$/, + Lt = /([?&])_=[^&]*/, + Ht = /^(.*?):[ \t]*([^\r\n]*)$/gm, + Ot = /^(?:GET|HEAD)$/, + Pt = /^\/\//, + Rt = {}, + Mt = {}, + It = "*/".concat("*"), + Wt = E.createElement("a"); + function Ft(o) { + return function (e, t) { + "string" != typeof e && ((t = e), (e = "*")); + var n, + r = 0, + i = e.toLowerCase().match(P) || []; + if (m(t)) + while ((n = i[r++])) + "+" === n[0] + ? ((n = n.slice(1) || "*"), (o[n] = o[n] || []).unshift(t)) + : (o[n] = o[n] || []).push(t); + }; + } + function Bt(t, i, o, a) { + var s = {}, + u = t === Mt; + function l(e) { + var r; + return ( + (s[e] = !0), + S.each(t[e] || [], function (e, t) { + var n = t(i, o, a); + return "string" != typeof n || u || s[n] + ? u + ? !(r = n) + : void 0 + : (i.dataTypes.unshift(n), l(n), !1); + }), + r + ); + } + return l(i.dataTypes[0]) || (!s["*"] && l("*")); + } + function $t(e, t) { + var n, + r, + i = S.ajaxSettings.flatOptions || {}; + for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]); + return r && S.extend(!0, e, r), e; + } + (Wt.href = Tt.href), + S.extend({ + active: 0, + lastModified: {}, + etag: {}, + ajaxSettings: { + url: Tt.href, + type: "GET", + isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test( + Tt.protocol + ), + global: !0, + processData: !0, + async: !0, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + accepts: { + "*": It, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript", + }, + contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON", + }, + converters: { + "* text": String, + "text html": !0, + "text json": JSON.parse, + "text xml": S.parseXML, + }, + flatOptions: { url: !0, context: !0 }, + }, + ajaxSetup: function (e, t) { + return t ? $t($t(e, S.ajaxSettings), t) : $t(S.ajaxSettings, e); + }, + ajaxPrefilter: Ft(Rt), + ajaxTransport: Ft(Mt), + ajax: function (e, t) { + "object" == typeof e && ((t = e), (e = void 0)), (t = t || {}); + var c, + f, + p, + n, + d, + r, + h, + g, + i, + o, + v = S.ajaxSetup({}, t), + y = v.context || v, + m = v.context && (y.nodeType || y.jquery) ? S(y) : S.event, + x = S.Deferred(), + b = S.Callbacks("once memory"), + w = v.statusCode || {}, + a = {}, + s = {}, + u = "canceled", + T = { + readyState: 0, + getResponseHeader: function (e) { + var t; + if (h) { + if (!n) { + n = {}; + while ((t = Ht.exec(p))) + n[t[1].toLowerCase() + " "] = ( + n[t[1].toLowerCase() + " "] || [] + ).concat(t[2]); + } + t = n[e.toLowerCase() + " "]; + } + return null == t ? null : t.join(", "); + }, + getAllResponseHeaders: function () { + return h ? p : null; + }, + setRequestHeader: function (e, t) { + return ( + null == h && + ((e = s[e.toLowerCase()] = s[e.toLowerCase()] || e), + (a[e] = t)), + this + ); + }, + overrideMimeType: function (e) { + return null == h && (v.mimeType = e), this; + }, + statusCode: function (e) { + var t; + if (e) + if (h) T.always(e[T.status]); + else for (t in e) w[t] = [w[t], e[t]]; + return this; + }, + abort: function (e) { + var t = e || u; + return c && c.abort(t), l(0, t), this; + }, + }; + if ( + (x.promise(T), + (v.url = ((e || v.url || Tt.href) + "").replace( + Pt, + Tt.protocol + "//" + )), + (v.type = t.method || t.type || v.method || v.type), + (v.dataTypes = (v.dataType || "*").toLowerCase().match(P) || [""]), + null == v.crossDomain) + ) { + r = E.createElement("a"); + try { + (r.href = v.url), + (r.href = r.href), + (v.crossDomain = + Wt.protocol + "//" + Wt.host != r.protocol + "//" + r.host); + } catch (e) { + v.crossDomain = !0; + } + } + if ( + (v.data && + v.processData && + "string" != typeof v.data && + (v.data = S.param(v.data, v.traditional)), + Bt(Rt, v, t, T), + h) + ) + return T; + for (i in ((g = S.event && v.global) && + 0 == S.active++ && + S.event.trigger("ajaxStart"), + (v.type = v.type.toUpperCase()), + (v.hasContent = !Ot.test(v.type)), + (f = v.url.replace(qt, "")), + v.hasContent + ? v.data && + v.processData && + 0 === + (v.contentType || "").indexOf( + "application/x-www-form-urlencoded" + ) && + (v.data = v.data.replace(jt, "+")) + : ((o = v.url.slice(f.length)), + v.data && + (v.processData || "string" == typeof v.data) && + ((f += (Et.test(f) ? "&" : "?") + v.data), delete v.data), + !1 === v.cache && + ((f = f.replace(Lt, "$1")), + (o = (Et.test(f) ? "&" : "?") + "_=" + Ct.guid++ + o)), + (v.url = f + o)), + v.ifModified && + (S.lastModified[f] && + T.setRequestHeader("If-Modified-Since", S.lastModified[f]), + S.etag[f] && T.setRequestHeader("If-None-Match", S.etag[f])), + ((v.data && v.hasContent && !1 !== v.contentType) || t.contentType) && + T.setRequestHeader("Content-Type", v.contentType), + T.setRequestHeader( + "Accept", + v.dataTypes[0] && v.accepts[v.dataTypes[0]] + ? v.accepts[v.dataTypes[0]] + + ("*" !== v.dataTypes[0] ? ", " + It + "; q=0.01" : "") + : v.accepts["*"] + ), + v.headers)) + T.setRequestHeader(i, v.headers[i]); + if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) + return T.abort(); + if ( + ((u = "abort"), + b.add(v.complete), + T.done(v.success), + T.fail(v.error), + (c = Bt(Mt, v, t, T))) + ) { + if (((T.readyState = 1), g && m.trigger("ajaxSend", [T, v]), h)) + return T; + v.async && + 0 < v.timeout && + (d = C.setTimeout(function () { + T.abort("timeout"); + }, v.timeout)); + try { + (h = !1), c.send(a, l); + } catch (e) { + if (h) throw e; + l(-1, e); + } + } else l(-1, "No Transport"); + function l(e, t, n, r) { + var i, + o, + a, + s, + u, + l = t; + h || + ((h = !0), + d && C.clearTimeout(d), + (c = void 0), + (p = r || ""), + (T.readyState = 0 < e ? 4 : 0), + (i = (200 <= e && e < 300) || 304 === e), + n && + (s = (function (e, t, n) { + var r, + i, + o, + a, + s = e.contents, + u = e.dataTypes; + while ("*" === u[0]) + u.shift(), + void 0 === r && + (r = e.mimeType || t.getResponseHeader("Content-Type")); + if (r) + for (i in s) + if (s[i] && s[i].test(r)) { + u.unshift(i); + break; + } + if (u[0] in n) o = u[0]; + else { + for (i in n) { + if (!u[0] || e.converters[i + " " + u[0]]) { + o = i; + break; + } + a || (a = i); + } + o = o || a; + } + if (o) return o !== u[0] && u.unshift(o), n[o]; + })(v, T, n)), + !i && + -1 < S.inArray("script", v.dataTypes) && + (v.converters["text script"] = function () {}), + (s = (function (e, t, n, r) { + var i, + o, + a, + s, + u, + l = {}, + c = e.dataTypes.slice(); + if (c[1]) + for (a in e.converters) l[a.toLowerCase()] = e.converters[a]; + o = c.shift(); + while (o) + if ( + (e.responseFields[o] && (n[e.responseFields[o]] = t), + !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), + (u = o), + (o = c.shift())) + ) + if ("*" === o) o = u; + else if ("*" !== u && u !== o) { + if (!(a = l[u + " " + o] || l["* " + o])) + for (i in l) + if ( + (s = i.split(" "))[1] === o && + (a = l[u + " " + s[0]] || l["* " + s[0]]) + ) { + !0 === a + ? (a = l[i]) + : !0 !== l[i] && ((o = s[0]), c.unshift(s[1])); + break; + } + if (!0 !== a) + if (a && e["throws"]) t = a(t); + else + try { + t = a(t); + } catch (e) { + return { + state: "parsererror", + error: a + ? e + : "No conversion from " + u + " to " + o, + }; + } + } + return { state: "success", data: t }; + })(v, s, T, i)), + i + ? (v.ifModified && + ((u = T.getResponseHeader("Last-Modified")) && + (S.lastModified[f] = u), + (u = T.getResponseHeader("etag")) && (S.etag[f] = u)), + 204 === e || "HEAD" === v.type + ? (l = "nocontent") + : 304 === e + ? (l = "notmodified") + : ((l = s.state), (o = s.data), (i = !(a = s.error)))) + : ((a = l), (!e && l) || ((l = "error"), e < 0 && (e = 0))), + (T.status = e), + (T.statusText = (t || l) + ""), + i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), + T.statusCode(w), + (w = void 0), + g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), + b.fireWith(y, [T, l]), + g && + (m.trigger("ajaxComplete", [T, v]), + --S.active || S.event.trigger("ajaxStop"))); + } + return T; + }, + getJSON: function (e, t, n) { + return S.get(e, t, n, "json"); + }, + getScript: function (e, t) { + return S.get(e, void 0, t, "script"); + }, + }), + S.each(["get", "post"], function (e, i) { + S[i] = function (e, t, n, r) { + return ( + m(t) && ((r = r || n), (n = t), (t = void 0)), + S.ajax( + S.extend( + { url: e, type: i, dataType: r, data: t, success: n }, + S.isPlainObject(e) && e + ) + ) + ); + }; + }), + S.ajaxPrefilter(function (e) { + var t; + for (t in e.headers) + "content-type" === t.toLowerCase() && + (e.contentType = e.headers[t] || ""); + }), + (S._evalUrl = function (e, t, n) { + return S.ajax({ + url: e, + type: "GET", + dataType: "script", + cache: !0, + async: !1, + global: !1, + converters: { "text script": function () {} }, + dataFilter: function (e) { + S.globalEval(e, t, n); + }, + }); + }), + S.fn.extend({ + wrapAll: function (e) { + var t; + return ( + this[0] && + (m(e) && (e = e.call(this[0])), + (t = S(e, this[0].ownerDocument).eq(0).clone(!0)), + this[0].parentNode && t.insertBefore(this[0]), + t + .map(function () { + var e = this; + while (e.firstElementChild) e = e.firstElementChild; + return e; + }) + .append(this)), + this + ); + }, + wrapInner: function (n) { + return m(n) + ? this.each(function (e) { + S(this).wrapInner(n.call(this, e)); + }) + : this.each(function () { + var e = S(this), + t = e.contents(); + t.length ? t.wrapAll(n) : e.append(n); + }); + }, + wrap: function (t) { + var n = m(t); + return this.each(function (e) { + S(this).wrapAll(n ? t.call(this, e) : t); + }); + }, + unwrap: function (e) { + return ( + this.parent(e) + .not("body") + .each(function () { + S(this).replaceWith(this.childNodes); + }), + this + ); + }, + }), + (S.expr.pseudos.hidden = function (e) { + return !S.expr.pseudos.visible(e); + }), + (S.expr.pseudos.visible = function (e) { + return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length); + }), + (S.ajaxSettings.xhr = function () { + try { + return new C.XMLHttpRequest(); + } catch (e) {} + }); + var _t = { 0: 200, 1223: 204 }, + zt = S.ajaxSettings.xhr(); + (y.cors = !!zt && "withCredentials" in zt), + (y.ajax = zt = !!zt), + S.ajaxTransport(function (i) { + var o, a; + if (y.cors || (zt && !i.crossDomain)) + return { + send: function (e, t) { + var n, + r = i.xhr(); + if ( + (r.open(i.type, i.url, i.async, i.username, i.password), + i.xhrFields) + ) + for (n in i.xhrFields) r[n] = i.xhrFields[n]; + for (n in (i.mimeType && + r.overrideMimeType && + r.overrideMimeType(i.mimeType), + i.crossDomain || + e["X-Requested-With"] || + (e["X-Requested-With"] = "XMLHttpRequest"), + e)) + r.setRequestHeader(n, e[n]); + (o = function (e) { + return function () { + o && + ((o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null), + "abort" === e + ? r.abort() + : "error" === e + ? "number" != typeof r.status + ? t(0, "error") + : t(r.status, r.statusText) + : t( + _t[r.status] || r.status, + r.statusText, + "text" !== (r.responseType || "text") || + "string" != typeof r.responseText + ? { binary: r.response } + : { text: r.responseText }, + r.getAllResponseHeaders() + )); + }; + }), + (r.onload = o()), + (a = r.onerror = r.ontimeout = o("error")), + void 0 !== r.onabort + ? (r.onabort = a) + : (r.onreadystatechange = function () { + 4 === r.readyState && + C.setTimeout(function () { + o && a(); + }); + }), + (o = o("abort")); + try { + r.send((i.hasContent && i.data) || null); + } catch (e) { + if (o) throw e; + } + }, + abort: function () { + o && o(); + }, + }; + }), + S.ajaxPrefilter(function (e) { + e.crossDomain && (e.contents.script = !1); + }), + S.ajaxSetup({ + accepts: { + script: + "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript", + }, + contents: { script: /\b(?:java|ecma)script\b/ }, + converters: { + "text script": function (e) { + return S.globalEval(e), e; + }, + }, + }), + S.ajaxPrefilter("script", function (e) { + void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET"); + }), + S.ajaxTransport("script", function (n) { + var r, i; + if (n.crossDomain || n.scriptAttrs) + return { + send: function (e, t) { + (r = S("