summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes2
-rw-r--r--.htaccess13
-rw-r--r--.well-known/humans.txt79
-rw-r--r--.well-known/robots.txt5
-rw-r--r--.well-known/security.txt3
-rw-r--r--404.html115
-rw-r--r--_redirects0
-rw-r--r--about/css/.htaccess1
-rw-r--r--about/css/blog-slider.css16
-rw-r--r--about/css/loader-animation.css122
-rw-r--r--about/css/main.css32
-rw-r--r--about/css/navigation-bar.css208
-rw-r--r--about/index.html270
-rw-r--r--about/legacy-I1vRDCX6gfVVC2Cg7syJ.html95
-rw-r--r--assets/.htaccess1
-rw-r--r--assets/audio/sadness.mp3bin0 -> 4244586 bytes
-rw-r--r--assets/audio/{SHA}4v3ZxUfx+KYkFDtpE2k5NvNdYE=.mp3bin0 -> 83728 bytes
-rw-r--r--assets/configs/particles.json110
-rw-r--r--assets/favicon/og-favicon.icobin0 -> 38038 bytes
-rw-r--r--assets/imgs/clairo.webpbin0 -> 1086566 bytes
-rw-r--r--assets/imgs/clairo2.gifbin0 -> 3961774 bytes
-rw-r--r--assets/users/.htpasswdmufxo45v5tz7bAWr1
-rw-r--r--changelog/.htaccess4
-rw-r--r--changelog/index.html54
-rw-r--r--cl/index.html1
-rw-r--r--css/.htaccess1
-rw-r--r--css/404.css35
-rw-r--r--css/main.css425
-rw-r--r--css/no-text-highlighting.css7
-rw-r--r--demos/index.html1
-rw-r--r--demos/light-fluid-simulation/.htaccess1
-rw-r--r--demos/light-fluid-simulation/index.html59
-rw-r--r--demos/light-fluid-simulation/main.css25
-rw-r--r--demos/light-fluid-simulation/main.js386
-rw-r--r--demos/path-tracer/.htaccess1
-rw-r--r--demos/path-tracer/index.html72
-rw-r--r--demos/path-tracer/main.css60
-rw-r--r--demos/path-tracer/main.js2655
-rw-r--r--demos/random-attractors/index.html21
-rw-r--r--demos/random-attractors/main.js96
-rw-r--r--dir/index.html1
-rw-r--r--directory/.htaccess1
-rw-r--r--directory/games/browser-games/index.html354
-rw-r--r--directory/games/index.html134
-rw-r--r--directory/index.html113
-rw-r--r--directory/main.css479
-rw-r--r--directory/tools/assets/SinAccessV.1.zipbin0 -> 1601 bytes
-rw-r--r--directory/tools/index.html227
-rw-r--r--discord/.htaccess1
-rw-r--r--discord/bots/uwufier-legacy/assets/audio-legacy.mp3bin0 -> 2679046 bytes
-rw-r--r--discord/bots/uwufier-legacy/assets/audio.mp3bin0 -> 2397550 bytes
-rw-r--r--discord/bots/uwufier-legacy/assets/favi.jpgbin0 -> 50501 bytes
-rw-r--r--discord/bots/uwufier-legacy/index.php77
-rw-r--r--discord/bots/uwufier/.htaccess9
-rw-r--r--discord/bots/uwufier/404.html89
-rw-r--r--discord/bots/uwufier/assets/json/pun.json237
-rw-r--r--discord/bots/uwufier/css/bootstrap.min.css7
-rw-r--r--discord/bots/uwufier/css/main.css171
-rw-r--r--discord/bots/uwufier/css/now-ui-kit.css7325
-rw-r--r--discord/bots/uwufier/favicon.pngbin0 -> 28679 bytes
-rw-r--r--discord/bots/uwufier/features/index.html195
-rw-r--r--discord/bots/uwufier/index.html212
-rw-r--r--discord/bots/uwufier/js/main.js110
-rw-r--r--discord/bots/uwufier/js/now-ui-kit.min.js2
-rw-r--r--discord/servers/psycho/assets/audio.mp3bin0 -> 2939644 bytes
-rw-r--r--discord/servers/psycho/assets/favicon.jpgbin0 -> 110054 bytes
-rw-r--r--discord/servers/psycho/assets/silence.mp3bin0 -> 36710 bytes
-rw-r--r--discord/servers/psycho/css/main.css60
-rw-r--r--discord/servers/psycho/index.php80
-rw-r--r--discord/servers/psycho/js/main.js12
-rw-r--r--discord/servers/psycho/rules/index.html174
-rw-r--r--discord/servers/psycho/rules/legacy-o1lSgVqdjQpvdy42.html145
-rw-r--r--doc/.htaccess1
-rw-r--r--doc/easter-eggs.txt47
-rw-r--r--doc/example.todo41
-rw-r--r--doc/oops.txt9
-rw-r--r--doc/paths.txt6
-rw-r--r--doc/vertical-center.txt4
-rw-r--r--favicon.jpgbin0 -> 44266 bytes
-rw-r--r--games/cars/.htaccess1
-rw-r--r--games/cars/cars_files/console_runner-1df7d3399bdc1f40995a35209755dcfd8c7547da127f6469fd81e5fba982f6af.js1
-rw-r--r--games/cars/cars_files/css_reload-5619dc0905a68b2e6298901de54f73cefe4e079f65a75406858d92924b4938bf.js1
-rw-r--r--games/cars/cars_files/stopExecutionOnTimeout-de7e2ef6bfefd24b79a3f68b414b87b8db5b08439cac3f1012092b2290c719cd.js1
-rw-r--r--games/cars/favicon.pngbin0 -> 6098 bytes
-rw-r--r--games/cars/index.html67
-rw-r--r--games/dino/favicon.pngbin0 -> 52052 bytes
-rw-r--r--games/dino/index.html90
-rw-r--r--games/dino/main.css170
-rw-r--r--games/dino/main.js2961
-rw-r--r--games/index.html1
-rw-r--r--games/space-invaders/.htaccess1
-rw-r--r--games/space-invaders/favicon.pngbin0 -> 10824 bytes
-rw-r--r--games/space-invaders/index.html51
-rw-r--r--games/space-invaders/js/main.js1
-rw-r--r--games/space-invaders/js/mobile.js4
-rw-r--r--help/pasting/1.1 Remove Features.php25
-rw-r--r--help/pasting/1.2 Rename Functions and Features.php16
-rw-r--r--help/pasting/1.3 Add Junkcode.php19
-rw-r--r--help/pasting/1.4 Disable Optimization Settings.php8
-rw-r--r--help/pasting/1.5 Sigbench.php12
-rw-r--r--help/pasting/2. Protect your Cheat.php18
-rw-r--r--humans.txt79
-rw-r--r--index.html159
-rw-r--r--js/.htaccess1
-rw-r--r--js/app.js197
-rw-r--r--js/background-sparkles.js105
-rw-r--r--js/hide-context-menu.js3
-rw-r--r--js/lib/particles.min.js9
-rw-r--r--js/loader-animation.js4
-rw-r--r--js/performance-stats.js26
-rw-r--r--js/redirect-to-desktop.js5
-rw-r--r--js/redirect-to-mobile.js4
-rw-r--r--js/redirect-to-root.js1
-rw-r--r--js/refresh-on-media.js24
-rw-r--r--konami/.htaccess1
-rw-r--r--konami/assets/audio/midi.mp3bin0 -> 7304844 bytes
-rw-r--r--konami/assets/audio/midi.mp3.txt31
-rw-r--r--konami/assets/bg/bg.gifbin0 -> 97044 bytes
-rw-r--r--konami/assets/images/Email2.gifbin0 -> 7739 bytes
-rw-r--r--konami/assets/images/bullet.pngbin0 -> 3736 bytes
-rw-r--r--konami/assets/images/cd-rom.gifbin0 -> 2994 bytes
-rw-r--r--konami/assets/images/geoshape.gifbin0 -> 2596 bytes
-rw-r--r--konami/assets/images/small-spinning-globe3.gifbin0 -> 94800 bytes
-rw-r--r--konami/assets/images/smiley face cursor.curbin0 -> 4286 bytes
-rw-r--r--konami/bypass/index.html134
-rw-r--r--konami/css/main.css297
-rw-r--r--konami/index.html120
-rw-r--r--konami/js/main.js220
-rw-r--r--krunker.io/Nexa.css272
-rw-r--r--krunker.io/crosshair.pngbin0 -> 2103 bytes
-rw-r--r--login.php101
-rw-r--r--oauth2/index.html113
-rw-r--r--pass.php10
-rw-r--r--robots.txt5
-rw-r--r--root/.htaccess4
-rw-r--r--root/root.php3
-rw-r--r--spongebob.php16
-rw-r--r--ss-logger-legacy/assets/0.jpgbin0 -> 22289 bytes
-rw-r--r--ss-logger-legacy/assets/audio.mp3bin0 -> 2173106 bytes
-rw-r--r--ss-logger-legacy/assets/favi.jpgbin0 -> 50501 bytes
-rw-r--r--ss-logger-legacy/index.php93
-rw-r--r--ss-logger-legacy/update.txt1
-rw-r--r--ss-logger/index.html1
-rw-r--r--streaming/.htaccess1
-rw-r--r--streaming/assets/discord.pngbin0 -> 5854 bytes
-rw-r--r--streaming/assets/donate.pngbin0 -> 45929 bytes
-rw-r--r--streaming/assets/twitter.pngbin0 -> 45731 bytes
-rw-r--r--streaming/assets/youtube.pngbin0 -> 46220 bytes
-rw-r--r--tools/aes/index.html147
-rw-r--r--tools/backdoor/index.php207
-rw-r--r--tools/detection/.htaccess1
-rw-r--r--tools/detection/assets/Sigbench.jar0
-rw-r--r--tools/detection/index.php336
-rw-r--r--tools/image-splitter/index.html96
-rw-r--r--tools/image-splitter/js/filesaver.js182
-rw-r--r--tools/image-splitter/js/gif-frames.min.js1
-rw-r--r--tools/image-splitter/js/gif.js3
-rw-r--r--tools/image-splitter/js/gif.worker.js3
-rw-r--r--tools/image-splitter/js/jszip.min.js15
-rw-r--r--tools/image-splitter/js/main.js361
-rw-r--r--tools/image-splitter/style.css219
-rw-r--r--tools/index.html1
-rw-r--r--tools/input-lag/.htaccess1
-rw-r--r--tools/input-lag/css/main.css13
-rw-r--r--tools/input-lag/index.html57
-rw-r--r--tools/input-lag/js/main.js84
-rw-r--r--tools/ip-detection/.htaccess1
-rw-r--r--tools/ip-detection/index.html140
-rw-r--r--tools/ip-detection/js/main.js5
-rw-r--r--tools/keycodes/index.html176
-rw-r--r--visitors/.htaccess4
-rw-r--r--visitors/index.php11
172 files changed, 22852 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..dfe0770
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..20cb95b
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,13 @@
+# Error pages
+ErrorDocument 400 /404.html
+ErrorDocument 401 /404.html
+ErrorDocument 403 /404.html
+ErrorDocument 404 /404.html
+
+ErrorDocument 500 /404.html
+
+#RewriteEngine On
+#RewriteCond %{SERVER_PORT} 80
+#RewriteRule ^(.*)$ https://kyzer.co/$1 [R,L]
+
+Options -Indexes \ No newline at end of file
diff --git a/.well-known/humans.txt b/.well-known/humans.txt
new file mode 100644
index 0000000..6be4527
--- /dev/null
+++ b/.well-known/humans.txt
@@ -0,0 +1,79 @@
+/* TEAM */
+
+Title: s1nicalDev
+
+Site: https://kyzer.co/
+
+
+Twitter: @9inny
+
+Location: Oregon
+
+
+
+ [...]
+
+
+
+/* SITE */
+
+Last update: 2020/06/02
+
+Standards: HTML5, CSS3, JS and PHP7.
+
+Components: Trianglify, jQuery, Bootstrap, p5.js, matter.js and Easter Eggs Collection.
+
+Software: Visual Studio, Visual Studio Code, IntelliJ, Atom, WebStorm, and PhpStorm.
+
+
+
+ [...]
+
+
+
+
+ .-.
+ ( )
+ '-'
+ J L
+ | |
+ J L
+ | |
+ J L
+ .-'.___.'-.
+ /___________\
+ _.-""' `bmw._
+ .' `.
+ J `.
+ F L
+ J J
+ J `
+ | L
+ | | .---------.
+ | | ( OPUS DEI. )
+ | J ,---------'
+ | L -'
+ | |
+ | ,.___ ___....--._
+ | ,' `""""""""' `-._
+ | J _____________________`-.
+ | F .-' `-88888-' `Y8888b.`.
+ | | .' `P' `88888b \
+ | | J # L # q8888b L
+ | | | | )8888D )
+ | J \ J d8888P P
+ | L `. .b. ,88888P /
+ | `. `-.___,o88888o.___,o88888P'.'
+ | `-.__________________________..-'
+ | |
+ | .-----.........____________J
+ | .' | | | |
+ | J---|-----..|...___|_______|
+ | | | | | |
+ | Y---|-----..|...___|_______|
+ | `. | | | |
+ | `'-------:....__|______.J
+ | |
+ L___ |
+ """----...______________....--'
diff --git a/.well-known/robots.txt b/.well-known/robots.txt
new file mode 100644
index 0000000..47a4d08
--- /dev/null
+++ b/.well-known/robots.txt
@@ -0,0 +1,5 @@
+User-agent: *
+Disallow: /
+
+User-agent: Googlebot
+Disallow: \ No newline at end of file
diff --git a/.well-known/security.txt b/.well-known/security.txt
new file mode 100644
index 0000000..1c1a785
--- /dev/null
+++ b/.well-known/security.txt
@@ -0,0 +1,3 @@
+Contact: mailto:[email protected]
+Preferred-Languages: en, es, hu
+Canonical: https://kyzer.co/.well-known/settings.txt
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..ee89d92
--- /dev/null
+++ b/404.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - 404</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <!-- Why am I so dumb, I just found out why the css wasn't working on the 404 with a trailing slash on Stack Overflow, lol, then I
+ went through ALL of the files checking if I had any more "./" instead of absolute path and turns out this is the only file I didn't go through...-->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Site metadata -->
+ <meta name="description" content="Error 404">
+ <meta property="og:description" content="Error 404">
+ <meta property="og:title" content="s1nical - 404">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/404.html">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/404.html">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Error: 404",
+ "headline": "Error: 404",
+ "url": "https://kyzer.co/404.html",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+ </head>
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <a href="/discord/bots/uwufier/" class="nav-item" active-color="blue">Uwufier</a> <!-- Blog -->
+ <a href="https://www.npmjs.com/~sinny" class="nav-item" active-color="red">NPM</a>
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <div class="content" style="text-align: center;">
+ <h1>404</h1>
+ <h2>Page not found</h2>
+ <h1><!-- Filler --></h1>
+ <a class="mobile" href="/home/">Back home</a>
+ <h1 class="mobile"><!-- Filler --></h1>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/_redirects b/_redirects
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/_redirects
diff --git a/about/css/.htaccess b/about/css/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/about/css/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/about/css/blog-slider.css b/about/css/blog-slider.css
new file mode 100644
index 0000000..995faff
--- /dev/null
+++ b/about/css/blog-slider.css
@@ -0,0 +1,16 @@
+.blog-slider {
+ /* width: 95%; */
+ position: relative;
+ max-width: auto;
+ margin: auto;
+ background: #fff;
+ -webkit-box-shadow: 0px 14px 80px rgba(34, 35, 58, 0.2);
+ box-shadow: 0px 14px 80px rgba(34, 35, 58, 0.2);
+ padding: 25px;
+ border-radius: 25px;
+ height: auto;
+ -webkit-transition: all .3s;
+ transition: all .3s;
+ /* margin-top: -15px; /*for exact positioning */
+ /* margin-top: -5%; /* for relative positioning */
+} \ No newline at end of file
diff --git a/about/css/loader-animation.css b/about/css/loader-animation.css
new file mode 100644
index 0000000..6e3bd1b
--- /dev/null
+++ b/about/css/loader-animation.css
@@ -0,0 +1,122 @@
+/* LOADING ANIMATION */
+/* body {
+** text-align: center;
+** padding-top: 20%;
+** background: #fdfdfd;
+** }
+*/
+
+.loader-wrapper {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ background: #fdfdfd;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.loader {
+ width: 100px;
+ height: 100px;
+ display: inline-table;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ border-spacing: 0.3em;
+}
+
+.loader row {
+ display: table-row;
+}
+
+.loader row span {
+ display: table-cell;
+ position: relative;
+ background: #1d1f20;
+ opacity: 0;
+ -webkit-animation: flicker 0.5985999999999999s ease-out infinite alternate;
+ animation: flicker 0.5985999999999999s ease-out infinite alternate;
+ /* Added standard property to fix compatbiliy issues */
+}
+
+@-webkit-keyframes flicker {
+
+ from,
+ 20% {
+ opacity: 0;
+ }
+
+ 100%,
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes flicker {
+
+ /* Added standard property to fix compatbiliy issues */
+ from,
+ 20% {
+ opacity: 0;
+ }
+
+ 100%,
+ to {
+ opacity: 1;
+ }
+}
+
+.loader row:nth-child(1) span:nth-child(1) {
+ -webkit-animation-delay: .50s;
+ animation-delay: .50s;
+}
+
+/* Added standard property to fix compatbiliy issues */
+.loader row:nth-child(1) span:nth-child(2) {
+ -webkit-animation-delay: .70s;
+ animation-delay: .70s;
+}
+
+.loader row:nth-child(1) span:nth-child(3) {
+ -webkit-animation-delay: .60s;
+ animation-delay: .60s;
+}
+
+.loader row:nth-child(2) span:nth-child(1) {
+ -webkit-animation-delay: .20s;
+ animation-delay: .20s;
+}
+
+.loader row:nth-child(2) span:nth-child(2) {
+ -webkit-animation-delay: .80s;
+ animation-delay: .80s;
+}
+
+.loader row:nth-child(2) span:nth-child(3) {
+ -webkit-animation-delay: .90s;
+ animation-delay: .90s;
+}
+
+.loader row:nth-child(3) span:nth-child(1) {
+ -webkit-animation-delay: .10s;
+ animation-delay: .10s;
+}
+
+.loader row:nth-child(3) span:nth-child(2) {
+ -webkit-animation-delay: .30s;
+ animation-delay: .30s;
+}
+
+.loader row:nth-child(3) span:nth-child(3) {
+ -webkit-animation-delay: .40s;
+ animation-delay: .40s;
+} \ No newline at end of file
diff --git a/about/css/main.css b/about/css/main.css
new file mode 100644
index 0000000..bd80b97
--- /dev/null
+++ b/about/css/main.css
@@ -0,0 +1,32 @@
+.title {
+ text-align: none;
+}
+
+.desc {
+ text-align: center;
+}
+
+.bio {
+ font-size: 22px;
+ padding-top: 100px
+}
+
+.title2 {
+ text-align: none;
+ background-color: #fcac94;
+ -webkit-box-shadow: 0 7px 30px -10px #fcac94, 0 7px 30px -10px #fcac94;
+ box-shadow: 0 7px 30px -10px #fcac94, 0 7px 30px -10px #fcac94;
+ -webkit-transition: background-color 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out;
+ width: 456px;
+}
+
+.disclaimer {
+ font-size: 17px;
+ font-weight: 600;
+}
+
+.important {
+ color: red;
+ font-size: 20px
+} \ No newline at end of file
diff --git a/about/css/navigation-bar.css b/about/css/navigation-bar.css
new file mode 100644
index 0000000..9d93988
--- /dev/null
+++ b/about/css/navigation-bar.css
@@ -0,0 +1,208 @@
+/* BACKGROUND SPARKLES CSS */
+@import url("https://fonts.googleapis.com/css?family=DM+Sans:500,700&display=swap");
+
+html,
+body {
+ margin: 0 0;
+ padding: 0 0;
+ font-size: 0;
+ background-color: #fdfcf3;
+}
+
+body svg {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: -1;
+}
+
+/* ORINGINAL SITE CSS */
+html {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+}
+
+*,
+*:before,
+*:after {
+ -webkit-box-sizing: inherit;
+ box-sizing: inherit;
+}
+
+html,
+body {
+ height: 100%;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+}
+
+body {
+ font: normal 20px/1.4 'Inter', sans-serif;
+ margin: 0 1em;
+ padding: 1em 0;
+ color: #000;
+ background: none;
+}
+
+@supports (font-variation-settings: normal) {
+ body {
+ font-family: 'Inter var', sans-serif;
+ }
+}
+
+main {
+ /* margin: auto; ** This is only needed for mobile */
+ font-size: 6vh;
+ line-height: 1.2;
+ max-width: 75vh;
+}
+
+/* I was trying to figure out how to only call the <a> tags from index.html, so it wouldn't change the values for other <a> tags, and I tried everything,
+** or so I thought, and I figured out I had to do `.links a` by scrolling up and saw `.loader row span` which wasn't even the correct syntax but I removed
+** the `row` and IT WORKED! I actually got so happy lol. - 2:15 AM, 8/7/2019
+*/
+.links a {
+ color: inherit;
+ text-decoration: none;
+ background-color: #ffdc73;
+ /* hsl(200, 100%, 80% */
+ -webkit-box-shadow: 0 7px 30px -10px #ffdc73, 0 7px 30px -10px #ffdc73;
+ box-shadow: 0 7px 30px -10px #ffdc73, 0 7px 30px -10px #ffdc73;
+ -webkit-transition: background-color 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out;
+}
+
+/* #ffdc73 box-shadow should usually be only box-shadow, but I made it two so it would be more visable.
+// Secondary box-shadow, rgba(154,160,185,0.05)
+*/
+.links a:hover,
+.links a:focus {
+ outline: none;
+ background-color: #282936;
+ color: #fff;
+ -webkit-transition: color 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out;
+ -webkit-box-shadow: 0 7px 30px -10px #282936, 0 7px 30px -10px #282936;
+ box-shadow: 0 7px 30px -10px #282936, 0 7px 30px -10px #282936;
+ /* rgba(166,173,201,0.2) */
+ -webkit-transition: -webkit-box-shadow 0.15s ease-in-out;
+ transition: -webkit-box-shadow 0.15s ease-in-out;
+ transition: box-shadow 0.15s ease-in-out;
+ transition: box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+}
+
+/* NAVIGATION MENU */
+.navigation-bar {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 100%;
+ flex: 1 0 100%;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+
+.nav {
+ overflow: hidden;
+ max-width: 100%;
+ background-color: #fff;
+ padding: 0 20px;
+ border-radius: 40px;
+ -webkit-box-shadow: 0 10px 40px rgba(159, 162, 177, 0.8);
+ box-shadow: 0 10px 40px rgba(159, 162, 177, 0.8);
+ position: absolute;
+ /* Only reason it's centered. */
+ /* Manual position adjusting
+ ** top: 0;
+ ** left: 0;
+ */
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.nav-item {
+ color: #83818c;
+ padding: 20px;
+ text-decoration: none;
+ -webkit-transition: .3s;
+ transition: .3s;
+ margin: 0 6px;
+ font-family: 'DM Sans', sans-serif;
+ font-weight: 500;
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.nav-item:before {
+ content: "";
+ position: absolute;
+ bottom: -6px;
+ left: 0;
+ width: 100%;
+ height: 5px;
+ background-color: #dfe2ea;
+ border-radius: 8px 8px 0 0;
+ opacity: 0;
+ -webkit-transition: .3s;
+ transition: .3s;
+}
+
+.nav-item:not(.is-active):hover:before {
+ opacity: 1;
+ bottom: 0;
+}
+
+.nav-item:not(.is-active):hover {
+ color: #333;
+}
+
+.nav-indicator {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 4px;
+ -webkit-transition: .4s;
+ transition: .4s;
+ height: 5px;
+ z-index: 1;
+ border-radius: 8px 8px 0 0;
+}
+
+@media (max-width: 580px) {
+ .nav {
+ overflow: auto;
+ }
+}
diff --git a/about/index.html b/about/index.html
new file mode 100644
index 0000000..8304152
--- /dev/null
+++ b/about/index.html
@@ -0,0 +1,270 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - About</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- Site metadata -->
+ <meta name="description" content="About">
+ <meta property="og:description" content="About">
+ <meta property="og:title" content="s1nical - About">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/about">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/about">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "About",
+ "headline": "About",
+ "url": "https://kyzer.co/about",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <style>
+
+ html {
+ overflow-x: hidden;
+ }
+ </style>
+ <!-- Invisable Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/redirect-to-mobile.js"></script>
+</head>
+<body>
+ <!-- Visable Scripts -->
+ <script>
+ // Background only renders based on the original browser window size when
+ // starting to load the site. Due to rendering issues, I don't think I
+ // can do it other wise.
+
+ ///////////////
+ // SCRIPT #1 //
+ ///////////////
+
+ var pattern = Trianglify({
+ height: window.innerHeight * 1.10, // White: #fdfbfb, Salmon: #cc3300
+ width: window.innerWidth,
+ x_colors: ['#040404', '#f9f9f9', '#fffff4', '#fbf7f5', '#d55454'], // Cappuccino: ['#854442', '#3c2f2f', '#fff4e6', '#be9b7b', '#4b3832']
+ y_colors: ['#f9f1f1', '#f9f9f9', '#fffff4', '#fbf7f5', '#f9f1f1'], // Random colour generator: "#"+((1<<24)*Math.random()|0).toString(16)
+ variance: 10, // Gives it more style
+ seed: Number.parseInt(Math.floor(Math.random() * 100)), // TODO: Live seed transitioning.
+ cell_size: 160 // Cell size
+ });
+
+ document.body.appendChild(pattern.svg())
+
+ ///////////////
+ // SCRIPT #2 //
+ ///////////////
+
+ $('.title-wrapper').css('width', window.innerWidth);
+ $('.title-wrapper').css('height', window.innerHeight);
+
+
+ var time = 10,
+ $paths = $('body').find('svg').find('path'),
+ pathCollection = $paths.get(),
+ count = $paths.length;
+
+ // // Log variable "count"
+ // console.log(count);
+
+ pathCollection.sort(function () {
+ return Math.random() * 10 > 5 ? 1 : -1;
+ });
+
+ function showText() {
+ var title = $('h1'),
+ subtitle = $('h2');
+
+ title.removeClass('hidden');
+ setTimeout(function () {
+ subtitle.removeClass('hidden');
+ }, 500);
+ }
+
+ setTimeout(function () {
+ $.each(pathCollection, function (i, el) {
+ var $path = $(this);
+ setTimeout(function () {
+
+ $path.css('opacity', '1');
+ }, time)
+ time += 10;
+
+ if (i + 1 === count) {
+ setTimeout(function () {
+ showText();
+ }, 2000);
+ }
+
+ });
+ }, 2000);
+ </script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/" class="nav-item" active-color="orange">Home</a> <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <a href="/discord/bots/uwufier/" class="nav-item" active-color="blue">Uwufier</a> <!-- Blog -->
+ <a href="https://www.npmjs.com/~sinny" class="nav-item" active-color="red">NPM</a>
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider" style="height: 880px">
+ <p class="title"><a>Technical Skills.</a></p> <!-- This was not a very effective way of accomplishing this but idk rn. -->
+
+ <p class="desc" style="width: 1000px; height: 0px">
+ <ul style="font-size: 15px">
+ <li>JavaScript</li>
+ <li>TypeScript</li>
+ <li>HTML5/ CSS3</li>
+ <li>PHP7</li>
+ <li>MySQL</li>
+ <li>MongoDB</li>
+ <li>SCSS</li>
+ <li>EmberJS</li>
+ <li>React</li>
+ <li>Angular</li>
+ <li>Git</li>
+ <li>D3JS</li>
+ <li>Webpack</li>
+ <li>Python</li>
+ <li>Discord.py</li>
+ <li>Node.js</li>
+ <li>express.js</li>
+ <li>JSON</li>
+ <li>C++ 13/17</li>
+ <li>anime.js</li>
+ <li>Discord.js</li>
+ <li>GoLang</li>
+ <li>Python</li>
+ <li>C#</li>
+ <li>Unity3D</li>
+ </ul>
+
+ <style>
+ .experience {
+ position: relative;
+ top: -560px;
+ left: 20%
+ }
+ </style>
+ <div class="experience">
+ <p class="title"><a>Experience.</a></p>
+
+ <p class="title2" style="font-size: 17px; width: 94px">UI Engineer.</p>
+ <p style="font-size: 15px; color: #fcac94;"> Jul 2017 - Present</p>
+
+ <p style="font-size: 15px">Counter Strike: Global Offensive SDK</p>
+ <ul>
+ <li style="font-size: 15px">
+ CS:GO trainer/ cheat softwares development.
+ </li>
+ </ul>
+
+ <p style="font-size: 15px">Discord API</p>
+ <ul>
+ <li style="font-size: 15px">
+ Making Discord bots using the Discord.js Commando framework.
+ </li>
+ </ul>
+ <br>
+
+ <!-- END UI ENG -->
+
+ <p class="title2" style="font-size: 17px; width: 224px">Front End Software Engineer.</p>
+ <p style="font-size: 15px; color: #fcac94;"> Sep 2016 - Jul 2017</p>
+ <p style="font-size: 15px">Responsive-ness</p>
+ <ul>
+ <li style="font-size: 15px">
+ Developed a fully responsive website with accessible interfaces using Jquery,<br> HandlebarsJS and related tools.
+ </li>
+ <li style="font-size: 15px">
+ Served as a key front end team member collaborating with cross-functional teams to turn product requirements<br>
+and mockups into high-quality front-end code.
+ </li>
+ </ul>
+
+ <p class="title2" style="font-size: 17px; width: 81px">Front End.</p>
+ <p style="font-size: 15px; color: #fcac94;"> Jun 2016 - Jul 2017</p>
+ <p style="font-size: 15px">CSS framework, UI libraries using React, SCSS</p>
+ <ul>
+ <li style="font-size: 15px">
+ Architected and developed responsive, modular, and scalable CSS framework and React UI library.
+ </li>
+ <li style="font-size: 15px">
+ Strategized and collaborated with design.
+ </li>
+ <li style="font-size: 15px">
+ Tested and deployed client/ server and related components.
+ </li>
+ <li style="font-size: 15px">
+ Developed accessible interfaces for mobile devices
+ </li>
+ </ul>
+ <br>
+ </div>
+ </p>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/about/legacy-I1vRDCX6gfVVC2Cg7syJ.html b/about/legacy-I1vRDCX6gfVVC2Cg7syJ.html
new file mode 100644
index 0000000..a296175
--- /dev/null
+++ b/about/legacy-I1vRDCX6gfVVC2Cg7syJ.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - About</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- External Links -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <!-- Invisable Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/redirect-to-mobile.js"></script>
+</head>
+<body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="#" class="nav-item" active-color="green">About</a> <!-- About -->
+ <a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <!--<a href="http://kyzer.co/status" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <p class="title">Hi! I'm <a href="mailto:[email protected]">s1nical!</a></p> <!-- This was not a very effective way of accomplishing this but idk rn. -->
+
+ <p class="desc">
+ I'm a fullstack developer. Some of my favourite languages to work with are PHP, JavaScript and C++.<br>
+ Some of my favourite applications I have for such languages are small little PHP tools, C++ game development<br>
+ projects using OpenGL and Discord bots using the <a href="https://discord.js.org/#/">discord.js</a> framework. You can check out most of my creations<br>
+ on my <a href="https://github.com/8cy">GitHub</a>. On there, I have lots of my smaller C++ projects to take examples from, some Discord bot</a><br>
+ examples, and even some public archive repositories of some special software's such as my archive of various <a href="https://github.com/8cy/net">Botnets</a>.<br>
+ Keep a lookout, because I'm planning on posting even more tutorial like things soon.<br>
+ <!-- Unused Line -->
+ </p>
+ <br>
+ <p class="title2">Well what kind of applications do you develop?</p>
+
+ <p class="desc">
+ Some things I like to test my knowledge with are usually moding instances. Albeit, my Java programming skills aren't as<br>
+ sharp as I'd hope for them to be, I like to spend some of my free time developing Minecraft mods using the Forge framework.<br>
+ I also like to write server plugins for popular Minecraft server platforms like <a href="https://dev.bukkit.org/">Bukkit</a>, they aren't the most useful<br>
+ things, (Minecraft mods and plugins) however they are fun to write and it helps me further my Java knowledge.<br>
+ <br>
+ I also like to occasionally write CS:GO cheats, I've fiddled around with writing my own CS:GO skin changers, full<br>
+ cheat modules that include such things as aimbots, anti-aim and more.<br>
+ <br>
+ <div class="disclaimer">
+ <span class="important">*</span> <span>Use at your own risk, I am not to be held accountable if you get VAC banned.</span>
+ </div>
+ </p>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/assets/.htaccess b/assets/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/assets/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/assets/audio/sadness.mp3 b/assets/audio/sadness.mp3
new file mode 100644
index 0000000..c369107
--- /dev/null
+++ b/assets/audio/sadness.mp3
Binary files differ
diff --git a/assets/audio/{SHA}4v3ZxUfx+KYkFDtpE2k5NvNdYE=.mp3 b/assets/audio/{SHA}4v3ZxUfx+KYkFDtpE2k5NvNdYE=.mp3
new file mode 100644
index 0000000..c2dee8e
--- /dev/null
+++ b/assets/audio/{SHA}4v3ZxUfx+KYkFDtpE2k5NvNdYE=.mp3
Binary files differ
diff --git a/assets/configs/particles.json b/assets/configs/particles.json
new file mode 100644
index 0000000..9d6f410
--- /dev/null
+++ b/assets/configs/particles.json
@@ -0,0 +1,110 @@
+{
+ "particles": {
+ "number": {
+ "value": 20,
+ "density": {
+ "enable": true,
+ "value_area": 800
+ }
+ },
+ "color": {
+ "value": "#FFDC73"
+ },
+ "shape": {
+ "type": "circle",
+ "stroke": {
+ "width": 0,
+ "color": "#000000"
+ },
+ "polygon": {
+ "nb_sides": 5
+ },
+ "image": {
+ "src": "img/github.svg",
+ "width": 100,
+ "height": 100
+ }
+ },
+ "opacity": {
+ "value": 0.5,
+ "random": false,
+ "anim": {
+ "enable": false,
+ "speed": 1,
+ "opacity_min": 0.1,
+ "sync": false
+ }
+ },
+ "size": {
+ "value": 3,
+ "random": true,
+ "anim": {
+ "enable": false,
+ "speed": 40,
+ "size_min": 0.1,
+ "sync": false
+ }
+ },
+ "line_linked": {
+ "enable": true,
+ "distance": 150,
+ "color": "#000000",
+ "opacity": 0.4,
+ "width": 1
+ },
+ "move": {
+ "enable": true,
+ "speed": 4,
+ "direction": "none",
+ "random": false,
+ "straight": false,
+ "out_mode": "out",
+ "bounce": false,
+ "attract": {
+ "enable": false,
+ "rotateX": 600,
+ "rotateY": 1200
+ }
+ }
+ },
+ "interactivity": {
+ "detect_on": "canvas",
+ "events": {
+ "onhover": {
+ "enable": true,
+ "mode": "grab"
+ },
+ "onclick": {
+ "enable": false,
+ "mode": "push"
+ },
+ "resize": true
+ },
+ "modes": {
+ "grab": {
+ "distance": 140,
+ "line_linked": {
+ "opacity": 1
+ }
+ },
+ "bubble": {
+ "distance": 400,
+ "size": 40,
+ "duration": 2,
+ "opacity": 8,
+ "speed": 3
+ },
+ "repulse": {
+ "distance": 200,
+ "duration": 0.4
+ },
+ "push": {
+ "particles_nb": 4
+ },
+ "remove": {
+ "particles_nb": 2
+ }
+ }
+ },
+ "retina_detect": true
+} \ No newline at end of file
diff --git a/assets/favicon/og-favicon.ico b/assets/favicon/og-favicon.ico
new file mode 100644
index 0000000..50e8433
--- /dev/null
+++ b/assets/favicon/og-favicon.ico
Binary files differ
diff --git a/assets/imgs/clairo.webp b/assets/imgs/clairo.webp
new file mode 100644
index 0000000..cefe5cf
--- /dev/null
+++ b/assets/imgs/clairo.webp
Binary files differ
diff --git a/assets/imgs/clairo2.gif b/assets/imgs/clairo2.gif
new file mode 100644
index 0000000..41d5d43
--- /dev/null
+++ b/assets/imgs/clairo2.gif
Binary files differ
diff --git a/assets/users/.htpasswdmufxo45v5tz7bAWr b/assets/users/.htpasswdmufxo45v5tz7bAWr
new file mode 100644
index 0000000..648e865
--- /dev/null
+++ b/assets/users/.htpasswdmufxo45v5tz7bAWr
@@ -0,0 +1 @@
+sin:$2y$10$ryTjhpVcd6cp6vcW2E9R5.Wn6vndB6hosZBLI.u6mmaOdDPgT.FUm \ No newline at end of file
diff --git a/changelog/.htaccess b/changelog/.htaccess
new file mode 100644
index 0000000..0762e39
--- /dev/null
+++ b/changelog/.htaccess
@@ -0,0 +1,4 @@
+AuthUserFile /home/vol9_2/epizy.com/epiz_25275270/htdocs/assets/users/.htpasswdmufxo45v5tz7bAWr
+AuthType Basic
+AuthName "My restricted Area"
+Require valid-user \ No newline at end of file
diff --git a/changelog/index.html b/changelog/index.html
new file mode 100644
index 0000000..0a021ef
--- /dev/null
+++ b/changelog/index.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ </head>
+ <body>
+ <h1 id="changeloghistory">Change Log + History</h1>
+ <p>Author: s1nical</p>
+ <hr />
+
+ <div id="1.22020-03-30">
+ <h3>1.2 2020&#8211;03&#8211;30</h3>
+ <p>And here we go.</p>
+ <ul>
+ <li>add slipstream logger</li>
+ </ul>
+ </div>
+
+ <div id="1.22020-03-18">
+ <h3>1.2 2020&#8211;03&#8211;18</h3>
+ <p>And here we go.</p>
+ <ul>
+ <li>remove java from skills in about</li>
+ </ul>
+ </div>
+
+ <div id="1.12020-03-11">
+ <h3>1.1 2020&#8211;03&#8211;11</h3>
+ <p>And here we go.</p>
+ <ul>
+ <li>add securly bypass</li>
+ <li>remove red highlights from web proxy in tools and browser games</li>
+ <li>remove web proxy in browser games</li>
+ <li>remove securly bypass</li>
+ <li>rename web proxy to usefull web proxy</li>
+ <li>add /dir and /cl which redirect to /directory and /changelog</li>
+ </ul>
+ </div>
+
+ <div id="1.02020-03-10">
+ <h3>1.0 2020&#8211;03&#8211;10</h3>
+ <p>And here we go.</p>
+ <ul>
+ <li>changed all seo meta deta to be correct (url, type etc.)</li>
+ <li>added regex to root, if at rhs, says rhs on load</li>
+ <li>removed rhs load</li>
+ <li>changed locations of visitors</li>
+ <li>added changelog</li>
+ <li>added .htpasswd for encryption instead of custom thing (might change but who knows)</li>
+ <li>add web proxy to broswer games and tools</li>
+ </ul>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/cl/index.html b/cl/index.html
new file mode 100644
index 0000000..5120dbb
--- /dev/null
+++ b/cl/index.html
@@ -0,0 +1 @@
+<script>location = "/changelog"</script> \ No newline at end of file
diff --git a/css/.htaccess b/css/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/css/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/css/404.css b/css/404.css
new file mode 100644
index 0000000..ad791a3
--- /dev/null
+++ b/css/404.css
@@ -0,0 +1,35 @@
+.content {
+ text-align: center;
+ color: #000000;
+}
+
+.content h1 {
+ font-weight: 900;
+ line-height: 1;
+ margin-bottom: -10px;
+ opacity: 0.6;
+}
+
+.content h2 {
+ font-weight: 700;
+ margin-bottom: 6px;
+ opacity: 0.9;
+}
+
+@media(max-width: 768px) {
+ .navigation-bar {
+ display: none;
+ }
+
+ .bio {
+ margin: auto;
+ width: 100%;
+ padding: 0;
+ }
+}
+
+@media(min-width: 768px) {
+ .mobile {
+ display: none;
+ }
+} \ No newline at end of file
diff --git a/css/main.css b/css/main.css
new file mode 100644
index 0000000..ff64538
--- /dev/null
+++ b/css/main.css
@@ -0,0 +1,425 @@
+/* BACKGROUND SPARKLES CSS */
+@import url("https://fonts.googleapis.com/css?family=DM+Sans:500,700&display=swap");
+
+html, body {
+ margin: 0 0;
+ padding: 0 0;
+ text-align: center;
+ font-size: 0;
+ background-color: none; /* This used to be #fdfcf3 */
+}
+
+/* It literally took my like 15 minutes in a Discord call with Gavin and Aaron to figure out
+why this was not working. I tried like everything but this ended up solving it;
+https: //www.freecodecamp.org/forum/t/why-is-my-background-color-not-changing/251971
+So yea lol -10/04/2019 19:26*/
+
+/* // This is not really needed bc it doesn't fix the problem,
+ // just left it here for further reference.
+@media (prefers-color-scheme: dark) {
+ html, body {
+ background-color: #2d2d2d !important;
+ }
+}
+*/
+
+body svg {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: -2;
+}
+
+/* LOADING ANIMATION */
+/* body {
+** text-align: center;
+** padding-top: 20%;
+** background: #fdfdfd;
+** }
+*/
+
+.loader-wrapper {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ background: #fdfdfd;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ z-index: 4;
+}
+
+.loader {
+ width: 100px;
+ height: 100px;
+ display: inline-table;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ border-spacing: 0.3em;
+}
+
+.loader row {
+ display: table-row;
+}
+
+.loader row span {
+ display: table-cell;
+ position: relative;
+ background: #1d1f20;
+ opacity: 0;
+ -webkit-animation: flicker 0.5985999999999999s ease-out infinite alternate;
+ animation: flicker 0.5985999999999999s ease-out infinite alternate; /* Added standard property to fix compatbiliy issues */
+}
+
+@-webkit-keyframes flicker {
+ from, 20% {
+ opacity: 0;
+ }
+ 100%, to {
+ opacity: 1;
+ }
+}
+
+@keyframes flicker { /* Added standard property to fix compatbiliy issues */
+ from, 20% {
+ opacity: 0;
+ }
+ 100%, to {
+ opacity: 1;
+ }
+}
+
+.loader row:nth-child(1) span:nth-child(1) {
+ -webkit-animation-delay: .50s;
+ animation-delay: .50s;
+}
+
+/* Added standard property to fix compatbiliy issues */
+.loader row:nth-child(1) span:nth-child(2) {
+ -webkit-animation-delay: .70s;
+ animation-delay: .70s;
+}
+
+.loader row:nth-child(1) span:nth-child(3) {
+ -webkit-animation-delay: .60s;
+ animation-delay: .60s;
+}
+
+.loader row:nth-child(2) span:nth-child(1) {
+ -webkit-animation-delay: .20s;
+ animation-delay: .20s;
+}
+
+.loader row:nth-child(2) span:nth-child(2) {
+ -webkit-animation-delay: .80s;
+ animation-delay: .80s;
+}
+
+.loader row:nth-child(2) span:nth-child(3) {
+ -webkit-animation-delay: .90s;
+ animation-delay: .90s;
+}
+
+.loader row:nth-child(3) span:nth-child(1) {
+ -webkit-animation-delay: .10s;
+ animation-delay: .10s;
+}
+
+.loader row:nth-child(3) span:nth-child(2) {
+ -webkit-animation-delay: .30s;
+ animation-delay: .30s;
+}
+
+.loader row:nth-child(3) span:nth-child(3) {
+ -webkit-animation-delay: .40s;
+ animation-delay: .40s;
+}
+
+/* ORINGINAL SITE CSS */
+html {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+}
+
+*, *:before, *:after {
+ -webkit-box-sizing: inherit;
+ box-sizing: inherit;
+}
+
+html, body {
+ height: 100%;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+}
+
+body {
+ font: normal 20px/1.4 'Inter', sans-serif;
+ margin: 0 1em;
+ padding: 1em 0;
+ color: #000;
+ background: none;
+}
+
+
+
+/* Media queries for navbar size in different screen sizes */
+
+@media (max-height: 768px) {
+ body {
+ font: normal 15px/1.4 'Inter', sans-serif;
+ }
+}
+
+@media (max-height: 750px) {
+ body {
+ font: normal 13px/1.4 'Inter', sans-serif;
+ }
+}
+
+@media (max-height: 658px) {
+ body {
+ font: normal 11px/1.4 'Inter', sans-serif;
+ }
+}
+
+@media (max-height: 579px) {
+ body {
+ font: normal 8px/1.4 'Inter', sans-serif;
+ }
+}
+
+@media (max-height: 549px) {
+ body {
+ font: normal 6px/1.4 'Inter', sans-serif;
+ }
+}
+
+/* End media queries */
+
+
+
+/* // This was supposed to be for the dark mode feature but I
+ // took it out because it looked ugly asf
+@media (prefers-color-scheme: dark) {
+ body {
+ color: #fdfcf3;
+ }
+}
+*/
+
+@supports (font-variation-settings: normal) {
+ body {
+ font-family: 'Inter var', sans-serif;
+ }
+}
+
+main {
+ font-size: 6vh;
+ line-height: 1.2;
+ max-width: 75vh;
+ z-index: 3;
+}
+
+@media(max-width: 768px) {
+ main {
+ margin: auto;
+ width: 86.21%;
+ }
+}
+
+@media(max-width: 411px) {
+ main {
+ margin: auto;
+ width: 76.21%;
+ }
+}
+
+/* I was trying to figure out how to only call the <a> tags from index.html, so it wouldn't change the values for other <a> tags, and I tried everything,
+** or so I thought, and I figured out I had to do `.links a` by scrolling up and saw `.loader row span` which wasn't even the correct syntax but I removed
+** the `row` and IT WORKED! I actually got so happy lol. - 2:15 AM, 8/7/2019
+*/
+.links a {
+ color: inherit;
+ text-decoration: none;
+ background-color: #ffdc73;
+ /* hsl(200, 100%, 80% */
+ -webkit-box-shadow: 0 7px 30px -10px #ffdc73, 0 7px 30px -10px #ffdc73;
+ box-shadow: 0 7px 30px -10px #ffdc73, 0 7px 30px -10px #ffdc73;
+ -webkit-transition: background-color 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out;
+ /* border-radius: 4px; // Looks nice but idk */
+}
+
+/* #ffdc73 box-shadow should usually be only box-shadow, but I made it two so it would be more visable.
+// Secondary box-shadow, rgba(154,160,185,0.05)
+*/
+
+.links a:hover,
+.links a:focus {
+ outline: none;
+ background-color: #282936;
+ color: #fff;
+ -webkit-transition: color 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out;
+ -webkit-box-shadow: 0 7px 30px -10px #282936, 0 7px 30px -10px #282936;
+ box-shadow: 0 7px 30px -10px #282936, 0 7px 30px -10px #282936; /* rgba(166,173,201,0.2) */
+ -webkit-transition: -webkit-box-shadow 0.15s ease-in-out;
+ transition: -webkit-box-shadow 0.15s ease-in-out;
+ transition: box-shadow 0.15s ease-in-out;
+ transition: box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+}
+
+/* NAVIGATION MENU */
+.navigation-bar {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 100%;
+ flex: 1 0 100%;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+
+@media(max-width: 768px) {
+ .navigation-bar {
+ display: none;
+ }
+}
+
+.nav {
+ overflow: hidden;
+ max-width: 100%;
+ background-color: #fff;
+ padding: 0 20px;
+ border-radius: 40px;
+ -webkit-box-shadow: 0 10px 40px rgba(159, 162, 177, 0.8);
+ box-shadow: 0 10px 40px rgba(159, 162, 177, 0.8);
+ position: absolute; /* Only reason it's centered. */
+ /* Manual position adjusting
+ ** top: 0;
+ ** left: 0;
+ */
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.nav-item {
+ color: #83818c;
+ padding: 20px;
+ text-decoration: none;
+ -webkit-transition: .3s;
+ transition: .3s;
+ margin: 0 6px;
+ font-family: 'DM Sans', sans-serif;
+ font-weight: 500;
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.nav-item:before {
+ content: "";
+ position: absolute;
+ bottom: -6px;
+ left: 0;
+ width: 100%;
+ height: 5px;
+ background-color: #dfe2ea;
+ border-radius: 8px 8px 0 0;
+ opacity: 0;
+ -webkit-transition: .3s;
+ transition: .3s;
+}
+
+.nav-item:not(.is-active):hover:before {
+ opacity: 1;
+ bottom: 0;
+}
+
+.nav-item:not(.is-active):hover {
+ color: #333;
+}
+
+.nav-indicator {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 4px;
+ -webkit-transition: .4s;
+ transition: .4s;
+ height: 5px;
+ z-index: 1;
+ border-radius: 8px 8px 0 0;
+}
+
+/*
+// NO IDEA WHAT THIS DOES HAHA
+@media (max-width: 580px) {
+ .nav {
+ overflow: auto;
+ }
+}
+*/
+
+/* CLAIRO */
+.clairo {
+ position: absolute;
+ top: 5px;
+ left: 5px;
+}
+
+/* Particles.js CSS */
+#particles-js {
+ width: 100%;
+ height: 100%;
+ background-color: none;
+ background-image: url('');
+ background-size: cover;
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: -1 !important;
+} \ No newline at end of file
diff --git a/css/no-text-highlighting.css b/css/no-text-highlighting.css
new file mode 100644
index 0000000..3764314
--- /dev/null
+++ b/css/no-text-highlighting.css
@@ -0,0 +1,7 @@
+* {
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: -moz-none;
+ -o-user-select: none;
+ user-select: none;
+} \ No newline at end of file
diff --git a/demos/index.html b/demos/index.html
new file mode 100644
index 0000000..833db44
--- /dev/null
+++ b/demos/index.html
@@ -0,0 +1 @@
+<script>location.href = 'https://kyzer.co/directory/demos/'</script> \ No newline at end of file
diff --git a/demos/light-fluid-simulation/.htaccess b/demos/light-fluid-simulation/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/demos/light-fluid-simulation/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/demos/light-fluid-simulation/index.html b/demos/light-fluid-simulation/index.html
new file mode 100644
index 0000000..0d68b31
--- /dev/null
+++ b/demos/light-fluid-simulation/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Light Fluid Simulation</title>
+ <!-- Site metadata -->
+ <meta name="description" content="Light Fluid Simulation">
+ <meta property="og:description" content="Light Fluid Simulation">
+ <meta property="og:title" content="s1nical - Light Fluid Simulation">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/demos/light-fluid-simulation">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/demos/light-fluid-simulation">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Light Fluid Simulation",
+ "headline": "Light Fluid Simulation",
+ "url": "https://kyzer.co/demos/light-fluid-simulation",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/demos/light-fluid-simulation/main.css">
+ <!-- External Libraries -->
+ <script src="https://threejs.org/build/three.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <!-- Invisible Scripts -->
+</head>
+
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/demos/light-fluid-simulation/main.js"></script>
+ </body>
+
+</html> \ No newline at end of file
diff --git a/demos/light-fluid-simulation/main.css b/demos/light-fluid-simulation/main.css
new file mode 100644
index 0000000..32eefc3
--- /dev/null
+++ b/demos/light-fluid-simulation/main.css
@@ -0,0 +1,25 @@
+@import url('https://fonts.googleapis.com/css?family=Open+Sans:600&display=swap');
+
+* {
+ margin: 0;
+ border: 0;
+ box-sizing:
+ border-box;
+}
+
+body {
+
+ margin: 0;
+ position: fixed;
+ overflow: hidden;
+ background-color: #090d13;
+ user-select: none;
+
+}
+
+canvas {
+
+ width: 100%;
+ height: 100%;
+
+} \ No newline at end of file
diff --git a/demos/light-fluid-simulation/main.js b/demos/light-fluid-simulation/main.js
new file mode 100644
index 0000000..f6c81bd
--- /dev/null
+++ b/demos/light-fluid-simulation/main.js
@@ -0,0 +1,386 @@
+//
+// shaders
+//
+const basic_vert = `
+precision highp float;
+
+void main() {
+ gl_Position = vec4( position, vec2(1.0) );
+}
+`;
+
+const prep_frag = `
+precision highp float;
+
+void main() {
+ gl_FragColor.z = 0.012;
+}
+`;
+
+const physics_frag = `
+precision highp float;
+
+uniform vec3 mouse;
+uniform vec3 pmouse;
+uniform vec2 resolution;
+uniform sampler2D texture;
+
+float distToSegment( vec2 x1, vec2 x2, vec2 p ) {
+
+ vec2 v = x2 - x1;
+ vec2 w = p - x1;
+
+ float c1 = dot(w,v);
+ float c2 = dot(v,v);
+
+ // if c2 <= c1 == c1
+ // if c2 > c1 == c2
+ float div = mix( c2, c1, step( c2, c1 ) );
+
+ // if c1 < 0 == 0.0
+ float mult = step( 0.0, c1 );
+
+ float b = c1 * mult / div;
+ vec2 pb = x1 + b*v;
+
+ return distance( p, pb );
+
+}
+
+vec3 computeNormal( vec4 n ) {
+
+ // pixel scale
+ vec2 un = 1. / resolution;
+ vec2 uv = gl_FragCoord.xy * un;
+
+ // tex sample neighbour-4;
+ vec3 n_r = texture2D( texture, uv + vec2( 1, 0 ) * un ).xyz;
+ vec3 n_l = texture2D( texture, uv - vec2( 1, 0 ) * un ).xyz;
+ vec3 n_u = texture2D( texture, uv + vec2( 0, 1 ) * un ).xyz;
+ vec3 n_d = texture2D( texture, uv - vec2( 0, 1 ) * un ).xyz;
+
+ // partial differences n-4;
+ vec4 dn = vec4( n.z );
+ dn -= vec4( n_r.z, n_l.z, n_u.z, n_d.z );
+
+ // right - left, up - down;
+ vec2 xy = vec2( dn.x - dn.y, dn.z - dn.w );
+ xy += n_r.xy + n_l.xy + n_u.xy + n_d.xy;
+ xy *= 0.972; // energy dissipation
+
+ float z;
+ z += dot( n_r.xy, - vec2( 1, 0 ) );
+ z += dot( n_l.xy, + vec2( 1, 0 ) );
+ z += dot( n_u.xy, - vec2( 0, 1 ) );
+ z += dot( n_d.xy, + vec2( 0, 1 ) );
+
+ return vec3( xy , z ) * 0.25;
+
+}
+
+
+void main() {
+
+ vec2 uv = gl_FragCoord.xy / resolution;
+ float asp = resolution.x / resolution.y; // aspect
+
+ // normal sampling
+ vec4 h = texture2D( texture, uv );
+
+ // previous velocity
+ float vel = h.a;
+ // apply elastic-viscous acceleration
+ // acc = - offset*elasticity - vel*viscosity
+ vel += - ( h.z - 0.012 ) * 0.016 - vel * 0.059;
+
+ // compute normal advection
+ vec3 f = computeNormal( h );
+ f.z += h.z + vel;
+
+ // mouse interaction - continuous distance from mouse
+ float dist = distToSegment(
+ vec2( pmouse.x * asp, pmouse.y), // previous mouse
+ vec2( mouse.x * asp, mouse.y), // current mouse
+ vec2( uv.x * asp, uv.y) // fragcoord
+ );
+
+ float mSize = 0.065; // mouse radius
+ float peak = 0.9; // max-height
+
+ float isDisp = step( 0.5, mouse.z ); // is displaced
+
+ if ( mouse.z > 0.5 && dist <= mSize ) {
+
+ float dst = ( mSize - dist ) / mSize;
+ f.z += pow( abs(dst), 1.9 ) * peak * 2.5;
+ f.xy -= f.xy * pow( abs(dst), 3.9 ) * 0.1;
+ f.z = min( peak, f.z );
+
+ }
+
+ gl_FragColor = clamp( vec4( f, vel ), -1.0, 1.0);
+
+}
+`;
+
+const light_frag = `
+precision highp float;
+
+#define RECIPROCAL_PI 0.31830988618
+
+uniform vec2 resolution;
+uniform sampler2D texture;
+
+float rand(vec2 co){
+ return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
+}
+
+// based on https://www.shadertoy.com/view/MslGR8
+vec3 dithering( vec3 color ) {
+ //Calculate grid position
+ float grid_position = rand( gl_FragCoord.xy );
+ //Shift the individual colors differently, thus making it even harder to see the dithering pattern
+ vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );
+ //modify shift acording to grid position.
+ dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );
+ //shift the color by dither_shift
+ return color + dither_shift_RGB;
+}
+
+void main() {
+
+ vec2 uv = gl_FragCoord.xy / resolution.xy;
+
+ vec3 N = texture2D( texture, uv ).xyz;
+
+ vec3 viewPos = vec3( 0.0, 0.0, 1.2 );
+ vec3 lightPos = vec3( 0.0, 1.5, 0.98 );
+ vec3 fragPos = vec3( ( 2.0 * uv - 1.0 ), N.z );
+
+ vec3 L = normalize( lightPos - fragPos );
+ vec3 H = normalize( L + normalize( viewPos - fragPos ) );
+ vec3 dN = vec3( N.xy, N.z/2.0 + 0.28 );
+
+ float dif = max( dot( dN, L ), 0.0 );
+ float spec = clamp( dot( normalize(N), H ), 0.0, 1.0 );
+
+ float attenuation = 1.0 - length( lightPos - fragPos ) / 3.1;
+ vec3 dif_int = vec3( dif * 0.056 * attenuation );
+
+ float shininess = 4.8;
+ float ref = RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( spec, shininess );
+ vec3 spec_int = vec3( ref * 0.38 * pow( attenuation, 3.0 ) );
+
+ vec3 col = dif_int + spec_int;
+
+ col = pow( col, vec3( 1.0 / 2.2 ) );
+
+ col.r = mix( col.r * 1.28, col.r, length( dif_int ) * 1.2 / 3.0 );
+ // col += 0.045;
+
+ gl_FragColor = vec4( dithering(col), 1.0 );
+
+}
+`;
+
+
+//
+// three.js setup
+//
+const w = window.innerWidth;
+const h = window.innerHeight;
+const res = new THREE.Vector2(w, h);
+const mousecoord = new THREE.Vector3();
+const mouse = new THREE.Vector3();
+const pmouse = new THREE.Vector3();
+
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize(w, h);
+document.body.appendChild(renderer.domElement);
+
+const scene = new THREE.Scene();
+const camera = new THREE.Camera();
+
+
+// render targets
+let rtt = new THREE.WebGLRenderTarget(w, h, {
+ minFilter: THREE.LinearFilter,
+ magFilter: THREE.LinearFilter,
+ format: THREE.RGBAFormat,
+ type: (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) ? THREE.HalfFloatType : THREE.FloatType,
+ depthTest: false,
+ depthBuffer: false,
+ stencilBuffer: false
+});
+
+let rtt2 = rtt.clone();
+
+
+//
+// materials
+//
+const copyMaterial = new THREE.ShaderMaterial({
+ vertexShader: basic_vert,
+ fragmentShader: prep_frag,
+ blending: THREE.NoBlending,
+ transparent: false,
+ fog: false,
+ lights: false,
+ depthWrite: false,
+ depthTest: false
+});
+
+const physicsMaterial = new THREE.ShaderMaterial({
+ uniforms: {
+ mouse: { type: 'v3', value: mouse },
+ pmouse: { type: 'v3', value: pmouse },
+ resolution: { type: 'v2', value: res },
+ texture: { type: 't' },
+ },
+ vertexShader: basic_vert,
+ fragmentShader: physics_frag,
+ blending: THREE.NoBlending,
+ transparent: false,
+ fog: false,
+ lights: false,
+ depthWrite: false,
+ depthTest: false
+});
+
+const lightsMaterial = new THREE.ShaderMaterial({
+ uniforms: {
+ resolution: { type: 'v2', value: res },
+ texture: { type: 't' },
+ },
+ vertexShader: basic_vert,
+ fragmentShader: light_frag,
+ blending: THREE.NoBlending,
+ transparent: false,
+ fog: false,
+ lights: false,
+ depthWrite: false,
+ depthTest: false
+});
+
+
+//
+// mesh setup
+//
+const geometry = new THREE.BufferGeometry();
+const vertices = new Float32Array([
+ -1.0, -1.0,
+ 3.0, -1.0,
+ -1.0, 3.0
+]);
+
+geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 2));
+
+mesh = new THREE.Mesh(geometry, copyMaterial);
+mesh.frustumCulled = false;
+scene.add(mesh);
+
+
+//
+// pre-render to rtt
+//
+
+renderer.setRenderTarget(rtt);
+renderer.render(scene, camera);
+
+renderer.setRenderTarget(rtt2);
+renderer.render(scene, camera);
+
+mesh.material = physicsMaterial;
+
+
+//
+// listeners
+//
+
+renderer.domElement.addEventListener('mousemove', mousemove);
+renderer.domElement.addEventListener('mouseout', mouseout);
+
+renderer.domElement.addEventListener('touchmove', touch);
+renderer.domElement.addEventListener('touchstart', touch);
+renderer.domElement.addEventListener('touchend', touchend);
+
+window.addEventListener('resize', resize);
+
+renderer.setAnimationLoop(function () {
+
+ render();
+
+});
+
+function render() {
+
+ const tmp = rtt;
+ rtt = rtt2;
+ rtt2 = tmp;
+
+ pmouse.copy(mouse);
+ mouse.copy(mousecoord);
+
+ if (pmouse.z == 0) pmouse.copy(mouse);
+
+ mesh.material = physicsMaterial;
+ mesh.material.uniforms.texture.value = rtt2.texture;
+
+ renderer.setRenderTarget(rtt);
+ renderer.render(scene, camera);
+
+ mesh.material = lightsMaterial;
+ mesh.material.uniforms.texture.value = rtt.texture;
+
+ renderer.setRenderTarget(null);
+ renderer.render(scene, camera);
+
+}
+
+function resize() {
+
+ const h = window.innerHeight;
+ const w = window.innerWidth;
+
+ res.set(w, h);
+
+ camera.aspect = w / h;
+
+ rtt.setSize(w, h);
+ rtt2.setSize(w, h);
+
+ renderer.setSize(w, h);
+
+}
+
+function mousemove(evt) {
+
+ mousecoord.x = evt.pageX / window.innerWidth;
+ mousecoord.y = 1 - (evt.pageY / window.innerHeight);
+ mousecoord.z = 1;
+
+}
+
+
+function mouseout(evt) {
+
+ mousecoord.z = 0;
+
+}
+
+function touch(evt) {
+
+ evt.preventDefault();
+
+ mousecoord.x = evt.touches[0].pageX / window.innerWidth;
+ mousecoord.y = 1 - evt.touches[0].pageY / window.innerHeight;
+ mousecoord.z = 1;
+
+}
+
+
+function touchend(evt) {
+
+ mousecoord.z = 0;
+
+} \ No newline at end of file
diff --git a/demos/path-tracer/.htaccess b/demos/path-tracer/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/demos/path-tracer/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/demos/path-tracer/index.html b/demos/path-tracer/index.html
new file mode 100644
index 0000000..768f987
--- /dev/null
+++ b/demos/path-tracer/index.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>s1nical - WebGL Path Tracing</title>
+ <!-- Site metadata -->
+ <meta name="description" content="WebGL Path Tracing">
+ <meta property="og:description" content="WebGL Path Tracing">
+ <meta property="og:title" content="s1nical - WebGL Path Tracing">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/demos/path-tracer">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/demos/path-tracer">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "WebGL Path Tracing",
+ "headline": "WebGL Path Tracing",
+ "url": "https://kyzer.co/demos/path-tracers",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <link rel="stylesheet" href="/demos/path-tracer/main.css">
+ <script src="/demos/path-tracer/main.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/97/three.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+</head>
+ <body>
+ <div id="main">
+ <canvas id="canvas" width="512" height="512"></canvas>
+ <div id="error"><noscript>Please enable JavaScript</noscript></div>
+
+ <p>
+ <b>Material:</b>
+ <select id="material">
+ <option value="0" selected>Diffuse</option>
+ <option value="1">Mirror</option>
+ <option value="2">Glossy</option>
+ </select>
+ <span id="glossiness-factor">
+ <br>with glossiness factor: 0 &lt; <input id="glossiness" value="0.6"> &lt; 1
+ </span>
+ <br>
+
+ <b>Environment:</b>
+ <select id="environment">
+ <option value="0" selected>Cornell Box - Yellow and Blue</option>
+ <option value="1">Cornell Box - Red and Green</option>
+ </select>
+ </p>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/demos/path-tracer/main.css b/demos/path-tracer/main.css
new file mode 100644
index 0000000..a163135
--- /dev/null
+++ b/demos/path-tracer/main.css
@@ -0,0 +1,60 @@
+body {
+ max-width: 900px;
+ padding: 30px;
+ margin: 0 auto;
+ font: 14px/19px 'Lucida Grande', sans-serif;
+}
+
+#main {
+ margin: 80px 0;
+ padding-left: 542px;
+ height: 512px;
+ position: relative;
+}
+
+#error {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 412px;
+ height: 412px;
+ padding: 50px;
+ text-align: center;
+ background: #DFDFDF;
+}
+
+canvas {
+ position: absolute;
+ left: 0;
+ top: 0;
+}
+
+p,
+ul {
+ margin: 0 0 30px 0;
+}
+
+h1 {
+ font: bold italic 50px Georgia;
+ margin: 0 0 60px 0;
+ text-align: center;
+}
+
+a {
+ color: inherit;
+}
+
+#footer {
+ text-align: center;
+ margin: 100px 0 0 0;
+}
+
+#glossiness-factor {
+ display: none;
+ font-size: 12px;
+}
+
+#glossiness-factor input {
+ width: 40px;
+ text-align: center;
+} \ No newline at end of file
diff --git a/demos/path-tracer/main.js b/demos/path-tracer/main.js
new file mode 100644
index 0000000..f8ecb88
--- /dev/null
+++ b/demos/path-tracer/main.js
@@ -0,0 +1,2655 @@
+// augment Sylvester some
+Matrix.Translation = function (v) {
+ if (v.elements.length == 2) {
+ var r = Matrix.I(3);
+ r.elements[2][0] = v.elements[0];
+ r.elements[2][1] = v.elements[1];
+ return r;
+ }
+
+ if (v.elements.length == 3) {
+ var r = Matrix.I(4);
+ r.elements[0][3] = v.elements[0];
+ r.elements[1][3] = v.elements[1];
+ r.elements[2][3] = v.elements[2];
+ return r;
+ }
+
+ throw "Invalid length for Translation";
+}
+
+Matrix.prototype.flatten = function () {
+ var result = [];
+ if (this.elements.length == 0)
+ return [];
+
+
+ for (var j = 0; j < this.elements[0].length; j++)
+ for (var i = 0; i < this.elements.length; i++)
+ result.push(this.elements[i][j]);
+ return result;
+}
+
+Matrix.prototype.ensure4x4 = function () {
+ if (this.elements.length == 4 &&
+ this.elements[0].length == 4)
+ return this;
+
+ if (this.elements.length > 4 ||
+ this.elements[0].length > 4)
+ return null;
+
+ for (var i = 0; i < this.elements.length; i++) {
+ for (var j = this.elements[i].length; j < 4; j++) {
+ if (i == j)
+ this.elements[i].push(1);
+ else
+ this.elements[i].push(0);
+ }
+ }
+
+ for (var i = this.elements.length; i < 4; i++) {
+ if (i == 0)
+ this.elements.push([1, 0, 0, 0]);
+ else if (i == 1)
+ this.elements.push([0, 1, 0, 0]);
+ else if (i == 2)
+ this.elements.push([0, 0, 1, 0]);
+ else if (i == 3)
+ this.elements.push([0, 0, 0, 1]);
+ }
+
+ return this;
+};
+
+Matrix.prototype.make3x3 = function () {
+ if (this.elements.length != 4 ||
+ this.elements[0].length != 4)
+ return null;
+
+ return Matrix.create([[this.elements[0][0], this.elements[0][1], this.elements[0][2]],
+ [this.elements[1][0], this.elements[1][1], this.elements[1][2]],
+ [this.elements[2][0], this.elements[2][1], this.elements[2][2]]]);
+};
+
+Vector.prototype.flatten = function () {
+ return this.elements;
+};
+
+function mht(m) {
+ var s = "";
+ if (m.length == 16) {
+ for (var i = 0; i < 4; i++) {
+ s += "<span style='font-family: monospace'>[" + m[i * 4 + 0].toFixed(4) + "," + m[i * 4 + 1].toFixed(4) + "," + m[i * 4 + 2].toFixed(4) + "," + m[i * 4 + 3].toFixed(4) + "]</span><br>";
+ }
+ } else if (m.length == 9) {
+ for (var i = 0; i < 3; i++) {
+ s += "<span style='font-family: monospace'>[" + m[i * 3 + 0].toFixed(4) + "," + m[i * 3 + 1].toFixed(4) + "," + m[i * 3 + 2].toFixed(4) + "]</font><br>";
+ }
+ } else {
+ return m.toString();
+ }
+ return s;
+}
+
+//
+// gluLookAt
+//
+function makeLookAt(ex, ey, ez,
+ cx, cy, cz,
+ ux, uy, uz) {
+ var eye = $V([ex, ey, ez]);
+ var center = $V([cx, cy, cz]);
+ var up = $V([ux, uy, uz]);
+
+ var mag;
+
+ var z = eye.subtract(center).toUnitVector();
+ var x = up.cross(z).toUnitVector();
+ var y = z.cross(x).toUnitVector();
+
+ var m = $M([[x.e(1), x.e(2), x.e(3), 0],
+ [y.e(1), y.e(2), y.e(3), 0],
+ [z.e(1), z.e(2), z.e(3), 0],
+ [0, 0, 0, 1]]);
+
+ var t = $M([[1, 0, 0, -ex],
+ [0, 1, 0, -ey],
+ [0, 0, 1, -ez],
+ [0, 0, 0, 1]]);
+ return m.x(t);
+}
+
+//
+// glOrtho
+//
+function makeOrtho(left, right,
+ bottom, top,
+ znear, zfar) {
+ var tx = -(right + left) / (right - left);
+ var ty = -(top + bottom) / (top - bottom);
+ var tz = -(zfar + znear) / (zfar - znear);
+
+ return $M([[2 / (right - left), 0, 0, tx],
+ [0, 2 / (top - bottom), 0, ty],
+ [0, 0, -2 / (zfar - znear), tz],
+ [0, 0, 0, 1]]);
+}
+
+//
+// gluPerspective
+//
+function makePerspective(fovy, aspect, znear, zfar) {
+ var ymax = znear * Math.tan(fovy * Math.PI / 360.0);
+ var ymin = -ymax;
+ var xmin = ymin * aspect;
+ var xmax = ymax * aspect;
+
+ return makeFrustum(xmin, xmax, ymin, ymax, znear, zfar);
+}
+
+//
+// glFrustum
+//
+function makeFrustum(left, right,
+ bottom, top,
+ znear, zfar) {
+ var X = 2 * znear / (right - left);
+ var Y = 2 * znear / (top - bottom);
+ var A = (right + left) / (right - left);
+ var B = (top + bottom) / (top - bottom);
+ var C = -(zfar + znear) / (zfar - znear);
+ var D = -2 * zfar * znear / (zfar - znear);
+
+ return $M([[X, 0, A, 0],
+ [0, Y, B, 0],
+ [0, 0, C, D],
+ [0, 0, -1, 0]]);
+}
+
+//
+// glOrtho
+//
+function makeOrtho(left, right, bottom, top, znear, zfar) {
+ var tx = - (right + left) / (right - left);
+ var ty = - (top + bottom) / (top - bottom);
+ var tz = - (zfar + znear) / (zfar - znear);
+
+ return $M([[2 / (right - left), 0, 0, tx],
+ [0, 2 / (top - bottom), 0, ty],
+ [0, 0, -2 / (zfar - znear), tz],
+ [0, 0, 0, 1]]);
+}
+
+
+
+// === Sylvester ===
+// Vector and Matrix mathematics modules for JavaScript
+// Copyright (c) 2007 James Coglan
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+var Sylvester = {
+ version: '0.1.3',
+ precision: 1e-6
+};
+
+function Vector() { }
+Vector.prototype = {
+
+ // Returns element i of the vector
+ e: function (i) {
+ return (i < 1 || i > this.elements.length) ? null : this.elements[i - 1];
+ },
+
+ // Returns the number of elements the vector has
+ dimensions: function () {
+ return this.elements.length;
+ },
+
+ // Returns the modulus ('length') of the vector
+ modulus: function () {
+ return Math.sqrt(this.dot(this));
+ },
+
+ // Returns true iff the vector is equal to the argument
+ eql: function (vector) {
+ var n = this.elements.length;
+ var V = vector.elements || vector;
+ if (n != V.length) { return false; }
+ do {
+ if (Math.abs(this.elements[n - 1] - V[n - 1]) > Sylvester.precision) { return false; }
+ } while (--n);
+ return true;
+ },
+
+ // Returns a copy of the vector
+ dup: function () {
+ return Vector.create(this.elements);
+ },
+
+ // Maps the vector to another vector according to the given function
+ map: function (fn) {
+ var elements = [];
+ this.each(function (x, i) {
+ elements.push(fn(x, i));
+ });
+ return Vector.create(elements);
+ },
+
+ // Calls the iterator for each element of the vector in turn
+ each: function (fn) {
+ var n = this.elements.length, k = n, i;
+ do {
+ i = k - n;
+ fn(this.elements[i], i + 1);
+ } while (--n);
+ },
+
+ // Returns a new vector created by normalizing the receiver
+ toUnitVector: function () {
+ var r = this.modulus();
+ if (r === 0) { return this.dup(); }
+ return this.map(function (x) { return x / r; });
+ },
+
+ // Returns the angle between the vector and the argument (also a vector)
+ angleFrom: function (vector) {
+ var V = vector.elements || vector;
+ var n = this.elements.length, k = n, i;
+ if (n != V.length) { return null; }
+ var dot = 0, mod1 = 0, mod2 = 0;
+ // Work things out in parallel to save time
+ this.each(function (x, i) {
+ dot += x * V[i - 1];
+ mod1 += x * x;
+ mod2 += V[i - 1] * V[i - 1];
+ });
+ mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);
+ if (mod1 * mod2 === 0) { return null; }
+ var theta = dot / (mod1 * mod2);
+ if (theta < -1) { theta = -1; }
+ if (theta > 1) { theta = 1; }
+ return Math.acos(theta);
+ },
+
+ // Returns true iff the vector is parallel to the argument
+ isParallelTo: function (vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (angle <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is antiparallel to the argument
+ isAntiparallelTo: function (vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (Math.abs(angle - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is perpendicular to the argument
+ isPerpendicularTo: function (vector) {
+ var dot = this.dot(vector);
+ return (dot === null) ? null : (Math.abs(dot) <= Sylvester.precision);
+ },
+
+ // Returns the result of adding the argument to the vector
+ add: function (vector) {
+ var V = vector.elements || vector;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function (x, i) { return x + V[i - 1]; });
+ },
+
+ // Returns the result of subtracting the argument from the vector
+ subtract: function (vector) {
+ var V = vector.elements || vector;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function (x, i) { return x - V[i - 1]; });
+ },
+
+ // Returns the result of multiplying the elements of the vector by the argument
+ multiply: function (k) {
+ return this.map(function (x) { return x * k; });
+ },
+
+ x: function (k) { return this.multiply(k); },
+
+ // Returns the scalar product of the vector with the argument
+ // Both vectors must have equal dimensionality
+ dot: function (vector) {
+ var V = vector.elements || vector;
+ var i, product = 0, n = this.elements.length;
+ if (n != V.length) { return null; }
+ do { product += this.elements[n - 1] * V[n - 1]; } while (--n);
+ return product;
+ },
+
+ // Returns the vector product of the vector with the argument
+ // Both vectors must have dimensionality 3
+ cross: function (vector) {
+ var B = vector.elements || vector;
+ if (this.elements.length != 3 || B.length != 3) { return null; }
+ var A = this.elements;
+ return Vector.create([
+ (A[1] * B[2]) - (A[2] * B[1]),
+ (A[2] * B[0]) - (A[0] * B[2]),
+ (A[0] * B[1]) - (A[1] * B[0])
+ ]);
+ },
+
+ // Returns the (absolute) largest element of the vector
+ max: function () {
+ var m = 0, n = this.elements.length, k = n, i;
+ do {
+ i = k - n;
+ if (Math.abs(this.elements[i]) > Math.abs(m)) { m = this.elements[i]; }
+ } while (--n);
+ return m;
+ },
+
+ // Returns the index of the first match found
+ indexOf: function (x) {
+ var index = null, n = this.elements.length, k = n, i;
+ do {
+ i = k - n;
+ if (index === null && this.elements[i] == x) {
+ index = i + 1;
+ }
+ } while (--n);
+ return index;
+ },
+
+ // Returns a diagonal matrix with the vector's elements as its diagonal elements
+ toDiagonalMatrix: function () {
+ return Matrix.Diagonal(this.elements);
+ },
+
+ // Returns the result of rounding the elements of the vector
+ round: function () {
+ return this.map(function (x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the vector with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function (x) {
+ return this.map(function (y) {
+ return (Math.abs(y - x) <= Sylvester.precision) ? x : y;
+ });
+ },
+
+ // Returns the vector's distance from the argument, when considered as a point in space
+ distanceFrom: function (obj) {
+ if (obj.anchor) { return obj.distanceFrom(this); }
+ var V = obj.elements || obj;
+ if (V.length != this.elements.length) { return null; }
+ var sum = 0, part;
+ this.each(function (x, i) {
+ part = x - V[i - 1];
+ sum += part * part;
+ });
+ return Math.sqrt(sum);
+ },
+
+ // Returns true if the vector is point on the given line
+ liesOn: function (line) {
+ return line.contains(this);
+ },
+
+ // Return true iff the vector is a point in the given plane
+ liesIn: function (plane) {
+ return plane.contains(this);
+ },
+
+ // Rotates the vector about the given object. The object should be a
+ // point if the vector is 2D, and a line if it is 3D. Be careful with line directions!
+ rotate: function (t, obj) {
+ var V, R, x, y, z;
+ switch (this.elements.length) {
+ case 2:
+ V = obj.elements || obj;
+ if (V.length != 2) { return null; }
+ R = Matrix.Rotation(t).elements;
+ x = this.elements[0] - V[0];
+ y = this.elements[1] - V[1];
+ return Vector.create([
+ V[0] + R[0][0] * x + R[0][1] * y,
+ V[1] + R[1][0] * x + R[1][1] * y
+ ]);
+ break;
+ case 3:
+ if (!obj.direction) { return null; }
+ var C = obj.pointClosestTo(this).elements;
+ R = Matrix.Rotation(t, obj.direction).elements;
+ x = this.elements[0] - C[0];
+ y = this.elements[1] - C[1];
+ z = this.elements[2] - C[2];
+ return Vector.create([
+ C[0] + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C[1] + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C[2] + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ]);
+ break;
+ default:
+ return null;
+ }
+ },
+
+ // Returns the result of reflecting the point in the given point, line or plane
+ reflectionIn: function (obj) {
+ if (obj.anchor) {
+ // obj is a plane or line
+ var P = this.elements.slice();
+ var C = obj.pointClosestTo(P).elements;
+ return Vector.create([C[0] + (C[0] - P[0]), C[1] + (C[1] - P[1]), C[2] + (C[2] - (P[2] || 0))]);
+ } else {
+ // obj is a point
+ var Q = obj.elements || obj;
+ if (this.elements.length != Q.length) { return null; }
+ return this.map(function (x, i) { return Q[i - 1] + (Q[i - 1] - x); });
+ }
+ },
+
+ // Utility to make sure vectors are 3D. If they are 2D, a zero z-component is added
+ to3D: function () {
+ var V = this.dup();
+ switch (V.elements.length) {
+ case 3: break;
+ case 2: V.elements.push(0); break;
+ default: return null;
+ }
+ return V;
+ },
+
+ // Returns a string representation of the vector
+ inspect: function () {
+ return '[' + this.elements.join(', ') + ']';
+ },
+
+ // Set vector's elements from an array
+ setElements: function (els) {
+ this.elements = (els.elements || els).slice();
+ return this;
+ }
+};
+
+// Constructor function
+Vector.create = function (elements) {
+ var V = new Vector();
+ return V.setElements(elements);
+};
+
+// i, j, k unit vectors
+Vector.i = Vector.create([1, 0, 0]);
+Vector.j = Vector.create([0, 1, 0]);
+Vector.k = Vector.create([0, 0, 1]);
+
+// Random vector of size n
+Vector.Random = function (n) {
+ var elements = [];
+ do {
+ elements.push(Math.random());
+ } while (--n);
+ return Vector.create(elements);
+};
+
+// Vector filled with zeros
+Vector.Zero = function (n) {
+ var elements = [];
+ do {
+ elements.push(0);
+ } while (--n);
+ return Vector.create(elements);
+};
+
+
+
+function Matrix() { }
+Matrix.prototype = {
+
+ // Returns element (i,j) of the matrix
+ e: function (i, j) {
+ if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length) { return null; }
+ return this.elements[i - 1][j - 1];
+ },
+
+ // Returns row k of the matrix as a vector
+ row: function (i) {
+ if (i > this.elements.length) { return null; }
+ return Vector.create(this.elements[i - 1]);
+ },
+
+ // Returns column k of the matrix as a vector
+ col: function (j) {
+ if (j > this.elements[0].length) { return null; }
+ var col = [], n = this.elements.length, k = n, i;
+ do {
+ i = k - n;
+ col.push(this.elements[i][j - 1]);
+ } while (--n);
+ return Vector.create(col);
+ },
+
+ // Returns the number of rows/columns the matrix has
+ dimensions: function () {
+ return { rows: this.elements.length, cols: this.elements[0].length };
+ },
+
+ // Returns the number of rows in the matrix
+ rows: function () {
+ return this.elements.length;
+ },
+
+ // Returns the number of columns in the matrix
+ cols: function () {
+ return this.elements[0].length;
+ },
+
+ // Returns true iff the matrix is equal to the argument. You can supply
+ // a vector as the argument, in which case the receiver must be a
+ // one-column matrix equal to the vector.
+ eql: function (matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof (M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (this.elements.length != M.length ||
+ this.elements[0].length != M[0].length) { return false; }
+ var ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do {
+ i = ki - ni;
+ nj = kj;
+ do {
+ j = kj - nj;
+ if (Math.abs(this.elements[i][j] - M[i][j]) > Sylvester.precision) { return false; }
+ } while (--nj);
+ } while (--ni);
+ return true;
+ },
+
+ // Returns a copy of the matrix
+ dup: function () {
+ return Matrix.create(this.elements);
+ },
+
+ // Maps the matrix to another matrix (of the same dimensions) according to the given function
+ map: function (fn) {
+ var els = [], ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do {
+ i = ki - ni;
+ nj = kj;
+ els[i] = [];
+ do {
+ j = kj - nj;
+ els[i][j] = fn(this.elements[i][j], i + 1, j + 1);
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(els);
+ },
+
+ // Returns true iff the argument has the same dimensions as the matrix
+ isSameSizeAs: function (matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof (M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ return (this.elements.length == M.length &&
+ this.elements[0].length == M[0].length);
+ },
+
+ // Returns the result of adding the argument to the matrix
+ add: function (matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof (M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function (x, i, j) { return x + M[i - 1][j - 1]; });
+ },
+
+ // Returns the result of subtracting the argument from the matrix
+ subtract: function (matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof (M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function (x, i, j) { return x - M[i - 1][j - 1]; });
+ },
+
+ // Returns true iff the matrix can multiply the argument from the left
+ canMultiplyFromLeft: function (matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof (M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ // this.columns should equal matrix.rows
+ return (this.elements[0].length == M.length);
+ },
+
+ // Returns the result of multiplying the matrix from the right by the argument.
+ // If the argument is a scalar then just multiply all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ multiply: function (matrix) {
+ if (!matrix.elements) {
+ return this.map(function (x) { return x * matrix; });
+ }
+ var returnVector = matrix.modulus ? true : false;
+ var M = matrix.elements || matrix;
+ if (typeof (M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.canMultiplyFromLeft(M)) { return null; }
+ var ni = this.elements.length, ki = ni, i, nj, kj = M[0].length, j;
+ var cols = this.elements[0].length, elements = [], sum, nc, c;
+ do {
+ i = ki - ni;
+ elements[i] = [];
+ nj = kj;
+ do {
+ j = kj - nj;
+ sum = 0;
+ nc = cols;
+ do {
+ c = cols - nc;
+ sum += this.elements[i][c] * M[c][j];
+ } while (--nc);
+ elements[i][j] = sum;
+ } while (--nj);
+ } while (--ni);
+ var M = Matrix.create(elements);
+ return returnVector ? M.col(1) : M;
+ },
+
+ x: function (matrix) { return this.multiply(matrix); },
+
+ // Returns a submatrix taken from the matrix
+ // Argument order is: start row, start col, nrows, ncols
+ // Element selection wraps if the required index is outside the matrix's bounds, so you could
+ // use this to perform row/column cycling or copy-augmenting.
+ minor: function (a, b, c, d) {
+ var elements = [], ni = c, i, nj, j;
+ var rows = this.elements.length, cols = this.elements[0].length;
+ do {
+ i = c - ni;
+ elements[i] = [];
+ nj = d;
+ do {
+ j = d - nj;
+ elements[i][j] = this.elements[(a + i - 1) % rows][(b + j - 1) % cols];
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(elements);
+ },
+
+ // Returns the transpose of the matrix
+ transpose: function () {
+ var rows = this.elements.length, cols = this.elements[0].length;
+ var elements = [], ni = cols, i, nj, j;
+ do {
+ i = cols - ni;
+ elements[i] = [];
+ nj = rows;
+ do {
+ j = rows - nj;
+ elements[i][j] = this.elements[j][i];
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(elements);
+ },
+
+ // Returns true iff the matrix is square
+ isSquare: function () {
+ return (this.elements.length == this.elements[0].length);
+ },
+
+ // Returns the (absolute) largest element of the matrix
+ max: function () {
+ var m = 0, ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do {
+ i = ki - ni;
+ nj = kj;
+ do {
+ j = kj - nj;
+ if (Math.abs(this.elements[i][j]) > Math.abs(m)) { m = this.elements[i][j]; }
+ } while (--nj);
+ } while (--ni);
+ return m;
+ },
+
+ // Returns the indeces of the first match found by reading row-by-row from left to right
+ indexOf: function (x) {
+ var index = null, ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do {
+ i = ki - ni;
+ nj = kj;
+ do {
+ j = kj - nj;
+ if (this.elements[i][j] == x) { return { i: i + 1, j: j + 1 }; }
+ } while (--nj);
+ } while (--ni);
+ return null;
+ },
+
+ // If the matrix is square, returns the diagonal elements as a vector.
+ // Otherwise, returns null.
+ diagonal: function () {
+ if (!this.isSquare) { return null; }
+ var els = [], n = this.elements.length, k = n, i;
+ do {
+ i = k - n;
+ els.push(this.elements[i][i]);
+ } while (--n);
+ return Vector.create(els);
+ },
+
+ // Make the matrix upper (right) triangular by Gaussian elimination.
+ // This method only adds multiples of rows to other rows. No rows are
+ // scaled up or switched, and the determinant is preserved.
+ toRightTriangular: function () {
+ var M = this.dup(), els;
+ var n = this.elements.length, k = n, i, np, kp = this.elements[0].length, p;
+ do {
+ i = k - n;
+ if (M.elements[i][i] == 0) {
+ for (j = i + 1; j < k; j++) {
+ if (M.elements[j][i] != 0) {
+ els = []; np = kp;
+ do {
+ p = kp - np;
+ els.push(M.elements[i][p] + M.elements[j][p]);
+ } while (--np);
+ M.elements[i] = els;
+ break;
+ }
+ }
+ }
+ if (M.elements[i][i] != 0) {
+ for (j = i + 1; j < k; j++) {
+ var multiplier = M.elements[j][i] / M.elements[i][i];
+ els = []; np = kp;
+ do {
+ p = kp - np;
+ // Elements with column numbers up to an including the number
+ // of the row that we're subtracting can safely be set straight to
+ // zero, since that's the point of this routine and it avoids having
+ // to loop over and correct rounding errors later
+ els.push(p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier);
+ } while (--np);
+ M.elements[j] = els;
+ }
+ }
+ } while (--n);
+ return M;
+ },
+
+ toUpperTriangular: function () { return this.toRightTriangular(); },
+
+ // Returns the determinant for square matrices
+ determinant: function () {
+ if (!this.isSquare()) { return null; }
+ var M = this.toRightTriangular();
+ var det = M.elements[0][0], n = M.elements.length - 1, k = n, i;
+ do {
+ i = k - n + 1;
+ det = det * M.elements[i][i];
+ } while (--n);
+ return det;
+ },
+
+ det: function () { return this.determinant(); },
+
+ // Returns true iff the matrix is singular
+ isSingular: function () {
+ return (this.isSquare() && this.determinant() === 0);
+ },
+
+ // Returns the trace for square matrices
+ trace: function () {
+ if (!this.isSquare()) { return null; }
+ var tr = this.elements[0][0], n = this.elements.length - 1, k = n, i;
+ do {
+ i = k - n + 1;
+ tr += this.elements[i][i];
+ } while (--n);
+ return tr;
+ },
+
+ tr: function () { return this.trace(); },
+
+ // Returns the rank of the matrix
+ rank: function () {
+ var M = this.toRightTriangular(), rank = 0;
+ var ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do {
+ i = ki - ni;
+ nj = kj;
+ do {
+ j = kj - nj;
+ if (Math.abs(M.elements[i][j]) > Sylvester.precision) { rank++; break; }
+ } while (--nj);
+ } while (--ni);
+ return rank;
+ },
+
+ rk: function () { return this.rank(); },
+
+ // Returns the result of attaching the given argument to the right-hand side of the matrix
+ augment: function (matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof (M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ var T = this.dup(), cols = T.elements[0].length;
+ var ni = T.elements.length, ki = ni, i, nj, kj = M[0].length, j;
+ if (ni != M.length) { return null; }
+ do {
+ i = ki - ni;
+ nj = kj;
+ do {
+ j = kj - nj;
+ T.elements[i][cols + j] = M[i][j];
+ } while (--nj);
+ } while (--ni);
+ return T;
+ },
+
+ // Returns the inverse (if one exists) using Gauss-Jordan
+ inverse: function () {
+ if (!this.isSquare() || this.isSingular()) { return null; }
+ var ni = this.elements.length, ki = ni, i, j;
+ var M = this.augment(Matrix.I(ni)).toRightTriangular();
+ var np, kp = M.elements[0].length, p, els, divisor;
+ var inverse_elements = [], new_element;
+ // Matrix is non-singular so there will be no zeros on the diagonal
+ // Cycle through rows from last to first
+ do {
+ i = ni - 1;
+ // First, normalise diagonal elements to 1
+ els = []; np = kp;
+ inverse_elements[i] = [];
+ divisor = M.elements[i][i];
+ do {
+ p = kp - np;
+ new_element = M.elements[i][p] / divisor;
+ els.push(new_element);
+ // Shuffle of the current row of the right hand side into the results
+ // array as it will not be modified by later runs through this loop
+ if (p >= ki) { inverse_elements[i].push(new_element); }
+ } while (--np);
+ M.elements[i] = els;
+ // Then, subtract this row from those above it to
+ // give the identity matrix on the left hand side
+ for (j = 0; j < i; j++) {
+ els = []; np = kp;
+ do {
+ p = kp - np;
+ els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]);
+ } while (--np);
+ M.elements[j] = els;
+ }
+ } while (--ni);
+ return Matrix.create(inverse_elements);
+ },
+
+ inv: function () { return this.inverse(); },
+
+ // Returns the result of rounding all the elements
+ round: function () {
+ return this.map(function (x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the matrix with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function (x) {
+ return this.map(function (p) {
+ return (Math.abs(p - x) <= Sylvester.precision) ? x : p;
+ });
+ },
+
+ // Returns a string representation of the matrix
+ inspect: function () {
+ var matrix_rows = [];
+ var n = this.elements.length, k = n, i;
+ do {
+ i = k - n;
+ matrix_rows.push(Vector.create(this.elements[i]).inspect());
+ } while (--n);
+ return matrix_rows.join('\n');
+ },
+
+ // Set the matrix's elements from an array. If the argument passed
+ // is a vector, the resulting matrix will be a single column.
+ setElements: function (els) {
+ var i, elements = els.elements || els;
+ if (typeof (elements[0][0]) != 'undefined') {
+ var ni = elements.length, ki = ni, nj, kj, j;
+ this.elements = [];
+ do {
+ i = ki - ni;
+ nj = elements[i].length; kj = nj;
+ this.elements[i] = [];
+ do {
+ j = kj - nj;
+ this.elements[i][j] = elements[i][j];
+ } while (--nj);
+ } while (--ni);
+ return this;
+ }
+ var n = elements.length, k = n;
+ this.elements = [];
+ do {
+ i = k - n;
+ this.elements.push([elements[i]]);
+ } while (--n);
+ return this;
+ }
+};
+
+// Constructor function
+Matrix.create = function (elements) {
+ var M = new Matrix();
+ return M.setElements(elements);
+};
+
+// Identity matrix of size n
+Matrix.I = function (n) {
+ var els = [], k = n, i, nj, j;
+ do {
+ i = k - n;
+ els[i] = []; nj = k;
+ do {
+ j = k - nj;
+ els[i][j] = (i == j) ? 1 : 0;
+ } while (--nj);
+ } while (--n);
+ return Matrix.create(els);
+};
+
+// Diagonal matrix - all off-diagonal elements are zero
+Matrix.Diagonal = function (elements) {
+ var n = elements.length, k = n, i;
+ var M = Matrix.I(n);
+ do {
+ i = k - n;
+ M.elements[i][i] = elements[i];
+ } while (--n);
+ return M;
+};
+
+// Rotation matrix about some axis. If no axis is
+// supplied, assume we're after a 2D transform
+Matrix.Rotation = function (theta, a) {
+ if (!a) {
+ return Matrix.create([
+ [Math.cos(theta), -Math.sin(theta)],
+ [Math.sin(theta), Math.cos(theta)]
+ ]);
+ }
+ var axis = a.dup();
+ if (axis.elements.length != 3) { return null; }
+ var mod = axis.modulus();
+ var x = axis.elements[0] / mod, y = axis.elements[1] / mod, z = axis.elements[2] / mod;
+ var s = Math.sin(theta), c = Math.cos(theta), t = 1 - c;
+ // Formula derived here: http://www.gamedev.net/reference/articles/article1199.asp
+ // That proof rotates the co-ordinate system so theta
+ // becomes -theta and sin becomes -sin here.
+ return Matrix.create([
+ [t * x * x + c, t * x * y - s * z, t * x * z + s * y],
+ [t * x * y + s * z, t * y * y + c, t * y * z - s * x],
+ [t * x * z - s * y, t * y * z + s * x, t * z * z + c]
+ ]);
+};
+
+// Special case rotations
+Matrix.RotationX = function (t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [1, 0, 0],
+ [0, c, -s],
+ [0, s, c]
+ ]);
+};
+Matrix.RotationY = function (t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [c, 0, s],
+ [0, 1, 0],
+ [-s, 0, c]
+ ]);
+};
+Matrix.RotationZ = function (t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [c, -s, 0],
+ [s, c, 0],
+ [0, 0, 1]
+ ]);
+};
+
+// Random matrix of n rows, m columns
+Matrix.Random = function (n, m) {
+ return Matrix.Zero(n, m).map(
+ function () { return Math.random(); }
+ );
+};
+
+// Matrix filled with zeros
+Matrix.Zero = function (n, m) {
+ var els = [], ni = n, i, nj, j;
+ do {
+ i = n - ni;
+ els[i] = [];
+ nj = m;
+ do {
+ j = m - nj;
+ els[i][j] = 0;
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(els);
+};
+
+
+
+function Line() { }
+Line.prototype = {
+
+ // Returns true if the argument occupies the same space as the line
+ eql: function (line) {
+ return (this.isParallelTo(line) && this.contains(line.anchor));
+ },
+
+ // Returns a copy of the line
+ dup: function () {
+ return Line.create(this.anchor, this.direction);
+ },
+
+ // Returns the result of translating the line by the given vector/array
+ translate: function (vector) {
+ var V = vector.elements || vector;
+ return Line.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.direction);
+ },
+
+ // Returns true if the line is parallel to the argument. Here, 'parallel to'
+ // means that the argument's direction is either parallel or antiparallel to
+ // the line's own direction. A line is parallel to a plane if the two do not
+ // have a unique intersection.
+ isParallelTo: function (obj) {
+ if (obj.normal) { return obj.isParallelTo(this); }
+ var theta = this.direction.angleFrom(obj.direction);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(theta - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns the line's perpendicular distance from the argument,
+ // which can be a point, a line or a plane
+ distanceFrom: function (obj) {
+ if (obj.normal) { return obj.distanceFrom(this); }
+ if (obj.direction) {
+ // obj is a line
+ if (this.isParallelTo(obj)) { return this.distanceFrom(obj.anchor); }
+ var N = this.direction.cross(obj.direction).toUnitVector().elements;
+ var A = this.anchor.elements, B = obj.anchor.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var PA1 = P[0] - A[0], PA2 = P[1] - A[1], PA3 = (P[2] || 0) - A[2];
+ var modPA = Math.sqrt(PA1 * PA1 + PA2 * PA2 + PA3 * PA3);
+ if (modPA === 0) return 0;
+ // Assumes direction vector is normalized
+ var cosTheta = (PA1 * D[0] + PA2 * D[1] + PA3 * D[2]) / modPA;
+ var sin2 = 1 - cosTheta * cosTheta;
+ return Math.abs(modPA * Math.sqrt(sin2 < 0 ? 0 : sin2));
+ }
+ },
+
+ // Returns true iff the argument is a point on the line
+ contains: function (point) {
+ var dist = this.distanceFrom(point);
+ return (dist !== null && dist <= Sylvester.precision);
+ },
+
+ // Returns true iff the line lies in the given plane
+ liesIn: function (plane) {
+ return plane.contains(this);
+ },
+
+ // Returns true iff the line has a unique point of intersection with the argument
+ intersects: function (obj) {
+ if (obj.normal) { return obj.intersects(this); }
+ return (!this.isParallelTo(obj) && this.distanceFrom(obj) <= Sylvester.precision);
+ },
+
+ // Returns the unique intersection point with the argument, if one exists
+ intersectionWith: function (obj) {
+ if (obj.normal) { return obj.intersectionWith(this); }
+ if (!this.intersects(obj)) { return null; }
+ var P = this.anchor.elements, X = this.direction.elements,
+ Q = obj.anchor.elements, Y = obj.direction.elements;
+ var X1 = X[0], X2 = X[1], X3 = X[2], Y1 = Y[0], Y2 = Y[1], Y3 = Y[2];
+ var PsubQ1 = P[0] - Q[0], PsubQ2 = P[1] - Q[1], PsubQ3 = P[2] - Q[2];
+ var XdotQsubP = - X1 * PsubQ1 - X2 * PsubQ2 - X3 * PsubQ3;
+ var YdotPsubQ = Y1 * PsubQ1 + Y2 * PsubQ2 + Y3 * PsubQ3;
+ var XdotX = X1 * X1 + X2 * X2 + X3 * X3;
+ var YdotY = Y1 * Y1 + Y2 * Y2 + Y3 * Y3;
+ var XdotY = X1 * Y1 + X2 * Y2 + X3 * Y3;
+ var k = (XdotQsubP * YdotY / XdotX + XdotY * YdotPsubQ) / (YdotY - XdotY * XdotY);
+ return Vector.create([P[0] + k * X1, P[1] + k * X2, P[2] + k * X3]);
+ },
+
+ // Returns the point on the line that is closest to the given point or line
+ pointClosestTo: function (obj) {
+ if (obj.direction) {
+ // obj is a line
+ if (this.intersects(obj)) { return this.intersectionWith(obj); }
+ if (this.isParallelTo(obj)) { return null; }
+ var D = this.direction.elements, E = obj.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], E1 = E[0], E2 = E[1], E3 = E[2];
+ // Create plane containing obj and the shared normal and intersect this with it
+ // Thank you: http://www.cgafaq.info/wiki/Line-line_distance
+ var x = (D3 * E1 - D1 * E3), y = (D1 * E2 - D2 * E1), z = (D2 * E3 - D3 * E2);
+ var N = Vector.create([x * E3 - y * E2, y * E1 - z * E3, z * E2 - x * E1]);
+ var P = Plane.create(obj.anchor, N);
+ return P.intersectionWith(this);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ if (this.contains(P)) { return Vector.create(P); }
+ var A = this.anchor.elements, D = this.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = D1 * (P[1] - A2) - D2 * (P[0] - A1), y = D2 * ((P[2] || 0) - A3) - D3 * (P[1] - A2),
+ z = D3 * (P[0] - A1) - D1 * ((P[2] || 0) - A3);
+ var V = Vector.create([D2 * x - D3 * z, D3 * y - D1 * x, D1 * z - D2 * y]);
+ var k = this.distanceFrom(P) / V.modulus();
+ return Vector.create([
+ P[0] + V.elements[0] * k,
+ P[1] + V.elements[1] * k,
+ (P[2] || 0) + V.elements[2] * k
+ ]);
+ }
+ },
+
+ // Returns a copy of the line rotated by t radians about the given line. Works by
+ // finding the argument's closest point to this line's anchor point (call this C) and
+ // rotating the anchor about C. Also rotates the line's direction about the argument's.
+ // Be careful with this - the rotation axis' direction affects the outcome!
+ rotate: function (t, line) {
+ // If we're working in 2D
+ if (typeof (line.direction) == 'undefined') { line = Line.create(line.to3D(), Vector.k); }
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Line.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * D[0] + R[0][1] * D[1] + R[0][2] * D[2],
+ R[1][0] * D[0] + R[1][1] * D[1] + R[1][2] * D[2],
+ R[2][0] * D[0] + R[2][1] * D[1] + R[2][2] * D[2]
+ ]);
+ },
+
+ // Returns the line's reflection in the given point or line
+ reflectionIn: function (obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, D = this.direction.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], D1 = D[0], D2 = D[1], D3 = D[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the line's direction vector to its anchor, then mirror that in the plane
+ var AD1 = A1 + D1, AD2 = A2 + D2, AD3 = A3 + D3;
+ var Q = obj.pointClosestTo([AD1, AD2, AD3]).elements;
+ var newD = [Q[0] + (Q[0] - AD1) - newA[0], Q[1] + (Q[1] - AD2) - newA[1], Q[2] + (Q[2] - AD3) - newA[2]];
+ return Line.create(newA, newD);
+ } else if (obj.direction) {
+ // obj is a line - reflection obtained by rotating PI radians about obj
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point - just reflect the line's anchor in it
+ var P = obj.elements || obj;
+ return Line.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.direction);
+ }
+ },
+
+ // Set the line's anchor point and direction.
+ setVectors: function (anchor, direction) {
+ // Need to do this so that line's properties are not
+ // references to the arguments passed in
+ anchor = Vector.create(anchor);
+ direction = Vector.create(direction);
+ if (anchor.elements.length == 2) { anchor.elements.push(0); }
+ if (direction.elements.length == 2) { direction.elements.push(0); }
+ if (anchor.elements.length > 3 || direction.elements.length > 3) { return null; }
+ var mod = direction.modulus();
+ if (mod === 0) { return null; }
+ this.anchor = anchor;
+ this.direction = Vector.create([
+ direction.elements[0] / mod,
+ direction.elements[1] / mod,
+ direction.elements[2] / mod
+ ]);
+ return this;
+ }
+};
+
+
+// Constructor function
+Line.create = function (anchor, direction) {
+ var L = new Line();
+ return L.setVectors(anchor, direction);
+};
+
+// Axes
+Line.X = Line.create(Vector.Zero(3), Vector.i);
+Line.Y = Line.create(Vector.Zero(3), Vector.j);
+Line.Z = Line.create(Vector.Zero(3), Vector.k);
+
+
+
+function Plane() { }
+Plane.prototype = {
+
+ // Returns true iff the plane occupies the same space as the argument
+ eql: function (plane) {
+ return (this.contains(plane.anchor) && this.isParallelTo(plane));
+ },
+
+ // Returns a copy of the plane
+ dup: function () {
+ return Plane.create(this.anchor, this.normal);
+ },
+
+ // Returns the result of translating the plane by the given vector
+ translate: function (vector) {
+ var V = vector.elements || vector;
+ return Plane.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.normal);
+ },
+
+ // Returns true iff the plane is parallel to the argument. Will return true
+ // if the planes are equal, or if you give a line and it lies in the plane.
+ isParallelTo: function (obj) {
+ var theta;
+ if (obj.normal) {
+ // obj is a plane
+ theta = this.normal.angleFrom(obj.normal);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(Math.PI - theta) <= Sylvester.precision);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.normal.isPerpendicularTo(obj.direction);
+ }
+ return null;
+ },
+
+ // Returns true iff the receiver is perpendicular to the argument
+ isPerpendicularTo: function (plane) {
+ var theta = this.normal.angleFrom(plane.normal);
+ return (Math.abs(Math.PI / 2 - theta) <= Sylvester.precision);
+ },
+
+ // Returns the plane's distance from the given object (point, line or plane)
+ distanceFrom: function (obj) {
+ if (this.intersects(obj) || this.contains(obj)) { return 0; }
+ if (obj.anchor) {
+ // obj is a plane or line
+ var A = this.anchor.elements, B = obj.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2]);
+ }
+ },
+
+ // Returns true iff the plane contains the given point or line
+ contains: function (obj) {
+ if (obj.normal) { return null; }
+ if (obj.direction) {
+ return (this.contains(obj.anchor) && this.contains(obj.anchor.add(obj.direction)));
+ } else {
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var diff = Math.abs(N[0] * (A[0] - P[0]) + N[1] * (A[1] - P[1]) + N[2] * (A[2] - (P[2] || 0)));
+ return (diff <= Sylvester.precision);
+ }
+ },
+
+ // Returns true iff the plane has a unique point/line of intersection with the argument
+ intersects: function (obj) {
+ if (typeof (obj.direction) == 'undefined' && typeof (obj.normal) == 'undefined') { return null; }
+ return !this.isParallelTo(obj);
+ },
+
+ // Returns the unique intersection with the argument, if one exists. The result
+ // will be a vector if a line is supplied, and a line if a plane is supplied.
+ intersectionWith: function (obj) {
+ if (!this.intersects(obj)) { return null; }
+ if (obj.direction) {
+ // obj is a line
+ var A = obj.anchor.elements, D = obj.direction.elements,
+ P = this.anchor.elements, N = this.normal.elements;
+ var multiplier = (N[0] * (P[0] - A[0]) + N[1] * (P[1] - A[1]) + N[2] * (P[2] - A[2])) / (N[0] * D[0] + N[1] * D[1] + N[2] * D[2]);
+ return Vector.create([A[0] + D[0] * multiplier, A[1] + D[1] * multiplier, A[2] + D[2] * multiplier]);
+ } else if (obj.normal) {
+ // obj is a plane
+ var direction = this.normal.cross(obj.normal).toUnitVector();
+ // To find an anchor point, we find one co-ordinate that has a value
+ // of zero somewhere on the intersection, and remember which one we picked
+ var N = this.normal.elements, A = this.anchor.elements,
+ O = obj.normal.elements, B = obj.anchor.elements;
+ var solver = Matrix.Zero(2, 2), i = 0;
+ while (solver.isSingular()) {
+ i++;
+ solver = Matrix.create([
+ [N[i % 3], N[(i + 1) % 3]],
+ [O[i % 3], O[(i + 1) % 3]]
+ ]);
+ }
+ // Then we solve the simultaneous equations in the remaining dimensions
+ var inverse = solver.inverse().elements;
+ var x = N[0] * A[0] + N[1] * A[1] + N[2] * A[2];
+ var y = O[0] * B[0] + O[1] * B[1] + O[2] * B[2];
+ var intersection = [
+ inverse[0][0] * x + inverse[0][1] * y,
+ inverse[1][0] * x + inverse[1][1] * y
+ ];
+ var anchor = [];
+ for (var j = 1; j <= 3; j++) {
+ // This formula picks the right element from intersection by
+ // cycling depending on which element we set to zero above
+ anchor.push((i == j) ? 0 : intersection[(j + (5 - i) % 3) % 3]);
+ }
+ return Line.create(anchor, direction);
+ }
+ },
+
+ // Returns the point in the plane closest to the given point
+ pointClosestTo: function (point) {
+ var P = point.elements || point;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var dot = (A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2];
+ return Vector.create([P[0] + N[0] * dot, P[1] + N[1] * dot, (P[2] || 0) + N[2] * dot]);
+ },
+
+ // Returns a copy of the plane, rotated by t radians about the given line
+ // See notes on Line#rotate.
+ rotate: function (t, line) {
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Plane.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * N[0] + R[0][1] * N[1] + R[0][2] * N[2],
+ R[1][0] * N[0] + R[1][1] * N[1] + R[1][2] * N[2],
+ R[2][0] * N[0] + R[2][1] * N[1] + R[2][2] * N[2]
+ ]);
+ },
+
+ // Returns the reflection of the plane in the given point, line or plane.
+ reflectionIn: function (obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, N = this.normal.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], N1 = N[0], N2 = N[1], N3 = N[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the plane's normal to its anchor, then mirror that in the other plane
+ var AN1 = A1 + N1, AN2 = A2 + N2, AN3 = A3 + N3;
+ var Q = obj.pointClosestTo([AN1, AN2, AN3]).elements;
+ var newN = [Q[0] + (Q[0] - AN1) - newA[0], Q[1] + (Q[1] - AN2) - newA[1], Q[2] + (Q[2] - AN3) - newA[2]];
+ return Plane.create(newA, newN);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ return Plane.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.normal);
+ }
+ },
+
+ // Sets the anchor point and normal to the plane. If three arguments are specified,
+ // the normal is calculated by assuming the three points should lie in the same plane.
+ // If only two are sepcified, the second is taken to be the normal. Normal vector is
+ // normalised before storage.
+ setVectors: function (anchor, v1, v2) {
+ anchor = Vector.create(anchor);
+ anchor = anchor.to3D(); if (anchor === null) { return null; }
+ v1 = Vector.create(v1);
+ v1 = v1.to3D(); if (v1 === null) { return null; }
+ if (typeof (v2) == 'undefined') {
+ v2 = null;
+ } else {
+ v2 = Vector.create(v2);
+ v2 = v2.to3D(); if (v2 === null) { return null; }
+ }
+ var A1 = anchor.elements[0], A2 = anchor.elements[1], A3 = anchor.elements[2];
+ var v11 = v1.elements[0], v12 = v1.elements[1], v13 = v1.elements[2];
+ var normal, mod;
+ if (v2 !== null) {
+ var v21 = v2.elements[0], v22 = v2.elements[1], v23 = v2.elements[2];
+ normal = Vector.create([
+ (v12 - A2) * (v23 - A3) - (v13 - A3) * (v22 - A2),
+ (v13 - A3) * (v21 - A1) - (v11 - A1) * (v23 - A3),
+ (v11 - A1) * (v22 - A2) - (v12 - A2) * (v21 - A1)
+ ]);
+ mod = normal.modulus();
+ if (mod === 0) { return null; }
+ normal = Vector.create([normal.elements[0] / mod, normal.elements[1] / mod, normal.elements[2] / mod]);
+ } else {
+ mod = Math.sqrt(v11 * v11 + v12 * v12 + v13 * v13);
+ if (mod === 0) { return null; }
+ normal = Vector.create([v1.elements[0] / mod, v1.elements[1] / mod, v1.elements[2] / mod]);
+ }
+ this.anchor = anchor;
+ this.normal = normal;
+ return this;
+ }
+};
+
+// Constructor function
+Plane.create = function (anchor, v1, v2) {
+ var P = new Plane();
+ return P.setVectors(anchor, v1, v2);
+};
+
+// X-Y-Z planes
+Plane.XY = Plane.create(Vector.Zero(3), Vector.k);
+Plane.YZ = Plane.create(Vector.Zero(3), Vector.i);
+Plane.ZX = Plane.create(Vector.Zero(3), Vector.j);
+Plane.YX = Plane.XY; Plane.ZY = Plane.YZ; Plane.XZ = Plane.ZX;
+
+// Utility functions
+var $V = Vector.create;
+var $M = Matrix.create;
+var $L = Line.create;
+var $P = Plane.create;
+
+
+/*
+ WebGL Path Tracing (http://madebyevan.com/webgl-path-tracing/)
+ License: MIT License (see below)
+
+ Copyright (c) 2010 Evan Wallace
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+// shader strings
+////////////////////////////////////////////////////////////////////////////////
+
+// vertex shader for drawing a textured quad
+var renderVertexSource =
+ ' attribute vec3 vertex;' +
+ ' varying vec2 texCoord;' +
+ ' void main() {' +
+ ' texCoord = vertex.xy * 0.5 + 0.5;' +
+ ' gl_Position = vec4(vertex, 1.0);' +
+ ' }';
+
+// fragment shader for drawing a textured quad
+var renderFragmentSource =
+ ' precision highp float;' +
+ ' varying vec2 texCoord;' +
+ ' uniform sampler2D texture;' +
+ ' void main() {' +
+ ' gl_FragColor = texture2D(texture, texCoord);' +
+ ' }';
+
+// vertex shader for drawing a line
+var lineVertexSource =
+ ' attribute vec3 vertex;' +
+ ' uniform vec3 cubeMin;' +
+ ' uniform vec3 cubeMax;' +
+ ' uniform mat4 modelviewProjection;' +
+ ' void main() {' +
+ ' gl_Position = modelviewProjection * vec4(mix(cubeMin, cubeMax, vertex), 1.0);' +
+ ' }';
+
+// fragment shader for drawing a line
+var lineFragmentSource =
+ ' precision highp float;' +
+ ' void main() {' +
+ ' gl_FragColor = vec4(1.0);' +
+ ' }';
+
+// constants for the shaders
+var bounces = '5';
+var epsilon = '0.0001';
+var infinity = '10000.0';
+var lightSize = 0.1;
+var lightVal = 0.5;
+
+// vertex shader, interpolate ray per-pixel
+var tracerVertexSource =
+ ' attribute vec3 vertex;' +
+ ' uniform vec3 eye, ray00, ray01, ray10, ray11;' +
+ ' varying vec3 initialRay;' +
+ ' void main() {' +
+ ' vec2 percent = vertex.xy * 0.5 + 0.5;' +
+ ' initialRay = mix(mix(ray00, ray01, percent.y), mix(ray10, ray11, percent.y), percent.x);' +
+ ' gl_Position = vec4(vertex, 1.0);' +
+ ' }';
+
+// start of fragment shader
+var tracerFragmentSourceHeader =
+ ' precision highp float;' +
+ ' uniform vec3 eye;' +
+ ' varying vec3 initialRay;' +
+ ' uniform float textureWeight;' +
+ ' uniform float timeSinceStart;' +
+ ' uniform sampler2D texture;' +
+ ' uniform float glossiness;' +
+ ' vec3 roomCubeMin = vec3(-1.0, -1.0, -1.0);' +
+ ' vec3 roomCubeMax = vec3(1.0, 1.0, 1.0);';
+
+// compute the near and far intersections of the cube (stored in the x and y components) using the slab method
+// no intersection means vec.x > vec.y (really tNear > tFar)
+var intersectCubeSource =
+ ' vec2 intersectCube(vec3 origin, vec3 ray, vec3 cubeMin, vec3 cubeMax) {' +
+ ' vec3 tMin = (cubeMin - origin) / ray;' +
+ ' vec3 tMax = (cubeMax - origin) / ray;' +
+ ' vec3 t1 = min(tMin, tMax);' +
+ ' vec3 t2 = max(tMin, tMax);' +
+ ' float tNear = max(max(t1.x, t1.y), t1.z);' +
+ ' float tFar = min(min(t2.x, t2.y), t2.z);' +
+ ' return vec2(tNear, tFar);' +
+ ' }';
+
+// given that hit is a point on the cube, what is the surface normal?
+// TODO: do this with fewer branches
+var normalForCubeSource =
+ ' vec3 normalForCube(vec3 hit, vec3 cubeMin, vec3 cubeMax)' +
+ ' {' +
+ ' if(hit.x < cubeMin.x + ' + epsilon + ') return vec3(-1.0, 0.0, 0.0);' +
+ ' else if(hit.x > cubeMax.x - ' + epsilon + ') return vec3(1.0, 0.0, 0.0);' +
+ ' else if(hit.y < cubeMin.y + ' + epsilon + ') return vec3(0.0, -1.0, 0.0);' +
+ ' else if(hit.y > cubeMax.y - ' + epsilon + ') return vec3(0.0, 1.0, 0.0);' +
+ ' else if(hit.z < cubeMin.z + ' + epsilon + ') return vec3(0.0, 0.0, -1.0);' +
+ ' else return vec3(0.0, 0.0, 1.0);' +
+ ' }';
+
+// compute the near intersection of a sphere
+// no intersection returns a value of +infinity
+var intersectSphereSource =
+ ' float intersectSphere(vec3 origin, vec3 ray, vec3 sphereCenter, float sphereRadius) {' +
+ ' vec3 toSphere = origin - sphereCenter;' +
+ ' float a = dot(ray, ray);' +
+ ' float b = 2.0 * dot(toSphere, ray);' +
+ ' float c = dot(toSphere, toSphere) - sphereRadius*sphereRadius;' +
+ ' float discriminant = b*b - 4.0*a*c;' +
+ ' if(discriminant > 0.0) {' +
+ ' float t = (-b - sqrt(discriminant)) / (2.0 * a);' +
+ ' if(t > 0.0) return t;' +
+ ' }' +
+ ' return ' + infinity + ';' +
+ ' }';
+
+// given that hit is a point on the sphere, what is the surface normal?
+var normalForSphereSource =
+ ' vec3 normalForSphere(vec3 hit, vec3 sphereCenter, float sphereRadius) {' +
+ ' return (hit - sphereCenter) / sphereRadius;' +
+ ' }';
+
+// use the fragment position for randomness
+var randomSource =
+ ' float random(vec3 scale, float seed) {' +
+ ' return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);' +
+ ' }';
+
+// random cosine-weighted distributed vector
+// from http://www.rorydriscoll.com/2009/01/07/better-sampling/
+var cosineWeightedDirectionSource =
+ ' vec3 cosineWeightedDirection(float seed, vec3 normal) {' +
+ ' float u = random(vec3(12.9898, 78.233, 151.7182), seed);' +
+ ' float v = random(vec3(63.7264, 10.873, 623.6736), seed);' +
+ ' float r = sqrt(u);' +
+ ' float angle = 6.283185307179586 * v;' +
+ // compute basis from normal
+ ' vec3 sdir, tdir;' +
+ ' if (abs(normal.x)<.5) {' +
+ ' sdir = cross(normal, vec3(1,0,0));' +
+ ' } else {' +
+ ' sdir = cross(normal, vec3(0,1,0));' +
+ ' }' +
+ ' tdir = cross(normal, sdir);' +
+ ' return r*cos(angle)*sdir + r*sin(angle)*tdir + sqrt(1.-u)*normal;' +
+ ' }';
+
+// random normalized vector
+var uniformlyRandomDirectionSource =
+ ' vec3 uniformlyRandomDirection(float seed) {' +
+ ' float u = random(vec3(12.9898, 78.233, 151.7182), seed);' +
+ ' float v = random(vec3(63.7264, 10.873, 623.6736), seed);' +
+ ' float z = 1.0 - 2.0 * u;' +
+ ' float r = sqrt(1.0 - z * z);' +
+ ' float angle = 6.283185307179586 * v;' +
+ ' return vec3(r * cos(angle), r * sin(angle), z);' +
+ ' }';
+
+// random vector in the unit sphere
+// note: this is probably not statistically uniform, saw raising to 1/3 power somewhere but that looks wrong?
+var uniformlyRandomVectorSource =
+ ' vec3 uniformlyRandomVector(float seed) {' +
+ ' return uniformlyRandomDirection(seed) * sqrt(random(vec3(36.7539, 50.3658, 306.2759), seed));' +
+ ' }';
+
+// compute specular lighting contribution
+var specularReflection =
+ ' vec3 reflectedLight = normalize(reflect(light - hit, normal));' +
+ ' specularHighlight = max(0.0, dot(reflectedLight, normalize(hit - origin)));';
+
+// update ray using normal and bounce according to a diffuse reflection
+var newDiffuseRay =
+ ' ray = cosineWeightedDirection(timeSinceStart + float(bounce), normal);';
+
+// update ray using normal according to a specular reflection
+var newReflectiveRay =
+ ' ray = reflect(ray, normal);' +
+ specularReflection +
+ ' specularHighlight = 2.0 * pow(specularHighlight, 20.0);';
+
+// update ray using normal and bounce according to a glossy reflection
+var newGlossyRay =
+ ' ray = normalize(reflect(ray, normal)) + uniformlyRandomVector(timeSinceStart + float(bounce)) * glossiness;' +
+ specularReflection +
+ ' specularHighlight = pow(specularHighlight, 3.0);';
+
+var yellowBlueCornellBox =
+ ' if(hit.x < -0.9999) surfaceColor = vec3(0.1, 0.5, 1.0);' + // blue
+ ' else if(hit.x > 0.9999) surfaceColor = vec3(1.0, 0.9, 0.1);'; // yellow
+
+var redGreenCornellBox =
+ ' if(hit.x < -0.9999) surfaceColor = vec3(1.0, 0.3, 0.1);' + // red
+ ' else if(hit.x > 0.9999) surfaceColor = vec3(0.3, 1.0, 0.1);'; // green
+
+function makeShadow(objects) {
+ return '' +
+ ' float shadow(vec3 origin, vec3 ray) {' +
+ concat(objects, function (o) { return o.getShadowTestCode(); }) +
+ ' return 1.0;' +
+ ' }';
+}
+
+function makeCalculateColor(objects) {
+ return '' +
+ ' vec3 calculateColor(vec3 origin, vec3 ray, vec3 light) {' +
+ ' vec3 colorMask = vec3(1.0);' +
+ ' vec3 accumulatedColor = vec3(0.0);' +
+
+ // main raytracing loop
+ ' for(int bounce = 0; bounce < ' + bounces + '; bounce++) {' +
+ // compute the intersection with everything
+ ' vec2 tRoom = intersectCube(origin, ray, roomCubeMin, roomCubeMax);' +
+ concat(objects, function (o) { return o.getIntersectCode(); }) +
+
+ // find the closest intersection
+ ' float t = ' + infinity + ';' +
+ ' if(tRoom.x < tRoom.y) t = tRoom.y;' +
+ concat(objects, function (o) { return o.getMinimumIntersectCode(); }) +
+
+ // info about hit
+ ' vec3 hit = origin + ray * t;' +
+ ' vec3 surfaceColor = vec3(0.75);' +
+ ' float specularHighlight = 0.0;' +
+ ' vec3 normal;' +
+
+ // calculate the normal (and change wall color)
+ ' if(t == tRoom.y) {' +
+ ' normal = -normalForCube(hit, roomCubeMin, roomCubeMax);' +
+ [yellowBlueCornellBox, redGreenCornellBox][environment] +
+ newDiffuseRay +
+ ' } else if(t == ' + infinity + ') {' +
+ ' break;' +
+ ' } else {' +
+ ' if(false) ;' + // hack to discard the first 'else' in 'else if'
+ concat(objects, function (o) { return o.getNormalCalculationCode(); }) +
+ [newDiffuseRay, newReflectiveRay, newGlossyRay][material] +
+ ' }' +
+
+ // compute diffuse lighting contribution
+ ' vec3 toLight = light - hit;' +
+ ' float diffuse = max(0.0, dot(normalize(toLight), normal));' +
+
+ // trace a shadow ray to the light
+ ' float shadowIntensity = shadow(hit + normal * ' + epsilon + ', toLight);' +
+
+ // do light bounce
+ ' colorMask *= surfaceColor;' +
+ ' accumulatedColor += colorMask * (' + lightVal + ' * diffuse * shadowIntensity);' +
+ ' accumulatedColor += colorMask * specularHighlight * shadowIntensity;' +
+
+ // calculate next origin
+ ' origin = hit;' +
+ ' }' +
+
+ ' return accumulatedColor;' +
+ ' }';
+}
+
+function makeMain() {
+ return '' +
+ ' void main() {' +
+ ' vec3 newLight = light + uniformlyRandomVector(timeSinceStart - 53.0) * ' + lightSize + ';' +
+ ' vec3 texture = texture2D(texture, gl_FragCoord.xy / 512.0).rgb;' +
+ ' gl_FragColor = vec4(mix(calculateColor(eye, initialRay, newLight), texture, textureWeight), 1.0);' +
+ ' }';
+}
+
+function makeTracerFragmentSource(objects) {
+ return tracerFragmentSourceHeader +
+ concat(objects, function (o) { return o.getGlobalCode(); }) +
+ intersectCubeSource +
+ normalForCubeSource +
+ intersectSphereSource +
+ normalForSphereSource +
+ randomSource +
+ cosineWeightedDirectionSource +
+ uniformlyRandomDirectionSource +
+ uniformlyRandomVectorSource +
+ makeShadow(objects) +
+ makeCalculateColor(objects) +
+ makeMain();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// utility functions
+////////////////////////////////////////////////////////////////////////////////
+
+function getEyeRay(matrix, x, y) {
+ return matrix.multiply(Vector.create([x, y, 0, 1])).divideByW().ensure3().subtract(eye);
+}
+
+function setUniforms(program, uniforms) {
+ for (var name in uniforms) {
+ var value = uniforms[name];
+ var location = gl.getUniformLocation(program, name);
+ if (location == null) continue;
+ if (value instanceof Vector) {
+ gl.uniform3fv(location, new Float32Array([value.elements[0], value.elements[1], value.elements[2]]));
+ } else if (value instanceof Matrix) {
+ gl.uniformMatrix4fv(location, false, new Float32Array(value.flatten()));
+ } else {
+ gl.uniform1f(location, value);
+ }
+ }
+}
+
+function concat(objects, func) {
+ var text = '';
+ for (var i = 0; i < objects.length; i++) {
+ text += func(objects[i]);
+ }
+ return text;
+}
+
+Vector.prototype.ensure3 = function () {
+ return Vector.create([this.elements[0], this.elements[1], this.elements[2]]);
+};
+
+Vector.prototype.ensure4 = function (w) {
+ return Vector.create([this.elements[0], this.elements[1], this.elements[2], w]);
+};
+
+Vector.prototype.divideByW = function () {
+ var w = this.elements[this.elements.length - 1];
+ var newElements = [];
+ for (var i = 0; i < this.elements.length; i++) {
+ newElements.push(this.elements[i] / w);
+ }
+ return Vector.create(newElements);
+};
+
+Vector.prototype.componentDivide = function (vector) {
+ if (this.elements.length != vector.elements.length) {
+ return null;
+ }
+ var newElements = [];
+ for (var i = 0; i < this.elements.length; i++) {
+ newElements.push(this.elements[i] / vector.elements[i]);
+ }
+ return Vector.create(newElements);
+};
+
+Vector.min = function (a, b) {
+ if (a.length != b.length) {
+ return null;
+ }
+ var newElements = [];
+ for (var i = 0; i < a.elements.length; i++) {
+ newElements.push(Math.min(a.elements[i], b.elements[i]));
+ }
+ return Vector.create(newElements);
+};
+
+Vector.max = function (a, b) {
+ if (a.length != b.length) {
+ return null;
+ }
+ var newElements = [];
+ for (var i = 0; i < a.elements.length; i++) {
+ newElements.push(Math.max(a.elements[i], b.elements[i]));
+ }
+ return Vector.create(newElements);
+};
+
+Vector.prototype.minComponent = function () {
+ var value = Number.MAX_VALUE;
+ for (var i = 0; i < this.elements.length; i++) {
+ value = Math.min(value, this.elements[i]);
+ }
+ return value;
+};
+
+Vector.prototype.maxComponent = function () {
+ var value = -Number.MAX_VALUE;
+ for (var i = 0; i < this.elements.length; i++) {
+ value = Math.max(value, this.elements[i]);
+ }
+ return value;
+};
+
+function compileSource(source, type) {
+ var shader = gl.createShader(type);
+ gl.shaderSource(shader, source);
+ gl.compileShader(shader);
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+ throw 'compile error: ' + gl.getShaderInfoLog(shader);
+ }
+ return shader;
+}
+
+function compileShader(vertexSource, fragmentSource) {
+ var shaderProgram = gl.createProgram();
+ gl.attachShader(shaderProgram, compileSource(vertexSource, gl.VERTEX_SHADER));
+ gl.attachShader(shaderProgram, compileSource(fragmentSource, gl.FRAGMENT_SHADER));
+ gl.linkProgram(shaderProgram);
+ if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
+ throw 'link error: ' + gl.getProgramInfoLog(shaderProgram);
+ }
+ return shaderProgram;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// class Sphere
+////////////////////////////////////////////////////////////////////////////////
+
+function Sphere(center, radius, id) {
+ this.center = center;
+ this.radius = radius;
+ this.centerStr = 'sphereCenter' + id;
+ this.radiusStr = 'sphereRadius' + id;
+ this.intersectStr = 'tSphere' + id;
+ this.temporaryTranslation = Vector.create([0, 0, 0]);
+}
+
+Sphere.prototype.getGlobalCode = function () {
+ return '' +
+ ' uniform vec3 ' + this.centerStr + ';' +
+ ' uniform float ' + this.radiusStr + ';';
+};
+
+Sphere.prototype.getIntersectCode = function () {
+ return '' +
+ ' float ' + this.intersectStr + ' = intersectSphere(origin, ray, ' + this.centerStr + ', ' + this.radiusStr + ');';
+};
+
+Sphere.prototype.getShadowTestCode = function () {
+ return '' +
+ this.getIntersectCode() +
+ ' if(' + this.intersectStr + ' < 1.0) return 0.0;';
+};
+
+Sphere.prototype.getMinimumIntersectCode = function () {
+ return '' +
+ ' if(' + this.intersectStr + ' < t) t = ' + this.intersectStr + ';';
+};
+
+Sphere.prototype.getNormalCalculationCode = function () {
+ return '' +
+ ' else if(t == ' + this.intersectStr + ') normal = normalForSphere(hit, ' + this.centerStr + ', ' + this.radiusStr + ');';
+};
+
+Sphere.prototype.setUniforms = function (renderer) {
+ renderer.uniforms[this.centerStr] = this.center.add(this.temporaryTranslation);
+ renderer.uniforms[this.radiusStr] = this.radius;
+};
+
+Sphere.prototype.temporaryTranslate = function (translation) {
+ this.temporaryTranslation = translation;
+};
+
+Sphere.prototype.translate = function (translation) {
+ this.center = this.center.add(translation);
+};
+
+Sphere.prototype.getMinCorner = function () {
+ return this.center.add(this.temporaryTranslation).subtract(Vector.create([this.radius, this.radius, this.radius]));
+};
+
+Sphere.prototype.getMaxCorner = function () {
+ return this.center.add(this.temporaryTranslation).add(Vector.create([this.radius, this.radius, this.radius]));
+};
+
+Sphere.prototype.intersect = function (origin, ray) {
+ return Sphere.intersect(origin, ray, this.center.add(this.temporaryTranslation), this.radius);
+};
+
+Sphere.intersect = function (origin, ray, center, radius) {
+ var toSphere = origin.subtract(center);
+ var a = ray.dot(ray);
+ var b = 2 * toSphere.dot(ray);
+ var c = toSphere.dot(toSphere) - radius * radius;
+ var discriminant = b * b - 4 * a * c;
+ if (discriminant > 0) {
+ var t = (-b - Math.sqrt(discriminant)) / (2 * a);
+ if (t > 0) {
+ return t;
+ }
+ }
+ return Number.MAX_VALUE;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class Cube
+////////////////////////////////////////////////////////////////////////////////
+
+function Cube(minCorner, maxCorner, id) {
+ this.minCorner = minCorner;
+ this.maxCorner = maxCorner;
+ this.minStr = 'cubeMin' + id;
+ this.maxStr = 'cubeMax' + id;
+ this.intersectStr = 'tCube' + id;
+ this.temporaryTranslation = Vector.create([0, 0, 0]);
+}
+
+Cube.prototype.getGlobalCode = function () {
+ return '' +
+ ' uniform vec3 ' + this.minStr + ';' +
+ ' uniform vec3 ' + this.maxStr + ';';
+};
+
+Cube.prototype.getIntersectCode = function () {
+ return '' +
+ ' vec2 ' + this.intersectStr + ' = intersectCube(origin, ray, ' + this.minStr + ', ' + this.maxStr + ');';
+};
+
+Cube.prototype.getShadowTestCode = function () {
+ return '' +
+ this.getIntersectCode() +
+ ' if(' + this.intersectStr + '.x > 0.0 && ' + this.intersectStr + '.x < 1.0 && ' + this.intersectStr + '.x < ' + this.intersectStr + '.y) return 0.0;';
+};
+
+Cube.prototype.getMinimumIntersectCode = function () {
+ return '' +
+ ' if(' + this.intersectStr + '.x > 0.0 && ' + this.intersectStr + '.x < ' + this.intersectStr + '.y && ' + this.intersectStr + '.x < t) t = ' + this.intersectStr + '.x;';
+};
+
+Cube.prototype.getNormalCalculationCode = function () {
+ return '' +
+ // have to compare intersectStr.x < intersectStr.y otherwise two coplanar
+ // cubes will look wrong (one cube will "steal" the hit from the other)
+ ' else if(t == ' + this.intersectStr + '.x && ' + this.intersectStr + '.x < ' + this.intersectStr + '.y) normal = normalForCube(hit, ' + this.minStr + ', ' + this.maxStr + ');';
+};
+
+Cube.prototype.setUniforms = function (renderer) {
+ renderer.uniforms[this.minStr] = this.getMinCorner();
+ renderer.uniforms[this.maxStr] = this.getMaxCorner();
+};
+
+Cube.prototype.temporaryTranslate = function (translation) {
+ this.temporaryTranslation = translation;
+};
+
+Cube.prototype.translate = function (translation) {
+ this.minCorner = this.minCorner.add(translation);
+ this.maxCorner = this.maxCorner.add(translation);
+};
+
+Cube.prototype.getMinCorner = function () {
+ return this.minCorner.add(this.temporaryTranslation);
+};
+
+Cube.prototype.getMaxCorner = function () {
+ return this.maxCorner.add(this.temporaryTranslation);
+};
+
+Cube.prototype.intersect = function (origin, ray) {
+ return Cube.intersect(origin, ray, this.getMinCorner(), this.getMaxCorner());
+};
+
+Cube.intersect = function (origin, ray, cubeMin, cubeMax) {
+ var tMin = cubeMin.subtract(origin).componentDivide(ray);
+ var tMax = cubeMax.subtract(origin).componentDivide(ray);
+ var t1 = Vector.min(tMin, tMax);
+ var t2 = Vector.max(tMin, tMax);
+ var tNear = t1.maxComponent();
+ var tFar = t2.minComponent();
+ if (tNear > 0 && tNear < tFar) {
+ return tNear;
+ }
+ return Number.MAX_VALUE;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class Light
+////////////////////////////////////////////////////////////////////////////////
+
+function Light() {
+ this.temporaryTranslation = Vector.create([0, 0, 0]);
+}
+
+Light.prototype.getGlobalCode = function () {
+ return 'uniform vec3 light;';
+};
+
+Light.prototype.getIntersectCode = function () {
+ return '';
+};
+
+Light.prototype.getShadowTestCode = function () {
+ return '';
+};
+
+Light.prototype.getMinimumIntersectCode = function () {
+ return '';
+};
+
+Light.prototype.getNormalCalculationCode = function () {
+ return '';
+};
+
+Light.prototype.setUniforms = function (renderer) {
+ renderer.uniforms.light = light.add(this.temporaryTranslation);
+};
+
+Light.clampPosition = function (position) {
+ for (var i = 0; i < position.elements.length; i++) {
+ position.elements[i] = Math.max(lightSize - 1, Math.min(1 - lightSize, position.elements[i]));
+ }
+};
+
+Light.prototype.temporaryTranslate = function (translation) {
+ var tempLight = light.add(translation);
+ Light.clampPosition(tempLight);
+ this.temporaryTranslation = tempLight.subtract(light);
+};
+
+Light.prototype.translate = function (translation) {
+ light = light.add(translation);
+ Light.clampPosition(light);
+};
+
+Light.prototype.getMinCorner = function () {
+ return light.add(this.temporaryTranslation).subtract(Vector.create([lightSize, lightSize, lightSize]));
+};
+
+Light.prototype.getMaxCorner = function () {
+ return light.add(this.temporaryTranslation).add(Vector.create([lightSize, lightSize, lightSize]));
+};
+
+Light.prototype.intersect = function (origin, ray) {
+ return Number.MAX_VALUE;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class PathTracer
+////////////////////////////////////////////////////////////////////////////////
+
+function PathTracer() {
+ var vertices = [
+ -1, -1,
+ -1, +1,
+ +1, -1,
+ +1, +1
+ ];
+
+ // create vertex buffer
+ this.vertexBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
+
+ // create framebuffer
+ this.framebuffer = gl.createFramebuffer();
+
+ // create textures
+ var type = gl.getExtension('OES_texture_float') ? gl.FLOAT : gl.UNSIGNED_BYTE;
+ this.textures = [];
+ for (var i = 0; i < 2; i++) {
+ this.textures.push(gl.createTexture());
+ gl.bindTexture(gl.TEXTURE_2D, this.textures[i]);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 512, 512, 0, gl.RGB, type, null);
+ }
+ gl.bindTexture(gl.TEXTURE_2D, null);
+
+ // create render shader
+ this.renderProgram = compileShader(renderVertexSource, renderFragmentSource);
+ this.renderVertexAttribute = gl.getAttribLocation(this.renderProgram, 'vertex');
+ gl.enableVertexAttribArray(this.renderVertexAttribute);
+
+ // objects and shader will be filled in when setObjects() is called
+ this.objects = [];
+ this.sampleCount = 0;
+ this.tracerProgram = null;
+}
+
+PathTracer.prototype.setObjects = function (objects) {
+ this.uniforms = {};
+ this.sampleCount = 0;
+ this.objects = objects;
+
+ // create tracer shader
+ if (this.tracerProgram != null) {
+ gl.deleteProgram(this.shaderProgram);
+ }
+ this.tracerProgram = compileShader(tracerVertexSource, makeTracerFragmentSource(objects));
+ this.tracerVertexAttribute = gl.getAttribLocation(this.tracerProgram, 'vertex');
+ gl.enableVertexAttribArray(this.tracerVertexAttribute);
+};
+
+PathTracer.prototype.update = function (matrix, timeSinceStart) {
+ // calculate uniforms
+ for (var i = 0; i < this.objects.length; i++) {
+ this.objects[i].setUniforms(this);
+ }
+ this.uniforms.eye = eye;
+ this.uniforms.glossiness = glossiness;
+ this.uniforms.ray00 = getEyeRay(matrix, -1, -1);
+ this.uniforms.ray01 = getEyeRay(matrix, -1, +1);
+ this.uniforms.ray10 = getEyeRay(matrix, +1, -1);
+ this.uniforms.ray11 = getEyeRay(matrix, +1, +1);
+ this.uniforms.timeSinceStart = timeSinceStart;
+ this.uniforms.textureWeight = this.sampleCount / (this.sampleCount + 1);
+
+ // set uniforms
+ gl.useProgram(this.tracerProgram);
+ setUniforms(this.tracerProgram, this.uniforms);
+
+ // render to texture
+ gl.useProgram(this.tracerProgram);
+ gl.bindTexture(gl.TEXTURE_2D, this.textures[0]);
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.textures[1], 0);
+ gl.vertexAttribPointer(this.tracerVertexAttribute, 2, gl.FLOAT, false, 0, 0);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
+
+ // ping pong textures
+ this.textures.reverse();
+ this.sampleCount++;
+};
+
+PathTracer.prototype.render = function () {
+ gl.useProgram(this.renderProgram);
+ gl.bindTexture(gl.TEXTURE_2D, this.textures[0]);
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
+ gl.vertexAttribPointer(this.renderVertexAttribute, 2, gl.FLOAT, false, 0, 0);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class Renderer
+////////////////////////////////////////////////////////////////////////////////
+
+function Renderer() {
+ var vertices = [
+ 0, 0, 0,
+ 1, 0, 0,
+ 0, 1, 0,
+ 1, 1, 0,
+ 0, 0, 1,
+ 1, 0, 1,
+ 0, 1, 1,
+ 1, 1, 1
+ ];
+ var indices = [
+ 0, 1, 1, 3, 3, 2, 2, 0,
+ 4, 5, 5, 7, 7, 6, 6, 4,
+ 0, 4, 1, 5, 2, 6, 3, 7
+ ];
+
+ // create vertex buffer
+ this.vertexBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
+
+ // create index buffer
+ this.indexBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
+
+ // create line shader
+ this.lineProgram = compileShader(lineVertexSource, lineFragmentSource);
+ this.vertexAttribute = gl.getAttribLocation(this.lineProgram, 'vertex');
+ gl.enableVertexAttribArray(this.vertexAttribute);
+
+ this.objects = [];
+ this.selectedObject = null;
+ this.pathTracer = new PathTracer();
+}
+
+Renderer.prototype.setObjects = function (objects) {
+ this.objects = objects;
+ this.selectedObject = null;
+ this.pathTracer.setObjects(objects);
+};
+
+Renderer.prototype.update = function (modelviewProjection, timeSinceStart) {
+ var jitter = Matrix.Translation(Vector.create([Math.random() * 2 - 1, Math.random() * 2 - 1, 0]).multiply(1 / 512));
+ var inverse = jitter.multiply(modelviewProjection).inverse();
+ this.modelviewProjection = modelviewProjection;
+ this.pathTracer.update(inverse, timeSinceStart);
+};
+
+Renderer.prototype.render = function () {
+ this.pathTracer.render();
+
+ if (this.selectedObject != null) {
+ gl.isEnabled(gl.DITHER);
+ gl.useProgram(this.lineProgram);
+ gl.bindTexture(gl.TEXTURE_2D, null);
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
+ gl.vertexAttribPointer(this.vertexAttribute, 3, gl.FLOAT, false, 0, 0);
+ setUniforms(this.lineProgram, {
+ cubeMin: this.selectedObject.getMinCorner(),
+ cubeMax: this.selectedObject.getMaxCorner(),
+ modelviewProjection: this.modelviewProjection
+ });
+ gl.drawElements(gl.LINES, 24, gl.UNSIGNED_SHORT, 0);
+ gl.enable(gl.DEPTH_TEST);
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class UI
+////////////////////////////////////////////////////////////////////////////////
+
+function UI() {
+ this.renderer = new Renderer();
+ this.moving = true;
+}
+
+UI.prototype.setObjects = function (objects) {
+ this.objects = objects;
+ this.objects.splice(0, 0, new Light());
+ this.renderer.setObjects(this.objects);
+};
+
+UI.prototype.update = function (timeSinceStart) {
+ this.modelview = makeLookAt(eye.elements[0], eye.elements[1], eye.elements[2], 0, 0, 0, 0, 1, 0);
+ this.projection = makePerspective(55, 1, 0.1, 100);
+ this.modelviewProjection = this.projection.multiply(this.modelview);
+ this.renderer.update(this.modelviewProjection, timeSinceStart);
+};
+
+UI.prototype.mouseDown = function (x, y) {
+ var t;
+ var origin = eye;
+ var ray = getEyeRay(this.modelviewProjection.inverse(), (x / 512) * 2 - 1, 1 - (y / 512) * 2);
+
+ // test the selection box first
+ if (this.renderer.selectedObject != null) {
+ var minBounds = this.renderer.selectedObject.getMinCorner();
+ var maxBounds = this.renderer.selectedObject.getMaxCorner();
+ t = Cube.intersect(origin, ray, minBounds, maxBounds);
+
+ if (t < Number.MAX_VALUE) {
+ var hit = origin.add(ray.multiply(t));
+
+ if (Math.abs(hit.elements[0] - minBounds.elements[0]) < 0.001) this.movementNormal = Vector.create([-1, 0, 0]);
+ else if (Math.abs(hit.elements[0] - maxBounds.elements[0]) < 0.001) this.movementNormal = Vector.create([+1, 0, 0]);
+ else if (Math.abs(hit.elements[1] - minBounds.elements[1]) < 0.001) this.movementNormal = Vector.create([0, -1, 0]);
+ else if (Math.abs(hit.elements[1] - maxBounds.elements[1]) < 0.001) this.movementNormal = Vector.create([0, +1, 0]);
+ else if (Math.abs(hit.elements[2] - minBounds.elements[2]) < 0.001) this.movementNormal = Vector.create([0, 0, -1]);
+ else this.movementNormal = Vector.create([0, 0, +1]);
+
+ this.movementDistance = this.movementNormal.dot(hit);
+ this.originalHit = hit;
+ this.moving = true;
+
+ return true;
+ }
+ }
+
+ t = Number.MAX_VALUE;
+ this.renderer.selectedObject = null;
+
+ for (var i = 0; i < this.objects.length; i++) {
+ var objectT = this.objects[i].intersect(origin, ray);
+ if (objectT < t) {
+ t = objectT;
+ this.renderer.selectedObject = this.objects[i];
+ }
+ }
+
+ return (t < Number.MAX_VALUE);
+};
+
+UI.prototype.mouseMove = function (x, y) {
+ if (this.moving) {
+ var origin = eye;
+ var ray = getEyeRay(this.modelviewProjection.inverse(), (x / 512) * 2 - 1, 1 - (y / 512) * 2);
+
+ var t = (this.movementDistance - this.movementNormal.dot(origin)) / this.movementNormal.dot(ray);
+ var hit = origin.add(ray.multiply(t));
+ this.renderer.selectedObject.temporaryTranslate(hit.subtract(this.originalHit));
+
+ // clear the sample buffer
+ this.renderer.pathTracer.sampleCount = 0;
+ }
+};
+
+UI.prototype.mouseUp = function (x, y) {
+ if (this.moving) {
+ var origin = eye;
+ var ray = getEyeRay(this.modelviewProjection.inverse(), (x / 512) * 2 - 1, 1 - (y / 512) * 2);
+
+ var t = (this.movementDistance - this.movementNormal.dot(origin)) / this.movementNormal.dot(ray);
+ var hit = origin.add(ray.multiply(t));
+ this.renderer.selectedObject.temporaryTranslate(Vector.create([0, 0, 0]));
+ this.renderer.selectedObject.translate(hit.subtract(this.originalHit));
+ this.moving = false;
+ }
+};
+
+UI.prototype.render = function () {
+ this.renderer.render();
+};
+
+UI.prototype.selectLight = function () {
+ this.renderer.selectedObject = this.objects[0];
+};
+
+UI.prototype.addSphere = function () {
+ this.objects.push(new Sphere(Vector.create([0, 0, 0]), 0.25, nextObjectId++));
+ this.renderer.setObjects(this.objects);
+};
+
+UI.prototype.addCube = function () {
+ this.objects.push(new Cube(Vector.create([-0.25, -0.25, -0.25]), Vector.create([0.25, 0.25, 0.25]), nextObjectId++));
+ this.renderer.setObjects(this.objects);
+};
+
+UI.prototype.deleteSelection = function () {
+ for (var i = 0; i < this.objects.length; i++) {
+ if (this.renderer.selectedObject == this.objects[i]) {
+ this.objects.splice(i, 1);
+ this.renderer.selectedObject = null;
+ this.renderer.setObjects(this.objects);
+ break;
+ }
+ }
+};
+
+UI.prototype.updateMaterial = function () {
+ var newMaterial = parseInt(document.getElementById('material').value, 10);
+ if (material != newMaterial) {
+ material = newMaterial;
+ this.renderer.setObjects(this.objects);
+ }
+};
+
+UI.prototype.updateEnvironment = function () {
+ var newEnvironment = parseInt(document.getElementById('environment').value, 10);
+ if (environment != newEnvironment) {
+ environment = newEnvironment;
+ this.renderer.setObjects(this.objects);
+ }
+};
+
+UI.prototype.updateGlossiness = function () {
+ var newGlossiness = parseFloat(document.getElementById('glossiness').value);
+ if (isNaN(newGlossiness)) newGlossiness = 0;
+ newGlossiness = Math.max(0, Math.min(1, newGlossiness));
+ if (material == MATERIAL_GLOSSY && glossiness != newGlossiness) {
+ this.renderer.pathTracer.sampleCount = 0;
+ }
+ glossiness = newGlossiness;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// main program
+////////////////////////////////////////////////////////////////////////////////
+
+var gl;
+var ui;
+var error;
+var canvas;
+var inputFocusCount = 0;
+
+var angleX = 0;
+var angleY = 0;
+var zoomZ = 2.5;
+var eye = Vector.create([0, 0, 0]);
+var light = Vector.create([0.1, 0.1, -0.16]);
+
+var nextObjectId = 0;
+
+var MATERIAL_DIFFUSE = 0;
+var MATERIAL_MIRROR = 1;
+var MATERIAL_GLOSSY = 2;
+var material = MATERIAL_DIFFUSE;
+var glossiness = 0.6;
+
+var YELLOW_BLUE_CORNELL_BOX = 0;
+var RED_GREEN_CORNELL_BOX = 1;
+var environment = YELLOW_BLUE_CORNELL_BOX;
+
+function tick(timeSinceStart) {
+ eye.elements[0] = zoomZ * Math.sin(angleY) * Math.cos(angleX);
+ eye.elements[1] = zoomZ * Math.sin(angleX);
+ eye.elements[2] = zoomZ * Math.cos(angleY) * Math.cos(angleX);
+
+ document.getElementById('glossiness-factor').style.display = (material == MATERIAL_GLOSSY) ? 'inline' : 'none';
+
+ ui.updateMaterial();
+ ui.updateGlossiness();
+ ui.updateEnvironment();
+ ui.update(timeSinceStart);
+ ui.render();
+}
+
+function makePotionBottle() {
+ var objects = [];
+
+ //stem
+ objects.push(new Cube(Vector.create([-0.45, -0.0, -0.05]), Vector.create([-0.35, -0.5, 0.05]), nextObjectId++));
+ //bottle
+ objects.push(new Sphere(Vector.create([-0.4, -0.6, 0]), 0.25, nextObjectId++));
+
+ //chest
+ objects.push(new Cube(Vector.create([0, -0.6, 0.0]), Vector.create([0.15, -0.8, 0.05]), nextObjectId++));
+ //left leg
+ objects.push(new Cube(Vector.create([0, -1, 0.0]), Vector.create([0.06, -0.8, 0.05]), nextObjectId++));
+ //right leg
+ objects.push(new Cube(Vector.create([0.15, -1, 0.0]), Vector.create([0.09, -0.8, 0.05]), nextObjectId++));
+ //left arm
+ objects.push(new Cube(Vector.create([0, -0.65, 0.0]), Vector.create([-0.06, -0.45, 0.05]), nextObjectId++));
+ //right arm
+ objects.push(new Cube(Vector.create([0.15, -0.6, 0.0]), Vector.create([0.21, -0.8, 0.05]), nextObjectId++));
+ //head
+ objects.push(new Cube(Vector.create([0.04, -0.6, 0.0]), Vector.create([0.13, -0.52, 0.05]), nextObjectId++));
+ //left horn
+ objects.push(new Cube(Vector.create([0.045, -0.52, 0.01]), Vector.create([0.06, -0.48, 0.04]), nextObjectId++));
+ //right horn
+ objects.push(new Cube(Vector.create([0.125, -0.52, 0.01]), Vector.create([0.110, -0.48, 0.04]), nextObjectId++));
+
+ return objects;
+}
+
+var XNEG = 0, XPOS = 1, YNEG = 2, YPOS = 3, ZNEG = 4, ZPOS = 5;
+
+function addRecursiveSpheresBranch(objects, center, radius, depth, dir) {
+ objects.push(new Sphere(center, radius, nextObjectId++));
+ if (depth--) {
+ if (dir != XNEG) addRecursiveSpheresBranch(objects, center.subtract(Vector.create([radius * 1.5, 0, 0])), radius / 2, depth, XPOS);
+ if (dir != XPOS) addRecursiveSpheresBranch(objects, center.add(Vector.create([radius * 1.5, 0, 0])), radius / 2, depth, XNEG);
+
+ if (dir != YNEG) addRecursiveSpheresBranch(objects, center.subtract(Vector.create([0, radius * 1.5, 0])), radius / 2, depth, YPOS);
+ if (dir != YPOS) addRecursiveSpheresBranch(objects, center.add(Vector.create([0, radius * 1.5, 0])), radius / 2, depth, YNEG);
+
+ if (dir != ZNEG) addRecursiveSpheresBranch(objects, center.subtract(Vector.create([0, 0, radius * 1.5])), radius / 2, depth, ZPOS);
+ if (dir != ZPOS) addRecursiveSpheresBranch(objects, center.add(Vector.create([0, 0, radius * 1.5])), radius / 2, depth, ZNEG);
+ }
+}
+
+function makeRecursiveSpheres() {
+ var objects = [];
+ addRecursiveSpheresBranch(objects, Vector.create([0, 0, 0]), 0.3, 2, -1);
+ return objects;
+}
+
+window.onload = function () {
+ gl = null;
+ error = document.getElementById('error');
+ canvas = document.getElementById('canvas');
+ try { gl = canvas.getContext('experimental-webgl'); } catch (e) { }
+
+ if (gl) {
+ error.innerHTML = 'Loading...';
+
+ // keep track of whether an <input> is focused or not (will be no only if inputFocusCount == 0)
+ var inputs = document.getElementsByTagName('input');
+ for (var i = 0; i < inputs.length; i++) {
+ inputs[i].onfocus = function () { inputFocusCount++; };
+ inputs[i].onblur = function () { inputFocusCount--; };
+ }
+
+ material = parseInt(document.getElementById('material').value, 10);
+ environment = parseInt(document.getElementById('environment').value, 10);
+ ui = new UI();
+ ui.setObjects(makePotionBottle());
+ var start = new Date();
+ error.style.zIndex = -1;
+ setInterval(function () { tick((new Date() - start) * 0.001); }, 1000 / 60);
+ } else {
+ error.innerHTML = 'Your browser does not support WebGL.<br>Please see <a href="http://www.khronos.org/webgl/wiki/Getting_a_WebGL_Implementation">Getting a WebGL Implementation</a>.';
+ }
+};
+
+function elementPos(element) {
+ var x = 0, y = 0;
+ while (element.offsetParent) {
+ x += element.offsetLeft;
+ y += element.offsetTop;
+ element = element.offsetParent;
+ }
+ return { x: x, y: y };
+}
+
+function eventPos(event) {
+ return {
+ x: event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,
+ y: event.clientY + document.body.scrollTop + document.documentElement.scrollTop
+ };
+}
+
+function canvasMousePos(event) {
+ var mousePos = eventPos(event);
+ var canvasPos = elementPos(canvas);
+ return {
+ x: mousePos.x - canvasPos.x,
+ y: mousePos.y - canvasPos.y
+ };
+}
+
+var mouseDown = false, oldX, oldY;
+
+document.onmousedown = function (event) {
+ var mouse = canvasMousePos(event);
+ oldX = mouse.x;
+ oldY = mouse.y;
+
+ if (mouse.x >= 0 && mouse.x < 512 && mouse.y >= 0 && mouse.y < 512) {
+ mouseDown = !ui.mouseDown(mouse.x, mouse.y);
+
+ // disable selection because dragging is used for rotating the camera and moving objects
+ return false;
+ }
+
+ return true;
+};
+
+document.onmousemove = function (event) {
+ var mouse = canvasMousePos(event);
+
+ if (mouseDown) {
+ // update the angles based on how far we moved since last time
+ angleY -= (mouse.x - oldX) * 0.01;
+ angleX += (mouse.y - oldY) * 0.01;
+
+ // don't go upside down
+ angleX = Math.max(angleX, -Math.PI / 2 + 0.01);
+ angleX = Math.min(angleX, Math.PI / 2 - 0.01);
+
+ // clear the sample buffer
+ ui.renderer.pathTracer.sampleCount = 0;
+
+ // remember this coordinate
+ oldX = mouse.x;
+ oldY = mouse.y;
+ } else {
+ var canvasPos = elementPos(canvas);
+ ui.mouseMove(mouse.x, mouse.y);
+ }
+};
+
+document.onmouseup = function (event) {
+ mouseDown = false;
+
+ var mouse = canvasMousePos(event);
+ ui.mouseUp(mouse.x, mouse.y);
+};
+
+document.onkeydown = function (event) {
+ // if there are no <input> elements focused
+ if (inputFocusCount == 0) {
+ // if backspace or delete was pressed
+ if (event.keyCode == 8 || event.keyCode == 46) {
+ ui.deleteSelection();
+
+ // don't let the backspace key go back a page
+ return false;
+ }
+ }
+};
diff --git a/demos/random-attractors/index.html b/demos/random-attractors/index.html
new file mode 100644
index 0000000..2dc0df9
--- /dev/null
+++ b/demos/random-attractors/index.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>s1nical - Random Attractors</title>
+ <script src="/demos/random-attractors/main.js"></script>
+ <style>
+ html, body {
+ margin: 0;
+ height: 100vh;
+ overflow: hidden;
+ }
+ canvas {
+ background: #000;
+ }
+
+ </style>
+ </head>
+ <body>
+ <canvas id="canvas"></canvas>
+ </body>
+</html> \ No newline at end of file
diff --git a/demos/random-attractors/main.js b/demos/random-attractors/main.js
new file mode 100644
index 0000000..5355c6e
--- /dev/null
+++ b/demos/random-attractors/main.js
@@ -0,0 +1,96 @@
+NUM_ATTRACTORS = 10;
+const canvas = document.getElementById("canvas");
+const ctx = canvas.getContext("2d");
+const { innerWidth, innerHeight } = window;
+const { random, floor, cos, sin } = Math;
+canvas.width = innerWidth;
+canvas.height = innerHeight;
+const w = innerWidth / 2;
+const h = innerHeight / 2;
+
+ctx.translate(w, h);
+ctx.globalCompositeOperation = "lighter";
+const range = n =>
+ Array(n)
+ .fill(0)
+ .map((_, i) => i);
+const randomInt = (s, e) => s + floor((e - s) * random());
+const drawParticle = ({ x, y, c }) => {
+ ctx.beginPath();
+ ctx.fillStyle = c;
+ ctx.fillRect(x, y, 0.5, 0.5);
+ ctx.closePath();
+};
+
+const attractors = range(NUM_ATTRACTORS).map(() => ({
+ x: randomInt(-w, w),
+ y: randomInt(-h, h),
+ g: randomInt(0, 30),
+ c: `rgba(${randomInt(0, 255)}, ${randomInt(0, 255)}, ${randomInt(
+ 0,
+ 255
+ )}, ${random()})`
+}));
+
+// https://codepen.io/ge1doot/pen/ooNvgx
+class Particle {
+ constructor() {
+ this.damp = 0.00006;
+ this.accel = 3200;
+ this.x = randomInt(-w, w);
+ this.y = randomInt(-h, h);
+ this.vx = this.accel * random();
+ this.vy = this.accel * random();
+ this.currentColor = "#fff";
+ }
+ draw() {
+ const { x, y, currentColor } = this;
+ drawParticle({ x, y, c: currentColor });
+ }
+ step() {
+ const { x, y } = this;
+
+ let color = 0;
+ let largestVal = 0;
+
+ attractors.map(a => {
+ const dx = a.x - x;
+ const dy = a.y - y;
+ const d2 = (dx * dx + dy * dy) / a.g;
+ if (d2 > 0.1) {
+ this.vx += this.accel * (dx / d2);
+ this.vy += this.accel * (dy / d2);
+ }
+ if (d2 > largestVal) {
+ largestVal = d2;
+ color = a.c;
+ }
+ });
+ this.x += this.vx;
+ this.y += this.vy;
+
+ this.vx *= this.damp;
+ this.vy *= this.damp;
+
+ this.currentColor = color;
+ this.draw();
+ }
+}
+
+const particles = range(8000).map(() => new Particle());
+const animate = () => {
+ particles.map(particle => {
+ particle.step();
+ });
+};
+
+let iter = 0;
+
+const update = () => {
+ animate();
+ iter += 1;
+ if (iter < 1500) {
+ requestAnimationFrame(update);
+ }
+};
+update();
diff --git a/dir/index.html b/dir/index.html
new file mode 100644
index 0000000..101107c
--- /dev/null
+++ b/dir/index.html
@@ -0,0 +1 @@
+<script>location.href = 'https://kyzer.co/directory/'</script> \ No newline at end of file
diff --git a/directory/.htaccess b/directory/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/directory/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/directory/games/browser-games/index.html b/directory/games/browser-games/index.html
new file mode 100644
index 0000000..0bca95b
--- /dev/null
+++ b/directory/games/browser-games/index.html
@@ -0,0 +1,354 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Browser Games</title>
+ <!-- Site metadata -->
+ <meta name="description" content="/kyzer.co/Games/Browser Games/ Directory Listing">
+ <meta property="og:description" content="/kyzer.co/Games/Browser Games/ Directory Listing">
+ <meta property="og:title" content="s1nical - Browser Games">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/directory/games/browser-games">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/directory/games/browser-games">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "/kyzer.co/Games/Browser Games/ Directory Listing",
+ "headline": "/kyzer.co/Games/Browser Games/ Directory Listing",
+ "url": "https://kyzer.co/directory/games/browser-games",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <link rel="stylesheet" href="/directory/main.css">
+</head>
+<body>
+
+ <div class="container">
+
+ <h1 class="title">/kyzer.co/Games/Browser Games/ Directory Listing</h1>
+ <table>
+ <tr>
+ <th valign="top">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[ICO]" width="24" height="24">
+ </svg>
+ </th>
+ <th>Name</th>
+ <th>Size</th>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/directory/games/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[PARENTDIR]" width="24"
+ height="24">
+ <title>Back</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/directory/games/">Parent Directory</a></td>
+ <td align="right"> - </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://superhotgame.com/play-prototype/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://superhotgame.com/play-prototype/">SUPERHOT</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.justbuild.lol/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.justbuild.lol/">JustBuild.LOL</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://1v1.lol/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://1v1.lol/">1v1.LOL</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://krunker.io/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://krunker.io/">Krunker</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://sites.google.com/site/unblockedgameswtf/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://sites.google.com/site/unblockedgameswtf/">Unblocked Games WTF</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://shellshock.io/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://shellshock.io/">Shell Shockers</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://strike.ngames.com/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://strike.ngames.com/">Global Strike</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.gameflare.com/online-game/cartoon-strike/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.gameflare.com/online-game/cartoon-strike/">Cartoon Strike</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://warbrokers.io/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://warbrokers.io/">War Brokers</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.darkorbit.com/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.darkorbit.com/">DarkOrbit Reloaded</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.kongregate.com/games/mike_id/doom-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.kongregate.com/games/mike_id/doom-1">DOOM</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.linerider.com/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.linerider.com/">Line Rider</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://geoguessr.com/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://geoguessr.com/">GeoGuessr</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://quickdraw.withgoogle.com/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://quickdraw.withgoogle.com/">Quick, Draw!</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="http://armorgames.com/street-skater-game/18047">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="http://armorgames.com/street-skater-game/18047">Street Skater</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="http://powerline.io/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="http://powerline.io/">powerline.io</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="http://wolf3d.atw.hu/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="http://wolf3d.atw.hu/">Wolfenstein 3-D</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.deadfrontier.com/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.deadfrontier.com/">Dead Frontier</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="http://www.nplay.com/BeGone/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="http://www.nplay.com/BeGone/">NPlay</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.freefalltournament.com/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.freefalltournament.com/">Freefall Tournament</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.drakensang.com/en">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.drakensang.com/en">Drakensang Online</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://warmerise.com/pages/RedvsBlue">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://warmerise.com/pages/RedvsBlue">Red vs Blue</a></td>
+ <td align="right">NULL</td>
+ </tr>
+</div>
+
+ <!-- Loading Animation -->
+ <!--
+ <div class="loader-wrapper">
+ <div class="loader">
+ <span class="">Label:</span>
+ <span class="ascii-spinner-1">|</span>
+ <span class="ascii-spinner-2">/</span>
+ <span class="ascii-spinner-3">--</span>
+ <span class="ascii-spinner-4">\</span>
+ </div>
+ </div>
+ -->
+</body>
+</html>
diff --git a/directory/games/index.html b/directory/games/index.html
new file mode 100644
index 0000000..ad2284d
--- /dev/null
+++ b/directory/games/index.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Games</title>
+ <!-- Site metadata -->
+ <meta name="description" content="/kyzer.co/Games/ Directory Listing">
+ <meta property="og:description" content="/kyzer.co/Games/ Directory Listing">
+ <meta property="og:title" content="s1nical - Games">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/directory/games">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/directory/games">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "/kyzer.co/Games/ Directory Listing",
+ "headline": "/kyzer.co/Games/ Directory Listing",
+ "url": "https://kyzer.co/directory/games",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <link rel="stylesheet" href="/directory/main.css">
+ <script>
+ $(document).ready(function () {
+ // $('.loader-wrapper').fadeOut("slow"); /*FadeOut after page loaded*/
+ console.log("You actually checked it out, enjoy!");
+ });
+ </script>
+</head>
+<body>
+
+ <div class="container">
+
+ <h1 class="title">/kyzer.co/Games/ Directory Listing</h1>
+ <table>
+ <tr>
+ <th valign="top">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[ICO]" width="24" height="24">
+ </svg>
+ </th>
+ <th>Name</th>
+ <th>Size</th>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/directory/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[PARENTDIR]" width="24"
+ height="24">
+ <title>Back</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/directory/">Parent Directory</a></td>
+ <td align="right"> - </td>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/dino/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/dino/">Dino</a></td>
+ <td align="right">1.8K</td>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/space-invaders/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/space-invaders/">Space Invaders</a></td>
+ <td align="right">11.5K</td>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/cars/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/cars/">Cars</a></td>
+ <td align="right">386.0K</td>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/directory/games/browser-games/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/directory/games/browser-games/">Browser Games Sub-Directory</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ </div>
+
+ <!-- Loading Animation -->
+ <!--
+ <div class="loader-wrapper">
+ <div class="loader">
+ <span class="">Label:</span>
+ <span class="ascii-spinner-1">|</span>
+ <span class="ascii-spinner-2">/</span>
+ <span class="ascii-spinner-3">--</span>
+ <span class="ascii-spinner-4">\</span>
+ </div>
+ </div>
+ -->
+</body>
+</html>
diff --git a/directory/index.html b/directory/index.html
new file mode 100644
index 0000000..1ee0346
--- /dev/null
+++ b/directory/index.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Directory</title>
+ <!-- Site metadata -->
+ <meta name="description" content="/kyzer.co/ Directory Listing">
+ <meta property="og:description" content="/kyzer.co/ Directory Listing">
+ <meta property="og:title" content="s1nical - Directory">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/directory">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/directory">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "/kyzer.co/ Directory Listing",
+ "headline": "/kyzer.co/ Directory Listing",
+ "url": "https://kyzer.co/directory",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <link rel="stylesheet" href="/directory/main.css">
+ <script>
+ $(document).ready(function () {
+ // $('.loader-wrapper').fadeOut("slow"); /*FadeOut after page loaded*/
+ console.log("Thanks for using my directory, check out the games!");
+ });
+ </script>
+</head>
+<body>
+ <div class="container">
+
+ <h1 class="title">/kyzer.co/ Directory Listing</h1>
+ <table>
+ <tr>
+ <th valign="top">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[ICO]" width="24" height="24">
+ </svg>
+ </th>
+ <th>Name</th>
+ <th>Size</th>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[PARENTDIR]" width="24"
+ height="24">
+ <title>Back</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/">Parent Directory</a></td>
+ <td align="right"> - </td>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/directory/games/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Game</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/directory/games/">Games/</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ <tr>
+ <td valign="top"><a href="/directory/tools/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24" height="24">
+ <title>Tools</title>
+
+ </svg>
+ </a></td>
+ <td><a href="/directory/tools/">Tools/</a></td>
+ <td align="right">NULL</td>
+ </tr>
+ </div>
+
+ <!-- Loading Animation -->
+ <!--
+ <div class="loader-wrapper">
+ <div class="loader">
+ <span class="">Label:</span>
+ <span class="ascii-spinner-1">|</span>
+ <span class="ascii-spinner-2">/</span>
+ <span class="ascii-spinner-3">--</span>
+ <span class="ascii-spinner-4">\</span>
+ </div>
+ </div>
+ -->
+</body>
+</html>
diff --git a/directory/main.css b/directory/main.css
new file mode 100644
index 0000000..2c869f7
--- /dev/null
+++ b/directory/main.css
@@ -0,0 +1,479 @@
+table {
+ margin: 0 auto;
+}
+
+.title {
+ text-align: center
+}
+
+/* LOADING ANIMATION */
+/*
+.loader-wrapper {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ background: #fdfdfd;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ font-size: 18px;
+}
+
+.loader {
+ width: 100px;
+ height: 100px;
+ display: inline-table;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ border-spacing: 0.3em;
+}
+
+.ascii-spinner-1 {
+ opacity: 0;
+ position: absolute;
+ margin-left: 65px;
+ margin-right: auto;
+ left: 0;
+ right: 0;
+ color: #999;
+ animation: loading-1 800ms ease-in infinite;
+ -webkit-animation: loading-1 800ms ease-in infinite;
+ -moz-animation: loading-1 800ms ease-in infinite;
+ -o-animation: loading-1 800ms ease-in infinite;
+}
+
+.ascii-spinner-2 {
+ opacity: 0;
+ position: absolute;
+ margin-left: 65px;
+ margin-right: auto;
+ left: 0;
+ right: 0;
+ color: #999;
+ -webkit-animation: loading-2 800ms ease-in infinite;
+ -moz-animation: loading-2 800ms ease-in infinite;
+ -o-animation: loading-2 800ms ease-in infinite;
+ animation: loading-2 800ms ease-in infinite;
+}
+
+.ascii-spinner-3 {
+ opacity: 0;
+ position: absolute;
+ margin-left: 65px;
+ margin-right: auto;
+ left: 0;
+ right: 0;
+ color: #999;
+ -webkit-animation: loading-3 800ms ease-in infinite;
+ -moz-animation: loading-3 800ms ease-in infinite;
+ -o-animation: loading-3 800ms ease-in infinite;
+ animation: loading-3 800ms ease-in infinite;
+}
+
+.ascii-spinner-4 {
+ opacity: 0;
+ position: absolute;
+ margin-left: 65px;
+ margin-right: auto;
+ left: 0;
+ right: 0;
+ color: #999;
+ -webkit-animation: loading-4 800ms ease-in infinite;
+ -moz-animation: loading-4 800ms ease-in infinite;
+ -o-animation: loading-4 800ms ease-in infinite;
+ animation: loading-4 800ms ease-in infinite;
+}
+
+@-webkit-keyframes loading-1 {
+ 0% {
+ opacity: 0;
+ }
+
+ 1% {
+ opacity: 1;
+ }
+
+ 24% {
+ opacity: 1;
+ }
+
+ 25% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-moz-keyframes loading-1 {
+ 0% {
+ opacity: 0;
+ }
+
+ 1% {
+ opacity: 1;
+ }
+
+ 24% {
+ opacity: 1;
+ }
+
+ 25% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-o-keyframes loading-1 {
+ 0% {
+ opacity: 0;
+ }
+
+ 1% {
+ opacity: 1;
+ }
+
+ 24% {
+ opacity: 1;
+ }
+
+ 25% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes loading-1 {
+ 0% {
+ opacity: 0;
+ }
+
+ 1% {
+ opacity: 1;
+ }
+
+ 24% {
+ opacity: 1;
+ }
+
+ 25% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes loading-2 {
+ 0% {
+ opacity: 0;
+ }
+
+ 24% {
+ opacity: 0;
+ }
+
+ 25% {
+ opacity: 1;
+ }
+
+ 49% {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-moz-keyframes loading-2 {
+ 0% {
+ opacity: 0;
+ }
+
+ 24% {
+ opacity: 0;
+ }
+
+ 25% {
+ opacity: 1;
+ }
+
+ 49% {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-o-keyframes loading-2 {
+ 0% {
+ opacity: 0;
+ }
+
+ 24% {
+ opacity: 0;
+ }
+
+ 25% {
+ opacity: 1;
+ }
+
+ 49% {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes loading-2 {
+ 0% {
+ opacity: 0;
+ }
+
+ 24% {
+ opacity: 0;
+ }
+
+ 25% {
+ opacity: 1;
+ }
+
+ 49% {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes loading-3 {
+ 0% {
+ opacity: 0;
+ }
+
+ 49% {
+ opacity: 0;
+ }
+
+ 50% {
+ opacity: 1;
+ }
+
+ 74% {
+ opacity: 1;
+ }
+
+ 75% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-moz-keyframes loading-3 {
+ 0% {
+ opacity: 0;
+ }
+
+ 49% {
+ opacity: 0;
+ }
+
+ 50% {
+ opacity: 1;
+ }
+
+ 74% {
+ opacity: 1;
+ }
+
+ 75% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-o-keyframes loading-3 {
+ 0% {
+ opacity: 0;
+ }
+
+ 49% {
+ opacity: 0;
+ }
+
+ 50% {
+ opacity: 1;
+ }
+
+ 74% {
+ opacity: 1;
+ }
+
+ 75% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes loading-3 {
+ 0% {
+ opacity: 0;
+ }
+
+ 49% {
+ opacity: 0;
+ }
+
+ 50% {
+ opacity: 1;
+ }
+
+ 74% {
+ opacity: 1;
+ }
+
+ 75% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes loading-4 {
+ 0% {
+ opacity: 0;
+ }
+
+ 74% {
+ opacity: 0;
+ }
+
+ 75% {
+ opacity: 1;
+ }
+
+ 99% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-moz-keyframes loading-4 {
+ 0% {
+ opacity: 0;
+ }
+
+ 74% {
+ opacity: 0;
+ }
+
+ 75% {
+ opacity: 1;
+ }
+
+ 99% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-o-keyframes loading-4 {
+ 0% {
+ opacity: 0;
+ }
+
+ 74% {
+ opacity: 0;
+ }
+
+ 75% {
+ opacity: 1;
+ }
+
+ 99% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes loading-4 {
+ 0% {
+ opacity: 0;
+ }
+
+ 74% {
+ opacity: 0;
+ }
+
+ 75% {
+ opacity: 1;
+ }
+
+ 99% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+*/ \ No newline at end of file
diff --git a/directory/tools/assets/SinAccessV.1.zip b/directory/tools/assets/SinAccessV.1.zip
new file mode 100644
index 0000000..53e68a1
--- /dev/null
+++ b/directory/tools/assets/SinAccessV.1.zip
Binary files differ
diff --git a/directory/tools/index.html b/directory/tools/index.html
new file mode 100644
index 0000000..159630c
--- /dev/null
+++ b/directory/tools/index.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Tools</title>
+ <!-- Site metadata -->
+ <meta name="description" content="/kyzer.co/Tools/ Directory Listing">
+ <meta property="og:description" content="/kyzer.co/Tools/ Directory Listing">
+ <meta property="og:title" content="s1nical - Tools">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/directory/tools">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/directory/tools">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "/kyzer.co/Tools/ Directory Listing",
+ "headline": "/kyzer.co/Tools/ Directory Listing",
+ "url": "https://kyzer.co/directory/tools",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <link rel="stylesheet" href="/directory/main.css">
+</head>
+
+ <body>
+
+ <script>
+ function myFunction() {
+ /* Get the text field */
+ var copyText = document.getElementById("copyThis");
+
+ /* Select the text field */
+ copyText.select();
+ copyText.setSelectionRange(0, 99999); /*For mobile devices*/
+
+ /* Copy the text inside the text field */
+ document.execCommand("var a=true;while(a){alert(a);}");
+
+ /* Alert the copied text */
+ alert("Copied the text: " + copyText.value);
+ }
+ </script>
+
+ <div class="container">
+
+ <h1 class="title">/kyzer.co/Tools/ Directory Listing</h1>
+ <table>
+ <tr>
+ <th valign="top">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[ICO]" width="24" height="24">
+ </svg>
+ </th>
+ <th>Name</th>
+ <th>Size</th>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/directory/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[PARENTDIR]" width="24"
+ height="24">
+ <title>Back</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/directory/">Parent Directory</a></td>
+ <td align="right"> - </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/input-lag/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/input-lag/">Input Lag</a></td>
+ <td align="right">2.8K</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/path-tracer/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/path-tracer/">Path Tracer</a></td>
+ <td align="right">104K</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/ip-detection/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/ip-detection/">IP Detection</a></td>
+ <td align="right">4K</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/light-fluid-simulation/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/light-fluid-simulation/">Light Fluid Simulation</a></td>
+ <td align="right">10K</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/pc-radio-via-ip/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/pc-radio-via-ip/">PC Radio via IP</a></td>
+ <td align="right">44K</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/keycodes/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/keycodes/">Keycodes</a></td>
+ <td align="right">NaN</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/aes/">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/aes/">Fortnite AES Key</a></td>
+ <td align="right">NaN</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="/directory/tools/assets/SinAccessV.1.zip">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="/directory/tools/assets/SinAccessV.1.zip">SinAccessV.1</a></td>
+ <td align="right">NaN</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <a href="https://www.my-proxy.com/?__c=1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" alt="[SND]" width="24"
+ height="24">
+ <title>Demo</title>
+
+ </svg>
+ </a>
+ </td>
+ <td><a href="https://www.my-proxy.com/?__c=1">Usefull Web Proxy</a></td>
+ <td align="right">NaN</td>
+ </tr>
+</div>
+
+ <!-- Loading Animation -->
+ <!--
+ <div class="loader-wrapper">
+ <div class="loader">
+ <span class="">Label:</span>
+ <span class="ascii-spinner-1">|</span>
+ <span class="ascii-spinner-2">/</span>
+ <span class="ascii-spinner-3">--</span>
+ <span class="ascii-spinner-4">\</span>
+ </div>
+ </div>
+ -->
+ </body>
+
+</html>
diff --git a/discord/.htaccess b/discord/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/discord/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/discord/bots/uwufier-legacy/assets/audio-legacy.mp3 b/discord/bots/uwufier-legacy/assets/audio-legacy.mp3
new file mode 100644
index 0000000..c5d487e
--- /dev/null
+++ b/discord/bots/uwufier-legacy/assets/audio-legacy.mp3
Binary files differ
diff --git a/discord/bots/uwufier-legacy/assets/audio.mp3 b/discord/bots/uwufier-legacy/assets/audio.mp3
new file mode 100644
index 0000000..5d6fe0c
--- /dev/null
+++ b/discord/bots/uwufier-legacy/assets/audio.mp3
Binary files differ
diff --git a/discord/bots/uwufier-legacy/assets/favi.jpg b/discord/bots/uwufier-legacy/assets/favi.jpg
new file mode 100644
index 0000000..ef4ed8a
--- /dev/null
+++ b/discord/bots/uwufier-legacy/assets/favi.jpg
Binary files differ
diff --git a/discord/bots/uwufier-legacy/index.php b/discord/bots/uwufier-legacy/index.php
new file mode 100644
index 0000000..ab07ec6
--- /dev/null
+++ b/discord/bots/uwufier-legacy/index.php
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>The Uwufier Bot</title>
+ <link href="/discord/uwufier/assets/favi.jpg" rel="icon" type="image/jpg">
+ <!-- <link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon"> -->
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/discord/psycho/css/main.css">
+ <link rel="stylesheet" href="/css/no-text-highlighting.css">
+ <!-- External Libraries -->
+ <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
+ <!-- Invisible Script -->
+ <script src="/js/hide-context-menu.js"></script>
+ <script src="/discord/psycho/js/main.js"></script>
+ <script>
+ var space = " ";
+ var speed = "120";
+ var pos = 0;
+ var msg = "The Uwufier Bot | 🖤 | ";
+
+ function Scroll() {
+ document.title = msg.substring(pos, msg.length) + space + msg.substring(0, pos);
+ pos++;
+ if (pos > msg.length) pos = 0;
+ window.setTimeout("Scroll()", speed);
+ }
+ Scroll();
+ </script>
+ </head>
+
+ <body>
+ <!-- Visable Script -->
+
+ <!--<style>
+ html {
+ background: url(/ss-logger/assets/0.jpg) no-repeat center center fixed;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ -o-background-size: cover;
+ background-size: cover;
+ }
+ </style>-->
+
+ <embed src="/discord/uwufier/assets/audio.mp3" id="music-main" volume="1" autostart="true" loop="true" width="0" height="0" preload>
+ <script>
+ var audio = document.currentScript.parentElement;
+ audio.volume = 0.333;
+ </script>
+ </embed>
+ <video playsinline autoplay loop muted id="vid">
+ <source src="https://maldrama.tk/aZ19L_XmzNo_1080p.mp4" type="video/mp4"></source>
+ <script>
+ var video = document.currentScript.parentElement;
+ video.volume = 0.333;
+ </script>
+ </video>
+
+ <div class="main">
+ <div class="txt">
+ <a id="bld" onclick="location.reload();" style="font-weight: 700; font-size: 40px;" href="#">The Uwufier Bot</a>
+
+ <div class="light" style="font-weight: 500;">
+ <a href="https://discordapp.com/api/oauth2/authorize?client_id=699473263998271489&permissions=8&scope=bot">/invite</a><br>
+ <a href="https://top.gg/bot/699473263998271489">/top.gg page</a><br>
+ </div>
+ </div>
+
+ </div>
+ <p style="position: absolute; top: -5px; left: 5px; font-size: 10px; color: white; font-family: Arial">if browser does not support the audio element, please click The Uwufier Bot or <a onclick="location.reload();" href="#"><u>here</u></a><p>
+
+ </body>
+
+</html>
diff --git a/discord/bots/uwufier/.htaccess b/discord/bots/uwufier/.htaccess
new file mode 100644
index 0000000..ea98aea
--- /dev/null
+++ b/discord/bots/uwufier/.htaccess
@@ -0,0 +1,9 @@
+# Error pages
+ErrorDocument 400 /discord/bots/uwufier/404.html
+ErrorDocument 401 /discord/bots/uwufier/404.html
+ErrorDocument 403 /discord/bots/uwufier/404.html
+ErrorDocument 404 /discord/bots/uwufier/404.html
+
+ErrorDocument 500 /discord/bots/uwufier/404.html
+
+Options -Indexes \ No newline at end of file
diff --git a/discord/bots/uwufier/404.html b/discord/bots/uwufier/404.html
new file mode 100644
index 0000000..e673778
--- /dev/null
+++ b/discord/bots/uwufier/404.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/bootstrap.min.css">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/main.css">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/now-ui-kit.css">
+ <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,600,700,800&display=swap" rel="stylesheet">
+ <title>Uwufier - 404</title>
+ <script src="https://code.jquery.com/jquery-3.5.0.min.js"
+ integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
+ <script src="/discord/bots/uwufier/js/main.js"></script>
+ <link rel="shortcut icon" href="/discord/bots/uwufier/favicon.png" type="image/png">
+ <style>
+ .heading {
+ padding: 262px 50px !important;
+ }
+ </style>
+ <script src="https://cdn.jsdelivr.net/npm/@widgetbot/crate@3" async="" defer="">
+ new Crate({
+ server: '704032355987488791',
+ channel: '704032357170020463',
+ shard: 'https://e.widgetbot.io'
+ })
+ </script>
+ </head>
+ <body>
+ <nav class="navbar navbar-expand-lg bg-transparent hideme">
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <ul class="navbar-nav ml-auto">
+ <li class="nav-item">
+ <span class="nav-item" id="uwufier-status"></span>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/">Home</a>
+ </li>
+ <!--<li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/about/">About</a>
+ </li>-->
+ <li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/features/">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="https://top.gg/bot/699473263998271489">top.gg</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ Documentation
+ </a>
+ <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+ <p class="dropdown-item-text">Coming soon!</p>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/commands/">Commands</a>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/tutorials/">Tutorials</a>
+ <a class="dropdown-item" href="https://discord.gg/DVwXUwx">Support Server</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/server-settings/">Server settings</a>
+ </div>
+ </li>
+ <li class="nav-item disabled">
+ <a href="https://kyzer.co/discord/bots/uwufier/login/" class="nav-link disabled">Login</a>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item">
+ <a href="https://kyzer.co" class="nav-link">More stuff from Sin</a>
+ </li>
+ </ul>
+ <!-- <button class="btn btn-outline-secondary my-2 my-sm-0 btn-round btn-sm">LOGIN</button> -->
+ </div>
+ </nav>
+ <div class="heading text-center hideme">
+ <h1 class="display-5 title">Woops, Error 404...</h1>
+ <p class="subtitle">It seems as we couldn't find the page you were looking for.<br />If you think this was our fault, you can report that <a href="mailto:[email protected]">here</a>.</p>
+ <a class="btn btn-primary btn-lg" href="/discord/bots/uwufier/" role="button">Back to home</a>
+ <a class="btn btn-secondary btn-lg" href="mailto:[email protected]" role="button">Report an error</a>
+ <br /><br /><br /><br /><br /><br />
+ </div>
+ <!-- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+ <script src="/discord/bots/uwufier/js/now-ui-kit.min.js"></script>
+ </body>
+</html>
diff --git a/discord/bots/uwufier/assets/json/pun.json b/discord/bots/uwufier/assets/json/pun.json
new file mode 100644
index 0000000..d0f7a89
--- /dev/null
+++ b/discord/bots/uwufier/assets/json/pun.json
@@ -0,0 +1,237 @@
+[
+ "What do you call a fake noodle? An Impasta.",
+ "I would avoid the sushi if I was you. It's a little fishy.",
+ "Want to hear a joke about paper? Nevermind it's tearable.",
+ "Why did the cookie cry? Because his father was a wafer so long!",
+ "I used to work in a shoe recycling shop. It was sole destroying.",
+ "What do you call a belt with a watch on it? A waist of time.",
+ "How do you organize an outer space party? You planet.",
+ "I went to a seafood disco last week... and pulled a mussel.",
+ "Do you know where you can get chicken broth in bulk? The stock market.",
+ "I cut my finger chopping cheese, but I think that I may have greater problems.",
+ "My cat was just sick on the carpet, I don't think it's feline well.",
+ "Why did the octopus beat the shark in a fight? Because it was well armed.",
+ "How much does a hipster weigh? An instagram.",
+ "What did daddy spider say to baby spider? You spend too much time on the web.",
+ "Atheism is a non-prophet organisation.",
+ "There's a new type of broom out, it's sweeping the nation.",
+ "What cheese can never be yours? Nacho cheese.",
+ "What did the Buffalo say to his little boy when he dropped him off at school? Bison.",
+ "Have you ever heard of a music group called Cellophane? They mostly wrap.",
+ "Why does Superman gets invited to dinners? Because he is a Supperhero.",
+ "How was Rome split in two? With a pair of Ceasars.",
+ "The shovel was a ground breaking invention.",
+ "A scarecrow says, \"This job isn't for everyone, but hay, it's in my jeans.\"",
+ "A Buddhist walks up to a hot dog stand and says, \"Make me one with everything.\"",
+ "Did you hear about the guy who lost the left side of his body? He's alright now.",
+ "What do you call a girl with one leg that's shorter than the other? Ilene.",
+ "I did a theatrical performance on puns. It was a play on words.",
+ "What do you do with a dead chemist? You barium.",
+ "I bet the person who created the door knocker won a Nobel prize.",
+ "Towels can't tell jokes. They have a dry sense of humor.",
+ "Two birds are sitting on a perch and one says \"Do you smell fish?\"",
+ "Do you know sign language? You should learn it, it's pretty handy.",
+ "What do you call a beautiful pumpkin? GOURDgeous.",
+ "Why did one banana spy on the other? Because she was appealing.",
+ "What do you call a cow with no legs? Ground beef.",
+ "What do you call a cow with two legs? Lean beef.",
+ "What do you call a cow with all of its legs? High steaks.",
+ "A cross eyed teacher couldn't control his pupils.",
+ "After the accident, the juggler didn't have the balls to do it.",
+ "I used to be afraid of hurdles, but I got over it.",
+ "To write with a broken pencil is pointless.",
+ "I read a book on anti-gravity. I couldn't put it down.",
+ "I couldn't remember how to throw a boomerang but it came back to me.",
+ "What should you do if you are cold? Stand in the corner. It's 90 degrees.",
+ "How does Moses make coffee? Hebrews it.",
+ "The energizer bunny went to jail. He was charged with battery.",
+ "What did the alien say to the pitcher of water? Take me to your liter.",
+ "What happens when you eat too many spaghettiOs? You have a vowel movement.",
+ "The soldier who survived mustard gas and pepper spray was a seasoned veteran.",
+ "Sausage puns are the wurst.",
+ "What do you call a bear with no teeth? A gummy bear.",
+ "Why shouldn't you trust atoms? They make up everything.",
+ "What's it called when you have too many aliens? Extraterrestrials.",
+ "Want to hear a pizza joke? Nevermind, it's too cheesy.",
+ "What do cows tell each other at bedtime? Dairy tales.",
+ "Why can't you take inventory in Afghanistan? Because of the tally ban.",
+ "Why didn't the lion win the race? Because he was racing a cheetah.",
+ "What happens to nitrogen when the sun comes up? It becomes daytrogen.",
+ "What's it called when you put a cow in an elevator? Raising the steaks.",
+ "What's america's favorite soda? Mini soda.",
+ "Why did the tomato turn red? Because it saw the salad dressing.",
+ "What kind of car does a sheep drive? Their SuBAHHru.",
+ "What do you call a french pig? Porque.",
+ "What do you call a line of rabbits marching backwards? A receding hairline.",
+ "Why don't vampires go to barbecues? They don't like steak.",
+ "How do trees access the internet? They log on.",
+ "Why should you never trust a train? They have loco motives.",
+ "Is your refrigerator running? Better go catch it.",
+ "The future,the present and the past walked into a bar.Things got a little tense.",
+ "I saw an ad for burial plots, and thought to myself this is the last thing I need.",
+ "I just found out I'm colorblind. The diagnosis came completely out of the purple.",
+ "I'd tell you a chemistry joke but I know I wouldn't get a reaction.",
+ "Have you ever tried to eat a clock? It's very time consuming.",
+ "I wondered why the baseball was getting bigger. Then it hit me.",
+ "Read enough of our funny puns, and you'll be punstoppable.",
+ "Yesterday a clown held the door for me. It was a nice jester.",
+ "I used to go fishing with Skrillex but he kept dropping the bass.",
+ "The wedding was so emotional even the cake was in tiers.",
+ "What does a house wear? A dress.",
+ "Why can't bicycles stand up on their own? Since they are 2 tired.",
+ "I owe a lot to the sidewalks. They've been keeping me off the streets for years.",
+ "Imagine if alarm clocks hit you back in the morning.It would be truly alarming.",
+ "Why is a skeleton a bad liar? You can see right through it.",
+ "What do you receive when you ask a lemon for help? Lemonaid.",
+ "A man sued an airline company after it lost his luggage. Sadly, he lost his case.",
+ "What does a dog say when he sits down on a piece of sandpaper? Ruff!",
+ "What do you call crystal clear urine? 1080pee.",
+ "At my boxing club there is only one punch bag. I hate waiting for the punch line!",
+ "An untalented gymast walks into a bar.",
+ "Einstein developed a theory about space, and it was about time too.",
+ "I was accused of being a plagiarist, their word not mine.",
+ "My friends say they don't like skeleton puns. I should put more backbone into them.",
+ "Let me FILL you in on my trip to the dentist.",
+ "Why does the singer of Cheap Thrills not want us to Sia?",
+ "Traveling on a flying carpet is a rugged experience.",
+ "Cartoonist found dead in home. Details are sketchy.",
+ "The old woman who lived in a shoe wasn't the sole owner,there were strings attached.",
+ "Did you hear about the crime in the parking garage? It was wrong on so many levels.",
+ "My new diet consists of aircraft, its a bit plane.",
+ "Have you ever tried to milk a cow which has been cut in half? Udder madness.",
+ "Why are there fences on graveyards? Because people are dying to get in.",
+ "Why do trees have so many friends? They branch out.",
+ "Models of dragons are not to scale.",
+ "Never discuss infinity with a mathematician, they can go on about it forever.",
+ "Why don't some couples go to the gym? Because some relationships don't work out.",
+ "Don't trust people that do acupuncture, they're back stabbers.",
+ "A persistent banker wouldn't stop hitting on me so I asked him to leave me a loan.",
+ "I ordered a book of puns last week, but i didn't get it.",
+ "People say i look better without glasses but i just can't see it.",
+ "Don't judge a meal by the look of the first course. It's very souperficial.",
+ "I heard Donald Trump is going to ban shredded cheese, and make America grate again.",
+ "I relish the fact that you've mustard the strength to ketchup to me.",
+ "What do you call a young musician? A minor.",
+ "Police were called to a daycare yesterday, where a 2-year-old was resisting a rest.",
+ "If artists wear sketchers do linguists wear converse?",
+ "I changed my iPod name to Titanic. It's syncing now.",
+ "Jill broke her finger today, but on the other hand she was completely fine.",
+ "I smeared some ketchup all over my eyes once. It was a bad idea in Heinz- sight.",
+ "I flipped a coin over an issue the other day, it was quite the toss-up.",
+ "I got hit in the head with a can of soda? Luckily it was a soft drink.",
+ "I heard that the post office was a male dominated industry.",
+ "Why isn't suntanning an Olympic sport? Because the best you can ever get is bronze.",
+ "What do you mean June is over? Julying.",
+ "Why is Kylo Ren so angry? Beause he's always Ben Solo.",
+ "These reversing cameras are great. Since I got one I haven't looked back.",
+ "The candle quit his job because he felt burned out.",
+ "Our maintenance guy lost his legs on the job, now he's just a handyman.",
+ "Going to bed with music on gave him sound sleep.",
+ "A magic tractor drove down the road and turned into a field!",
+ "I met some aliens from outer space. They were pretty down to earth.",
+ "The plane flight brought my acrophobia to new heights.",
+ "My phone has to wear glasses ever since it lost its contacts.",
+ "I, for one, like Roman numerals.",
+ "How do mountains see? They peak.",
+ "The show was called Spongebob Squarepants but everyone knows the star was Patrick.",
+ "This is not alcohol, water you thinking?!",
+ "Novice pirates make terrible singers because they can't hit the high seas.",
+ "I told my friend she drew her eyebrows too high. She seemed surprised.",
+ "The earth's rotation really makes my day.",
+ "If I buy a bigger bed will I have more or less bedroom?",
+ "Two peanuts were walking in a tough neighborhood and one of them was a-salted.",
+ "Two ropes were walking in a tough neighborhood and one of them was a-frayed.",
+ "What kind of shoes do ninjas wear? Sneakers.",
+ "I got a master's degree in being ignored; no one seems to care.",
+ "After eating the ship, the sea monster said, I can't believe I ate the hull thing.",
+ "Smaller babies may be delivered by stork but the heavier ones need a crane.",
+ "A bartender broke up with her boyfriend, but he kept asking her for another shot.",
+ "I had a pun about insanity but then I lost it.",
+ "He couldn't work out how to fix the washing machine so he threw in the towel.",
+ "Why does the man want to buy nine rackets? Cause tennis too many.",
+ "Why don't cannibals eat clowns? Because they taste funny.",
+ "If I got paid in lots of Pennes I would make loads of pasta.",
+ "I thought I saw a spider on my laptop, but my friend said it was just a bug.",
+ "A doctor broke his leg while auditioning for a play.Luckily he still made the cast.",
+ "The tale of the haunted refrigerator was chilling.",
+ "Why are frogs so happy? They eat whatever bugs them.",
+ "If you wear cowboy clothes are you ranch dressing?",
+ "I was addicted to the hokey pokey but I turned myself around.",
+ "Simba, you're falling behind. I must ask you to Mufasa.",
+ "I bought a wooden whistle but it wooden whistle.",
+ "The bomb didn't want to go off. So it refused.",
+ "The sore mummy needed a Cairo-practor",
+ "I feel sorry for shopping carts. They're always getting pushed around.",
+ "The display of still-life art was not at all moving!",
+ "On Halloween October is nearly Octover.",
+ "Pig puns are so boaring.",
+ "Why couldn't the dead car drive into the cluttered garage? Lack of vroom.",
+ "What do you call Samsung's security guards? Guardians of the Galaxy.",
+ "What does Superman have in his drink? Just ice.",
+ "How does a penguin build it's house? Igloos it together.",
+ "Time flies like an arrow. Fruit flies like a banana.",
+ "The safe was invented by a cop and a robber. It was quite a combination.",
+ "What do you do when balloons are hurt? You helium.",
+ "One hat says to the other, \"You stay here, I'll go on a head.\"",
+ "How many tickles does it take to make an octopus laugh? Ten tickles.",
+ "When does a farmer dance? When he drops the beet.",
+ "When the scientist wanted to clone a deer, he bought a doe it yourself kit.",
+ "If people ask how many puns I made in Germany I reply, \"nein\"",
+ "Did you hear about the invention of the white board? It was remarkable.",
+ "If Donald Trump becomes president, America is going toupee.",
+ "Can February March? No, but April May.",
+ "I hate Russian Dolls, they are so full of themselves.",
+ "What do you do to an open wardrobe? You closet.",
+ "The magazine about ceiling fans went out of business due to low circulation.",
+ "So what if I don't know what apocalypse means? It's not the end of the world!",
+ "Some aquatic mammals at the zoo escaped. It was otter chaos.",
+ "A backwards poem writes inverse.",
+ "Getting the ability to fly would be so uplifting.",
+ "I asked my friend, Nick, if he had 5 cents I could borrow. But he was Nicholas.",
+ "The soundtrack for Blackfish was orcastrated.",
+ "Where do you imprison a skeleton? In a rib cage.",
+ "There's a fine line between the numerator and the denominator.",
+ "I used to work at a hairdresser but i just wasn't cut out for it.",
+ "Why is metal and a microwave a match made in heaven? When they met, sparks flew.",
+ "The lumberjack loved his new computer. He especially enjoyed logging in.",
+ "Garbage collectors are rubbish drivers!",
+ "When the church relocated it had an organ transplant.",
+ "Lettuce take a moment to appreciate this salad pun.",
+ "The scarecrow get promoted because he was outstanding in his field.",
+ "Sleeping comes so naturally to me, I could do it with my eyes closed.",
+ "I never understood odorless chemicals, they never make scents.",
+ "What do prisoners use to call each other? Cell phones.",
+ "Why was dumbo sad? He felt irrelephant.",
+ "When a clock is hungry, it goes back four seconds.",
+ "Old skiers never die. They just go down hill.",
+ "Did you hear about the pun that was actually funny? Neither have we.",
+ "You know why I like egg puns? They crack me up!",
+ "Want to hear a pun about ghosts? That's the spirit!",
+ "I used to make clown shoes… which was no small feat.",
+ "Did you hear about the human cannonball? Too bad he got fired!",
+ "What happened when the magician got mad? She pulled her hare out!",
+ "Did you hear about the circus that caught on fire? It was in tents.",
+ "The one day of the week that eggs are definitely afraid of is Fry-day.",
+ "A hen will always leave her house through the proper eggs-it.",
+ "The man who ate too many eggs was considered to be an egg-oholic.",
+ "All the hens consider the chef to be very mean because he beats the eggs.",
+ "Eskimos keep all of their chilled eggs inside of the egg-loo.",
+ "Under the doctor's advice, the hen is laying off eggs for a few weeks.",
+ "I had a real problem making a hard-boiled egg this morning until I cracked it.",
+ "The best time of day to eat eggs is at the crack of dawn.",
+ "The chicken coop only had 2 doors since if it had 4 doors it would be a sedan.",
+ "Crossing a cement mixer and a chicken will result in you getting a brick layer.",
+ "That reckless little egg always seems to egg-celerate when he sees the light turn yellow.",
+ "Hopefully this egg pun doesn't make your brain too fried or scrambled.",
+ "Don't ever have multiple people wash dishes together. It's hard for them to stay in sink.",
+ "People using umbrellas always seem to be under the weather.",
+ "I dissected an iris today. It was an eye-opening experience.",
+ "What was Forrest Gump's email password? 1forrest1.",
+ "What planet is like a circus? Saturn, it has three rings!",
+ "Before my father died he worked in a circus as a stilt walker. I used to look up to him.",
+ "Why did the lion eat the tightrope walker? He wanted a well-balanced meal!",
+ "I really look up to my tall friends.",
+ "I hate negative numbers and will stop at nothing to avoid them.",
+ "Long fairy tales have a tendency to dragon.",
+ "It takes guts to make a sausage."
+] \ No newline at end of file
diff --git a/discord/bots/uwufier/css/bootstrap.min.css b/discord/bots/uwufier/css/bootstrap.min.css
new file mode 100644
index 0000000..00b4e82
--- /dev/null
+++ b/discord/bots/uwufier/css/bootstrap.min.css
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v4.3.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 The Bootstrap Authors
+ * Copyright 2011-2019 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-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:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-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:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-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:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.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:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.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:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{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}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-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;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.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:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row 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:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.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}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row 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:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.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}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row 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:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.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}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row 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:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.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{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.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:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.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-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-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}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.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-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.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:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.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:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.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 .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{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%;color:#fff;text-align:center;opacity:.5;transition:opacity .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:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-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}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-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}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.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-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}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!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}.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}.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}@media (min-width:576px){.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-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}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!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}.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}.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}}@media (min-width:768px){.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-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}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!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}.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}.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}}@media (min-width:992px){.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-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}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!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}.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}.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}}@media (min-width:1200px){.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-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}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!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}.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}.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}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
+/*# sourceMappingURL=bootstrap.min.css.map */
diff --git a/discord/bots/uwufier/css/main.css b/discord/bots/uwufier/css/main.css
new file mode 100644
index 0000000..9d93a10
--- /dev/null
+++ b/discord/bots/uwufier/css/main.css
@@ -0,0 +1,171 @@
+html {
+ scroll-behavior: smooth;
+}
+
+.hideme {
+ opacity: 0;
+}
+
+html {
+ overflow: scroll;
+ overflow-x: hidden;
+}
+
+::-webkit-scrollbar {
+ width: 0px;
+ background: transparent;
+}
+
+.navbar .divider-vertical {
+ height: 40px;
+ margin: 0 9px;
+ border-left: 1px solid rgba(255, 255, 255, 0.2);
+ border-right: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+body {
+ font-family: 'Poppins', sans-serif !important;
+ background-color: #23272A;
+ color: #fff;
+ margin: 0;
+ padding: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-rendering: optimizeLegibility;
+ /*border-top: 6px #7289DA solid !important;*/
+ font-size: 16px;
+}
+
+.nav-link {
+ font-size: 14px !important;
+ }
+
+.navbar {
+ box-shadow: none !important
+}
+
+.navbar-brand {
+ font-size: 25px !important
+}
+
+.navbar-toggler-icon {
+ color: #fff !important
+}
+
+.btn {
+ border-radius: 5px !important;
+ font-size: 16px !important;
+ font-weight: 600 !important;
+ text-transform: uppercase !important;
+}
+
+.btn-primary {
+ background-color: #7289DA !important
+}
+.btn-secondary {
+ background-color: #2C2F33 !important
+}
+.heading {
+ padding: 263px 50px !important; /* 160 */
+ color: #fff !important;
+ /*background-image: url("https://auxetite-cdn.sirv.com/wavy-blurple-by-nouridio.svg") !important;*/
+ background-position: bottom !important;
+ background-size: 200% !important;
+ background-repeat: no-repeat !important;
+}
+
+.title {
+ line-height: 90px !important;
+ margin-bottom: -2px !important;
+ font-size: 36px !important;
+ padding-top: 0px !important;
+}
+
+.subtitle {
+ color: rgba(255, 255, 255, 0.61) !important;
+ font-size: 16px !important;
+}
+
+.features {
+ text-align: center !important;
+ background: #7289DA !important;
+ padding: 49px 50px !important /* 60 / 108 */
+}
+.features .title {
+ font-size: 40px !important;
+ color: #ffffff !important;
+ line-height: 70px !important;
+}
+
+.features .subtitle {
+ font-size: 20px !important;
+ color: #a2a8bd;
+}
+
+.cards {
+ margin-top: 30px !important;
+}
+
+.card {
+ border-radius: 5px !important;
+ box-shadow: none !important;
+}
+
+.card-title {
+ font-size: 28px !important;
+ font-weight: 600 !important;
+ color: #7289DA !important;
+}
+
+.statistics {
+ background-color: #23272A !important;
+ text-align: center !important;
+ padding: 20px 20px !important;
+}
+
+.statistics .title {
+ font-size: 40px !important;
+ color: #ffffff !important;
+ line-height: 70px !important;
+}
+
+.statistics .subtitle {
+ font-size: 20px !important;
+ color: #a2a8bd;
+}
+
+.card.statistic {
+ background: transparent !important;
+ box-shadow: none !important;
+ color: #f7f7f7 !important;
+}
+
+.start {
+ text-align: center !important;
+ background: #7289DA !important;
+ padding: 60px 50px !important
+}
+
+.start .card {
+ background: rgba(255, 255, 255, 0.83) !important;
+ color: #353e4c !important;
+}
+
+.start .card .subtitle {
+ color: rgba(53, 62, 76, 0.6) !important;
+ font-size: 16px !important;
+}
+
+.footer {
+ text-align: center !important;
+ background: #353e4c !important;
+ padding: 5px 6px !important;
+ color: #ecf2ff;
+ font-size: 14px !important
+}
+
+.footer a {
+ color: #6086f6 !important;
+ text-decoration: none !important;
+ font-weight: bold !important;
+}
diff --git a/discord/bots/uwufier/css/now-ui-kit.css b/discord/bots/uwufier/css/now-ui-kit.css
new file mode 100644
index 0000000..e1048f8
--- /dev/null
+++ b/discord/bots/uwufier/css/now-ui-kit.css
@@ -0,0 +1,7325 @@
+/*!
+
+ =========================================================
+ * Now UI Kit - v1.3.0
+ =========================================================
+
+ * Product Page: https://www.creative-tim.com/product/now-ui-kit
+ * Copyright 2019 Creative Tim (http://www.creative-tim.com)
+
+ * Designed by www.invisionapp.com Coded by www.creative-tim.com
+
+ =========================================================
+
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ */
+
+/* brand Colors */
+
+/* light colors */
+
+/* ========================================================================
+ * bootstrap-switch - v3.3.2
+ * http://www.bootstrap-switch.org
+ * ========================================================================
+ * Copyright 2012-2013 Mattia Larentis
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+.bootstrap-switch {
+ display: inline-block;
+ direction: ltr;
+ cursor: pointer;
+ border-radius: 30px;
+ border: 0;
+ position: relative;
+ text-align: left;
+ margin-bottom: 10px;
+ line-height: 8px;
+ width: 59px !important;
+ height: 22px;
+ outline: none;
+ z-index: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ vertical-align: middle;
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ margin-right: 20px;
+ background: rgba(44, 44, 44, 0.2);
+}
+
+.bootstrap-switch .bootstrap-switch-container {
+ display: inline-flex;
+ top: 0;
+ height: 22px;
+ border-radius: 4px;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ width: 100px !important;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on,
+.bootstrap-switch .bootstrap-switch-handle-off,
+.bootstrap-switch .bootstrap-switch-label {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: pointer;
+ display: inline-block !important;
+ height: 100%;
+ color: #fff;
+ padding: 6px 12px;
+ font-size: 11px;
+ text-indent: -5px;
+ line-height: 15px;
+ -webkit-transition: 0.25s ease-out;
+ transition: 0.25s ease-out;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on,
+.bootstrap-switch .bootstrap-switch-handle-off {
+ text-align: center;
+ z-index: 1;
+ float: left;
+ line-height: 11px;
+ width: 50% !important;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-brown,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-brown {
+ color: #fff;
+ background: #f96332;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-blue,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-blue {
+ color: #fff;
+ background: #2CA8FF;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-green,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-green {
+ color: #fff;
+ background: #18ce0f;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-orange,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-orange {
+ background: #FFB236;
+ color: #fff;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-red,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-red {
+ color: #fff;
+ background: #FF3636;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
+ color: #fff;
+}
+
+.bootstrap-switch .bootstrap-switch-label {
+ text-align: center;
+ z-index: 100;
+ color: #333333;
+ background: #ffffff;
+ width: 22px !important;
+ height: 22px !important;
+ margin: 0px -11px;
+ border-radius: 20px;
+ position: absolute;
+ float: left;
+ top: 0;
+ left: 50%;
+ padding: 0;
+ box-shadow: 0 1px 11px rgba(0, 0, 0, 0.25);
+}
+
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label {
+ background-color: rgba(23, 23, 23, 0.4);
+}
+
+.bootstrap-switch.bootstrap-switch-on:hover .bootstrap-switch-label {
+ width: 27px !important;
+ margin-left: -16px;
+}
+
+.bootstrap-switch.bootstrap-switch-off:hover .bootstrap-switch-label {
+ width: 27px !important;
+ margin-left: -11px;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-off {
+ text-indent: 6px;
+}
+
+.bootstrap-switch input[type='radio'],
+.bootstrap-switch input[type='checkbox'] {
+ position: absolute !important;
+ top: 0;
+ left: 0;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ z-index: -1;
+}
+
+.bootstrap-switch input[type='radio'].form-control,
+.bootstrap-switch input[type='checkbox'].form-control {
+ height: auto;
+}
+
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {
+ padding: 6px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+}
+
+.bootstrap-switch.bootstrap-switch-disabled,
+.bootstrap-switch.bootstrap-switch-readonly,
+.bootstrap-switch.bootstrap-switch-indeterminate {
+ cursor: default !important;
+}
+
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+ cursor: default !important;
+}
+
+.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {
+ -webkit-transition: margin-left 0.5s;
+ transition: margin-left 0.5s;
+}
+
+.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-container {
+ margin-left: -2px !important;
+}
+
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-container {
+ margin-left: -39px !important;
+}
+
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label:before {
+ background-color: #FFFFFF;
+}
+
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-red~.bootstrap-switch-default {
+ background-color: #FF3636;
+}
+
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-orange~.bootstrap-switch-default {
+ background-color: #FFB236;
+}
+
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-green~.bootstrap-switch-default {
+ background-color: #18ce0f;
+}
+
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-brown~.bootstrap-switch-default {
+ background-color: #f96332;
+}
+
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-blue~.bootstrap-switch-default {
+ background-color: #2CA8FF;
+}
+
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-red,
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-brown,
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-blue,
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-orange,
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-green {
+ background-color: #E3E3E3;
+}
+
+.bootstrap-switch-off .bootstrap-switch-handle-on {
+ opacity: 0;
+}
+
+.bootstrap-switch-on .bootstrap-switch-handle-off {
+ opacity: 0;
+}
+
+/*! nouislider - 13.1.4 */
+
+/* Functional styling;
+ * These styles are required for noUiSlider to function.
+ * You don't need to change these rules to apply your design.
+ */
+
+.noUi-target,
+.noUi-target * {
+ -webkit-touch-callout: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-user-select: none;
+ -ms-touch-action: none;
+ touch-action: none;
+ -ms-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.noUi-target {
+ position: relative;
+ direction: ltr;
+}
+
+.noUi-base,
+.noUi-connects {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ z-index: 1;
+}
+
+/* Wrapper for all connect elements.
+ */
+
+.noUi-connects {
+ overflow: hidden;
+ z-index: 0;
+}
+
+.noUi-connect,
+.noUi-origin {
+ will-change: transform;
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ -ms-transform-origin: 0 0;
+ -webkit-transform-origin: 0 0;
+ transform-origin: 0 0;
+}
+
+/* Offset direction
+ */
+
+html:not([dir="rtl"]) .noUi-horizontal .noUi-origin {
+ left: auto;
+ right: 0;
+}
+
+/* Give origins 0 height/width so they don't interfere with clicking the
+ * connect elements.
+ */
+
+.noUi-vertical .noUi-origin {
+ width: 0;
+}
+
+.noUi-horizontal .noUi-origin {
+ height: 0;
+}
+
+.noUi-handle {
+ position: absolute;
+}
+
+.noUi-state-tap .noUi-connect,
+.noUi-state-tap .noUi-origin {
+ -webkit-transition: transform 0.3s;
+ transition: transform 0.3s;
+}
+
+.noUi-state-drag * {
+ cursor: inherit !important;
+}
+
+/* Slider size and handle placement;
+ */
+
+.noUi-horizontal {
+ height: 1px;
+}
+
+.noUi-horizontal .noUi-handle {
+ border-radius: 50%;
+ background-color: #FFFFFF;
+ box-shadow: 0 1px 13px 0 rgba(0, 0, 0, 0.2);
+ height: 15px;
+ width: 15px;
+ cursor: pointer;
+ margin-top: -7px;
+ outline: none;
+}
+
+.noUi-vertical {
+ width: 18px;
+}
+
+.noUi-vertical .noUi-handle {
+ width: 28px;
+ height: 34px;
+ left: -6px;
+ top: -17px;
+}
+
+html:not([dir="rtl"]) .noUi-horizontal .noUi-handle {
+ right: -15px;
+ left: auto;
+}
+
+/* Styling;
+ * Giving the connect element a border radius causes issues with using transform: scale
+ */
+
+.noUi-target {
+ background-color: rgba(182, 182, 182, 0.3);
+ border-radius: 3px;
+}
+
+.noUi-connects {
+ border-radius: 3px;
+}
+
+.noUi-connect {
+ background: #888888;
+ border-radius: 3px;
+ -webkit-transition: background 450ms;
+ transition: background 450ms;
+}
+
+/* Handles and cursors;
+ */
+
+.noUi-draggable {
+ cursor: ew-resize;
+}
+
+.noUi-vertical .noUi-draggable {
+ cursor: ns-resize;
+}
+
+.noUi-handle {
+ border-radius: 3px;
+ background: #FFF;
+ cursor: default;
+ box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;
+ -webkit-transition: 300ms ease 0s;
+ -moz-transition: 300ms ease 0s;
+ -ms-transition: 300ms ease 0s;
+ -o-transform: 300ms ease 0s;
+ transition: 300ms ease 0s;
+}
+
+.noUi-active {
+ -webkit-transform: scale3d(1.5, 1.5, 1);
+ -moz-transform: scale3d(1.5, 1.5, 1);
+ -ms-transform: scale3d(1.5, 1.5, 1);
+ -o-transform: scale3d(1.5, 1.5, 1);
+ transform: scale3d(1.5, 1.5, 1);
+}
+
+/* Handle stripes;
+ */
+
+.noUi-handle:before,
+.noUi-handle:after {
+ display: none;
+}
+
+.noUi-handle:after {
+ left: 17px;
+}
+
+.noUi-vertical .noUi-handle:before,
+.noUi-vertical .noUi-handle:after {
+ width: 14px;
+ height: 1px;
+ left: 6px;
+ top: 14px;
+}
+
+.noUi-vertical .noUi-handle:after {
+ top: 17px;
+}
+
+/* Disabled state;
+ */
+
+[disabled] .noUi-connect {
+ background: #B8B8B8;
+}
+
+[disabled].noUi-target,
+[disabled].noUi-handle,
+[disabled] .noUi-handle {
+ cursor: not-allowed;
+}
+
+/* Base;
+ *
+ */
+
+.noUi-pips,
+.noUi-pips * {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.noUi-pips {
+ position: absolute;
+ color: #999;
+}
+
+/* Values;
+ *
+ */
+
+.noUi-value {
+ position: absolute;
+ white-space: nowrap;
+ text-align: center;
+}
+
+.noUi-value-sub {
+ color: #ccc;
+ font-size: 10px;
+}
+
+/* Markings;
+ *
+ */
+
+.noUi-marker {
+ position: absolute;
+ background: #CCC;
+}
+
+.noUi-marker-sub {
+ background: #AAA;
+}
+
+.noUi-marker-large {
+ background: #AAA;
+}
+
+/* Horizontal layout;
+ *
+ */
+
+.noUi-pips-horizontal {
+ padding: 10px 0;
+ height: 80px;
+ top: 100%;
+ left: 0;
+ width: 100%;
+}
+
+.noUi-value-horizontal {
+ -webkit-transform: translate(-50%, 50%);
+ transform: translate(-50%, 50%);
+}
+
+.noUi-rtl .noUi-value-horizontal {
+ -webkit-transform: translate(50%, 50%);
+ transform: translate(50%, 50%);
+}
+
+.noUi-marker-horizontal.noUi-marker {
+ margin-left: -1px;
+ width: 2px;
+ height: 5px;
+}
+
+.noUi-marker-horizontal.noUi-marker-sub {
+ height: 10px;
+}
+
+.noUi-marker-horizontal.noUi-marker-large {
+ height: 15px;
+}
+
+/* Vertical layout;
+ *
+ */
+
+.noUi-pips-vertical {
+ padding: 0 10px;
+ height: 100%;
+ top: 0;
+ left: 100%;
+}
+
+.noUi-value-vertical {
+ -webkit-transform: translate(0, -50%);
+ transform: translate(0, -50%, 0);
+ padding-left: 25px;
+}
+
+.noUi-rtl .noUi-value-vertical {
+ -webkit-transform: translate(0, 50%);
+ transform: translate(0, 50%);
+}
+
+.noUi-marker-vertical.noUi-marker {
+ width: 5px;
+ height: 2px;
+ margin-top: -1px;
+}
+
+.noUi-marker-vertical.noUi-marker-sub {
+ width: 10px;
+}
+
+.noUi-marker-vertical.noUi-marker-large {
+ width: 15px;
+}
+
+.noUi-tooltip {
+ display: block;
+ position: absolute;
+ border: 1px solid #D9D9D9;
+ border-radius: 3px;
+ background: #fff;
+ color: #000;
+ padding: 5px;
+ text-align: center;
+ white-space: nowrap;
+}
+
+.noUi-horizontal .noUi-tooltip {
+ -webkit-transform: translate(-50%, 0);
+ transform: translate(-50%, 0);
+ left: 50%;
+ bottom: 120%;
+}
+
+.noUi-vertical .noUi-tooltip {
+ -webkit-transform: translate(0, -50%);
+ transform: translate(0, -50%);
+ top: 50%;
+ right: 120%;
+}
+
+.slider.slider-neutral .noUi-connect,
+.slider.slider-neutral.noUi-connect {
+ background-color: #FFFFFF;
+}
+
+.slider.slider-neutral.noUi-target {
+ background-color: rgba(255, 255, 255, 0.3);
+}
+
+.slider.slider-neutral .noUi-handle {
+ background-color: #FFFFFF;
+}
+
+.slider.slider-primary .noUi-connect,
+.slider.slider-primary.noUi-connect {
+ background-color: #f96332;
+}
+
+.slider.slider-primary.noUi-target {
+ background-color: rgba(249, 99, 50, 0.3);
+}
+
+.slider.slider-primary .noUi-handle {
+ background-color: #f96332;
+}
+
+.slider.slider-info .noUi-connect,
+.slider.slider-info.noUi-connect {
+ background-color: #2CA8FF;
+}
+
+.slider.slider-info.noUi-target {
+ background-color: rgba(44, 168, 255, 0.3);
+}
+
+.slider.slider-info .noUi-handle {
+ background-color: #2CA8FF;
+}
+
+.slider.slider-success .noUi-connect,
+.slider.slider-success.noUi-connect {
+ background-color: #18ce0f;
+}
+
+.slider.slider-success.noUi-target {
+ background-color: rgba(24, 206, 15, 0.3);
+}
+
+.slider.slider-success .noUi-handle {
+ background-color: #18ce0f;
+}
+
+.slider.slider-warning .noUi-connect,
+.slider.slider-warning.noUi-connect {
+ background-color: #FFB236;
+}
+
+.slider.slider-warning.noUi-target {
+ background-color: rgba(255, 178, 54, 0.3);
+}
+
+.slider.slider-warning .noUi-handle {
+ background-color: #FFB236;
+}
+
+.slider.slider-danger .noUi-connect,
+.slider.slider-danger.noUi-connect {
+ background-color: #FF3636;
+}
+
+.slider.slider-danger.noUi-target {
+ background-color: rgba(255, 54, 54, 0.3);
+}
+
+.slider.slider-danger .noUi-handle {
+ background-color: #FF3636;
+}
+
+/*!
+ * Datepicker for Bootstrap v1.7.0-dev (https://github.com/uxsolutions/bootstrap-datepicker)
+ *
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+ */
+
+.datepicker {
+ padding: 8px 6px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ direction: ltr;
+ -webkit-transform: translate3d(0, -40px, 0);
+ -moz-transform: translate3d(0, -40px, 0);
+ -o-transform: translate3d(0, -40px, 0);
+ -ms-transform: translate3d(0, -40px, 0);
+ transform: translate3d(0, -40px, 0);
+ transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ visibility: hidden;
+ display: block;
+ width: 254px;
+ max-width: 254px;
+}
+
+.datepicker.dropdown-menu:before {
+ display: none;
+}
+
+.datepicker.datepicker-primary {
+ background-color: #f96332;
+}
+
+.datepicker.datepicker-primary th,
+.datepicker.datepicker-primary .day div,
+.datepicker.datepicker-primary table tr td span {
+ color: #FFFFFF;
+}
+
+.datepicker.datepicker-primary:after {
+ border-bottom-color: #f96332;
+}
+
+.datepicker.datepicker-primary.datepicker-orient-top:after {
+ border-top-color: #f96332;
+}
+
+.datepicker.datepicker-primary .dow {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.datepicker.datepicker-primary table tr td.old div,
+.datepicker.datepicker-primary table tr td.new div,
+.datepicker.datepicker-primary table tr td span.old,
+.datepicker.datepicker-primary table tr td span.new {
+ color: rgba(255, 255, 255, 0.4);
+}
+
+.datepicker.datepicker-primary table tr td span:hover,
+.datepicker.datepicker-primary table tr td span.focused {
+ background: rgba(255, 255, 255, 0.1);
+}
+
+.datepicker.datepicker-primary .datepicker-switch:hover,
+.datepicker.datepicker-primary .prev:hover,
+.datepicker.datepicker-primary .next:hover,
+.datepicker.datepicker-primary tfoot tr th:hover {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+.datepicker.datepicker-primary table tr td.active div,
+.datepicker.datepicker-primary table tr td.active:hover div,
+.datepicker.datepicker-primary table tr td.active.disabled div,
+.datepicker.datepicker-primary table tr td.active.disabled:hover div {
+ background-color: #FFFFFF;
+ color: #f96332;
+}
+
+.datepicker.datepicker-primary table tr td.day:hover div,
+.datepicker.datepicker-primary table tr td.day.focused div {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+.datepicker.datepicker-primary table tr td.active:hover div,
+.datepicker.datepicker-primary table tr td.active:hover:hover div,
+.datepicker.datepicker-primary table tr td.active.disabled:hover div,
+.datepicker.datepicker-primary table tr td.active.disabled:hover:hover div,
+.datepicker.datepicker-primary table tr td.active:active div,
+.datepicker.datepicker-primary table tr td.active:hover:active div,
+.datepicker.datepicker-primary table tr td.active.disabled:active div,
+.datepicker.datepicker-primary table tr td.active.disabled:hover:active div,
+.datepicker.datepicker-primary table tr td.active.active div,
+.datepicker.datepicker-primary table tr td.active:hover.active div,
+.datepicker.datepicker-primary table tr td.active.disabled.active div,
+.datepicker.datepicker-primary table tr td.active.disabled:hover.active div,
+.datepicker.datepicker-primary table tr td.active.disabled div,
+.datepicker.datepicker-primary table tr td.active:hover.disabled div,
+.datepicker.datepicker-primary table tr td.active.disabled.disabled div,
+.datepicker.datepicker-primary table tr td.active.disabled:hover.disabled div,
+.datepicker.datepicker-primary table tr td.active[disabled] div,
+.datepicker.datepicker-primary table tr td.active:hover[disabled] div,
+.datepicker.datepicker-primary table tr td.active.disabled[disabled] div,
+.datepicker.datepicker-primary table tr td.active.disabled:hover[disabled] div,
+.datepicker.datepicker-primary table tr td span.active:hover,
+.datepicker.datepicker-primary table tr td span.active:hover:hover,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover:hover,
+.datepicker.datepicker-primary table tr td span.active:active,
+.datepicker.datepicker-primary table tr td span.active:hover:active,
+.datepicker.datepicker-primary table tr td span.active.disabled:active,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover:active,
+.datepicker.datepicker-primary table tr td span.active.active,
+.datepicker.datepicker-primary table tr td span.active:hover.active,
+.datepicker.datepicker-primary table tr td span.active.disabled.active,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover.active,
+.datepicker.datepicker-primary table tr td span.active.disabled,
+.datepicker.datepicker-primary table tr td span.active:hover.disabled,
+.datepicker.datepicker-primary table tr td span.active.disabled.disabled,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover.disabled,
+.datepicker.datepicker-primary table tr td span.active[disabled],
+.datepicker.datepicker-primary table tr td span.active:hover[disabled],
+.datepicker.datepicker-primary table tr td span.active.disabled[disabled],
+.datepicker.datepicker-primary table tr td span.active.disabled:hover[disabled] {
+ background-color: #FFFFFF;
+}
+
+.datepicker.datepicker-primary table tr td span.active:hover,
+.datepicker.datepicker-primary table tr td span.active:hover:hover,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover:hover,
+.datepicker.datepicker-primary table tr td span.active:active,
+.datepicker.datepicker-primary table tr td span.active:hover:active,
+.datepicker.datepicker-primary table tr td span.active.disabled:active,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover:active,
+.datepicker.datepicker-primary table tr td span.active.active,
+.datepicker.datepicker-primary table tr td span.active:hover.active,
+.datepicker.datepicker-primary table tr td span.active.disabled.active,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover.active,
+.datepicker.datepicker-primary table tr td span.active.disabled,
+.datepicker.datepicker-primary table tr td span.active:hover.disabled,
+.datepicker.datepicker-primary table tr td span.active.disabled.disabled,
+.datepicker.datepicker-primary table tr td span.active.disabled:hover.disabled,
+.datepicker.datepicker-primary table tr td span.active[disabled],
+.datepicker.datepicker-primary table tr td span.active:hover[disabled],
+.datepicker.datepicker-primary table tr td span.active.disabled[disabled],
+.datepicker.datepicker-primary table tr td span.active.disabled:hover[disabled] {
+ color: #f96332;
+}
+
+.datepicker-inline {
+ width: 220px;
+}
+
+.datepicker.datepicker-rtl {
+ direction: rtl;
+}
+
+.datepicker.datepicker-rtl.dropdown-menu {
+ left: auto;
+}
+
+.datepicker.datepicker-rtl table tr td span {
+ float: right;
+}
+
+.datepicker-dropdown {
+ top: 0;
+ left: 0;
+}
+
+.datepicker-dropdown:before {
+ content: '';
+ display: inline-block;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid transparent;
+ border-top: 0;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ position: absolute;
+}
+
+.datepicker-dropdown:after {
+ content: '';
+ display: inline-block;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #fff;
+ border-top: 0;
+ position: absolute;
+}
+
+.datepicker-dropdown.datepicker-orient-left:before {
+ left: 6px;
+}
+
+.datepicker-dropdown.datepicker-orient-left:after {
+ left: 7px;
+}
+
+.datepicker-dropdown.datepicker-orient-right:before {
+ right: 6px;
+}
+
+.datepicker-dropdown.datepicker-orient-right:after {
+ right: 7px;
+}
+
+.datepicker-dropdown.datepicker-orient-bottom:before {
+ top: -7px;
+}
+
+.datepicker-dropdown.datepicker-orient-bottom:after {
+ top: -6px;
+}
+
+.datepicker-dropdown.datepicker-orient-top:before {
+ bottom: -7px;
+ border-bottom: 0;
+ border-top: 7px solid transparent;
+}
+
+.datepicker-dropdown.datepicker-orient-top:after {
+ bottom: -6px;
+ border-bottom: 0;
+ border-top: 6px solid #fff;
+}
+
+.datepicker table {
+ margin: 0;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ width: 241px;
+ max-width: 241px;
+}
+
+.datepicker .day div,
+.datepicker th {
+ -webkit-transition: all 300ms ease 0s;
+ -moz-transition: all 300ms ease 0s;
+ -o-transition: all 300ms ease 0s;
+ -ms-transition: all 300ms ease 0s;
+ transition: all 300ms ease 0s;
+ text-align: center;
+ width: 30px;
+ height: 30px;
+ line-height: 2.2;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 50%;
+ font-weight: 300;
+ font-size: 14px;
+ border: none;
+ z-index: 1;
+ position: relative;
+ cursor: pointer;
+}
+
+.datepicker th {
+ color: #f96332;
+}
+
+.table-condensed>tbody>tr>td,
+.table-condensed>tbody>tr>th,
+.table-condensed>tfoot>tr>td,
+.table-condensed>tfoot>tr>th,
+.table-condensed>thead>tr>td,
+.table-condensed>thead>tr>th {
+ padding: 2px;
+ text-align: center;
+ cursor: pointer;
+}
+
+.table-striped .datepicker table tr td,
+.table-striped .datepicker table tr th {
+ background-color: transparent;
+}
+
+.datepicker table tr td.day:hover div,
+.datepicker table tr td.day.focused div {
+ background: #eee;
+ cursor: pointer;
+}
+
+.datepicker table tr td.old,
+.datepicker table tr td.new {
+ color: #888888;
+}
+
+.datepicker table tr td.disabled,
+.datepicker table tr td.disabled:hover {
+ background: none;
+ color: #888888;
+ cursor: default;
+}
+
+.datepicker table tr td.highlighted {
+ background: #d9edf7;
+ border-radius: 0;
+}
+
+.datepicker table tr td.today,
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today.disabled:hover {
+ background-color: #fde19a;
+ background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a);
+ background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
+ background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a);
+ background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a);
+ background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
+ border-color: #fdf59a #fdf59a #fbed50;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ color: #000;
+}
+
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today:hover:hover,
+.datepicker table tr td.today.disabled:hover,
+.datepicker table tr td.today.disabled:hover:hover,
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active,
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today:hover.disabled,
+.datepicker table tr td.today.disabled.disabled,
+.datepicker table tr td.today.disabled:hover.disabled,
+.datepicker table tr td.today[disabled],
+.datepicker table tr td.today:hover[disabled],
+.datepicker table tr td.today.disabled[disabled],
+.datepicker table tr td.today.disabled:hover[disabled] {
+ background-color: #fdf59a;
+}
+
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active {
+ background-color: #fbf069 \9;
+}
+
+.datepicker table tr td.today:hover:hover {
+ color: #000;
+}
+
+.datepicker table tr td.today.active:hover {
+ color: #fff;
+}
+
+.datepicker table tr td.range,
+.datepicker table tr td.range:hover,
+.datepicker table tr td.range.disabled,
+.datepicker table tr td.range.disabled:hover {
+ background: #eee;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.datepicker table tr td.range.today,
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today.disabled:hover {
+ background-color: #f3d17a;
+ background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a);
+ background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
+ background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a);
+ background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a);
+ background-image: linear-gradient(to bottom, #f3c17a, #f3e97a);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
+ border-color: #f3e97a #f3e97a #edde34;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today:hover:hover,
+.datepicker table tr td.range.today.disabled:hover,
+.datepicker table tr td.range.today.disabled:hover:hover,
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active,
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today:hover.disabled,
+.datepicker table tr td.range.today.disabled.disabled,
+.datepicker table tr td.range.today.disabled:hover.disabled,
+.datepicker table tr td.range.today[disabled],
+.datepicker table tr td.range.today:hover[disabled],
+.datepicker table tr td.range.today.disabled[disabled],
+.datepicker table tr td.range.today.disabled:hover[disabled] {
+ background-color: #f3e97a;
+}
+
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active {
+ background-color: #efe24b \9;
+}
+
+.datepicker table tr td.selected,
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected.disabled:hover {
+ background-color: #9e9e9e;
+ background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080);
+ background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
+ background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080);
+ background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080);
+ background-image: linear-gradient(to bottom, #b3b3b3, #808080);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
+ border-color: #808080 #808080 #595959;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected:hover:hover,
+.datepicker table tr td.selected.disabled:hover,
+.datepicker table tr td.selected.disabled:hover:hover,
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active,
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected:hover.disabled,
+.datepicker table tr td.selected.disabled.disabled,
+.datepicker table tr td.selected.disabled:hover.disabled,
+.datepicker table tr td.selected[disabled],
+.datepicker table tr td.selected:hover[disabled],
+.datepicker table tr td.selected.disabled[disabled],
+.datepicker table tr td.selected.disabled:hover[disabled] {
+ background-color: #808080;
+}
+
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active {
+ background-color: #666666 \9;
+}
+
+.datepicker table tr td.active div,
+.datepicker table tr td.active:hover div,
+.datepicker table tr td.active.disabled div,
+.datepicker table tr td.active.disabled:hover div {
+ background-color: #f96332;
+ color: #FFFFFF;
+ box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2);
+}
+
+.datepicker table tr td.active:hover div,
+.datepicker table tr td.active:hover:hover div,
+.datepicker table tr td.active.disabled:hover div,
+.datepicker table tr td.active.disabled:hover:hover div,
+.datepicker table tr td.active:active div,
+.datepicker table tr td.active:hover:active div,
+.datepicker table tr td.active.disabled:active div,
+.datepicker table tr td.active.disabled:hover:active div,
+.datepicker table tr td.active.active div,
+.datepicker table tr td.active:hover.active div,
+.datepicker table tr td.active.disabled.active div,
+.datepicker table tr td.active.disabled:hover.active div,
+.datepicker table tr td.active.disabled div,
+.datepicker table tr td.active:hover.disabled div,
+.datepicker table tr td.active.disabled.disabled div,
+.datepicker table tr td.active.disabled:hover.disabled div,
+.datepicker table tr td.active[disabled] div,
+.datepicker table tr td.active:hover[disabled] div,
+.datepicker table tr td.active.disabled[disabled] div,
+.datepicker table tr td.active.disabled:hover[disabled] div {
+ background-color: #f96332;
+}
+
+.datepicker table tr td.active:active,
+.datepicker table tr td.active:hover:active,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active:hover.active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active.disabled:hover.active {
+ background-color: #003399 \9;
+}
+
+.datepicker table tr td span {
+ display: block;
+ width: 41px;
+ height: 41px;
+ line-height: 41px;
+ float: left;
+ margin: 1%;
+ font-size: 14px;
+ cursor: pointer;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
+}
+
+.datepicker table tr td span:hover,
+.datepicker table tr td span.focused {
+ background: #eee;
+}
+
+.datepicker table tr td span.disabled,
+.datepicker table tr td span.disabled:hover {
+ background: none;
+ color: #888888;
+ cursor: default;
+}
+
+.datepicker table tr td span.active,
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active.disabled:hover {
+ color: #fff;
+ background-color: #f96332;
+}
+
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active:hover:hover,
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active.disabled:hover:hover,
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active:hover.disabled,
+.datepicker table tr td span.active.disabled.disabled,
+.datepicker table tr td span.active.disabled:hover.disabled,
+.datepicker table tr td span.active[disabled],
+.datepicker table tr td span.active:hover[disabled],
+.datepicker table tr td span.active.disabled[disabled],
+.datepicker table tr td span.active.disabled:hover[disabled] {
+ background-color: #f96332;
+ box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2);
+}
+
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active {
+ background-color: #003399 \9;
+}
+
+.datepicker table tr td span.old,
+.datepicker table tr td span.new {
+ color: #888888;
+}
+
+.datepicker .datepicker-switch {
+ width: auto;
+ border-radius: 0.1875rem;
+}
+
+.datepicker .datepicker-switch,
+.datepicker .prev,
+.datepicker .next,
+.datepicker tfoot tr th {
+ cursor: pointer;
+}
+
+.datepicker .prev,
+.datepicker .next {
+ width: 35px;
+ height: 35px;
+}
+
+.datepicker i {
+ position: relative;
+ top: 2px;
+}
+
+.datepicker .prev i {
+ left: -1px;
+}
+
+.datepicker .next i {
+ right: -1px;
+}
+
+.datepicker .datepicker-switch:hover,
+.datepicker .prev:hover,
+.datepicker .next:hover,
+.datepicker tfoot tr th:hover {
+ background: #eee;
+}
+
+.datepicker .prev.disabled,
+.datepicker .next.disabled {
+ visibility: hidden;
+}
+
+.datepicker .cw {
+ font-size: 10px;
+ width: 12px;
+ padding: 0 2px 0 5px;
+ vertical-align: middle;
+}
+
+.input-append.date .add-on,
+.input-prepend.date .add-on {
+ cursor: pointer;
+}
+
+.input-append.date .add-on i,
+.input-prepend.date .add-on i {
+ margin-top: 3px;
+}
+
+.input-daterange input {
+ text-align: center;
+}
+
+.input-daterange input:first-child {
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+
+.input-daterange input:last-child {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+
+.input-daterange .add-on {
+ display: inline-block;
+ width: auto;
+ min-width: 16px;
+ height: 18px;
+ padding: 4px 5px;
+ font-weight: normal;
+ line-height: 18px;
+ text-align: center;
+ text-shadow: 0 1px 0 #fff;
+ vertical-align: middle;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ margin-left: -5px;
+ margin-right: -5px;
+}
+
+.table-condensed>tbody>tr>td,
+.table-condensed>tbody>tr>th,
+.table-condensed>tfoot>tr>td,
+.table-condensed>tfoot>tr>th,
+.table-condensed>thead>tr>td,
+.table-condensed>thead>tr>th {
+ position: relative;
+ z-index: -1;
+}
+
+.btn,
+.navbar .navbar-nav>a.btn {
+ border-width: 2px;
+ font-weight: 400;
+ font-size: 0.8571em;
+ line-height: 1.35em;
+ margin: 10px 1px;
+ border: none;
+ border-radius: 0.1875rem;
+ padding: 11px 22px;
+ cursor: pointer;
+ background-color: #888888;
+ color: #FFFFFF;
+}
+
+.btn:hover,
+.btn:focus,
+.btn:not(:disabled):not(.disabled):active,
+.btn:not(:disabled):not(.disabled).active,
+.btn:not(:disabled):not(.disabled):active:focus,
+.btn:not(:disabled):not(.disabled).active:focus,
+.btn:active:hover,
+.btn.active:hover,
+.show>.btn.dropdown-toggle,
+.show>.btn.dropdown-toggle:focus,
+.show>.btn.dropdown-toggle:hover,
+.navbar .navbar-nav>a.btn:hover,
+.navbar .navbar-nav>a.btn:focus,
+.navbar .navbar-nav>a.btn:not(:disabled):not(.disabled):active,
+.navbar .navbar-nav>a.btn:not(:disabled):not(.disabled).active,
+.navbar .navbar-nav>a.btn:not(:disabled):not(.disabled):active:focus,
+.navbar .navbar-nav>a.btn:not(:disabled):not(.disabled).active:focus,
+.navbar .navbar-nav>a.btn:active:hover,
+.navbar .navbar-nav>a.btn.active:hover,
+.show>.navbar .navbar-nav>a.btn.dropdown-toggle,
+.show>.navbar .navbar-nav>a.btn.dropdown-toggle:focus,
+.show>.navbar .navbar-nav>a.btn.dropdown-toggle:hover {
+ background-color: #979797;
+ color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn:hover,
+.navbar .navbar-nav>a.btn:hover {
+ box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17);
+}
+
+.btn.disabled,
+.btn.disabled:hover,
+.btn.disabled:focus,
+.btn.disabled.focus,
+.btn.disabled:active,
+.btn.disabled.active,
+.btn:disabled,
+.btn:disabled:hover,
+.btn:disabled:focus,
+.btn:disabled.focus,
+.btn:disabled:active,
+.btn:disabled.active,
+.btn[disabled],
+.btn[disabled]:hover,
+.btn[disabled]:focus,
+.btn[disabled].focus,
+.btn[disabled]:active,
+.btn[disabled].active,
+fieldset[disabled] .btn,
+fieldset[disabled] .btn:hover,
+fieldset[disabled] .btn:focus,
+fieldset[disabled] .btn.focus,
+fieldset[disabled] .btn:active,
+fieldset[disabled] .btn.active,
+.navbar .navbar-nav>a.btn.disabled,
+.navbar .navbar-nav>a.btn.disabled:hover,
+.navbar .navbar-nav>a.btn.disabled:focus,
+.navbar .navbar-nav>a.btn.disabled.focus,
+.navbar .navbar-nav>a.btn.disabled:active,
+.navbar .navbar-nav>a.btn.disabled.active,
+.navbar .navbar-nav>a.btn:disabled,
+.navbar .navbar-nav>a.btn:disabled:hover,
+.navbar .navbar-nav>a.btn:disabled:focus,
+.navbar .navbar-nav>a.btn:disabled.focus,
+.navbar .navbar-nav>a.btn:disabled:active,
+.navbar .navbar-nav>a.btn:disabled.active,
+.navbar .navbar-nav>a.btn[disabled],
+.navbar .navbar-nav>a.btn[disabled]:hover,
+.navbar .navbar-nav>a.btn[disabled]:focus,
+.navbar .navbar-nav>a.btn[disabled].focus,
+.navbar .navbar-nav>a.btn[disabled]:active,
+.navbar .navbar-nav>a.btn[disabled].active,
+fieldset[disabled] .navbar .navbar-nav>a.btn,
+fieldset[disabled] .navbar .navbar-nav>a.btn:hover,
+fieldset[disabled] .navbar .navbar-nav>a.btn:focus,
+fieldset[disabled] .navbar .navbar-nav>a.btn.focus,
+fieldset[disabled] .navbar .navbar-nav>a.btn:active,
+fieldset[disabled] .navbar .navbar-nav>a.btn.active {
+ background-color: #888888;
+ border-color: #888888;
+}
+
+.btn.btn-simple,
+.navbar .navbar-nav>a.btn.btn-simple {
+ color: #888888;
+ border-color: #888888;
+}
+
+.btn.btn-simple:hover,
+.btn.btn-simple:focus,
+.btn.btn-simple:not(:disabled):not(.disabled):active,
+.btn.btn-simple:not(:disabled):not(.disabled).active,
+.btn.btn-simple:not(:disabled):not(.disabled):active:focus,
+.btn.btn-simple:not(:disabled):not(.disabled).active:focus,
+.btn.btn-simple:active:hover,
+.btn.btn-simple.active:hover,
+.show>.btn.btn-simple.dropdown-toggle,
+.show>.btn.btn-simple.dropdown-toggle:focus,
+.show>.btn.btn-simple.dropdown-toggle:hover,
+.navbar .navbar-nav>a.btn.btn-simple:hover,
+.navbar .navbar-nav>a.btn.btn-simple:focus,
+.navbar .navbar-nav>a.btn.btn-simple:not(:disabled):not(.disabled):active,
+.navbar .navbar-nav>a.btn.btn-simple:not(:disabled):not(.disabled).active,
+.navbar .navbar-nav>a.btn.btn-simple:not(:disabled):not(.disabled):active:focus,
+.navbar .navbar-nav>a.btn.btn-simple:not(:disabled):not(.disabled).active:focus,
+.navbar .navbar-nav>a.btn.btn-simple:active:hover,
+.navbar .navbar-nav>a.btn.btn-simple.active:hover,
+.show>.navbar .navbar-nav>a.btn.btn-simple.dropdown-toggle,
+.show>.navbar .navbar-nav>a.btn.btn-simple.dropdown-toggle:focus,
+.show>.navbar .navbar-nav>a.btn.btn-simple.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #979797;
+ border-color: #979797;
+ box-shadow: none;
+}
+
+.btn.btn-link,
+.navbar .navbar-nav>a.btn.btn-link {
+ color: #888888;
+}
+
+.btn.btn-link:hover,
+.btn.btn-link:focus,
+.btn.btn-link:not(:disabled):not(.disabled):active,
+.btn.btn-link:not(:disabled):not(.disabled).active,
+.btn.btn-link:not(:disabled):not(.disabled):active:focus,
+.btn.btn-link:not(:disabled):not(.disabled).active:focus,
+.btn.btn-link:active:hover,
+.btn.btn-link.active:hover,
+.show>.btn.btn-link.dropdown-toggle,
+.show>.btn.btn-link.dropdown-toggle:focus,
+.show>.btn.btn-link.dropdown-toggle:hover,
+.navbar .navbar-nav>a.btn.btn-link:hover,
+.navbar .navbar-nav>a.btn.btn-link:focus,
+.navbar .navbar-nav>a.btn.btn-link:not(:disabled):not(.disabled):active,
+.navbar .navbar-nav>a.btn.btn-link:not(:disabled):not(.disabled).active,
+.navbar .navbar-nav>a.btn.btn-link:not(:disabled):not(.disabled):active:focus,
+.navbar .navbar-nav>a.btn.btn-link:not(:disabled):not(.disabled).active:focus,
+.navbar .navbar-nav>a.btn.btn-link:active:hover,
+.navbar .navbar-nav>a.btn.btn-link.active:hover,
+.show>.navbar .navbar-nav>a.btn.btn-link.dropdown-toggle,
+.show>.navbar .navbar-nav>a.btn.btn-link.dropdown-toggle:focus,
+.show>.navbar .navbar-nav>a.btn.btn-link.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #979797;
+ text-decoration: none;
+ box-shadow: none;
+}
+
+.btn:hover,
+.btn:focus,
+.navbar .navbar-nav>a.btn:hover,
+.navbar .navbar-nav>a.btn:focus {
+ opacity: 1;
+ filter: alpha(opacity=100);
+ outline: 0 !important;
+}
+
+.btn:active,
+.btn.active,
+.open>.btn.dropdown-toggle,
+.navbar .navbar-nav>a.btn:active,
+.navbar .navbar-nav>a.btn.active,
+.open>.navbar .navbar-nav>a.btn.dropdown-toggle {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: 0 !important;
+}
+
+.btn.btn-icon,
+.navbar .navbar-nav>a.btn.btn-icon {
+ height: 2.375rem;
+ min-width: 2.375rem;
+ width: 2.375rem;
+ padding: 0;
+ font-size: 0.9375rem;
+ overflow: hidden;
+ position: relative;
+ line-height: normal;
+}
+
+.btn.btn-icon[class*="btn-outline-"],
+.navbar .navbar-nav>a.btn.btn-icon[class*="btn-outline-"] {
+ padding: 0;
+}
+
+.btn.btn-icon.btn-sm,
+.navbar .navbar-nav>a.btn.btn-icon.btn-sm {
+ height: 1.875rem;
+ min-width: 1.875rem;
+ width: 1.875rem;
+}
+
+.btn.btn-icon.btn-sm i.fab,
+.btn.btn-icon.btn-sm i.now-ui-icons,
+.navbar .navbar-nav>a.btn.btn-icon.btn-sm i.fab,
+.navbar .navbar-nav>a.btn.btn-icon.btn-sm i.now-ui-icons {
+ font-size: 0.6875rem;
+}
+
+.btn.btn-icon.btn-lg,
+.navbar .navbar-nav>a.btn.btn-icon.btn-lg {
+ height: 3.6rem;
+ min-width: 3.6rem;
+ width: 3.6rem;
+}
+
+.btn.btn-icon.btn-lg i.now-ui-icons,
+.btn.btn-icon.btn-lg i.fab,
+.navbar .navbar-nav>a.btn.btn-icon.btn-lg i.now-ui-icons,
+.navbar .navbar-nav>a.btn.btn-icon.btn-lg i.fab {
+ font-size: 1.325rem;
+}
+
+.btn.btn-icon:not(.btn-footer) i.now-ui-icons,
+.btn.btn-icon:not(.btn-footer) i.fab,
+.navbar .navbar-nav>a.btn.btn-icon:not(.btn-footer) i.now-ui-icons,
+.navbar .navbar-nav>a.btn.btn-icon:not(.btn-footer) i.fab {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-12px, -12px);
+ line-height: 1.5626rem;
+ width: 23px;
+}
+
+.btn:not(.btn-icon) .now-ui-icons,
+.navbar .navbar-nav>a.btn:not(.btn-icon) .now-ui-icons {
+ position: relative;
+ top: 1px;
+}
+
+.btn-primary {
+ background-color: #f96332;
+ color: #FFFFFF;
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:not(:disabled):not(.disabled):active,
+.btn-primary:not(:disabled):not(.disabled).active,
+.btn-primary:not(:disabled):not(.disabled):active:focus,
+.btn-primary:not(:disabled):not(.disabled).active:focus,
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.show>.btn-primary.dropdown-toggle,
+.show>.btn-primary.dropdown-toggle:focus,
+.show>.btn-primary.dropdown-toggle:hover {
+ background-color: #fa7a50;
+ color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn-primary:hover {
+ box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17);
+}
+
+.btn-primary.disabled,
+.btn-primary.disabled:hover,
+.btn-primary.disabled:focus,
+.btn-primary.disabled.focus,
+.btn-primary.disabled:active,
+.btn-primary.disabled.active,
+.btn-primary:disabled,
+.btn-primary:disabled:hover,
+.btn-primary:disabled:focus,
+.btn-primary:disabled.focus,
+.btn-primary:disabled:active,
+.btn-primary:disabled.active,
+.btn-primary[disabled],
+.btn-primary[disabled]:hover,
+.btn-primary[disabled]:focus,
+.btn-primary[disabled].focus,
+.btn-primary[disabled]:active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-primary:hover,
+fieldset[disabled] .btn-primary:focus,
+fieldset[disabled] .btn-primary.focus,
+fieldset[disabled] .btn-primary:active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #f96332;
+ border-color: #f96332;
+}
+
+.btn-primary.btn-simple {
+ color: #f96332;
+ border-color: #f96332;
+}
+
+.btn-primary.btn-simple:hover,
+.btn-primary.btn-simple:focus,
+.btn-primary.btn-simple:not(:disabled):not(.disabled):active,
+.btn-primary.btn-simple:not(:disabled):not(.disabled).active,
+.btn-primary.btn-simple:not(:disabled):not(.disabled):active:focus,
+.btn-primary.btn-simple:not(:disabled):not(.disabled).active:focus,
+.btn-primary.btn-simple:active:hover,
+.btn-primary.btn-simple.active:hover,
+.show>.btn-primary.btn-simple.dropdown-toggle,
+.show>.btn-primary.btn-simple.dropdown-toggle:focus,
+.show>.btn-primary.btn-simple.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #fa7a50;
+ border-color: #fa7a50;
+ box-shadow: none;
+}
+
+.btn-primary.btn-link {
+ color: #f96332;
+}
+
+.btn-primary.btn-link:hover,
+.btn-primary.btn-link:focus,
+.btn-primary.btn-link:not(:disabled):not(.disabled):active,
+.btn-primary.btn-link:not(:disabled):not(.disabled).active,
+.btn-primary.btn-link:not(:disabled):not(.disabled):active:focus,
+.btn-primary.btn-link:not(:disabled):not(.disabled).active:focus,
+.btn-primary.btn-link:active:hover,
+.btn-primary.btn-link.active:hover,
+.show>.btn-primary.btn-link.dropdown-toggle,
+.show>.btn-primary.btn-link.dropdown-toggle:focus,
+.show>.btn-primary.btn-link.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #fa7a50;
+ text-decoration: none;
+ box-shadow: none;
+}
+
+.btn-success {
+ background-color: #18ce0f;
+ color: #FFFFFF;
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:not(:disabled):not(.disabled):active,
+.btn-success:not(:disabled):not(.disabled).active,
+.btn-success:not(:disabled):not(.disabled):active:focus,
+.btn-success:not(:disabled):not(.disabled).active:focus,
+.btn-success:active:hover,
+.btn-success.active:hover,
+.show>.btn-success.dropdown-toggle,
+.show>.btn-success.dropdown-toggle:focus,
+.show>.btn-success.dropdown-toggle:hover {
+ background-color: #1beb11;
+ color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn-success:hover {
+ box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17);
+}
+
+.btn-success.disabled,
+.btn-success.disabled:hover,
+.btn-success.disabled:focus,
+.btn-success.disabled.focus,
+.btn-success.disabled:active,
+.btn-success.disabled.active,
+.btn-success:disabled,
+.btn-success:disabled:hover,
+.btn-success:disabled:focus,
+.btn-success:disabled.focus,
+.btn-success:disabled:active,
+.btn-success:disabled.active,
+.btn-success[disabled],
+.btn-success[disabled]:hover,
+.btn-success[disabled]:focus,
+.btn-success[disabled].focus,
+.btn-success[disabled]:active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-success:hover,
+fieldset[disabled] .btn-success:focus,
+fieldset[disabled] .btn-success.focus,
+fieldset[disabled] .btn-success:active,
+fieldset[disabled] .btn-success.active {
+ background-color: #18ce0f;
+ border-color: #18ce0f;
+}
+
+.btn-success.btn-simple {
+ color: #18ce0f;
+ border-color: #18ce0f;
+}
+
+.btn-success.btn-simple:hover,
+.btn-success.btn-simple:focus,
+.btn-success.btn-simple:not(:disabled):not(.disabled):active,
+.btn-success.btn-simple:not(:disabled):not(.disabled).active,
+.btn-success.btn-simple:not(:disabled):not(.disabled):active:focus,
+.btn-success.btn-simple:not(:disabled):not(.disabled).active:focus,
+.btn-success.btn-simple:active:hover,
+.btn-success.btn-simple.active:hover,
+.show>.btn-success.btn-simple.dropdown-toggle,
+.show>.btn-success.btn-simple.dropdown-toggle:focus,
+.show>.btn-success.btn-simple.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #1beb11;
+ border-color: #1beb11;
+ box-shadow: none;
+}
+
+.btn-success.btn-link {
+ color: #18ce0f;
+}
+
+.btn-success.btn-link:hover,
+.btn-success.btn-link:focus,
+.btn-success.btn-link:not(:disabled):not(.disabled):active,
+.btn-success.btn-link:not(:disabled):not(.disabled).active,
+.btn-success.btn-link:not(:disabled):not(.disabled):active:focus,
+.btn-success.btn-link:not(:disabled):not(.disabled).active:focus,
+.btn-success.btn-link:active:hover,
+.btn-success.btn-link.active:hover,
+.show>.btn-success.btn-link.dropdown-toggle,
+.show>.btn-success.btn-link.dropdown-toggle:focus,
+.show>.btn-success.btn-link.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #1beb11;
+ text-decoration: none;
+ box-shadow: none;
+}
+
+.btn-info {
+ background-color: #2CA8FF;
+ color: #FFFFFF;
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:not(:disabled):not(.disabled):active,
+.btn-info:not(:disabled):not(.disabled).active,
+.btn-info:not(:disabled):not(.disabled):active:focus,
+.btn-info:not(:disabled):not(.disabled).active:focus,
+.btn-info:active:hover,
+.btn-info.active:hover,
+.show>.btn-info.dropdown-toggle,
+.show>.btn-info.dropdown-toggle:focus,
+.show>.btn-info.dropdown-toggle:hover {
+ background-color: #4bb5ff;
+ color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn-info:hover {
+ box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17);
+}
+
+.btn-info.disabled,
+.btn-info.disabled:hover,
+.btn-info.disabled:focus,
+.btn-info.disabled.focus,
+.btn-info.disabled:active,
+.btn-info.disabled.active,
+.btn-info:disabled,
+.btn-info:disabled:hover,
+.btn-info:disabled:focus,
+.btn-info:disabled.focus,
+.btn-info:disabled:active,
+.btn-info:disabled.active,
+.btn-info[disabled],
+.btn-info[disabled]:hover,
+.btn-info[disabled]:focus,
+.btn-info[disabled].focus,
+.btn-info[disabled]:active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-info:hover,
+fieldset[disabled] .btn-info:focus,
+fieldset[disabled] .btn-info.focus,
+fieldset[disabled] .btn-info:active,
+fieldset[disabled] .btn-info.active {
+ background-color: #2CA8FF;
+ border-color: #2CA8FF;
+}
+
+.btn-info.btn-simple {
+ color: #2CA8FF;
+ border-color: #2CA8FF;
+}
+
+.btn-info.btn-simple:hover,
+.btn-info.btn-simple:focus,
+.btn-info.btn-simple:not(:disabled):not(.disabled):active,
+.btn-info.btn-simple:not(:disabled):not(.disabled).active,
+.btn-info.btn-simple:not(:disabled):not(.disabled):active:focus,
+.btn-info.btn-simple:not(:disabled):not(.disabled).active:focus,
+.btn-info.btn-simple:active:hover,
+.btn-info.btn-simple.active:hover,
+.show>.btn-info.btn-simple.dropdown-toggle,
+.show>.btn-info.btn-simple.dropdown-toggle:focus,
+.show>.btn-info.btn-simple.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #4bb5ff;
+ border-color: #4bb5ff;
+ box-shadow: none;
+}
+
+.btn-info.btn-link {
+ color: #2CA8FF;
+}
+
+.btn-info.btn-link:hover,
+.btn-info.btn-link:focus,
+.btn-info.btn-link:not(:disabled):not(.disabled):active,
+.btn-info.btn-link:not(:disabled):not(.disabled).active,
+.btn-info.btn-link:not(:disabled):not(.disabled):active:focus,
+.btn-info.btn-link:not(:disabled):not(.disabled).active:focus,
+.btn-info.btn-link:active:hover,
+.btn-info.btn-link.active:hover,
+.show>.btn-info.btn-link.dropdown-toggle,
+.show>.btn-info.btn-link.dropdown-toggle:focus,
+.show>.btn-info.btn-link.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #4bb5ff;
+ text-decoration: none;
+ box-shadow: none;
+}
+
+.btn-warning {
+ background-color: #FFB236;
+ color: #FFFFFF;
+}
+
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:not(:disabled):not(.disabled):active,
+.btn-warning:not(:disabled):not(.disabled).active,
+.btn-warning:not(:disabled):not(.disabled):active:focus,
+.btn-warning:not(:disabled):not(.disabled).active:focus,
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.show>.btn-warning.dropdown-toggle,
+.show>.btn-warning.dropdown-toggle:focus,
+.show>.btn-warning.dropdown-toggle:hover {
+ background-color: #ffbe55;
+ color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn-warning:hover {
+ box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17);
+}
+
+.btn-warning.disabled,
+.btn-warning.disabled:hover,
+.btn-warning.disabled:focus,
+.btn-warning.disabled.focus,
+.btn-warning.disabled:active,
+.btn-warning.disabled.active,
+.btn-warning:disabled,
+.btn-warning:disabled:hover,
+.btn-warning:disabled:focus,
+.btn-warning:disabled.focus,
+.btn-warning:disabled:active,
+.btn-warning:disabled.active,
+.btn-warning[disabled],
+.btn-warning[disabled]:hover,
+.btn-warning[disabled]:focus,
+.btn-warning[disabled].focus,
+.btn-warning[disabled]:active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-warning:hover,
+fieldset[disabled] .btn-warning:focus,
+fieldset[disabled] .btn-warning.focus,
+fieldset[disabled] .btn-warning:active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #FFB236;
+ border-color: #FFB236;
+}
+
+.btn-warning.btn-simple {
+ color: #FFB236;
+ border-color: #FFB236;
+}
+
+.btn-warning.btn-simple:hover,
+.btn-warning.btn-simple:focus,
+.btn-warning.btn-simple:not(:disabled):not(.disabled):active,
+.btn-warning.btn-simple:not(:disabled):not(.disabled).active,
+.btn-warning.btn-simple:not(:disabled):not(.disabled):active:focus,
+.btn-warning.btn-simple:not(:disabled):not(.disabled).active:focus,
+.btn-warning.btn-simple:active:hover,
+.btn-warning.btn-simple.active:hover,
+.show>.btn-warning.btn-simple.dropdown-toggle,
+.show>.btn-warning.btn-simple.dropdown-toggle:focus,
+.show>.btn-warning.btn-simple.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #ffbe55;
+ border-color: #ffbe55;
+ box-shadow: none;
+}
+
+.btn-warning.btn-link {
+ color: #FFB236;
+}
+
+.btn-warning.btn-link:hover,
+.btn-warning.btn-link:focus,
+.btn-warning.btn-link:not(:disabled):not(.disabled):active,
+.btn-warning.btn-link:not(:disabled):not(.disabled).active,
+.btn-warning.btn-link:not(:disabled):not(.disabled):active:focus,
+.btn-warning.btn-link:not(:disabled):not(.disabled).active:focus,
+.btn-warning.btn-link:active:hover,
+.btn-warning.btn-link.active:hover,
+.show>.btn-warning.btn-link.dropdown-toggle,
+.show>.btn-warning.btn-link.dropdown-toggle:focus,
+.show>.btn-warning.btn-link.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #ffbe55;
+ text-decoration: none;
+ box-shadow: none;
+}
+
+.btn-danger {
+ background-color: #FF3636;
+ color: #FFFFFF;
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:not(:disabled):not(.disabled):active,
+.btn-danger:not(:disabled):not(.disabled).active,
+.btn-danger:not(:disabled):not(.disabled):active:focus,
+.btn-danger:not(:disabled):not(.disabled).active:focus,
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.show>.btn-danger.dropdown-toggle,
+.show>.btn-danger.dropdown-toggle:focus,
+.show>.btn-danger.dropdown-toggle:hover {
+ background-color: #ff5555;
+ color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn-danger:hover {
+ box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17);
+}
+
+.btn-danger.disabled,
+.btn-danger.disabled:hover,
+.btn-danger.disabled:focus,
+.btn-danger.disabled.focus,
+.btn-danger.disabled:active,
+.btn-danger.disabled.active,
+.btn-danger:disabled,
+.btn-danger:disabled:hover,
+.btn-danger:disabled:focus,
+.btn-danger:disabled.focus,
+.btn-danger:disabled:active,
+.btn-danger:disabled.active,
+.btn-danger[disabled],
+.btn-danger[disabled]:hover,
+.btn-danger[disabled]:focus,
+.btn-danger[disabled].focus,
+.btn-danger[disabled]:active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger,
+fieldset[disabled] .btn-danger:hover,
+fieldset[disabled] .btn-danger:focus,
+fieldset[disabled] .btn-danger.focus,
+fieldset[disabled] .btn-danger:active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #FF3636;
+ border-color: #FF3636;
+}
+
+.btn-danger.btn-simple {
+ color: #FF3636;
+ border-color: #FF3636;
+}
+
+.btn-danger.btn-simple:hover,
+.btn-danger.btn-simple:focus,
+.btn-danger.btn-simple:not(:disabled):not(.disabled):active,
+.btn-danger.btn-simple:not(:disabled):not(.disabled).active,
+.btn-danger.btn-simple:not(:disabled):not(.disabled):active:focus,
+.btn-danger.btn-simple:not(:disabled):not(.disabled).active:focus,
+.btn-danger.btn-simple:active:hover,
+.btn-danger.btn-simple.active:hover,
+.show>.btn-danger.btn-simple.dropdown-toggle,
+.show>.btn-danger.btn-simple.dropdown-toggle:focus,
+.show>.btn-danger.btn-simple.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #ff5555;
+ border-color: #ff5555;
+ box-shadow: none;
+}
+
+.btn-danger.btn-link {
+ color: #FF3636;
+}
+
+.btn-danger.btn-link:hover,
+.btn-danger.btn-link:focus,
+.btn-danger.btn-link:not(:disabled):not(.disabled):active,
+.btn-danger.btn-link:not(:disabled):not(.disabled).active,
+.btn-danger.btn-link:not(:disabled):not(.disabled):active:focus,
+.btn-danger.btn-link:not(:disabled):not(.disabled).active:focus,
+.btn-danger.btn-link:active:hover,
+.btn-danger.btn-link.active:hover,
+.show>.btn-danger.btn-link.dropdown-toggle,
+.show>.btn-danger.btn-link.dropdown-toggle:focus,
+.show>.btn-danger.btn-link.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #ff5555;
+ text-decoration: none;
+ box-shadow: none;
+}
+
+.btn-neutral {
+ background-color: #FFFFFF;
+ color: #f96332;
+}
+
+.btn-neutral:hover,
+.btn-neutral:focus,
+.btn-neutral:not(:disabled):not(.disabled):active,
+.btn-neutral:not(:disabled):not(.disabled).active,
+.btn-neutral:not(:disabled):not(.disabled):active:focus,
+.btn-neutral:not(:disabled):not(.disabled).active:focus,
+.btn-neutral:active:hover,
+.btn-neutral.active:hover,
+.show>.btn-neutral.dropdown-toggle,
+.show>.btn-neutral.dropdown-toggle:focus,
+.show>.btn-neutral.dropdown-toggle:hover {
+ background-color: #FFFFFF;
+ color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn-neutral:hover {
+ box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17);
+}
+
+.btn-neutral.disabled,
+.btn-neutral.disabled:hover,
+.btn-neutral.disabled:focus,
+.btn-neutral.disabled.focus,
+.btn-neutral.disabled:active,
+.btn-neutral.disabled.active,
+.btn-neutral:disabled,
+.btn-neutral:disabled:hover,
+.btn-neutral:disabled:focus,
+.btn-neutral:disabled.focus,
+.btn-neutral:disabled:active,
+.btn-neutral:disabled.active,
+.btn-neutral[disabled],
+.btn-neutral[disabled]:hover,
+.btn-neutral[disabled]:focus,
+.btn-neutral[disabled].focus,
+.btn-neutral[disabled]:active,
+.btn-neutral[disabled].active,
+fieldset[disabled] .btn-neutral,
+fieldset[disabled] .btn-neutral:hover,
+fieldset[disabled] .btn-neutral:focus,
+fieldset[disabled] .btn-neutral.focus,
+fieldset[disabled] .btn-neutral:active,
+fieldset[disabled] .btn-neutral.active {
+ background-color: #FFFFFF;
+ border-color: #FFFFFF;
+}
+
+.btn-neutral.btn-danger {
+ color: #FF3636;
+}
+
+.btn-neutral.btn-danger:hover,
+.btn-neutral.btn-danger:focus,
+.btn-neutral.btn-danger:active {
+ color: #ff5555 !important;
+}
+
+.btn-neutral.btn-primary {
+ color: #f96332;
+}
+
+.btn-neutral.btn-primary:hover,
+.btn-neutral.btn-primary:focus,
+.btn-neutral.btn-primary:active {
+ color: #fa7a50 !important;
+}
+
+.btn-neutral.btn-info {
+ color: #2CA8FF;
+}
+
+.btn-neutral.btn-info:hover,
+.btn-neutral.btn-info:focus,
+.btn-neutral.btn-info:active {
+ color: #4bb5ff !important;
+}
+
+.btn-neutral.btn-warning {
+ color: #FFB236;
+}
+
+.btn-neutral.btn-warning:hover,
+.btn-neutral.btn-warning:focus,
+.btn-neutral.btn-warning:active {
+ color: #ffbe55 !important;
+}
+
+.btn-neutral.btn-success {
+ color: #18ce0f;
+}
+
+.btn-neutral.btn-success:hover,
+.btn-neutral.btn-success:focus,
+.btn-neutral.btn-success:active {
+ color: #1beb11 !important;
+}
+
+.btn-neutral.btn-default {
+ color: #888888;
+}
+
+.btn-neutral.btn-default:hover,
+.btn-neutral.btn-default:focus,
+.btn-neutral.btn-default:active {
+ color: #979797 !important;
+}
+
+.btn-neutral:hover,
+.btn-neutral:focus,
+.btn-neutral:not(:disabled):not(.disabled):active,
+.btn-neutral:not(:disabled):not(.disabled).active,
+.btn-neutral:not(:disabled):not(.disabled):active:focus,
+.btn-neutral:not(:disabled):not(.disabled).active:focus,
+.btn-neutral:active:hover,
+.btn-neutral.active:hover,
+.show>.btn-neutral.dropdown-toggle,
+.show>.btn-neutral.dropdown-toggle:focus,
+.show>.btn-neutral.dropdown-toggle:hover {
+ background-color: #FFFFFF;
+ color: #fa7a50;
+ box-shadow: none;
+}
+
+.btn-neutral:hover,
+.btn-neutral:focus {
+ color: #fa7a50 !important;
+}
+
+.btn-neutral:hover:not(.nav-link),
+.btn-neutral:focus:not(.nav-link) {
+ box-shadow: none;
+}
+
+.btn-neutral.btn-simple {
+ color: #FFFFFF;
+ border-color: #FFFFFF;
+}
+
+.btn-neutral.btn-simple:hover,
+.btn-neutral.btn-simple:focus,
+.btn-neutral.btn-simple:not(:disabled):not(.disabled):active,
+.btn-neutral.btn-simple:not(:disabled):not(.disabled).active,
+.btn-neutral.btn-simple:not(:disabled):not(.disabled):active:focus,
+.btn-neutral.btn-simple:not(:disabled):not(.disabled).active:focus,
+.btn-neutral.btn-simple:active:hover,
+.btn-neutral.btn-simple.active:hover,
+.show>.btn-neutral.btn-simple.dropdown-toggle,
+.show>.btn-neutral.btn-simple.dropdown-toggle:focus,
+.show>.btn-neutral.btn-simple.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #FFFFFF;
+ border-color: #FFFFFF;
+ box-shadow: none;
+}
+
+.btn-neutral.btn-link {
+ color: #FFFFFF;
+}
+
+.btn-neutral.btn-link:hover,
+.btn-neutral.btn-link:focus,
+.btn-neutral.btn-link:not(:disabled):not(.disabled):active,
+.btn-neutral.btn-link:not(:disabled):not(.disabled).active,
+.btn-neutral.btn-link:not(:disabled):not(.disabled):active:focus,
+.btn-neutral.btn-link:not(:disabled):not(.disabled).active:focus,
+.btn-neutral.btn-link:active:hover,
+.btn-neutral.btn-link.active:hover,
+.show>.btn-neutral.btn-link.dropdown-toggle,
+.show>.btn-neutral.btn-link.dropdown-toggle:focus,
+.show>.btn-neutral.btn-link.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #FFFFFF;
+ text-decoration: none;
+ box-shadow: none;
+}
+
+.btn-outline-primary {
+ color: #f96332;
+ border-color: #f96332;
+}
+
+.btn-outline-primary:hover,
+.btn-outline-primary:focus,
+.btn-outline-primary:not(:disabled):not(.disabled):active,
+.btn-outline-primary:not(:disabled):not(.disabled).active,
+.btn-outline-primary:not(:disabled):not(.disabled):active:focus,
+.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
+.btn-outline-primary:active:hover,
+.btn-outline-primary.active:hover,
+.show>.btn-outline-primary.dropdown-toggle,
+.show>.btn-outline-primary.dropdown-toggle:focus,
+.show>.btn-outline-primary.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #fa7a50;
+ border-color: #fa7a50;
+ box-shadow: none;
+}
+
+.btn-outline-success {
+ color: #18ce0f;
+ border-color: #18ce0f;
+}
+
+.btn-outline-success:hover,
+.btn-outline-success:focus,
+.btn-outline-success:not(:disabled):not(.disabled):active,
+.btn-outline-success:not(:disabled):not(.disabled).active,
+.btn-outline-success:not(:disabled):not(.disabled):active:focus,
+.btn-outline-success:not(:disabled):not(.disabled).active:focus,
+.btn-outline-success:active:hover,
+.btn-outline-success.active:hover,
+.show>.btn-outline-success.dropdown-toggle,
+.show>.btn-outline-success.dropdown-toggle:focus,
+.show>.btn-outline-success.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #1beb11;
+ border-color: #1beb11;
+ box-shadow: none;
+}
+
+.btn-outline-info {
+ color: #2CA8FF;
+ border-color: #2CA8FF;
+}
+
+.btn-outline-info:hover,
+.btn-outline-info:focus,
+.btn-outline-info:not(:disabled):not(.disabled):active,
+.btn-outline-info:not(:disabled):not(.disabled).active,
+.btn-outline-info:not(:disabled):not(.disabled):active:focus,
+.btn-outline-info:not(:disabled):not(.disabled).active:focus,
+.btn-outline-info:active:hover,
+.btn-outline-info.active:hover,
+.show>.btn-outline-info.dropdown-toggle,
+.show>.btn-outline-info.dropdown-toggle:focus,
+.show>.btn-outline-info.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #4bb5ff;
+ border-color: #4bb5ff;
+ box-shadow: none;
+}
+
+.btn-outline-warning {
+ color: #FFB236;
+ border-color: #FFB236;
+}
+
+.btn-outline-warning:hover,
+.btn-outline-warning:focus,
+.btn-outline-warning:not(:disabled):not(.disabled):active,
+.btn-outline-warning:not(:disabled):not(.disabled).active,
+.btn-outline-warning:not(:disabled):not(.disabled):active:focus,
+.btn-outline-warning:not(:disabled):not(.disabled).active:focus,
+.btn-outline-warning:active:hover,
+.btn-outline-warning.active:hover,
+.show>.btn-outline-warning.dropdown-toggle,
+.show>.btn-outline-warning.dropdown-toggle:focus,
+.show>.btn-outline-warning.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #ffbe55;
+ border-color: #ffbe55;
+ box-shadow: none;
+}
+
+.btn-outline-danger {
+ color: #FF3636;
+ border-color: #FF3636;
+}
+
+.btn-outline-danger:hover,
+.btn-outline-danger:focus,
+.btn-outline-danger:not(:disabled):not(.disabled):active,
+.btn-outline-danger:not(:disabled):not(.disabled).active,
+.btn-outline-danger:not(:disabled):not(.disabled):active:focus,
+.btn-outline-danger:not(:disabled):not(.disabled).active:focus,
+.btn-outline-danger:active:hover,
+.btn-outline-danger.active:hover,
+.show>.btn-outline-danger.dropdown-toggle,
+.show>.btn-outline-danger.dropdown-toggle:focus,
+.show>.btn-outline-danger.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #ff5555;
+ border-color: #ff5555;
+ box-shadow: none;
+}
+
+.btn-outline-default {
+ color: #888888;
+ border-color: #888888;
+}
+
+.btn-outline-default:hover,
+.btn-outline-default:focus,
+.btn-outline-default:not(:disabled):not(.disabled):active,
+.btn-outline-default:not(:disabled):not(.disabled).active,
+.btn-outline-default:not(:disabled):not(.disabled):active:focus,
+.btn-outline-default:not(:disabled):not(.disabled).active:focus,
+.btn-outline-default:active:hover,
+.btn-outline-default.active:hover,
+.show>.btn-outline-default.dropdown-toggle,
+.show>.btn-outline-default.dropdown-toggle:focus,
+.show>.btn-outline-default.dropdown-toggle:hover {
+ background-color: transparent;
+ color: #979797;
+ border-color: #979797;
+ box-shadow: none;
+}
+
+.btn-round {
+ border-width: 1px;
+ border-radius: 30px !important;
+ padding: 11px 23px;
+}
+
+.btn-round[class*="btn-outline-"] {
+ padding: 10px 22px;
+}
+
+[class*="btn-outline-"] {
+ border: 1px solid;
+ padding: 10px 22px;
+ background-color: transparent;
+}
+
+[class*="btn-outline-"].disabled,
+[class*="btn-outline-"].disabled:hover,
+[class*="btn-outline-"].disabled:focus,
+[class*="btn-outline-"].disabled.focus,
+[class*="btn-outline-"].disabled:active,
+[class*="btn-outline-"].disabled.active,
+[class*="btn-outline-"]:disabled,
+[class*="btn-outline-"]:disabled:hover,
+[class*="btn-outline-"]:disabled:focus,
+[class*="btn-outline-"]:disabled.focus,
+[class*="btn-outline-"]:disabled:active,
+[class*="btn-outline-"]:disabled.active,
+[class*="btn-outline-"][disabled],
+[class*="btn-outline-"][disabled]:hover,
+[class*="btn-outline-"][disabled]:focus,
+[class*="btn-outline-"][disabled].focus,
+[class*="btn-outline-"][disabled]:active,
+[class*="btn-outline-"][disabled].active,
+fieldset[disabled] [class*="btn-outline-"],
+fieldset[disabled] [class*="btn-outline-"]:hover,
+fieldset[disabled] [class*="btn-outline-"]:focus,
+fieldset[disabled] [class*="btn-outline-"].focus,
+fieldset[disabled] [class*="btn-outline-"]:active,
+fieldset[disabled] [class*="btn-outline-"].active,
+.btn-link.disabled,
+.btn-link.disabled:hover,
+.btn-link.disabled:focus,
+.btn-link.disabled.focus,
+.btn-link.disabled:active,
+.btn-link.disabled.active,
+.btn-link:disabled,
+.btn-link:disabled:hover,
+.btn-link:disabled:focus,
+.btn-link:disabled.focus,
+.btn-link:disabled:active,
+.btn-link:disabled.active,
+.btn-link[disabled],
+.btn-link[disabled]:hover,
+.btn-link[disabled]:focus,
+.btn-link[disabled].focus,
+.btn-link[disabled]:active,
+.btn-link[disabled].active,
+fieldset[disabled] .btn-link,
+fieldset[disabled] .btn-link:hover,
+fieldset[disabled] .btn-link:focus,
+fieldset[disabled] .btn-link.focus,
+fieldset[disabled] .btn-link:active,
+fieldset[disabled] .btn-link.active {
+ background-color: transparent;
+}
+
+.btn-lg {
+ font-size: 1em;
+ border-radius: 0.25rem;
+ padding: 15px 48px;
+}
+
+.btn-lg[class*="btn-outline-"] {
+ padding: 14px 47px;
+}
+
+.btn-sm {
+ font-size: 14px;
+ border-radius: 0.1875rem;
+ padding: 5px 15px;
+}
+
+.btn-sm[class*="btn-outline-"] {
+ padding: 4px 14px;
+}
+
+.btn-link {
+ border: 0;
+ padding: 0.5rem 0.7rem;
+ background-color: transparent;
+}
+
+.btn-wd {
+ min-width: 140px;
+}
+
+.btn-group.select {
+ width: 100%;
+}
+
+.btn-group.select .btn {
+ text-align: left;
+}
+
+.btn-group.select .caret {
+ position: absolute;
+ top: 50%;
+ margin-top: -1px;
+ right: 8px;
+}
+
+.btn-facebook,
+.btn-facebook:hover,
+.btn-facebookfocus,
+.btn-facebook:active,
+.btn-facebook:active:focus {
+ color: #3b5998 !important;
+}
+
+.btn-twitter,
+.btn-twitter:hover,
+.btn-twitterfocus,
+.btn-twitter:active,
+.btn-twitter:active:focus {
+ color: #55acee !important;
+}
+
+.btn-google,
+.btn-google:hover,
+.btn-googlefocus,
+.btn-google:active,
+.btn-google:active:focus {
+ color: #dd4b39 !important;
+}
+
+.btn-github,
+.btn-github:hover,
+.btn-githubfocus,
+.btn-github:active,
+.btn-github:active:focus {
+ color: #333333 !important;
+}
+
+.btn-linkedin,
+.btn-linkedin:hover,
+.btn-linkedinfocus,
+.btn-linkedin:active,
+.btn-linkedin:active:focus {
+ color: #0077B5 !important;
+}
+
+.form-control::-moz-placeholder {
+ color: #888888;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.form-control:-moz-placeholder {
+ color: #888888;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #888888;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.form-control:-ms-input-placeholder {
+ color: #888888;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.form-control {
+ background-color: transparent;
+ border: 1px solid #E3E3E3;
+ border-radius: 30px;
+ color: #2c2c2c;
+ height: auto;
+ line-height: normal;
+ font-size: 0.8571em;
+ -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-success .form-control {
+ border-color: #E3E3E3;
+}
+
+.form-control:focus {
+ border: 1px solid #f96332;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: 0 !important;
+ color: #2c2c2c;
+}
+
+.form-control:focus+.input-group-text,
+.form-control:focus~.input-group-text {
+ border: 1px solid #f96332;
+ border-left: none;
+ background-color: transparent;
+}
+
+.has-success .form-control,
+.has-error .form-control,
+.has-success .form-control:focus,
+.has-error .form-control:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-success .form-control:focus {
+ border-color: #1be611;
+}
+
+.has-danger .form-control.form-control-success,
+.has-danger .form-control.form-control-danger,
+.has-success .form-control.form-control-success,
+.has-success .form-control.form-control-danger {
+ background-image: none;
+}
+
+.has-danger .form-control {
+ border-color: #ffcfcf;
+ color: #FF3636;
+ background-color: rgba(222, 222, 222, 0.1);
+}
+
+.has-danger .form-control:focus {
+ background-color: #FFFFFF;
+}
+
+.form-control+.form-control-feedback {
+ border-radius: 0.25rem;
+ font-size: 14px;
+ margin-top: -7px;
+ position: absolute;
+ right: 10px;
+ top: 50%;
+ vertical-align: middle;
+}
+
+.open .form-control {
+ border-radius: 0.25rem 0.25rem 0 0;
+ border-bottom-color: transparent;
+}
+
+.has-success:after,
+.has-danger:after {
+ font-family: 'Nucleo Outline';
+ content: "\ea22";
+ display: inline-block;
+ position: absolute;
+ right: 20px;
+ top: 12px;
+ color: #18ce0f;
+ font-size: 11px;
+}
+
+.has-success.input-lg:after,
+.has-danger.input-lg:after {
+ font-size: 13px;
+ top: 13px;
+}
+
+.has-danger:after {
+ content: "\ea53";
+ color: #FF3636;
+}
+
+.form-group.no-border.input-lg .input-group-text,
+.input-group.no-border.input-lg .input-group-text {
+ padding: 15px 0 15px 19px;
+}
+
+.form-group.no-border.input-lg .form-control,
+.input-group.no-border.input-lg .form-control {
+ padding: 15px 19px;
+}
+
+.form-group.no-border.input-lg .form-control+.input-group-text,
+.input-group.no-border.input-lg .form-control+.input-group-text {
+ padding: 15px 19px 15px 0;
+}
+
+.form-group.input-lg .form-control,
+.input-group.input-lg .form-control {
+ padding: 14px 18px;
+}
+
+.form-group.input-lg .form-control+.input-group-text,
+.input-group.input-lg .form-control+.input-group-text {
+ padding: 14px 18px 14px 0;
+}
+
+.form-group.input-lg .input-group-text,
+.input-group.input-lg .input-group-text {
+ padding: 14px 0 15px 18px;
+}
+
+.form-group.input-lg .input-group-text+.form-control,
+.input-group.input-lg .input-group-text+.form-control {
+ padding: 15px 18px 15px 16px;
+}
+
+.form-group.no-border .form-control,
+.input-group.no-border .form-control {
+ padding: 11px 19px;
+}
+
+.form-group.no-border .form-control+.input-group-text,
+.input-group.no-border .form-control+.input-group-text {
+ padding: 11px 19px 11px 0;
+}
+
+.form-group.no-border .input-group-text,
+.input-group.no-border .input-group-text {
+ padding: 11px 0 11px 19px;
+}
+
+.form-group .form-control,
+.input-group .form-control {
+ padding: 10px 18px 10px 18px;
+}
+
+.form-group .form-control+.input-group-text,
+.input-group .form-control+.input-group-text {
+ padding: 10px 18px 10px 0;
+}
+
+.form-group .input-group-text,
+.input-group .input-group-text {
+ padding: 10px 0 10px 18px;
+}
+
+.form-group .input-group-text+.form-control,
+.form-group .input-group-text~.form-control,
+.input-group .input-group-text+.form-control,
+.input-group .input-group-text~.form-control {
+ padding: 10px 19px 11px 16px;
+}
+
+.form-group.no-border .form-control,
+.form-group.no-border .form-control+.input-group-text,
+.input-group.no-border .form-control,
+.input-group.no-border .form-control+.input-group-text {
+ background-color: rgba(222, 222, 222, 0.3);
+ border: medium none;
+}
+
+.form-group.no-border .form-control:focus,
+.form-group.no-border .form-control:active,
+.form-group.no-border .form-control:active,
+.form-group.no-border .form-control+.input-group-text:focus,
+.form-group.no-border .form-control+.input-group-text:active,
+.form-group.no-border .form-control+.input-group-text:active,
+.input-group.no-border .form-control:focus,
+.input-group.no-border .form-control:active,
+.input-group.no-border .form-control:active,
+.input-group.no-border .form-control+.input-group-text:focus,
+.input-group.no-border .form-control+.input-group-text:active,
+.input-group.no-border .form-control+.input-group-text:active {
+ border: medium none;
+ background-color: rgba(222, 222, 222, 0.5);
+}
+
+.form-group.no-border .form-control:focus+.input-group-text,
+.input-group.no-border .form-control:focus+.input-group-text {
+ background-color: rgba(222, 222, 222, 0.5);
+}
+
+.form-group.no-border .input-group-prepend .input-group-text,
+.input-group.no-border .input-group-prepend .input-group-text {
+ background-color: rgba(222, 222, 222, 0.3);
+ border: none;
+ border-left: transparent !important;
+}
+
+.form-group.no-border.input-group-focus.no-border .input-group-text,
+.input-group.no-border.input-group-focus.no-border .input-group-text {
+ background-color: rgba(222, 222, 222, 0.5);
+}
+
+.has-error .form-control-feedback,
+.has-error .control-label {
+ color: #FF3636;
+}
+
+.has-success .form-control-feedback,
+.has-success .control-label {
+ color: #18ce0f;
+}
+
+.input-group-text {
+ background-color: #FFFFFF;
+ border: 1px solid #E3E3E3;
+ border-radius: 30px;
+ color: #555555;
+ -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+ transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
+}
+
+.input-group-focus .input-group-text {
+ background-color: #FFFFFF;
+ border-color: #f96332;
+}
+
+.has-success .input-group-text,
+.has-danger .input-group-text {
+ background-color: #FFFFFF;
+}
+
+.has-danger .form-control:focus+.input-group-text {
+ color: #FF3636;
+}
+
+.has-success .form-control:focus+.input-group-text {
+ color: #18ce0f;
+}
+
+.input-group-text+.form-control,
+.input-group-text~.form-control {
+ padding: -0.5rem 0.7rem;
+ padding-left: 18px;
+}
+
+.input-group-text i {
+ width: 17px;
+}
+
+.input-group,
+.form-group {
+ margin-bottom: 10px;
+ position: relative;
+}
+
+.input-group[disabled] .input-group-text {
+ background-color: #E3E3E3;
+}
+
+.input-group .input-group-prepend,
+.form-group .input-group-prepend {
+ margin-right: 0;
+}
+
+.input-group .input-group-prepend .input-group-text,
+.form-group .input-group-prepend .input-group-text {
+ border-left: 1px solid #E3E3E3;
+}
+
+.input-group .input-group-append .input-group-text,
+.form-group .input-group-append .input-group-text {
+ border-right: 1px solid #E3E3E3;
+ padding: 10px 18px 10px 0;
+}
+
+.input-group.input-group-focus .input-group-prepend .input-group-text,
+.form-group.input-group-focus .input-group-prepend .input-group-text {
+ border-left: 1px solid #f96332;
+}
+
+.input-group.input-group-focus .input-group-append .input-group-text,
+.form-group.input-group-focus .input-group-append .input-group-text {
+ border-right: 1px solid #f96332;
+}
+
+.input-group.input-group-focus.no-border .input-group-prepend .input-group-text,
+.form-group.input-group-focus.no-border .input-group-prepend .input-group-text {
+ border-left: transparent;
+}
+
+.input-group .form-control:first-child,
+.input-group-text:first-child,
+.input-group-btn:first-child>.dropdown-toggle,
+.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) {
+ border-right: 0 none;
+}
+
+.input-group .form-control:last-child,
+.input-group-text:last-child,
+.input-group-btn:last-child>.dropdown-toggle,
+.input-group-btn:first-child>.btn:not(:first-child) {
+ border-left: 0 none;
+}
+
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #E3E3E3;
+ color: #888888;
+ cursor: not-allowed;
+}
+
+.input-group-btn .btn {
+ border-width: 1px;
+ padding: 11px 0.7rem;
+}
+
+.input-group-btn .btn-default:not(.btn-fill) {
+ border-color: #DDDDDD;
+}
+
+.input-group-btn:last-child>.btn {
+ margin-left: 0;
+}
+
+textarea.form-control {
+ max-width: 100%;
+ max-height: 80px;
+ padding: 10px 10px 0 0;
+ resize: none;
+ border: none;
+ border-bottom: 1px solid #E3E3E3;
+ border-radius: 0;
+ line-height: 2;
+}
+
+textarea.form-control:focus,
+textarea.form-control:active {
+ border-left: none;
+ border-top: none;
+ border-right: none;
+}
+
+.has-success.form-group .form-control,
+.has-success.form-group.no-border .form-control,
+.has-danger.form-group .form-control,
+.has-danger.form-group.no-border .form-control {
+ padding-right: 40px;
+}
+
+.form.form-newsletter .form-group {
+ float: left;
+ width: 78%;
+ margin-right: 2%;
+ margin-top: 9px;
+}
+
+.input-group .input-group-btn {
+ padding: 0 12px;
+}
+
+.form-group input[type=file] {
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 100;
+}
+
+.form-check {
+ margin-top: .65rem;
+ padding-left: 0;
+}
+
+.form-check .form-check-label {
+ display: inline-block;
+ position: relative;
+ cursor: pointer;
+ padding-left: 35px;
+ line-height: 26px;
+ margin-bottom: 0;
+ -webkit-transition: color 0.3s linear;
+ -moz-transition: color 0.3s linear;
+ -o-transition: color 0.3s linear;
+ -ms-transition: color 0.3s linear;
+ transition: color 0.3s linear;
+}
+
+.radio .form-check-sign {
+ padding-left: 28px;
+}
+
+.form-check .form-check-sign::before,
+.form-check .form-check-sign::after {
+ content: " ";
+ display: inline-block;
+ position: absolute;
+ width: 26px;
+ height: 26px;
+ left: 0;
+ cursor: pointer;
+ border-radius: 3px;
+ top: 0;
+ background-color: transparent;
+ border: 1px solid #E3E3E3;
+ -webkit-transition: opacity 0.3s linear;
+ -moz-transition: opacity 0.3s linear;
+ -o-transition: opacity 0.3s linear;
+ -ms-transition: opacity 0.3s linear;
+ transition: opacity 0.3s linear;
+}
+
+.form-check .form-check-sign::after {
+ font-family: 'Nucleo Outline';
+ content: "\ea22";
+ top: 0px;
+ text-align: center;
+ font-size: 14px;
+ opacity: 0;
+ color: #555555;
+ border: 0;
+ background-color: inherit;
+}
+
+.form-check.disabled .form-check-label,
+.form-check.disabled .form-check-label {
+ color: #9A9A9A;
+ opacity: .5;
+ cursor: not-allowed;
+}
+
+.form-check input[type="checkbox"],
+.radio input[type="radio"] {
+ opacity: 0;
+ position: absolute;
+ visibility: hidden;
+}
+
+.form-check input[type="checkbox"]:checked+.form-check-sign::after {
+ opacity: 1;
+}
+
+.form-control input[type="checkbox"]:disabled+.form-check-sign::before,
+.checkbox input[type="checkbox"]:disabled+.form-check-sign::after {
+ cursor: not-allowed;
+}
+
+.form-check input[type="checkbox"]:disabled+.form-check-sign,
+.form-check input[type="radio"]:disabled+.form-check-sign {
+ pointer-events: none;
+}
+
+.form-check-radio .form-check-sign::before,
+.form-check-radio .form-check-sign::after {
+ content: " ";
+ width: 20px;
+ height: 20px;
+ border-radius: 50%;
+ border: 1px solid #E3E3E3;
+ display: inline-block;
+ position: absolute;
+ left: 3px;
+ top: 3px;
+ padding: 1px;
+ -webkit-transition: opacity 0.3s linear;
+ -moz-transition: opacity 0.3s linear;
+ -o-transition: opacity 0.3s linear;
+ -ms-transition: opacity 0.3s linear;
+ transition: opacity 0.3s linear;
+}
+
+.form-check-radio input[type="radio"]+.form-check-sign:after,
+.form-check-radio input[type="radio"] {
+ opacity: 0;
+}
+
+.form-check-radio input[type="radio"]:checked+.form-check-sign::after {
+ width: 4px;
+ height: 4px;
+ background-color: #555555;
+ border-color: #555555;
+ top: 11px;
+ left: 11px;
+ opacity: 1;
+}
+
+.form-check-radio input[type="radio"]:checked+.form-check-sign::after {
+ opacity: 1;
+}
+
+.form-check-radio input[type="radio"]:disabled+.form-check-sign {
+ color: #9A9A9A;
+}
+
+.form-check-radio input[type="radio"]:disabled+.form-check-sign::before,
+.form-check-radio input[type="radio"]:disabled+.form-check-sign::after {
+ color: #9A9A9A;
+}
+
+.progress-container {
+ position: relative;
+}
+
+.progress-container+.progress-container,
+.progress-container~.progress-container {
+ margin-top: 15px;
+}
+
+.progress-container .progress-badge {
+ color: #888888;
+ font-size: 0.8571em;
+ text-transform: uppercase;
+}
+
+.progress-container .progress {
+ height: 1px;
+ border-radius: 0;
+ box-shadow: none;
+ background: rgba(222, 222, 222, 0.8);
+ margin-top: 14px;
+}
+
+.progress-container .progress .progress-bar {
+ box-shadow: none;
+ background-color: #888888;
+}
+
+.progress-container .progress .progress-value {
+ position: absolute;
+ top: 2px;
+ right: 0;
+ color: #888888;
+ font-size: 0.8571em;
+}
+
+.progress-container.progress-neutral .progress {
+ background: rgba(255, 255, 255, 0.3);
+}
+
+.progress-container.progress-neutral .progress-bar {
+ background: #FFFFFF;
+}
+
+.progress-container.progress-neutral .progress-value,
+.progress-container.progress-neutral .progress-badge {
+ color: #FFFFFF;
+}
+
+.progress-container.progress-primary .progress {
+ background: rgba(249, 99, 50, 0.3);
+}
+
+.progress-container.progress-primary .progress-bar {
+ background: #f96332;
+}
+
+.progress-container.progress-primary .progress-value,
+.progress-container.progress-primary .progress-badge {
+ color: #f96332;
+}
+
+.progress-container.progress-info .progress {
+ background: rgba(44, 168, 255, 0.3);
+}
+
+.progress-container.progress-info .progress-bar {
+ background: #2CA8FF;
+}
+
+.progress-container.progress-info .progress-value,
+.progress-container.progress-info .progress-badge {
+ color: #2CA8FF;
+}
+
+.progress-container.progress-success .progress {
+ background: rgba(24, 206, 15, 0.3);
+}
+
+.progress-container.progress-success .progress-bar {
+ background: #18ce0f;
+}
+
+.progress-container.progress-success .progress-value,
+.progress-container.progress-success .progress-badge {
+ color: #18ce0f;
+}
+
+.progress-container.progress-warning .progress {
+ background: rgba(255, 178, 54, 0.3);
+}
+
+.progress-container.progress-warning .progress-bar {
+ background: #FFB236;
+}
+
+.progress-container.progress-warning .progress-value,
+.progress-container.progress-warning .progress-badge {
+ color: #FFB236;
+}
+
+.progress-container.progress-danger .progress {
+ background: rgba(255, 54, 54, 0.3);
+}
+
+.progress-container.progress-danger .progress-bar {
+ background: #FF3636;
+}
+
+.progress-container.progress-danger .progress-value,
+.progress-container.progress-danger .progress-badge {
+ color: #FF3636;
+}
+
+/* badges */
+
+.badge {
+ border-radius: 8px;
+ padding: 4px 8px;
+ text-transform: uppercase;
+ font-size: 0.7142em;
+ line-height: 12px;
+ background-color: transparent;
+ border: 1px solid;
+ margin-bottom: 5px;
+ color: #FFFFFF;
+ border-radius: 0.875rem;
+}
+
+.badge:hover,
+.badge:focus {
+ text-decoration: none;
+}
+
+.badge-icon {
+ padding: 0.4em 0.55em;
+}
+
+.badge-icon i {
+ font-size: 0.8em;
+}
+
+.badge-default,
+.badge-default[href]:focus,
+.badge-default[href]:hover {
+ border-color: #888888;
+ background-color: #888888;
+ color: #FFFFFF;
+}
+
+.badge-primary,
+.badge-primary[href]:focus,
+.badge-primary[href]:hover {
+ border-color: #f96332;
+ background-color: #f96332;
+ color: #FFFFFF;
+}
+
+.badge-info,
+.badge-info[href]:focus,
+.badge-info[href]:hover {
+ border-color: #2CA8FF;
+ background-color: #2CA8FF;
+ color: #FFFFFF;
+}
+
+.badge-success,
+.badge-success[href]:focus,
+.badge-success[href]:hover {
+ border-color: #18ce0f;
+ background-color: #18ce0f;
+ color: #FFFFFF;
+}
+
+.badge-warning,
+.badge-warning[href]:focus,
+.badge-warning[href]:hover {
+ border-color: #FFB236;
+ background-color: #FFB236;
+ color: #FFFFFF;
+}
+
+.badge-danger,
+.badge-danger[href]:focus,
+.badge-danger[href]:hover {
+ border-color: #FF3636;
+ background-color: #FF3636;
+ color: #FFFFFF;
+}
+
+.badge-neutral {
+ color: inherit !important;
+}
+
+.badge-neutral,
+.badge-neutral[href]:focus,
+.badge-neutral[href]:hover {
+ border-color: #FFFFFF;
+ background-color: #FFFFFF;
+ color: #FFFFFF;
+}
+
+.pagination .page-item .page-link {
+ border: 0;
+ border-radius: 30px !important;
+ transition: all .3s;
+ padding: 0px 11px;
+ margin: 0 3px;
+ min-width: 30px;
+ text-align: center;
+ box-shadow: none;
+ height: 30px;
+ line-height: 30px;
+ color: #2c2c2c;
+ cursor: pointer;
+ font-size: 14px;
+ text-transform: uppercase;
+ background: transparent;
+}
+
+.pagination .page-item .page-link:hover,
+.pagination .page-item .page-link:focus {
+ color: #2c2c2c;
+ background-color: rgba(222, 222, 222, 0.3);
+ border: none;
+}
+
+.pagination .arrow-margin-left,
+.pagination .arrow-margin-right {
+ position: absolute;
+}
+
+.pagination .arrow-margin-right {
+ right: 0;
+}
+
+.pagination .arrow-margin-left {
+ left: 0;
+}
+
+.pagination .page-item.active>.page-link {
+ color: #E3E3E3;
+ box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2);
+}
+
+.pagination .page-item.active>.page-link,
+.pagination .page-item.active>.page-link:focus,
+.pagination .page-item.active>.page-link:hover {
+ background-color: #888888;
+ border-color: #888888;
+ color: #FFFFFF;
+}
+
+.pagination .page-item.disabled>.page-link {
+ opacity: .5;
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.pagination.pagination-info .page-item.active>.page-link,
+.pagination.pagination-info .page-item.active>.page-link:focus,
+.pagination.pagination-info .page-item.active>.page-link:hover {
+ background-color: #2CA8FF;
+ border-color: #2CA8FF;
+}
+
+.pagination.pagination-success .page-item.active>.page-link,
+.pagination.pagination-success .page-item.active>.page-link:focus,
+.pagination.pagination-success .page-item.active>.page-link:hover {
+ background-color: #18ce0f;
+ border-color: #18ce0f;
+}
+
+.pagination.pagination-primary .page-item.active>.page-link,
+.pagination.pagination-primary .page-item.active>.page-link:focus,
+.pagination.pagination-primary .page-item.active>.page-link:hover {
+ background-color: #f96332;
+ border-color: #f96332;
+}
+
+.pagination.pagination-warning .page-item.active>.page-link,
+.pagination.pagination-warning .page-item.active>.page-link:focus,
+.pagination.pagination-warning .page-item.active>.page-link:hover {
+ background-color: #FFB236;
+ border-color: #FFB236;
+}
+
+.pagination.pagination-danger .page-item.active>.page-link,
+.pagination.pagination-danger .page-item.active>.page-link:focus,
+.pagination.pagination-danger .page-item.active>.page-link:hover {
+ background-color: #FF3636;
+ border-color: #FF3636;
+}
+
+.pagination.pagination-neutral .page-item>.page-link {
+ color: #FFFFFF;
+}
+
+.pagination.pagination-neutral .page-item>.page-link:focus,
+.pagination.pagination-neutral .page-item>.page-link:hover {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.pagination.pagination-neutral .page-item.active>.page-link,
+.pagination.pagination-neutral .page-item.active>.page-link:focus,
+.pagination.pagination-neutral .page-item.active>.page-link:hover {
+ background-color: #FFFFFF;
+ border-color: #FFFFFF;
+ color: #f96332;
+}
+
+.pagination-container {
+ display: flex;
+ align-items: center;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-weight: 400;
+}
+
+small {
+ font-size: 60%;
+}
+
+a {
+ color: #f96332;
+}
+
+a:hover,
+a:focus {
+ color: #f96332;
+}
+
+h1,
+.h1 {
+ font-size: 3.5em;
+ line-height: 1.15;
+ margin-bottom: 30px;
+}
+
+h1 small,
+.h1 small {
+ font-weight: 700;
+ text-transform: uppercase;
+ opacity: .8;
+}
+
+h2,
+.h2 {
+ font-size: 2.5em;
+ margin-bottom: 30px;
+}
+
+h3,
+.h3 {
+ font-size: 1.825em;
+ margin-bottom: 30px;
+ line-height: 1.4em;
+}
+
+h4,
+.h4 {
+ font-size: 1.5em;
+ line-height: 1.45em;
+ margin-top: 30px;
+ margin-bottom: 15px;
+}
+
+h4+.category,
+h4.title+.category,
+.h4+.category,
+.h4.title+.category {
+ margin-top: -5px;
+}
+
+h5,
+.h5 {
+ font-size: 1.3em;
+ line-height: 1.4em;
+ margin-bottom: 15px;
+}
+
+h5.category,
+.h5.category {
+ font-weight: 400;
+}
+
+h6,
+.h6 {
+ font-size: 0.9em;
+ font-weight: 700;
+ text-transform: uppercase;
+}
+
+p {
+ line-height: 1.61em;
+ font-weight: 300;
+ font-size: 1.2em;
+}
+
+.title {
+ font-weight: 700;
+ padding-top: 30px;
+}
+
+.title.title-up {
+ text-transform: uppercase;
+}
+
+.title.title-up a {
+ color: #2c2c2c;
+ text-decoration: none;
+}
+
+.title+.category {
+ margin-top: -25px;
+}
+
+.description,
+.card-description,
+.footer-big p {
+ color: #9A9A9A;
+ font-weight: 300;
+}
+
+.category {
+ text-transform: capitalize;
+ font-weight: 700;
+ color: #9A9A9A;
+}
+
+.text-primary {
+ color: #f96332 !important;
+}
+
+.text-info {
+ color: #2CA8FF !important;
+}
+
+.text-success {
+ color: #18ce0f !important;
+}
+
+.text-warning {
+ color: #FFB236 !important;
+}
+
+.text-danger {
+ color: #FF3636 !important;
+}
+
+.text-black {
+ color: #444;
+}
+
+.blockquote {
+ border-left: none;
+ border: 1px solid #888888;
+ padding: 20px;
+ font-size: 1.1em;
+ line-height: 1.8;
+}
+
+.blockquote small {
+ color: #888888;
+ font-size: 0.8571em;
+ text-transform: uppercase;
+}
+
+.blockquote.blockquote-primary {
+ border-color: #f96332;
+ color: #f96332;
+}
+
+.blockquote.blockquote-primary small {
+ color: #f96332;
+}
+
+.blockquote.blockquote-danger {
+ border-color: #FF3636;
+ color: #FF3636;
+}
+
+.blockquote.blockquote-danger small {
+ color: #FF3636;
+}
+
+.blockquote.blockquote-white {
+ border-color: rgba(255, 255, 255, 0.8);
+ color: #FFFFFF;
+}
+
+.blockquote.blockquote-white small {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+body {
+ color: #2c2c2c;
+ font-size: 14px;
+ font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
+ overflow-x: hidden;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+}
+
+.main {
+ position: relative;
+ background: #FFFFFF;
+}
+
+/* Animations */
+
+.nav-pills .nav-link,
+.nav-item .nav-link,
+.navbar,
+.nav-tabs .nav-link,
+.tag,
+.tag [data-role="remove"] {
+ -webkit-transition: all 300ms ease 0s;
+ -moz-transition: all 300ms ease 0s;
+ -o-transition: all 300ms ease 0s;
+ -ms-transition: all 300ms ease 0s;
+ transition: all 300ms ease 0s;
+}
+
+.card a,
+.bootstrap-switch-label:before {
+ -webkit-transition: all 150ms ease 0s;
+ -moz-transition: all 150ms ease 0s;
+ -o-transition: all 150ms ease 0s;
+ -ms-transition: all 150ms ease 0s;
+ transition: all 150ms ease 0s;
+}
+
+.dropdown-toggle:after,
+[data-toggle="collapse"][data-parent="#accordion"] i {
+ -webkit-transition: transform 150ms ease 0s;
+ -moz-transition: transform 150ms ease 0s;
+ -o-transition: transform 150ms ease 0s;
+ -ms-transition: all 150ms ease 0s;
+ transition: transform 150ms ease 0s;
+}
+
+.dropdown-toggle[aria-expanded="true"]:after,
+[data-toggle="collapse"][data-parent="#accordion"][aria-expanded="true"] i {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.button-bar {
+ display: block;
+ position: relative;
+ width: 22px;
+ height: 1px;
+ border-radius: 1px;
+ background: #FFFFFF;
+}
+
+.button-bar+.button-bar {
+ margin-top: 7px;
+}
+
+.button-bar:nth-child(2) {
+ width: 17px;
+}
+
+.separator-line {
+ height: 2px;
+ width: 44px;
+ background-color: #888888;
+ margin: 20px auto;
+}
+
+.separator-line.separator-primary {
+ background-color: #f96332;
+}
+
+.section-space {
+ height: 62px;
+ display: block;
+}
+
+.pull-left {
+ float: left;
+}
+
+.pull-right {
+ float: right;
+}
+
+.title-up {
+ text-transform: uppercase;
+}
+
+.nav-pills.nav-pills-just-icons .nav-item .nav-link {
+ text-align: center;
+ border-radius: 50%;
+ height: 80px;
+ width: 80px;
+ padding: 0;
+ max-width: 80px;
+ min-width: auto;
+ margin-bottom: 4px;
+}
+
+.nav-pills.nav-pills-just-icons .nav-item .nav-link i {
+ line-height: 80px;
+}
+
+.nav-pills:not(.flex-column) .nav-item:not(:last-child) .nav-link {
+ margin-right: 19px;
+}
+
+.nav-pills .nav-item .nav-link {
+ padding: 10px 23px;
+ background-color: rgba(222, 222, 222, 0.3);
+ min-width: 100px;
+ font-weight: 400;
+ text-align: center;
+ color: #444;
+}
+
+.nav-pills .nav-item .nav-link:hover {
+ background-color: rgba(222, 222, 222, 0.3);
+}
+
+.nav-pills .nav-item .nav-link.active,
+.nav-pills .nav-item .nav-link.active:focus,
+.nav-pills .nav-item .nav-link.active:hover {
+ background-color: #9A9A9A;
+ color: #FFFFFF;
+ box-shadow: 0px 5px 35px 0px rgba(0, 0, 0, 0.3);
+}
+
+.nav-pills .nav-item .nav-link.disabled,
+.nav-pills .nav-item .nav-link:disabled,
+.nav-pills .nav-item .nav-link[disabled] {
+ opacity: .5;
+}
+
+.nav-pills .nav-item i {
+ display: block;
+ line-height: 60px;
+ font-size: 24px;
+}
+
+.nav-pills.nav-pills-neutral .nav-item .nav-link {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.nav-pills.nav-pills-neutral .nav-item .nav-link.active,
+.nav-pills.nav-pills-neutral .nav-item .nav-link.active:focus,
+.nav-pills.nav-pills-neutral .nav-item .nav-link.active:hover {
+ background-color: #FFFFFF;
+ color: #f96332;
+}
+
+.nav-pills.nav-pills-primary .nav-item .nav-link.active,
+.nav-pills.nav-pills-primary .nav-item .nav-link.active:focus,
+.nav-pills.nav-pills-primary .nav-item .nav-link.active:hover {
+ background-color: #f96332;
+}
+
+.nav-pills.nav-pills-info .nav-item .nav-link.active,
+.nav-pills.nav-pills-info .nav-item .nav-link.active:focus,
+.nav-pills.nav-pills-info .nav-item .nav-link.active:hover {
+ background-color: #2CA8FF;
+}
+
+.nav-pills.nav-pills-success .nav-item .nav-link.active,
+.nav-pills.nav-pills-success .nav-item .nav-link.active:focus,
+.nav-pills.nav-pills-success .nav-item .nav-link.active:hover {
+ background-color: #18ce0f;
+}
+
+.nav-pills.nav-pills-warning .nav-item .nav-link.active,
+.nav-pills.nav-pills-warning .nav-item .nav-link.active:focus,
+.nav-pills.nav-pills-warning .nav-item .nav-link.active:hover {
+ background-color: #FFB236;
+}
+
+.nav-pills.nav-pills-danger .nav-item .nav-link.active,
+.nav-pills.nav-pills-danger .nav-item .nav-link.active:focus,
+.nav-pills.nav-pills-danger .nav-item .nav-link.active:hover {
+ background-color: #FF3636;
+}
+
+.tab-space {
+ padding: 20px 0 50px 0px;
+}
+
+.nav-align-center {
+ text-align: center;
+}
+
+.nav-align-center .nav-pills {
+ display: inline-flex;
+}
+
+/* --------------------------------
+
+Nucleo Outline Web Font - nucleoapp.com/
+License - nucleoapp.com/license/
+Created using IcoMoon - icomoon.io
+
+-------------------------------- */
+
+@font-face {
+ font-family: 'Nucleo Outline';
+ src: url("../fonts/nucleo-outline.eot");
+ src: url("../fonts/nucleo-outline.eot") format("embedded-opentype"), url("../fonts/nucleo-outline.woff2") format("woff2"), url("../fonts/nucleo-outline.woff") format("woff"), url("../fonts/nucleo-outline.ttf") format("truetype");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/*------------------------
+ base class definition
+-------------------------*/
+
+.now-ui-icons {
+ display: inline-block;
+ font: normal normal normal 14px/1 'Nucleo Outline';
+ font-size: inherit;
+ speak: none;
+ text-transform: none;
+ /* Better Font Rendering */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/*------------------------
+ change icon size
+-------------------------*/
+
+/*----------------------------------
+ add a square/circle background
+-----------------------------------*/
+
+.now-ui-icons.circle {
+ padding: 0.33333333em;
+ vertical-align: -16%;
+ background-color: #eee;
+}
+
+.now-ui-icons.circle {
+ border-radius: 50%;
+}
+
+/*------------------------
+ list icons
+-------------------------*/
+
+.nc-icon-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+
+.nc-icon-ul>li {
+ position: relative;
+}
+
+.nc-icon-ul>li>.now-ui-icons {
+ position: absolute;
+ left: -1.57142857em;
+ top: 0.14285714em;
+ text-align: center;
+}
+
+.nc-icon-ul>li>.now-ui-icons.circle {
+ top: -0.19047619em;
+ left: -1.9047619em;
+}
+
+/*------------------------
+ spinning icons
+-------------------------*/
+
+.now-ui-icons.spin {
+ -webkit-animation: nc-icon-spin 2s infinite linear;
+ -moz-animation: nc-icon-spin 2s infinite linear;
+ animation: nc-icon-spin 2s infinite linear;
+}
+
+@-webkit-keyframes nc-icon-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ }
+}
+
+@-moz-keyframes nc-icon-spin {
+ 0% {
+ -moz-transform: rotate(0deg);
+ }
+ 100% {
+ -moz-transform: rotate(360deg);
+ }
+}
+
+@keyframes nc-icon-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ -moz-transform: rotate(0deg);
+ -ms-transform: rotate(0deg);
+ -o-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ -moz-transform: rotate(360deg);
+ -ms-transform: rotate(360deg);
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+/*------------------------
+ rotated/flipped icons
+-------------------------*/
+
+/*------------------------
+ font icons
+-------------------------*/
+
+.now-ui-icons.ui-1_check:before {
+ content: "\ea22";
+}
+
+.now-ui-icons.ui-1_email-85:before {
+ content: "\ea2a";
+}
+
+.now-ui-icons.arrows-1_cloud-download-93:before {
+ content: "\ea21";
+}
+
+.now-ui-icons.arrows-1_cloud-upload-94:before {
+ content: "\ea24";
+}
+
+.now-ui-icons.arrows-1_minimal-down:before {
+ content: "\ea39";
+}
+
+.now-ui-icons.arrows-1_minimal-left:before {
+ content: "\ea3a";
+}
+
+.now-ui-icons.arrows-1_minimal-right:before {
+ content: "\ea3b";
+}
+
+.now-ui-icons.arrows-1_minimal-up:before {
+ content: "\ea3c";
+}
+
+.now-ui-icons.arrows-1_refresh-69:before {
+ content: "\ea44";
+}
+
+.now-ui-icons.arrows-1_share-66:before {
+ content: "\ea4c";
+}
+
+.now-ui-icons.business_badge:before {
+ content: "\ea09";
+}
+
+.now-ui-icons.business_bank:before {
+ content: "\ea0a";
+}
+
+.now-ui-icons.business_briefcase-24:before {
+ content: "\ea13";
+}
+
+.now-ui-icons.business_bulb-63:before {
+ content: "\ea15";
+}
+
+.now-ui-icons.business_chart-bar-32:before {
+ content: "\ea1e";
+}
+
+.now-ui-icons.business_chart-pie-36:before {
+ content: "\ea1f";
+}
+
+.now-ui-icons.business_globe:before {
+ content: "\ea2f";
+}
+
+.now-ui-icons.business_money-coins:before {
+ content: "\ea40";
+}
+
+.now-ui-icons.clothes_tie-bow:before {
+ content: "\ea5b";
+}
+
+.now-ui-icons.design_vector:before {
+ content: "\ea61";
+}
+
+.now-ui-icons.design_app:before {
+ content: "\ea08";
+}
+
+.now-ui-icons.design_bullet-list-67:before {
+ content: "\ea14";
+}
+
+.now-ui-icons.design_image:before {
+ content: "\ea33";
+}
+
+.now-ui-icons.design_palette:before {
+ content: "\ea41";
+}
+
+.now-ui-icons.design_scissors:before {
+ content: "\ea4a";
+}
+
+.now-ui-icons.design-2_html5:before {
+ content: "\ea32";
+}
+
+.now-ui-icons.design-2_ruler-pencil:before {
+ content: "\ea48";
+}
+
+.now-ui-icons.emoticons_satisfied:before {
+ content: "\ea49";
+}
+
+.now-ui-icons.files_box:before {
+ content: "\ea12";
+}
+
+.now-ui-icons.files_paper:before {
+ content: "\ea43";
+}
+
+.now-ui-icons.files_single-copy-04:before {
+ content: "\ea52";
+}
+
+.now-ui-icons.health_ambulance:before {
+ content: "\ea07";
+}
+
+.now-ui-icons.loader_gear:before {
+ content: "\ea4e";
+}
+
+.now-ui-icons.loader_refresh:before {
+ content: "\ea44";
+}
+
+.now-ui-icons.location_bookmark:before {
+ content: "\ea10";
+}
+
+.now-ui-icons.location_compass-05:before {
+ content: "\ea25";
+}
+
+.now-ui-icons.location_map-big:before {
+ content: "\ea3d";
+}
+
+.now-ui-icons.location_pin:before {
+ content: "\ea47";
+}
+
+.now-ui-icons.location_world:before {
+ content: "\ea63";
+}
+
+.now-ui-icons.media-1_album:before {
+ content: "\ea02";
+}
+
+.now-ui-icons.media-1_button-pause:before {
+ content: "\ea16";
+}
+
+.now-ui-icons.media-1_button-play:before {
+ content: "\ea18";
+}
+
+.now-ui-icons.media-1_button-power:before {
+ content: "\ea19";
+}
+
+.now-ui-icons.media-1_camera-compact:before {
+ content: "\ea1c";
+}
+
+.now-ui-icons.media-2_note-03:before {
+ content: "\ea3f";
+}
+
+.now-ui-icons.media-2_sound-wave:before {
+ content: "\ea57";
+}
+
+.now-ui-icons.objects_diamond:before {
+ content: "\ea29";
+}
+
+.now-ui-icons.objects_globe:before {
+ content: "\ea2f";
+}
+
+.now-ui-icons.objects_key-25:before {
+ content: "\ea38";
+}
+
+.now-ui-icons.objects_planet:before {
+ content: "\ea46";
+}
+
+.now-ui-icons.objects_spaceship:before {
+ content: "\ea55";
+}
+
+.now-ui-icons.objects_support-17:before {
+ content: "\ea56";
+}
+
+.now-ui-icons.objects_umbrella-13:before {
+ content: "\ea5f";
+}
+
+.now-ui-icons.education_agenda-bookmark:before {
+ content: "\ea01";
+}
+
+.now-ui-icons.education_atom:before {
+ content: "\ea0c";
+}
+
+.now-ui-icons.education_glasses:before {
+ content: "\ea2d";
+}
+
+.now-ui-icons.education_hat:before {
+ content: "\ea30";
+}
+
+.now-ui-icons.education_paper:before {
+ content: "\ea42";
+}
+
+.now-ui-icons.shopping_bag-16:before {
+ content: "\ea0d";
+}
+
+.now-ui-icons.shopping_basket:before {
+ content: "\ea0b";
+}
+
+.now-ui-icons.shopping_box:before {
+ content: "\ea11";
+}
+
+.now-ui-icons.shopping_cart-simple:before {
+ content: "\ea1d";
+}
+
+.now-ui-icons.shopping_credit-card:before {
+ content: "\ea28";
+}
+
+.now-ui-icons.shopping_delivery-fast:before {
+ content: "\ea27";
+}
+
+.now-ui-icons.shopping_shop:before {
+ content: "\ea50";
+}
+
+.now-ui-icons.shopping_tag-content:before {
+ content: "\ea59";
+}
+
+.now-ui-icons.sport_trophy:before {
+ content: "\ea5d";
+}
+
+.now-ui-icons.sport_user-run:before {
+ content: "\ea60";
+}
+
+.now-ui-icons.tech_controller-modern:before {
+ content: "\ea26";
+}
+
+.now-ui-icons.tech_headphones:before {
+ content: "\ea31";
+}
+
+.now-ui-icons.tech_laptop:before {
+ content: "\ea36";
+}
+
+.now-ui-icons.tech_mobile:before {
+ content: "\ea3e";
+}
+
+.now-ui-icons.tech_tablet:before {
+ content: "\ea58";
+}
+
+.now-ui-icons.tech_tv:before {
+ content: "\ea5e";
+}
+
+.now-ui-icons.tech_watch-time:before {
+ content: "\ea62";
+}
+
+.now-ui-icons.text_align-center:before {
+ content: "\ea05";
+}
+
+.now-ui-icons.text_align-left:before {
+ content: "\ea06";
+}
+
+.now-ui-icons.text_bold:before {
+ content: "\ea0e";
+}
+
+.now-ui-icons.text_caps-small:before {
+ content: "\ea1b";
+}
+
+.now-ui-icons.gestures_tap-01:before {
+ content: "\ea5a";
+}
+
+.now-ui-icons.transportation_air-baloon:before {
+ content: "\ea03";
+}
+
+.now-ui-icons.transportation_bus-front-12:before {
+ content: "\ea17";
+}
+
+.now-ui-icons.travel_info:before {
+ content: "\ea04";
+}
+
+.now-ui-icons.travel_istanbul:before {
+ content: "\ea34";
+}
+
+.now-ui-icons.ui-1_bell-53:before {
+ content: "\ea0f";
+}
+
+.now-ui-icons.ui-1_calendar-60:before {
+ content: "\ea1a";
+}
+
+.now-ui-icons.ui-1_lock-circle-open:before {
+ content: "\ea35";
+}
+
+.now-ui-icons.ui-1_send:before {
+ content: "\ea4d";
+}
+
+.now-ui-icons.ui-1_settings-gear-63:before {
+ content: "\ea4e";
+}
+
+.now-ui-icons.ui-1_simple-add:before {
+ content: "\ea4f";
+}
+
+.now-ui-icons.ui-1_simple-delete:before {
+ content: "\ea54";
+}
+
+.now-ui-icons.ui-1_simple-remove:before {
+ content: "\ea53";
+}
+
+.now-ui-icons.ui-1_zoom-bold:before {
+ content: "\ea64";
+}
+
+.now-ui-icons.ui-2_chat-round:before {
+ content: "\ea20";
+}
+
+.now-ui-icons.ui-2_favourite-28:before {
+ content: "\ea2b";
+}
+
+.now-ui-icons.ui-2_like:before {
+ content: "\ea37";
+}
+
+.now-ui-icons.ui-2_settings-90:before {
+ content: "\ea4b";
+}
+
+.now-ui-icons.ui-2_time-alarm:before {
+ content: "\ea5c";
+}
+
+.now-ui-icons.users_circle-08:before {
+ content: "\ea23";
+}
+
+.now-ui-icons.users_single-02:before {
+ content: "\ea51";
+}
+
+.all-icons .font-icon-detail {
+ text-align: center;
+ padding: 45px 0px 30px;
+ border: 1px solid #e5e5e5;
+ border-radius: 0.1875rem;
+ margin: 15px 0;
+ min-height: 168px;
+}
+
+.all-icons [class*="now-ui-icons"] {
+ font-size: 32px;
+}
+
+.all-icons .font-icon-detail p {
+ margin: 25px auto 0;
+ width: 100%;
+ text-align: center;
+ display: block;
+ color: #B8B8B8;
+ padding: 0 10px;
+ font-size: 0.7142em;
+}
+
+.nav-tabs {
+ border: 0;
+ padding: 15px 0.7rem;
+}
+
+.nav-tabs:not(.nav-tabs-neutral)>.nav-item>.nav-link.active {
+ box-shadow: 0px 5px 35px 0px rgba(0, 0, 0, 0.3);
+}
+
+.card .nav-tabs {
+ border-top-right-radius: 0.1875rem;
+ border-top-left-radius: 0.1875rem;
+}
+
+.nav-tabs>.nav-item>.nav-link {
+ color: #888888;
+ margin: 0;
+ margin-right: 5px;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: 30px;
+ font-size: 14px;
+ padding: 11px 23px;
+ line-height: 1.5;
+}
+
+.nav-tabs>.nav-item>.nav-link:hover {
+ background-color: transparent;
+}
+
+.nav-tabs>.nav-item>.nav-link.active {
+ background-color: #444;
+ border-radius: 30px;
+ color: #FFFFFF;
+}
+
+.nav-tabs>.nav-item>.nav-link i.now-ui-icons {
+ font-size: 14px;
+ position: relative;
+ top: 1px;
+ margin-right: 3px;
+}
+
+.nav-tabs>.nav-item.disabled>.nav-link,
+.nav-tabs>.nav-item.disabled>.nav-link:hover {
+ color: rgba(255, 255, 255, 0.5);
+}
+
+.nav-tabs.nav-tabs-neutral>.nav-item>.nav-link {
+ color: #FFFFFF;
+}
+
+.nav-tabs.nav-tabs-neutral>.nav-item>.nav-link.active {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.nav-tabs.nav-tabs-primary>.nav-item>.nav-link.active {
+ background-color: #f96332;
+}
+
+.nav-tabs.nav-tabs-info>.nav-item>.nav-link.active {
+ background-color: #2CA8FF;
+}
+
+.nav-tabs.nav-tabs-danger>.nav-item>.nav-link.active {
+ background-color: #FF3636;
+}
+
+.nav-tabs.nav-tabs-warning>.nav-item>.nav-link.active {
+ background-color: #FFB236;
+}
+
+.nav-tabs.nav-tabs-success>.nav-item>.nav-link.active {
+ background-color: #18ce0f;
+}
+
+.navbar {
+ padding-top: 0.625rem;
+ padding-bottom: 0.625rem;
+ min-height: 53px;
+ margin-bottom: 20px;
+ box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.15);
+}
+
+.navbar a {
+ vertical-align: middle;
+}
+
+.navbar a:not(.btn):not(.dropdown-item) {
+ color: #FFFFFF;
+}
+
+.navbar p {
+ display: inline-block;
+ margin: 0;
+ line-height: 21px;
+ font-weight: inherit;
+ font-size: inherit;
+}
+
+.navbar .navbar-nav.navbar-logo {
+ position: absolute;
+ left: 0;
+ right: 0;
+ margin: 0 auto;
+ width: 49px;
+ top: -4px;
+}
+
+.navbar .navbar-nav .nav-link.btn {
+ padding: 11px 22px;
+}
+
+.navbar .navbar-nav .nav-link.btn.btn-lg {
+ padding: 15px 48px;
+}
+
+.navbar .navbar-nav .nav-link.btn.btn-sm {
+ padding: 5px 15px;
+}
+
+.navbar .navbar-nav .nav-link:not(.btn) {
+ text-transform: uppercase;
+ font-size: 0.7142em;
+ padding: 0.5rem 0.7rem;
+ line-height: 1.625rem;
+}
+
+.navbar .navbar-nav .nav-link:not(.btn) i.fab+p,
+.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons+p {
+ margin-left: 3px;
+}
+
+.navbar .navbar-nav .nav-link:not(.btn) i.fab,
+.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons {
+ font-size: 18px;
+ position: relative;
+ top: 3px;
+ text-align: center;
+ width: 21px;
+}
+
+.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons {
+ top: 4px;
+ font-size: 16px;
+}
+
+.navbar .navbar-nav .nav-link:not(.btn).profile-photo .profile-photo-small {
+ width: 27px;
+ height: 27px;
+}
+
+.navbar .navbar-nav .nav-link:not(.btn).disabled {
+ opacity: .5;
+ color: #FFFFFF;
+}
+
+.navbar .navbar-nav .nav-item.active .nav-link:not(.btn),
+.navbar .navbar-nav .nav-item .nav-link:not(.btn):focus,
+.navbar .navbar-nav .nav-item .nav-link:not(.btn):hover,
+.navbar .navbar-nav .nav-item .nav-link:not(.btn):active {
+ background-color: rgba(255, 255, 255, 0.2);
+ border-radius: 0.1875rem;
+}
+
+.navbar .logo-container {
+ width: 27px;
+ height: 27px;
+ overflow: hidden;
+ margin: 0 auto;
+ border-radius: 50%;
+ border: 1px solid transparent;
+}
+
+.navbar .navbar-brand {
+ text-transform: uppercase;
+ font-size: 0.8571em;
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ line-height: 1.625rem;
+}
+
+.navbar .navbar-toggler {
+ width: 37px;
+ height: 27px;
+ outline: 0;
+ cursor: pointer;
+}
+
+.navbar .navbar-toggler.navbar-toggler-left {
+ position: relative;
+ left: 0;
+ padding-left: 0;
+}
+
+.navbar .navbar-toggler .navbar-toggler-bar.middle-bar {
+ width: 17px;
+ transition: width .2s linear;
+}
+
+.navbar .navbar-toggler:hover .navbar-toggler-bar.middle-bar {
+ width: 22px;
+}
+
+.navbar .button-dropdown .navbar-toggler-bar:nth-child(2) {
+ width: 17px;
+}
+
+.navbar.navbar-transparent {
+ background-color: transparent !important;
+ box-shadow: none;
+ color: #FFFFFF;
+ padding-top: 20px !important;
+}
+
+.navbar.bg-white:not(.navbar-transparent) a:not(.dropdown-item):not(.btn) {
+ color: #888888;
+}
+
+.navbar.bg-white:not(.navbar-transparent) a:not(.dropdown-item):not(.btn).disabled {
+ opacity: .5;
+ color: #888888;
+}
+
+.navbar.bg-white:not(.navbar-transparent) .button-bar {
+ background: #888888;
+}
+
+.navbar.bg-white:not(.navbar-transparent) .nav-item.active .nav-link:not(.btn),
+.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):focus,
+.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):hover,
+.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):active {
+ background-color: rgba(222, 222, 222, 0.3);
+}
+
+.navbar.bg-white:not(.navbar-transparent) .logo-container {
+ border: 1px solid #888888;
+}
+
+.bg-default {
+ background-color: #888888 !important;
+}
+
+.bg-primary {
+ background-color: #f96332 !important;
+}
+
+.bg-info {
+ background-color: #2CA8FF !important;
+}
+
+.bg-success {
+ background-color: #18ce0f !important;
+}
+
+.bg-danger {
+ background-color: #FF3636 !important;
+}
+
+.bg-warning {
+ background-color: #FFB236 !important;
+}
+
+.bg-white {
+ background-color: #FFFFFF !important;
+}
+
+.dropdown-menu {
+ border: 0;
+ box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2);
+ border-radius: 0.125rem;
+ -webkit-transition: all 150ms linear;
+ -moz-transition: all 150ms linear;
+ -o-transition: all 150ms linear;
+ -ms-transition: all 150ms linear;
+ transition: all 150ms linear;
+ font-size: 14px;
+}
+
+.dropdown-menu.dropdown-menu-right:before {
+ left: auto;
+ right: 10px;
+}
+
+.dropdown .dropdown-menu {
+ -webkit-transform: translate3d(0, -25px, 0) !important;
+ -moz-transform: translate3d(0, -25px, 0) !important;
+ -o-transform: translate3d(0, -25px, 0) !important;
+ -ms-transform: translate3d(0, -25px, 0) !important;
+ transform: translate3d(0, -25px, 0) !important;
+ visibility: hidden;
+ display: block;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ top: 100% !important;
+}
+
+.dropdown.show .dropdown-menu,
+.dropdown-menu.open {
+ opacity: 1;
+ filter: alpha(opacity=100);
+ visibility: visible;
+ -webkit-transform: translate3d(0, 0px, 0) !important;
+ -moz-transform: translate3d(0, 0px, 0) !important;
+ -o-transform: translate3d(0, 0px, 0) !important;
+ -ms-transform: translate3d(0, 0px, 0) !important;
+ transform: translate3d(0, 0px, 0) !important;
+}
+
+.dropdown-menu .dropdown-item,
+.bootstrap-select .dropdown-menu.inner li a {
+ font-size: 0.8571em;
+ padding-top: .6rem;
+ padding-bottom: .6rem;
+ margin-top: 5px;
+ -webkit-transition: all 150ms linear;
+ -moz-transition: all 150ms linear;
+ -o-transition: all 150ms linear;
+ -ms-transition: all 150ms linear;
+ transition: all 150ms linear;
+ outline: none;
+}
+
+.dropdown-menu .dropdown-item:hover,
+.dropdown-menu .dropdown-item:focus,
+.bootstrap-select .dropdown-menu.inner li a:hover,
+.bootstrap-select .dropdown-menu.inner li a:focus {
+ background-color: rgba(222, 222, 222, 0.3);
+}
+
+.dropdown-menu .dropdown-item.disabled,
+.dropdown-menu .dropdown-item:disabled,
+.bootstrap-select .dropdown-menu.inner li a.disabled,
+.bootstrap-select .dropdown-menu.inner li a:disabled {
+ color: rgba(182, 182, 182, 0.6);
+}
+
+.dropdown-menu .dropdown-item.disabled:hover,
+.dropdown-menu .dropdown-item.disabled:focus,
+.dropdown-menu .dropdown-item:disabled:hover,
+.dropdown-menu .dropdown-item:disabled:focus,
+.bootstrap-select .dropdown-menu.inner li a.disabled:hover,
+.bootstrap-select .dropdown-menu.inner li a.disabled:focus,
+.bootstrap-select .dropdown-menu.inner li a:disabled:hover,
+.bootstrap-select .dropdown-menu.inner li a:disabled:focus {
+ background-color: transparent;
+}
+
+.dropdown-menu:before {
+ display: inline-block;
+ position: absolute;
+ width: 0;
+ height: 0;
+ vertical-align: middle;
+ content: "";
+ top: -5px;
+ left: 10px;
+ right: auto;
+ color: #FFFFFF;
+ border-bottom: .4em solid;
+ border-right: .4em solid transparent;
+ border-left: .4em solid transparent;
+}
+
+.dropdown-menu .dropdown-divider {
+ background-color: rgba(222, 222, 222, 0.5);
+}
+
+.dropdown-menu .dropdown-header:not([href]):not([tabindex]) {
+ color: rgba(182, 182, 182, 0.6);
+ font-size: 0.7142em;
+ text-transform: uppercase;
+ font-weight: 700;
+}
+
+.dropdown-menu.dropdown-primary {
+ background-color: #f95823;
+}
+
+.dropdown-menu.dropdown-primary:before {
+ color: #f95823;
+}
+
+.dropdown-menu.dropdown-primary .dropdown-header:not([href]):not([tabindex]) {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.dropdown-menu.dropdown-primary .dropdown-item {
+ color: #FFFFFF;
+}
+
+.dropdown-menu.dropdown-primary .dropdown-item:hover,
+.dropdown-menu.dropdown-primary .dropdown-item:focus {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-primary .dropdown-divider {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-info {
+ background-color: #1da2ff;
+}
+
+.dropdown-menu.dropdown-info:before {
+ color: #1da2ff;
+}
+
+.dropdown-menu.dropdown-info .dropdown-header:not([href]):not([tabindex]) {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.dropdown-menu.dropdown-info .dropdown-item {
+ color: #FFFFFF;
+}
+
+.dropdown-menu.dropdown-info .dropdown-item:hover,
+.dropdown-menu.dropdown-info .dropdown-item:focus {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-info .dropdown-divider {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-danger {
+ background-color: #ff2727;
+}
+
+.dropdown-menu.dropdown-danger:before {
+ color: #ff2727;
+}
+
+.dropdown-menu.dropdown-danger .dropdown-header:not([href]):not([tabindex]) {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.dropdown-menu.dropdown-danger .dropdown-item {
+ color: #FFFFFF;
+}
+
+.dropdown-menu.dropdown-danger .dropdown-item:hover,
+.dropdown-menu.dropdown-danger .dropdown-item:focus {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-danger .dropdown-divider {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-success {
+ background-color: #16c00e;
+}
+
+.dropdown-menu.dropdown-success:before {
+ color: #16c00e;
+}
+
+.dropdown-menu.dropdown-success .dropdown-header:not([href]):not([tabindex]) {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.dropdown-menu.dropdown-success .dropdown-item {
+ color: #FFFFFF;
+}
+
+.dropdown-menu.dropdown-success .dropdown-item:hover,
+.dropdown-menu.dropdown-success .dropdown-item:focus {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-success .dropdown-divider {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-warning {
+ background-color: #ffac27;
+}
+
+.dropdown-menu.dropdown-warning:before {
+ color: #ffac27;
+}
+
+.dropdown-menu.dropdown-warning .dropdown-header:not([href]):not([tabindex]) {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.dropdown-menu.dropdown-warning .dropdown-item {
+ color: #FFFFFF;
+}
+
+.dropdown-menu.dropdown-warning .dropdown-item:hover,
+.dropdown-menu.dropdown-warning .dropdown-item:focus {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.dropdown-menu.dropdown-warning .dropdown-divider {
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.button-dropdown {
+ padding-right: 0.7rem;
+ cursor: pointer;
+}
+
+.button-dropdown .dropdown-toggle {
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ display: block;
+}
+
+.button-dropdown .dropdown-toggle:after {
+ display: none;
+}
+
+.alert {
+ border: 0;
+ border-radius: 0;
+ color: #FFFFFF;
+ padding-top: .9rem;
+ padding-bottom: .9rem;
+}
+
+.alert .alert-link {
+ color: #FFFFFF;
+ opacity: .8;
+}
+
+.alert.alert-success {
+ background-color: rgba(24, 206, 15, 0.8);
+}
+
+.alert.alert-danger {
+ background-color: rgba(255, 54, 54, 0.8);
+}
+
+.alert.alert-warning {
+ background-color: rgba(255, 178, 54, 0.8);
+}
+
+.alert.alert-info {
+ background-color: rgba(44, 168, 255, 0.8);
+}
+
+.alert.alert-primary {
+ background-color: rgba(249, 99, 50, 0.8);
+}
+
+.alert .alert-icon {
+ display: block;
+ float: left;
+ margin-right: 15px;
+ margin-top: -1px;
+}
+
+.alert strong {
+ text-transform: uppercase;
+ font-size: 12px;
+}
+
+.alert i.fa,
+.alert i.now-ui-icons {
+ font-size: 20px;
+}
+
+.alert .close {
+ color: #FFFFFF;
+ opacity: .9;
+ text-shadow: none;
+ line-height: 0;
+ outline: 0;
+ display: inline-block;
+ cursor: pointer;
+}
+
+img {
+ max-width: 100%;
+ border-radius: 1px;
+}
+
+.img-raised {
+ box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3);
+}
+
+.popover {
+ font-size: 14px;
+ box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2);
+ border: none;
+ line-height: 1.7;
+ max-width: 240px;
+}
+
+.popover.bs-popover-top .arrow:before,
+.popover.bs-popover-left .arrow:before,
+.popover.bs-popover-right .arrow:before,
+.popover.bs-popover-bottom .arrow:before {
+ border-top-color: transparent;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ border-bottom-color: transparent;
+}
+
+.popover .popover-header {
+ color: rgba(182, 182, 182, 0.6);
+ font-size: 14px;
+ text-transform: capitalize;
+ font-weight: 600;
+ margin: 0;
+ margin-top: 5px;
+ border: none;
+ background-color: transparent;
+}
+
+.popover:before {
+ display: none;
+}
+
+.popover.bs-tether-element-attached-top:after {
+ border-bottom-color: #FFFFFF;
+ top: -9px;
+}
+
+.popover.popover-primary {
+ background-color: #f96332;
+}
+
+.popover.popover-primary .popover-body {
+ color: #FFFFFF;
+}
+
+.popover.popover-primary.bs-popover-right .arrow:after {
+ border-right-color: #f96332;
+}
+
+.popover.popover-primary.bs-popover-top .arrow:after {
+ border-top-color: #f96332;
+}
+
+.popover.popover-primary.bs-popover-bottom .arrow:after {
+ border-bottom-color: #f96332;
+}
+
+.popover.popover-primary.bs-popover-left .arrow:after {
+ border-left-color: #f96332;
+}
+
+.popover.popover-primary .popover-header {
+ color: #FFFFFF;
+ opacity: .6;
+}
+
+.popover.popover-info {
+ background-color: #2CA8FF;
+}
+
+.popover.popover-info .popover-body {
+ color: #FFFFFF;
+}
+
+.popover.popover-info.bs-popover-right .arrow:after {
+ border-right-color: #2CA8FF;
+}
+
+.popover.popover-info.bs-popover-top .arrow:after {
+ border-top-color: #2CA8FF;
+}
+
+.popover.popover-info.bs-popover-bottom .arrow:after {
+ border-bottom-color: #2CA8FF;
+}
+
+.popover.popover-info.bs-popover-left .arrow:after {
+ border-left-color: #2CA8FF;
+}
+
+.popover.popover-info .popover-header {
+ color: #FFFFFF;
+ opacity: .6;
+}
+
+.popover.popover-warning {
+ background-color: #FFB236;
+}
+
+.popover.popover-warning .popover-body {
+ color: #FFFFFF;
+}
+
+.popover.popover-warning.bs-popover-right .arrow:after {
+ border-right-color: #FFB236;
+}
+
+.popover.popover-warning.bs-popover-top .arrow:after {
+ border-top-color: #FFB236;
+}
+
+.popover.popover-warning.bs-popover-bottom .arrow:after {
+ border-bottom-color: #FFB236;
+}
+
+.popover.popover-warning.bs-popover-left .arrow:after {
+ border-left-color: #FFB236;
+}
+
+.popover.popover-warning .popover-header {
+ color: #FFFFFF;
+ opacity: .6;
+}
+
+.popover.popover-danger {
+ background-color: #FF3636;
+}
+
+.popover.popover-danger .popover-body {
+ color: #FFFFFF;
+}
+
+.popover.popover-danger.bs-popover-right .arrow:after {
+ border-right-color: #FF3636;
+}
+
+.popover.popover-danger.bs-popover-top .arrow:after {
+ border-top-color: #FF3636;
+}
+
+.popover.popover-danger.bs-popover-bottom .arrow:after {
+ border-bottom-color: #FF3636;
+}
+
+.popover.popover-danger.bs-popover-left .arrow:after {
+ border-left-color: #FF3636;
+}
+
+.popover.popover-danger .popover-header {
+ color: #FFFFFF;
+ opacity: .6;
+}
+
+.popover.popover-success {
+ background-color: #18ce0f;
+}
+
+.popover.popover-success .popover-body {
+ color: #FFFFFF;
+}
+
+.popover.popover-success.bs-popover-right .arrow:after {
+ border-right-color: #18ce0f;
+}
+
+.popover.popover-success.bs-popover-top .arrow:after {
+ border-top-color: #18ce0f;
+}
+
+.popover.popover-success.bs-popover-bottom .arrow:after {
+ border-bottom-color: #18ce0f;
+}
+
+.popover.popover-success.bs-popover-left .arrow:after {
+ border-left-color: #18ce0f;
+}
+
+.popover.popover-success .popover-header {
+ color: #FFFFFF;
+ opacity: .6;
+}
+
+.tooltip.bs-tooltip-right .arrow:before {
+ border-right-color: #FFFFFF;
+}
+
+.tooltip.bs-tooltip-top .arrow:before {
+ border-top-color: #FFFFFF;
+}
+
+.tooltip.bs-tooltip-bottom .arrow:before {
+ border-bottom-color: #FFFFFF;
+}
+
+.tooltip.bs-tooltip-left .arrow:before {
+ border-left-color: #FFFFFF;
+}
+
+.tooltip-inner {
+ padding: 0.5rem 0.7rem;
+ min-width: 130px;
+ background-color: #FFFFFF;
+ font-size: 14px;
+ color: inherit;
+ box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2);
+}
+
+.modal-content {
+ border-radius: 0.1875rem;
+ border: none;
+ box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.5);
+}
+
+.modal-content .modal-header {
+ border-bottom: none;
+ padding-top: 24px;
+ padding-right: 24px;
+ padding-bottom: 0;
+ padding-left: 24px;
+}
+
+.modal-content .modal-header button {
+ position: absolute;
+ right: 27px;
+ top: 30px;
+ outline: 0;
+}
+
+.modal-content .modal-header .title {
+ margin-top: 5px;
+ margin-bottom: 0;
+}
+
+.modal-content .modal-body {
+ padding-top: 24px;
+ padding-right: 24px;
+ padding-bottom: 16px;
+ padding-left: 24px;
+ line-height: 1.9;
+}
+
+.modal-content .modal-footer {
+ border-top: none;
+ padding-right: 24px;
+ padding-bottom: 16px;
+ padding-left: 24px;
+ -webkit-justify-content: space-between;
+ /* Safari 6.1+ */
+ justify-content: space-between;
+}
+
+.modal-content .modal-footer button {
+ margin: 0;
+ padding-left: 16px;
+ padding-right: 16px;
+ width: auto;
+}
+
+.modal-content .modal-footer button.pull-left {
+ padding-left: 5px;
+ padding-right: 5px;
+ position: relative;
+ left: -5px;
+}
+
+.modal-content .modal-body+.modal-footer {
+ padding-top: 0;
+}
+
+.modal-backdrop {
+ background: rgba(0, 0, 0, 0.3);
+}
+
+.modal.modal-mini p {
+ text-align: center;
+}
+
+.modal.modal-mini .modal-dialog {
+ max-width: 255px;
+ margin: 0 auto;
+}
+
+.modal.modal-mini .modal-profile {
+ width: 70px;
+ height: 70px;
+ background-color: #FFFFFF;
+ border-radius: 50%;
+ text-align: center;
+ line-height: 5.7;
+ box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.3);
+}
+
+.modal.modal-mini .modal-profile i {
+ color: #f96332;
+ font-size: 21px;
+}
+
+.modal.modal-mini .modal-profile[class*="modal-profile-"] i {
+ color: #FFFFFF;
+}
+
+.modal.modal-mini .modal-profile.modal-profile-primary {
+ background-color: #f96332;
+}
+
+.modal.modal-mini .modal-profile.modal-profile-danger {
+ background-color: #FF3636;
+}
+
+.modal.modal-mini .modal-profile.modal-profile-warning {
+ background-color: #FFB236;
+}
+
+.modal.modal-mini .modal-profile.modal-profile-success {
+ background-color: #18ce0f;
+}
+
+.modal.modal-mini .modal-profile.modal-profile-info {
+ background-color: #2CA8FF;
+}
+
+.modal.modal-mini .modal-footer button {
+ text-transform: uppercase;
+}
+
+.modal.modal-mini .modal-footer button:first-child {
+ opacity: .5;
+}
+
+.modal.modal-default .modal-content {
+ background-color: #FFFFFF;
+ color: #2c2c2c;
+}
+
+.modal.modal-default .modal-header .close {
+ color: #2c2c2c;
+}
+
+.modal.modal-primary .modal-content {
+ background-color: #f96332;
+ color: #FFFFFF;
+}
+
+.modal.modal-primary .modal-header .close {
+ color: #FFFFFF;
+}
+
+.modal.modal-danger .modal-content {
+ background-color: #FF3636;
+ color: #FFFFFF;
+}
+
+.modal.modal-danger .modal-header .close {
+ color: #FFFFFF;
+}
+
+.modal.modal-warning .modal-content {
+ background-color: #FFB236;
+ color: #FFFFFF;
+}
+
+.modal.modal-warning .modal-header .close {
+ color: #FFFFFF;
+}
+
+.modal.modal-success .modal-content {
+ background-color: #18ce0f;
+ color: #FFFFFF;
+}
+
+.modal.modal-success .modal-header .close {
+ color: #FFFFFF;
+}
+
+.modal.modal-info .modal-content {
+ background-color: #2CA8FF;
+ color: #FFFFFF;
+}
+
+.modal.modal-info .modal-header .close {
+ color: #FFFFFF;
+}
+
+.modal.show.modal-mini .modal-dialog {
+ -webkit-transform: translate(0, 30%);
+ -o-transform: translate(0, 30%);
+ transform: translate(0, 30%);
+}
+
+.modal .modal-header .close {
+ color: #FF3636;
+ text-shadow: none;
+}
+
+.modal .modal-header .close:hover,
+.modal .modal-header .close:focus {
+ opacity: 1;
+}
+
+.carousel-item-next,
+.carousel-item-prev,
+.carousel-item.active {
+ display: block;
+}
+
+.carousel .carousel-inner {
+ box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3);
+ border-radius: 0.1875rem;
+}
+
+.carousel .card {
+ max-width: 650px;
+ margin: 60px auto;
+ display: block;
+}
+
+.footer {
+ padding: 24px 0;
+}
+
+.footer.footer-default {
+ background-color: #f2f2f2;
+}
+
+.footer nav {
+ display: inline-block;
+ float: left;
+}
+
+.footer ul {
+ margin-bottom: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.footer ul li {
+ display: inline-block;
+}
+
+.footer ul li a {
+ color: inherit;
+ padding: 0.5rem;
+ font-size: 0.8571em;
+ text-transform: uppercase;
+ text-decoration: none;
+}
+
+.footer ul li a:hover {
+ text-decoration: none;
+}
+
+.footer .copyright {
+ font-size: 0.8571em;
+}
+
+.footer:after {
+ display: table;
+ clear: both;
+ content: " ";
+}
+
+.card {
+ border: 0;
+ border-radius: 0.1875rem;
+ display: inline-block;
+ position: relative;
+ width: 100%;
+ margin-bottom: 30px;
+ box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2);
+}
+
+.card .card-header {
+ background-color: transparent;
+ border-bottom: 0;
+ background-color: transparent;
+ border-radius: 0;
+ padding: 0;
+}
+
+.card .card-footer {
+ padding: 0;
+ margin-top: 15px;
+ background-color: transparent;
+ border: 0;
+}
+
+.card[data-background-color="orange"] {
+ background-color: #f96332;
+}
+
+.card[data-background-color="red"] {
+ background-color: #FF3636;
+}
+
+.card[data-background-color="yellow"] {
+ background-color: #FFB236;
+}
+
+.card[data-background-color="blue"] {
+ background-color: #2CA8FF;
+}
+
+.card[data-background-color="green"] {
+ background-color: #15b60d;
+}
+
+.card-plain {
+ background: transparent;
+ box-shadow: none;
+}
+
+.card-plain .card-body,
+.card-plain .card-header {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.card-plain .card-header:after {
+ width: 100%;
+ left: 0;
+}
+
+.card-signup {
+ max-width: 350px;
+ margin: 0 auto;
+}
+
+.card-signup .card-header {
+ margin: 0 20px;
+ padding: 30px 0;
+}
+
+.card-signup .card-title {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+.card-signup .card-footer {
+ margin-bottom: 10px;
+ margin-top: 24px;
+ padding: 24px 0;
+}
+
+.card-signup .card-body {
+ padding-top: 0px;
+ padding-bottom: 0px;
+ min-height: auto;
+}
+
+.card-signup .form-check,
+.card-signup .form-check.form-check-radio {
+ margin-top: 20px;
+}
+
+.card-signup .form-check label,
+.card-signup .form-check.form-check-radio label {
+ margin-left: 11px;
+ color: initial;
+ padding-left: 40px;
+}
+
+.card-signup .card-description {
+ margin-top: 15px;
+ margin-bottom: 20px;
+}
+
+.card-signup .social-line {
+ margin-top: 20px;
+ text-align: center;
+}
+
+.card-signup .social-line .btn.btn-icon,
+.card-signup .social-line .btn.btn-icon .btn-icon {
+ margin-left: 5px;
+ margin-right: 5px;
+ margin-top: 0;
+ margin-bottom: 0;
+ box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.2);
+}
+
+.index-page .page-header {
+ height: 125vh;
+}
+
+.index-page .page-header .container>.content-center {
+ top: 37%;
+}
+
+.index-page .page-header .category-absolute {
+ position: absolute;
+ top: 100vh;
+ margin-top: -60px;
+ padding: 0 15px;
+ width: 100%;
+ color: rgba(255, 255, 255, 0.5);
+}
+
+.landing-page .header {
+ height: 100vh;
+ position: relative;
+}
+
+.landing-page .header .container {
+ padding-top: 26vh;
+ color: #FFFFFF;
+ z-index: 2;
+ position: relative;
+}
+
+.landing-page .header .share {
+ margin-top: 150px;
+}
+
+.landing-page .header h1 {
+ font-weight: 600;
+}
+
+.landing-page .header .title {
+ color: #FFFFFF;
+}
+
+.landing-page .section-team .team .team-player img {
+ max-width: 100px;
+}
+
+.landing-page .section-team .team-player {
+ margin-bottom: 15px;
+}
+
+.landing-page .section-contact-us .title {
+ margin-bottom: 15px;
+}
+
+.landing-page .section-contact-us .description {
+ margin-bottom: 30px;
+}
+
+.landing-page .section-contact-us .input-group,
+.landing-page .section-contact-us .send-button,
+.landing-page .section-contact-us .textarea-container {
+ padding: 0 40px;
+}
+
+.landing-page .section-contact-us .textarea-container {
+ margin: 40px 0;
+}
+
+.landing-page .section-contact-us a.btn {
+ margin-top: 35px;
+}
+
+.profile-page .page-header {
+ min-height: 550px;
+}
+
+.profile-page .profile-container {
+ color: #FFFFFF;
+}
+
+.profile-page .photo-container {
+ width: 123px;
+ height: 123px;
+ border-radius: 50%;
+ overflow: hidden;
+ margin: 0 auto;
+ box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3);
+}
+
+.profile-page .title {
+ text-align: center;
+ margin-top: 30px;
+}
+
+.profile-page .description,
+.profile-page .category {
+ text-align: center;
+}
+
+.profile-page h5.description {
+ max-width: 700px;
+ margin: 20px auto 75px;
+}
+
+.profile-page .nav-align-center {
+ margin-top: 30px;
+}
+
+.profile-page .content {
+ max-width: 450px;
+ margin: 0 auto;
+}
+
+.profile-page .content .social-description {
+ display: inline-block;
+ max-width: 150px;
+ width: 145px;
+ text-align: center;
+ margin: 15px 0 0px;
+}
+
+.profile-page .content .social-description h2 {
+ margin-bottom: 15px;
+}
+
+.profile-page .button-container {
+ text-align: center;
+ margin-top: -106px;
+}
+
+.profile-page .collections img {
+ margin-bottom: 30px;
+}
+
+.profile-page .gallery {
+ margin-top: 45px;
+ padding-bottom: 50px;
+}
+
+.section-full-page:after,
+.section-full-page:before {
+ display: block;
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ z-index: 2;
+}
+
+.section-full-page:before {
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.section-full-page[filter-color="purple"]:after,
+.section-full-page[filter-color="primary"]:after {
+ background: rgba(227, 227, 227, 0.26);
+ /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95));
+ /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95));
+ /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95));
+ /* For Firefox 3.6 to 15 */
+ background: linear-gradient(0deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95));
+ /* Standard syntax */
+}
+
+.section-full-page[data-image]:after {
+ opacity: .5;
+}
+
+.section-full-page>.content,
+.section-full-page>.footer {
+ position: relative;
+ z-index: 4;
+}
+
+.section-full-page>.content {
+ min-height: calc(100vh - 80px);
+}
+
+.section-full-page .full-page-background {
+ position: absolute;
+ z-index: 1;
+ height: 100%;
+ width: 100%;
+ display: block;
+ top: 0;
+ left: 0;
+ background-size: cover;
+ background-position: center center;
+}
+
+.section-full-page .footer nav>ul a:not(.btn),
+.section-full-page .footer,
+.section-full-page .footer .copyright a {
+ color: #FFFFFF;
+}
+
+.login-page .page-header:before,
+.profile-page .page-header:before {
+ position: absolute;
+ z-index: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+ left: 0;
+ top: 0;
+ content: "";
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.login-page .card-login {
+ border-radius: 0.25rem;
+ padding-bottom: 0.7rem;
+ max-width: 320px;
+}
+
+.login-page .card-login .btn-wd {
+ min-width: 180px;
+}
+
+.login-page .card-login .logo-container {
+ width: 65px;
+ margin: 0 auto;
+ margin-bottom: 55px;
+}
+
+.login-page .card-login .logo-container img {
+ width: 100%;
+}
+
+.login-page .card-login .input-group:last-child {
+ margin-bottom: 40px;
+}
+
+.login-page .card-login.card-plain .form-control::-moz-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.login-page .card-login.card-plain .form-control:-moz-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.login-page .card-login.card-plain .form-control::-webkit-input-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.login-page .card-login.card-plain .form-control:-ms-input-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.login-page .card-login.card-plain .form-control {
+ border-color: rgba(255, 255, 255, 0.5);
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .form-control:focus {
+ border-color: #FFFFFF;
+ background-color: transparent;
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .has-success:after,
+.login-page .card-login.card-plain .has-danger:after {
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .has-danger .form-control {
+ background-color: transparent;
+}
+
+.login-page .card-login.card-plain .input-group-text {
+ background-color: transparent;
+ border-color: rgba(255, 255, 255, 0.5);
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .input-group-focus .input-group-text {
+ background-color: transparent;
+ border-color: #FFFFFF;
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .form-group.no-border .form-control,
+.login-page .card-login.card-plain .input-group.no-border .form-control {
+ background-color: rgba(255, 255, 255, 0.1);
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .form-group.no-border .form-control:focus,
+.login-page .card-login.card-plain .form-group.no-border .form-control:active,
+.login-page .card-login.card-plain .form-group.no-border .form-control:active,
+.login-page .card-login.card-plain .input-group.no-border .form-control:focus,
+.login-page .card-login.card-plain .input-group.no-border .form-control:active,
+.login-page .card-login.card-plain .input-group.no-border .form-control:active {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .form-group.no-border .form-control+.input-group-text,
+.login-page .card-login.card-plain .input-group.no-border .form-control+.input-group-text {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.login-page .card-login.card-plain .form-group.no-border .form-control+.input-group-text:focus,
+.login-page .card-login.card-plain .form-group.no-border .form-control+.input-group-text:active,
+.login-page .card-login.card-plain .form-group.no-border .form-control+.input-group-text:active,
+.login-page .card-login.card-plain .input-group.no-border .form-control+.input-group-text:focus,
+.login-page .card-login.card-plain .input-group.no-border .form-control+.input-group-text:active,
+.login-page .card-login.card-plain .input-group.no-border .form-control+.input-group-text:active {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .form-group.no-border .form-control:focus+.input-group-text,
+.login-page .card-login.card-plain .input-group.no-border .form-control:focus+.input-group-text {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .form-group.no-border .input-group-text,
+.login-page .card-login.card-plain .input-group.no-border .input-group-text {
+ background-color: rgba(255, 255, 255, 0.1);
+ border: none;
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .form-group.no-border.input-group-focus .input-group-text,
+.login-page .card-login.card-plain .input-group.no-border.input-group-focus .input-group-text {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+.login-page .card-login.card-plain .input-group-text,
+.login-page .card-login.card-plain .form-group.no-border .input-group-text,
+.login-page .card-login.card-plain .input-group.no-border .input-group-text {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.login-page .link {
+ font-size: 10px;
+ color: #FFFFFF;
+ text-decoration: none;
+}
+
+.section {
+ padding: 70px 0;
+ position: relative;
+ background: #FFFFFF;
+}
+
+.section .row+.category {
+ margin-top: 15px;
+}
+
+.section-navbars {
+ padding-bottom: 0;
+}
+
+.section-full-screen {
+ height: 100vh;
+}
+
+.section-signup {
+ padding-top: 20vh;
+}
+
+.page-header {
+ min-height: 100vh;
+ max-height: 999px;
+ padding: 0;
+ color: #FFFFFF;
+ position: relative;
+ overflow: hidden;
+}
+
+.page-header>.content {
+ margin-top: 12%;
+ text-align: center;
+ margin-bottom: 50px;
+}
+
+.page-header.page-header-small {
+ min-height: 60vh;
+ max-height: 440px;
+}
+
+.page-header:before {
+ background-color: rgba(0, 0, 0, 0.3);
+}
+
+.page-header>.container {
+ z-index: 2;
+ padding-top: 12vh;
+ padding-bottom: 40px;
+}
+
+.page-header .page-header-image {
+ position: absolute;
+ background-size: cover;
+ background-position: center center;
+ width: 100%;
+ height: 100%;
+ z-index: -1;
+}
+
+.page-header .content-center {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 2;
+ -ms-transform: translate(-50%, -50%);
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ text-align: center;
+ color: #FFFFFF;
+ padding: 0 15px;
+ width: 100%;
+ max-width: 880px;
+}
+
+.page-header footer {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+}
+
+.page-header .container {
+ height: 100%;
+ z-index: 1;
+ text-align: center;
+ position: relative;
+}
+
+.page-header .category,
+.page-header .description {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+.page-header:after,
+.page-header:before {
+ position: absolute;
+ z-index: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+ left: 0;
+ top: 0;
+ content: "";
+}
+
+.clear-filter:after,
+.clear-filter:before {
+ display: none;
+}
+
+.clear-filter[filter-color="orange"] {
+ background: rgba(44, 44, 44, 0.2);
+ /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6));
+ /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6));
+ /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6));
+ /* For Firefox 3.6 to 15 */
+ background: linear-gradient(0deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6));
+ /* Standard syntax */
+}
+
+.section-story-overview {
+ padding: 50px 0;
+}
+
+.section-story-overview .image-container {
+ height: 335px;
+ position: relative;
+ background-position: center center;
+ background-size: cover;
+ box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3);
+ border-radius: .25rem;
+}
+
+.section-story-overview .image-container+.category {
+ padding-top: 15px;
+}
+
+.section-story-overview .image-container.image-right {
+ z-index: 2;
+}
+
+.section-story-overview .image-container.image-right+h3.title {
+ margin-top: 120px;
+}
+
+.section-story-overview .image-container.image-left {
+ z-index: 1;
+}
+
+.section-story-overview .image-container:nth-child(2) {
+ margin-top: 420px;
+ margin-left: -105px;
+}
+
+.section-story-overview p.blockquote {
+ width: 220px;
+ min-height: 180px;
+ text-align: left;
+ position: absolute;
+ top: 376px;
+ right: 155px;
+ z-index: 0;
+}
+
+.section-nucleo-icons .nucleo-container img {
+ width: auto;
+ left: 0;
+ top: 0;
+ height: 100%;
+ position: absolute;
+}
+
+.section-nucleo-icons .nucleo-container {
+ height: 335px;
+ position: relative;
+}
+
+.section-nucleo-icons h5 {
+ margin-bottom: 35px;
+}
+
+.section-nucleo-icons .icons-container {
+ position: relative;
+ max-width: 450px;
+ height: 300px;
+ max-height: 300px;
+ margin: 0 auto;
+}
+
+.section-nucleo-icons .icons-container i {
+ font-size: 34px;
+ position: absolute;
+ left: 0;
+ top: 0;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(1) {
+ top: 5%;
+ left: 7%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(2) {
+ top: 28%;
+ left: 24%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(3) {
+ top: 40%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(4) {
+ top: 18%;
+ left: 62%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(5) {
+ top: 74%;
+ left: 3%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(6) {
+ top: 36%;
+ left: 44%;
+ font-size: 65px;
+ color: #f96332;
+ padding: 1px;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(7) {
+ top: 59%;
+ left: 26%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(8) {
+ top: 60%;
+ left: 69%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(9) {
+ top: 72%;
+ left: 47%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(10) {
+ top: 88%;
+ left: 27%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(11) {
+ top: 31%;
+ left: 80%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(12) {
+ top: 88%;
+ left: 68%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(13) {
+ top: 5%;
+ left: 81%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(14) {
+ top: 58%;
+ left: 90%;
+}
+
+.section-nucleo-icons .icons-container i:nth-child(15) {
+ top: 6%;
+ left: 40%;
+}
+
+.section-images {
+ max-height: 670px;
+ height: 670px;
+}
+
+.section-images .hero-images-container,
+.section-images .hero-images-container-1,
+.section-images .hero-images-container-2 {
+ margin-top: -38vh;
+}
+
+.section-images .hero-images-container {
+ max-width: 670px;
+}
+
+.section-images .hero-images-container-1 {
+ max-width: 390px;
+ position: absolute;
+ top: 55%;
+ right: 18%;
+}
+
+.section-images .hero-images-container-2 {
+ max-width: 225px;
+ position: absolute;
+ top: 68%;
+ right: 12%;
+}
+
+[data-background-color="orange"] {
+ background-color: #e95e38;
+}
+
+[data-background-color="black"] {
+ background-color: #2c2c2c;
+}
+
+[data-background-color]:not([data-background-color="gray"]) {
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .title,
+[data-background-color]:not([data-background-color="gray"]) .social-description h2,
+[data-background-color]:not([data-background-color="gray"]) p,
+[data-background-color]:not([data-background-color="gray"]) p.blockquote,
+[data-background-color]:not([data-background-color="gray"]) p.blockquote small {
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .separator {
+ background-color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .navbar.bg-white p {
+ color: #888888;
+}
+
+[data-background-color]:not([data-background-color="gray"]) h1,
+[data-background-color]:not([data-background-color="gray"]) h2,
+[data-background-color]:not([data-background-color="gray"]) h3,
+[data-background-color]:not([data-background-color="gray"]) h4,
+[data-background-color]:not([data-background-color="gray"]) h5,
+[data-background-color]:not([data-background-color="gray"]) h6,
+[data-background-color]:not([data-background-color="gray"]) a:not(.btn):not(.dropdown-item),
+[data-background-color]:not([data-background-color="gray"]) .icons-container {
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .input-group-text,
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .input-group-text,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .input-group-text {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .description,
+[data-background-color]:not([data-background-color="gray"]) .social-description p {
+ color: rgba(255, 255, 255, 0.8);
+}
+
+[data-background-color]:not([data-background-color="gray"]) p.blockquote {
+ border-color: rgba(255, 255, 255, 0.2);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .checkbox label::before,
+[data-background-color]:not([data-background-color="gray"]) .checkbox label::after,
+[data-background-color]:not([data-background-color="gray"]) .radio label::before,
+[data-background-color]:not([data-background-color="gray"]) .radio label::after {
+ border-color: rgba(255, 255, 255, 0.2);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .checkbox label::after,
+[data-background-color]:not([data-background-color="gray"]) .checkbox label,
+[data-background-color]:not([data-background-color="gray"]) .radio label {
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .checkbox input[type="checkbox"]:disabled+label,
+[data-background-color]:not([data-background-color="gray"]) .radio input[type="radio"]:disabled+label {
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .radio input[type="radio"]:not(:disabled):hover+label::after,
+[data-background-color]:not([data-background-color="gray"]) .radio input[type="radio"]:checked+label::after {
+ background-color: #FFFFFF;
+ border-color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-control::-moz-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-control:-moz-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-control::-webkit-input-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-control:-ms-input-placeholder {
+ color: #ebebeb;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-control {
+ border-color: rgba(255, 255, 255, 0.5);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-control:focus {
+ border-color: #FFFFFF;
+ background-color: transparent;
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .has-success:after,
+[data-background-color]:not([data-background-color="gray"]) .has-danger:after {
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .has-danger .form-control {
+ background-color: transparent;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .input-group-text {
+ background-color: transparent;
+ border-color: rgba(255, 255, 255, 0.5);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .input-group-focus .input-group-text {
+ background-color: transparent;
+ border-color: #FFFFFF;
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control {
+ background-color: rgba(255, 255, 255, 0.1);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control:focus,
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control:active,
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control:active,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control:focus,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control:active,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control:active {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control+.input-group-text,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control+.input-group-text {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control+.input-group-text:focus,
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control+.input-group-text:active,
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control+.input-group-text:active,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control+.input-group-text:focus,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control+.input-group-text:active,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control+.input-group-text:active {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .form-control:focus+.input-group-text,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .form-control:focus+.input-group-text {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border .input-group-text,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border .input-group-text {
+ background-color: rgba(255, 255, 255, 0.1);
+ border: none;
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .form-group.no-border.input-group-focus .input-group-text,
+[data-background-color]:not([data-background-color="gray"]) .input-group.no-border.input-group-focus .input-group-text {
+ background-color: rgba(255, 255, 255, 0.2);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"] {
+ background-color: transparent;
+ border-color: rgba(255, 255, 255, 0.5);
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"]:hover,
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"]:focus,
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"]:not(:disabled):not(.disabled):active,
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"]:not(:disabled):not(.disabled).active,
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"]:not(:disabled):not(.disabled):active:focus,
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"]:not(:disabled):not(.disabled).active:focus,
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"]:active:hover,
+[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"].active:hover,
+.show>[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"].dropdown-toggle,
+.show>[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"].dropdown-toggle:focus,
+.show>[data-background-color]:not([data-background-color="gray"]) .btn[class*="btn-outline-"].dropdown-toggle:hover {
+ background-color: transparent;
+ border-color: #FFFFFF;
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]) .nav-tabs>.nav-item>.nav-link i.now-ui-icons {
+ color: #FFFFFF;
+}
+
+[data-background-color]:not([data-background-color="gray"]).section-nucleo-icons .icons-container i:nth-child(6) {
+ color: #FFFFFF;
+}
+
+@media screen and (max-width: 991px) {
+ .sidebar-collapse .navbar-collapse {
+ position: fixed;
+ display: block;
+ top: 0;
+ height: 100% !important;
+ width: 300px;
+ right: 0;
+ z-index: 1032;
+ visibility: visible;
+ background-color: #999;
+ overflow-y: visible;
+ border-top: none;
+ text-align: left;
+ max-height: none !important;
+ -webkit-transform: translate3d(300px, 0, 0);
+ -moz-transform: translate3d(300px, 0, 0);
+ -o-transform: translate3d(300px, 0, 0);
+ -ms-transform: translate3d(300px, 0, 0);
+ transform: translate3d(300px, 0, 0);
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .sidebar-collapse .navbar-collapse:before {
+ background: #f96332;
+ /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#f96332 0%, #000 80%);
+ /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#f96332 0%, #000 80%);
+ /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#f96332 0%, #000 80%);
+ /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#f96332 0%, #000 80%);
+ /* Standard syntax (must be last) */
+ opacity: 0.76;
+ filter: alpha(opacity=76);
+ display: block;
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ z-index: -1;
+ }
+ .sidebar-collapse .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link {
+ margin: 0 1rem;
+ margin-top: 0.3125rem;
+ }
+ .sidebar-collapse .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link:not(.btn) {
+ color: #FFFFFF !important;
+ }
+ .sidebar-collapse .navbar-collapse .dropdown-menu .dropdown-item {
+ color: #FFFFFF;
+ }
+ .sidebar-collapse.menu-on-left .navbar-translate {
+ flex-direction: row-reverse;
+ }
+ .sidebar-collapse .navbar .navbar-nav {
+ margin-top: 53px;
+ position: relative;
+ max-height: calc(100vh - 75px);
+ min-height: 100%;
+ overflow: auto;
+ }
+ .sidebar-collapse .navbar .navbar-nav.navbar-logo {
+ top: 0;
+ height: 53px;
+ }
+ .sidebar-collapse .navbar .dropdown.show .dropdown-menu,
+ .sidebar-collapse .navbar .dropdown .dropdown-menu {
+ background-color: transparent;
+ border: 0;
+ transition: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ width: auto;
+ margin: 0 1rem;
+ margin-bottom: 15px;
+ padding-top: 0;
+ height: 125px;
+ overflow-y: scroll;
+ }
+ .sidebar-collapse .navbar .dropdown.show .dropdown-menu:before,
+ .sidebar-collapse .navbar .dropdown .dropdown-menu:before {
+ display: none;
+ }
+ .sidebar-collapse .navbar .dropdown .dropdown-item {
+ padding-left: 2.5rem;
+ }
+ .sidebar-collapse .navbar .dropdown .dropdown-menu {
+ display: none;
+ }
+ .sidebar-collapse .navbar .dropdown.show .dropdown-menu {
+ display: block;
+ }
+ .sidebar-collapse .navbar .dropdown-menu .dropdown-item:focus,
+ .sidebar-collapse .navbar .dropdown-menu .dropdown-item:hover {
+ color: #FFFFFF;
+ border-radius: 0.1875rem;
+ }
+ .sidebar-collapse .navbar .navbar-translate {
+ width: 100%;
+ position: relative;
+ display: flex;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-transform: translate3d(0px, 0, 0);
+ -moz-transform: translate3d(0px, 0, 0);
+ -o-transform: translate3d(0px, 0, 0);
+ -ms-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .sidebar-collapse .navbar .navbar-toggler-bar {
+ display: block;
+ position: relative;
+ width: 22px;
+ height: 1px;
+ border-radius: 1px;
+ background: #FFFFFF;
+ }
+ .sidebar-collapse .navbar .navbar-toggler-bar+.navbar-toggler-bar {
+ margin-top: 7px;
+ }
+ .sidebar-collapse .navbar .navbar-toggler-bar.bar2 {
+ width: 17px;
+ transition: width .2s linear;
+ }
+ .sidebar-collapse .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar {
+ background: #888888;
+ }
+ .sidebar-collapse .top-bar {
+ transform: rotate(0);
+ }
+ .sidebar-collapse .middle-bar {
+ opacity: 1;
+ }
+ .sidebar-collapse .bottom-bar {
+ transform: rotate(0);
+ }
+ .sidebar-collapse .top-bar,
+ .sidebar-collapse .middle-bar,
+ .sidebar-collapse .bottom-bar {
+ transition: all 0.2s;
+ }
+ .sidebar-collapse .toggled .top-bar {
+ transform: rotate(45deg);
+ transform-origin: 0%;
+ }
+ .sidebar-collapse .toggled .bottom-bar {
+ transform: rotate(-45deg);
+ transform-origin: 0%;
+ }
+ .sidebar-collapse .toggled .middle-bar {
+ opacity: 0;
+ }
+ .sidebar-collapse [class*="navbar-expand-"] .navbar-collapse {
+ width: 300px;
+ }
+ .sidebar-collapse .wrapper {
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .sidebar-collapse #bodyClick {
+ height: 100%;
+ width: 100%;
+ position: fixed;
+ opacity: 1;
+ top: 0;
+ left: auto;
+ right: 300px;
+ content: "";
+ z-index: 9999;
+ overflow-x: hidden;
+ background-color: transparent;
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .sidebar-collapse.menu-on-left .navbar-collapse {
+ right: auto;
+ left: 0;
+ -webkit-transform: translate3d(-300px, 0, 0);
+ -moz-transform: translate3d(-300px, 0, 0);
+ -o-transform: translate3d(-300px, 0, 0);
+ -ms-transform: translate3d(-300px, 0, 0);
+ transform: translate3d(-300px, 0, 0);
+ }
+ .nav-open .sidebar-collapse .navbar-collapse {
+ -webkit-transform: translate3d(0px, 0, 0);
+ -moz-transform: translate3d(0px, 0, 0);
+ -o-transform: translate3d(0px, 0, 0);
+ -ms-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+ }
+ .nav-open .sidebar-collapse .wrapper {
+ -webkit-transform: translate3d(-150px, 0, 0);
+ -moz-transform: translate3d(-150px, 0, 0);
+ -o-transform: translate3d(-150px, 0, 0);
+ -ms-transform: translate3d(-150px, 0, 0);
+ transform: translate3d(-150px, 0, 0);
+ }
+ .nav-open .sidebar-collapse .navbar-translate {
+ -webkit-transform: translate3d(-300px, 0, 0);
+ -moz-transform: translate3d(-300px, 0, 0);
+ -o-transform: translate3d(-300px, 0, 0);
+ -ms-transform: translate3d(-300px, 0, 0);
+ transform: translate3d(-300px, 0, 0);
+ }
+ .nav-open .sidebar-collapse.menu-on-left .navbar-collapse {
+ -webkit-transform: translate3d(0px, 0, 0);
+ -moz-transform: translate3d(0px, 0, 0);
+ -o-transform: translate3d(0px, 0, 0);
+ -ms-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+ }
+ .nav-open .sidebar-collapse.menu-on-left .navbar-translate {
+ -webkit-transform: translate3d(300px, 0, 0);
+ -moz-transform: translate3d(300px, 0, 0);
+ -o-transform: translate3d(300px, 0, 0);
+ -ms-transform: translate3d(300px, 0, 0);
+ transform: translate3d(300px, 0, 0);
+ }
+ .nav-open .sidebar-collapse.menu-on-left .wrapper {
+ -webkit-transform: translate3d(150px, 0, 0);
+ -moz-transform: translate3d(150px, 0, 0);
+ -o-transform: translate3d(150px, 0, 0);
+ -ms-transform: translate3d(150px, 0, 0);
+ transform: translate3d(150px, 0, 0);
+ }
+ .nav-open .sidebar-collapse.menu-on-left #bodyClick {
+ right: auto;
+ left: 300px;
+ }
+ .navbar-nav .nav-link i.fab,
+ .navbar-nav .nav-link i.now-ui-icons {
+ opacity: .5;
+ }
+ .bootstrap-collapse .navbar .navbar-collapse {
+ background: none !important;
+ }
+ .bootstrap-collapse.menu-on-left .navbar-translate {
+ flex-direction: row-reverse;
+ }
+ .bootstrap-collapse .navbar .navbar-nav {
+ margin-top: 53px;
+ position: relative;
+ max-height: calc(100vh - 75px);
+ min-height: 100%;
+ overflow: auto;
+ }
+ .bootstrap-collapse .navbar .navbar-nav.navbar-logo {
+ top: 0;
+ height: 53px;
+ }
+ .bootstrap-collapse .navbar .dropdown.show .dropdown-menu,
+ .bootstrap-collapse .navbar .dropdown .dropdown-menu {
+ background-color: transparent;
+ border: 0;
+ transition: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ width: auto;
+ margin: 0 1rem;
+ margin-bottom: 15px;
+ padding-top: 0;
+ height: 125px;
+ overflow-y: scroll;
+ }
+ .bootstrap-collapse .navbar .dropdown.show .dropdown-menu:before,
+ .bootstrap-collapse .navbar .dropdown .dropdown-menu:before {
+ display: none;
+ }
+ .bootstrap-collapse .navbar .dropdown .dropdown-item {
+ padding-left: 2.5rem;
+ }
+ .bootstrap-collapse .navbar .dropdown .dropdown-menu {
+ display: none;
+ }
+ .bootstrap-collapse .navbar .dropdown.show .dropdown-menu {
+ display: block;
+ }
+ .bootstrap-collapse .navbar .dropdown-menu .dropdown-item:focus,
+ .bootstrap-collapse .navbar .dropdown-menu .dropdown-item:hover {
+ color: #FFFFFF;
+ border-radius: 0.1875rem;
+ }
+ .bootstrap-collapse .navbar .navbar-translate {
+ width: 100%;
+ position: relative;
+ display: flex;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-transform: translate3d(0px, 0, 0);
+ -moz-transform: translate3d(0px, 0, 0);
+ -o-transform: translate3d(0px, 0, 0);
+ -ms-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .bootstrap-collapse .navbar .navbar-toggler-bar {
+ display: block;
+ position: relative;
+ width: 22px;
+ height: 1px;
+ border-radius: 1px;
+ background: #FFFFFF;
+ }
+ .bootstrap-collapse .navbar .navbar-toggler-bar+.navbar-toggler-bar {
+ margin-top: 7px;
+ }
+ .bootstrap-collapse .navbar .navbar-toggler-bar.bar2 {
+ width: 17px;
+ transition: width .2s linear;
+ }
+ .bootstrap-collapse .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar {
+ background: #888888;
+ }
+ .bootstrap-collapse .top-bar {
+ transform: rotate(0);
+ }
+ .bootstrap-collapse .middle-bar {
+ opacity: 1;
+ }
+ .bootstrap-collapse .bottom-bar {
+ transform: rotate(0);
+ }
+ .bootstrap-collapse .top-bar,
+ .bootstrap-collapse .middle-bar,
+ .bootstrap-collapse .bottom-bar {
+ transition: all 0.2s;
+ }
+ .bootstrap-collapse .toggled .top-bar {
+ transform: rotate(45deg);
+ transform-origin: 0%;
+ }
+ .bootstrap-collapse .toggled .bottom-bar {
+ transform: rotate(-45deg);
+ transform-origin: 0%;
+ }
+ .bootstrap-collapse .toggled .middle-bar {
+ opacity: 0;
+ }
+ .profile-photo .profile-photo-small {
+ margin-left: -2px;
+ }
+ .button-dropdown {
+ display: none;
+ }
+ .section-nucleo-icons .container .row>[class*="col-"]:first-child {
+ text-align: center;
+ }
+ .footer .copyright {
+ text-align: right;
+ }
+ .section-nucleo-icons .icons-container {
+ margin-top: 65px;
+ }
+ .navbar-nav .nav-link i.fa,
+ .navbar-nav .nav-link i.now-ui-icons {
+ opacity: .5;
+ }
+ .section-images {
+ height: 500px;
+ max-height: 500px;
+ }
+ .section-images .hero-images-container {
+ max-width: 500px;
+ }
+ .section-images .hero-images-container-1 {
+ right: 10%;
+ top: 68%;
+ max-width: 269px;
+ }
+ .section-images .hero-images-container-2 {
+ right: 5%;
+ max-width: 135px;
+ top: 93%;
+ }
+}
+
+@media screen and (min-width: 992px) {
+ .navbar-collapse:not(.has-image) {
+ background: transparent !important;
+ }
+ .burger-menu .navbar-collapse {
+ position: fixed;
+ display: block;
+ top: 0;
+ height: 100% !important;
+ width: 300px;
+ right: 0;
+ z-index: 1032;
+ visibility: visible;
+ background-color: #999;
+ overflow-y: visible;
+ border-top: none;
+ text-align: left;
+ max-height: none !important;
+ -webkit-transform: translate3d(300px, 0, 0);
+ -moz-transform: translate3d(300px, 0, 0);
+ -o-transform: translate3d(300px, 0, 0);
+ -ms-transform: translate3d(300px, 0, 0);
+ transform: translate3d(300px, 0, 0);
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .burger-menu .navbar-collapse:before {
+ background: #f96332;
+ /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#f96332 0%, #000 80%);
+ /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#f96332 0%, #000 80%);
+ /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#f96332 0%, #000 80%);
+ /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#f96332 0%, #000 80%);
+ /* Standard syntax (must be last) */
+ opacity: 0.76;
+ filter: alpha(opacity=76);
+ display: block;
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ z-index: -1;
+ }
+ .burger-menu .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link {
+ margin: 0 1rem;
+ margin-top: 0.3125rem;
+ }
+ .burger-menu .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link:not(.btn) {
+ color: #FFFFFF !important;
+ }
+ .burger-menu .navbar-collapse .dropdown-menu .dropdown-item {
+ color: #FFFFFF;
+ }
+ .burger-menu.menu-on-left .navbar-translate {
+ flex-direction: row-reverse;
+ }
+ .burger-menu .navbar .navbar-nav {
+ margin-top: 53px;
+ position: relative;
+ max-height: calc(100vh - 75px);
+ min-height: 100%;
+ overflow: auto;
+ }
+ .burger-menu .navbar .navbar-nav.navbar-logo {
+ top: 0;
+ height: 53px;
+ }
+ .burger-menu .navbar .dropdown.show .dropdown-menu,
+ .burger-menu .navbar .dropdown .dropdown-menu {
+ background-color: transparent;
+ border: 0;
+ transition: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ width: auto;
+ margin: 0 1rem;
+ margin-bottom: 15px;
+ padding-top: 0;
+ height: 125px;
+ overflow-y: scroll;
+ }
+ .burger-menu .navbar .dropdown.show .dropdown-menu:before,
+ .burger-menu .navbar .dropdown .dropdown-menu:before {
+ display: none;
+ }
+ .burger-menu .navbar .dropdown .dropdown-item {
+ padding-left: 2.5rem;
+ }
+ .burger-menu .navbar .dropdown .dropdown-menu {
+ display: none;
+ }
+ .burger-menu .navbar .dropdown.show .dropdown-menu {
+ display: block;
+ }
+ .burger-menu .navbar .dropdown-menu .dropdown-item:focus,
+ .burger-menu .navbar .dropdown-menu .dropdown-item:hover {
+ color: #FFFFFF;
+ border-radius: 0.1875rem;
+ }
+ .burger-menu .navbar .navbar-translate {
+ width: 100%;
+ position: relative;
+ display: flex;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-transform: translate3d(0px, 0, 0);
+ -moz-transform: translate3d(0px, 0, 0);
+ -o-transform: translate3d(0px, 0, 0);
+ -ms-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .burger-menu .navbar .navbar-toggler-bar {
+ display: block;
+ position: relative;
+ width: 22px;
+ height: 1px;
+ border-radius: 1px;
+ background: #FFFFFF;
+ }
+ .burger-menu .navbar .navbar-toggler-bar+.navbar-toggler-bar {
+ margin-top: 7px;
+ }
+ .burger-menu .navbar .navbar-toggler-bar.bar2 {
+ width: 17px;
+ transition: width .2s linear;
+ }
+ .burger-menu .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar {
+ background: #888888;
+ }
+ .burger-menu .top-bar {
+ transform: rotate(0);
+ }
+ .burger-menu .middle-bar {
+ opacity: 1;
+ }
+ .burger-menu .bottom-bar {
+ transform: rotate(0);
+ }
+ .burger-menu .top-bar,
+ .burger-menu .middle-bar,
+ .burger-menu .bottom-bar {
+ transition: all 0.2s;
+ }
+ .burger-menu .toggled .top-bar {
+ transform: rotate(45deg);
+ transform-origin: 0%;
+ }
+ .burger-menu .toggled .bottom-bar {
+ transform: rotate(-45deg);
+ transform-origin: 0%;
+ }
+ .burger-menu .toggled .middle-bar {
+ opacity: 0;
+ }
+ .burger-menu [class*="navbar-expand-"] .navbar-collapse {
+ width: 300px;
+ }
+ .burger-menu .wrapper {
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .burger-menu #bodyClick {
+ height: 100%;
+ width: 100%;
+ position: fixed;
+ opacity: 1;
+ top: 0;
+ left: auto;
+ right: 300px;
+ content: "";
+ z-index: 9999;
+ overflow-x: hidden;
+ background-color: transparent;
+ -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
+ }
+ .nav-open .burger-menu .navbar-collapse {
+ -webkit-transform: translate3d(0px, 0, 0);
+ -moz-transform: translate3d(0px, 0, 0);
+ -o-transform: translate3d(0px, 0, 0);
+ -ms-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+ }
+ .burger-menu .navbar-collapse {
+ display: block !important;
+ }
+ .burger-menu .navbar-collapse .navbar-nav {
+ margin-top: 53px;
+ height: 100%;
+ z-index: 2;
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ }
+ .burger-menu .navbar-collapse .navbar-nav .nav-item {
+ margin: 0;
+ }
+ .burger-menu.menu-on-left .navbar-collapse {
+ right: auto;
+ left: 0;
+ -webkit-transform: translate3d(-300px, 0, 0);
+ -moz-transform: translate3d(-300px, 0, 0);
+ -o-transform: translate3d(-300px, 0, 0);
+ -ms-transform: translate3d(-300px, 0, 0);
+ transform: translate3d(-300px, 0, 0);
+ }
+ .burger-menu [class*="navbar-expand-"] .navbar-nav .dropdown-menu {
+ position: static;
+ float: none;
+ }
+ .burger-menu [class*="navbar-expand-"] .navbar-toggler {
+ display: inline-block;
+ }
+ .burger-menu .section-navbars .navbar-collapse {
+ display: none !important;
+ }
+ .nav-open .burger-menu.menu-on-left .navbar .navbar-translate {
+ -webkit-transform: translate3d(300px, 0, 0);
+ -moz-transform: translate3d(300px, 0, 0);
+ -o-transform: translate3d(300px, 0, 0);
+ -ms-transform: translate3d(300px, 0, 0);
+ transform: translate3d(300px, 0, 0);
+ }
+ .nav-open .burger-menu .navbar .navbar-translate {
+ -webkit-transform: translate3d(-300px, 0, 0);
+ -moz-transform: translate3d(-300px, 0, 0);
+ -o-transform: translate3d(-300px, 0, 0);
+ -ms-transform: translate3d(-300px, 0, 0);
+ transform: translate3d(-300px, 0, 0);
+ }
+ .nav-open .burger-menu.menu-on-left .navbar-collapse {
+ -webkit-transform: translate3d(0px, 0, 0);
+ -moz-transform: translate3d(0px, 0, 0);
+ -o-transform: translate3d(0px, 0, 0);
+ -ms-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+ }
+ .nav-open .burger-menu.menu-on-left #bodyClick {
+ right: auto;
+ left: 300px;
+ }
+ .burger-menu.menu-on-left .navbar-brand {
+ float: right;
+ margin-right: 0;
+ margin-left: 1rem;
+ }
+ .navbar-nav .nav-link.profile-photo {
+ padding: 0;
+ margin: 7px 0.7rem;
+ }
+ .navbar-nav .nav-link.btn:not(.btn-sm) {
+ margin: 0;
+ }
+ .navbar-nav .nav-item:not(:last-child) {
+ margin-right: 5px;
+ }
+ .section-nucleo-icons .icons-container {
+ margin: 0 0 0 auto;
+ }
+ .dropdown-menu .dropdown-item {
+ color: inherit;
+ display: flex;
+ align-items: center;
+ }
+ .dropdown-menu .dropdown-item i {
+ margin-right: 5px;
+ position: relative;
+ top: 1px;
+ }
+ .footer .copyright {
+ float: right;
+ }
+}
+
+@media screen and (min-width: 768px) {
+ .image-container.image-right {
+ top: 80px;
+ margin-left: -100px;
+ margin-bottom: 130px;
+ }
+ .image-container.image-left {
+ margin-right: -100px;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .image-container.image-left {
+ margin-bottom: 220px;
+ }
+ .image-container.image-left p.blockquote {
+ margin: 0 auto;
+ position: relative;
+ right: 0;
+ }
+ .nav-tabs {
+ display: inline-block;
+ width: 100%;
+ padding-left: 100px;
+ padding-right: 100px;
+ text-align: center;
+ }
+ .nav-tabs .nav-item>.nav-link {
+ margin-bottom: 5px;
+ }
+ .landing-page .section-story-overview .image-container:nth-child(2) {
+ margin-left: 0;
+ margin-bottom: 30px;
+ }
+}
+
+@media screen and (max-width: 576px) {
+ .navbar[class*='navbar-expand-'] .container {
+ margin-left: 0;
+ margin-right: 0;
+ }
+ .footer .copyright {
+ text-align: center;
+ }
+ .section-nucleo-icons .icons-container i {
+ font-size: 30px;
+ }
+ .section-nucleo-icons .icons-container i:nth-child(6) {
+ font-size: 48px;
+ }
+ .page-header .container h6.category-absolute {
+ width: 90%;
+ }
+}
+
+@media screen and (min-width: 991px) and (max-width: 1200px) {
+ .section-images .hero-images-container-1 {
+ right: 9%;
+ max-width: 370px;
+ }
+ .section-images .hero-images-container-2 {
+ right: 2%;
+ max-width: 216px;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .section-images {
+ height: 300px;
+ max-height: 300px;
+ }
+ .section-images .hero-images-container {
+ max-width: 380px;
+ }
+ .section-images .hero-images-container-1 {
+ right: 7%;
+ top: 87%;
+ max-width: 210px;
+ }
+ .section-images .hero-images-container-2 {
+ right: 1%;
+ max-width: 133px;
+ top: 99%;
+ }
+}
+
+@media screen and (max-width: 517px) {
+ .alert .alert-icon {
+ margin-top: 10px;
+ }
+}
+
+@media screen and (min-width: 1200px) {
+ .section-images .hero-images-container-1 {
+ top: 51%;
+ right: 21%;
+ }
+ .section-images .hero-images-container-2 {
+ top: 66%;
+ right: 14%;
+ }
+}
+
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) {
+ .section-images .hero-images-container,
+ .section-images .hero-images-container-1,
+ .section-images .hero-images-container-2 {
+ margin-top: -15vh;
+ margin-left: 80px;
+ }
+ .section-images .hero-images-container {
+ max-width: 300px;
+ }
+ .section-images .hero-images-container-1 {
+ right: 28%;
+ top: 40%;
+ }
+ .section-images .hero-images-container-2 {
+ right: 21%;
+ top: 55%;
+ }
+ .index-page .category-absolute {
+ top: 90vh;
+ }
+}
+
+@media screen and (max-width: 580px) {
+ .alert button.close {
+ position: absolute;
+ right: 11px;
+ top: 50%;
+ transform: translateY(-50%);
+ }
+}
+
+@media only screen and (min-height: 950px) {
+ .index-page .page-header .category-absolute {
+ margin-top: -330px;
+ }
+}
+
+/*# sourceMappingURL=kit-free.css.map */
diff --git a/discord/bots/uwufier/favicon.png b/discord/bots/uwufier/favicon.png
new file mode 100644
index 0000000..ed219e7
--- /dev/null
+++ b/discord/bots/uwufier/favicon.png
Binary files differ
diff --git a/discord/bots/uwufier/features/index.html b/discord/bots/uwufier/features/index.html
new file mode 100644
index 0000000..1f37571
--- /dev/null
+++ b/discord/bots/uwufier/features/index.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/bootstrap.min.css">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/main.css">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/now-ui-kit.css">
+ <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,600,700,800&display=swap" rel="stylesheet">
+ <title>Uwufier - Features</title>
+ <script src="https://code.jquery.com/jquery-3.5.0.min.js"
+ integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
+ <script src="/discord/bots/uwufier/js/main.js"></script>
+ <link rel="shortcut icon" href="/discord/bots/uwufier/favicon.png" type="image/png">
+ <style>
+ body {
+ background-color: #7289DA;
+ }
+ </style>
+ <script src="https://cdn.jsdelivr.net/npm/@widgetbot/crate@3" async="" defer="">
+ new Crate({
+ server: '704032355987488791',
+ channel: '704032357170020463',
+ shard: 'https://e.widgetbot.io'
+ })
+ </script>
+ </head>
+ <body>
+ <nav class="navbar navbar-expand-lg bg-transparent hideme">
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <ul class="navbar-nav ml-auto">
+ <li class="nav-item">
+ <span class="nav-item" id="uwufier-status"></span>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/">Home</a>
+ </li>
+ <!--<li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/about/">About</a>
+ </li>-->
+ <li class="nav-item active">
+ <a class="nav-link" href="#">Features <span class="sr-only">(current)</span></a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="https://top.gg/bot/699473263998271489">top.gg</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ Documentation
+ </a>
+ <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+ <p class="dropdown-item-text">Coming soon!</p>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/commands/">Commands</a>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/tutorials/">Tutorials</a>
+ <a class="dropdown-item" href="https://discord.gg/DVwXUwx">Support Server</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/server-settings/">Server settings</a>
+ </div>
+ </li>
+ <li class="nav-item disabled">
+ <a href="https://kyzer.co/discord/bots/uwufier/login/" class="nav-link disabled">Login</a>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item">
+ <a href="https://kyzer.co" class="nav-link">More stuff from Sin</a>
+ </li>
+ </ul>
+ <!-- <button class="btn btn-outline-secondary my-2 my-sm-0 btn-round btn-sm">LOGIN</button> -->
+ </div>
+ </nav>
+ <div class="features" style="padding: 0px !important;">
+ <div class="title hideme" id="features">Features</div>
+ <div class="subtitle hideme">Some of the MANY features of the uwufier bot.</div>
+ <div class="cards hideme">
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Animals</h5>
+ <p class="card-text">Uwufier houses an INSANELY LARGE animal command group which includes random animal images, animal games, etc.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Anime/ Zero Two</h5>
+ <p class="card-text">For all you weebs out there, uwufier contains a platter of anime commands to fit your needs! This includes multiple Zero Two oriented commands, Darling.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Uwufier/ Bot</h5>
+ <p class="card-text">The uwufier/ bot command group contains a variety of support, help, etc. commands in case you are feeling a bit lost.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Crypto</h5>
+ <p class="card-text">The crypto command group encases an a few crypto-currency and security related commands.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Fun</h5>
+ <p class="card-text">This category encapsulates a surprising amount of fun games and activities that you can either play with others or even alone (rip).</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Minecraft</h5>
+ <p class="card-text">Along side the other groups, one that stands out is the Minecraft command group! This group has a few Minecraft related things like skin grabbers, a server status checker and more!</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Moderation</h5>
+ <p class="card-text">Moderation commands are always a must have. Uwufier does not shy on that aspect, with an extensive moderation command group, you can be sure to boot all those plebs.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">NSFW</h5>
+ <p class="card-text">Uhhh. I don't think this needs much explanation...</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Roleplay</h5>
+ <p class="card-text">Roleplay! A must have for any significant bot of this caliber. (Please suggest more commands!)</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Server/ User Management</h5>
+ <p class="card-text">This command group has many options for server/ user management which are more of quality-of-life commands rather than anything that should be used religiously.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Utility</h5>
+ <p class="card-text">Utilities, these are more external oriented rather than client oriented. They allow for server status checking and external features.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Voice/ Music</h5>
+ <p class="card-text">FINALLY! The voice/ music command group is a collection of audio oriented commands which include YouTube playback, soundboard features and more!</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!--<div class="statistics">
+ <div class="cards">
+ <div class="card statistic" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Servers</h5>
+ <h1 style="font-weight: bold !important">500</h1>
+ </div>
+ </div>
+ <div class="card statistic" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Users</h5>
+ <h1 style="font-weight: bold !important">5,000</h1>
+ </div>
+ </div>
+ <div class="card statistic" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Channels</h5>
+ <h1 style="font-weight: bold !important">1,000</h1>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="start">
+ <div class="card">
+ <div class="card-body">
+ <div class="title">Get started now!</div>
+ <div class="subtitle">Invite Bot and start controlling your servers today!</div>
+ <br />
+ <a class="btn btn-primary btn-lg" href="#start_link" role="button">Get started</a>
+ </div><br />
+ </div>
+ </div>
+ <!--<div class="footer">
+ Created by <a href="https://twitter.com/NourEldienHE"> Nouridio</a>
+ </div>-->
+ <!-- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+ <script src="/discord/bots/uwufier/js/now-ui-kit.min.js"></script>
+ </body>
+</html>
diff --git a/discord/bots/uwufier/index.html b/discord/bots/uwufier/index.html
new file mode 100644
index 0000000..2e756b1
--- /dev/null
+++ b/discord/bots/uwufier/index.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/bootstrap.min.css">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/main.css">
+ <link rel="stylesheet" href="/discord/bots/uwufier/css/now-ui-kit.css">
+ <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,600,700,800&display=swap" rel="stylesheet">
+ <title>Uwufier - Home</title>
+ <script src="https://code.jquery.com/jquery-3.5.0.min.js"
+ integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
+ <script src="/discord/bots/uwufier/js/main.js"></script>
+ <link rel="shortcut icon" href="/discord/bots/uwufier/favicon.png" type="image/png">
+ <script src="https://cdn.jsdelivr.net/npm/@widgetbot/crate@3" async="" defer="">
+ new Crate({
+ server: '704032355987488791',
+ channel: '704032357170020463',
+ shard: 'https://e.widgetbot.io'
+ })
+ </script>
+ </head>
+ <body>
+ <nav class="navbar navbar-expand-lg bg-transparent hideme" id="navbar-remove">
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <ul class="navbar-nav ml-auto">
+ <li class="nav-item">
+ <span class="nav-item" id="uwufier-status"></span>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item active">
+ <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
+ </li>
+ <!--<li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/about/">About</a>
+ </li>-->
+ <li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/features/">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="https://top.gg/bot/699473263998271489">top.gg</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ Documentation
+ </a>
+ <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+ <p class="dropdown-item-text">Coming soon!</p>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/commands/">Commands</a>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/tutorials/">Tutorials</a>
+ <a class="dropdown-item" href="https://discord.gg/DVwXUwx">Support Server</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item disabled" href="/discord/bots/uwufier/server-settings/">Server settings</a>
+ </div>
+ </li>
+ <li class="nav-item disabled">
+ <a href="https://kyzer.co/discord/bots/uwufier/login/" class="nav-link disabled">Login</a>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item">
+ <a href="https://kyzer.co" class="nav-link">More stuff from Sin</a>
+ </li>
+ </ul>
+ <!-- <button class="btn btn-outline-secondary my-2 my-sm-0 btn-round btn-sm">LOGIN</button> -->
+ </div>
+ </nav>
+ <div class="heading text-center hideme" id="heading">
+ <h1 class="display-5 title"><span id="title-quotes">&nbsp;</span></h1>
+ <p class="subtitle">
+ <span id="subtitle-text">
+ <a href="#">Uwufier</a> is a featured packed, ready to kill Discord bot which will shurly add fun to any server!<br />Now with roleplay!
+ </span>
+ </p>
+ <a class="btn btn-primary btn-lg" id="get-started-remove" href="#features" role="button">Get started</a>
+ <a class="btn btn-secondary btn-lg" href="https://discordapp.com/oauth2/authorize?client_id=699473263998271489&permissions=8&scope=bot" role="button">Add to server</a>
+ <br /><br /><br /><br /><br /><br />
+ </div>
+ <div class="features" id="features-mobile-remove">
+ <div class="title hideme" id="features">Features</div>
+ <div class="subtitle hideme">Some of the MANY features of the uwufier bot.</div>
+ <div class="cards hideme">
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Animals</h5>
+ <p class="card-text">Uwufier houses an INSANELY LARGE animal command group which includes random animal images, animal games, etc.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Anime/ Zero Two</h5>
+ <p class="card-text">For all you weebs out there, uwufier contains a platter of anime commands to fit your needs! This includes multiple Zero Two oriented commands, Darling.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Uwufier/ Bot</h5>
+ <p class="card-text">The uwufier/ bot command group contains a variety of support, help, etc. commands in case you are feeling a bit lost.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Crypto/ Utility</h5>
+ <p class="card-text">The crypto command group encases an a few crypto-currency and security related commands. Utilities, these are more external oriented rather than client oriented. They allow for server status checking and external features.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Fun</h5>
+ <p class="card-text">This category encapsulates a surprising amount of fun games and activities that you can either play with others or even alone (rip).</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Minecraft</h5>
+ <p class="card-text">Along side the other groups, one that stands out is the Minecraft command group! This group has a few Minecraft related things like skin grabbers, a server status checker and more!</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Moderation</h5>
+ <p class="card-text">Moderation commands are always a must have. Uwufier does not shy on that aspect, with an extensive moderation command group, you can be sure to boot all those plebs.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">NSFW</h5>
+ <p class="card-text">Uhhh. I don't think this needs much explanation...</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Roleplay</h5>
+ <p class="card-text">Roleplay! A must have for any significant bot of this caliber. (Please suggest more commands!)</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Server/ User Management</h5>
+ <p class="card-text">This command group has many options for server/ user management which are more of quality-of-life commands rather than anything that should be used religiously.</p>
+ </div>
+ </div>
+ <div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Voice/ Music</h5>
+ <p class="card-text">FINALLY! The voice/ music command group is a collection of audio oriented commands which include YouTube playback, soundboard features and more!</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!--<div class="statistics">
+ <div class="cards">
+ <div class="card statistic" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Servers</h5>
+ <h1 style="font-weight: bold !important">500</h1>
+ </div>
+ </div>
+ <div class="card statistic" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Users</h5>
+ <h1 style="font-weight: bold !important">5,000</h1>
+ </div>
+ </div>
+ <div class="card statistic" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Channels</h5>
+ <h1 style="font-weight: bold !important">1,000</h1>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="start">
+ <div class="card">
+ <div class="card-body">
+ <div class="title">Get started now!</div>
+ <div class="subtitle">Invite Bot and start controlling your servers today!</div>
+ <br />
+ <a class="btn btn-primary btn-lg" href="#start_link" role="button">Get started</a>
+ </div><br />
+ </div>
+ </div>
+ <!--<div class="footer">
+ Created by <a href="https://twitter.com/NourEldienHE"> Nouridio</a>
+ </div>-->
+ <!-- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+ <script src="/discord/bots/uwufier/js/now-ui-kit.min.js"></script>
+ <script>
+ function mobileCheck() {
+ let check = false;
+ (function (a) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);
+ return check;
+ }
+ if (mobileCheck()) {
+ document.getElementById("navbar-remove").remove();
+ document.getElementById("title-quotes").remove();
+ document.getElementById("features-mobile-remove").remove();
+ document.documentElement.style.overflow = 'hidden'
+ document.getElementById("subtitle-text").innerHTML = `
+ For full page, please visit on a desktop connection.
+ `
+ document.getElementById("get-started-remove").remove();
+ }
+ </script>
+ </body>
+</html>
diff --git a/discord/bots/uwufier/js/main.js b/discord/bots/uwufier/js/main.js
new file mode 100644
index 0000000..6fbb163
--- /dev/null
+++ b/discord/bots/uwufier/js/main.js
@@ -0,0 +1,110 @@
+$(document).ready(function () {
+ /* Every time the window is scrolled ... */
+ $(window).scroll(function () {
+ /* Check the location of each desired element */
+ $('.hideme').each(function (i) {
+ var bottom_of_object = $(this).position().top + $(this).outerHeight();
+ var bottom_of_window = $(window).scrollTop() + $(window).height();
+
+ /* If the object is completely visible in the window, fade it it */
+ if (bottom_of_window > bottom_of_object) {
+ $(this).animate({
+ 'opacity': '1'
+ }, 500);
+ }
+ });
+ });
+ $('.hideme').each(function (i) {
+ var bottom_of_object = $(this).position().top + $(this).outerHeight();
+ var bottom_of_window = $(window).scrollTop() + $(window).height();
+
+ /* If the object is completely visible in the window, fade it it */
+ if (bottom_of_window > bottom_of_object) {
+ $(this).animate({
+ 'opacity': '1'
+ }, 500);
+ }
+ if (document.getElementById("heading")) {
+ $(document.getElementById("heading")).animate({
+ 'opacity': '1'
+ }, 500);
+ }
+ if (document.getElementById("title-quotes")) {
+ $(document.getElementById("title-quotes")).animate({
+ 'opacity': '1'
+ }, 1500);
+ }
+ // document.getElementById("heading").animate({
+ // 'opacity': '1'
+ // }, 500);
+ });
+});
+//
+$.getJSON("/discord/bots/uwufier/assets/json/pun.json", function (data) {
+ var items = [];
+ let quoteNum = Math.floor(Math.random() * data.length);
+ document.getElementById("title-quotes").innerHTML = `
+ ${data[quoteNum]}
+ `;
+ // $.each(data, function (key, val) {
+ // items.push("<li id='" + key + "'>" + val + "</li>");
+ // });
+
+ // $("<ul/>", {
+ // "class": "my-new-list",
+ // html: items.join("")
+ // }).appendTo("body");
+});
+
+fetch('https://uppity-bot.herokuapp.com/?token=1337')
+ .then(function (response) {
+ // When the page is loaded convert it to text
+ return response.text();
+ })
+ .then(function (html) {
+ // Initialize the DOM parser
+ var parser = new DOMParser();
+
+ // Parse the text
+ var doc = parser.parseFromString(html, "text/html");
+
+ // You can now even select part of that html as you would in the regular DOM
+ // Example:
+ // var docArticle = doc.querySelector('article').innerHTML;
+
+ console.log(doc.body.textContent);
+
+ if (doc.body.textContent == 'maintenance') {
+ document.getElementById("uwufier-status").innerHTML = `
+ <a class="nav-link disabled" href="#" style="color: #ff9966; opacity: 1;">
+ Maintenance
+ </a>
+ `;
+ } else if (doc.body.textContent == 'online') {
+ document.getElementById("uwufier-status").innerHTML = `
+ <a class="nav-link disabled" href="#" style="color: #99CC33; opacity: 1;">
+ Online
+ </a>
+ `;
+ } else if (doc.body.textContent == 'offline') {
+ document.getElementById("uwufier-status").innerHTML = `
+ <a class="nav-link disabled" href="#" style="color: #CC3300; opacity: 1;">
+ Offline
+ </a>
+ `;
+ } else {
+ document.getElementById("uwufier-status").innerHTML = `
+ <a class="nav-link disabled" href="#" style="color: #CC3300; opacity: 1;">
+ Error
+ </a>
+ `;
+ }
+ })
+ .catch(function (err) {
+ console.log('Failed to fetch page: ', err);
+ document.getElementById("uwufier-status").innerHTML = `
+ <a class="nav-link disabled" href="#" style="color: #CC3300; opacity: 1;">
+ Error
+ </a>
+ `;
+ }); \ No newline at end of file
diff --git a/discord/bots/uwufier/js/now-ui-kit.min.js b/discord/bots/uwufier/js/now-ui-kit.min.js
new file mode 100644
index 0000000..005d910
--- /dev/null
+++ b/discord/bots/uwufier/js/now-ui-kit.min.js
@@ -0,0 +1,2 @@
+var big_image,navbar_initialized,nowuiKit,$navbar,scroll_distance,oVal,transparent=!0,transparentDemo=!0,fixedTop=!1,backgroundOrange=!1,toggle_initialized=!1;function debounce(n,e,t){var r;return function(){var a=this,o=arguments;clearTimeout(r),r=setTimeout(function(){r=null,t||n.apply(a,o)},e),t&&!r&&n.apply(a,o)}}function debounce(n,e,t){var r;return function(){var a=this,o=arguments;clearTimeout(r),r=setTimeout(function(){r=null,t||n.apply(a,o)},e),t&&!r&&n.apply(a,o)}}$(document).ready(function(){$('[data-toggle="tooltip"], [rel="tooltip"]').tooltip(),$('[data-toggle="popover"]').each(function(){color_class=$(this).data("color"),$(this).popover({template:'<div class="popover popover-'+color_class+'" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'})}),nowuiKit.initNavbarImage(),$navbar=$(".navbar[color-on-scroll]"),scroll_distance=$navbar.attr("color-on-scroll")||500,0!=$(".navbar[color-on-scroll]").length&&(nowuiKit.checkScrollForTransparentNavbar(),$(window).on("scroll",nowuiKit.checkScrollForTransparentNavbar)),$(".form-control").on("focus",function(){$(this).parent(".input-group").addClass("input-group-focus")}).on("blur",function(){$(this).parent(".input-group").removeClass("input-group-focus")}),$(".bootstrap-switch").each(function(){$this=$(this),data_on_label=$this.data("on-label")||"",data_off_label=$this.data("off-label")||"",$this.bootstrapSwitch({onText:data_on_label,offText:data_off_label})}),992<=$(window).width()&&(big_image=$('.page-header-image[data-parallax="true"]'),$(window).on("scroll",nowuiKitDemo.checkScrollForParallax)),$(".carousel").carousel({interval:4e3}),$(".date-picker").each(function(){$(this).datepicker({templates:{leftArrow:'<i class="now-ui-icons arrows-1_minimal-left"></i>',rightArrow:'<i class="now-ui-icons arrows-1_minimal-right"></i>'}}).on("show",function(){$(".datepicker").addClass("open"),datepicker_color=$(this).data("datepicker-color"),0!=datepicker_color.length&&$(".datepicker").addClass("datepicker-"+datepicker_color)}).on("hide",function(){$(".datepicker").removeClass("open")})})}),nowuiKitDemo={checkScrollForParallax:debounce(function(){$(this).scrollTop();oVal=$(window).scrollTop()/3,big_image.css({transform:"translate3d(0,"+oVal+"px,0)","-webkit-transform":"translate3d(0,"+oVal+"px,0)","-ms-transform":"translate3d(0,"+oVal+"px,0)","-o-transform":"translate3d(0,"+oVal+"px,0)"})},6)},$(window).on("resize",function(){nowuiKit.initNavbarImage()}),$(document).on("click",".navbar-toggler",function(){$toggle=$(this),1==nowuiKit.misc.navbar_menu_visible?($("html").removeClass("nav-open"),nowuiKit.misc.navbar_menu_visible=0,$("#bodyClick").remove(),setTimeout(function(){$toggle.removeClass("toggled")},550)):(setTimeout(function(){$toggle.addClass("toggled")},580),div='<div id="bodyClick"></div>',$(div).appendTo("body").click(function(){$("html").removeClass("nav-open"),nowuiKit.misc.navbar_menu_visible=0,setTimeout(function(){$toggle.removeClass("toggled"),$("#bodyClick").remove()},550)}),$("html").addClass("nav-open"),nowuiKit.misc.navbar_menu_visible=1)}),nowuiKit={misc:{navbar_menu_visible:0},checkScrollForTransparentNavbar:debounce(function(){$(document).scrollTop()>scroll_distance?transparent&&(transparent=!1,$(".navbar[color-on-scroll]").removeClass("navbar-transparent")):transparent||(transparent=!0,$(".navbar[color-on-scroll]").addClass("navbar-transparent"))},17),initNavbarImage:function(){var a=$(".navbar").find(".navbar-translate").siblings(".navbar-collapse"),o=a.data("nav-image");null!=o&&($(window).width()<991||$("body").hasClass("burger-menu")?a.css("background","url('"+o+"')").removeAttr("data-nav-image").css("background-size","cover").addClass("has-image"):a.css("background","").attr("data-nav-image",""+o).css("background-size","").removeClass("has-image"))},initSliders:function(){var a=document.getElementById("sliderRegular");noUiSlider.create(a,{start:40,connect:[!0,!1],range:{min:0,max:100}});var o=document.getElementById("sliderDouble");noUiSlider.create(o,{start:[20,60],connect:!0,range:{min:0,max:100}})}},nowuiKitDemo={checkScrollForParallax:debounce(function(){$(this).scrollTop();oVal=$(window).scrollTop()/3,big_image.css({transform:"translate3d(0,"+oVal+"px,0)","-webkit-transform":"translate3d(0,"+oVal+"px,0)","-ms-transform":"translate3d(0,"+oVal+"px,0)","-o-transform":"translate3d(0,"+oVal+"px,0)"})},6)};
+//# sourceMappingURL=_site_kit_free/assets/js/kit-free.js.map
diff --git a/discord/servers/psycho/assets/audio.mp3 b/discord/servers/psycho/assets/audio.mp3
new file mode 100644
index 0000000..d5ab8e6
--- /dev/null
+++ b/discord/servers/psycho/assets/audio.mp3
Binary files differ
diff --git a/discord/servers/psycho/assets/favicon.jpg b/discord/servers/psycho/assets/favicon.jpg
new file mode 100644
index 0000000..247c101
--- /dev/null
+++ b/discord/servers/psycho/assets/favicon.jpg
Binary files differ
diff --git a/discord/servers/psycho/assets/silence.mp3 b/discord/servers/psycho/assets/silence.mp3
new file mode 100644
index 0000000..16de7c3
--- /dev/null
+++ b/discord/servers/psycho/assets/silence.mp3
Binary files differ
diff --git a/discord/servers/psycho/css/main.css b/discord/servers/psycho/css/main.css
new file mode 100644
index 0000000..256f117
--- /dev/null
+++ b/discord/servers/psycho/css/main.css
@@ -0,0 +1,60 @@
+html {
+ background: black;
+}
+
+.main {
+ color: #fff;
+ font-family: Helvetica,"Helvetica Neue",Arial,"Lucida Grande", sans-serif;
+ text-align: center;
+ z-index: 1;
+ margin: auto;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+
+a:hover {
+ letter-spacing: 2px;
+ transition: .5s;
+}
+
+#bld:hover {
+ letter-spacing: 4px;
+}
+
+a {
+ transition: .5s;
+ text-decoration: none;
+ color: #fff;
+ box-shadow:
+ 0 2.8px 2.2px rgba(0, 0, 0, 0.034),
+ 0 6.7px 5.3px rgba(0, 0, 0, 0.048),
+ 0 12.5px 10px rgba(0, 0, 0, 0.06),
+ 0 22.3px 17.9px rgba(0, 0, 0, 0.072),
+ 0 41.8px 33.4px rgba(0, 0, 0, 0.086),
+ 0 100px 80px rgba(0, 0, 0, 0.12)
+;
+}
+
+#vid {
+ position: fixed;
+ min-width: 103%;
+ min-height: 103%;
+ opacity: 0.5;
+ width: auto;
+ height: auto;
+ z-index: -100;
+ transform: translateX(-50%) translateY(-50%);
+ background-size: cover;
+ overflow: hidden;
+ -webkit-filter: blur(15px);
+ -moz-filter: blur(15px);
+ -o-filter: blur(15px);
+ -ms-filter: blur(15px);
+ filter: blur(15px);
+ background: rgba(7, 9, 21, .5);
+ filter: brightness(42.5%);
+ top: 50%;
+ left: 50%
+} \ No newline at end of file
diff --git a/discord/servers/psycho/index.php b/discord/servers/psycho/index.php
new file mode 100644
index 0000000..ddadf6c
--- /dev/null
+++ b/discord/servers/psycho/index.php
@@ -0,0 +1,80 @@
+<?php
+ // Do make a visitors.html file and set permission to 0777
+
+ $ip = $_SERVER['REMOTE_ADDR'];
+ $browser = $_SERVER['HTTP_USER_AGENT'];
+ date_default_timezone_set('America/Los_Angeles');
+ $dateTime = date('m/d/Y G:i:s');
+ $file = "/visitors/index.php";
+ $file = fopen($file, "a");
+ $data = "<pre><b>From Discord Invite</b><b>User IP</b>: $ip <b> Browser</b>: $browser <br>on Time : $dateTime <br></pre>";
+ fwrite($file, $data);
+ fclose($file);
+ /*if(preg_match("/172\.68\.174\.([0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5])")) {
+ echo "<h1>Hi n0.0b :)</h1>";
+ }*/
+?>
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>Psycho (い違フ)</title>
+ <link href="/discord/servers/psycho/assets/favicon.jpg" rel="icon" type="image/jpg">
+ <!-- <link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon"> -->
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/discord/servers/psycho/css/main.css">
+ <link rel="stylesheet" href="/css/no-text-highlighting.css">
+ <!-- External Libraries -->
+ <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
+ <!-- Invisible Script -->
+ <script src="/js/hide-context-menu.js"></script>
+ <script src="/discord/servers/psycho/js/main.js"></script>
+ <script>new ClipboardJS('.btn-copy');</script>
+ <script>
+ var space = " ";
+ var speed = "120";
+ var pos = 0;
+ var msg = "Psycho (い違フ) | 🥀 | "; /*Enter the scrolling title as the msg variable's value.*/
+
+ function Scroll() {
+ document.title = msg.substring(pos, msg.length) + space + msg.substring(0, pos);
+ pos++;
+ if (pos > msg.length) pos = 0;
+ window.setTimeout("Scroll()", speed);
+ }
+ Scroll();
+ </script>
+ </head>
+ <body>
+ <!-- Visable Script -->
+ <embed src="/discord/psycho/assets/audio.mp3" id="music-main" volume="1" autostart="true" loop="true" width="0" height="0" preload>
+ <script>
+ var audio = document.currentScript.parentElement;
+ audio.volume = 0.333;
+ </script>
+ </embed>
+ <video playsinline autoplay loop muted id="vid">
+ <source src="https://maldrama.tk/JE6Q_da-idY_1080p.mp4" type="video/mp4"></source>
+ <script>
+ var video = document.currentScript.parentElement;
+ video.volume = 0.333;
+ </script>
+ </video>
+
+ <div class="main">
+ <div class="txt">
+ <a id="bld" onclick="location.reload();" style="font-weight: 700; font-size: 40px;" href="#" class="btn-copy" data-clipboard-text="https://crack.cf/psycho">Psycho (い違フ)</a>
+
+ <div class="light" style="font-weight: 500;">
+ <a href="https://discord.gg/WT34MSu" class="btn-copy" data-clipboard-text="https://discord.gg/WT34MSu">/discord</a><br>
+ <a href="rules">/rules</a><br>
+ </div>
+ </div>
+ </div>
+ <p style="position: absolute; top: -5px; left: 5px; font-size: 10px; color: white; font-family: Arial">if browser does not support the audio element, please click Psycho (い違フ) or <a onclick="location.reload();" href="#"><u>here</u></a></p>
+ <!--<span style="position: absolute; bottom: 5px; left: 5px; font-size: 10px; color: white; font-family: Arial"><a onclick="" href="#"><u>pause</u></a></span>-->
+ </body>
+</html>
diff --git a/discord/servers/psycho/js/main.js b/discord/servers/psycho/js/main.js
new file mode 100644
index 0000000..49ec780
--- /dev/null
+++ b/discord/servers/psycho/js/main.js
@@ -0,0 +1,12 @@
+$(window).on('keydown', function () {
+ if (event.keyCode == 123)
+ return false;
+ else if (event.ctrlKey && event.shiftKey && event.keyCode == 73)
+ return false;
+ else if (event.ctrlKey && event.keyCode == 73)
+ return false;
+ else if (event.ctrlKey && event.shiftKey && event.keyCode == 74)
+ return false;
+ else if (event.ctrlKey && event.keyCode == 74)
+ return false;
+}); \ No newline at end of file
diff --git a/discord/servers/psycho/rules/index.html b/discord/servers/psycho/rules/index.html
new file mode 100644
index 0000000..32de820
--- /dev/null
+++ b/discord/servers/psycho/rules/index.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>Psycho (い違フ) Rules</title>
+ <link href="/discord/servers/psycho/assets/favicon.jpg" rel="icon" type="image/jpg">
+ <!-- <link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon"> -->
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/discord/servers/psycho/css/main.css">
+ <link rel="stylesheet" href="/css/no-text-highlighting.css">
+ <!-- External Libraries -->
+ <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
+ <!-- Invisible Script -->
+ <script src="/js/hide-context-menu.js"></script>
+ <script src="/discord/servers/psycho/js/main.js"></script>
+ <script>new ClipboardJS('.btn-copy');</script>
+ <script>
+ var space = " ";
+ var speed = "120";
+ var pos = 0;
+ var msg = "Psycho (い違フ) Rules | 🥀 | "; /*Enter the scrolling title as the msg variable's value.*/
+
+ function Scroll() {
+ document.title = msg.substring(pos, msg.length) + space + msg.substring(0, pos);
+ pos++;
+ if (pos > msg.length) pos = 0;
+ window.setTimeout("Scroll()", speed);
+ }
+ Scroll();
+ </script>
+ </head>
+
+ <body>
+ <!-- Visable Script -->
+ <embed src="/discord/psycho/assets/audio.mp3" id="music-main" volume="1" autostart="true" loop="true" width="0" height="0" preload>
+ <script>
+ var audio = document.currentScript.parentElement;
+ audio.volume = 0.333;
+ </script>
+ </embed>
+ <video playsinline autoplay loop muted id="vid">
+ <source src="https://maldrama.tk/JE6Q_da-idY_1080p.mp4" type="video/mp4"></source>
+ <script>
+ var video = document.currentScript.parentElement;
+ video.volume = 0.333;
+ </script>
+ </video>
+
+ <div class="main">
+ <div class="txt">
+ <div class="light" style="font-weight: 500;">
+ <main>
+ <style>
+ main {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ text-align: left;
+ position: relative;
+ top: 330px;
+ }
+
+ * {
+ scroll-behavior: smooth;
+ }
+ </style>
+ <div id="top" style="position: absolute; top: 0;"></div>
+ <a href="#server"><u id="server" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#server">Server Rules:</u><br></a>
+
+ <a href="#general"><b id="general" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#general">1.0 - General server rules</b></a>
+
+ <code>
+ - 1.0a. No blank nicknames.
+ - 1.0b. No inappropriate nicknames.
+ - 1.0c. No sexually explicit nicknames.
+ - 1.0d. No offensive nicknames.
+ - 1.0e. No nicknames with unusual or unreadable Unicode.
+ - 1.0f. No blank profile pictures.
+ - 1.0g. No inappropriate profile pictures.
+ - 1.0h. No sexually explicit profile pictures.
+ - 1.0i. No offensive profile pictures.
+ - 1.0j. Moderators reserve the right to change nicknames.
+ - 1.0k. Moderators reserve the right to use their own discretion regardless of any rule.
+ - 1.0l. No exploiting loopholes in the rules (please report them).
+ - 1.0m. No inviting unofficial bots.
+ - 1.0n. No bugs, exploits, glitches, hacks, bugs, etc.
+ </code>
+
+ <a href="#text"><b id="text" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#text">2.0 - Text chat rules</b></a>
+
+ <code>
+ - 2.0a. No questioning the mods.
+ - 2.0b. No asking to be granted roles/moderator roles.
+ - 2.0c. @mention the moderators for support.
+ - 2.0d. Contact the moderators under <a href="https://discord.gg/U9VDvWe" class="btn-copy" data-clipboard-text="https://discord.gg/U9VDvWe"><u>#help</u></a> for support.
+ - 2.0e. No @everyone/@here mentioning without permission.
+ - 2.0f. No @mentioning spam.
+ - 2.0g. No NSFW content.
+ - 2.0h. No illegal content.
+ - 2.0i. No publishing of personal information (including real names, addresses, emails, passwords, bank account and credit card information, etc.).
+ - 2.0j. No personal attacks.
+ - 2.0k. No witch hunting.
+ - 2.0l. No harassment.
+ - 2.0m. No sexism.
+ - 2.0n. No racism.
+ - 2.0o. No hate speech.
+ - 2.0p. No sexual discussions.
+ - 2.0q. No flame wars.
+ - 2.0r. Agree to disagree.
+ - 2.0s. No spamming.
+ - 2.0t. No excessive messaging (breaking up an idea in many posts instead of writing all out in just one post).
+ - 2.0u. No walls of text (either in separate posts or as a single post).
+ - 2.0v. Keep conversations in English.
+ - 2.0w. Use <a href="https://discord.gg/YCqnaNv" class="btn-copy" data-clipboard-text="https://discord.gg/YCqnaNv"><u>#off-topic</u></a> for conversations in another/other language(s).
+ - 2.0x. Moderators reserve the right to delete any post.
+ - 2.0y. Moderators reserve the right to edit any post.
+ - 2.1z. No advertisement without permission.
+ - 2.1a. No linking to other servers.
+ - 2.1b. Bot commands only under <a href="https://discord.gg/FxvAABq" class="btn-copy" data-clipboard-text="https://discord.gg/FxvAABq"><u>#bots</u></a>.
+ - 2.1c. No channel hopping.
+ - 2.1d. No off-topic/use the right text channel for the topic you wish to discuss.
+ </code>
+
+ <a href="#voice"><b id="voice" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#voice">3.0 - Voice chat rules</b></a>
+
+ <code>
+ - 3.0a. No voice chat channel hopping.
+ - 3.0b. No annoying, loud or high pitch noises.
+ - 3.0c. Reduce the amount of background noise, if possible.
+ - 3.0d. Moderators reserve the right to disconnect you from a voice channel if your sound quality is poor.
+ - 3.0e. Moderators reserve the right to disconnect, mute, deafen, or move members to and from voice channels.
+ </code>
+
+ <a href="#bot"><b id="bot" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#bot">4.0 - Bot specific rules</b></a>
+
+ <code>
+ - 4.0a. No command spam.
+ - 4.0b. No macros.
+ - 4.0c. No hacks.
+ - 4.0d. No adding/changing/removing commands.
+ </code>
+
+ <a href="#policies"><u id="policies" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#policies">Policies:</u><br></a>
+
+ <a href="#swif"><b id="swif" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#swif">Staff's Word is Final</b></a>
+ <code>
+ If you have any issues with a verdict or a punishment given out by a staff member you need to accept it and then speak to a higher up staff member about it. You may also appeal your punishment or report the staff member in question to a higher up staff member.
+ </code>
+
+ <a href="#loopholing"><b id="loopholing" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#loopholing">Loopholing</b></a>
+ <code>
+ The rules are in place in order to ensure a fun and safe environment on the servers and as such are not here for anyone to scrutinize or attempt to loophole. The staff have the final word on the rules, if you feel like a staff member is abusing you may submit a report against them.
+ </code>
+
+ <a href="#agreement"><b id="agreement" class="btn-copy" data-clipboard-text="https://kyzer.co/discord/psycho/rules/#agreement">Server Agreement</b></a>
+ <code>
+ BY INTERACTING WITH THIS SERVER YOU AGREE TO THE DISCORD RULES & GUIDELINES (<a href="https://dis.gd/guidelines" class="btn-copy" data-clipboard-text="https://dis.gd/guidelines"><u>https://dis.gd/guidelines</u></a>) AND UNDERSTAND THAT IF YOU FAIL TO FOLLOW THESE GUIDELINES (and/or) THE SERVER RULES THAT YOU MAY BE PUNISHED ACCORDINGLY. PUNISHMENTS ARE DETERMINED BY THE STAFF MEMBERS ON THE SERVER, BUT MAY BE OVERRULED IF THE PUNISHMENT IS DEEMED INAPPROPRIATE OR FALSE. YOU ACCEPT THAT ALTHOUGH THE RULES MAY NOT DIRECTLY PROHIBIT AN ACTION THAT THE ACTION MAY STILL BE PUNISHABLE IF A STAFF MEMBER DETERMINES THE BEHAVIOUR OR ACTIONS YOU PERPETRATE TO BE NEGATIVELY IMPACTING THE SERVER TO THE POINT WHERE IT IS HARMING MEMBERS OF THE SERVER AND/OR THE SERVER ITSELF.
+ </code>
+ </main>
+ </div>
+ </div>
+
+ </div>
+ <p style="position: fixed; top: -5px; left: 5px; font-size: 10px; color: white; font-family: Arial">
+ if browser does not support the audio element, please click <a onclick="location.reload();" href="#"><u>here</u></a><br>
+ rules might also have trouble displaying in windowed browser instances
+ </p>
+
+ </body>
+
+</html>
diff --git a/discord/servers/psycho/rules/legacy-o1lSgVqdjQpvdy42.html b/discord/servers/psycho/rules/legacy-o1lSgVqdjQpvdy42.html
new file mode 100644
index 0000000..b943659
--- /dev/null
+++ b/discord/servers/psycho/rules/legacy-o1lSgVqdjQpvdy42.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <meta name="theme-color" content="#FFF">
+ <title>Psycho (い違フ) Rules</title>
+ <!-- Site metadata -->
+ <meta name="description" content="Psycho (い違フ) Rules">
+ <meta property="og:description" content="Psycho (い違フ) Rules">
+ <meta property="og:title" content="Psycho (い違フ) Rules">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/discord/psycho/rules">
+ <!-- Favicons -->
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/discord/psycho/rules">
+ <link rel="author" href="humans.txt" />
+ <!-- Invisible Scripts -->
+ <script src="/js/hide-context-menu.js"></script>
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Psycho (い違フ) Rules",
+ "headline": "Psycho (い違フ) Rules",
+ "url": "https://kyzer.co/discord/psycho/rules",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ </head>
+ <body>
+ <main style="word-wrap: break-word; white-space: pre-wrap; width: 70%">
+ <u>Server Rules:</u>
+
+ <b>1.0 - General server rules</b>
+
+ <code>
+ - 1.0a. No blank nicknames.
+ - 1.0b. No inappropriate nicknames.
+ - 1.0c. No sexually explicit nicknames.
+ - 1.0d. No offensive nicknames.
+ - 1.0e. No nicknames with unusual or unreadable Unicode.
+ - 1.0f. No blank profile pictures.
+ - 1.0g. No inappropriate profile pictures.
+ - 1.0h. No sexually explicit profile pictures.
+ - 1.0i. No offensive profile pictures.
+ - 1.0j. Moderators reserve the right to change nicknames.
+ - 1.0k. Moderators reserve the right to use their own discretion regardless of any rule.
+ - 1.0l. No exploiting loopholes in the rules (please report them).
+ - 1.0m. No inviting unofficial bots.
+ - 1.0n. No bugs, exploits, glitches, hacks, bugs, etc.
+ </code>
+
+ <b>2.0 - Text chat rules</b>
+
+ <code>
+ - 2.0a. No questioning the mods.
+ - 2.0b. No @mentioning the mods.
+ - 2.0c. No asking to be granted roles/moderator roles.
+ - 2.0d. @mention the moderators for support.
+ - 2.0e. Contact the moderators under` #help `for support.
+ - 2.0f. No` @everyone/@here `mentioning without permission.
+ - 2.0g. No @mentioning spam.
+ - 2.0h. No NSFW content.
+ - 2.0i. No illegal content.
+ - 2.0j. No publishing of personal information (including real names, addresses, emails, passwords, bank account and credit card information, etc.).
+ - 2.0k. No personal attacks.
+ - 2.0l. No witch hunting.
+ - 2.0m. No harassment.
+ - 2.0n. No sexism.
+ - 2.0o. No racism.
+ - 2.0p. No hate speech.
+ - 2.0q. No sexual discussions.
+ - 2.0r. No flame wars.
+ - 2.0s. Agree to disagree.
+ - 2.0t. No spamming.
+ - 2.0u. No excessive messaging (breaking up an idea in many posts instead of writing all out in just one post).
+ - 2.0v. No walls of text (either in separate posts or as a single post).
+ - 2.0w. Keep conversations in English.
+ - 2.0x. Use` #off-topic `for conversations in another/other language(s).
+ - 2.0y. Moderators reserve the right to delete any post.
+ - 2.0z. Moderators reserve the right to edit any post.
+ - 2.1a. No advertisement without permission.
+ - 2.1b. No linking to other servers.
+ - 2.1c. Bot commands only under` #bot-commands`.
+ - 2.1d. No channel hopping.
+ - 2.1e. No off-topic/use the right text channel for the topic you wish to discuss.
+ </code>
+
+ </b>3.0 - Voice chat rules</b>
+
+ <code>
+ - 3.0a. No voice chat channel hopping.
+ - 3.0b. No annoying, loud or high pitch noises.
+ - 3.0c. Reduce the amount of background noise, if possible.
+ - 3.0d. Moderators reserve the right to disconnect you from a voice channel if your sound quality is poor.
+ - 3.0e. Moderators reserve the right to disconnect, mute, deafen, or move members to and from voice channels.
+ </code>
+
+ <b>4.0 - Bot specific rules</b>
+
+ <code>
+ - 4.0a. No command spam.
+ - 4.0b. No macros.
+ - 4.0c. No hacks.
+ - 4.0d. No adding/changing/removing commands.
+ </code>
+
+ <u>Policies:</u>
+
+ <b>Staff's Word is Final</b>
+ <code>
+ If you have any issues with a verdict or a punishment given out by a staff member you need to accept it and then speak to a higher up staff member about it. You may also appeal your punishment or report the staff member in question to a higher up staff member.
+ </code>
+
+ <b>Loopholing</b>
+ <code>
+ The rules are in place in order to ensure a fun and safe environment on the servers and as such are not here for anyone to scrutinize or attempt to loophole. The staff have the final word on the rules, if you feel like a staff member is abusing you may submit a report against them.
+ </code>
+
+ <b>Server Agreement</b>
+ <code>
+ BY INTERACTING WITH THIS SERVER YOU AGREE TO THE DISCORD RULES & GUIDELINES` (https://dis.gd/guidelines) `AND UNDERSTAND THAT IF YOU FAIL TO FOLLOW THESE GUIDELINES (and/or) THE SERVER RULES THAT YOU MAY BE PUNISHED ACCORDINGLY. PUNISHMENTS ARE DETERMINED BY THE STAFF MEMBERS ON THE SERVER, BUT MAY BE OVERRULED IF THE PUNISHMENT IS DEEMED INAPPROPRIATE OR FALSE. YOU ACCEPT THAT ALTHOUGH THE RULES MAY NOT DIRECTLY PROHIBIT AN ACTION THAT THE ACTION MAY STILL BE PUNISHABLE IF A STAFF MEMBER DETERMINES THE BEHAVIOUR OR ACTIONS YOU PERPETRATE TO BE NEGATIVELY IMPACTING THE SERVER TO THE POINT WHERE IT IS HARMING MEMBERS OF THE SERVER AND/OR THE SERVER ITSELF.
+ </code>
+ </main>
+ </body>
diff --git a/doc/.htaccess b/doc/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/doc/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/doc/easter-eggs.txt b/doc/easter-eggs.txt
new file mode 100644
index 0000000..995357b
--- /dev/null
+++ b/doc/easter-eggs.txt
@@ -0,0 +1,47 @@
+pie
+ufo
+walk
+cool
+balloon
+hangover
+kirby
+no
+onmyway
+haters
+board
+snorlax
+fly
+earth
+thankyou
+swim
+penguin
+handsome
+tank
+jump
+winner
+fox
+mario
+joker
+rabbit
+piggy
+psyduck
+dragon
+salamander
+airguitar
+pikachu
+bravo
+ghost
+britney
+pikarun
+catrun
+koggy
+sonic
+doggy
+spongebob
+gun
+money
+bird
+piqiu
+lol
+ohhh
+nyancat
diff --git a/doc/example.todo b/doc/example.todo
new file mode 100644
index 0000000..f41d0ae
--- /dev/null
+++ b/doc/example.todo
@@ -0,0 +1,41 @@
+Projects:
+ ☐ Anything with a colon at the end of the line is a project
+ ☐ Projects will show some statistics next to them @1h
+ ✔ By default those statistics are the number of pending todos and the sum of their time estimates @30m
+ Nested:
+ ☐ You can nest projects inside each other and fold them
+
+Todos:
+ You can write plain text notes/descriptions wherever you want
+ New:
+ ☐ Press Cmd/Ctrl+Enter to add a new todo
+ Done:
+ ✔ Press Alt+D to mark a todo as done
+ ✔ Press it again to undo the action
+ Cancelled:
+ ✘ Press Alt+C to mark a todo as cancelled
+ ✘ Press it again to undo the action
+ Tagging:
+ ☐ You can add tags using the @ symbol, like this @tag
+ ☐ There are some special, customizable tags: @critical @high @low @today
+ Timekeeping:
+ ✔ Completed todos can show a timestamp @done(17-11-03 10:42)
+ ☐ Press Alt+S to mark a todo as started @started(17-11-03 10:42)
+ ✔ Now it will show the elapsed time @started(17-11-03 10:42) @done(17-11-03 20:11) @lasted(9h29m)
+ ☐ You can provide time estimates for your todos @1h30m
+ ☐ We are even doing some natural language processing @est(1 day and 20 minutes)
+
+Formatting:
+ You can format text in a markdown-like fashion
+ Bold:
+ ☐ Use asterisks for *bold*
+ Italic:
+ ☐ Use underscores for _italic_
+ Strikethrough:
+ ☐ Use tildes for ~strikethrough~
+ Code:
+ ☐ Use backticks for `code`
+
+Archive:
+ ✔ You can archive finished todos here
+ ✔ Congratulations, you are now a Todo+ master! \ No newline at end of file
diff --git a/doc/oops.txt b/doc/oops.txt
new file mode 100644
index 0000000..c3b42b0
--- /dev/null
+++ b/doc/oops.txt
@@ -0,0 +1,9 @@
+If you're seeing this, the code is in what
+I thought was an unreachable state.
+I could give you advice for what to do.
+But honestly, why should you trust me?
+I clearly screwed this up. I'm writing a
+message that should never appear, yet
+I know it will probably appear someday.
+On a deep level, I know I'm not
+up to this task. I'm so sorry. \ No newline at end of file
diff --git a/doc/paths.txt b/doc/paths.txt
new file mode 100644
index 0000000..1c667d9
--- /dev/null
+++ b/doc/paths.txt
@@ -0,0 +1,6 @@
+Here is all you need to know about relative file paths:
+
+- Starting with "/" returns to the root directory and starts there
+- Starting with "../" moves one directory backwards and starts there
+- Starting with "../../" moves two directories backwards and starts there (and so on...)
+- To move forward, just start with the first subdirectory and keep moving forward \ No newline at end of file
diff --git a/doc/vertical-center.txt b/doc/vertical-center.txt
new file mode 100644
index 0000000..f747346
--- /dev/null
+++ b/doc/vertical-center.txt
@@ -0,0 +1,4 @@
+.example {
+ display: flex;
+ align-items: center;
+} \ No newline at end of file
diff --git a/favicon.jpg b/favicon.jpg
new file mode 100644
index 0000000..a772d2c
--- /dev/null
+++ b/favicon.jpg
Binary files differ
diff --git a/games/cars/.htaccess b/games/cars/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/games/cars/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/games/cars/cars_files/console_runner-1df7d3399bdc1f40995a35209755dcfd8c7547da127f6469fd81e5fba982f6af.js b/games/cars/cars_files/console_runner-1df7d3399bdc1f40995a35209755dcfd8c7547da127f6469fd81e5fba982f6af.js
new file mode 100644
index 0000000..85fc223
--- /dev/null
+++ b/games/cars/cars_files/console_runner-1df7d3399bdc1f40995a35209755dcfd8c7547da127f6469fd81e5fba982f6af.js
@@ -0,0 +1 @@
+!function(){function n(){u(),t()}function t(){window.addEventListener?window.addEventListener("message",l,!1):window.attachEvent("onmessage",l)}function e(n){var t;try{t={}.toString.call(n)}catch(e){t="[object Object]"}return t}function r(n){return!!(n&&"object"==typeof n&&"nodeType"in n&&1===n.nodeType&&n.outerHTML)}function o(n,t){return n.toLowerCase()<t.toLowerCase()?-1:1}function c(n){if(null==n)return 1;var t,r=e(n);if("[object Number]"===r||"[object Boolean]"===r||"[object String]"===r)return 1;if("[object Function]"===r||"[object global]"===r)return 2;if("[object Object]"===r){var o=Object.keys(n);for(t=0;t<o.length;t++){var c=n[o[t]];if("[object Function]"===(u={}.toString.call(c))||"[object Object]"===u||"[object Array]"===u)return 2}return 1}if("[object Array]"===r){for(t=0;t<n.length;t++){var i=n[t],u={}.toString.call(i);if("[object Function]"===u||"[object Object]"===u||"[object Array]"===u)return 2}return 1}return 2}function i(n,t,r){var c,u,a="",l=[];if(r=r||"",t=t||[],null===n)return"null";if(void 0===n)return"undefined";if("[object Object]"==(a=e(n))&&(a="Object"),"[object Number]"==a)return""+n;if("[object Boolean]"==a)return n?"true":"false";if("[object Function]"==a)return n.toString().split("\n ").join("\n"+r);if("[object String]"==a)return'"'+n.replace(/"/g,"'")+'"';for(u=0;u<t.length;u++)if(n===t[u])return"[circular "+a.slice(1)+("outerHTML"in n?" :\n"+n.outerHTML.split("\n").join("\n"+r):"");if(t.push(n),"[object Array]"==a){for(c=0;c<n.length;c++)l.push(i(n[c],t));return"["+l.join(", ")+"]"}if(a.match(/Array/))return a;var f=a+" ",s=r+" ";if(r.length/2<2){var b=[];try{for(c in n)b.push(c)}catch(j){}for(b.sort(o),c=0;c<b.length;c++)try{l.push(s+b[c]+": "+i(n[b[c]],t,s))}catch(j){}}return l.length?f+"{\n"+l.join(",\n")+"\n"+r+"}":f+"{}"}function u(){if(window.console)for(var n=0;n<f.length;n++)!function(){var t=f[n];window.console[t]&&(window.console[t]=function(){for(var n=[].slice.call(arguments),e=[],o=[],u=0;u<n.length;u++)r(n[u])?(o.push(i(n[u].outerHTML)),e.push(1)):(o.push(i(n[u])),e.push(c(n[u])));s.postMessage(["console",{"function":t,arguments:o,complexity:Math.max.apply(null,e)}],"*"),this.apply(console,n)}.bind(console[t]))}()}function a(n){return!!n.origin.match(/codepen/)&&("object"==typeof n.data&&"command"===n.data.type)}function l(n){if(a(n)){var t=n.data.command;try{var e=window.eval(t)}catch(r){return void console.error(r.message)}console.log(e)}}var f=["log","error","warn","info","debug","table","time","timeEnd","count","clear"],s=window.parent;n()}(); \ No newline at end of file
diff --git a/games/cars/cars_files/css_reload-5619dc0905a68b2e6298901de54f73cefe4e079f65a75406858d92924b4938bf.js b/games/cars/cars_files/css_reload-5619dc0905a68b2e6298901de54f73cefe4e079f65a75406858d92924b4938bf.js
new file mode 100644
index 0000000..09e1dff
--- /dev/null
+++ b/games/cars/cars_files/css_reload-5619dc0905a68b2e6298901de54f73cefe4e079f65a75406858d92924b4938bf.js
@@ -0,0 +1 @@
+!function(){function e(e){t(e),window.PrefixFree&&StyleFix.process()}function t(e){var t=n(),a=document.createElement("style");a.type="text/css",a.className="cp-pen-styles",a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e)),c.appendChild(a),t&&t.parentNode.removeChild(t)}function n(){for(var e=document.getElementsByTagName("style"),t=e.length-1;t>=0;t--)if("cp-pen-styles"===e[t].className)return e[t];return!1}function a(e){window.addEventListener?window.addEventListener("message",e,!1):window.attachEvent("onmessage",e)}function s(e,t){try{if(!/codepen/.test(e.origin))return null;if("object"!=typeof e.data)return null;if(e.data.action===t)return e.data}catch(n){}return null}var c=document.head||document.getElementsByTagName("head")[0],r="ACTION_LIVE_VIEW_RELOAD_CSS";a(function(t){var n=s(t,r);n&&e(n.data.css)})}(); \ No newline at end of file
diff --git a/games/cars/cars_files/stopExecutionOnTimeout-de7e2ef6bfefd24b79a3f68b414b87b8db5b08439cac3f1012092b2290c719cd.js b/games/cars/cars_files/stopExecutionOnTimeout-de7e2ef6bfefd24b79a3f68b414b87b8db5b08439cac3f1012092b2290c719cd.js
new file mode 100644
index 0000000..5193a70
--- /dev/null
+++ b/games/cars/cars_files/stopExecutionOnTimeout-de7e2ef6bfefd24b79a3f68b414b87b8db5b08439cac3f1012092b2290c719cd.js
@@ -0,0 +1 @@
+"use strict";"object"!=typeof window.CP&&(window.CP={}),window.CP.PenTimer={programNoLongerBeingMonitored:!1,timeOfFirstCallToShouldStopLoop:0,_loopExits:{},_loopTimers:{},START_MONITORING_AFTER:2e3,STOP_ALL_MONITORING_TIMEOUT:5e3,MAX_TIME_IN_LOOP_WO_EXIT:2200,exitedLoop:function(o){this._loopExits[o]=!0},shouldStopLoop:function(o){if(this.programKilledSoStopMonitoring)return!0;if(this.programNoLongerBeingMonitored)return!1;if(this._loopExits[o])return!1;var t=this._getTime();if(0===this.timeOfFirstCallToShouldStopLoop)return this.timeOfFirstCallToShouldStopLoop=t,!1;var i=t-this.timeOfFirstCallToShouldStopLoop;if(i<this.START_MONITORING_AFTER)return!1;if(i>this.STOP_ALL_MONITORING_TIMEOUT)return this.programNoLongerBeingMonitored=!0,!1;try{this._checkOnInfiniteLoop(o,t)}catch(e){return this._sendErrorMessageToEditor(),this.programKilledSoStopMonitoring=!0,!0}return!1},_sendErrorMessageToEditor:function(){try{if(this._shouldPostMessage()){var o={action:"infinite-loop",line:this._findAroundLineNumber()};parent.postMessage(o,"*")}else this._throwAnErrorToStopPen()}catch(t){this._throwAnErrorToStopPen()}},_shouldPostMessage:function(){return document.location.href.match(/boomerang/)},_throwAnErrorToStopPen:function(){throw"We found an infinite loop in your Pen. We've stopped the Pen from running. Please correct it or contact [email protected]."},_findAroundLineNumber:function(){var o=new Error,t=0;if(o.stack){var i=o.stack.match(/boomerang\S+:(\d+):\d+/);i&&(t=i[1])}return t},_checkOnInfiniteLoop:function(o,t){if(!this._loopTimers[o])return this._loopTimers[o]=t,!1;if(t-this._loopTimers[o]>this.MAX_TIME_IN_LOOP_WO_EXIT)throw"Infinite Loop found on loop: "+o},_getTime:function(){return+new Date}},window.CP.shouldStopExecution=function(o){var t=window.CP.PenTimer.shouldStopLoop(o);return!0===t&&console.warn("[CodePen]: An infinite loop (or a loop taking too long) was detected, so we stopped its execution. Sorry!"),t},window.CP.exitedLoop=function(o){window.CP.PenTimer.exitedLoop(o)}; \ No newline at end of file
diff --git a/games/cars/favicon.png b/games/cars/favicon.png
new file mode 100644
index 0000000..aa511fc
--- /dev/null
+++ b/games/cars/favicon.png
Binary files differ
diff --git a/games/cars/index.html b/games/cars/index.html
new file mode 100644
index 0000000..5fc852e
--- /dev/null
+++ b/games/cars/index.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en" class="">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <!-- Site metadata -->
+ <meta name="description" content="Cars">
+ <meta property="og:description" content="Cars">
+ <meta property="og:title" content="s1nical - Cars">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/games/cars">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/games/cars">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Cars",
+ "headline": "Cars",
+ "url": "https://kyzer.co/games/cars",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Libraries -->
+ <script src="/games/cars/cars_files/console_runner-1df7d3399bdc1f40995a35209755dcfd8c7547da127f6469fd81e5fba982f6af.js"></script>
+ <script src="/games/cars/cars_files/css_reload-5619dc0905a68b2e6298901de54f73cefe4e079f65a75406858d92924b4938bf.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <link rel="shortcut icon" href="favicon.png" type="image/x-icon">
+ <meta name="robots" content="noindex">
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/games/cars/css/main.css">
+ <title>s1nical - Cars</title>
+ <!-- Visable Scripts -->
+ <script src="/js/redirect-to-mobile.js"></script>
+</head>
+
+ <body>
+
+ <script src="/games/cars/cars_files/stopExecutionOnTimeout-de7e2ef6bfefd24b79a3f68b414b87b8db5b08439cac3f1012092b2290c719cd.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.min.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/matter-js/0.14.2/matter.min.js"></script>
+ <script src="/games/cars/main.js"></script>
+
+ <canvas id="defaultCanvas0" width="1536" height="937" style="width: 1536.68px; height: 937px;"></canvas>
+
+ </body>
+
+</html> \ No newline at end of file
diff --git a/games/dino/favicon.png b/games/dino/favicon.png
new file mode 100644
index 0000000..ccf9494
--- /dev/null
+++ b/games/dino/favicon.png
Binary files differ
diff --git a/games/dino/index.html b/games/dino/index.html
new file mode 100644
index 0000000..42db9bc
--- /dev/null
+++ b/games/dino/index.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Dino Game</title>
+ <!-- Site metadata -->
+ <meta name="description" content="Dino Game">
+ <meta property="og:description" content="Dino Game">
+ <meta property="og:title" content="s1nical - Dino Game">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/games/dino">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/games/dino">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Dino Game",
+ "headline": "Dino Game",
+ "url": "https://kyzer.co/games/dino",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/games/dino/main.css">
+ <link rel="stylesheet" href="/css/no-text-highlighting.css">
+ <link rel="shortcut icon" href="/games/dino/favicon.png" type="image/x-icon">
+ <!-- External Libraries -->
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+</head>
+
+ <body id="t" class="offline">
+ <div id="main-frame-error" class="interstitial-wrapper">
+ <div id="main-content">
+ <div class="icon icon-offline" alt=""></div>
+ </div>
+ <div id="offline-resources">
+ <img id="offline-resources-1x"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABNEAAABECAAAAACKI/xBAAAAAnRSTlMAAHaTzTgAAAoOSURBVHgB7J1bdqS4FkSDu7gPTYSh2AOATw1Pn6kBVA2FieiTrlesq6po8lgt0pj02b06E58HlRhXOCQBBcdxHMdxHOfDMeA7BfcIOI4VwISDKQhvK0O4H9iAobeFZSx8WIK0dqz4ztQRg1XdECNfX/CTGUDmNjJDP6MzuMnKKsQ0Y+Amyxnirurmx1KghAvWXoARAErEPUpAB/KzvK6YcAIl8lD2AtsCbENPS1XGwqMTSnvHhNOYgBV3mKlklKDqPUshMUIzsuzlOXFGW9AQS0C/lv/QMWrahOMoiKZL41HyUCRAdcKyDR0tVRkLD0+oV7Q7yLofm6w6rKbdrmNUL6NOyapMtGcUuixZ2WSHbsl+M97BoUX8TrpyrfGbJJ+saBQ0W9I6jnxF/ZO+4nqo66GQneo325keUjth7bFpX38MO6lbM+ZMaeOYETISzYzN9Wiy7shuyj4dI96JSQXuOMSlWcqkgQ2DSlVdUSIbWbVs2vJ41CvadDs0jTE63Y9NWO26r3x9MU3AzDGk1mQWZu2Bht6VaPzEXrl21gjyZRXNPnKFI8+TJnRKLEED24JNpaqqKBGx/C5oWLSlBR0+Pp4J5yM27YVydp8sX4p+SUGe661TuWE5Y78dtcDSX3u+oqWINjLmRm+wTsBUJWpK06pKaXZpJdbmhoH/LcByq6Rq+LMC+7Dl+OFjvzj2ObRJY/tOa1r/uUvDy9d9QaPz4utMP6ZDysxsPeScf3yly6bOfRbcemtPYESvpAn20GSS0efVKOGc4aNQgojj1ZnzvTEnkxqzOVfGllP3y9qnZ0S3pM2mK5jMwQcpiMb1ZVqdkBANl1aCFbBbdOR6Pvwgtjiu9vkx60jrXNpq15E8ywhz/2tbzGQQwQ4b59Zfe7aipVrSEhCP8mZG1UlzZ20tOgw9Hw6hrzCLZiyObqCkVauZFC0OPL8nqUrk/zHN1gopOfkzngH3fv8SQau20jtMQ09VUSmxQUS1OsZSDAWSwKNFq5SylzA6PhFf+Oo4x3m0pEuYKXb4s5WLAAaT1lwfc3Kr6CDZ6JD6hrUCWVhmjHFrzNk17pxWjdGl/Yi9AuBrBqAbusmvGNNCyWpbhvPU82j1aDMi9Q04p8aLaQtiw7plXZ0A7TwDSojO/GsCiAnE6qAGhg45/eAu7csrunGcEUpEN5NsXYDlUY6Mie67UGPTPiiO1xl0vgLYvXt83glmvkux7ke6WdGzz7mKmiSQM2ufmPEoQUv9d2fu3jEazGqc79JUQjRxghoZT9FoiJnjzvbYtDJGOXOcoxUt4hMybAucE3nloJPOSJh5v6cm8gwFWrnn72aj1txnvR+5RrzoXy8kBOAStWBtw/foGvd1NnyX+h2a+LXQUH2XKAFT0uLpi9byzXg2vrzy9Z6eAZmqIUnHoaJ9PlIofwaAYQMWu6XituAE6vWBgifhla/Xp3ClqjpFESRdt5Z+WCIkQ68vHNBAXysZH3CmuufhInRurCagvLk6QNXpbwMDNvouu+Vn/fLeVo3rA084PzAYiwDtzB1jIB3Jmvuc0YqzQRk6W0d8LhIQ9gPkNhSpEGjr2HKW4XyOuznthx/M+8V/W5+7/vRZ9yARQ4L5a18IIBetJbN18/oGYNjRHwyHt6qiJSj9R25zZ55M7Uiq6u3qglDF2KmBCqqTVqhNO0bQSp+gxRJkV9fi68uP/z8TzgYd3tyw9bQOqBUtpmdd9wwlGoGKGzDstMR7LR1EtENp582d1z5jL3yGrc79y83pSsbBZHquNluXZd5DfteKbbhaLc+Ongp1tUslUUvDve1drSPuSFoE2o/8AIL6rspChrbqZkkb0N5yhNa2E3B95Bm2vN+8m/me3lE9WaGp3LbPPDc/u9VZoJFbZ+uoCvaMhAJEDTS2xOO/Tdzp+Xs6C3mG7fXhnXlR4gnx4rXU7dma/FTl0YS29beOjztTx6NOUF2aVrNEe/bZa4m6+nmuEJUAbnFP15xH+/7fHU/FYG6LG+SmVL5bmnFZ/Ho0J4WP4NK4KMCtS7u0p/Bo9ngnXbfWXnVu/DcNdGf9rRgfeab6sWfR1KXZ1Z0kY7+l3rIToQCImiD2U9y4FepFaHm44jpJjDTGlOmfxVbGHMc92nkEW/PrrRSKJiqjF4CiHaqBNqEuLPxDLsGL/+xcvFavbLph6W89TdHCw5wZCW2zXggfe4Sqcc2oBhYYSAc+EY4zGhM5/teid0osBSaaBC3F/vPAjvpxsdDx5Dp1jjsnI7Y+95hT5z+erpZkzB/dpY2wJS0FPfLH0/wsj/AhJS0FJuTaWOPbHWFbN/9VdCUSwtPW5g81j2aMZULDkbtLE+GSBKOCdGiCURtVTXFpp7KCuEtzl3braVVFQ+g/8n6eQil/X24MmjAIe+oYJNqwK2M8uU5mXc8652rXOY6vdZ6NvdyoiXZ1jBqNcC7o0tKVaw2XlltdGs0VUwsYGTpbxwPO1JXcU7gTGLYfrx0tx6tjsW/PsjHd14p2l+YOzXGPdirBDAwdLe9sAf54IEh86zLA2qQj64SGYp9EM674Dk9Rqy4tY58B2MRqVRZOIr2t44FnymfRzlyJSOHBLg2rOzSnn5vxjI3O1hHXxyVNb8zqt2mNi6OrGzR9egPfH1QLREQgFSDs17Ky/zOoS+O7wVJNfN1axjh108L93G8dH3umelx7gGMTCuLbbfJEQZEYha6KGTbN9l2r+zNn2xkwLnzorNWqsLVP0eaGXMZ74pLWDNXLL0N7+GRnAmdqwgNqE4O7tQkREQmp+zMoudWlATcMaIRN28ErA5nv9pF/6PtEnak/1r8H53lRR6bcfuYe0DrCcZxL3vdk19PHBZQz73u6AT0ODZWGbTAY33Ud0nEcZ3hg64gmZjiO81YiCkK1dXytBauO/wwzsmxBqc3VIhP6DVNw5FhFywDS24/cKeHRCdLfoTiO3zMw58+uYUX/HYD2BLETinY4Z5Bk6+jaFo79DFm3LG4Q+pr6r97I5pH7pRsllgiQUEJ7QsSRCdN2aYfjuEczNDnollPLSKm/7EhQ6pgQ2yUKpx3OaQTZOra2gf7P0M/Q3+ScTJlLX6KgECb49h02lFLudPzVzn0lNQwEURQdrfGuc9anX34AIzk21c/xHjLYCo/JU2W1kLTm/7BeP7kkSZIkZbj0JhHZgDdAg5UeAA6f9f8Ar//eMZqUxs8ggs7BhAEarPQAsPm+hwFus4SnG6Mx3pI0xwEX/syoMMDteO0x17QlCd5m/CbX0STs9m3RDggXBLpKWv5S83eSF787y1Wd5apuCcXDHFu0HL1wPGbhz6lL2WL2VYrtE6NPZW7usXAEy1WZ5epGInCMMLhTBsCQ5erTyhXVlAASQROIjO0FvHBFh+evzparEMvVsp8XMGZ5HuHL3cZGzpu884kxZtN/1HLVynL1uiRJkvQFUg1OaKSaqSkAAAAASUVORK5CYII=">
+ <img id="offline-resources-2x"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACYkAAACCBAMAAAD7gMi8AAAAIVBMVEUAAAD39/fa2tr///+5ublTU1P29vbv7+/+/v74+Pjw8PCjSky4AAAAAXRSTlMAQObYZgAADDlJREFUeAHs3StsLEmWh/Gvy2WuJBe3gs9r3RwFV7+Ss36h4cgcLZnXchbkcgVc6GqZg9TlJJpb7odDLh0pFBN2ONPOqvT/J3U568Q5OTs7M+WTJ6PSrEZEREREPgMYaEksxQETyxpIz8oitQNXcJhVYlmWt+hCqbvC8WCaEWP2GSZK/uYXHlx+CXcfj4f5aARykBGyYIkjx9UcsljOy4fFWcY/XnJuwM73qoZKLG0g99TsOGciIntg8LTERI92H+AcE29u8BBTK3DlgMOcEsuyvOUXSp0VE6uZwLE8EfaInIDxLjBefnm8Pswh8sXk5RgIx7e2Sn6bjRAsxmi1X37EzoIJx6tW2YL9k60YPs6/jHZMZBOOBQ14Iuk5PYqPqRqwvspxmFFiWZa3/EI5nmtXGEfBYlMrz4Lt8abFrO9q523fAPgiFs8+14zF+/Ce5mIOkaMPfHfNHCJ7a8U6mrHOj24HE+dsSEXg6sA6bDzXb3qV3Ak3ZzT2Z36+AUaAkK/7uPv4pf1uH6G8bxnGx9CI3Xu0ise3+VSvQnSPcgKR7MN33wHf5deXEtmf/yeXTca6eioLXHGoNVmWMZTd6JUrSt6MjefalpuKucagsxGbcE/n/Tkf/MxW+fp/WTeRO1YiYdOfYt0XmCK2mzUfPfxTXj2S7z3ataVdeYYRxsejvJrZkagX6/joPh2VnioHrly1ybKMweNj0Yq5sqTfAGn7F/LN0VgEDze/sGETbtXz9ueCm5+7+V5swjnyTxC5/jtLEvVi0dMlMC62sWIAUld2VweYe6pUBpwDN2FN1qHMoMVKlr/Z2N/WLTUVm4pYczI2uZdPxoj+JkKdfReSu2BXj+UNyJxzXP2SkEvvPl5++ZAbHt8/5uWMFnFM83O33ou5CaZ8wPJERL0Y0S/+yb4pQ1rnZmNpSGVbd4rEncB5nab7C5vKe5UituEVM9qdyMq+1vzScmfDDkveItkzsxkbn/r8n3q+EwmR1JUd8e3J2JCagXpJx33O9e+3tts614hNz8wzfXvGXDPvJMnUm7u+vR7VIiKb6cWiNWP5jd/CPKy+R6yvpHHTch2V+61t08lvoAqXX47Ys1kvR+zeYgjjcV+rsVh9dbQH9RSLxb+GzJu36VmvzvGOyYdrexWZ34tFO/L24602iw/4Wdk2GWv3TmXgyZLlN3ENpI6KTfvz/9rrC4nsV7+4EO3bf3i9C9htSDuwQxOKmB0VZynOZxmBTdKnWLSgt55MlnsQmC1EUkeFdW/9jWDtq16OR1PfHcr+u5STq+ZNuMdYjJBfRU5sLuYc7pnDv8mxFNGzXkVXlHZvEjyRtzPgG/OtdjZF5ToGSLW9+dUFHzGNCluJaUYjeKLsWa+nRjQXc0xMTzZaIh++ZILvfuH/EFnyU8xrk8yyUzBb6D+VdW9p4S9prs+e9bp98cxy1YtN5ZHI00Z7yk4RrweDPdm1OImdpyZXZWHWOS0eWJXsl2nF4iJTMXtvUjt7/SfNtpsfW1ijj3I8mCox+mPtu5R9scnl2Aae9Srau4/INXOI7N/9VOyAYx1iz3otruNMjufH9pTGP+JUBNrsynGs/iv2nNPOQ/mg4qHyP6uYM84hF8t9pqBeTPQ9SpHXnu73fMzPmooV7yKpI7vF1wOtZsyf1Nf5B5K+RylyUr2YyPXj6/gl4SOUHuPh48NB6XIEENnzrsQ0lAE4AK5dsvr3pood/APbsJnvUQ54YnGl4jmKZ50LI6GMVOdhF38FuL+ln5WqFxMR9WLzf9X0i5jac8PApI7sRCGmauDAlc262iXZwVIdb6L4/qVnm2yD68yTQKCP3ffsPOeI9HddhfvbWaU7zoKIiOZiEVIzkE2HoZVh3RjOSlhDTDAk5MQUVyomnWNuZ/u5+/zXTxdXuUOqdk55YfHSPesR+fDT///xz7X9CREojRQsuZof6GUn5HKsniH0XwLLSr1YnP2rpl9ZFyuzLhOB1JGdLGSFRaBoxVoZ5sDVIq3YMK8V8zHZqc5zw9gX2i72nlxcPXRdACb3YC8vvb/dsSKRf/Id14gs0ov5uMUnjaXoG4HCBAfqJb5Z8mKeXtaSFn+U0nOOIvx8EyHUv9Vo31UESneBZd2FnitEuwgN5Q3y2gVCxJxf7kigfoFfXoLvnDVXRef0sEBpidIdaxH58N13wHf5VWReL1ZvxjzdH93zpcqsy2Z2qS+7txk7QH/J/CaxX+KM6FmvYqzLsoj79dOs0j1rErGructx2WfGNi4Dcw6hthS6zpkvQkeLr0H2GM8WpQi+Eugr8WR++Yndemda39ae9eqJ+bUU8WefOxLyaylUYjtHjS3cfbRJ5wKlO9Yj8gH45zUziOwX/VWzvPbszSZjjezEgKkFSpWSMHgexXQSLdSQ7Ch6ztSfb7644Yb69Z0F70JHvMGqOpYsVIsH5F0/X0zkOv8zg8iePhLTSUzGBh+THZ3vZCx6YmQzPHVxA7kjdQHz62T3ERvsRs4ipTvOmYjIfvlfNcsrd4u1J2OWvbzYPu1QHrUXUgS8LXTI2/btKEXsVGbCAW4qY6YrVjG9LObIMRHNxUR/jlJkTw9JNPjyKKahuhATWYKhWlHv3hqSJR4PYuIcxMg7kDaca+4PF3+18VZf6W13qdmBiIh6scRriM88fyJSRk5BTB1xW6l3bwPPYxWIaC4mInLydqQ4e4eUpFgJxmQLHa1YrC/0sIppApwDk2OZq8TKvKanqlw9zzmLbURKMW41F0J4/mTsll+nT/Sy0vfXi4mI7J/eQh6T7cl6S5G04lxu/j78mCoLEWi3YgmraIzLzqZ/lkjabG7QXGw2EZE9kOKsPieSkBR9peUqFixq2hW2YNE2q8A4Jk6FY5PscmV7uRAYl98z9uunhUp3nDsRUS9Gmv/R3W9rHV6K9T9kaQstRYXHpGq0JT33O5JuejJvznco3VN5IpqLiYjskYUkYOhaaPd1vjF6k7OZjMVN5NYnY6FnMmYDrePSzh0j97ezSnecMxGR/exfNWczskqNwMFe+0uWR4Kh8beZOrQnXo7OyZimYv1EczEREc3F0pOBw/ySN5AYbEaGB/JLTDzJdXVAriMXp81izccOpw3k1iZjobFnjIu/luMt7Eliv5aRmaU7zpmIyH6BXzXr7hbTdwViet3JGE5TMZkn77XffZ5/LF+6YzUiIpqLqRmLkDBLjcbcs1OdhmKVP5RvP5fPBY+HOEBq5UZY+P+GwGg/m3L7ZBu8Ho7M/YEWK8pHO/dwYKXqxUREvVj50b28pKnYs6SIf/ZYcgJcPeZgauXloOuZieHaebJ1F3+t/Y0jcl91cXV/21OaWal6sXdLRL3Y2NipP67z+EdJA70cTHqs2Bvs6IskrFdeNncgHoNVOQOPJy74f4MJzclY0T6RB1z3t/SwootftXdfRNSLlf1V5aM7sLSELI9p4Vj/GWTz7NkUlPh1ymu3M0rVi4mI7lGuTUR/9aidb5Ox/HONv3pk7dOMqdixM6vet1QvJiLqxSKJHiKiWdn8UvViIqJebAQiItLkiSQ7Wjz3aZa19P8NI6E4arRPj/v1L/omY7bVrKReTET0xOrwBwDvhwHsSCqGJRd6DbxLok8xERHtFxsD79aQBuyNj+mlC8YWOljFGiTa0eK5/Zb9vyHYUceuMTOrSL2YiOiZFqH50a0HWgw+enuXYnr5gjVptjAkKhoVZ0BEczERkc94DZqLpZcvFE1aTMdQyj+OsSHlNzHVKt4nUS8mIqJeTKxx6l6oN2l5weZiOZ4eCwZI/73i9/buAjdyIIgCaC34fBv6lwyfL8zJBhYslQda7wkz2F1Tir+5EchiADhw/9+PO3AfWQwAAADso4TUg8vzaqCAswpruxgAkNS9KTvVQAFnFFYWAwCSVAljbQWcUVhZDABI6sWUvtCggL2FlcUAvlVqRHBUb6adevP5UKfUPyngvwu7CkcDZDEAIEmtaesOtosBOI8Spp3tvnUXshggi2XhBVgalpANQ22byQAaZqevGuirMbMYQJJUn3z+/GqVzBnBZ1liKPOHlKRhH9uyb01VJTM+QV+1iL4aKosBkO7PWF6yohokqU2nr/SVLAaQuf/fk2TZ7QBJGieXjBBRks0PIvqqgb4aNIsB9k4mq9vrlEHLudzvkw1f3kZfLURf9WcxAAAAuAMrmVNBFPg6WAAAAABJRU5ErkJggg==">
+ <template id="audio-resources">
+ <audio id="offline-sound-press"
+ src="data:audio/mpeg;base64,T2dnUwACAAAAAAAAAABVDxppAAAAABYzHfUBHgF2b3JiaXMAAAAAAkSsAAD/////AHcBAP////+4AU9nZ1MAAAAAAAAAAAAAVQ8aaQEAAAC9PVXbEEf//////////////////+IDdm9yYmlzNwAAAEFPOyBhb1R1ViBiNSBbMjAwNjEwMjRdIChiYXNlZCBvbiBYaXBoLk9yZydzIGxpYlZvcmJpcykAAAAAAQV2b3JiaXMlQkNWAQBAAAAkcxgqRqVzFoQQGkJQGeMcQs5r7BlCTBGCHDJMW8slc5AhpKBCiFsogdCQVQAAQAAAh0F4FISKQQghhCU9WJKDJz0IIYSIOXgUhGlBCCGEEEIIIYQQQgghhEU5aJKDJ0EIHYTjMDgMg+U4+ByERTlYEIMnQegghA9CuJqDrDkIIYQkNUhQgwY56ByEwiwoioLEMLgWhAQ1KIyC5DDI1IMLQoiag0k1+BqEZ0F4FoRpQQghhCRBSJCDBkHIGIRGQViSgwY5uBSEy0GoGoQqOQgfhCA0ZBUAkAAAoKIoiqIoChAasgoAyAAAEEBRFMdxHMmRHMmxHAsIDVkFAAABAAgAAKBIiqRIjuRIkiRZkiVZkiVZkuaJqizLsizLsizLMhAasgoASAAAUFEMRXEUBwgNWQUAZAAACKA4iqVYiqVoiueIjgiEhqwCAIAAAAQAABA0Q1M8R5REz1RV17Zt27Zt27Zt27Zt27ZtW5ZlGQgNWQUAQAAAENJpZqkGiDADGQZCQ1YBAAgAAIARijDEgNCQVQAAQAAAgBhKDqIJrTnfnOOgWQ6aSrE5HZxItXmSm4q5Oeecc87J5pwxzjnnnKKcWQyaCa0555zEoFkKmgmtOeecJ7F50JoqrTnnnHHO6WCcEcY555wmrXmQmo21OeecBa1pjppLsTnnnEi5eVKbS7U555xzzjnnnHPOOeec6sXpHJwTzjnnnKi9uZab0MU555xPxunenBDOOeecc84555xzzjnnnCA0ZBUAAAQAQBCGjWHcKQjS52ggRhFiGjLpQffoMAkag5xC6tHoaKSUOggllXFSSicIDVkFAAACAEAIIYUUUkghhRRSSCGFFGKIIYYYcsopp6CCSiqpqKKMMssss8wyyyyzzDrsrLMOOwwxxBBDK63EUlNtNdZYa+4555qDtFZaa621UkoppZRSCkJDVgEAIAAABEIGGWSQUUghhRRiiCmnnHIKKqiA0JBVAAAgAIAAAAAAT/Ic0REd0REd0REd0REd0fEczxElURIlURIt0zI101NFVXVl15Z1Wbd9W9iFXfd93fd93fh1YViWZVmWZVmWZVmWZVmWZVmWIDRkFQAAAgAAIIQQQkghhRRSSCnGGHPMOegklBAIDVkFAAACAAgAAABwFEdxHMmRHEmyJEvSJM3SLE/zNE8TPVEURdM0VdEVXVE3bVE2ZdM1XVM2XVVWbVeWbVu2dduXZdv3fd/3fd/3fd/3fd/3fV0HQkNWAQASAAA6kiMpkiIpkuM4jiRJQGjIKgBABgBAAACK4iiO4ziSJEmSJWmSZ3mWqJma6ZmeKqpAaMgqAAAQAEAAAAAAAACKpniKqXiKqHiO6IiSaJmWqKmaK8qm7Lqu67qu67qu67qu67qu67qu67qu67qu67qu67qu67qu67quC4SGrAIAJAAAdCRHciRHUiRFUiRHcoDQkFUAgAwAgAAAHMMxJEVyLMvSNE/zNE8TPdETPdNTRVd0gdCQVQAAIACAAAAAAAAADMmwFMvRHE0SJdVSLVVTLdVSRdVTVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTdM0TRMIDVkJAJABAKAQW0utxdwJahxi0nLMJHROYhCqsQgiR7W3yjGlHMWeGoiUURJ7qihjiknMMbTQKSet1lI6hRSkmFMKFVIOWiA0ZIUAEJoB4HAcQLIsQLI0AAAAAAAAAJA0DdA8D7A8DwAAAAAAAAAkTQMsTwM0zwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNI0QPM8QPM8AAAAAAAAANA8D/BEEfBEEQAAAAAAAAAszwM80QM8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwNE0QPM8QPM8AAAAAAAAALA8D/BEEfA8EQAAAAAAAAA0zwM8UQQ8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABDgAAAQYCEUGrIiAIgTADA4DjQNmgbPAziWBc+D50EUAY5lwfPgeRBFAAAAAAAAAAAAADTPg6pCVeGqAM3zYKpQVaguAAAAAAAAAAAAAJbnQVWhqnBdgOV5MFWYKlQVAAAAAAAAAAAAAE8UobpQXbgqwDNFuCpcFaoLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABhwAAAIMKEMFBqyIgCIEwBwOIplAQCA4ziWBQAAjuNYFgAAWJYligAAYFmaKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrISAIgCADAoimUBy7IsYFmWBTTNsgCWBtA8gOcBRBEACAAAKHAAAAiwQVNicYBCQ1YCAFEAAAZFsSxNE0WapmmaJoo0TdM0TRR5nqZ5nmlC0zzPNCGKnmeaEEXPM02YpiiqKhBFVRUAAFDgAAAQYIOmxOIAhYasBABCAgAMjmJZnieKoiiKpqmqNE3TPE8URdE0VdVVaZqmeZ4oiqJpqqrq8jxNE0XTFEXTVFXXhaaJommaommqquvC80TRNE1TVVXVdeF5omiapqmqruu6EEVRNE3TVFXXdV0giqZpmqrqurIMRNE0VVVVXVeWgSiapqqqquvKMjBN01RV15VdWQaYpqq6rizLMkBVXdd1ZVm2Aarquq4ry7INcF3XlWVZtm0ArivLsmzbAgAADhwAAAKMoJOMKouw0YQLD0ChISsCgCgAAMAYphRTyjAmIaQQGsYkhBJCJiWVlEqqIKRSUikVhFRSKiWjklJqKVUQUikplQpCKqWVVAAA2IEDANiBhVBoyEoAIA8AgCBGKcYYYwwyphRjzjkHlVKKMeeck4wxxphzzkkpGWPMOeeklIw555xzUkrmnHPOOSmlc84555yUUkrnnHNOSiklhM45J6WU0jnnnBMAAFTgAAAQYKPI5gQjQYWGrAQAUgEADI5jWZqmaZ4nipYkaZrneZ4omqZmSZrmeZ4niqbJ8zxPFEXRNFWV53meKIqiaaoq1xVF0zRNVVVVsiyKpmmaquq6ME3TVFXXdWWYpmmqquu6LmzbVFXVdWUZtq2aqiq7sgxcV3Vl17aB67qu7Nq2AADwBAcAoAIbVkc4KRoLLDRkJQCQAQBAGIOMQgghhRBCCiGElFIICQAAGHAAAAgwoQwUGrISAEgFAACQsdZaa6211kBHKaWUUkqpcIxSSimllFJKKaWUUkoppZRKSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoFAC5VOADoPtiwOsJJ0VhgoSErAYBUAADAGKWYck5CKRVCjDkmIaUWK4QYc05KSjEWzzkHoZTWWiyecw5CKa3FWFTqnJSUWoqtqBQyKSml1mIQwpSUWmultSCEKqnEllprQQhdU2opltiCELa2klKMMQbhg4+xlVhqDD74IFsrMdVaAABmgwMARIINqyOcFI0FFhqyEgAICQAgjFGKMcYYc8455yRjjDHmnHMQQgihZIwx55xzDkIIIZTOOeeccxBCCCGEUkrHnHMOQgghhFBS6pxzEEIIoYQQSiqdcw5CCCGEUkpJpXMQQgihhFBCSSWl1DkIIYQQQikppZRCCCGEEkIoJaWUUgghhBBCKKGklFIKIYRSQgillJRSSimFEEoIpZSSUkkppRJKCSGEUlJJKaUUQggllFJKKimllEoJoYRSSimlpJRSSiGUUEIpBQAAHDgAAAQYQScZVRZhowkXHoBCQ1YCAGQAAJSyUkoorVVAIqUYpNpCR5mDFHOJLHMMWs2lYg4pBq2GyjGlGLQWMgiZUkxKCSV1TCknLcWYSuecpJhzjaVzEAAAAEEAgICQAAADBAUzAMDgAOFzEHQCBEcbAIAgRGaIRMNCcHhQCRARUwFAYoJCLgBUWFykXVxAlwEu6OKuAyEEIQhBLA6ggAQcnHDDE294wg1O0CkqdSAAAAAAAAwA8AAAkFwAERHRzGFkaGxwdHh8gISIjJAIAAAAAAAYAHwAACQlQERENHMYGRobHB0eHyAhIiMkAQCAAAIAAAAAIIAABAQEAAAAAAACAAAABARPZ2dTAARhGAAAAAAAAFUPGmkCAAAAO/2ofAwjXh4fIzYx6uqzbla00kVmK6iQVrrIbAUVUqrKzBmtJH2+gRvgBmJVbdRjKgQGAlI5/X/Ofo9yCQZsoHL6/5z9HuUSDNgAAAAACIDB4P/BQA4NcAAHhzYgQAhyZEChScMgZPzmQwZwkcYjJguOaCaT6Sp/Kand3Luej5yp9HApCHVtClzDUAdARABQMgC00kVNVxCUVrqo6QqCoqpkHqdBZaA+ViWsfXWfDxS00kVNVxDkVrqo6QqCjKoGkDPMI4eZeZZqpq8aZ9AMtNJFzVYQ1Fa6qNkKgqoiGrbSkmkbqXv3aIeKI/3mh4gORh4cy6gShGMZVYJwm9SKkJkzqK64CkyLTGbMGExnzhyrNcyYMQl0nE4rwzDkq0+D/PO1japBzB9E1XqdAUTVep0BnDStQJsDk7gaNQK5UeTMGgwzILIr00nCYH0Gd4wp1aAOEwlvhGwA2nl9c0KAu9LTJUSPIOXVyCVQpPP65oQAd6WnS4geQcqrkUugiC8QZa1eq9eqRUYCAFAWY/oggB0gm5gFWYhtgB6gSIeJS8FxMiAGycBBm2ABURdHBNQRQF0JAJDJ8PhkMplMJtcxH+aYTMhkjut1vXIdkwEAHryuAQAgk/lcyZXZ7Darzd2J3RBRoGf+V69evXJtviwAxOMBNqACAAIoAAAgM2tuRDEpAGAD0Khcc8kAQDgMAKDRbGlmFJENAACaaSYCoJkoAAA6mKlYAAA6TgBwxpkKAIDrBACdBAwA8LyGDACacTIRBoAA/in9zlAB4aA4Vczai/R/roGKBP4+pd8ZKiAcFKeKWXuR/s81UJHAn26QimqtBBQ2MW2QKUBUG+oBegpQ1GslgCIboA3IoId6DZeCg2QgkAyIQR3iYgwursY4RgGEH7/rmjBQwUUVgziioIgrroJRBECGTxaUDEAgvF4nYCagzZa1WbJGkhlJGobRMJpMM0yT0Z/6TFiwa/WXHgAKwAABmgLQiOy5yTVDATQdAACaDYCKrDkyA4A2TgoAAB1mTgpAGycjAAAYZ0yjxAEAmQ6FcQWAR4cHAOhDKACAeGkA0WEaGABQSfYcWSMAHhn9f87rKPpQpe8viN3YXQ08cCAy+v+c11H0oUrfXxC7sbsaeOAAmaAXkPWQ6sBBKRAe/UEYxiuPH7/j9bo+M0cAE31NOzEaVBBMChqRNUdWWTIFGRpCZo7ssuXMUBwgACpJZcmZRQMFQJNxMgoCAGKcjNEAEnoDqEoD1t37wH7KXc7FayXfFzrSQHQ7nxi7yVsKXN6eo7ewMrL+kxn/0wYf0gGXcpEoDSQI4CABFsAJ8AgeGf1/zn9NcuIMGEBk9P85/zXJiTNgAAAAPPz/rwAEHBDgGqgSAgQQAuaOAHj6ELgGOaBqRSpIg+J0EC3U8kFGa5qapr41xuXsTB/BpNn2BcPaFfV5vCYu12wisH/m1IkQmqJLYAKBHAAQBRCgAR75/H/Of01yCQbiZkgoRD7/n/Nfk1yCgbgZEgoAAAAAEADBcPgHQRjEAR4Aj8HFGaAAeIATDng74SYAwgEn8BBHUxA4Tyi3ZtOwTfcbkBQ4DAImJ6AA"></audio>
+ <audio id="offline-sound-hit"
+ src="data:audio/mpeg;base64,T2dnUwACAAAAAAAAAABVDxppAAAAABYzHfUBHgF2b3JiaXMAAAAAAkSsAAD/////AHcBAP////+4AU9nZ1MAAAAAAAAAAAAAVQ8aaQEAAAC9PVXbEEf//////////////////+IDdm9yYmlzNwAAAEFPOyBhb1R1ViBiNSBbMjAwNjEwMjRdIChiYXNlZCBvbiBYaXBoLk9yZydzIGxpYlZvcmJpcykAAAAAAQV2b3JiaXMlQkNWAQBAAAAkcxgqRqVzFoQQGkJQGeMcQs5r7BlCTBGCHDJMW8slc5AhpKBCiFsogdCQVQAAQAAAh0F4FISKQQghhCU9WJKDJz0IIYSIOXgUhGlBCCGEEEIIIYQQQgghhEU5aJKDJ0EIHYTjMDgMg+U4+ByERTlYEIMnQegghA9CuJqDrDkIIYQkNUhQgwY56ByEwiwoioLEMLgWhAQ1KIyC5DDI1IMLQoiag0k1+BqEZ0F4FoRpQQghhCRBSJCDBkHIGIRGQViSgwY5uBSEy0GoGoQqOQgfhCA0ZBUAkAAAoKIoiqIoChAasgoAyAAAEEBRFMdxHMmRHMmxHAsIDVkFAAABAAgAAKBIiqRIjuRIkiRZkiVZkiVZkuaJqizLsizLsizLMhAasgoASAAAUFEMRXEUBwgNWQUAZAAACKA4iqVYiqVoiueIjgiEhqwCAIAAAAQAABA0Q1M8R5REz1RV17Zt27Zt27Zt27Zt27ZtW5ZlGQgNWQUAQAAAENJpZqkGiDADGQZCQ1YBAAgAAIARijDEgNCQVQAAQAAAgBhKDqIJrTnfnOOgWQ6aSrE5HZxItXmSm4q5Oeecc87J5pwxzjnnnKKcWQyaCa0555zEoFkKmgmtOeecJ7F50JoqrTnnnHHO6WCcEcY555wmrXmQmo21OeecBa1pjppLsTnnnEi5eVKbS7U555xzzjnnnHPOOeec6sXpHJwTzjnnnKi9uZab0MU555xPxunenBDOOeecc84555xzzjnnnCA0ZBUAAAQAQBCGjWHcKQjS52ggRhFiGjLpQffoMAkag5xC6tHoaKSUOggllXFSSicIDVkFAAACAEAIIYUUUkghhRRSSCGFFGKIIYYYcsopp6CCSiqpqKKMMssss8wyyyyzzDrsrLMOOwwxxBBDK63EUlNtNdZYa+4555qDtFZaa621UkoppZRSCkJDVgEAIAAABEIGGWSQUUghhRRiiCmnnHIKKqiA0JBVAAAgAIAAAAAAT/Ic0REd0REd0REd0REd0fEczxElURIlURIt0zI101NFVXVl15Z1Wbd9W9iFXfd93fd93fh1YViWZVmWZVmWZVmWZVmWZVmWIDRkFQAAAgAAIIQQQkghhRRSSCnGGHPMOegklBAIDVkFAAACAAgAAABwFEdxHMmRHEmyJEvSJM3SLE/zNE8TPVEURdM0VdEVXVE3bVE2ZdM1XVM2XVVWbVeWbVu2dduXZdv3fd/3fd/3fd/3fd/3fV0HQkNWAQASAAA6kiMpkiIpkuM4jiRJQGjIKgBABgBAAACK4iiO4ziSJEmSJWmSZ3mWqJma6ZmeKqpAaMgqAAAQAEAAAAAAAACKpniKqXiKqHiO6IiSaJmWqKmaK8qm7Lqu67qu67qu67qu67qu67qu67qu67qu67qu67qu67qu67quC4SGrAIAJAAAdCRHciRHUiRFUiRHcoDQkFUAgAwAgAAAHMMxJEVyLMvSNE/zNE8TPdETPdNTRVd0gdCQVQAAIACAAAAAAAAADMmwFMvRHE0SJdVSLVVTLdVSRdVTVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTdM0TRMIDVkJAJABAKAQW0utxdwJahxi0nLMJHROYhCqsQgiR7W3yjGlHMWeGoiUURJ7qihjiknMMbTQKSet1lI6hRSkmFMKFVIOWiA0ZIUAEJoB4HAcQLIsQLI0AAAAAAAAAJA0DdA8D7A8DwAAAAAAAAAkTQMsTwM0zwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNI0QPM8QPM8AAAAAAAAANA8D/BEEfBEEQAAAAAAAAAszwM80QM8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwNE0QPM8QPM8AAAAAAAAALA8D/BEEfA8EQAAAAAAAAA0zwM8UQQ8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABDgAAAQYCEUGrIiAIgTADA4DjQNmgbPAziWBc+D50EUAY5lwfPgeRBFAAAAAAAAAAAAADTPg6pCVeGqAM3zYKpQVaguAAAAAAAAAAAAAJbnQVWhqnBdgOV5MFWYKlQVAAAAAAAAAAAAAE8UobpQXbgqwDNFuCpcFaoLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABhwAAAIMKEMFBqyIgCIEwBwOIplAQCA4ziWBQAAjuNYFgAAWJYligAAYFmaKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrISAIgCADAoimUBy7IsYFmWBTTNsgCWBtA8gOcBRBEACAAAKHAAAAiwQVNicYBCQ1YCAFEAAAZFsSxNE0WapmmaJoo0TdM0TRR5nqZ5nmlC0zzPNCGKnmeaEEXPM02YpiiqKhBFVRUAAFDgAAAQYIOmxOIAhYasBABCAgAMjmJZnieKoiiKpqmqNE3TPE8URdE0VdVVaZqmeZ4oiqJpqqrq8jxNE0XTFEXTVFXXhaaJommaommqquvC80TRNE1TVVXVdeF5omiapqmqruu6EEVRNE3TVFXXdV0giqZpmqrqurIMRNE0VVVVXVeWgSiapqqqquvKMjBN01RV15VdWQaYpqq6rizLMkBVXdd1ZVm2Aarquq4ry7INcF3XlWVZtm0ArivLsmzbAgAADhwAAAKMoJOMKouw0YQLD0ChISsCgCgAAMAYphRTyjAmIaQQGsYkhBJCJiWVlEqqIKRSUikVhFRSKiWjklJqKVUQUikplQpCKqWVVAAA2IEDANiBhVBoyEoAIA8AgCBGKcYYYwwyphRjzjkHlVKKMeeck4wxxphzzkkpGWPMOeeklIw555xzUkrmnHPOOSmlc84555yUUkrnnHNOSiklhM45J6WU0jnnnBMAAFTgAAAQYKPI5gQjQYWGrAQAUgEADI5jWZqmaZ4nipYkaZrneZ4omqZmSZrmeZ4niqbJ8zxPFEXRNFWV53meKIqiaaoq1xVF0zRNVVVVsiyKpmmaquq6ME3TVFXXdWWYpmmqquu6LmzbVFXVdWUZtq2aqiq7sgxcV3Vl17aB67qu7Nq2AADwBAcAoAIbVkc4KRoLLDRkJQCQAQBAGIOMQgghhRBCCiGElFIICQAAGHAAAAgwoQwUGrISAEgFAACQsdZaa6211kBHKaWUUkqpcIxSSimllFJKKaWUUkoppZRKSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoFAC5VOADoPtiwOsJJ0VhgoSErAYBUAADAGKWYck5CKRVCjDkmIaUWK4QYc05KSjEWzzkHoZTWWiyecw5CKa3FWFTqnJSUWoqtqBQyKSml1mIQwpSUWmultSCEKqnEllprQQhdU2opltiCELa2klKMMQbhg4+xlVhqDD74IFsrMdVaAABmgwMARIINqyOcFI0FFhqyEgAICQAgjFGKMcYYc8455yRjjDHmnHMQQgihZIwx55xzDkIIIZTOOeeccxBCCCGEUkrHnHMOQgghhFBS6pxzEEIIoYQQSiqdcw5CCCGEUkpJpXMQQgihhFBCSSWl1DkIIYQQQikppZRCCCGEEkIoJaWUUgghhBBCKKGklFIKIYRSQgillJRSSimFEEoIpZSSUkkppRJKCSGEUlJJKaUUQggllFJKKimllEoJoYRSSimlpJRSSiGUUEIpBQAAHDgAAAQYQScZVRZhowkXHoBCQ1YCAGQAAJSyUkoorVVAIqUYpNpCR5mDFHOJLHMMWs2lYg4pBq2GyjGlGLQWMgiZUkxKCSV1TCknLcWYSuecpJhzjaVzEAAAAEEAgICQAAADBAUzAMDgAOFzEHQCBEcbAIAgRGaIRMNCcHhQCRARUwFAYoJCLgBUWFykXVxAlwEu6OKuAyEEIQhBLA6ggAQcnHDDE294wg1O0CkqdSAAAAAAAAwA8AAAkFwAERHRzGFkaGxwdHh8gISIjJAIAAAAAAAYAHwAACQlQERENHMYGRobHB0eHyAhIiMkAQCAAAIAAAAAIIAABAQEAAAAAAACAAAABARPZ2dTAATCMAAAAAAAAFUPGmkCAAAAhlAFnjkoHh4dHx4pKHA1KjEqLzIsNDQqMCveHiYpczUpLS4sLSg3MicsLCsqJTIvJi0sKywkMjbgWVlXWUa00CqtQNVCq7QC1aoNVPXg9Xldx3nn5tixvV6vb7TX+hg7cK21QYgAtNJFphRUtpUuMqWgsqrasj2IhOA1F7LFMdFaWzkAtNBFpisIQgtdZLqCIKjqAAa9WePLkKr1MMG1FlwGtNJFTSkIcitd1JSCIKsCAQWISK0Cyzw147T1tAK00kVNKKjQVrqoCQUVqqr412m+VKtZf9h+TDaaztAAtNJFzVQQhFa6qJkKgqAqUGgtuOa2Se5l6jeXGSqnLM9enqnLs5dn6m7TptWUiVUVN4jhUz9//lzx+Xw+X3x8fCQSiWggDAA83UXF6/vpLipe3zsCULWMBE5PMTBMlsv39/f39/f39524nZ13CDgaRFuLYTbaWgyzq22MzEyKolIpst50Z9PGqqJSq8T2++taLf3+oqg6btyouhEjYlxFjXxex1wCBFxcv+PmzG1uc2bKyJFLLlkizZozZ/ZURpZs2TKiWbNnz5rKyJItS0akWbNnzdrIyJJtxmCczpxOATRRhoPimyjDQfEfIFMprQDU3WFYbXZLZZxMhxrGyRh99Uqel55XEk+9efP7I/FU/8Ojew4JNN/rTq6b73Un1x+AVSsCWD2tNqtpGOM4DOM4GV7n5th453cXNGcfAYQKTFEOguKnKAdB8btRLxNBWUrViLoY1/q1er+Q9xkvZM/IjaoRf30xu3HLnr61fu3UBDRZHZdqsjoutQeAVesAxNMTw2rR66X/Ix6/T5tx80+t/D67ipt/q5XfJzTfa03Wzfdak/UeAEpZawlsbharxTBVO1+c2nm/7/f1XR1dY8XaKWMH3aW9xvEFRFEksXgURRKLn7VamSFRVnYXg0C2Zo2MNE3+57u+e3NFlVev1uufX6nU3Lnf9d1j4wE03+sObprvdQc3ewBYFIArAtjdrRaraRivX7x+8VrbHIofG0n6cFwtNFKYBzxXA2j4uRpAw7dJRkSETBkZV1V1o+N0Op1WhmEyDOn36437RbKvl7zz838wgn295Iv8/Ac8UaRIPFGkSHyAzCItAXY3dzGsNueM6VDDOJkOY3QYX008L6vnfZp/3qf559VQL3Xm1SEFNN2fiMA03Z+IwOwBoKplAKY4TbGIec0111x99dXr9XrjZ/nzdSWXBekAHEsWp4ljyeI0sVs2FEGiLFLj7rjxeqG8Pm+tX/uW90b+DX31bVTF/I+Ut+/sM1IA/MyILvUzI7rUbpNqyIBVjSDGVV/Jo/9H6G/jq+5y3Pzb7P74Znf5ffZtApI5/fN5SAcHjIhB5vTP5yEdHDAiBt4oK/WGeqUMMspeTNsGk/H/PziIgCrG1Rijktfreh2vn4DH78WXa25yZkizZc9oM7JmaYeZM6bJOJkOxmE69Hmp/q/k0fvVRLln3H6fXcXNPt78W638Ptlxsytv/pHyW7Pfp1Xc7L5XfqvZb5MdN7vy5p/u8lut/D6t4mb3vfmnVn6bNt9nV3Hzj1d+q9lv02bc7Mqbf6vZb+N23OzKm73u8lOz3+fY3uwqLv1022+THTepN38yf7XyW1aX8YqjACWfDTiAA+BQALTURU0oCFpLXdSEgqAJpAKxrLtzybNt1Go5VeJAASzRnh75Eu3pke8BYNWiCIBVLdgsXMqlXBJijDGW2Sj5lUqlSJFpPN9fAf08318B/ewBUMUiA3h4YGIaooZrfn5+fn5+fn5+fn6mtQYKcQE8WVg5YfJkYeWEyWqblCIiiqKoVGq1WqxWWa3X6/V6vVoty0zrptXq9/u4ccS4GjWKGxcM6ogaNWpUnoDf73Xd3OQml2xZMhJNM7Nmz54zZ/bsWbNmphVJRpYs2bJly5YtS0YSoWlm1uzZc+bMnj17ZloATNNI4PbTNBK4/W5jlJGglFJWI4hR/levXr06RuJ5+fLly6Ln1atXxxD18uXLKnr+V8cI8/M03+vErpvvdWLXewBYxVoC9bBZDcPU3Bevtc399UWNtZH0p4MJZov7AkxThBmYpggzcNVCJqxIRQwiLpNBxxqUt/NvuCqmb2Poa+RftCr7DO3te16HBjzbulL22daVsnsAqKIFwMXVzbCLYdVe9vGovzx9xP7469mk3L05d1+qjyKuPAY8397G2PPtbYztAWDVQgCH09MwTTG+Us67nX1fG5G+0o3YvspGtK+yfBmqAExTJDHQaYokBnrrZZEZkqoa3BjFDJlmGA17PF+qE/GbJd3xm0V38qoYT/aLuTzh6w/ST/j6g/QHYBVgKYHTxcVqGKY5DOM4DNNRO3OXkM0JmAto6AE01xBa5OYaQou8B4BmRssAUNQ0TfP169fv169fvz6XSIZhGIbJixcvXrzIFP7+/3/9evc/wyMAVFM8EEOvpngghr5by8hIsqiqBjXGXx0T4zCdTCfj8PJl1fy83vv7q1fHvEubn5+fnwc84etOrp/wdSfXewBUsRDA5upqMU1DNl+/GNunkTDUGrWzn0BDIC5UUw7CwKspB2HgVzVFSFZ1R9QxU8MkHXvLGV8jKxtjv6J9G0N/MX1fIysbQzTdOlK26daRsnsAWLUGWFxcTQum8Skv93j2KLpfjSeb3fvFmM3xt3L3/mwCPN/2Rvb5tjeyewBULQGmzdM0DMzS3vEVHVu6MVTZGNn3Fe37WjxU2RjqAUxThJGfpggjv1uLDAlVdeOIGNH/1P9Q5/Jxvf49nmyOj74quveLufGb4zzh685unvB1Zzd7AFQAWAhguLpaTFNk8/1i7Ni+Oq5BxQVcGABEVcgFXo+qkAu8vlurZiaoqiNi3N2Z94sXL168ePEiR4wYMWLEiBEjRowYMWLEiBEjAFRVtGm4qqJNw7ceGRkZrGpQNW58OozDOIzDy5dV8/Pz8/Pz8/Pz8/Pz8/Pz8/NlPN/rDr6f73UH33sAVLGUwHRxsxqGaq72+tcvy5LsLLZ5JdBo0BdUU7Qgr6ZoQb4NqKon4PH6zfFknHYYjOqLT9XaWdkYWvQr2vcV7fuK9n3F9AEs3SZSduk2kbJ7AKhqBeDm7maYaujzKS8/0f/UJ/eL7v2ie7/o3rfHk83xBDzdZlLu6TaTcnsAWLUAYHcz1KqivUt7V/ZQZWPoX7TvK9r3a6iyMVSJ6QNMUaSQnaJIIXvrGSkSVTWIihsZpsmYjKJ/8vTxvC6694sxm+PJ5vhbuXu/ADzf6w5+nu91Bz97AFi1lACHm9UwVHPztbbpkiKHJVsy2SAcDURTFhZc0ZSFBdeqNqiKQXwej8dxXrx48eLFixcvXrx4oY3g8/////////+voo3IF3cCRE/xjoLoKd5RsPUCKVN9jt/v8TruMJ1MJ9PJ6E3z8y9fvnz58uXLly+rSp+Z+V+9ejXv7+8eukl9XpcPJED4YJP6vC4fSIDwgWN7vdDrmfT//4PHDfg98ns9/qDHnBxps2RPkuw5ciYZOXPJmSFrllSSNVumJDNLphgno2E6GQ3jUBmPeOn/KP11zY6bfxvfjCu/TSuv/Datustxs0/Njpt9anbc7Nv4yiu/TSuv/Datustxs0/Njpt9aptx82/jm175bVp55bfZ/e5y3OxT24ybfWqbcfNv08orv00rr/w27dfsuNmnthk3+7SVV36bVl75bVqJnUxPzXazT0294mnq2W+TikmmE5LiQb3pAa94mnpFAGxeSf1/jn9mWTgDBjhUUv+f459ZFs6AAQ4AAAAAAIAH/0EYBHEAB6gDzBkAAUxWjEAQk7nWaBZuuKvBN6iqkoMah7sAhnRZ6lFjmllwEgGCAde2zYBzAB5AAH5J/X+Of81ycQZMHI0uqf/P8a9ZLs6AiaMRAAAAAAIAOPgPw0EUEIddhEaDphAAjAhrrgAUlNDwPZKFEPFz2JKV4FqHl6tIxjaQDfQAiJqgZk1GDQgcBuAAfkn9f45/zXLiDBgwuqT+P8e/ZjlxBgwYAQAAAAAAg/8fDBlCDUeGDICqAJAT585AAALkhkHxIHMR3AF8IwmgWZwQhv0DcpcIMeTjToEGKDQAB0CEACgAfkn9f45/LXLiDCiMxpfU/+f41yInzoDCaAwAAAAEg4P/wyANDgAEhDsAujhQcBgAHEakAKBZjwHgANMYAkIDo+L8wDUrrgHpWnPwBBoJGZqDBmBAUAB1QANeOf1/zn53uYQA9ckctMrp/3P2u8slBKhP5qABAAAAAACAIAyCIAiD8DAMwoADzgECAA0wQFMAiMtgo6AATVGAE0gADAQA"></audio>
+ <audio id="offline-sound-reached"
+ src="data:audio/mpeg;base64,T2dnUwACAAAAAAAAAABVDxppAAAAABYzHfUBHgF2b3JiaXMAAAAAAkSsAAD/////AHcBAP////+4AU9nZ1MAAAAAAAAAAAAAVQ8aaQEAAAC9PVXbEEf//////////////////+IDdm9yYmlzNwAAAEFPOyBhb1R1ViBiNSBbMjAwNjEwMjRdIChiYXNlZCBvbiBYaXBoLk9yZydzIGxpYlZvcmJpcykAAAAAAQV2b3JiaXMlQkNWAQBAAAAkcxgqRqVzFoQQGkJQGeMcQs5r7BlCTBGCHDJMW8slc5AhpKBCiFsogdCQVQAAQAAAh0F4FISKQQghhCU9WJKDJz0IIYSIOXgUhGlBCCGEEEIIIYQQQgghhEU5aJKDJ0EIHYTjMDgMg+U4+ByERTlYEIMnQegghA9CuJqDrDkIIYQkNUhQgwY56ByEwiwoioLEMLgWhAQ1KIyC5DDI1IMLQoiag0k1+BqEZ0F4FoRpQQghhCRBSJCDBkHIGIRGQViSgwY5uBSEy0GoGoQqOQgfhCA0ZBUAkAAAoKIoiqIoChAasgoAyAAAEEBRFMdxHMmRHMmxHAsIDVkFAAABAAgAAKBIiqRIjuRIkiRZkiVZkiVZkuaJqizLsizLsizLMhAasgoASAAAUFEMRXEUBwgNWQUAZAAACKA4iqVYiqVoiueIjgiEhqwCAIAAAAQAABA0Q1M8R5REz1RV17Zt27Zt27Zt27Zt27ZtW5ZlGQgNWQUAQAAAENJpZqkGiDADGQZCQ1YBAAgAAIARijDEgNCQVQAAQAAAgBhKDqIJrTnfnOOgWQ6aSrE5HZxItXmSm4q5Oeecc87J5pwxzjnnnKKcWQyaCa0555zEoFkKmgmtOeecJ7F50JoqrTnnnHHO6WCcEcY555wmrXmQmo21OeecBa1pjppLsTnnnEi5eVKbS7U555xzzjnnnHPOOeec6sXpHJwTzjnnnKi9uZab0MU555xPxunenBDOOeecc84555xzzjnnnCA0ZBUAAAQAQBCGjWHcKQjS52ggRhFiGjLpQffoMAkag5xC6tHoaKSUOggllXFSSicIDVkFAAACAEAIIYUUUkghhRRSSCGFFGKIIYYYcsopp6CCSiqpqKKMMssss8wyyyyzzDrsrLMOOwwxxBBDK63EUlNtNdZYa+4555qDtFZaa621UkoppZRSCkJDVgEAIAAABEIGGWSQUUghhRRiiCmnnHIKKqiA0JBVAAAgAIAAAAAAT/Ic0REd0REd0REd0REd0fEczxElURIlURIt0zI101NFVXVl15Z1Wbd9W9iFXfd93fd93fh1YViWZVmWZVmWZVmWZVmWZVmWIDRkFQAAAgAAIIQQQkghhRRSSCnGGHPMOegklBAIDVkFAAACAAgAAABwFEdxHMmRHEmyJEvSJM3SLE/zNE8TPVEURdM0VdEVXVE3bVE2ZdM1XVM2XVVWbVeWbVu2dduXZdv3fd/3fd/3fd/3fd/3fV0HQkNWAQASAAA6kiMpkiIpkuM4jiRJQGjIKgBABgBAAACK4iiO4ziSJEmSJWmSZ3mWqJma6ZmeKqpAaMgqAAAQAEAAAAAAAACKpniKqXiKqHiO6IiSaJmWqKmaK8qm7Lqu67qu67qu67qu67qu67qu67qu67qu67qu67qu67qu67quC4SGrAIAJAAAdCRHciRHUiRFUiRHcoDQkFUAgAwAgAAAHMMxJEVyLMvSNE/zNE8TPdETPdNTRVd0gdCQVQAAIACAAAAAAAAADMmwFMvRHE0SJdVSLVVTLdVSRdVTVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTdM0TRMIDVkJAJABAKAQW0utxdwJahxi0nLMJHROYhCqsQgiR7W3yjGlHMWeGoiUURJ7qihjiknMMbTQKSet1lI6hRSkmFMKFVIOWiA0ZIUAEJoB4HAcQLIsQLI0AAAAAAAAAJA0DdA8D7A8DwAAAAAAAAAkTQMsTwM0zwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNI0QPM8QPM8AAAAAAAAANA8D/BEEfBEEQAAAAAAAAAszwM80QM8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwNE0QPM8QPM8AAAAAAAAALA8D/BEEfA8EQAAAAAAAAA0zwM8UQQ8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABDgAAAQYCEUGrIiAIgTADA4DjQNmgbPAziWBc+D50EUAY5lwfPgeRBFAAAAAAAAAAAAADTPg6pCVeGqAM3zYKpQVaguAAAAAAAAAAAAAJbnQVWhqnBdgOV5MFWYKlQVAAAAAAAAAAAAAE8UobpQXbgqwDNFuCpcFaoLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABhwAAAIMKEMFBqyIgCIEwBwOIplAQCA4ziWBQAAjuNYFgAAWJYligAAYFmaKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrISAIgCADAoimUBy7IsYFmWBTTNsgCWBtA8gOcBRBEACAAAKHAAAAiwQVNicYBCQ1YCAFEAAAZFsSxNE0WapmmaJoo0TdM0TRR5nqZ5nmlC0zzPNCGKnmeaEEXPM02YpiiqKhBFVRUAAFDgAAAQYIOmxOIAhYasBABCAgAMjmJZnieKoiiKpqmqNE3TPE8URdE0VdVVaZqmeZ4oiqJpqqrq8jxNE0XTFEXTVFXXhaaJommaommqquvC80TRNE1TVVXVdeF5omiapqmqruu6EEVRNE3TVFXXdV0giqZpmqrqurIMRNE0VVVVXVeWgSiapqqqquvKMjBN01RV15VdWQaYpqq6rizLMkBVXdd1ZVm2Aarquq4ry7INcF3XlWVZtm0ArivLsmzbAgAADhwAAAKMoJOMKouw0YQLD0ChISsCgCgAAMAYphRTyjAmIaQQGsYkhBJCJiWVlEqqIKRSUikVhFRSKiWjklJqKVUQUikplQpCKqWVVAAA2IEDANiBhVBoyEoAIA8AgCBGKcYYYwwyphRjzjkHlVKKMeeck4wxxphzzkkpGWPMOeeklIw555xzUkrmnHPOOSmlc84555yUUkrnnHNOSiklhM45J6WU0jnnnBMAAFTgAAAQYKPI5gQjQYWGrAQAUgEADI5jWZqmaZ4nipYkaZrneZ4omqZmSZrmeZ4niqbJ8zxPFEXRNFWV53meKIqiaaoq1xVF0zRNVVVVsiyKpmmaquq6ME3TVFXXdWWYpmmqquu6LmzbVFXVdWUZtq2aqiq7sgxcV3Vl17aB67qu7Nq2AADwBAcAoAIbVkc4KRoLLDRkJQCQAQBAGIOMQgghhRBCCiGElFIICQAAGHAAAAgwoQwUGrISAEgFAACQsdZaa6211kBHKaWUUkqpcIxSSimllFJKKaWUUkoppZRKSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoFAC5VOADoPtiwOsJJ0VhgoSErAYBUAADAGKWYck5CKRVCjDkmIaUWK4QYc05KSjEWzzkHoZTWWiyecw5CKa3FWFTqnJSUWoqtqBQyKSml1mIQwpSUWmultSCEKqnEllprQQhdU2opltiCELa2klKMMQbhg4+xlVhqDD74IFsrMdVaAABmgwMARIINqyOcFI0FFhqyEgAICQAgjFGKMcYYc8455yRjjDHmnHMQQgihZIwx55xzDkIIIZTOOeeccxBCCCGEUkrHnHMOQgghhFBS6pxzEEIIoYQQSiqdcw5CCCGEUkpJpXMQQgihhFBCSSWl1DkIIYQQQikppZRCCCGEEkIoJaWUUgghhBBCKKGklFIKIYRSQgillJRSSimFEEoIpZSSUkkppRJKCSGEUlJJKaUUQggllFJKKimllEoJoYRSSimlpJRSSiGUUEIpBQAAHDgAAAQYQScZVRZhowkXHoBCQ1YCAGQAAJSyUkoorVVAIqUYpNpCR5mDFHOJLHMMWs2lYg4pBq2GyjGlGLQWMgiZUkxKCSV1TCknLcWYSuecpJhzjaVzEAAAAEEAgICQAAADBAUzAMDgAOFzEHQCBEcbAIAgRGaIRMNCcHhQCRARUwFAYoJCLgBUWFykXVxAlwEu6OKuAyEEIQhBLA6ggAQcnHDDE294wg1O0CkqdSAAAAAAAAwA8AAAkFwAERHRzGFkaGxwdHh8gISIjJAIAAAAAAAYAHwAACQlQERENHMYGRobHB0eHyAhIiMkAQCAAAIAAAAAIIAABAQEAAAAAAACAAAABARPZ2dTAABARwAAAAAAAFUPGmkCAAAAZa2xyCElHh4dHyQvOP8T5v8NOEo2/wPOytDN39XY2P8N/w2XhoCs0CKt8NEKLdIKH63ShlVlwuuiLze+3BjtjfZGe0lf6As9ggZstNJFphRUtpUuMqWgsqrasj2IhOA1F7LFMdFaWzkAtNBFpisIQgtdZLqCIKjqAAa9WePLkKr1MMG1FlwGtNJFTSkIcitd1JSCIKsCAQWISK0Cyzw147T1tAK00kVNKKjQVrqoCQUVqqr412m+VKtZf9h+TDaaztAAtNRFzVEQlJa6qDkKgiIrc2gtfES4nSQ1mlvfMxfX4+b2t7ICVNGwkKiiYSGxTQtK1YArN+DgTqdjMwyD1q8dL6RfOzXZ0yO+qkZ8+Ub81WP+DwNkWcJhvlmWcJjvSbUK/WVm3LgxClkyiuxpIFtS5Gwi5FBkj2DGWEyHYBiLcRJkWnQSZGbRGYGZAHr6vWVJAWGE5q724ldv/B8Kp5II3dPvLUsKCCM0d7UXv3rj/1A4lUTo+kCUtXqtWimLssjIyMioViORobCJAQLYFnpaAACCAKEWAMCiQGqMABAIUKknAFkUIGsBIBBAHYBtgAFksAFsEySQgQDWQ4J1AOpiVBUHd1FE1d2IGDfGAUzmKiiTyWQyuY6Lx/W4jgkQZQKioqKuqioAiIqKwagqCqKiogYxCgACCiKoAAAIqAuKAgAgjyeICQAAvAEXmQAAmYNhMgDAZD5MJqYzppPpZDqMwzg0TVU9epXf39/9xw5lBaCpqJiG3VOsht0wRd8FgAeoB8APKOABQFT23GY0GgoAolkyckajHgBoZEYujQY+230BUoD/uf31br/7qCHLXLWwIjMIz3ZfgBTgf25/vdvvPmrIMlctrMgMwiwCAAB4FgAAggAAAM8CAEAgkNG0DgCeBQCAIAAAmEUBynoASKANMIAMNoBtAAlkMAGoAzKQgDoAdQYAKOoEANFgAoAyKwAAGIOiAACVBACyAAAAFYMDAAAyxyMAAMBMfgQAAMi8GAAACDfoFQAAYHgxACA16QiK4CoWcTcVAADDdNpc7AAAgJun080DAAAwPTwxDQAAxYanm1UFAAAVD0MsAA4AyCUztwBwBgAyQOTMTZYA0AAiySW3Clar/eRUAb5fPDXA75e8QH//jkogHmq1n5wqwPeLpwb4/ZIX6O/fUQnEgwf9fr/f72dmZmoaRUREhMLTADSVgCAgVLKaCT0tAABk2AFgAyQgEEDTSABtQiSQwQDUARksYBtAAgm2AQSQYBtAAuYPOK5rchyPLxAABFej4O7uAIgYNUYVEBExbozBGHdVgEoCYGZmAceDI0mGmZlrwYDHkQQAiLhxo6oKSHJk/oBrZgYASI4XAwDAXMMnIQAA5DoyDAAACa8AAMDM5JPEZDIZhiFJoN33vj4X6N19v15gxH8fAE1ERMShbm5iBYCOAAMFgAzaZs3ITURECAAhInKTNbNtfQDQNnuWHBERFgBUVa4iDqyqXEUc+AKkZlkmZCoJgIOBBaubqwoZ2SDNgJlj5MgsMrIV44xgKjCFYTS36QRGQafwylRZAhMXr7IEJi7+AqQ+gajAim2S1W/71ACEi4sIxsXVkSNDQRkgzGp6eNgMJDO7kiVXcmStkCVL0Ry0MzMgzRklI2dLliQNEbkUVFvaCApWW9oICq7rpRlKs2MBn8eVJRlk5JARjONMdGSYZArDOA0ZeKHD6+KN9oZ5MBDTCO8bmrptBBLgcnnOcBmk/KMhS2lL6rYRSIDL5TnDZZDyj4YspS3eIOoN9Uq1KIsMpp1gsU0gm412AISQyICYRYmsFQCQwWIgwWRCABASGRDawAKYxcCAyYQFgLhB1Rg17iboGF6v1+fIcR2TyeR4PF7HdVzHdVzHcYXPbzIAQNTFuBoVBQAADJOL15WBhNcFAADAI9cAAAAAAJAEmIsMAOBlvdTLVcg4mTnJzBnTobzDfKPRaDSaI1IAnUyHhr6LALxFo5FmyZlL1kAU5lW+LIBGo9lym1OF5ikAOsyctGkK8fgfAfgPIQDAvBLgmVsGoM01lwRAvCwAHje0zTiA/oUDAOYAHqv9+AQC4gEDMJ/bIrXsH0Ggyh4rHKv9+AQC4gEDMJ/bIrXsH0Ggyh4rDPUsAADAogBCk3oCQBAAAABBAAAg6FkAANCzAAAgBELTAACGQAAoGoFBFoWoAQDaBPoBQ0KdAQAAAK7iqkAVAABQNixAoRoAAKgE4CAiAAAAACAYow6IGjcAAAAAAPL4DfZ6kkZkprlkj6ACu7i7u5sKAAAOd7vhAAAAAEBxt6m6CjSAgKrFasUOAAAoAABic/d0EwPIBjAA0CAggABojlxzLQD+mv34BQXEBQvYH5sijDr0/FvZOwu/Zj9+QQFxwQL2x6YIow49/1b2zsI9CwAAeBYAAIBANGlSDQAABAEAAKBnIQEAeloAABgCCU0AAEMgAGQTYNAG+gCwAeiBIWMAGmYAAICogRg16gAAABB1gwVkNlgAAIDIGnCMOwIAAACAgmPA8CpgBgAAAIDMG/QbII/PLwAAaKN9vl4Pd3G6maoAAAAAapiKaQUAANPTxdXhJkAWXHBzcRcFAAAHAABqNx2YEQAHHIADOAEAvpp9fyMBscACmc9Lku7s1RPB+kdWs+9vJCAWWCDzeUnSnb16Ilj/CNOzAACAZwEAAAhEk6ZVAAAIAgAAQc8CAICeFgAAhiAAABgCAUAjMGgDPQB6CgCikmDIGIDqCAAAkDUQdzUOAAAAKg3WIKsCAABkFkAJAAAAQFzFQXh8QQMAAAAABCMCKEhAAACAkXcOo6bDxCgqOMXV6SoKAAAAoGrabDYrAAAiHq5Ww80EBMiIi01tNgEAAAwAAKiHGGpRQADUKpgGAAAOEABogFFAAN6K/fghBIQ5cH0+roo0efVEquyBaMV+/BACwhy4Ph9XRZq8eiJV9kCQ9SwAAMCiAGhaDwAIAgAAIAgAAAQ9CwAAehYAAIQgAAAYAgGgaAAGWRTKBgBAG4AMADI2ANVFAAAAgKNqFKgGAACKRkpQqAEAgCKBAgAAAIAibkDFuDEAAAAAYODzA1iQoAEAAI3+ZYOMNls0AoEdN1dPiwIAgNNp2JwAAAAAYHgaLoa7QgNwgKeImAoAAA4AALU5XNxFoYFaVNxMAQCAjADAAQaeav34QgLiAQM4H1dNGbXoH8EIlT2SUKr14wsJiAcM4HxcNWXUon8EI1T2SEJMzwIAgJ4FAAAgCAAAhCAAABD0LAAA6GkBAEAIAgCAIRAAqvUAgywK2QgAyKIAoBEYAiGqCQB1BQAAqCNAmQEAAOqGFZANCwAAoBpQJgAAAKDiuIIqGAcAAAAA3Ig64LgoAADQHJ+WmYbJdMzQBsGuVk83mwIAAAIAgFNMV1cBUz1xKAAAgAEAwHR3sVldBRxAQD0d6uo0FAAADAAA6orNpqIAkMFqqMNAAQADKABkICgAfmr9+AUFxB0ANh+vita64VdPLCP9acKn1o9fUEDcAWDz8aporRt+9cQy0p8mjHsWAADwLAAAAEEAAAAEAQCAoGchAAD0LAAADIHQpAIADIEAUCsSDNpACwA2AK2EIaOVgLoCAACUBZCVAACAKBssIMqGFQAAoKoAjIMLAAAAAAgYIyB8BAUAAAAACPMJkN91ZAAA5O6kwzCtdAyIVd0cLi4KAAAAIFbD4uFiAbW5mu42AAAAAFBPwd1DoIEjgNNF7W4WQAEABwACODxdPcXIAAIHAEEBflr9/A0FxAULtD9eJWl006snRuXfq8Rp9fM3FBAXLND+eJWk0U2vnhiVf68STM8CAACeBQAAIAgAAIAgAAAQ9CwAAOhpAQBgCITGOgAwBAJAYwYYZFGoFgEAZFEAKCsBhkDIGgAoqwAAAFVAVCUAAKhU1aCIhgAAIMoacKNGVAEAAABwRBRQXEUUAAAAABUxCGAMRgAAAABNpWMnaZOWmGpxt7kAAAAAIBimq9pAbOLuYgMAAAAAww0300VBgAMRD0+HmAAAZAAAAKvdZsNUAAcoaAAgA04BXkr9+EIC4gQD2J/XRWjmV0/syr0xpdSPLyQgTjCA/XldhGZ+9cSu3BvD9CwAAOBZAAAAggAAAAgCgAQIehYAAPQsAAAIQQAAMAQCQJNMMMiiUDTNBABZFACyHmBIyCoAACAKoCIBACCLBjMhGxYAACCzAhQFAAAAYMBRFMUYAwAAAAAorg5gPZTJOI4yzhiM0hI1TZvhBgAAAIAY4mZxNcBQV1dXAAAAAAA3u4u7h4ICIYOni7u7qwGAAqAAAIhaHKI2ICCGXe2mAQBAgwwAAQIKQK6ZuREA/hm9dyCg9xrQforH3TSBf2dENdKfM5/RewcCeq8B7ad43E0T+HdGVCP9OWN6WgAA5CkANERJCAYAAIBgAADIAD0LAAB6WgAAmCBCUW8sAMAQCEBqWouAQRZFaigBgDaBSBgCIeoBAFkAwAiou6s4LqqIGgAAKMsKKKsCAAColIgbQV3ECAAACIBRQVzVjYhBVQEAAADJ55chBhUXEQEAIgmZOXNmTSNLthmTjNOZM8cMw2RIa9pdPRx2Q01VBZGNquHTq2oALBfQxKcAh/zVDReL4SEqIgBAbqcKYhiGgdXqblocygIAdL6s7qbaDKfdNE0FAQ4AVFVxeLi7W51DAgIAAwSWDoAPoHUAAt6YvDUqoHcE7If29ZNi2H/k+ir/85yQNiZvjQroHQH7oX39pBj2H7m+yv88J6QWi7cXgKFPJtNOABIEEGVEvUljJckAbdhetBOgpwFkZFbqtWqAUBgysL2AQR2gHoDYE3Dld12P18HkOuY1r+M4Hr/HAAAVBRejiCN4HE/QLOAGPJhMgAJi1BhXgwCAyZUCmOuHZuTMkTUia47sGdIs2TPajKwZqUiTNOKl/1fyvHS8fOn/1QGU+5U0SaOSzCxpmiNntsxI0LhZ+/0dmt1CVf8HNAXKl24AoM0D7jsIAMAASbPkmpvssuTMktIgALMAUESaJXuGzCyZQQBwgEZl5JqbnBlvgIyT0TAdSgG+6Px/rn+NclEGFGDR+f9c/xrlogwoAKjPiKKfIvRhGKYgzZLZbDkz2hC4djgeCVkXEKJlXz1uAosCujLkrDz6p0CZorVVOjvIQOAp3aVcLyCErGACSRKImCRMETeKzA6cFNd2X3KG1pyLgOnTDtnHXMSpVY1A6IXSjlNoh70ubc2VzXgfgd6uEQOBEmCt1O4wOHBQB2ANvtj8f65/jXKiAkiwWGz+P9e/RjlRASRYAODhfxqlH5QGhuxAobUGtOqEll3GqBEhYLIJQLMr6oQooHFcGpIsDK4yPg3UfMJtO/hTFVma3lrt+JI/EFBxbvlT2OiH0mhEfBofQDudLtq0lTiGSOKaVl6peD3XTDACuSXYNQAp4JoD7wjgUAC+2Px/rn+NcqIMKDBebP4/179GOVEGFBgDQPD/fxBW4I7k5DEgDtxdcwFpcNNx+JoDICRCTtO253ANTbn7DmF+TXalagLadQ23yhGw1Pj7SzpOajGmpeeYyqUY1/Y6KfuTVOU5cvu0gW2boGlMfFv5TejrOmkOl0iEpuQMpAYBB09nZ1MABINhAAAAAAAAVQ8aaQMAAAB/dp+bB5afkaKgrlp+2Px/rn+NchECSMBh8/+5/jXKRQggAQAI/tMRHf0LRqDj05brTRlASvIy1PwPFcajBhcoY0BtuEqvBZw0c0jJRaZ4n0f7fOKW0Y8QZ/M7xFeaGJktZ2ePGFTOLl4XzRCQMnJET4bVsFhMiiHf5vXtJ9vtMsf/Wzy030v3dqzCbkfN7af9JmpkTSXXICMpLAVO16AZoAF+2Px/rn91uQgGDOCw+f9c/+pyEQwYAACCH51SxFCg6SCEBi5Yzvla/iwJC4ekcPjs4PTWuY3tqJ0BKbo3cSYE4Oxo+TYjMXbYRhO+7lamNITiY2u0SUbFcZRMTaC5sUlWteBp+ZP4wUl9lzksq8hUQ5JOZZBAjfd98+8O6pvScEnEsrp/Z5BczwfWpkx5PwQ37EoIH7fMBgYGgusZAQN+2Px/rn91uQgGFOCw+f9c/+pyEQwoAPD/I8YfOD1cxsESTiLRCq0XjEpMtryCW+ZYCL2OrG5/pdkExMrQmjY9KVY4h4vfDR0No9dovrC2mxka1Pr0+Mu09SplWO6YXqWclpXdoVKuagQllrWfCaGA0R7bvLk41ZsRTBiieZFaqyFRFbasq0GwHT0MKbUIB2QAftj8f65/NbkIAQxwOGz+P9e/mlyEAAY4gEcfPYMyMh8UBxBogIAtTU0qrERaVBLhCkJQ3MmgzZNrxplCg6xVj5AdH8J2IE3bUNgyuD86evYivJmI+NREqmWbKqosI6xblSnNmJJUum+0qsMe4o8fIeCXELdErT52+KQtXSIl3XJNKOKv3BnKtS2cKmmnGpCqP/5YNQ9MCB2P8VUnCJiYDEAAXrj8f65/jXIiGJCAwuX/c/1rlBPBgAQA/ymlCDEi+hsNB2RoT865unFOQZiOpcy11YPQ6BiMettS0AZ0JqI4PV/Neludd25CqZDuiL82RhzdohJXt36nH+HlZiHE5ILqVSQL+T5/0h9qFzBVn0OFT9herDG3XzXz299VNY2RkejrK96EGyybKbXyG3IUUv5QEvq2bAP5CjJa9IiDeD5OOF64/H8uf3W5lAAmULj8fy5/dbmUACYAPEIfUcpgMGh0GgjCGlzQcHwGnb9HCrHg86LPrV1SbrhY+nX/N41X2DMb5NsNtkcRS9rs95w9uDtvP+KP/MupnfH3yHIbPG/1zDBygJimTvFcZywqne6OX18E1zluma5AShnVx4aqfxLo6K/C8P2fxH5cuaqtqE3Lbru4hT4283zc0Hqv2xINtisxZXBVfQuOAK6kCHjBAF6o/H+uf09ycQK6w6IA40Ll/3P9e5KLE9AdFgUYAwAAAgAAgDD4g+AgXAEEyAAEoADiPAAIcHGccHEAxN271+bn5+dt4B2YmGziAIrZMgZ4l2nedkACHggIAA=="></audio>
+ </template>
+ </div>
+ </div>
+
+ <!-- Visable Scripts -->
+ <script src="/games/dino/main.js"></script>
+
+ <div class="footer">
+ <link rel="stylesheet" type="text/css"
+ href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" />Copyright &copy;
+ <script>
+ var d = new Date()
+ document.write(d.getFullYear())
+ </script>
+ <a href="https://google.de">Google</a></a>
+ </div>
+
+ </body>
+
+</html>
diff --git a/games/dino/main.css b/games/dino/main.css
new file mode 100644
index 0000000..f5774fa
--- /dev/null
+++ b/games/dino/main.css
@@ -0,0 +1,170 @@
+/* latin */
+@font-face {
+ font-family: 'Press Start 2P';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Press Start 2P Regular'), local('PressStart2P-Regular'), url(https://fonts.gstatic.com/s/pressstart2p/v8/e3t4euO8T-267oIAQAu6jDQyK3nVivM.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+ }
+
+html,
+body {
+ padding: 0;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.icon {
+ -webkit-user-select: none;
+ user-select: none;
+ display: inline-block;
+}
+
+.icon-offline {
+ content: -webkit-image-set(
+ url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAGxJREFUeF7tyMEJwkAQRuFf5ipMKxYQiJ3Z2nSwrWwBA0+DQZcdxEOueaePp9+dQZFB7GpUcURSVU66yVNFj6LFICatThZB6r/ko/pbRpUgilY0Cbw5sNmb9txGXUKyuH7eV25x39DtJXUNPQGJtWFV+BT/QAAAAABJRU5ErkJggg==)
+ 1x,
+ url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQBAMAAAAVaP+LAAAAGFBMVEUAAABTU1NNTU1TU1NPT09SUlJSUlJTU1O8B7DEAAAAB3RSTlMAoArVKvVgBuEdKgAAAJ1JREFUeF7t1TEOwyAMQNG0Q6/UE+RMXD9d/tC6womIFSL9P+MnAYOXeTIzMzMzMzMzaz8J9Ri6HoITmuHXhISE8nEh9yxDh55aCEUoTGbbQwjqHwIkRAEiIaG0+0aa9vbmae89rogeoww936mqrwdbr4gn/z0IAdQ6nQ/FIpRXDwHcA+JIJcQowQAlFUA0MfQpXLlVQfkzR4igS6ENjknm/wiaGhsAAAAASUVORK5CYII=)
+ 2x
+ );
+ position: relative;
+}
+
+.hidden {
+ display: none;
+}
+
+/* Offline page */
+
+.offline .interstitial-wrapper {
+ color: #2b2b2b;
+ font-size: 1em;
+ line-height: 1.55;
+ margin: 0 auto;
+ max-width: 600px;
+ padding-top: 100px;
+ width: 100%;
+}
+
+.offline .runner-container {
+ height: 150px;
+ max-width: 600px;
+ overflow: hidden;
+ position: absolute;
+ top: 35px;
+ width: 44px;
+}
+
+.offline .runner-canvas {
+ height: 150px;
+ max-width: 600px;
+ opacity: 1;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ z-index: 2;
+}
+
+.offline .controller {
+ background: rgba(247, 247, 247, 0.1);
+ height: 100vh;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100vw;
+ z-index: 1;
+}
+
+#offline-resources {
+ display: none;
+}
+
+#instructions {
+ margin: 2em;
+ text-align: center;
+}
+
+@media (max-width: 420px) {
+ .suggested-left > #control-buttons,
+ .suggested-right > #control-buttons {
+ float: none;
+ }
+ .snackbar {
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ border-radius: 0;
+ }
+}
+
+@media (max-height: 350px) {
+ h1 {
+ margin: 0 0 15px;
+ }
+ .icon-offline {
+ margin: 0 0 10px;
+ }
+ .interstitial-wrapper {
+ margin-top: 5%;
+ }
+ .nav-wrapper {
+ margin-top: 30px;
+ }
+}
+
+@media (min-width: 600px) and (max-width: 736px) and (orientation: landscape) {
+ .offline .interstitial-wrapper {
+ margin-left: 0;
+ margin-right: 0;
+ }
+}
+
+@media (min-width: 420px) and (max-width: 736px) and (min-height: 240px) and (max-height: 420px) and (orientation: landscape) {
+ .interstitial-wrapper {
+ margin-bottom: 100px;
+ }
+}
+
+@media (min-height: 240px) and (orientation: landscape) {
+ .offline .interstitial-wrapper {
+ margin-bottom: 90px;
+ }
+ .icon-offline {
+ margin-bottom: 20px;
+ }
+}
+
+@media (max-height: 320px) and (orientation: landscape) {
+ .icon-offline {
+ margin-bottom: 0;
+ }
+ .offline .runner-container {
+ top: 10px;
+ }
+}
+
+@media (max-width: 240px) {
+ .interstitial-wrapper {
+ overflow: inherit;
+ padding: 0 8px;
+ }
+}
+
+.footer{
+ position: fixed;
+ text-align: center;
+ bottom: 5px;
+ width: 100%;
+ left: 0%;
+ font-family: 'Press Start 2P';
+ font-size: 75%;
+ color: #535353;
+}
+
+a:link {
+ text-decoration: none;
+ }
+
+
+
diff --git a/games/dino/main.js b/games/dino/main.js
new file mode 100644
index 0000000..62735fe
--- /dev/null
+++ b/games/dino/main.js
@@ -0,0 +1,2961 @@
+(function () {
+ "use strict";
+ /**
+ * T-Rex runner.
+ * @param {string} outerContainerId Outer containing element id.
+ * @param {Object} opt_config
+ * @constructor
+ * @export
+ */
+ function Runner(outerContainerId, opt_config) {
+ // Singleton
+ if (Runner.instance_) {
+ return Runner.instance_;
+ }
+ Runner.instance_ = this;
+
+ this.outerContainerEl = document.querySelector(outerContainerId);
+ this.containerEl = null;
+ this.snackbarEl = null;
+ this.detailsButton = this.outerContainerEl.querySelector("#details-button");
+
+ this.config = opt_config || Runner.config;
+
+ this.dimensions = Runner.defaultDimensions;
+
+ this.canvas = null;
+ this.canvasCtx = null;
+
+ this.tRex = null;
+
+ this.distanceMeter = null;
+ this.distanceRan = 0;
+
+ this.highestScore = 0;
+
+ this.time = 0;
+ this.runningTime = 0;
+ this.msPerFrame = 1000 / FPS;
+ this.currentSpeed = this.config.SPEED;
+
+ this.obstacles = [];
+
+ this.activated = false; // Whether the easter egg has been activated.
+ this.playing = false; // Whether the game is currently in play state.
+ this.crashed = false;
+ this.paused = false;
+ this.inverted = false;
+ this.invertTimer = 0;
+ this.resizeTimerId_ = null;
+
+ this.playCount = 0;
+
+ // Sound FX.
+ this.audioBuffer = null;
+ this.soundFx = {};
+
+ // Global web audio context for playing sounds.
+ this.audioContext = null;
+
+ // Images.
+ this.images = {};
+ this.imagesLoaded = 0;
+
+ if (this.isDisabled()) {
+ this.setupDisabledRunner();
+ } else {
+ this.loadImages();
+ }
+ }
+ window["Runner"] = Runner;
+
+ /**
+ * Default game width.
+ * @const
+ */
+ var DEFAULT_WIDTH = 600;
+
+ console.log("FPS Configuration")
+ /**
+ * Frames per second.
+ * @const
+ */
+ var FPS = 60;
+
+ /** @const */
+ var IS_HIDPI = window.devicePixelRatio > 1;
+
+ /** @const */
+ var IS_IOS = /iPad|iPhone|iPod/.test(window.navigator.platform);
+
+ /** @const */
+ var IS_MOBILE = /Android/.test(window.navigator.userAgent) || IS_IOS;
+
+ /** @const */
+ var IS_TOUCH_ENABLED = "ontouchstart" in window;
+
+ console.log("Game Configuration")
+ /**
+ * Default game configuration.
+ * @enum {number}
+ */
+ Runner.config = {
+ ACCELERATION: 0.001,
+ BG_CLOUD_SPEED: 0.2,
+ BOTTOM_PAD: 10,
+ CLEAR_TIME: 3000,
+ CLOUD_FREQUENCY: 0.5,
+ GAMEOVER_CLEAR_TIME: 750,
+ GAP_COEFFICIENT: 0.6,
+ GRAVITY: 0.6,
+ INITIAL_JUMP_VELOCITY: 12,
+ INVERT_FADE_DURATION: 12000,
+ INVERT_DISTANCE: 700,
+ MAX_BLINK_COUNT: 3,
+ MAX_CLOUDS: 6,
+ MAX_OBSTACLE_LENGTH: 3,
+ MAX_OBSTACLE_DUPLICATION: 2,
+ MAX_SPEED: 13,
+ MIN_JUMP_HEIGHT: 35,
+ MOBILE_SPEED_COEFFICIENT: 1.2,
+ RESOURCE_TEMPLATE_ID: "audio-resources",
+ SPEED: 6,
+ SPEED_DROP_COEFFICIENT: 3
+ };
+
+ /**
+ * Default dimensions.
+ * @enum {string}
+ */
+ Runner.defaultDimensions = {
+ WIDTH: DEFAULT_WIDTH,
+ HEIGHT: 150
+ };
+
+ /**
+ * CSS class names.
+ * @enum {string}
+ */
+ Runner.classes = {
+ CANVAS: "runner-canvas",
+ CONTAINER: "runner-container",
+ CRASHED: "crashed",
+ ICON: "icon-offline",
+ INVERTED: "inverted",
+ SNACKBAR: "snackbar",
+ SNACKBAR_SHOW: "snackbar-show",
+ TOUCH_CONTROLLER: "controller"
+ };
+
+ /**
+ * Sprite definition layout of the spritesheet.
+ * @enum {Object}
+ */
+ Runner.spriteDefinition = {
+ LDPI: {
+ CACTUS_LARGE: {
+ x: 332,
+ y: 2
+ },
+ CACTUS_SMALL: {
+ x: 228,
+ y: 2
+ },
+ CLOUD: {
+ x: 86,
+ y: 2
+ },
+ HORIZON: {
+ x: 2,
+ y: 54
+ },
+ MOON: {
+ x: 484,
+ y: 2
+ },
+ PTERODACTYL: {
+ x: 134,
+ y: 2
+ },
+ RESTART: {
+ x: 2,
+ y: 2
+ },
+ TEXT_SPRITE: {
+ x: 655,
+ y: 2
+ },
+ TREX: {
+ x: 848,
+ y: 2
+ },
+ STAR: {
+ x: 645,
+ y: 2
+ }
+ },
+ HDPI: {
+ CACTUS_LARGE: {
+ x: 652,
+ y: 2
+ },
+ CACTUS_SMALL: {
+ x: 446,
+ y: 2
+ },
+ CLOUD: {
+ x: 166,
+ y: 2
+ },
+ HORIZON: {
+ x: 2,
+ y: 104
+ },
+ MOON: {
+ x: 954,
+ y: 2
+ },
+ PTERODACTYL: {
+ x: 260,
+ y: 2
+ },
+ RESTART: {
+ x: 2,
+ y: 2
+ },
+ TEXT_SPRITE: {
+ x: 1294,
+ y: 2
+ },
+ TREX: {
+ x: 1678,
+ y: 2
+ },
+ STAR: {
+ x: 1276,
+ y: 2
+ }
+ }
+ };
+
+ /**
+ * Sound FX. Reference to the ID of the audio tag on interstitial page.
+ * @enum {string}
+ */
+ Runner.sounds = {
+ BUTTON_PRESS: "offline-sound-press",
+ HIT: "offline-sound-hit",
+ SCORE: "offline-sound-reached"
+ };
+
+ /**
+ * Key code mapping.
+ * @enum {Object}
+ */
+ Runner.keycodes = {
+ JUMP: {
+ "38": 1,
+ "32": 1,
+ "87": 1
+ }, // Up, spacebar
+ DUCK: {
+ "40": 1,
+ "83": 1
+ }, // Down
+ RESTART: {
+ "13": 1,
+ "82": 1
+ } // Enter
+ };
+
+ /**
+ * Runner event names.
+ * @enum {string}
+ */
+ Runner.events = {
+ ANIM_END: "webkitAnimationEnd",
+ CLICK: "click",
+ KEYDOWN: "keydown",
+ KEYUP: "keyup",
+ MOUSEDOWN: "mousedown",
+ MOUSEUP: "mouseup",
+ RESIZE: "resize",
+ TOUCHEND: "touchend",
+ TOUCHSTART: "touchstart",
+ VISIBILITY: "visibilitychange",
+ BLUR: "blur",
+ FOCUS: "focus",
+ LOAD: "load"
+ };
+
+ Runner.prototype = {
+ /**
+ * Whether the easter egg has been disabled. CrOS enterprise enrolled devices.
+ * @return {boolean}
+ */
+ isDisabled: function () {
+ // return loadTimeData && loadTimeData.valueExists('disabledEasterEgg');
+ return false;
+ },
+
+ /**
+ * For disabled instances, set up a snackbar with the disabled message.
+ */
+ setupDisabledRunner: function () {
+ this.containerEl = document.createElement("div");
+ this.containerEl.className = Runner.classes.SNACKBAR;
+ this.containerEl.textContent = loadTimeData.getValue("disabledEasterEgg");
+ this.outerContainerEl.appendChild(this.containerEl);
+
+ // Show notification when the activation key is pressed.
+ document.addEventListener(
+ Runner.events.KEYDOWN,
+ function (e) {
+ if (Runner.keycodes.JUMP[e.keyCode]) {
+ this.containerEl.classList.add(Runner.classes.SNACKBAR_SHOW);
+ document.querySelector(".icon").classList.add("icon-disabled");
+ }
+ }.bind(this)
+ );
+ },
+
+ /**
+ * Setting individual settings for debugging.
+ * @param {string} setting
+ * @param {*} value
+ */
+ updateConfigSetting: function (setting, value) {
+ if (setting in this.config && value != undefined) {
+ this.config[setting] = value;
+
+ switch (setting) {
+ case "GRAVITY":
+ case "MIN_JUMP_HEIGHT":
+ case "SPEED_DROP_COEFFICIENT":
+ this.tRex.config[setting] = value;
+ break;
+ case "INITIAL_JUMP_VELOCITY":
+ this.tRex.setJumpVelocity(value);
+ break;
+ case "SPEED":
+ this.setSpeed(value);
+ break;
+ }
+ }
+ },
+
+ /**
+ * Cache the appropriate image sprite from the page and get the sprite sheet
+ * definition.
+ */
+ loadImages: function () {
+ if (IS_HIDPI) {
+ Runner.imageSprite = document.getElementById("offline-resources-2x");
+ this.spriteDef = Runner.spriteDefinition.HDPI;
+ } else {
+ Runner.imageSprite = document.getElementById("offline-resources-1x");
+ this.spriteDef = Runner.spriteDefinition.LDPI;
+ }
+
+ if (Runner.imageSprite.complete) {
+ this.init();
+ } else {
+ // If the images are not yet loaded, add a listener.
+ Runner.imageSprite.addEventListener(
+ Runner.events.LOAD,
+ this.init.bind(this)
+ );
+ }
+ },
+
+ /**
+ * Load and decode base 64 encoded sounds.
+ */
+ loadSounds: function () {
+ if (!IS_IOS) {
+ this.audioContext = new AudioContext();
+
+ var resourceTemplate = document.getElementById(
+ this.config.RESOURCE_TEMPLATE_ID
+ ).content;
+
+ for (var sound in Runner.sounds) {
+ var soundSrc = resourceTemplate.getElementById(Runner.sounds[sound])
+ .src;
+ soundSrc = soundSrc.substr(soundSrc.indexOf(",") + 1);
+ var buffer = decodeBase64ToArrayBuffer(soundSrc);
+
+ // Async, so no guarantee of order in array.
+ this.audioContext.decodeAudioData(
+ buffer,
+ function (index, audioData) {
+ this.soundFx[index] = audioData;
+ }.bind(this, sound)
+ );
+ }
+ }
+ },
+
+ /**
+ * Sets the game speed. Adjust the speed accordingly if on a smaller screen.
+ * @param {number} opt_speed
+ */
+ setSpeed: function (opt_speed) {
+ var speed = opt_speed || this.currentSpeed;
+
+ // Reduce the speed on smaller mobile screens.
+ if (this.dimensions.WIDTH < DEFAULT_WIDTH) {
+ var mobileSpeed =
+ speed *
+ this.dimensions.WIDTH /
+ DEFAULT_WIDTH *
+ this.config.MOBILE_SPEED_COEFFICIENT;
+ this.currentSpeed = mobileSpeed > speed ? speed : mobileSpeed;
+ } else if (opt_speed) {
+ this.currentSpeed = opt_speed;
+ }
+ },
+
+ /**
+ * Game initialiser.
+ */
+ init: function () {
+ // Hide the static icon.
+ document.querySelector("." + Runner.classes.ICON).style.visibility =
+ "hidden";
+
+ this.adjustDimensions();
+ this.setSpeed();
+
+ this.containerEl = document.createElement("div");
+ this.containerEl.className = Runner.classes.CONTAINER;
+
+ // Player canvas container.
+ this.canvas = createCanvas(
+ this.containerEl,
+ this.dimensions.WIDTH,
+ this.dimensions.HEIGHT,
+ Runner.classes.PLAYER
+ );
+
+ this.canvasCtx = this.canvas.getContext("2d");
+ this.canvasCtx.fillStyle = "#f7f7f7";
+ this.canvasCtx.fill();
+ Runner.updateCanvasScaling(this.canvas);
+
+ // Horizon contains clouds, obstacles and the ground.
+ this.horizon = new Horizon(
+ this.canvas,
+ this.spriteDef,
+ this.dimensions,
+ this.config.GAP_COEFFICIENT
+ );
+
+ // Distance meter
+ this.distanceMeter = new DistanceMeter(
+ this.canvas,
+ this.spriteDef.TEXT_SPRITE,
+ this.dimensions.WIDTH
+ );
+
+ // Draw t-rex
+ this.tRex = new Trex(this.canvas, this.spriteDef.TREX);
+
+ this.outerContainerEl.appendChild(this.containerEl);
+
+ if (IS_MOBILE) {
+ this.createTouchController();
+ }
+
+ this.startListening();
+ this.update();
+
+ window.addEventListener(
+ Runner.events.RESIZE,
+ this.debounceResize.bind(this)
+ );
+ },
+
+ /**
+ * Create the touch controller. A div that covers whole screen.
+ */
+ createTouchController: function () {
+ this.touchController = document.createElement("div");
+ this.touchController.className = Runner.classes.TOUCH_CONTROLLER;
+ this.outerContainerEl.appendChild(this.touchController);
+ },
+
+ /**
+ * Debounce the resize event.
+ */
+ debounceResize: function () {
+ if (!this.resizeTimerId_) {
+ this.resizeTimerId_ = setInterval(
+ this.adjustDimensions.bind(this),
+ 250
+ );
+ }
+ },
+
+ /**
+ * Adjust game space dimensions on resize.
+ */
+ adjustDimensions: function () {
+ clearInterval(this.resizeTimerId_);
+ this.resizeTimerId_ = null;
+
+ var boxStyles = window.getComputedStyle(this.outerContainerEl);
+ var padding = Number(
+ boxStyles.paddingLeft.substr(0, boxStyles.paddingLeft.length - 2)
+ );
+
+ this.dimensions.WIDTH = this.outerContainerEl.offsetWidth - padding * 2;
+
+ // Redraw the elements back onto the canvas.
+ if (this.canvas) {
+ this.canvas.width = this.dimensions.WIDTH;
+ this.canvas.height = this.dimensions.HEIGHT;
+
+ Runner.updateCanvasScaling(this.canvas);
+
+ this.distanceMeter.calcXPos(this.dimensions.WIDTH);
+ this.clearCanvas();
+ this.horizon.update(0, 0, true);
+ this.tRex.update(0);
+
+ // Outer container and distance meter.
+ if (this.playing || this.crashed || this.paused) {
+ this.containerEl.style.width = this.dimensions.WIDTH + "px";
+ this.containerEl.style.height = this.dimensions.HEIGHT + "px";
+ this.distanceMeter.update(0, Math.ceil(this.distanceRan));
+ this.stop();
+ } else {
+ this.tRex.draw(0, 0);
+ }
+
+ // Game over panel.
+ if (this.crashed && this.gameOverPanel) {
+ this.gameOverPanel.updateDimensions(this.dimensions.WIDTH);
+ this.gameOverPanel.draw();
+ }
+ }
+ },
+
+ /**
+ * Play the game intro.
+ * Canvas container width expands out to the full width.
+ */
+ playIntro: function () {
+ if (!this.activated && !this.crashed) {
+ this.playingIntro = true;
+ this.tRex.playingIntro = true;
+
+ // CSS animation definition.
+ var keyframes =
+ "@-webkit-keyframes intro { " +
+ "from { width:" +
+ Trex.config.WIDTH +
+ "px }" +
+ "to { width: " +
+ this.dimensions.WIDTH +
+ "px }" +
+ "}";
+ document.styleSheets[0].insertRule(keyframes, 0);
+
+ this.containerEl.addEventListener(
+ Runner.events.ANIM_END,
+ this.startGame.bind(this)
+ );
+
+ this.containerEl.style.webkitAnimation = "intro .4s ease-out 1 both";
+ this.containerEl.style.width = this.dimensions.WIDTH + "px";
+
+ // if (this.touchController) {
+ // this.outerContainerEl.appendChild(this.touchController);
+ // }
+ this.playing = true;
+ this.activated = true;
+ } else if (this.crashed) {
+ this.restart();
+ }
+ },
+
+ /**
+ * Update the game status to started.
+ */
+ startGame: function () {
+ this.runningTime = 0;
+ this.playingIntro = false;
+ this.tRex.playingIntro = false;
+ this.containerEl.style.webkitAnimation = "";
+ this.playCount++;
+
+ // Handle tabbing off the page. Pause the current game.
+ document.addEventListener(
+ Runner.events.VISIBILITY,
+ this.onVisibilityChange.bind(this)
+ );
+
+ window.addEventListener(
+ Runner.events.BLUR,
+ this.onVisibilityChange.bind(this)
+ );
+
+ window.addEventListener(
+ Runner.events.FOCUS,
+ this.onVisibilityChange.bind(this)
+ );
+ },
+
+ clearCanvas: function () {
+ this.canvasCtx.clearRect(
+ 0,
+ 0,
+ this.dimensions.WIDTH,
+ this.dimensions.HEIGHT
+ );
+ },
+
+ /**
+ * Update the game frame and schedules the next one.
+ */
+ update: function () {
+ this.updatePending = false;
+
+ var now = getTimeStamp();
+ var deltaTime = now - (this.time || now);
+ this.time = now;
+
+ if (this.playing) {
+ this.clearCanvas();
+
+ if (this.tRex.jumping) {
+ this.tRex.updateJump(deltaTime);
+ }
+
+ this.runningTime += deltaTime;
+ var hasObstacles = this.runningTime > this.config.CLEAR_TIME;
+
+ // First jump triggers the intro.
+ if (this.tRex.jumpCount == 1 && !this.playingIntro) {
+ this.playIntro();
+ }
+
+ // The horizon doesn't move until the intro is over.
+ if (this.playingIntro) {
+ this.horizon.update(0, this.currentSpeed, hasObstacles);
+ } else {
+ deltaTime = !this.activated ? 0 : deltaTime;
+ this.horizon.update(
+ deltaTime,
+ this.currentSpeed,
+ hasObstacles,
+ this.inverted
+ );
+ }
+
+ // Check for collisions.
+ var collision =
+ hasObstacles &&
+ checkForCollision(this.horizon.obstacles[0], this.tRex);
+
+ if (!collision) {
+ this.distanceRan += this.currentSpeed * deltaTime / this.msPerFrame;
+
+ if (this.currentSpeed < this.config.MAX_SPEED) {
+ this.currentSpeed += this.config.ACCELERATION;
+ }
+ } else {
+ this.gameOver();
+ }
+
+ var playAchievementSound = this.distanceMeter.update(
+ deltaTime,
+ Math.ceil(this.distanceRan)
+ );
+
+ if (playAchievementSound) {
+ this.playSound(this.soundFx.SCORE);
+ }
+
+ // Night mode.
+ if (this.invertTimer > this.config.INVERT_FADE_DURATION) {
+ this.invertTimer = 0;
+ this.invertTrigger = false;
+ this.invert();
+ } else if (this.invertTimer) {
+ this.invertTimer += deltaTime;
+ } else {
+ var actualDistance = this.distanceMeter.getActualDistance(
+ Math.ceil(this.distanceRan)
+ );
+
+ if (actualDistance > 0) {
+ this.invertTrigger = !(
+ actualDistance % this.config.INVERT_DISTANCE
+ );
+
+ if (this.invertTrigger && this.invertTimer === 0) {
+ this.invertTimer += deltaTime;
+ this.invert();
+ }
+ }
+ }
+ }
+
+ if (
+ this.playing ||
+ (!this.activated &&
+ this.tRex.blinkCount < Runner.config.MAX_BLINK_COUNT)
+ ) {
+ this.tRex.update(deltaTime);
+ this.scheduleNextUpdate();
+ }
+ },
+
+ /**
+ * Event handler.
+ */
+ handleEvent: function (e) {
+ return function (evtType, events) {
+ switch (evtType) {
+ case events.KEYDOWN:
+ case events.TOUCHSTART:
+ case events.MOUSEDOWN:
+ this.onKeyDown(e);
+ break;
+ case events.KEYUP:
+ case events.TOUCHEND:
+ case events.MOUSEUP:
+ this.onKeyUp(e);
+ break;
+ }
+ }.bind(this)(e.type, Runner.events);
+ },
+
+ /**
+ * Bind relevant key / mouse / touch listeners.
+ */
+ startListening: function () {
+ // Keys.
+ document.addEventListener(Runner.events.KEYDOWN, this);
+ document.addEventListener(Runner.events.KEYUP, this);
+
+ if (IS_MOBILE) {
+ // Mobile only touch devices.
+ this.touchController.addEventListener(Runner.events.TOUCHSTART, this);
+ this.touchController.addEventListener(Runner.events.TOUCHEND, this);
+ this.containerEl.addEventListener(Runner.events.TOUCHSTART, this);
+ } else {
+ // Mouse.
+ document.addEventListener(Runner.events.MOUSEDOWN, this);
+ document.addEventListener(Runner.events.MOUSEUP, this);
+ }
+ },
+
+ /**
+ * Remove all listeners.
+ */
+ stopListening: function () {
+ document.removeEventListener(Runner.events.KEYDOWN, this);
+ document.removeEventListener(Runner.events.KEYUP, this);
+
+ if (IS_MOBILE) {
+ this.touchController.removeEventListener(
+ Runner.events.TOUCHSTART,
+ this
+ );
+ this.touchController.removeEventListener(Runner.events.TOUCHEND, this);
+ this.containerEl.removeEventListener(Runner.events.TOUCHSTART, this);
+ } else {
+ document.removeEventListener(Runner.events.MOUSEDOWN, this);
+ document.removeEventListener(Runner.events.MOUSEUP, this);
+ }
+ },
+
+ /**
+ * Process keydown.
+ * @param {Event} e
+ */
+ onKeyDown: function (e) {
+ // Prevent native page scrolling whilst tapping on mobile.
+ if (IS_MOBILE && this.playing) {
+ e.preventDefault();
+ }
+
+ if (e.target != this.detailsButton) {
+ if (
+ !this.crashed &&
+ (Runner.keycodes.JUMP[e.keyCode] ||
+ e.type == Runner.events.TOUCHSTART)
+ ) {
+ if (!this.playing) {
+ this.loadSounds();
+ this.playing = true;
+ this.update();
+ if (window.errorPageController) {
+ errorPageController.trackEasterEgg();
+ }
+ }
+ // Play sound effect and jump on starting the game for the first time.
+ if (!this.tRex.jumping && !this.tRex.ducking) {
+ this.playSound(this.soundFx.BUTTON_PRESS);
+ this.tRex.startJump(this.currentSpeed);
+ }
+ }
+
+ if (
+ this.crashed &&
+ e.type == Runner.events.TOUCHSTART &&
+ e.currentTarget == this.containerEl
+ ) {
+ this.restart();
+ }
+ }
+
+ if (this.playing && !this.crashed && Runner.keycodes.DUCK[e.keyCode]) {
+ e.preventDefault();
+ if (this.tRex.jumping) {
+ // Speed drop, activated only when jump key is not pressed.
+ this.tRex.setSpeedDrop();
+ } else if (!this.tRex.jumping && !this.tRex.ducking) {
+ // Duck.
+ this.tRex.setDuck(true);
+ }
+ }
+ },
+
+ /**
+ * Process key up.
+ * @param {Event} e
+ */
+ onKeyUp: function (e) {
+ var keyCode = String(e.keyCode);
+ var isjumpKey =
+ Runner.keycodes.JUMP[keyCode] ||
+ e.type == Runner.events.TOUCHEND ||
+ e.type == Runner.events.MOUSEDOWN;
+
+ if (this.isRunning() && isjumpKey) {
+ this.tRex.endJump();
+ } else if (Runner.keycodes.DUCK[keyCode]) {
+ this.tRex.speedDrop = false;
+ this.tRex.setDuck(false);
+ } else if (this.crashed) {
+ // Check that enough time has elapsed before allowing jump key to restart.
+ var deltaTime = getTimeStamp() - this.time;
+
+ if (
+ Runner.keycodes.RESTART[keyCode] ||
+ this.isLeftClickOnCanvas(e) ||
+ (deltaTime >= this.config.GAMEOVER_CLEAR_TIME &&
+ Runner.keycodes.JUMP[keyCode])
+ ) {
+ this.restart();
+ }
+ } else if (this.paused && isjumpKey) {
+ // Reset the jump state
+ this.tRex.reset();
+ this.play();
+ }
+ },
+
+ /**
+ * Returns whether the event was a left click on canvas.
+ * On Windows right click is registered as a click.
+ * @param {Event} e
+ * @return {boolean}
+ */
+ isLeftClickOnCanvas: function (e) {
+ return (
+ e.button != null &&
+ e.button < 2 &&
+ e.type == Runner.events.MOUSEUP &&
+ e.target == this.canvas
+ );
+ },
+
+ /**
+ * RequestAnimationFrame wrapper.
+ */
+ scheduleNextUpdate: function () {
+ if (!this.updatePending) {
+ this.updatePending = true;
+ this.raqId = requestAnimationFrame(this.update.bind(this));
+ }
+ },
+
+ /**
+ * Whether the game is running.
+ * @return {boolean}
+ */
+ isRunning: function () {
+ return !!this.raqId;
+ },
+
+ /**
+ * Game over state.
+ */
+ gameOver: function () {
+ this.playSound(this.soundFx.HIT);
+ vibrate(200);
+
+ this.stop();
+ this.crashed = true;
+ this.distanceMeter.acheivement = false;
+
+ this.tRex.update(100, Trex.status.CRASHED);
+
+ // Game over panel.
+ if (!this.gameOverPanel) {
+ this.gameOverPanel = new GameOverPanel(
+ this.canvas,
+ this.spriteDef.TEXT_SPRITE,
+ this.spriteDef.RESTART,
+ this.dimensions
+ );
+ } else {
+ this.gameOverPanel.draw();
+ }
+
+ // Update the high score.
+ if (this.distanceRan > this.highestScore) {
+ this.highestScore = Math.ceil(this.distanceRan);
+ this.distanceMeter.setHighScore(this.highestScore);
+ }
+
+ // Reset the time clock.
+ this.time = getTimeStamp();
+ },
+
+ stop: function () {
+ this.playing = false;
+ this.paused = true;
+ cancelAnimationFrame(this.raqId);
+ this.raqId = 0;
+ },
+
+ play: function () {
+ if (!this.crashed) {
+ this.playing = true;
+ this.paused = false;
+ this.tRex.update(0, Trex.status.RUNNING);
+ this.time = getTimeStamp();
+ this.update();
+ }
+ },
+
+ restart: function () {
+ if (!this.raqId) {
+ this.playCount++;
+ this.runningTime = 0;
+ this.playing = true;
+ this.crashed = false;
+ this.distanceRan = 0;
+ this.setSpeed(this.config.SPEED);
+ this.time = getTimeStamp();
+ this.containerEl.classList.remove(Runner.classes.CRASHED);
+ this.clearCanvas();
+ this.distanceMeter.reset(this.highestScore);
+ this.horizon.reset();
+ this.tRex.reset();
+ this.playSound(this.soundFx.BUTTON_PRESS);
+ this.invert(true);
+ this.update();
+ }
+ },
+
+ /**
+ * Pause the game if the tab is not in focus.
+ */
+ onVisibilityChange: function (e) {
+ if (
+ document.hidden ||
+ document.webkitHidden ||
+ e.type == "blur" ||
+ document.visibilityState != "visible"
+ ) {
+ this.stop();
+ } else if (!this.crashed) {
+ this.tRex.reset();
+ this.play();
+ }
+ },
+
+ /**
+ * Play a sound.
+ * @param {SoundBuffer} soundBuffer
+ */
+ playSound: function (soundBuffer) {
+ if (soundBuffer) {
+ var sourceNode = this.audioContext.createBufferSource();
+ sourceNode.buffer = soundBuffer;
+ sourceNode.connect(this.audioContext.destination);
+ sourceNode.start(0);
+ }
+ },
+
+ /**
+ * Inverts the current page / canvas colors.
+ * @param {boolean} Whether to reset colors.
+ */
+ invert: function (reset) {
+ if (reset) {
+ document.body.classList.toggle(Runner.classes.INVERTED, false);
+ this.invertTimer = 0;
+ this.inverted = false;
+ } else {
+ this.inverted = document.body.classList.toggle(
+ Runner.classes.INVERTED,
+ this.invertTrigger
+ );
+ }
+ }
+ };
+
+ /**
+ * Updates the canvas size taking into
+ * account the backing store pixel ratio and
+ * the device pixel ratio.
+ *
+ * See article by Paul Lewis:
+ * http://www.html5rocks.com/en/tutorials/canvas/hidpi/
+ *
+ * @param {HTMLCanvasElement} canvas
+ * @param {number} opt_width
+ * @param {number} opt_height
+ * @return {boolean} Whether the canvas was scaled.
+ */
+ Runner.updateCanvasScaling = function (canvas, opt_width, opt_height) {
+ var context = canvas.getContext("2d");
+
+ // Query the various pixel ratios
+ var devicePixelRatio = Math.floor(window.devicePixelRatio) || 1;
+ var backingStoreRatio =
+ Math.floor(context.webkitBackingStorePixelRatio) || 1;
+ var ratio = devicePixelRatio / backingStoreRatio;
+
+ // Upscale the canvas if the two ratios don't match
+ if (devicePixelRatio !== backingStoreRatio) {
+ var oldWidth = opt_width || canvas.width;
+ var oldHeight = opt_height || canvas.height;
+
+ canvas.width = oldWidth * ratio;
+ canvas.height = oldHeight * ratio;
+
+ canvas.style.width = oldWidth + "px";
+ canvas.style.height = oldHeight + "px";
+
+ // Scale the context to counter the fact that we've manually scaled
+ // our canvas element.
+ context.scale(ratio, ratio);
+ return true;
+ } else if (devicePixelRatio == 1) {
+ // Reset the canvas width / height. Fixes scaling bug when the page is
+ // zoomed and the devicePixelRatio changes accordingly.
+ canvas.style.width = canvas.width + "px";
+ canvas.style.height = canvas.height + "px";
+ }
+ return false;
+ };
+
+ /**
+ * Get random number.
+ * @param {number} min
+ * @param {number} max
+ * @param {number}
+ */
+ function getRandomNum(min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+ }
+
+ /**
+ * Vibrate on mobile devices.
+ * @param {number} duration Duration of the vibration in milliseconds.
+ */
+ function vibrate(duration) {
+ if (IS_MOBILE && window.navigator.vibrate) {
+ window.navigator.vibrate(duration);
+ }
+ }
+
+ /**
+ * Create canvas element.
+ * @param {HTMLElement} container Element to append canvas to.
+ * @param {number} width
+ * @param {number} height
+ * @param {string} opt_classname
+ * @return {HTMLCanvasElement}
+ */
+ function createCanvas(container, width, height, opt_classname) {
+ var canvas = document.createElement("canvas");
+ canvas.className = opt_classname
+ ? Runner.classes.CANVAS + " " + opt_classname
+ : Runner.classes.CANVAS;
+ canvas.width = width;
+ canvas.height = height;
+ container.appendChild(canvas);
+
+ return canvas;
+ }
+
+ /**
+ * Decodes the base 64 audio to ArrayBuffer used by Web Audio.
+ * @param {string} base64String
+ */
+ function decodeBase64ToArrayBuffer(base64String) {
+ var len = base64String.length / 4 * 3;
+ var str = atob(base64String);
+ var arrayBuffer = new ArrayBuffer(len);
+ var bytes = new Uint8Array(arrayBuffer);
+
+ for (var i = 0; i < len; i++) {
+ bytes[i] = str.charCodeAt(i);
+ }
+ return bytes.buffer;
+ }
+
+ /**
+ * Return the current timestamp.
+ * @return {number}
+ */
+ function getTimeStamp() {
+ return IS_IOS ? new Date().getTime() : performance.now();
+ }
+
+ //******************************************************************************
+
+ /**
+ * Game over panel.
+ * @param {!HTMLCanvasElement} canvas
+ * @param {Object} textImgPos
+ * @param {Object} restartImgPos
+ * @param {!Object} dimensions Canvas dimensions.
+ * @constructor
+ */
+ function GameOverPanel(canvas, textImgPos, restartImgPos, dimensions) {
+ this.canvas = canvas;
+ this.canvasCtx = canvas.getContext("2d");
+ this.canvasDimensions = dimensions;
+ this.textImgPos = textImgPos;
+ this.restartImgPos = restartImgPos;
+ this.draw();
+ }
+
+ console.log("Game Over Panel Configuration")
+ /**
+ * Dimensions used in the panel.
+ * @enum {number}
+ */
+ GameOverPanel.dimensions = {
+ TEXT_X: 0,
+ TEXT_Y: 13,
+ TEXT_WIDTH: 191,
+ TEXT_HEIGHT: 11,
+ RESTART_WIDTH: 36,
+ RESTART_HEIGHT: 32
+ };
+
+ GameOverPanel.prototype = {
+ /**
+ * Update the panel dimensions.
+ * @param {number} width New canvas width.
+ * @param {number} opt_height Optional new canvas height.
+ */
+ updateDimensions: function (width, opt_height) {
+ this.canvasDimensions.WIDTH = width;
+ if (opt_height) {
+ this.canvasDimensions.HEIGHT = opt_height;
+ }
+ },
+
+ /**
+ * Draw the panel.
+ */
+ draw: function () {
+ var dimensions = GameOverPanel.dimensions;
+
+ var centerX = this.canvasDimensions.WIDTH / 2;
+
+ // Game over text.
+ var textSourceX = dimensions.TEXT_X;
+ var textSourceY = dimensions.TEXT_Y;
+ var textSourceWidth = dimensions.TEXT_WIDTH;
+ var textSourceHeight = dimensions.TEXT_HEIGHT;
+
+ var textTargetX = Math.round(centerX - dimensions.TEXT_WIDTH / 2);
+ var textTargetY = Math.round((this.canvasDimensions.HEIGHT - 25) / 3);
+ var textTargetWidth = dimensions.TEXT_WIDTH;
+ var textTargetHeight = dimensions.TEXT_HEIGHT;
+
+ var restartSourceWidth = dimensions.RESTART_WIDTH;
+ var restartSourceHeight = dimensions.RESTART_HEIGHT;
+ var restartTargetX = centerX - dimensions.RESTART_WIDTH / 2;
+ var restartTargetY = this.canvasDimensions.HEIGHT / 2;
+
+ if (IS_HIDPI) {
+ textSourceY *= 2;
+ textSourceX *= 2;
+ textSourceWidth *= 2;
+ textSourceHeight *= 2;
+ restartSourceWidth *= 2;
+ restartSourceHeight *= 2;
+ }
+
+ textSourceX += this.textImgPos.x;
+ textSourceY += this.textImgPos.y;
+
+ // Game over text from sprite.
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ textSourceX,
+ textSourceY,
+ textSourceWidth,
+ textSourceHeight,
+ textTargetX,
+ textTargetY,
+ textTargetWidth,
+ textTargetHeight
+ );
+
+ // Restart button.
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ this.restartImgPos.x,
+ this.restartImgPos.y,
+ restartSourceWidth,
+ restartSourceHeight,
+ restartTargetX,
+ restartTargetY,
+ dimensions.RESTART_WIDTH,
+ dimensions.RESTART_HEIGHT
+ );
+ }
+ };
+
+ //******************************************************************************
+
+ /**
+ * Check for a collision.
+ * @param {!Obstacle} obstacle
+ * @param {!Trex} tRex T-rex object.
+ * @param {HTMLCanvasContext} opt_canvasCtx Optional canvas context for drawing
+ * collision boxes.
+ * @return {Array<CollisionBox>}
+ */
+ function checkForCollision(obstacle, tRex, opt_canvasCtx) {
+ var obstacleBoxXPos = Runner.defaultDimensions.WIDTH + obstacle.xPos;
+
+ // Adjustments are made to the bounding box as there is a 1 pixel white
+ // border around the t-rex and obstacles.
+ var tRexBox = new CollisionBox(
+ tRex.xPos + 1,
+ tRex.yPos + 1,
+ tRex.config.WIDTH - 2,
+ tRex.config.HEIGHT - 2
+ );
+
+ var obstacleBox = new CollisionBox(
+ obstacle.xPos + 1,
+ obstacle.yPos + 1,
+ obstacle.typeConfig.width * obstacle.size - 2,
+ obstacle.typeConfig.height - 2
+ );
+
+ // Debug outer box
+ if (opt_canvasCtx) {
+ drawCollisionBoxes(opt_canvasCtx, tRexBox, obstacleBox);
+ }
+
+ // Simple outer bounds check.
+ if (boxCompare(tRexBox, obstacleBox)) {
+ var collisionBoxes = obstacle.collisionBoxes;
+ var tRexCollisionBoxes = tRex.ducking
+ ? Trex.collisionBoxes.DUCKING
+ : Trex.collisionBoxes.RUNNING;
+
+ // Detailed axis aligned box check.
+ for (var t = 0; t < tRexCollisionBoxes.length; t++) {
+ for (var i = 0; i < collisionBoxes.length; i++) {
+ // Adjust the box to actual positions.
+ var adjTrexBox = createAdjustedCollisionBox(
+ tRexCollisionBoxes[t],
+ tRexBox
+ );
+ var adjObstacleBox = createAdjustedCollisionBox(
+ collisionBoxes[i],
+ obstacleBox
+ );
+ var crashed = boxCompare(adjTrexBox, adjObstacleBox);
+
+ // Draw boxes for debug.
+ if (opt_canvasCtx) {
+ drawCollisionBoxes(opt_canvasCtx, adjTrexBox, adjObstacleBox);
+ }
+
+ if (crashed) {
+ return [adjTrexBox, adjObstacleBox];
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Adjust the collision box.
+ * @param {!CollisionBox} box The original box.
+ * @param {!CollisionBox} adjustment Adjustment box.
+ * @return {CollisionBox} The adjusted collision box object.
+ */
+ function createAdjustedCollisionBox(box, adjustment) {
+ return new CollisionBox(
+ box.x + adjustment.x,
+ box.y + adjustment.y,
+ box.width,
+ box.height
+ );
+ }
+
+ /**
+ * Draw the collision boxes for debug.
+ */
+ function drawCollisionBoxes(canvasCtx, tRexBox, obstacleBox) {
+ canvasCtx.save();
+ canvasCtx.strokeStyle = "#f00";
+ canvasCtx.strokeRect(tRexBox.x, tRexBox.y, tRexBox.width, tRexBox.height);
+
+ canvasCtx.strokeStyle = "#0f0";
+ canvasCtx.strokeRect(
+ obstacleBox.x,
+ obstacleBox.y,
+ obstacleBox.width,
+ obstacleBox.height
+ );
+ canvasCtx.restore();
+ }
+
+ /**
+ * Compare two collision boxes for a collision.
+ * @param {CollisionBox} tRexBox
+ * @param {CollisionBox} obstacleBox
+ * @return {boolean} Whether the boxes intersected.
+ */
+ function boxCompare(tRexBox, obstacleBox) {
+ var crashed = false;
+ var tRexBoxX = tRexBox.x;
+ var tRexBoxY = tRexBox.y;
+
+ var obstacleBoxX = obstacleBox.x;
+ var obstacleBoxY = obstacleBox.y;
+
+ // Axis-Aligned Bounding Box method.
+ if (
+ tRexBox.x < obstacleBoxX + obstacleBox.width &&
+ tRexBox.x + tRexBox.width > obstacleBoxX &&
+ tRexBox.y < obstacleBox.y + obstacleBox.height &&
+ tRexBox.height + tRexBox.y > obstacleBox.y
+ ) {
+ crashed = true;
+ }
+
+ return crashed;
+ }
+
+ //******************************************************************************
+
+ /**
+ * Collision box object.
+ * @param {number} x X position.
+ * @param {number} y Y Position.
+ * @param {number} w Width.
+ * @param {number} h Height.
+ */
+ function CollisionBox(x, y, w, h) {
+ this.x = x;
+ this.y = y;
+ this.width = w;
+ this.height = h;
+ }
+
+ //******************************************************************************
+
+ /**
+ * Obstacle.
+ * @param {HTMLCanvasCtx} canvasCtx
+ * @param {Obstacle.type} type
+ * @param {Object} spritePos Obstacle position in sprite.
+ * @param {Object} dimensions
+ * @param {number} gapCoefficient Mutipler in determining the gap.
+ * @param {number} speed
+ * @param {number} opt_xOffset
+ */
+ function Obstacle(
+ canvasCtx,
+ type,
+ spriteImgPos,
+ dimensions,
+ gapCoefficient,
+ speed,
+ opt_xOffset
+ ) {
+ this.canvasCtx = canvasCtx;
+ this.spritePos = spriteImgPos;
+ this.typeConfig = type;
+ this.gapCoefficient = gapCoefficient;
+ this.size = getRandomNum(1, Obstacle.MAX_OBSTACLE_LENGTH);
+ this.dimensions = dimensions;
+ this.remove = false;
+ this.xPos = dimensions.WIDTH + (opt_xOffset || 0);
+ this.yPos = 0;
+ this.width = 0;
+ this.collisionBoxes = [];
+ this.gap = 0;
+ this.speedOffset = 0;
+
+ // For animated obstacles.
+ this.currentFrame = 0;
+ this.timer = 0;
+
+ this.init(speed);
+ }
+
+ /**
+ * Coefficient for calculating the maximum gap.
+ * @const
+ */
+ Obstacle.MAX_GAP_COEFFICIENT = 1.5;
+
+ /**
+ * Maximum obstacle grouping count.
+ * @const
+ */
+ (Obstacle.MAX_OBSTACLE_LENGTH = 3),
+ (Obstacle.prototype = {
+ /**
+ * Initialise the DOM for the obstacle.
+ * @param {number} speed
+ */
+ init: function (speed) {
+ this.cloneCollisionBoxes();
+
+ // Only allow sizing if we're at the right speed.
+ if (this.size > 1 && this.typeConfig.multipleSpeed > speed) {
+ this.size = 1;
+ }
+
+ this.width = this.typeConfig.width * this.size;
+
+ // Check if obstacle can be positioned at various heights.
+ if (Array.isArray(this.typeConfig.yPos)) {
+ var yPosConfig = IS_MOBILE
+ ? this.typeConfig.yPosMobile
+ : this.typeConfig.yPos;
+ this.yPos = yPosConfig[getRandomNum(0, yPosConfig.length - 1)];
+ } else {
+ this.yPos = this.typeConfig.yPos;
+ }
+
+ this.draw();
+
+ // Make collision box adjustments,
+ // Central box is adjusted to the size as one box.
+ // ____ ______ ________
+ // _| |-| _| |-| _| |-|
+ // | |<->| | | |<--->| | | |<----->| |
+ // | | 1 | | | | 2 | | | | 3 | |
+ // |_|___|_| |_|_____|_| |_|_______|_|
+ //
+ if (this.size > 1) {
+ this.collisionBoxes[1].width =
+ this.width -
+ this.collisionBoxes[0].width -
+ this.collisionBoxes[2].width;
+ this.collisionBoxes[2].x = this.width - this.collisionBoxes[2].width;
+ }
+
+ // For obstacles that go at a different speed from the horizon.
+ if (this.typeConfig.speedOffset) {
+ this.speedOffset =
+ Math.random() > 0.5
+ ? this.typeConfig.speedOffset
+ : -this.typeConfig.speedOffset;
+ }
+
+ this.gap = this.getGap(this.gapCoefficient, speed);
+ },
+
+ /**
+ * Draw and crop based on size.
+ */
+ draw: function () {
+ var sourceWidth = this.typeConfig.width;
+ var sourceHeight = this.typeConfig.height;
+
+ if (IS_HIDPI) {
+ sourceWidth = sourceWidth * 2;
+ sourceHeight = sourceHeight * 2;
+ }
+
+ // X position in sprite.
+ var sourceX =
+ sourceWidth * this.size * (0.5 * (this.size - 1)) + this.spritePos.x;
+
+ // Animation frames.
+ if (this.currentFrame > 0) {
+ sourceX += sourceWidth * this.currentFrame;
+ }
+
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ sourceX,
+ this.spritePos.y,
+ sourceWidth * this.size,
+ sourceHeight,
+ this.xPos,
+ this.yPos,
+ this.typeConfig.width * this.size,
+ this.typeConfig.height
+ );
+ },
+
+ /**
+ * Obstacle frame update.
+ * @param {number} deltaTime
+ * @param {number} speed
+ */
+ update: function (deltaTime, speed) {
+ if (!this.remove) {
+ if (this.typeConfig.speedOffset) {
+ speed += this.speedOffset;
+ }
+ this.xPos -= Math.floor(speed * FPS / 1000 * deltaTime);
+
+ // Update frame
+ if (this.typeConfig.numFrames) {
+ this.timer += deltaTime;
+ if (this.timer >= this.typeConfig.frameRate) {
+ this.currentFrame =
+ this.currentFrame == this.typeConfig.numFrames - 1
+ ? 0
+ : this.currentFrame + 1;
+ this.timer = 0;
+ }
+ }
+ this.draw();
+
+ if (!this.isVisible()) {
+ this.remove = true;
+ }
+ }
+ },
+
+ /**
+ * Calculate a random gap size.
+ * - Minimum gap gets wider as speed increses
+ * @param {number} gapCoefficient
+ * @param {number} speed
+ * @return {number} The gap size.
+ */
+ getGap: function (gapCoefficient, speed) {
+ var minGap = Math.round(
+ this.width * speed + this.typeConfig.minGap * gapCoefficient
+ );
+ var maxGap = Math.round(minGap * Obstacle.MAX_GAP_COEFFICIENT);
+ return getRandomNum(minGap, maxGap);
+ },
+
+ /**
+ * Check if obstacle is visible.
+ * @return {boolean} Whether the obstacle is in the game area.
+ */
+ isVisible: function () {
+ return this.xPos + this.width > 0;
+ },
+
+ /**
+ * Make a copy of the collision boxes, since these will change based on
+ * obstacle type and size.
+ */
+ cloneCollisionBoxes: function () {
+ var collisionBoxes = this.typeConfig.collisionBoxes;
+
+ for (var i = collisionBoxes.length - 1; i >= 0; i--) {
+ this.collisionBoxes[i] = new CollisionBox(
+ collisionBoxes[i].x,
+ collisionBoxes[i].y,
+ collisionBoxes[i].width,
+ collisionBoxes[i].height
+ );
+ }
+ }
+ });
+
+ /**
+ * Obstacle definitions.
+ * minGap: minimum pixel space betweeen obstacles.
+ * multipleSpeed: Speed at which multiples are allowed.
+ * speedOffset: speed faster / slower than the horizon.
+ * minSpeed: Minimum speed which the obstacle can make an appearance.
+ */
+ Obstacle.types = [
+ {
+ type: "CACTUS_SMALL",
+ width: 17,
+ height: 35,
+ yPos: 105,
+ multipleSpeed: 4,
+ minGap: 120,
+ minSpeed: 0,
+ collisionBoxes: [
+ new CollisionBox(0, 7, 5, 27),
+ new CollisionBox(4, 0, 6, 34),
+ new CollisionBox(10, 4, 7, 14)
+ ]
+ },
+ {
+ type: "CACTUS_LARGE",
+ width: 25,
+ height: 50,
+ yPos: 90,
+ multipleSpeed: 7,
+ minGap: 120,
+ minSpeed: 0,
+ collisionBoxes: [
+ new CollisionBox(0, 12, 7, 38),
+ new CollisionBox(8, 0, 7, 49),
+ new CollisionBox(13, 10, 10, 38)
+ ]
+ },
+ {
+ type: "PTERODACTYL",
+ width: 46,
+ height: 40,
+ yPos: [100, 75, 50], // Variable height.
+ yPosMobile: [100, 50], // Variable height mobile.
+ multipleSpeed: 999,
+ minSpeed: 8.5,
+ minGap: 150,
+ collisionBoxes: [
+ new CollisionBox(15, 15, 16, 5),
+ new CollisionBox(18, 21, 24, 6),
+ new CollisionBox(2, 14, 4, 3),
+ new CollisionBox(6, 10, 4, 7),
+ new CollisionBox(10, 8, 6, 9)
+ ],
+ numFrames: 2,
+ frameRate: 1000 / 6,
+ speedOffset: 0.8
+ }
+ ];
+
+ //******************************************************************************
+ /**
+ * T-rex game character.
+ * @param {HTMLCanvas} canvas
+ * @param {Object} spritePos Positioning within image sprite.
+ * @constructor
+ */
+ function Trex(canvas, spritePos) {
+ this.canvas = canvas;
+ this.canvasCtx = canvas.getContext("2d");
+ this.spritePos = spritePos;
+ this.xPos = 0;
+ this.yPos = 0;
+ // Position when on the ground.
+ this.groundYPos = 0;
+ this.currentFrame = 0;
+ this.currentAnimFrames = [];
+ this.blinkDelay = 0;
+ this.blinkCount = 0;
+ this.animStartTime = 0;
+ this.timer = 0;
+ this.msPerFrame = 1000 / FPS;
+ this.config = Trex.config;
+ // Current status.
+ this.status = Trex.status.WAITING;
+
+ this.jumping = false;
+ this.ducking = false;
+ this.jumpVelocity = 0;
+ this.reachedMinHeight = false;
+ this.speedDrop = false;
+ this.jumpCount = 0;
+ this.jumpspotX = 0;
+
+ this.init();
+ }
+
+ console.log("T-Rex Configuration")
+ /**
+ * T-rex player config.
+ * @enum {number}
+ */
+ Trex.config = {
+ DROP_VELOCITY: -5,
+ GRAVITY: 0.6,
+ HEIGHT: 47,
+ HEIGHT_DUCK: 25,
+ INIITAL_JUMP_VELOCITY: -10,
+ INTRO_DURATION: 1500,
+ MAX_JUMP_HEIGHT: 30,
+ MIN_JUMP_HEIGHT: 30,
+ SPEED_DROP_COEFFICIENT: 3,
+ SPRITE_WIDTH: 262,
+ START_X_POS: 50,
+ WIDTH: 44,
+ WIDTH_DUCK: 59
+ };
+
+ /**
+ * Used in collision detection.
+ * @type {Array<CollisionBox>}
+ */
+ Trex.collisionBoxes = {
+ DUCKING: [new CollisionBox(1, 18, 55, 25)],
+ RUNNING: [
+ new CollisionBox(22, 0, 17, 16),
+ new CollisionBox(1, 18, 30, 9),
+ new CollisionBox(10, 35, 14, 8),
+ new CollisionBox(1, 24, 29, 5),
+ new CollisionBox(5, 30, 21, 4),
+ new CollisionBox(9, 34, 15, 4)
+ ]
+ };
+
+ /**
+ * Animation states.
+ * @enum {string}
+ */
+ Trex.status = {
+ CRASHED: "CRASHED",
+ DUCKING: "DUCKING",
+ JUMPING: "JUMPING",
+ RUNNING: "RUNNING",
+ WAITING: "WAITING"
+ };
+
+ /**
+ * Blinking coefficient.
+ * @const
+ */
+ Trex.BLINK_TIMING = 7000;
+
+ /**
+ * Animation config for different states.
+ * @enum {Object}
+ */
+ Trex.animFrames = {
+ WAITING: {
+ frames: [44, 0],
+ msPerFrame: 1000 / 3
+ },
+ RUNNING: {
+ frames: [88, 132],
+ msPerFrame: 1000 / 12
+ },
+ CRASHED: {
+ frames: [220],
+ msPerFrame: 1000 / 60
+ },
+ JUMPING: {
+ frames: [0],
+ msPerFrame: 1000 / 60
+ },
+ DUCKING: {
+ frames: [262, 321],
+ msPerFrame: 1000 / 8
+ }
+ };
+
+ Trex.prototype = {
+ /**
+ * T-rex player initaliser.
+ * Sets the t-rex to blink at random intervals.
+ */
+ init: function () {
+ this.groundYPos =
+ Runner.defaultDimensions.HEIGHT -
+ this.config.HEIGHT -
+ Runner.config.BOTTOM_PAD;
+ this.yPos = this.groundYPos;
+ this.minJumpHeight = this.groundYPos - this.config.MIN_JUMP_HEIGHT;
+
+ this.draw(0, 0);
+ this.update(0, Trex.status.WAITING);
+ },
+
+ /**
+ * Setter for the jump velocity.
+ * The approriate drop velocity is also set.
+ */
+ setJumpVelocity: function (setting) {
+ this.config.INIITAL_JUMP_VELOCITY = -setting;
+ this.config.DROP_VELOCITY = -setting / 2;
+ },
+
+ /**
+ * Set the animation status.
+ * @param {!number} deltaTime
+ * @param {Trex.status} status Optional status to switch to.
+ */
+ update: function (deltaTime, opt_status) {
+ this.timer += deltaTime;
+
+ // Update the status.
+ if (opt_status) {
+ this.status = opt_status;
+ this.currentFrame = 0;
+ this.msPerFrame = Trex.animFrames[opt_status].msPerFrame;
+ this.currentAnimFrames = Trex.animFrames[opt_status].frames;
+
+ if (opt_status == Trex.status.WAITING) {
+ this.animStartTime = getTimeStamp();
+ this.setBlinkDelay();
+ }
+ }
+
+ // Game intro animation, T-rex moves in from the left.
+ if (this.playingIntro && this.xPos < this.config.START_X_POS) {
+ this.xPos += Math.round(
+ this.config.START_X_POS / this.config.INTRO_DURATION * deltaTime
+ );
+ }
+
+ if (this.status == Trex.status.WAITING) {
+ this.blink(getTimeStamp());
+ } else {
+ this.draw(this.currentAnimFrames[this.currentFrame], 0);
+ }
+
+ // Update the frame position.
+ if (this.timer >= this.msPerFrame) {
+ this.currentFrame =
+ this.currentFrame == this.currentAnimFrames.length - 1
+ ? 0
+ : this.currentFrame + 1;
+ this.timer = 0;
+ }
+
+ // Speed drop becomes duck if the down key is still being pressed.
+ if (this.speedDrop && this.yPos == this.groundYPos) {
+ this.speedDrop = false;
+ this.setDuck(true);
+ }
+ },
+
+ /**
+ * Draw the t-rex to a particular position.
+ * @param {number} x
+ * @param {number} y
+ */
+ draw: function (x, y) {
+ var sourceX = x;
+ var sourceY = y;
+ var sourceWidth =
+ this.ducking && this.status != Trex.status.CRASHED
+ ? this.config.WIDTH_DUCK
+ : this.config.WIDTH;
+ var sourceHeight = this.config.HEIGHT;
+
+ if (IS_HIDPI) {
+ sourceX *= 2;
+ sourceY *= 2;
+ sourceWidth *= 2;
+ sourceHeight *= 2;
+ }
+
+ // Adjustments for sprite sheet position.
+ sourceX += this.spritePos.x;
+ sourceY += this.spritePos.y;
+
+ // Ducking.
+ if (this.ducking && this.status != Trex.status.CRASHED) {
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ sourceX,
+ sourceY,
+ sourceWidth,
+ sourceHeight,
+ this.xPos,
+ this.yPos,
+ this.config.WIDTH_DUCK,
+ this.config.HEIGHT
+ );
+ } else {
+ // Crashed whilst ducking. Trex is standing up so needs adjustment.
+ if (this.ducking && this.status == Trex.status.CRASHED) {
+ this.xPos++;
+ }
+ // Standing / running
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ sourceX,
+ sourceY,
+ sourceWidth,
+ sourceHeight,
+ this.xPos,
+ this.yPos,
+ this.config.WIDTH,
+ this.config.HEIGHT
+ );
+ }
+ },
+
+ /**
+ * Sets a random time for the blink to happen.
+ */
+ setBlinkDelay: function () {
+ this.blinkDelay = Math.ceil(Math.random() * Trex.BLINK_TIMING);
+ },
+
+ /**
+ * Make t-rex blink at random intervals.
+ * @param {number} time Current time in milliseconds.
+ */
+ blink: function (time) {
+ var deltaTime = time - this.animStartTime;
+
+ if (deltaTime >= this.blinkDelay) {
+ this.draw(this.currentAnimFrames[this.currentFrame], 0);
+
+ if (this.currentFrame == 1) {
+ // Set new random delay to blink.
+ this.setBlinkDelay();
+ this.animStartTime = time;
+ this.blinkCount++;
+ }
+ }
+ },
+
+ /**
+ * Initialise a jump.
+ * @param {number} speed
+ */
+ startJump: function (speed) {
+ if (!this.jumping) {
+ this.update(0, Trex.status.JUMPING);
+ // Tweak the jump velocity based on the speed.
+ this.jumpVelocity = this.config.INIITAL_JUMP_VELOCITY - speed / 10;
+ this.jumping = true;
+ this.reachedMinHeight = false;
+ this.speedDrop = false;
+ }
+ },
+
+ /**
+ * Jump is complete, falling down.
+ */
+ endJump: function () {
+ if (
+ this.reachedMinHeight &&
+ this.jumpVelocity < this.config.DROP_VELOCITY
+ ) {
+ this.jumpVelocity = this.config.DROP_VELOCITY;
+ }
+ },
+
+ /**
+ * Update frame for a jump.
+ * @param {number} deltaTime
+ * @param {number} speed
+ */
+ updateJump: function (deltaTime, speed) {
+ var msPerFrame = Trex.animFrames[this.status].msPerFrame;
+ var framesElapsed = deltaTime / msPerFrame;
+
+ // Speed drop makes Trex fall faster.
+ if (this.speedDrop) {
+ this.yPos += Math.round(
+ this.jumpVelocity * this.config.SPEED_DROP_COEFFICIENT * framesElapsed
+ );
+ } else {
+ this.yPos += Math.round(this.jumpVelocity * framesElapsed);
+ }
+
+ this.jumpVelocity += this.config.GRAVITY * framesElapsed;
+
+ // Minimum height has been reached.
+ if (this.yPos < this.minJumpHeight || this.speedDrop) {
+ this.reachedMinHeight = true;
+ }
+
+ // Reached max height
+ if (this.yPos < this.config.MAX_JUMP_HEIGHT || this.speedDrop) {
+ this.endJump();
+ }
+
+ // Back down at ground level. Jump completed.
+ if (this.yPos > this.groundYPos) {
+ this.reset();
+ this.jumpCount++;
+ }
+
+ this.update(deltaTime);
+ },
+
+ /**
+ * Set the speed drop. Immediately cancels the current jump.
+ */
+ setSpeedDrop: function () {
+ this.speedDrop = true;
+ this.jumpVelocity = 1;
+ },
+
+ /**
+ * @param {boolean} isDucking.
+ */
+ setDuck: function (isDucking) {
+ if (isDucking && this.status != Trex.status.DUCKING) {
+ this.update(0, Trex.status.DUCKING);
+ this.ducking = true;
+ } else if (this.status == Trex.status.DUCKING) {
+ this.update(0, Trex.status.RUNNING);
+ this.ducking = false;
+ }
+ },
+
+ /**
+ * Reset the t-rex to running at start of game.
+ */
+ reset: function () {
+ this.yPos = this.groundYPos;
+ this.jumpVelocity = 0;
+ this.jumping = false;
+ this.ducking = false;
+ this.update(0, Trex.status.RUNNING);
+ this.midair = false;
+ this.speedDrop = false;
+ this.jumpCount = 0;
+ }
+ };
+
+ //******************************************************************************
+
+ /**
+ * Handles displaying the distance meter.
+ * @param {!HTMLCanvasElement} canvas
+ * @param {Object} spritePos Image position in sprite.
+ * @param {number} canvasWidth
+ * @constructor
+ */
+ function DistanceMeter(canvas, spritePos, canvasWidth) {
+ this.canvas = canvas;
+ this.canvasCtx = canvas.getContext("2d");
+ this.image = Runner.imageSprite;
+ this.spritePos = spritePos;
+ this.x = 0;
+ this.y = 5;
+
+ this.currentDistance = 0;
+ this.maxScore = 0;
+ this.highScore = 0;
+ this.container = null;
+
+ this.digits = [];
+ this.acheivement = false;
+ this.defaultString = "";
+ this.flashTimer = 0;
+ this.flashIterations = 0;
+ this.invertTrigger = false;
+
+ this.config = DistanceMeter.config;
+ this.maxScoreUnits = this.config.MAX_DISTANCE_UNITS;
+ this.init(canvasWidth);
+ }
+
+ /**
+ * @enum {number}
+ */
+ DistanceMeter.dimensions = {
+ WIDTH: 10,
+ HEIGHT: 13,
+ DEST_WIDTH: 11
+ };
+
+ /**
+ * Y positioning of the digits in the sprite sheet.
+ * X position is always 0.
+ * @type {Array<number>}
+ */
+ DistanceMeter.yPos = [0, 13, 27, 40, 53, 67, 80, 93, 107, 120];
+
+ /**
+ * Distance meter config.
+ * @enum {number}
+ */
+ DistanceMeter.config = {
+ // Number of digits.
+ MAX_DISTANCE_UNITS: 5,
+
+ // Distance that causes achievement animation.
+ ACHIEVEMENT_DISTANCE: 100,
+
+ // Used for conversion from pixel distance to a scaled unit.
+ COEFFICIENT: 0.025,
+
+ // Flash duration in milliseconds.
+ FLASH_DURATION: 1000 / 4,
+
+ // Flash iterations for achievement animation.
+ FLASH_ITERATIONS: 3
+ };
+
+ DistanceMeter.prototype = {
+ /**
+ * Initialise the distance meter to '00000'.
+ * @param {number} width Canvas width in px.
+ */
+ init: function (width) {
+ var maxDistanceStr = "";
+
+ this.calcXPos(width);
+ this.maxScore = this.maxScoreUnits;
+ for (var i = 0; i < this.maxScoreUnits; i++) {
+ this.draw(i, 0);
+ this.defaultString += "0";
+ maxDistanceStr += "9";
+ }
+
+ this.maxScore = parseInt(maxDistanceStr);
+ },
+
+ /**
+ * Calculate the xPos in the canvas.
+ * @param {number} canvasWidth
+ */
+ calcXPos: function (canvasWidth) {
+ this.x =
+ canvasWidth -
+ DistanceMeter.dimensions.DEST_WIDTH * (this.maxScoreUnits + 1);
+ },
+
+ /**
+ * Draw a digit to canvas.
+ * @param {number} digitPos Position of the digit.
+ * @param {number} value Digit value 0-9.
+ * @param {boolean} opt_highScore Whether drawing the high score.
+ */
+ draw: function (digitPos, value, opt_highScore) {
+ var sourceWidth = DistanceMeter.dimensions.WIDTH;
+ var sourceHeight = DistanceMeter.dimensions.HEIGHT;
+ var sourceX = DistanceMeter.dimensions.WIDTH * value;
+ var sourceY = 0;
+
+ var targetX = digitPos * DistanceMeter.dimensions.DEST_WIDTH;
+ var targetY = this.y;
+ var targetWidth = DistanceMeter.dimensions.WIDTH;
+ var targetHeight = DistanceMeter.dimensions.HEIGHT;
+
+ // For high DPI we 2x source values.
+ if (IS_HIDPI) {
+ sourceWidth *= 2;
+ sourceHeight *= 2;
+ sourceX *= 2;
+ }
+
+ sourceX += this.spritePos.x;
+ sourceY += this.spritePos.y;
+
+ this.canvasCtx.save();
+
+ if (opt_highScore) {
+ // Left of the current score.
+ var highScoreX =
+ this.x - this.maxScoreUnits * 2 * DistanceMeter.dimensions.WIDTH;
+ this.canvasCtx.translate(highScoreX, this.y);
+ } else {
+ this.canvasCtx.translate(this.x, this.y);
+ }
+
+ this.canvasCtx.drawImage(
+ this.image,
+ sourceX,
+ sourceY,
+ sourceWidth,
+ sourceHeight,
+ targetX,
+ targetY,
+ targetWidth,
+ targetHeight
+ );
+
+ this.canvasCtx.restore();
+ },
+
+ /**
+ * Covert pixel distance to a 'real' distance.
+ * @param {number} distance Pixel distance ran.
+ * @return {number} The 'real' distance ran.
+ */
+ getActualDistance: function (distance) {
+ return distance ? Math.round(distance * this.config.COEFFICIENT) : 0;
+ },
+
+ /**
+ * Update the distance meter.
+ * @param {number} distance
+ * @param {number} deltaTime
+ * @return {boolean} Whether the acheivement sound fx should be played.
+ */
+ update: function (deltaTime, distance) {
+ var paint = true;
+ var playSound = false;
+
+ if (!this.acheivement) {
+ distance = this.getActualDistance(distance);
+ // Score has gone beyond the initial digit count.
+ if (
+ distance > this.maxScore &&
+ this.maxScoreUnits == this.config.MAX_DISTANCE_UNITS
+ ) {
+ this.maxScoreUnits++;
+ this.maxScore = parseInt(this.maxScore + "9");
+ } else {
+ this.distance = 0;
+ }
+
+ if (distance > 0) {
+ // Acheivement unlocked
+ if (distance % this.config.ACHIEVEMENT_DISTANCE == 0) {
+ // Flash score and play sound.
+ this.acheivement = true;
+ this.flashTimer = 0;
+ playSound = true;
+ }
+
+ // Create a string representation of the distance with leading 0.
+ var distanceStr = (this.defaultString + distance).substr(
+ -this.maxScoreUnits
+ );
+ this.digits = distanceStr.split("");
+ } else {
+ this.digits = this.defaultString.split("");
+ }
+ } else {
+ // Control flashing of the score on reaching acheivement.
+ if (this.flashIterations <= this.config.FLASH_ITERATIONS) {
+ this.flashTimer += deltaTime;
+
+ if (this.flashTimer < this.config.FLASH_DURATION) {
+ paint = false;
+ } else if (this.flashTimer > this.config.FLASH_DURATION * 2) {
+ this.flashTimer = 0;
+ this.flashIterations++;
+ }
+ } else {
+ this.acheivement = false;
+ this.flashIterations = 0;
+ this.flashTimer = 0;
+ }
+ }
+
+ // Draw the digits if not flashing.
+ if (paint) {
+ for (var i = this.digits.length - 1; i >= 0; i--) {
+ this.draw(i, parseInt(this.digits[i]));
+ }
+ }
+
+ this.drawHighScore();
+ return playSound;
+ },
+
+ /**
+ * Draw the high score.
+ */
+ drawHighScore: function () {
+ this.canvasCtx.save();
+ this.canvasCtx.globalAlpha = 0.8;
+ for (var i = this.highScore.length - 1; i >= 0; i--) {
+ this.draw(i, parseInt(this.highScore[i], 10), true);
+ }
+ this.canvasCtx.restore();
+ },
+
+ /**
+ * Set the highscore as a array string.
+ * Position of char in the sprite: H - 10, I - 11.
+ * @param {number} distance Distance ran in pixels.
+ */
+ setHighScore: function (distance) {
+ distance = this.getActualDistance(distance);
+ var highScoreStr = (this.defaultString + distance).substr(
+ -this.maxScoreUnits
+ );
+
+ this.highScore = ["10", "11", ""].concat(highScoreStr.split(""));
+ },
+
+ /**
+ * Reset the distance meter back to '00000'.
+ */
+ reset: function () {
+ this.update(0);
+ this.acheivement = false;
+ }
+ };
+
+ //******************************************************************************
+
+ /**
+ * Cloud background item.
+ * Similar to an obstacle object but without collision boxes.
+ * @param {HTMLCanvasElement} canvas Canvas element.
+ * @param {Object} spritePos Position of image in sprite.
+ * @param {number} containerWidth
+ */
+ function Cloud(canvas, spritePos, containerWidth) {
+ this.canvas = canvas;
+ this.canvasCtx = this.canvas.getContext("2d");
+ this.spritePos = spritePos;
+ this.containerWidth = containerWidth;
+ this.xPos = containerWidth;
+ this.yPos = 0;
+ this.remove = false;
+ this.cloudGap = getRandomNum(
+ Cloud.config.MIN_CLOUD_GAP,
+ Cloud.config.MAX_CLOUD_GAP
+ );
+
+ this.init();
+ }
+
+ console.log("Cloud Configuration")
+ /**
+ * Cloud object config.
+ * @enum {number}
+ */
+ Cloud.config = {
+ HEIGHT: 14,
+ MAX_CLOUD_GAP: 400,
+ MAX_SKY_LEVEL: 30,
+ MIN_CLOUD_GAP: 100,
+ MIN_SKY_LEVEL: 71,
+ WIDTH: 46
+ };
+
+ Cloud.prototype = {
+ /**
+ * Initialise the cloud. Sets the Cloud height.
+ */
+ init: function () {
+ this.yPos = getRandomNum(
+ Cloud.config.MAX_SKY_LEVEL,
+ Cloud.config.MIN_SKY_LEVEL
+ );
+ this.draw();
+ },
+
+ /**
+ * Draw the cloud.
+ */
+ draw: function () {
+ this.canvasCtx.save();
+ var sourceWidth = Cloud.config.WIDTH;
+ var sourceHeight = Cloud.config.HEIGHT;
+
+ if (IS_HIDPI) {
+ sourceWidth = sourceWidth * 2;
+ sourceHeight = sourceHeight * 2;
+ }
+
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ this.spritePos.x,
+ this.spritePos.y,
+ sourceWidth,
+ sourceHeight,
+ this.xPos,
+ this.yPos,
+ Cloud.config.WIDTH,
+ Cloud.config.HEIGHT
+ );
+
+ this.canvasCtx.restore();
+ },
+
+ /**
+ * Update the cloud position.
+ * @param {number} speed
+ */
+ update: function (speed) {
+ if (!this.remove) {
+ this.xPos -= Math.ceil(speed);
+ this.draw();
+
+ // Mark as removeable if no longer in the canvas.
+ if (!this.isVisible()) {
+ this.remove = true;
+ }
+ }
+ },
+
+ /**
+ * Check if the cloud is visible on the stage.
+ * @return {boolean}
+ */
+ isVisible: function () {
+ return this.xPos + Cloud.config.WIDTH > 0;
+ }
+ };
+
+ //******************************************************************************
+
+ /**
+ * Nightmode shows a moon and stars on the horizon.
+ */
+ function NightMode(canvas, spritePos, containerWidth) {
+ this.spritePos = spritePos;
+ this.canvas = canvas;
+ this.canvasCtx = canvas.getContext("2d");
+ this.xPos = containerWidth - 50;
+ this.yPos = 30;
+ this.currentPhase = 0;
+ this.opacity = 0;
+ this.containerWidth = containerWidth;
+ this.stars = [];
+ this.drawStars = false;
+ this.placeStars();
+ }
+
+ console.log("Nightmode Configuration")
+ /**
+ * @enum {number}
+ */
+ NightMode.config = {
+ FADE_SPEED: 0.035,
+ HEIGHT: 40,
+ MOON_SPEED: 0.25,
+ NUM_STARS: 2,
+ STAR_SIZE: 9,
+ STAR_SPEED: 0.3,
+ STAR_MAX_Y: 70,
+ WIDTH: 20
+ };
+
+ NightMode.phases = [140, 120, 100, 60, 40, 20, 0];
+
+ NightMode.prototype = {
+ /**
+ * Update moving moon, changing phases.
+ * @param {boolean} activated Whether night mode is activated.
+ * @param {number} delta
+ */
+ update: function (activated, delta) {
+ // Moon phase.
+ if (activated && this.opacity == 0) {
+ this.currentPhase++;
+
+ if (this.currentPhase >= NightMode.phases.length) {
+ this.currentPhase = 0;
+ }
+ }
+
+ // Fade in / out.
+ if (activated && (this.opacity < 1 || this.opacity == 0)) {
+ this.opacity += NightMode.config.FADE_SPEED;
+ } else if (this.opacity > 0) {
+ this.opacity -= NightMode.config.FADE_SPEED;
+ }
+
+ // Set moon positioning.
+ if (this.opacity > 0) {
+ this.xPos = this.updateXPos(this.xPos, NightMode.config.MOON_SPEED);
+
+ // Update stars.
+ if (this.drawStars) {
+ for (var i = 0; i < NightMode.config.NUM_STARS; i++) {
+ this.stars[i].x = this.updateXPos(
+ this.stars[i].x,
+ NightMode.config.STAR_SPEED
+ );
+ }
+ }
+ this.draw();
+ } else {
+ this.opacity = 0;
+ this.placeStars();
+ }
+ this.drawStars = true;
+ },
+
+ updateXPos: function (currentPos, speed) {
+ if (currentPos < -NightMode.config.WIDTH) {
+ currentPos = this.containerWidth;
+ } else {
+ currentPos -= speed;
+ }
+ return currentPos;
+ },
+
+ draw: function () {
+ var moonSourceWidth =
+ this.currentPhase == 3
+ ? NightMode.config.WIDTH * 2
+ : NightMode.config.WIDTH;
+ var moonSourceHeight = NightMode.config.HEIGHT;
+ var moonSourceX = this.spritePos.x + NightMode.phases[this.currentPhase];
+ var moonOutputWidth = moonSourceWidth;
+ var starSize = NightMode.config.STAR_SIZE;
+ var starSourceX = Runner.spriteDefinition.LDPI.STAR.x;
+
+ if (IS_HIDPI) {
+ moonSourceWidth *= 2;
+ moonSourceHeight *= 2;
+ moonSourceX =
+ this.spritePos.x + NightMode.phases[this.currentPhase] * 2;
+ starSize *= 2;
+ starSourceX = Runner.spriteDefinition.HDPI.STAR.x;
+ }
+
+ this.canvasCtx.save();
+ this.canvasCtx.globalAlpha = this.opacity;
+
+ // Stars.
+ if (this.drawStars) {
+ for (var i = 0; i < NightMode.config.NUM_STARS; i++) {
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ starSourceX,
+ this.stars[i].sourceY,
+ starSize,
+ starSize,
+ Math.round(this.stars[i].x),
+ this.stars[i].y,
+ NightMode.config.STAR_SIZE,
+ NightMode.config.STAR_SIZE
+ );
+ }
+ }
+
+ // Moon.
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ moonSourceX,
+ this.spritePos.y,
+ moonSourceWidth,
+ moonSourceHeight,
+ Math.round(this.xPos),
+ this.yPos,
+ moonOutputWidth,
+ NightMode.config.HEIGHT
+ );
+
+ this.canvasCtx.globalAlpha = 1;
+ this.canvasCtx.restore();
+ },
+
+ // Do star placement.
+ placeStars: function () {
+ var segmentSize = Math.round(
+ this.containerWidth / NightMode.config.NUM_STARS
+ );
+
+ for (var i = 0; i < NightMode.config.NUM_STARS; i++) {
+ this.stars[i] = {};
+ this.stars[i].x = getRandomNum(segmentSize * i, segmentSize * (i + 1));
+ this.stars[i].y = getRandomNum(0, NightMode.config.STAR_MAX_Y);
+
+ if (IS_HIDPI) {
+ this.stars[i].sourceY =
+ Runner.spriteDefinition.HDPI.STAR.y +
+ NightMode.config.STAR_SIZE * 2 * i;
+ } else {
+ this.stars[i].sourceY =
+ Runner.spriteDefinition.LDPI.STAR.y +
+ NightMode.config.STAR_SIZE * i;
+ }
+ }
+ },
+
+ reset: function () {
+ this.currentPhase = 0;
+ this.opacity = 0;
+ this.update(false);
+ }
+ };
+
+ //******************************************************************************
+
+ /**
+ * Horizon Line.
+ * Consists of two connecting lines. Randomly assigns a flat / bumpy horizon.
+ * @param {HTMLCanvasElement} canvas
+ * @param {Object} spritePos Horizon position in sprite.
+ * @constructor
+ */
+ function HorizonLine(canvas, spritePos) {
+ this.spritePos = spritePos;
+ this.canvas = canvas;
+ this.canvasCtx = canvas.getContext("2d");
+ this.sourceDimensions = {};
+ this.dimensions = HorizonLine.dimensions;
+ this.sourceXPos = [
+ this.spritePos.x,
+ this.spritePos.x + this.dimensions.WIDTH
+ ];
+ this.xPos = [];
+ this.yPos = 0;
+ this.bumpThreshold = 0.5;
+
+ this.setSourceDimensions();
+ this.draw();
+ }
+
+ console.log("Horizon Line Configuration")
+ /**
+ * Horizon line dimensions.
+ * @enum {number}
+ */
+ HorizonLine.dimensions = {
+ WIDTH: 600,
+ HEIGHT: 12,
+ YPOS: 127
+ };
+
+ HorizonLine.prototype = {
+ /**
+ * Set the source dimensions of the horizon line.
+ */
+ setSourceDimensions: function () {
+ for (var dimension in HorizonLine.dimensions) {
+ if (IS_HIDPI) {
+ if (dimension != "YPOS") {
+ this.sourceDimensions[dimension] =
+ HorizonLine.dimensions[dimension] * 2;
+ }
+ } else {
+ this.sourceDimensions[dimension] = HorizonLine.dimensions[dimension];
+ }
+ this.dimensions[dimension] = HorizonLine.dimensions[dimension];
+ }
+
+ this.xPos = [0, HorizonLine.dimensions.WIDTH];
+ this.yPos = HorizonLine.dimensions.YPOS;
+ },
+
+ /**
+ * Return the crop x position of a type.
+ */
+ getRandomType: function () {
+ return Math.random() > this.bumpThreshold ? this.dimensions.WIDTH : 0;
+ },
+
+ /**
+ * Draw the horizon line.
+ */
+ draw: function () {
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ this.sourceXPos[0],
+ this.spritePos.y,
+ this.sourceDimensions.WIDTH,
+ this.sourceDimensions.HEIGHT,
+ this.xPos[0],
+ this.yPos,
+ this.dimensions.WIDTH,
+ this.dimensions.HEIGHT
+ );
+
+ this.canvasCtx.drawImage(
+ Runner.imageSprite,
+ this.sourceXPos[1],
+ this.spritePos.y,
+ this.sourceDimensions.WIDTH,
+ this.sourceDimensions.HEIGHT,
+ this.xPos[1],
+ this.yPos,
+ this.dimensions.WIDTH,
+ this.dimensions.HEIGHT
+ );
+ },
+
+ /**
+ * Update the x position of an indivdual piece of the line.
+ * @param {number} pos Line position.
+ * @param {number} increment
+ */
+ updateXPos: function (pos, increment) {
+ var line1 = pos;
+ var line2 = pos == 0 ? 1 : 0;
+
+ this.xPos[line1] -= increment;
+ this.xPos[line2] = this.xPos[line1] + this.dimensions.WIDTH;
+
+ if (this.xPos[line1] <= -this.dimensions.WIDTH) {
+ this.xPos[line1] += this.dimensions.WIDTH * 2;
+ this.xPos[line2] = this.xPos[line1] - this.dimensions.WIDTH;
+ this.sourceXPos[line1] = this.getRandomType() + this.spritePos.x;
+ }
+ },
+
+ /**
+ * Update the horizon line.
+ * @param {number} deltaTime
+ * @param {number} speed
+ */
+ update: function (deltaTime, speed) {
+ var increment = Math.floor(speed * (FPS / 1000) * deltaTime);
+
+ if (this.xPos[0] <= 0) {
+ this.updateXPos(0, increment);
+ } else {
+ this.updateXPos(1, increment);
+ }
+ this.draw();
+ },
+
+ /**
+ * Reset horizon to the starting position.
+ */
+ reset: function () {
+ this.xPos[0] = 0;
+ this.xPos[1] = HorizonLine.dimensions.WIDTH;
+ }
+ };
+
+ //******************************************************************************
+
+ /**
+ * Horizon background class.
+ * @param {HTMLCanvasElement} canvas
+ * @param {Object} spritePos Sprite positioning.
+ * @param {Object} dimensions Canvas dimensions.
+ * @param {number} gapCoefficient
+ * @constructor
+ */
+ function Horizon(canvas, spritePos, dimensions, gapCoefficient) {
+ this.canvas = canvas;
+ this.canvasCtx = this.canvas.getContext("2d");
+ this.config = Horizon.config;
+ this.dimensions = dimensions;
+ this.gapCoefficient = gapCoefficient;
+ this.obstacles = [];
+ this.obstacleHistory = [];
+ this.horizonOffsets = [0, 0];
+ this.cloudFrequency = this.config.CLOUD_FREQUENCY;
+ this.spritePos = spritePos;
+ this.nightMode = null;
+
+ // Cloud
+ this.clouds = [];
+ this.cloudSpeed = this.config.BG_CLOUD_SPEED;
+
+ // Horizon
+ this.horizonLine = null;
+ this.init();
+ }
+
+ console.log("Horizon Configuration")
+ /**
+ * Horizon config.
+ * @enum {number}
+ */
+ Horizon.config = {
+ BG_CLOUD_SPEED: 0.2,
+ BUMPY_THRESHOLD: 0.3,
+ CLOUD_FREQUENCY: 0.5,
+ HORIZON_HEIGHT: 16,
+ MAX_CLOUDS: 6
+ };
+
+ Horizon.prototype = {
+ /**
+ * Initialise the horizon. Just add the line and a cloud. No obstacles.
+ */
+ init: function () {
+ this.addCloud();
+ this.horizonLine = new HorizonLine(this.canvas, this.spritePos.HORIZON);
+ this.nightMode = new NightMode(
+ this.canvas,
+ this.spritePos.MOON,
+ this.dimensions.WIDTH
+ );
+ },
+
+ /**
+ * @param {number} deltaTime
+ * @param {number} currentSpeed
+ * @param {boolean} updateObstacles Used as an override to prevent
+ * the obstacles from being updated / added. This happens in the
+ * ease in section.
+ * @param {boolean} showNightMode Night mode activated.
+ */
+ update: function (deltaTime, currentSpeed, updateObstacles, showNightMode) {
+ this.runningTime += deltaTime;
+ this.horizonLine.update(deltaTime, currentSpeed);
+ this.nightMode.update(showNightMode);
+ this.updateClouds(deltaTime, currentSpeed);
+
+ if (updateObstacles) {
+ this.updateObstacles(deltaTime, currentSpeed);
+ }
+ },
+
+ /**
+ * Update the cloud positions.
+ * @param {number} deltaTime
+ * @param {number} currentSpeed
+ */
+ updateClouds: function (deltaTime, speed) {
+ var cloudSpeed = this.cloudSpeed / 1000 * deltaTime * speed;
+ var numClouds = this.clouds.length;
+
+ if (numClouds) {
+ for (var i = numClouds - 1; i >= 0; i--) {
+ this.clouds[i].update(cloudSpeed);
+ }
+
+ var lastCloud = this.clouds[numClouds - 1];
+
+ // Check for adding a new cloud.
+ if (
+ numClouds < this.config.MAX_CLOUDS &&
+ this.dimensions.WIDTH - lastCloud.xPos > lastCloud.cloudGap &&
+ this.cloudFrequency > Math.random()
+ ) {
+ this.addCloud();
+ }
+
+ // Remove expired clouds.
+ this.clouds = this.clouds.filter(function (obj) {
+ return !obj.remove;
+ });
+ } else {
+ this.addCloud();
+ }
+ },
+
+ /**
+ * Update the obstacle positions.
+ * @param {number} deltaTime
+ * @param {number} currentSpeed
+ */
+ updateObstacles: function (deltaTime, currentSpeed) {
+ // Obstacles, move to Horizon layer.
+ var updatedObstacles = this.obstacles.slice(0);
+
+ for (var i = 0; i < this.obstacles.length; i++) {
+ var obstacle = this.obstacles[i];
+ obstacle.update(deltaTime, currentSpeed);
+
+ // Clean up existing obstacles.
+ if (obstacle.remove) {
+ updatedObstacles.shift();
+ }
+ }
+ this.obstacles = updatedObstacles;
+
+ if (this.obstacles.length > 0) {
+ var lastObstacle = this.obstacles[this.obstacles.length - 1];
+
+ if (
+ lastObstacle &&
+ !lastObstacle.followingObstacleCreated &&
+ lastObstacle.isVisible() &&
+ lastObstacle.xPos + lastObstacle.width + lastObstacle.gap <
+ this.dimensions.WIDTH
+ ) {
+ this.addNewObstacle(currentSpeed);
+ lastObstacle.followingObstacleCreated = true;
+ }
+ } else {
+ // Create new obstacles.
+ this.addNewObstacle(currentSpeed);
+ }
+ },
+
+ removeFirstObstacle: function () {
+ this.obstacles.shift();
+ },
+
+ /**
+ * Add a new obstacle.
+ * @param {number} currentSpeed
+ */
+ addNewObstacle: function (currentSpeed) {
+ var obstacleTypeIndex = getRandomNum(0, Obstacle.types.length - 1);
+ var obstacleType = Obstacle.types[obstacleTypeIndex];
+
+ // Check for multiples of the same type of obstacle.
+ // Also check obstacle is available at current speed.
+ if (
+ this.duplicateObstacleCheck(obstacleType.type) ||
+ currentSpeed < obstacleType.minSpeed
+ ) {
+ this.addNewObstacle(currentSpeed);
+ } else {
+ var obstacleSpritePos = this.spritePos[obstacleType.type];
+
+ this.obstacles.push(
+ new Obstacle(
+ this.canvasCtx,
+ obstacleType,
+ obstacleSpritePos,
+ this.dimensions,
+ this.gapCoefficient,
+ currentSpeed,
+ obstacleType.width
+ )
+ );
+
+ this.obstacleHistory.unshift(obstacleType.type);
+
+ if (this.obstacleHistory.length > 1) {
+ this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION);
+ }
+ }
+ },
+
+ /**
+ * Returns whether the previous two obstacles are the same as the next one.
+ * Maximum duplication is set in config value MAX_OBSTACLE_DUPLICATION.
+ * @return {boolean}
+ */
+ duplicateObstacleCheck: function (nextObstacleType) {
+ var duplicateCount = 0;
+
+ for (var i = 0; i < this.obstacleHistory.length; i++) {
+ duplicateCount =
+ this.obstacleHistory[i] == nextObstacleType ? duplicateCount + 1 : 0;
+ }
+ return duplicateCount >= Runner.config.MAX_OBSTACLE_DUPLICATION;
+ },
+
+ /**
+ * Reset the horizon layer.
+ * Remove existing obstacles and reposition the horizon line.
+ */
+ reset: function () {
+ this.obstacles = [];
+ this.horizonLine.reset();
+ this.nightMode.reset();
+ },
+
+ /**
+ * Update the canvas width and scaling.
+ * @param {number} width Canvas width.
+ * @param {number} height Canvas height.
+ */
+ resize: function (width, height) {
+ this.canvas.width = width;
+ this.canvas.height = height;
+ },
+
+ /**
+ * Add a new cloud to the horizon.
+ */
+ addCloud: function () {
+ this.clouds.push(
+ new Cloud(this.canvas, this.spritePos.CLOUD, this.dimensions.WIDTH)
+ );
+ }
+ };
+})();
+
+function onDocumentLoad() {
+ new Runner(".interstitial-wrapper");
+}
+
+document.addEventListener("DOMContentLoaded", onDocumentLoad);
diff --git a/games/index.html b/games/index.html
new file mode 100644
index 0000000..ee952a6
--- /dev/null
+++ b/games/index.html
@@ -0,0 +1 @@
+<script>location.href = 'https://kyzer.co/directory/games/'</script> \ No newline at end of file
diff --git a/games/space-invaders/.htaccess b/games/space-invaders/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/games/space-invaders/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/games/space-invaders/favicon.png b/games/space-invaders/favicon.png
new file mode 100644
index 0000000..b3b41ff
--- /dev/null
+++ b/games/space-invaders/favicon.png
Binary files differ
diff --git a/games/space-invaders/index.html b/games/space-invaders/index.html
new file mode 100644
index 0000000..27d209e
--- /dev/null
+++ b/games/space-invaders/index.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Space Invaders</title>
+ <!-- Site metadata -->
+ <meta name="description" content="Space Invaders">
+ <meta property="og:description" content="Space Invaders">
+ <meta property="og:title" content="s1nical - Space Invaders">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/space-invaders">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/space-invaders">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Space Invaders",
+ "headline": "Space Invaders",
+ "url": "https://kyzer.co/space-invaders",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <link rel="shortcut icon" href="/space-invaders/favicon.png" type="image/x-icon">
+ <script src="/space-invaders/js/mobile.js"></script>
+</head>
+ <body>
+ <script src="/space-invaders/js/main.js"></script>
+ </body>
+</html> \ No newline at end of file
diff --git a/games/space-invaders/js/main.js b/games/space-invaders/js/main.js
new file mode 100644
index 0000000..1fcfdf3
--- /dev/null
+++ b/games/space-invaders/js/main.js
@@ -0,0 +1 @@
+for (p = 389, L = l = m = t = 0, c = " _ ", onkeydown = function (e) { 39 == (k = e.which) ? p++ : 37 == k ? p-- : !l & (l = p) }, setInterval('_="<pre>";l&(l-=20)<0&&(l=0);m=(m+=20)>p?b[+new Date%6]:m;for(i=0;i<400;i++){if(i%20==0)_+="\\n";if(~b[n="indexOf"](l))b.splice(b[n](l),1),L+=5,l=0;if(~b[n](p)||p==m)p=n,b=[],c="xxx";_+=i==p?"oIo":~b[n](i)?".#.":i==m&&m?" * ":i==l&&l?" | ":c}document.body.innerHTML=_+="\\nP "+L;t+=o;for(i in b)b[i]+=t%5e3==0?20:t%2e3==0?1:t%1e3==0&&-1', o = 50), b = [], j = 2; 136 > j; j += 14 == j || 94 == j ? 29 : 55 == j ? 27 : 2)b.push(j); \ No newline at end of file
diff --git a/games/space-invaders/js/mobile.js b/games/space-invaders/js/mobile.js
new file mode 100644
index 0000000..5807029
--- /dev/null
+++ b/games/space-invaders/js/mobile.js
@@ -0,0 +1,4 @@
+// CHECKS IF USER IS ON MOBILE
+if (screen.width <= 480) {
+ location.href = '/mobile';
+} \ No newline at end of file
diff --git a/help/pasting/1.1 Remove Features.php b/help/pasting/1.1 Remove Features.php
new file mode 100644
index 0000000..5cc34c6
--- /dev/null
+++ b/help/pasting/1.1 Remove Features.php
@@ -0,0 +1,25 @@
+<h1>1. Change Signature</h1>
+<br>
+<br>
+First, you will need the Project File of your Paste. You won't be able to protect it properly with the DLL only.
+(I'll use Riptide for this Step)
+<br>
+<br>
+1.1 Remove Features:
+Only keep features you will really need.
+Removing unnecessary features will change the signature and speed up the cheat. Also, you'll maybe fix crashes without knowing it.
+<br>
+<br>
+Don't remove the Checkboxes only, also remove the Functions. Search with "CTRL + F" for relateable functions you don't need.<br>
+<br>
+For example, if you want to remove Knifebot, Remove the Knifebot.cpp and Knifebot.h. Also remove the Saving and Loading Convars in Settings.cpp and Settings.h.<br>
+<br>
+Stuff like this "#define CVAR_KNIFEBOT_ACTIVE "knf_Active" or this "extern bool knf_Active;".<br>
+Of course, you have to remove the Checkboxes in Client.cpp and "class CKnifebot" in Client.h too.
+<br>
+<br>
+If you want to remove features like Damage Indicator you also have to remove all the Stuff in Esp.cpp, Client.cpp and Settings.cpp/h. Search with CTRL + F for "DamageIndicator" and remove everything you can find.<br>
+<br>
+For example this stuff:<br>
+"void CEsp::DrawDamageIndicator()...." and this "std::vector<DamageIndicator_t> DamageIndicator;"
+etc. \ No newline at end of file
diff --git a/help/pasting/1.2 Rename Functions and Features.php b/help/pasting/1.2 Rename Functions and Features.php
new file mode 100644
index 0000000..6820146
--- /dev/null
+++ b/help/pasting/1.2 Rename Functions and Features.php
@@ -0,0 +1,16 @@
+<h1>1.2 Rename Functions and Features:</h1>
+User Advice: Please Save a Source Backup in case you break features with the next Step.
+<br>
+<br>
+If you have the time to, you can rename all features in Riptide / Indigo and other Pastes.
+For example rename "Backtrack".
+<br>
+<br>
+Open your Client.cpp and search for "Backtrack".<br><br>
+You will probably find something like this:<br>
+ImGui::Checkbox("Backtrack", &Settings::Aimbot::aim_Backtrack);<br><br>
+
+Now Rename "aim_Backtrack". You can do CTRL + H if you don't want to remove everything manually. Be careful, you can break some features with CTRL + H.<br><br>
+In the first Field write "aim_Backtrack" and in the second any other name. For example "RewindKill".<br><br>
+Now change the Search Options to "Entire Solution" and press on the Replace All Button (Red Circled Button in the Picture).<br><br>
+This will Replace all functions named aim_Backtrack with RewindKill. \ No newline at end of file
diff --git a/help/pasting/1.3 Add Junkcode.php b/help/pasting/1.3 Add Junkcode.php
new file mode 100644
index 0000000..c3ff79c
--- /dev/null
+++ b/help/pasting/1.3 Add Junkcode.php
@@ -0,0 +1,19 @@
+<h1>1.3 Add Junkcode:</h1>
+User Advice: Please Save a Source Backup in case you break features with the next Step.<br>
+I don't care if Junkcode is a Meme. VAC scans for signature and Junk changes signature a lot. It works for me so I<br> suggest you to use it.
+<br><br>
+Why do you need Junkcode / What is Junkcode?<br>
+Imagine you wrote an exam on your Computer and the Teacher checks if you copied something from the Internet. He will<br> take random sentences from your exam and search online if you copied them. VAC is kind of similar. It scans<br> randomly for code and searches in the Database for detected Code. You use "undetected" Junkcode to mess up your<br> source code. The more Junkcode you have, the harder it will be for VAC to find detected code. With a lot of Junk,<br> VAC picks up the Junkcode instead of your source code, so the detection will be false. I know, It's<br> definitely not the way how VAC works but the easiest way to explain VAC to newcomers.<br>
+
+I suggest you, don't use Auto Junk Adder. They only add Junk Code at the end of your CPP Files. If you want to be safe, add Junk between the Source Code and not only at the end of your source.
+<br><br>
+This Step will take a lot of time if you do it manually without auto junk adder, but it will be a lot safer. The longer it takes, the safer it will be.
+<br><br>
+Add Junkcode to every single .CPP File. Don't add Junk to your .h (headerfiles). If you have Protobuf, ("protobuf" folder with files) add Junk to all .pb.cc files.<br>
+You can use this Website for c++ Junk: https://junkcode.gehaxelt.in/.<br>
+If you use C# use this: https://pasters.cc/showthread.php?tid=5017.<br>
+The Junkcode changes everytime you reload the Website. Only use the same Junkcode once on all CPP Files. That means, don't C&P the Junkcode and Paste the same Junk 2 times at the same Page.
+
+I suggest you to add +50% Junkcode of the actual CPP file. 50% Junk and 50% cheat code. <br><br>
+
+GIF: https://imgur.com/aQU4qQD \ No newline at end of file
diff --git a/help/pasting/1.4 Disable Optimization Settings.php b/help/pasting/1.4 Disable Optimization Settings.php
new file mode 100644
index 0000000..747488c
--- /dev/null
+++ b/help/pasting/1.4 Disable Optimization Settings.php
@@ -0,0 +1,8 @@
+<h1>1.4 Disable Optimization Settings</h1>
+<br><br>
+Open your Project Settings and Disable all Optimization Settings.<br>
+If you don't know how to do that:<br>
+- Right Click on Solution and open Options.<br>
+- Press on C/C++, Open Optimizations<br>
+- Optimization should be "Disabled (/Od),<br>
+- Change Everything else to No/Neither/Disabled<br> \ No newline at end of file
diff --git a/help/pasting/1.5 Sigbench.php b/help/pasting/1.5 Sigbench.php
new file mode 100644
index 0000000..7d4a7d6
--- /dev/null
+++ b/help/pasting/1.5 Sigbench.php
@@ -0,0 +1,12 @@
+Sigbench will show you the percentage amount of difference between the old default dll and your junkprotected dll.
+<br><br>
+You need JAVA for this. Install this if you haven't already https://java.com/de/download/
+<br><br>
+Download Sigbench: http://www.mediafire.com/file/6k0mh81gf3y4vqg/Sigbench_%255Bunknowncheats.me%255D_.zip/file
+<br><br>
+You need your Junkprotected DLL (without vmprotect or themida) and the default DLL (Without Junk).<br>
+Open Sigbench. Drag&Drop the protected dll on the left and the default on the right side of Sigbench.<br><br>
+Change the Sig size to 16 and press Benchmark. This can take a while (up to 5 Minutes if your PC is garbage).
+Do this step 5 times. If the average is below 45% you should add more Junk. Average +50% = decent. Average +75% = good,<br> your safe.<br>
+<br>
+It should look somehow like this: https://imgur.com/6kOpTCv \ No newline at end of file
diff --git a/help/pasting/2. Protect your Cheat.php b/help/pasting/2. Protect your Cheat.php
new file mode 100644
index 0000000..f193c22
--- /dev/null
+++ b/help/pasting/2. Protect your Cheat.php
@@ -0,0 +1,18 @@
+<h1>2. Protect your Cheat</h1>
+This step will protect your cheat from Skids, trying to crack your dll and steal the source.<br>
+It also changes the Signature difference up to 99% but nobody knows if this actually makes your cheat undetected (works for me tho).
+<br><br>
+I've been banned a lot with VMProtect so I suggest you to use Themida.<br>
+Download Crack: http://www.mediafire.com/file/yv4dkz2zmqnaeq3/Themida.zip/file
+ <br><br>
+Some of you told me it crashes with Themida. That's because of the Compression. Disable "Application" in the "Compression" options.<br>
+Enable all those Settings: https://imgur.com/a/2hEvpA6
+<br><br>
+Now just Protect it and you Dll should be VAC Safe.
+<br><br>
+You can check your Final dll with sigbench again. If you have an average difference +80% your dll should be safe.
+<br><br>
+Tipps: <br>
+- Play the first 10 Matchmaking Matches without any cheats for a good trust factor.<br>
+- Don't share your Dll with anyone. <br>
+- Use an Undetected Injector and only Inject in Main Menu. Don't inject Ingame.<br> \ No newline at end of file
diff --git a/humans.txt b/humans.txt
new file mode 100644
index 0000000..6be4527
--- /dev/null
+++ b/humans.txt
@@ -0,0 +1,79 @@
+/* TEAM */
+
+Title: s1nicalDev
+
+Site: https://kyzer.co/
+
+
+Twitter: @9inny
+
+Location: Oregon
+
+
+
+ [...]
+
+
+
+/* SITE */
+
+Last update: 2020/06/02
+
+Standards: HTML5, CSS3, JS and PHP7.
+
+Components: Trianglify, jQuery, Bootstrap, p5.js, matter.js and Easter Eggs Collection.
+
+Software: Visual Studio, Visual Studio Code, IntelliJ, Atom, WebStorm, and PhpStorm.
+
+
+
+ [...]
+
+
+
+
+ .-.
+ ( )
+ '-'
+ J L
+ | |
+ J L
+ | |
+ J L
+ .-'.___.'-.
+ /___________\
+ _.-""' `bmw._
+ .' `.
+ J `.
+ F L
+ J J
+ J `
+ | L
+ | | .---------.
+ | | ( OPUS DEI. )
+ | J ,---------'
+ | L -'
+ | |
+ | ,.___ ___....--._
+ | ,' `""""""""' `-._
+ | J _____________________`-.
+ | F .-' `-88888-' `Y8888b.`.
+ | | .' `P' `88888b \
+ | | J # L # q8888b L
+ | | | | )8888D )
+ | J \ J d8888P P
+ | L `. .b. ,88888P /
+ | `. `-.___,o88888o.___,o88888P'.'
+ | `-.__________________________..-'
+ | |
+ | .-----.........____________J
+ | .' | | | |
+ | J---|-----..|...___|_______|
+ | | | | | |
+ | Y---|-----..|...___|_______|
+ | `. | | | |
+ | `'-------:....__|______.J
+ | |
+ L___ |
+ """----...______________....--'
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..1bd2d39
--- /dev/null
+++ b/index.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <meta name="theme-color" content="#FFF">
+ <title>s1nical - Landing Page</title>
+ <!-- External Scripts Links -->
+ <link href='https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic' rel='stylesheet' type='text/css'>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link id="pagestyle" rel="stylesheet" type="text/css" href="/css/main.css" />
+ <!-- Site metadata -->
+ <meta name="description" content="Landing Page">
+ <meta property="og:description" content="Landing Page">
+ <meta property="og:title" content="s1nical - Landing Page">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/">
+ <!-- Favicons -->
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/">
+ <link rel="author" href="humans.txt" />
+ <!-- Invisible Scripts -->
+ <script src="/js/hide-context-menu.js"></script>
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Landing Page",
+ "headline": "Landing Page",
+ "url": "https://kyzer.co/",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/inter.css" integrity="sha256-DyLTj16AbuvawyWJMPz4tJNp46iGflE/fWYAoU2IGpk=" crossorigin="anonymous">
+ </head>
+ <body>
+ <!-- Scripts -->
+ <script src="/js/app.js"></script>
+ <script id="js-konami" src="/js/background-sparkles.js"></script>
+
+ <!-- particles.js Container -->
+ <div style="position: absolute; left: 0; top: 0; width: 100%; height: 100%;" id="particles-js"></div>
+ <script src="/js/lib/particles.min.js"></script>
+ <script>
+ particlesJS.load('particles-js', '/assets/configs/particles.json', function() {
+ console.log('Callback - particles.js Config Loaded.');
+ });
+ </script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a onclick="deactivateCheats()" href="#" class="nav-item" active-color="orange">Home</a> <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a>
+ <a href="/discord/bots/uwufier/" class="nav-item" active-color="blue">Uwufier</a>
+ <a href="https://www.npmjs.com/~sinny" class="nav-item" active-color="red">NPM</a>
+ <span id="directory-konami"></span>
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <!-- Core Site Function, Site Primer/ Base -->
+ <main>
+ <div class="links">
+ <div class="email">
+ <a href="mailto:[email protected]">s1nical</a><br>
+ Full-stack developer.<br><br>
+ </div>
+ <div class="twitter">
+ Follow me on <a href="https://twitter.com/9inny">Twitter</a>.
+ </div>
+ <div class="github">
+ View my code on <a href="https://github.com/8cy">GitHub</a>.
+ </div>
+ </div>
+ </main>
+
+ <div class="clairo">
+ <span id="m-konami"></span>
+ </div>
+
+ <script>
+ // If the end-user is on mobile, then you can click the Clario image to access Konami mode
+ if (screen.width > 768) { // If Desktop
+ document.getElementById("m-konami").innerHTML = `
+ <img src="/assets/imgs/clairo2.gif" alt="clairo" width="30px">
+ `;
+ } else { // If Mobile
+ document.getElementById("m-konami").innerHTML = `
+ <img src="/assets/imgs/clairo2.gif" onclick="activateCheats()" alt="clairo" width="30px">
+ `;
+ }
+ </script>
+
+ <!-- Konami Music -->
+ <!-- Background Music
+ // CREDITS: //
+
+ Title: The Classics - A New Retro Synthwave Mix
+
+ Uploader: Confused Bi-Product of a Misinformed Culture
+
+ Full Credits: https://kyzer.co/konami/assets/audio/midi.mp3.txt -->
+ <audio src="/konami/assets/audio/midi.mp3" id="music">
+ <p>If you are reading this, it is because your browser does not support the audio element.</p>
+ <script>
+ var audio = document.getElementById("music");
+ audio.volume = 0.1; // Volume Adjuster, might bind it to "- and +" one day if possible.
+ </script>
+ </audio>
+
+ <embed src="/assets/audio/sadness.mp3" id="music-main" volume="1" autostart="true" loop="true" width="0" height="0" preload></embed>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/js/.htaccess b/js/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/js/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/js/app.js b/js/app.js
new file mode 100644
index 0000000..e44aa25
--- /dev/null
+++ b/js/app.js
@@ -0,0 +1,197 @@
+// Console Log Konami code hints
+$(window).on("load", function () {
+ console.log("UP, UP, DOWN, DOWN, LEFT, RIGHT, LEFT, RIGHT, B, A");
+});
+
+/* Honestly I have NO idea what this is but it was in the original site source code so I kept it :)
+**(async () => {
+** if (navigator.webdriver || document.visibilityState === 'prerender' || !location.hostname) {
+** return;
+** }
+**
+** document.querySelector('a[href="/cdn-cgi/l/email-protection"]').href = `\x6dailto:hi\x40${location.hostname}`;
+** })();
+*/
+
+// Konami Code stuff
+// A key map of allowed keys
+var allowedKeys = {
+ 37: 'left',
+ 38: 'up',
+ 39: 'right',
+ 40: 'down',
+ 65: 'a',
+ 66: 'b',
+ 8: 'backspace'
+};
+
+// To somewhat stop backspace/ refresh spamming
+window.addEventListener('keydown', function (event) {
+
+ if (event.keyCode === 8) {
+ event.preventDefault();
+
+ return false;
+ }
+});
+
+// Konami code
+var konamiCode = ['up', 'up', 'down', 'down', 'left', 'right', 'left', 'right', 'b', 'a'];
+
+// A variable to remember the 'position' the user has reached so far.
+var konamiCodePosition = 0;
+
+// Keydown event listener
+document.addEventListener('keydown', function (e) {
+ // Get value of key code from the key map
+ var key = allowedKeys[e.keyCode];
+ // Get value of required key from the Konami code
+ var requiredKey = konamiCode[konamiCodePosition];
+
+ // Compare key with required key
+ if (key == requiredKey) {
+ // Move to the next key in Konami Code sequence
+ konamiCodePosition++;
+ // If last key is reached, activate cheats
+ if (konamiCodePosition == konamiCode.length) {
+ activateCheats();
+ konamiCodePosition = 0;
+ }
+ } else {
+ konamiCodePosition = 0;
+ }
+});
+
+// Back to normal sequence
+var backCode = ['backspace'];
+var backCodePosition = 0;
+
+document.addEventListener('keydown', function (e) {
+ var key = allowedKeys[e.keyCode];
+ var requiredKey = backCode[backCodePosition];
+
+ if (key == requiredKey) {
+ backCodePosition++;
+
+ if (backCodePosition == backCode.length) {
+ deactivateCheats();
+ backCodePosition = 0;
+ }
+ } else {
+ backCodePosition = 0;
+ }
+});
+
+// Swap css function
+function swapStyleSheet(sheet) {
+ document.getElementById('pagestyle').setAttribute('href', sheet);
+}
+
+// Change favicon
+// 3/29/2020, 13:50, I have no idea what this does.
+document.head = document.head || document.getElementsByTagName('head')[0];
+
+function changeFavicon(src) {
+ var link = document.createElement('link'),
+ oldLink = document.getElementById('dynamic-favicon');
+ link.id = 'dynamic-favicon';
+ link.rel = 'shortcut icon';
+ link.href = src;
+ if (oldLink) {
+ document.head.removeChild(oldLink);
+ }
+ document.head.appendChild(link);
+}
+
+function activateCheats() {
+ swapStyleSheet('/konami/css/main.css');
+ // I overworked for this smh...
+ changeFavicon('/konami/assets/images/small-spinning-globe3.gif');
+
+ var x = document.getElementById("music");
+
+ function playAudio() {
+ x.play();
+ }
+
+ playAudio();
+
+ document.getElementById("directory-konami").innerHTML = `
+ <a href="/directory/" class="nav-item" active-color="rebeccapurple">Directory</a>
+ `;
+
+ if (screen.width > 768) { // If Desktop
+ document.getElementById("m-konami").innerHTML = `
+ <img src="/assets/imgs/clairo2.gif" alt="" width="30px">
+ `;
+ } else { // If Mobile
+ document.getElementById("m-konami").innerHTML = `
+ <img src="/assets/imgs/clairo2.gif" onclick="deactivateCheats()" alt="" width="30px">
+ `;
+ }
+
+ document.title = "// s1n.ical // Landing Page //";
+}
+
+function deactivateCheats() {
+ swapStyleSheet('/css/main.css');
+ changeFavicon('favicon.ico');
+
+ var x = document.getElementById("music");
+ function pauseAudio() {
+ x.pause();
+ }
+
+ pauseAudio();
+
+ document.getElementById("directory-konami").innerHTML = ``;
+ document.getElementById("m-konami").innerHTML = `
+ <div class="clairo">
+ <img src="/assets/imgs/clairo2.gif" alt="" width="30px" onclick="activateCheats()">
+ </div>
+ `;
+
+ document.title = "s1nical - Landing Page";
+}
+
+var TxtRotate = function (el, toRotate, period) {
+ this.toRotate = toRotate;
+ this.el = el;
+ this.loopNum = 0;
+ this.period = parseInt(period, 10) || 2000;
+ this.txt = '';
+ this.tick();
+ this.isDeleting = false;
+};
+
+TxtRotate.prototype.tick = function () {
+ var i = this.loopNum % this.toRotate.length;
+ var fullTxt = this.toRotate[i];
+
+ if (this.isDeleting) {
+ this.txt = fullTxt.substring(0, this.txt.length - 1);
+ } else {
+ this.txt = fullTxt.substring(0, this.txt.length + 1);
+ }
+
+ this.el.innerHTML = '<span class="wrap">' + this.txt + '</span>';
+
+ var that = this;
+ var delta = 300 - Math.random() * 100;
+
+
+ setTimeout(function () {
+ that.tick();
+ }, delta);
+};
+
+window.onload = function () {
+ var elements = document.getElementsByClassName('txt-rotate');
+ for (var i = 0; i < elements.length; i++) {
+ var toRotate = elements[i].getAttribute('data-rotate');
+ var period = elements[i].getAttribute('data-period');
+ if (toRotate) {
+ new TxtRotate(elements[i], JSON.parse(toRotate), period);
+ }
+ }
+};
diff --git a/js/background-sparkles.js b/js/background-sparkles.js
new file mode 100644
index 0000000..5d7fad1
--- /dev/null
+++ b/js/background-sparkles.js
@@ -0,0 +1,105 @@
+// Background only renders based on the original browser window size when
+// starting to load the site. Due to rendering issues, I don't think I
+// can do it other wise.
+
+////////////////////
+// Script Part #1 //
+////////////////////
+
+// If light mode detected, in reality, if nothing is detected lmao
+// Dark mode feature was removed lol
+// Set up base pattern
+var pattern = Trianglify({
+ height: window.innerHeight, // White: #fdfbfb, Salmon: #cc3300
+ width: window.innerWidth,
+ // Christmas Colours:
+ x_colors: ['#040404', '#f9f9f9', '#fffff4', '#fbf7f5', '#d55454'], // Cappuccino: ['#854442', '#3c2f2f', '#fff4e6', '#be9b7b', '#4b3832']
+ y_colors: ['#f9f1f1', '#f9f9f9', '#fffff4', '#fbf7f5', '#f9f1f1'], // Random colour generator: "#"+((1<<24)*Math.random()|0).toString(16)
+ //
+ // Normal Colours:
+ // x_colors: ['#040404', '#f9f9f9', '#fffff4', '#fbf7f5', '#d55454'],
+ // y_colors: ['#f9f1f1', '#f9f9f9', '#fffff4', '#fbf7f5', '#f9f1f1'],
+ //
+ // Christmas Colours:
+ // x_colors: ['#0F8A5F', '#f9f9f9', '#fffff4', '#fbf7f5', '#CC231E'],
+ // y_colors: ['#f9f1f1', '#f9f9f9', '#fffff4', '#fbf7f5', '#f9f1f1'],
+ //
+ variance: 10, // Gives it more style
+ seed: Number.parseInt(Math.floor(Math.random() * 100)), // TODO: Live seed transitioning.
+ cell_size: 160 // Cell size
+});
+
+// REMOVED bc looked ugly
+// If dark mode detected
+// if (matchMedia('(prefers-color-scheme: dark)').matches) {
+// var pattern = Trianglify({
+// height: window.innerHeight, // White: #fdfbfb, Salmon: #cc3300
+// width: window.innerWidth,
+// x_colors: ['#040404', '#111111', '#111111', '#111111', '#d55454'], // Cappuccino: ['#854442', '#3c2f2f', '#fff4e6', '#be9b7b', '#4b3832']
+// y_colors: ['#f9f1f1', '#111111', '#111111', '#111111', '#f9f1f1'], // Random colour generator: "#"+((1<<24)*Math.random()|0).toString(16)
+// variance: 10, // Gives it more style
+// seed: Number.parseInt(Math.floor(Math.random() * 100)), // TODO: Live seed transitioning.
+// cell_size: 160 // Cell size
+// });
+// }
+
+// // Canvas
+// document.body.appendChild(pattern.canvas())
+
+// SVG
+document.body.appendChild(pattern.svg());
+
+
+
+// // PNG
+// var png = document.createElement('img')
+// png.src = pattern.png()
+// document.body.appendChild(png)
+
+////////////////////
+// Script Part #2 //
+////////////////////
+
+$('.title-wrapper').css('width', window.innerWidth);
+$('.title-wrapper').css('height', window.innerHeight);
+
+
+var time = 10,
+ $paths = $('body').find('svg').find('path'),
+ pathCollection = $paths.get(),
+ count = $paths.length;
+
+// // Log variable "count"
+// console.log(count);
+
+pathCollection.sort(function () {
+ return Math.random() * 10 > 5 ? 1 : -1;
+});
+
+function showText() {
+ var title = $('h1'),
+ subtitle = $('h2');
+
+ title.removeClass('hidden');
+ setTimeout(function () {
+ subtitle.removeClass('hidden');
+ }, 500);
+}
+
+setTimeout(function () {
+ $.each(pathCollection, function (i, el) {
+ var $path = $(this);
+ setTimeout(function () {
+
+ $path.css('opacity', '1');
+ }, time);
+ time += 10;
+
+ if (i + 1 === count) {
+ setTimeout(function () {
+ showText();
+ }, 2000);
+ }
+
+ });
+}, 2000); \ No newline at end of file
diff --git a/js/hide-context-menu.js b/js/hide-context-menu.js
new file mode 100644
index 0000000..e6b3512
--- /dev/null
+++ b/js/hide-context-menu.js
@@ -0,0 +1,3 @@
+document.addEventListener("contextmenu", function (e) {
+ e.preventDefault();
+}, false); \ No newline at end of file
diff --git a/js/lib/particles.min.js b/js/lib/particles.min.js
new file mode 100644
index 0000000..b3d46d1
--- /dev/null
+++ b/js/lib/particles.min.js
@@ -0,0 +1,9 @@
+/* -----------------------------------------------
+/* Author : Vincent Garreau - vincentgarreau.com
+/* MIT license: http://opensource.org/licenses/MIT
+/* Demo / Generator : vincentgarreau.com/particles.js
+/* GitHub : github.com/VincentGarreau/particles.js
+/* How to use? : Check the GitHub README
+/* v2.0.0
+/* ----------------------------------------------- */
+function hexToRgb(e){var a=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(a,function(e,a,t,i){return a+a+t+t+i+i});var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function clamp(e,a,t){return Math.min(Math.max(e,a),t)}function isInArray(e,a){return a.indexOf(e)>-1}var pJS=function(e,a){var t=document.querySelector("#"+e+" > .particles-js-canvas-el");this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var i=this.pJS;a&&Object.deepExtend(i,a),i.tmp.obj={size_value:i.particles.size.value,size_anim_speed:i.particles.size.anim.speed,move_speed:i.particles.move.speed,line_linked_distance:i.particles.line_linked.distance,line_linked_width:i.particles.line_linked.width,mode_grab_distance:i.interactivity.modes.grab.distance,mode_bubble_distance:i.interactivity.modes.bubble.distance,mode_bubble_size:i.interactivity.modes.bubble.size,mode_repulse_distance:i.interactivity.modes.repulse.distance},i.fn.retinaInit=function(){i.retina_detect&&window.devicePixelRatio>1?(i.canvas.pxratio=window.devicePixelRatio,i.tmp.retina=!0):(i.canvas.pxratio=1,i.tmp.retina=!1),i.canvas.w=i.canvas.el.offsetWidth*i.canvas.pxratio,i.canvas.h=i.canvas.el.offsetHeight*i.canvas.pxratio,i.particles.size.value=i.tmp.obj.size_value*i.canvas.pxratio,i.particles.size.anim.speed=i.tmp.obj.size_anim_speed*i.canvas.pxratio,i.particles.move.speed=i.tmp.obj.move_speed*i.canvas.pxratio,i.particles.line_linked.distance=i.tmp.obj.line_linked_distance*i.canvas.pxratio,i.interactivity.modes.grab.distance=i.tmp.obj.mode_grab_distance*i.canvas.pxratio,i.interactivity.modes.bubble.distance=i.tmp.obj.mode_bubble_distance*i.canvas.pxratio,i.particles.line_linked.width=i.tmp.obj.line_linked_width*i.canvas.pxratio,i.interactivity.modes.bubble.size=i.tmp.obj.mode_bubble_size*i.canvas.pxratio,i.interactivity.modes.repulse.distance=i.tmp.obj.mode_repulse_distance*i.canvas.pxratio},i.fn.canvasInit=function(){i.canvas.ctx=i.canvas.el.getContext("2d")},i.fn.canvasSize=function(){i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i&&i.interactivity.events.resize&&window.addEventListener("resize",function(){i.canvas.w=i.canvas.el.offsetWidth,i.canvas.h=i.canvas.el.offsetHeight,i.tmp.retina&&(i.canvas.w*=i.canvas.pxratio,i.canvas.h*=i.canvas.pxratio),i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i.particles.move.enable||(i.fn.particlesEmpty(),i.fn.particlesCreate(),i.fn.particlesDraw(),i.fn.vendors.densityAutoParticles()),i.fn.vendors.densityAutoParticles()})},i.fn.canvasPaint=function(){i.canvas.ctx.fillRect(0,0,i.canvas.w,i.canvas.h)},i.fn.canvasClear=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h)},i.fn.particle=function(e,a,t){if(this.radius=(i.particles.size.random?Math.random():1)*i.particles.size.value,i.particles.size.anim.enable&&(this.size_status=!1,this.vs=i.particles.size.anim.speed/100,i.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=t?t.x:Math.random()*i.canvas.w,this.y=t?t.y:Math.random()*i.canvas.h,this.x>i.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>i.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),i.particles.move.bounce&&i.fn.vendors.checkOverlap(this,t),this.color={},"object"==typeof e.value)if(e.value instanceof Array){var s=e.value[Math.floor(Math.random()*i.particles.color.value.length)];this.color.rgb=hexToRgb(s)}else void 0!=e.value.r&&void 0!=e.value.g&&void 0!=e.value.b&&(this.color.rgb={r:e.value.r,g:e.value.g,b:e.value.b}),void 0!=e.value.h&&void 0!=e.value.s&&void 0!=e.value.l&&(this.color.hsl={h:e.value.h,s:e.value.s,l:e.value.l});else"random"==e.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof e.value&&(this.color=e,this.color.rgb=hexToRgb(this.color.value));this.opacity=(i.particles.opacity.random?Math.random():1)*i.particles.opacity.value,i.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=i.particles.opacity.anim.speed/100,i.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var n={};switch(i.particles.move.direction){case"top":n={x:0,y:-1};break;case"top-right":n={x:.5,y:-.5};break;case"right":n={x:1,y:-0};break;case"bottom-right":n={x:.5,y:.5};break;case"bottom":n={x:0,y:1};break;case"bottom-left":n={x:-.5,y:1};break;case"left":n={x:-1,y:0};break;case"top-left":n={x:-.5,y:-.5};break;default:n={x:0,y:0}}i.particles.move.straight?(this.vx=n.x,this.vy=n.y,i.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=n.x+Math.random()-.5,this.vy=n.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var r=i.particles.shape.type;if("object"==typeof r){if(r instanceof Array){var c=r[Math.floor(Math.random()*r.length)];this.shape=c}}else this.shape=r;if("image"==this.shape){var o=i.particles.shape;this.img={src:o.image.src,ratio:o.image.width/o.image.height},this.img.ratio||(this.img.ratio=1),"svg"==i.tmp.img_type&&void 0!=i.tmp.source_svg&&(i.fn.vendors.createSvgImg(this),i.tmp.pushing&&(this.img.loaded=!1))}},i.fn.particle.prototype.draw=function(){function e(){i.canvas.ctx.drawImage(r,a.x-t,a.y-t,2*t,2*t/a.img.ratio)}var a=this;if(void 0!=a.radius_bubble)var t=a.radius_bubble;else var t=a.radius;if(void 0!=a.opacity_bubble)var s=a.opacity_bubble;else var s=a.opacity;if(a.color.rgb)var n="rgba("+a.color.rgb.r+","+a.color.rgb.g+","+a.color.rgb.b+","+s+")";else var n="hsla("+a.color.hsl.h+","+a.color.hsl.s+"%,"+a.color.hsl.l+"%,"+s+")";switch(i.canvas.ctx.fillStyle=n,i.canvas.ctx.beginPath(),a.shape){case"circle":i.canvas.ctx.arc(a.x,a.y,t,0,2*Math.PI,!1);break;case"edge":i.canvas.ctx.rect(a.x-t,a.y-t,2*t,2*t);break;case"triangle":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t,a.y+t/1.66,2*t,3,2);break;case"polygon":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t/(i.particles.shape.polygon.nb_sides/3.5),a.y-t/.76,2.66*t/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,1);break;case"star":i.fn.vendors.drawShape(i.canvas.ctx,a.x-2*t/(i.particles.shape.polygon.nb_sides/4),a.y-t/1.52,2*t*2.66/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==i.tmp.img_type)var r=a.img.obj;else var r=i.tmp.img_obj;r&&e()}i.canvas.ctx.closePath(),i.particles.shape.stroke.width>0&&(i.canvas.ctx.strokeStyle=i.particles.shape.stroke.color,i.canvas.ctx.lineWidth=i.particles.shape.stroke.width,i.canvas.ctx.stroke()),i.canvas.ctx.fill()},i.fn.particlesCreate=function(){for(var e=0;e<i.particles.number.value;e++)i.particles.array.push(new i.fn.particle(i.particles.color,i.particles.opacity.value))},i.fn.particlesUpdate=function(){for(var e=0;e<i.particles.array.length;e++){var a=i.particles.array[e];if(i.particles.move.enable){var t=i.particles.move.speed/2;a.x+=a.vx*t,a.y+=a.vy*t}if(i.particles.opacity.anim.enable&&(1==a.opacity_status?(a.opacity>=i.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=i.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),i.particles.size.anim.enable&&(1==a.size_status?(a.radius>=i.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=i.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==i.particles.move.out_mode)var s={x_left:a.radius,x_right:i.canvas.w,y_top:a.radius,y_bottom:i.canvas.h};else var s={x_left:-a.radius,x_right:i.canvas.w+a.radius,y_top:-a.radius,y_bottom:i.canvas.h+a.radius};switch(a.x-a.radius>i.canvas.w?(a.x=s.x_left,a.y=Math.random()*i.canvas.h):a.x+a.radius<0&&(a.x=s.x_right,a.y=Math.random()*i.canvas.h),a.y-a.radius>i.canvas.h?(a.y=s.y_top,a.x=Math.random()*i.canvas.w):a.y+a.radius<0&&(a.y=s.y_bottom,a.x=Math.random()*i.canvas.w),i.particles.move.out_mode){case"bounce":a.x+a.radius>i.canvas.w?a.vx=-a.vx:a.x-a.radius<0&&(a.vx=-a.vx),a.y+a.radius>i.canvas.h?a.vy=-a.vy:a.y-a.radius<0&&(a.vy=-a.vy)}if(isInArray("grab",i.interactivity.events.onhover.mode)&&i.fn.modes.grabParticle(a),(isInArray("bubble",i.interactivity.events.onhover.mode)||isInArray("bubble",i.interactivity.events.onclick.mode))&&i.fn.modes.bubbleParticle(a),(isInArray("repulse",i.interactivity.events.onhover.mode)||isInArray("repulse",i.interactivity.events.onclick.mode))&&i.fn.modes.repulseParticle(a),i.particles.line_linked.enable||i.particles.move.attract.enable)for(var n=e+1;n<i.particles.array.length;n++){var r=i.particles.array[n];i.particles.line_linked.enable&&i.fn.interact.linkParticles(a,r),i.particles.move.attract.enable&&i.fn.interact.attractParticles(a,r),i.particles.move.bounce&&i.fn.interact.bounceParticles(a,r)}}},i.fn.particlesDraw=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h),i.fn.particlesUpdate();for(var e=0;e<i.particles.array.length;e++){var a=i.particles.array[e];a.draw()}},i.fn.particlesEmpty=function(){i.particles.array=[]},i.fn.particlesRefresh=function(){cancelRequestAnimFrame(i.fn.checkAnimFrame),cancelRequestAnimFrame(i.fn.drawAnimFrame),i.tmp.source_svg=void 0,i.tmp.img_obj=void 0,i.tmp.count_svg=0,i.fn.particlesEmpty(),i.fn.canvasClear(),i.fn.vendors.start()},i.fn.interact.linkParticles=function(e,a){var t=e.x-a.x,s=e.y-a.y,n=Math.sqrt(t*t+s*s);if(n<=i.particles.line_linked.distance){var r=i.particles.line_linked.opacity-n/(1/i.particles.line_linked.opacity)/i.particles.line_linked.distance;if(r>0){var c=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+c.r+","+c.g+","+c.b+","+r+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(a.x,a.y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}},i.fn.interact.attractParticles=function(e,a){var t=e.x-a.x,s=e.y-a.y,n=Math.sqrt(t*t+s*s);if(n<=i.particles.line_linked.distance){var r=t/(1e3*i.particles.move.attract.rotateX),c=s/(1e3*i.particles.move.attract.rotateY);e.vx-=r,e.vy-=c,a.vx+=r,a.vy+=c}},i.fn.interact.bounceParticles=function(e,a){var t=e.x-a.x,i=e.y-a.y,s=Math.sqrt(t*t+i*i),n=e.radius+a.radius;n>=s&&(e.vx=-e.vx,e.vy=-e.vy,a.vx=-a.vx,a.vy=-a.vy)},i.fn.modes.pushParticles=function(e,a){i.tmp.pushing=!0;for(var t=0;e>t;t++)i.particles.array.push(new i.fn.particle(i.particles.color,i.particles.opacity.value,{x:a?a.pos_x:Math.random()*i.canvas.w,y:a?a.pos_y:Math.random()*i.canvas.h})),t==e-1&&(i.particles.move.enable||i.fn.particlesDraw(),i.tmp.pushing=!1)},i.fn.modes.removeParticles=function(e){i.particles.array.splice(0,e),i.particles.move.enable||i.fn.particlesDraw()},i.fn.modes.bubbleParticle=function(e){function a(){e.opacity_bubble=e.opacity,e.radius_bubble=e.radius}function t(a,t,s,n,c){if(a!=t)if(i.tmp.bubble_duration_end){if(void 0!=s){var o=n-p*(n-a)/i.interactivity.modes.bubble.duration,l=a-o;d=a+l,"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else if(r<=i.interactivity.modes.bubble.distance){if(void 0!=s)var v=s;else var v=n;if(v!=a){var d=n-p*(n-a)/i.interactivity.modes.bubble.duration;"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else"size"==c&&(e.radius_bubble=void 0),"opacity"==c&&(e.opacity_bubble=void 0)}if(i.interactivity.events.onhover.enable&&isInArray("bubble",i.interactivity.events.onhover.mode)){var s=e.x-i.interactivity.mouse.pos_x,n=e.y-i.interactivity.mouse.pos_y,r=Math.sqrt(s*s+n*n),c=1-r/i.interactivity.modes.bubble.distance;if(r<=i.interactivity.modes.bubble.distance){if(c>=0&&"mousemove"==i.interactivity.status){if(i.interactivity.modes.bubble.size!=i.particles.size.value)if(i.interactivity.modes.bubble.size>i.particles.size.value){var o=e.radius+i.interactivity.modes.bubble.size*c;o>=0&&(e.radius_bubble=o)}else{var l=e.radius-i.interactivity.modes.bubble.size,o=e.radius-l*c;o>0?e.radius_bubble=o:e.radius_bubble=0}if(i.interactivity.modes.bubble.opacity!=i.particles.opacity.value)if(i.interactivity.modes.bubble.opacity>i.particles.opacity.value){var v=i.interactivity.modes.bubble.opacity*c;v>e.opacity&&v<=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}else{var v=e.opacity-(i.particles.opacity.value-i.interactivity.modes.bubble.opacity)*c;v<e.opacity&&v>=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}}}else a();"mouseleave"==i.interactivity.status&&a()}else if(i.interactivity.events.onclick.enable&&isInArray("bubble",i.interactivity.events.onclick.mode)){if(i.tmp.bubble_clicking){var s=e.x-i.interactivity.mouse.click_pos_x,n=e.y-i.interactivity.mouse.click_pos_y,r=Math.sqrt(s*s+n*n),p=((new Date).getTime()-i.interactivity.mouse.click_time)/1e3;p>i.interactivity.modes.bubble.duration&&(i.tmp.bubble_duration_end=!0),p>2*i.interactivity.modes.bubble.duration&&(i.tmp.bubble_clicking=!1,i.tmp.bubble_duration_end=!1)}i.tmp.bubble_clicking&&(t(i.interactivity.modes.bubble.size,i.particles.size.value,e.radius_bubble,e.radius,"size"),t(i.interactivity.modes.bubble.opacity,i.particles.opacity.value,e.opacity_bubble,e.opacity,"opacity"))}},i.fn.modes.repulseParticle=function(e){function a(){var a=Math.atan2(d,p);if(e.vx=u*Math.cos(a),e.vy=u*Math.sin(a),"bounce"==i.particles.move.out_mode){var t={x:e.x+e.vx,y:e.y+e.vy};t.x+e.radius>i.canvas.w?e.vx=-e.vx:t.x-e.radius<0&&(e.vx=-e.vx),t.y+e.radius>i.canvas.h?e.vy=-e.vy:t.y-e.radius<0&&(e.vy=-e.vy)}}if(i.interactivity.events.onhover.enable&&isInArray("repulse",i.interactivity.events.onhover.mode)&&"mousemove"==i.interactivity.status){var t=e.x-i.interactivity.mouse.pos_x,s=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(t*t+s*s),r={x:t/n,y:s/n},c=i.interactivity.modes.repulse.distance,o=100,l=clamp(1/c*(-1*Math.pow(n/c,2)+1)*c*o,0,50),v={x:e.x+r.x*l,y:e.y+r.y*l};"bounce"==i.particles.move.out_mode?(v.x-e.radius>0&&v.x+e.radius<i.canvas.w&&(e.x=v.x),v.y-e.radius>0&&v.y+e.radius<i.canvas.h&&(e.y=v.y)):(e.x=v.x,e.y=v.y)}else if(i.interactivity.events.onclick.enable&&isInArray("repulse",i.interactivity.events.onclick.mode))if(i.tmp.repulse_finish||(i.tmp.repulse_count++,i.tmp.repulse_count==i.particles.array.length&&(i.tmp.repulse_finish=!0)),i.tmp.repulse_clicking){var c=Math.pow(i.interactivity.modes.repulse.distance/6,3),p=i.interactivity.mouse.click_pos_x-e.x,d=i.interactivity.mouse.click_pos_y-e.y,m=p*p+d*d,u=-c/m*1;c>=m&&a()}else 0==i.tmp.repulse_clicking&&(e.vx=e.vx_i,e.vy=e.vy_i)},i.fn.modes.grabParticle=function(e){if(i.interactivity.events.onhover.enable&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,s=Math.sqrt(a*a+t*t);if(s<=i.interactivity.modes.grab.distance){var n=i.interactivity.modes.grab.line_linked.opacity-s/(1/i.interactivity.modes.grab.line_linked.opacity)/i.interactivity.modes.grab.distance;if(n>0){var r=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+n+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x,i.interactivity.mouse.pos_y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}}},i.fn.vendors.eventsListeners=function(){"window"==i.interactivity.detect_on?i.interactivity.el=window:i.interactivity.el=i.canvas.el,(i.interactivity.events.onhover.enable||i.interactivity.events.onclick.enable)&&(i.interactivity.el.addEventListener("mousemove",function(e){if(i.interactivity.el==window)var a=e.clientX,t=e.clientY;else var a=e.offsetX||e.clientX,t=e.offsetY||e.clientY;i.interactivity.mouse.pos_x=a,i.interactivity.mouse.pos_y=t,i.tmp.retina&&(i.interactivity.mouse.pos_x*=i.canvas.pxratio,i.interactivity.mouse.pos_y*=i.canvas.pxratio),i.interactivity.status="mousemove"}),i.interactivity.el.addEventListener("mouseleave",function(e){i.interactivity.mouse.pos_x=null,i.interactivity.mouse.pos_y=null,i.interactivity.status="mouseleave"})),i.interactivity.events.onclick.enable&&i.interactivity.el.addEventListener("click",function(){if(i.interactivity.mouse.click_pos_x=i.interactivity.mouse.pos_x,i.interactivity.mouse.click_pos_y=i.interactivity.mouse.pos_y,i.interactivity.mouse.click_time=(new Date).getTime(),i.interactivity.events.onclick.enable)switch(i.interactivity.events.onclick.mode){case"push":i.particles.move.enable?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):1==i.interactivity.modes.push.particles_nb?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):i.interactivity.modes.push.particles_nb>1&&i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);break;case"remove":i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);break;case"bubble":i.tmp.bubble_clicking=!0;break;case"repulse":i.tmp.repulse_clicking=!0,i.tmp.repulse_count=0,i.tmp.repulse_finish=!1,setTimeout(function(){i.tmp.repulse_clicking=!1},1e3*i.interactivity.modes.repulse.duration)}})},i.fn.vendors.densityAutoParticles=function(){if(i.particles.number.density.enable){var e=i.canvas.el.width*i.canvas.el.height/1e3;i.tmp.retina&&(e/=2*i.canvas.pxratio);var a=e*i.particles.number.value/i.particles.number.density.value_area,t=i.particles.array.length-a;0>t?i.fn.modes.pushParticles(Math.abs(t)):i.fn.modes.removeParticles(t)}},i.fn.vendors.checkOverlap=function(e,a){for(var t=0;t<i.particles.array.length;t++){var s=i.particles.array[t],n=e.x-s.x,r=e.y-s.y,c=Math.sqrt(n*n+r*r);c<=e.radius+s.radius&&(e.x=a?a.x:Math.random()*i.canvas.w,e.y=a?a.y:Math.random()*i.canvas.h,i.fn.vendors.checkOverlap(e))}},i.fn.vendors.createSvgImg=function(e){var a=i.tmp.source_svg,t=/#([0-9A-F]{3,6})/gi,s=a.replace(t,function(a,t,i,s){if(e.color.rgb)var n="rgba("+e.color.rgb.r+","+e.color.rgb.g+","+e.color.rgb.b+","+e.opacity+")";else var n="hsla("+e.color.hsl.h+","+e.color.hsl.s+"%,"+e.color.hsl.l+"%,"+e.opacity+")";return n}),n=new Blob([s],{type:"image/svg+xml;charset=utf-8"}),r=window.URL||window.webkitURL||window,c=r.createObjectURL(n),o=new Image;o.addEventListener("load",function(){e.img.obj=o,e.img.loaded=!0,r.revokeObjectURL(c),i.tmp.count_svg++}),o.src=c},i.fn.vendors.destroypJS=function(){cancelAnimationFrame(i.fn.drawAnimFrame),t.remove(),pJSDom=null},i.fn.vendors.drawShape=function(e,a,t,i,s,n){var r=s*n,c=s/n,o=180*(c-2)/c,l=Math.PI-Math.PI*o/180;e.save(),e.beginPath(),e.translate(a,t),e.moveTo(0,0);for(var v=0;r>v;v++)e.lineTo(i,0),e.translate(i,0),e.rotate(l);e.fill(),e.restore()},i.fn.vendors.exportImg=function(){window.open(i.canvas.el.toDataURL("image/png"),"_blank")},i.fn.vendors.loadImg=function(e){if(i.tmp.img_error=void 0,""!=i.particles.shape.image.src)if("svg"==e){var a=new XMLHttpRequest;a.open("GET",i.particles.shape.image.src),a.onreadystatechange=function(e){4==a.readyState&&(200==a.status?(i.tmp.source_svg=e.currentTarget.response,i.fn.vendors.checkBeforeDraw()):(console.log("Error pJS - Image not found"),i.tmp.img_error=!0))},a.send()}else{var t=new Image;t.addEventListener("load",function(){i.tmp.img_obj=t,i.fn.vendors.checkBeforeDraw()}),t.src=i.particles.shape.image.src}else console.log("Error pJS - No image.src"),i.tmp.img_error=!0},i.fn.vendors.draw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type?i.tmp.count_svg>=i.particles.number.value?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):void 0!=i.tmp.img_obj?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame))},i.fn.vendors.checkBeforeDraw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type&&void 0==i.tmp.source_svg?i.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(i.tmp.checkAnimFrame),i.tmp.img_error||(i.fn.vendors.init(),i.fn.vendors.draw())):(i.fn.vendors.init(),i.fn.vendors.draw())},i.fn.vendors.init=function(){i.fn.retinaInit(),i.fn.canvasInit(),i.fn.canvasSize(),i.fn.canvasPaint(),i.fn.particlesCreate(),i.fn.vendors.densityAutoParticles(),i.particles.line_linked.color_rgb_line=hexToRgb(i.particles.line_linked.color)},i.fn.vendors.start=function(){isInArray("image",i.particles.shape.type)?(i.tmp.img_type=i.particles.shape.image.src.substr(i.particles.shape.image.src.length-3),i.fn.vendors.loadImg(i.tmp.img_type)):i.fn.vendors.checkBeforeDraw()},i.fn.vendors.eventsListeners(),i.fn.vendors.start()};Object.deepExtend=function(e,a){for(var t in a)a[t]&&a[t].constructor&&a[t].constructor===Object?(e[t]=e[t]||{},arguments.callee(e[t],a[t])):e[t]=a[t];return e},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),window.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),window.pJSDom=[],window.particlesJS=function(e,a){"string"!=typeof e&&(a=e,e="particles-js"),e||(e="particles-js");var t=document.getElementById(e),i="particles-js-canvas-el",s=t.getElementsByClassName(i);if(s.length)for(;s.length>0;)t.removeChild(s[0]);var n=document.createElement("canvas");n.className=i,n.style.width="100%",n.style.height="100%";var r=document.getElementById(e).appendChild(n);null!=r&&pJSDom.push(new pJS(e,a))},window.particlesJS.load=function(e,a,t){var i=new XMLHttpRequest;i.open("GET",a),i.onreadystatechange=function(a){if(4==i.readyState)if(200==i.status){var s=JSON.parse(a.currentTarget.response);window.particlesJS(e,s),t&&t()}else console.log("Error pJS - XMLHttpRequest status: "+i.status),console.log("Error pJS - File config not found")},i.send()}; \ No newline at end of file
diff --git a/js/loader-animation.js b/js/loader-animation.js
new file mode 100644
index 0000000..8cc039c
--- /dev/null
+++ b/js/loader-animation.js
@@ -0,0 +1,4 @@
+// LOADER ANIMATION
+$(window).on("load", function () {
+ $(".loader-wrapper").fadeOut("slow");
+}); \ No newline at end of file
diff --git a/js/performance-stats.js b/js/performance-stats.js
new file mode 100644
index 0000000..f9762d8
--- /dev/null
+++ b/js/performance-stats.js
@@ -0,0 +1,26 @@
+var stats = new Stats();
+stats.setMode(0);
+document.body.appendChild(stats.domElement);
+
+var canvas = document.createElement('canvas');
+canvas.width = 512;
+canvas.height = 512;
+document.body.appendChild(canvas);
+
+var context = canvas.getContext('2d');
+context.fillStyle = 'rgba(127,0,255,0.05)';
+setInterval(function () {
+ var time = Date.now() * 0.001;
+ context.clearRect(0, 0, 512, 512);
+ stats.begin();
+ for (var i = 0; i < 2000; i++) {
+ var x = Math.cos(time + i * 0.01) * 196 + 256;
+ var y = Math.sin(time + i * 0.01234) * 196 + 256;
+ context.beginPath();
+ context.arc(x, y, 10, 0, Math.PI * 2, true);
+ context.fill();
+ // DO NOT ENABLE THIS LMAO
+ // document.write("Text to display.");
+ }
+ stats.end();
+}, 1000 / 60); \ No newline at end of file
diff --git a/js/redirect-to-desktop.js b/js/redirect-to-desktop.js
new file mode 100644
index 0000000..e621a5d
--- /dev/null
+++ b/js/redirect-to-desktop.js
@@ -0,0 +1,5 @@
+// Checks if user is on desktop
+// 3/29/2020, 13:56, Not very performance cool if I think of it lol
+if (screen.width > 768) {
+ location.href = '/';
+}
diff --git a/js/redirect-to-mobile.js b/js/redirect-to-mobile.js
new file mode 100644
index 0000000..db80ca9
--- /dev/null
+++ b/js/redirect-to-mobile.js
@@ -0,0 +1,4 @@
+// Checks if user is on mobile
+if (screen.width < 768) {
+ location.href = '/';
+}
diff --git a/js/redirect-to-root.js b/js/redirect-to-root.js
new file mode 100644
index 0000000..0c4a82d
--- /dev/null
+++ b/js/redirect-to-root.js
@@ -0,0 +1 @@
+location.href = "/";
diff --git a/js/refresh-on-media.js b/js/refresh-on-media.js
new file mode 100644
index 0000000..76bb6da
--- /dev/null
+++ b/js/refresh-on-media.js
@@ -0,0 +1,24 @@
+var context;
+var $window = $(window);
+
+// run this right away to set context
+if ($window.width() <= 768) {
+ context = 'small';
+} else if (768 < $window.width() < 970) {
+ context = 'medium';
+} else {
+ context = 'large';
+}
+
+// refresh the page only if you're crossing into a context
+// that isn't already set
+$(window).resize(function() {
+ if(($window.width() <= 768) && (context != 'small')) {
+ //refresh the page
+ location.reload();
+ } else if ((768 < $window.width() < 970) && (context != 'medium')) {
+ location.reload();
+ } else if (context != 'large') {
+ location.reload();
+ }
+});
diff --git a/konami/.htaccess b/konami/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/konami/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/konami/assets/audio/midi.mp3 b/konami/assets/audio/midi.mp3
new file mode 100644
index 0000000..2f6bbe4
--- /dev/null
+++ b/konami/assets/audio/midi.mp3
Binary files differ
diff --git a/konami/assets/audio/midi.mp3.txt b/konami/assets/audio/midi.mp3.txt
new file mode 100644
index 0000000..3b8e91b
--- /dev/null
+++ b/konami/assets/audio/midi.mp3.txt
@@ -0,0 +1,31 @@
+ // CREDITS: //
+
+Title: The Classics - A New Retro Synthwave Mix
+
+Uploader: Confused Bi-Product of a Misinformed Culture
+
+YouTube Video Link: https://www.youtube.com/watch?v=5WVhdmNiuuM&t=76s
+
+Full Credits of ALL Artists:
+00:00 - LazerHawk - Space is the Place
+01:57 - Tokyo Rose - Need For Speed
+04:08 - Daniel Deluxe - Night Stalker
+06:37 - OGRE - Negotiation's Over
+07:35 - Tokyo Rose - Tokyo Burnout
+09:30 - Dynatron - Rise to the Stars
+13:13 - LazerHawk - Electric Groove
+17:55 - Arcade High - Outrun This!
+20:53 - Zombie Hyperdrive - Red Eyes
+24:07 - Dynatron - Propulsion Overdrive
+26:56 - d.notive - Hell's Highway
+28:14 - Grum - Power
+30:31 - Dynatron - Unquestionable Judgment
+35:10 - OGRE - The Bench
+38:07 - DANCE WITH THE DEAD - Venom
+40:28 - Danger Mode - Road Rage
+43:42 - LazerHawk - King of the Streets
+46:27 - Wice - Cruise Control
+49:41 - KN1GHT - Osaka
+53:37 - Trevor Something - Miami Nights
+
+Note: I cut the track at 10:00 minutes, so the credits of the artists exceed my track limit, I just wanted to include everyone. \ No newline at end of file
diff --git a/konami/assets/bg/bg.gif b/konami/assets/bg/bg.gif
new file mode 100644
index 0000000..29f21e8
--- /dev/null
+++ b/konami/assets/bg/bg.gif
Binary files differ
diff --git a/konami/assets/images/Email2.gif b/konami/assets/images/Email2.gif
new file mode 100644
index 0000000..bfbcaad
--- /dev/null
+++ b/konami/assets/images/Email2.gif
Binary files differ
diff --git a/konami/assets/images/bullet.png b/konami/assets/images/bullet.png
new file mode 100644
index 0000000..d234fc2
--- /dev/null
+++ b/konami/assets/images/bullet.png
Binary files differ
diff --git a/konami/assets/images/cd-rom.gif b/konami/assets/images/cd-rom.gif
new file mode 100644
index 0000000..9bbfb95
--- /dev/null
+++ b/konami/assets/images/cd-rom.gif
Binary files differ
diff --git a/konami/assets/images/geoshape.gif b/konami/assets/images/geoshape.gif
new file mode 100644
index 0000000..2e6b5c2
--- /dev/null
+++ b/konami/assets/images/geoshape.gif
Binary files differ
diff --git a/konami/assets/images/small-spinning-globe3.gif b/konami/assets/images/small-spinning-globe3.gif
new file mode 100644
index 0000000..e562772
--- /dev/null
+++ b/konami/assets/images/small-spinning-globe3.gif
Binary files differ
diff --git a/konami/assets/images/smiley face cursor.cur b/konami/assets/images/smiley face cursor.cur
new file mode 100644
index 0000000..36fd0f2
--- /dev/null
+++ b/konami/assets/images/smiley face cursor.cur
Binary files differ
diff --git a/konami/bypass/index.html b/konami/bypass/index.html
new file mode 100644
index 0000000..8c076cb
--- /dev/null
+++ b/konami/bypass/index.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <meta name="theme-color" content="#FFF">
+ <title>s1nical - Landing Page</title>
+ <!-- External Libraries -->
+ <link href='https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic' rel='stylesheet' type='text/css'>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <script src="https://rawgit.com/WeiChiaChang/Easter-egg/master/easter-eggs-collection.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/konami/css/main.css">
+ <!-- Invisable Scripts -->
+ <script src="/konami/js/main.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+ <!-- Site metadata -->
+ <meta name="description" content="Konami Archive Bypass">
+ <meta property="og:description" content="Konami Archive Bypass">
+ <meta property="og:title" content="s1nical - Landing Page">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/konami/bypass">
+ <!-- Favicons -->
+ <link rel="apple-touch-icon" sizes="128x128" href="/konami/assets/images/small-spinning-globe3.gif">
+ <link rel="icon" type="image/gif" href="/konami/assets/images/small-spinning-globe3.gif" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/konami/bypass">
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Konami Archive Bypass",
+ "headline": "Konami Archive Bypass",
+ "url": "https://kyzer.co/konami/bypass",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/",
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/inter.css"
+ integrity="sha256-DyLTj16AbuvawyWJMPz4tJNp46iGflE/fWYAoU2IGpk=" crossorigin="anonymous">
+ </head>
+
+ <body>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a> <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a>
+ <a href="https://kyzer.co/status" class="nav-item" active-color="red">Status</a>
+ <a href="/directory/" class="nav-item" active-color="rebeccapurple">Directory</a>
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <!-- Core Site Function, Site Primer/ Base -->
+ <main>
+ <div class="links">
+ <div class="email">
+ <a href="mailto:[email protected]">s1nical</a><br>
+ Full-stack developer.<br><br>
+ </div>
+ <div class="twitter">
+ Follow me on <a href="https://twitter.com/9inny">Twitter</a>.
+ </div>
+ <div class="github">
+ View my code on <a href="https://github.com/8cy">GitHub</a>.
+ </div>
+ </div>
+ </main>
+
+ <div class="ee">
+ <!-- Toasty -->
+ <img class='toasty' src='https://s3-eu-west-1.amazonaws.com/wdildnproject2/toasty.png'>
+ <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
+
+ <!-- Marty -->
+ <audio class="marty" src="https://jigowatt.co.uk/wp-content/themes/client/dist/audio/marty.mp3" preload="auto"></audio>
+ <img class="marty" src="https://jigowatt.co.uk/wp-content/themes/client/dist/img/marty.png" alt="marty">
+
+ <!-- Doc -->
+ <audio class="docbrown" src="https://jigowatt.co.uk/wp-content/themes/client/dist/audio/docbrown.mp3"
+ preload="auto"></audio>
+ <img class="docbrown" src="https://jigowatt.co.uk/wp-content/themes/client/dist/img/docbrown.png" alt="doc">
+
+ <!-- Biff -->
+ <audio class="biff" src="https://jigowatt.co.uk/wp-content/themes/client/dist/audio/biff.mp3" preload="auto"></audio>
+ <img class="biff" src="https://jigowatt.co.uk/wp-content/themes/client/dist/img/biff.png" alt="biff">
+
+ <!-- Goldie -->
+ <audio class="goldie" src="https://jigowatt.co.uk/wp-content/themes/client/dist/audio/goldie.mp3"
+ preload="auto"></audio>
+ <img class="goldie" src="https://jigowatt.co.uk/wp-content/themes/client/dist/img/goldie.png" alt="goldie">
+ </div>
+
+ <!-- Background Music
+ // CREDITS: //
+
+ Title: The Classics - A New Retro Synthwave Mix
+
+ Uploader: Confused Bi-Product of a Misinformed Culture
+
+ Full Credits: https://kyzer.co/konami/assets/audio/midi.mp3.txt
+ -->
+ <audio src="/konami/assets/audio/midi.mp3" autoplay id="music">
+ <p>If you are reading this, it is because your browser does not support the audio element.</p>
+ <script>
+ var audio = document.getElementById("music");
+ audio.volume = 0.1; // Volume Adjuster, might bind it to "- and +" one day if possible.
+ </script>
+ </audio>
+
+ </body>
+
+</html> \ No newline at end of file
diff --git a/konami/css/main.css b/konami/css/main.css
new file mode 100644
index 0000000..3826e15
--- /dev/null
+++ b/konami/css/main.css
@@ -0,0 +1,297 @@
+/* BACKGROUND SPARKLES CSS */
+
+html, body {
+ margin: 0 0;
+ padding: 0 0;
+ text-align: center;
+ font-size: 0;
+ background: url(../assets/bg/bg.gif);
+ cursor: url(../assets/images/smiley\ face\ cursor.cur), default;
+ overflow-X: hidden; /* Toasty */
+}
+
+/* ORINGINAL SITE CSS */
+html {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+}
+
+*,
+*:before,
+*:after {
+ -webkit-box-sizing: inherit;
+ box-sizing: inherit;
+}
+
+html, body {
+ height: 100%;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+}
+
+body {
+ font: normal 20px/1.4 'Inter', sans-serif;
+ margin: 0 1em;
+ padding: 1em 0;
+ color: red;
+ background: none;
+}
+
+main {
+ font-size: 6vh;
+ line-height: 1.2;
+ max-width: 75vh;
+}
+
+@media(max-width: 768px) {
+ main {
+ margin: auto;
+ width: 100%;
+ }
+}
+
+.links a {
+ background-color: yellow;
+}
+
+.email a:hover,
+.email a:focus {
+ background: url(../assets/images/Email2.gif);
+ color: #fff;
+}
+
+.twitter a:hover,
+.twitter a:focus {
+ background: url(../assets/images/bullet.png);
+ color: #fff;
+}
+
+.github a:hover,
+.github a:focus {
+ background: url(../assets/images/geoshape.gif);
+ color: #fff;
+}
+
+/* NAVIGATION MENU */
+.navigation-bar {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 100%;
+ flex: 1 0 100%;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+
+@media(max-width: 768px) {
+ .navigation-bar {
+ display: none;
+ }
+}
+
+.nav {
+ overflow: hidden;
+ max-width: 100%;
+ background-image: linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet);
+ padding: 0 20px;
+ position: absolute;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.nav-item {
+ color: none;
+ padding: 20px;
+ margin: 0 6px;
+ font-weight: 500;
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.nav-item:before {
+ content: "";
+ position: absolute;
+ bottom: -6px;
+ left: 0;
+ width: 100%;
+ height: 70px;
+ background: url(../assets/images/cd-rom.gif);
+ opacity: 0;
+}
+
+.nav-item:not(.is-active):hover:before {
+ opacity: 1;
+ bottom: 0;
+}
+
+/* TOASTY */
+
+.toasty {
+ position: absolute;
+ left: 110%;
+ bottom: 0;
+}
+
+.flash {
+ animation: flash 1s linear infinite;
+}
+
+.animateIn {
+ animation: 2s left forwards ease;
+}
+
+.code {
+ text-align: center;
+ opacity: 0;
+ position: absolute;
+ top: calc(50% + 40px);
+ left: 50%;
+ transform: translate(-50%);
+ font-family: 'Open Sans Condensed', sans-serif;
+ font-size: 20px;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ border-bottom: 2px solid #333;
+ padding: 0 20px;
+ animation: fade 2.5s 7s forwards linear;
+}
+
+@keyframes fade {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes left {
+ 0% {
+ left: 110%;
+ }
+
+ 50% {
+ left: 80%;
+ }
+
+ 100% {
+ left: 110%;
+ }
+}
+
+@keyframes flash {
+ 0% {
+ border-right: none;
+ }
+
+ 100% {
+ border-right: 0.08em solid #222;
+ }
+}
+
+/* BIFF, MARTY, EMMETT, GOLDIE */
+.eggsfound {
+ background: red;
+ color: white;
+ font-weight: bold;
+ opacity: 0;
+ left: 50%;
+ position: fixed;
+ top: 0;
+ width: 300px;
+ margin-left: -150px;
+ z-index: -300;
+ transition: opacity 0.5s ease;
+ padding: 10px;
+ text-align: center;
+}
+
+.eggsfound.animate {
+ opacity: 1;
+ z-index: 999;
+}
+
+img.marty,
+img.docbrown,
+img.biff,
+img.goldie {
+ bottom: -376px;
+ position: fixed;
+ right: 0;
+ transition: bottom 0.3s ease;
+ z-index: 9999;
+}
+
+.marty-show img.marty,
+.docbrown-show img.docbrown,
+.biff-show img.biff,
+.goldie-show img.goldie {
+ bottom: 0;
+}
+
+p {
+ text-align: center;
+ font-weight: bold;
+ margin: 50vh 0 0 0;
+ font-family: sans-serif;
+}
+
+@media(max-width: 768px) {
+ .ee {
+ display: none;
+ }
+}
+
+/* To remove background sparkles on CSS switch. */
+svg {
+ display: none;
+}
+
+/* CLAIRO */
+.clairo {
+ position: absolute;
+ top: 5px;
+ left: 5px;
+}
+
+/* Mobile Spacing */
+@media(max-width: 411px) {
+ main {
+ margin: auto;
+ width: 76.21%;
+ }
+} \ No newline at end of file
diff --git a/konami/index.html b/konami/index.html
new file mode 100644
index 0000000..fbf49ea
--- /dev/null
+++ b/konami/index.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Konami</title>
+ <!-- Site metadata -->
+ <meta name="description" content="Konami Archive Bypass">
+ <meta property="og:description" content="Konami Archive Bypass">
+ <meta property="og:title" content="s1nical - Konami">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/konami">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/konami">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Konami Archive Bypass",
+ "headline": "Konami Archive Bypass",
+ "url": "https://kyzer.co/konami",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <link rel="shortcut icon" href="/favicon.jpg" type="image/jpg">
+ <!-- External Links -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+</head>
+
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <!--<a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <a href="https://kyzer.co/status" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <div class="content" style="text-align: center;">
+ <h1>Are you sure?</h1>
+ <h2>You are entering a depreciated zone.</h2>
+ <h1>
+ <!-- Filler -->
+ </h1>
+ <a href="/konami/bypass/">Continue</a>
+ <h1>
+ <!-- Filler -->
+ </h1>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+
+</html>
diff --git a/konami/js/main.js b/konami/js/main.js
new file mode 100644
index 0000000..2933594
--- /dev/null
+++ b/konami/js/main.js
@@ -0,0 +1,220 @@
+// LOADER ANIMATION
+$(window).on("load", function () {
+ console.log("UP, UP, DOWN, DOWN, LEFT, RIGHT, LEFT, RIGHT, B, A")
+ console.log("Biff, Marty, Emmett, Goldie")
+ console.log("pie, ufo, walk, cool, balloon, hangover, kirby, no, onmyway, haters, board, snorlax, fly, earth, thankyou, swim, penguin, handsome, tank, jump, winner, fox, mario, joker, rabbit, piggy, psyduck, dragon, salamander, airguitar, pikachu, bravo, ghost, britney, pikarun, catrun, koggy, sonic, doggy, spongebob, gun, money, bird, piqiu, lol, ohhh, nyancat")
+})
+
+// SCROLLING TITLE
+var space = " ";
+var speed = "60";
+var pos = 0;
+var msg = "// s1n.ical // Landing Page ";
+
+function Scroll() {
+ document.title = msg.substring(pos, msg.length) + space + msg.substring(0, pos);
+ pos++;
+ if (pos > msg.length) pos = 0;
+ window.setTimeout("Scroll()", speed);
+}
+Scroll();
+
+// KONAMI CODE FOR TOASTY
+
+// a key map of allowed keys
+var allowedKeys = {
+ 37: 'left',
+ 38: 'up',
+ 39: 'right',
+ 40: 'down',
+ 65: 'a',
+ 66: 'b'
+};
+
+// the 'official' Konami Code sequence
+var konamiCode = ['up', 'up', 'down', 'down', 'left', 'right', 'left', 'right', 'b', 'a'];
+
+// a variable to remember the 'position' the user has reached so far.
+var konamiCodePosition = 0;
+
+// add keydown event listener
+document.addEventListener('keydown', function (e) {
+ // get the value of the key code from the key map
+ var key = allowedKeys[e.keyCode];
+ // get the value of the required key from the konami code
+ var requiredKey = konamiCode[konamiCodePosition];
+
+ // compare the key with the required key
+ if (key == requiredKey) {
+
+ // move to the next key in the konami code sequence
+ konamiCodePosition++;
+
+ // if the last key is reached, activate cheats
+ if (konamiCodePosition == konamiCode.length) {
+ activateCheats();
+ konamiCodePosition = 0;
+ }
+ } else {
+ konamiCodePosition = 0;
+ }
+});
+
+function activateCheats() {
+
+ var audio = new Audio('https://s3-eu-west-1.amazonaws.com/wdildnproject2/toasty.mp3');
+ audio.play();
+
+ $('.toasty').addClass('animateIn');
+ setTimeout(function () {
+ $('.toasty').removeClass('animateIn');
+ }, 3500);
+}
+
+var TxtRotate = function (el, toRotate, period) {
+ this.toRotate = toRotate;
+ this.el = el;
+ this.loopNum = 0;
+ this.period = parseInt(period, 10) || 2000;
+ this.txt = '';
+ this.tick();
+ this.isDeleting = false;
+};
+
+TxtRotate.prototype.tick = function () {
+ var i = this.loopNum % this.toRotate.length;
+ var fullTxt = this.toRotate[i];
+
+ if (this.isDeleting) {
+ this.txt = fullTxt.substring(0, this.txt.length - 1);
+ } else {
+ this.txt = fullTxt.substring(0, this.txt.length + 1);
+ }
+
+ this.el.innerHTML = '<span class="wrap">' + this.txt + '</span>';
+
+ var that = this;
+ var delta = 300 - Math.random() * 100;
+
+
+ setTimeout(function () {
+ that.tick();
+ }, delta);
+};
+
+window.onload = function () {
+ var elements = document.getElementsByClassName('txt-rotate');
+ for (var i = 0; i < elements.length; i++) {
+ var toRotate = elements[i].getAttribute('data-rotate');
+ var period = elements[i].getAttribute('data-period');
+ if (toRotate) {
+ new TxtRotate(elements[i], JSON.parse(toRotate), period);
+ }
+ }
+};
+
+// BIFF, MARTY, EMMETT, GOLDIE
+
+// give $ to jQuery
+(function ($) {
+
+ /**==============================================================
+ * BTTF CHARACTER EASTER EGGS
+ * ==============================================================
+ */
+ var characters = {};
+ var pressedKeys = [];
+
+ /**
+ * Plays the audio clip for a specific easter egg character
+ * @param {string} character name of character
+ */
+ function playAudio(character) {
+ setTimeout(function () {
+ characters[character].audioFile.play();
+ setTimeout(function () {
+ toggleShowChar(character);
+ updateEggs();
+ }, characters[character].audioLength);
+ }, 300);
+ }
+
+ /**
+ * Toggles the display of an easter egg character
+ * @param {string} character character name
+ */
+ function toggleShowChar(character) {
+ $('body').toggleClass(characters[character].name + '-show');
+ }
+
+ /**
+ * Add characters' information once page loads
+ */
+ $(document).ready(function () {
+ characters = {
+ 'guessed': [],
+ 'marty': {
+ 'name': 'marty',
+ 'nameKeys': "77,65,82,84,89",
+ 'audioFile': $('audio.marty')[0],
+ 'audioLength': 1300,
+ },
+ 'docbrown': {
+ 'name': 'docbrown',
+ 'nameKeys': "69,77,77,69,84,84",
+ 'audioFile': $('audio.docbrown')[0],
+ 'audioLength': 2500,
+ },
+ 'biff': {
+ 'name': 'biff',
+ 'nameKeys': "66,73,70,70",
+ 'audioFile': $('audio.biff')[0],
+ 'audioLength': 1100,
+ },
+ 'goldie': {
+ 'name': 'goldie',
+ 'nameKeys': "71,79,76,68,73,69",
+ 'audioFile': $('audio.goldie')[0],
+ 'audioLength': 4000,
+ },
+ 'toasty': {
+ 'name': 'toasty',
+ 'nameKeys': "84,79,65,83,84,89",
+ }
+ };
+ });
+
+ /**
+ * Track character names being typed
+ */
+ $(window).keydown(function (e) {
+
+ pressedKeys.push(e.keyCode);
+
+ // loop through characters
+ for (var character in characters) {
+
+ // if the "pressedKeys" contains the current character name
+ if (pressedKeys.toString().indexOf(characters[character].nameKeys) >= 0) {
+
+ // reset the pressedKeys array
+ pressedKeys = [];
+
+ // add "show" class to animate the character in
+ toggleShowChar(character);
+
+ if ($.inArray(character, characters.guessed) === -1) {
+ characters.guessed.push(character);
+ }
+
+ // wait a second and play the character's audio file
+ playAudio(character);
+ }
+ }
+
+ // reset pressedKeys at 50 keypresses to save memory
+ if (pressedKeys.length > 500) { pressedKeys = []; }
+
+ });
+
+})(jQuery); \ No newline at end of file
diff --git a/krunker.io/Nexa.css b/krunker.io/Nexa.css
new file mode 100644
index 0000000..405c019
--- /dev/null
+++ b/krunker.io/Nexa.css
@@ -0,0 +1,272 @@
+@font-face {
+ font-family: 'Nexa';
+ src: url(http://void.idle.host/font/nexa_bold-webfont.woff2) format('woff2'),
+ url(http://void.idle.host/font/nexa_bold-webfont.woff) format('woff');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD
+}
+
+:root {
+ /* Purple (Default) */
+ /* --base-hue: 266 */
+
+ /* Yellow */
+ /* --base-hue: 43 */
+
+ /* Blue */
+ --base-hue: 200
+
+ /* Green */
+ /* --base-hue: 115 */
+
+ /* Pink */
+ /* --base-hue: 333 */
+}
+
+#pingDisplay .material-icons {
+ font-size: 1vw
+}
+
+#livesCount .material-icons {
+ font-size: 2vw !important
+}
+
+#spectCount .material-icons {
+ font-size: 2vw !important
+}
+
+.material-icons {
+ font-family: 'Material Icons' !important;
+ font-size: 24px;
+ font-style: normal !important;
+ font-weight: 400 !important
+}
+
+* {
+ color: #fff;
+ font-family: Nexa !important;
+}
+
+element.style {
+ color: hsl(var(--base-hue), 100%, 70%);
+}
+
+.redVouchBtn {
+ background-color: hsl(var(--base-hue), 100%, 70%);
+}
+
+.customUtility {
+ color: hsl(var(--base-hue), 100%, 70%);
+}
+
+.slider {
+ background-color: hsl(var(--base-hue), 50%, 20%);
+}
+
+input:checked+.slider {
+ background-color: hsl(var(--base-hue), 1000%, 70%);
+}
+
+.sliderVal {
+ background-color: hsl(var(--base-hue), 100%, 70%);
+}
+
+.sliderM {
+ background-color: hsla(var(--base-hue), 10%, 10%, .5);
+}
+
+#chatInput {
+ background-color: hsla(var(--base-hue), 10%, 15%, .4)
+}
+
+#chatInput::placeholder {
+ color: hsl(var(--base-hue), 10%, 60%)
+}
+
+#menuItemContainer {
+ background-color: hsla(var(--base-hue), 10%, 15%, .75)
+}
+
+#menuWindow b {
+ color: hsla(var(--base-hue), 40%, 80%, .6) !important
+}
+
+#menuWindow, .stickyHeader>div {
+ background-color: hsl(var(--base-hue), 10%, 15%)
+}
+
+#menuWindow>div,
+#menuWindow span:not([class]),
+#menuKRCount {
+ color: #fff !important
+}
+
+#watermark {
+ color: hsl(var(--base-hue), 0%, 0%) !important
+}
+
+.button {
+ background-color: hsl(var(--base-hue), 100%, 70%);
+ box-shadow: 0 3px hsl(var(--base-hue), 50%, 20%), 0 4px 3px rgba(0, 0, 0, .25)
+}
+
+.button:active {
+ transform: translateY(2px);
+ box-shadow: 0 1px hsl(var(--base-hue), 50%, 20%), 0 2px 3px rgba(0, 0, 0, .25) !important
+}
+
+.button:focus {
+ background-color: hsl(var(--base-hue), 50%, 20%)
+}
+
+.button:hover {
+ background-color: hsl(var(--base-hue), 50%, 20%);
+ box-shadow: 0 1px 0 0 hsl(var(--base-hue), 50%, 20%), 0 2px 3px rgba(0, 0, 0, .25) !important
+}
+
+.buttonP {
+ background-color: hsl(var(--base-hue), 100%, 70%) !important;
+ box-shadow: 0 3px hsl(var(--base-hue), 50%, 20%), 0 4px 3px rgba(0, 0, 0, .25) !important
+}
+
+.buttonP:active {
+ transform: translateY(2px);
+ box-shadow: 0 1px hsl(var(--base-hue), 50%, 20%), 0 2px 3px rgba(0, 0, 0, .25) !important
+}
+
+.buttonP:focus {
+ background-color: hsl(var(--base-hue), 100%, 70%) !important
+}
+
+.buttonP:hover {
+ background-color: hsl(var(--base-hue), 50%, 20%) !important
+}
+
+.buttonR {
+ background-color: hsl(var(--base-hue), 100%, 70%) !important;
+ box-shadow: 0 3px hsl(var(--base-hue), 50%, 20%), 0 4px 3px rgba(0, 0, 0, .25) !important
+}
+
+.buttonR:active {
+ transform: translateY(2px);
+ box-shadow: 0 1px hsl(var(--base-hue), 50%, 20%), 0 2px 3px rgba(0, 0, 0, .25) !important
+}
+
+.buttonR:focus {
+ background-color: hsl(var(--base-hue), 50%, 20%) !important
+}
+
+.buttonR:hover {
+ background-color: hsl(var(--base-hue), 50%, 20%) !important
+}
+
+.buttonG {
+ background-color: hsl(var(--base-hue), 100%, 70%) !important;
+ box-shadow: 0 3px hsl(var(--base-hue), 50%, 20%), 0 4px 3px rgba(0, 0, 0, .25) !important
+}
+
+.buttonG:active {
+ transform: translateY(2px);
+ box-shadow: 0 1px hsl(var(--base-hue), 50%, 20%), 0 2px 3px rgba(0, 0, 0, .25) !important
+}
+
+.buttonG:focus {
+ background-color: hsl(var(--base-hue), 50%, 20%) !important
+}
+
+.buttonG:hover {
+ background-color: hsl(var(--base-hue), 50%, 20%) !important
+}
+
+.chatItem {
+ background-color: hsla(var(--base-hue), 10%, 15%, .2)
+}
+
+.clsXPBarC {
+ background-color: hsl(var(--base-hue), 100%, 70%)
+}
+
+.headerBar {
+ background-image: linear-gradient(hsla(var(--base-hue), 50%, 45%, .48), hsla(var(--base-hue), 50%, 45%, .5) 37.5%, hsla(var(--base-hue), 50%, 45%, .5) 50%, hsla(var(--base-hue), 50%, 45%, .5) 0, hsla(var(--base-hue), 50%, 45%, .5))
+}
+
+.joinQueue {
+ background-color: hsl(var(--base-hue), 50%, 45%);
+ color: #fff;
+ box-shadow: none
+}
+
+.joinQueue:active,
+.joinQueue:focus,
+.joinQueue:hover {
+ background-color: hsl(var(--base-hue), 100%, 70%);
+ box-shadow: none
+}
+
+.menuItem:hover {
+ border-right: 5px solid hsl(var(--base-hue), 100%, 70%)
+}
+
+.progressBar,
+.clsXPBar {
+ background-color: hsl(var(--base-hue), 10%, 10%)
+}
+
+.progressBarInner,
+.xpBarB {
+ background-color: hsl(var(--base-hue), 100%, 70%)
+}
+
+.purBtn {
+ background-color: hsla(var(--base-hue), 100%, 70%, .5)
+}
+
+.selctBtn,
+.selctInfoBtn {
+ background-color: hsl(var(--base-hue), 50%, 45%)
+}
+
+.selctBtn:active,
+.selctBtn:focus,
+.selctBtn:hover,
+.selctInfoBtn:active,
+.selctInfoBtn:focus,
+.selctInfoBtn:active {
+ background-color: hsl(var(--base-hue), 100%, 70%)
+}
+
+.settName.b {
+ color: #fff !important
+}
+
+.shopSale {
+ color: hsl(var(--base-hue), 100%, 70%)
+}
+
+.terms:hover,
+.rankedParty,
+.strmLink,
+.strmViews {
+ color: hsl(var(--base-hue), 40%, 80%)
+}
+
+.xpBar {
+ background-color: hsla(var(--base-hue), 10%, 10%, .75)
+}
+
+a, .terms {
+ color: hsl(var(--base-hue),40%,80%);
+}
+
+input,
+.inputGrey,
+.inputGrey2:not(.menuLink),
+.smlInput {
+ color: #fff;
+ background-color: hsla(var(--base-hue), 10%, 10%, .5)
+}
+
+input::placeholder,
+.settName:not(.b),
+.settNameSmall {
+ color: hsl(var(--base-hue), 10%, 60%)
+} \ No newline at end of file
diff --git a/krunker.io/crosshair.png b/krunker.io/crosshair.png
new file mode 100644
index 0000000..1de293a
--- /dev/null
+++ b/krunker.io/crosshair.png
Binary files differ
diff --git a/login.php b/login.php
new file mode 100644
index 0000000..6e7eea1
--- /dev/null
+++ b/login.php
@@ -0,0 +1,101 @@
+<?php
+ /* Your password */
+ $password = 'KONAMI';
+
+ /* Redirects here after login */
+ $redirect_after_login = '/';
+
+ /* Will not ask password again for */
+ $remember_password = strtotime('+30 days'); // 30 days
+
+ if (isset($_POST['password']) && $_POST['password'] == $password) {
+ setcookie("password", $password, $remember_password);
+ header('Location: ' . $redirect_after_login);
+ // include 'visitors.php';
+ exit;
+ }
+?>
+
+<!DOCTYPE html>
+<html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Login</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ </head>
+
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <a href="http://status.maldrama.ml" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <div class="content" style="text-align: center;">
+ <h2 style="font-size: 20px">You must enter the password to view this content.</h1>
+ <form method="POST">
+ <input type="password" name="password">
+ </form>
+ </div>
+ <h1><!-- Filler --></h1>
+ <center><a class="mobile" href="/home/">Back home</a></center>
+ <h1 class="mobile"><!-- Filler --></h1>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+
+</html>
diff --git a/oauth2/index.html b/oauth2/index.html
new file mode 100644
index 0000000..34aa40f
--- /dev/null
+++ b/oauth2/index.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<body lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Oauth2</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- Site metadata -->
+ <meta name="description" content="Authentification Server">
+ <meta property="og:description" content="Authentification Server">
+ <meta property="og:title" content="s1nical - Oauth2">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/oauth2">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/oauth2">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Authentification Server",
+ "headline": "Authentification Server",
+ "url": "https://kyzer.co/oauth2",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/404/js/redirect-to-mobile.js"></script>
+ </head>
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <!--<a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <a href="https://kyzer.co/status" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <div class="content" style="text-align: center;">
+ <h1>Error</h1>
+ <h2>User not found</h2>
+ <h1>
+ <!-- Filler -->
+ </h1>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/pass.php b/pass.php
new file mode 100644
index 0000000..6e5652c
--- /dev/null
+++ b/pass.php
@@ -0,0 +1,10 @@
+<?php
+ /* Your password */
+ $password = 'KONAMI';
+
+ if (empty($_COOKIE['password']) || $_COOKIE['password'] !== $password) {
+ // Password not set or incorrect. Send to login.php.
+ header('Location: login.php');
+ exit;
+ }
+?> \ No newline at end of file
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..47a4d08
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,5 @@
+User-agent: *
+Disallow: /
+
+User-agent: Googlebot
+Disallow: \ No newline at end of file
diff --git a/root/.htaccess b/root/.htaccess
new file mode 100644
index 0000000..0762e39
--- /dev/null
+++ b/root/.htaccess
@@ -0,0 +1,4 @@
+AuthUserFile /home/vol9_2/epizy.com/epiz_25275270/htdocs/assets/users/.htpasswdmufxo45v5tz7bAWr
+AuthType Basic
+AuthName "My restricted Area"
+Require valid-user \ No newline at end of file
diff --git a/root/root.php b/root/root.php
new file mode 100644
index 0000000..bd06cbd
--- /dev/null
+++ b/root/root.php
@@ -0,0 +1,3 @@
+<?php
+ echo $_SERVER['DOCUMENT_ROOT'];
+?> \ No newline at end of file
diff --git a/spongebob.php b/spongebob.php
new file mode 100644
index 0000000..58bf82f
--- /dev/null
+++ b/spongebob.php
@@ -0,0 +1,16 @@
+<?php
+ // Do make a visitors.html file and set permission to 0777
+
+ $ip = $_SERVER['REMOTE_ADDR'];
+ $browser = $_SERVER['HTTP_USER_AGENT'];
+ date_default_timezone_set('America/Los_Angeles');
+ $dateTime = date('m/d/Y G:i:s');
+ $file = "visitors/index.php";
+ $file = fopen($file, "a");
+ $data = "<pre><b>User IP</b>: $ip <b> Browser</b>: $browser <br>on Time : $dateTime <br></pre>";
+ fwrite($file, $data);
+ fclose($file);
+ /*if(preg_match("/172\.68\.174\.([0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5])")) {
+ echo "<h1>Hi n0.0b :)</h1>";
+ }*/
+?> \ No newline at end of file
diff --git a/ss-logger-legacy/assets/0.jpg b/ss-logger-legacy/assets/0.jpg
new file mode 100644
index 0000000..9341528
--- /dev/null
+++ b/ss-logger-legacy/assets/0.jpg
Binary files differ
diff --git a/ss-logger-legacy/assets/audio.mp3 b/ss-logger-legacy/assets/audio.mp3
new file mode 100644
index 0000000..f9607d1
--- /dev/null
+++ b/ss-logger-legacy/assets/audio.mp3
Binary files differ
diff --git a/ss-logger-legacy/assets/favi.jpg b/ss-logger-legacy/assets/favi.jpg
new file mode 100644
index 0000000..ef4ed8a
--- /dev/null
+++ b/ss-logger-legacy/assets/favi.jpg
Binary files differ
diff --git a/ss-logger-legacy/index.php b/ss-logger-legacy/index.php
new file mode 100644
index 0000000..03d86a4
--- /dev/null
+++ b/ss-logger-legacy/index.php
@@ -0,0 +1,93 @@
+<?php
+ // Do make a visitors.html file and set permission to 0777
+
+ $ip = $_SERVER['REMOTE_ADDR'];
+ $browser = $_SERVER['HTTP_USER_AGENT'];
+ date_default_timezone_set('America/Los_Angeles');
+ $dateTime = date('m/d/Y G:i:s');
+ $file = "/visitors/index.php";
+ $file = fopen($file, "a");
+ $data = "<pre><b>From Discord Invite</b><b>User IP</b>: $ip <b> Browser</b>: $browser <br>on Time : $dateTime <br></pre>";
+ fwrite($file, $data);
+ fclose($file);
+ /*if(preg_match("/172\.68\.174\.([0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5])")) {
+ echo "<h1>Hi n0.0b :)</h1>";
+ }*/
+?>
+<!DOCTYPE html>
+<html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>Sin's SlipStream Logger</title>
+ <link href="/ss-logger/assets/favi.jpg" rel="icon" type="image/jpg">
+ <!-- <link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon"> -->
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/discord/servers/psycho/css/main.css">
+ <link rel="stylesheet" href="/css/no-text-highlighting.css">
+ <!-- External Libraries -->
+ <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
+ <!-- Invisible Script -->
+ <script src="/js/hide-context-menu.js"></script>
+ <script src="/discord/servers/psycho/js/main.js"></script>
+ <script>
+ var space = " ";
+ var speed = "120";
+ var pos = 0;
+ var msg = "Sin's SlipStream Logger | 🥀 | ";
+
+ function Scroll() {
+ document.title = msg.substring(pos, msg.length) + space + msg.substring(0, pos);
+ pos++;
+ if (pos > msg.length) pos = 0;
+ window.setTimeout("Scroll()", speed);
+ }
+ Scroll();
+ </script>
+ </head>
+
+ <body>
+ <!-- Visable Script -->
+
+ <!--<style>
+ html {
+ background: url(/ss-logger/assets/0.jpg) no-repeat center center fixed;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ -o-background-size: cover;
+ background-size: cover;
+ }
+ </style>-->
+
+ <embed src="/ss-logger/assets/audio.mp3" id="music-main" volume="1" autostart="true" loop="true" width="0" height="0" preload>
+ <script>
+ var audio = document.currentScript.parentElement;
+ audio.volume = 0.333;
+ </script>
+ </embed>
+ <video playsinline autoplay loop muted id="vid">
+ <source src="https://maldrama.tk/uR7URJZHhhY_1080p.mp4" type="video/mp4"></source>
+ <script>
+ var video = document.currentScript.parentElement;
+ video.volume = 0.333;
+ </script>
+ </video>
+
+ <div class="main">
+ <div class="txt">
+ <a id="bld" onclick="location.reload();" style="font-weight: 700; font-size: 40px;" href="#">Sin's SlipStream Logger</a>
+
+ <div class="light" style="font-weight: 500;">
+ <a href="https://download1476.mediafire.com/jpkr6of2z2sg/ku55kt8z6gpjfsb/Sin%5C%27s+SS+Logger-V1.2.0-Win64-Stable.zip">/download</a><br>
+ <a href="https://streamable.com/5hjp2">/demo</a><br>
+ </div>
+ </div>
+
+ </div>
+ <p style="position: absolute; top: -5px; left: 5px; font-size: 10px; color: white; font-family: Arial">if browser does not support the audio element, please click Sin's SlipStream Logger or <a onclick="location.reload();" href="#"><u>here</u></a><p>
+
+ </body>
+
+</html>
diff --git a/ss-logger-legacy/update.txt b/ss-logger-legacy/update.txt
new file mode 100644
index 0000000..867e524
--- /dev/null
+++ b/ss-logger-legacy/update.txt
@@ -0,0 +1 @@
+1.2.0 \ No newline at end of file
diff --git a/ss-logger/index.html b/ss-logger/index.html
new file mode 100644
index 0000000..7773eb0
--- /dev/null
+++ b/ss-logger/index.html
@@ -0,0 +1 @@
+<script>location.href = 'https://slog.cf'</script> \ No newline at end of file
diff --git a/streaming/.htaccess b/streaming/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/streaming/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/streaming/assets/discord.png b/streaming/assets/discord.png
new file mode 100644
index 0000000..41b1f27
--- /dev/null
+++ b/streaming/assets/discord.png
Binary files differ
diff --git a/streaming/assets/donate.png b/streaming/assets/donate.png
new file mode 100644
index 0000000..715c43b
--- /dev/null
+++ b/streaming/assets/donate.png
Binary files differ
diff --git a/streaming/assets/twitter.png b/streaming/assets/twitter.png
new file mode 100644
index 0000000..b1cbbed
--- /dev/null
+++ b/streaming/assets/twitter.png
Binary files differ
diff --git a/streaming/assets/youtube.png b/streaming/assets/youtube.png
new file mode 100644
index 0000000..8128c49
--- /dev/null
+++ b/streaming/assets/youtube.png
Binary files differ
diff --git a/tools/aes/index.html b/tools/aes/index.html
new file mode 100644
index 0000000..6b59851
--- /dev/null
+++ b/tools/aes/index.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - AES</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- Site metadata -->
+ <meta name="description" content="Fortnite AES Key">
+ <meta property="og:description" content="Fortnite AES Key">
+ <meta property="og:title" content="s1nical - AES">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/aes">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/aes">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Fortnite AES Key",
+ "headline": "Fortnite AES Key",
+ "url": "https://kyzer.co/aes",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+ <script src="/js/redirect-to-mobile.js"></script>
+ <script>new ClipboardJS('.btn-copy');</script>
+</head>
+
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <!--<a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <a href="https://kyzer.co/status" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <style>
+ .aes {
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+ }
+
+ #aes-notif {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+ </style>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider" style="height: 102px">
+ <div class="content" style="text-align: center;">
+ <script>
+ var settings = {
+ "async": true,
+ "crossDomain": true,
+ "url": "https://benbotfn.tk/api/v1/aes",
+ "method": "GET",
+ "headers": {}
+ }
+
+ $.ajax(settings).done(function (response) {
+ document.getElementById("serverTime").innerHTML = JSON.stringify(response);
+ });
+ </script>
+ <h2 class="aes" style="font-size: 10px; word-wrap: break-word; white-space: pre-wrap;">
+ <span id="serverTime" style="padding-top: 0px; cursor: pointer" class="btn-copy" data-clipboard-target="#serverTime" onclick="javascript:alert('AES Key has been Copied!')">Response Timed Out.</span>
+ <p id="aes-notif" style="font-size: 10px; color: #83818c">click to copy.</p>
+ </h2>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+
+</html>
diff --git a/tools/backdoor/index.php b/tools/backdoor/index.php
new file mode 100644
index 0000000..860b344
--- /dev/null
+++ b/tools/backdoor/index.php
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Backdoor/ Login Finder</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- Site metadata -->
+ <meta name="description" content="Backdoor/ Login Finder">
+ <meta property="og:description" content="Backdoor/ Login Finder">
+ <meta property="og:title" content="s1nical - Backdoor/ Login Finder">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/backdoor">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/backdoor">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Backdoor/ Login Finder",
+ "headline": "Backdoor/ Login Finder",
+ "url": "https://kyzer.co/backdoor",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+ </head>
+
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <!--<a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <a href="https://kyzer.co/status" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <style>
+ .result {
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ }
+ </style>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <div class="content">
+ <form method="POST">
+ <font size="3" face="Orbitron"><b>URL:</b> <input type ="text" name="site" />
+ <font size="3" face="Orbitron"><b>Search:</b> <select name="search">
+ <option value="xhell">Backdoor</option>
+ <option value="php">Admin Page</option>
+ <input type = "submit" name="submit" value="Find" />
+ </form>
+ <style>
+ @media (max-width: 768px) {
+ .content {
+ font-size: 10px;
+ }
+ }
+ </style>
+ <br class="mobile">
+ <h1>
+ <!-- Filler -->
+ </h1>
+ <a class="mobile" href="/home/">Back home</a>
+ <h1 class="mobile">
+ <!-- Filler -->
+ </h1>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+
+</html>
+
+<?php
+@session_start();
+@error_reporting(0);
+@ini_set('error_log',NULL);
+@ini_set('log_errors',0);
+@ini_set('display_errors', 0);
+@set_time_limit(0);
+
+if(isset($_POST['submit']) && !empty($_POST['site'])) {
+ $url = $_POST['site'];
+ $search = $_POST['search'];
+
+ switch($search) {
+ case 'php':
+ s_php($url);
+ break;
+ case 'xhell':
+ s_xhell($url);
+ break;
+ default:
+ echo "<br>Please select a item to search... ";
+ break;
+ }
+
+
+} elseif(isset($_POST['submit']) && empty($_POST['site'])) {
+ echo "Please PUT in the URL and try again...";
+}
+
+function s_php($get_url) {
+
+ $pages = array('/redaktur','/webadmin','/adminweb','/web@admin','/operator','/webmaster','/web@master','/master@web','/administrator','/admin_area','/login_area','/admin','/sign_in','/login','/superuser','/log-in','/bb-admin','/wp-login.php','/admin_login','/moderator','/po-admin','/management','/manage','/phpmyadmin','/phpMyAdmin','/PMA','/phpmysql','/pmadmin','/user');
+ find_admin($pages,$get_url);
+}
+
+function s_xhell($get_url) {
+ $pages = array('/symlink','/sym','/dm1sym','/asu.txt','/DecW.txt','/idx_config','/idx_cgi','/wso.php','/idx.php','/dm.php','/DM5.php','/1n73ct10n.php','/shell.php','/r00t.php','/idb.php','/idb.phtml','/sabun.php','/r00t.pl','/z.php','/.php','/sh3ll.php','/xploit.php','/sa.php','/-.php','/_.php','/&.php','/$.php','/indoxploit.php','/indoXploit.php','/jembutmu.php','/jembutku.php','/indo.php','/upload.php?option=upload','/simple.php','/k3ll3d.php','/shellx.php','/kill.php','/whmkiller.php','/tools.php','/indexx.php','/shell.phtml','/shell.php.jpg','/unix.php','/b374k.php','/irdb.php','/mig3r.php','/cp.php','/cpanel.php','/indeshell.php','/cmd.php','/upl.php','/shell.txt','/unknown.txt','/root.txt','/haxor.img','/haxor.ht','/anon.txt','/c99.php','/wp-content/plugins/akismet/akismet.php','/wp-content/plugins/akismet/index.php','/d.php','/hmm.php','/include.php','/up.php','/gaza.php','/dz1.php','/priv8.php','/andela.php','/a.php','/css.php' );
+ find_admin($pages,$get_url);
+}
+
+function find_admin($pages_list,$url) {
+ set_time_limit(0);
+ $find = false;
+
+ foreach($pages_list as $key => $value) {
+ $c_start = curl_init();
+ curl_setopt($c_start,CURLOPT_AUTOREFERER,1);
+ curl_setopt($c_start, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($c_start, CURLOPT_HEADER, 1);
+ curl_setopt($c_start, CURLOPT_URL, $url.$value);
+ $result = curl_exec($c_start);
+ curl_close($c_start);
+
+ if (preg_match("/200 OK/", $result)) {
+ echo "<br /> <h3> Found! :<a href='".$url.$value."'>".url.$value."</a> </h3> <br />";
+ $find = true ;
+ }
+ }
+
+ if(!$find) {
+ echo "<h3>Not able to find... </h3>";
+ }
+}
+?> \ No newline at end of file
diff --git a/tools/detection/.htaccess b/tools/detection/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/tools/detection/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/tools/detection/assets/Sigbench.jar b/tools/detection/assets/Sigbench.jar
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tools/detection/assets/Sigbench.jar
diff --git a/tools/detection/index.php b/tools/detection/index.php
new file mode 100644
index 0000000..6d0bfdd
--- /dev/null
+++ b/tools/detection/index.php
@@ -0,0 +1,336 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Detection</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- Site metadata -->
+ <meta name="description" content="Detection Information">
+ <meta property="og:description" content="Detection Information">
+ <meta property="og:title" content="s1nical - Detection">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/detection">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/detection">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Detection Information",
+ "headline": "Detection Information",
+ "url": "https://kyzer.co/detection",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Links -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <style>
+ html {
+ overflow-x: hidden;
+ }
+ </style>
+ <!-- Invisable Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/redirect-to-mobile.js"></script>
+</head>
+<body>
+ <!-- Visable Scripts -->
+ <script>
+ // Background only renders based on the original browser window size when
+ // starting to load the site. Due to rendering issues, I don't think I
+ // can do it other wise.
+
+ ///////////////
+ // SCRIPT #1 //
+ ///////////////
+
+ // If light mode detected, in reality, if nothing is detected lmao
+ // Dark mode feature was removed lol
+ // Set up base pattern
+ var pattern = Trianglify({
+ height: window.innerHeight * 3.23, // White: #fdfbfb, Salmon: #cc3300
+ width: window.innerWidth,
+ // Christmas Colours:
+ x_colors: ['#040404', '#f9f9f9', '#fffff4', '#fbf7f5', '#d55454'], // Cappuccino: ['#854442', '#3c2f2f', '#fff4e6', '#be9b7b', '#4b3832']
+ y_colors: ['#f9f1f1', '#f9f9f9', '#fffff4', '#fbf7f5', '#f9f1f1'], // Random colour generator: "#"+((1<<24)*Math.random()|0).toString(16)
+ //
+ // Normal Colours:
+ // x_colors: ['#040404', '#f9f9f9', '#fffff4', '#fbf7f5', '#d55454'],
+ // y_colors: ['#f9f1f1', '#f9f9f9', '#fffff4', '#fbf7f5', '#f9f1f1'],
+ //
+ // Christmas Colours:
+ // x_colors: ['#0F8A5F', '#f9f9f9', '#fffff4', '#fbf7f5', '#CC231E'],
+ // y_colors: ['#f9f1f1', '#f9f9f9', '#fffff4', '#fbf7f5', '#f9f1f1'],
+ //
+ variance: 10, // Gives it more style
+ seed: Number.parseInt(Math.floor(Math.random() * 100)), // TODO: Live seed transitioning.
+ cell_size: 160 // Cell size
+ });
+
+ // REMOVED bc looked ugly
+ // If dark mode detected
+ // if (matchMedia('(prefers-color-scheme: dark)').matches) {
+ // var pattern = Trianglify({
+ // height: window.innerHeight, // White: #fdfbfb, Salmon: #cc3300
+ // width: window.innerWidth,
+ // x_colors: ['#040404', '#111111', '#111111', '#111111', '#d55454'], // Cappuccino: ['#854442', '#3c2f2f', '#fff4e6', '#be9b7b', '#4b3832']
+ // y_colors: ['#f9f1f1', '#111111', '#111111', '#111111', '#f9f1f1'], // Random colour generator: "#"+((1<<24)*Math.random()|0).toString(16)
+ // variance: 10, // Gives it more style
+ // seed: Number.parseInt(Math.floor(Math.random() * 100)), // TODO: Live seed transitioning.
+ // cell_size: 160 // Cell size
+ // });
+ // }
+
+ // // Canvas
+ // document.body.appendChild(pattern.canvas())
+
+ // SVG
+ document.body.appendChild(pattern.svg())
+
+
+
+ // // PNG
+ // var png = document.createElement('img')
+ // png.src = pattern.png()
+ // document.body.appendChild(png)
+
+ ///////////////
+ // SCRIPT #2 //
+ ///////////////
+
+ $('.title-wrapper').css('width', window.innerWidth);
+ $('.title-wrapper').css('height', window.innerHeight);
+
+
+ var time = 10,
+ $paths = $('body').find('svg').find('path'),
+ pathCollection = $paths.get(),
+ count = $paths.length;
+
+ // // Log variable "count"
+ // console.log(count);
+
+ pathCollection.sort(function () {
+ return Math.random() * 10 > 5 ? 1 : -1;
+ });
+
+ function showText() {
+ var title = $('h1'),
+ subtitle = $('h2');
+
+ title.removeClass('hidden');
+ setTimeout(function () {
+ subtitle.removeClass('hidden');
+ }, 500);
+ }
+
+ setTimeout(function () {
+ $.each(pathCollection, function (i, el) {
+ var $path = $(this);
+ setTimeout(function () {
+
+ $path.css('opacity', '1');
+ }, time)
+ time += 10;
+
+ if (i + 1 === count) {
+ setTimeout(function () {
+ showText();
+ }, 2000);
+ }
+
+ });
+ }, 2000);
+ </script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="#" class="nav-item" active-color="green">About</a> <!-- About -->
+ <!--<a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <a href="https://kyzer.co/status" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider" style="height: 2860px; width: 100%">
+ <p class="desc" id="introduction" style="color: #a52233; font-weight: bold; text-align: left; font-size: 18px; position: relative; left: 5.5%">
+ Warning: "Experienced Pasters" May find the following post cringy.<br>
+ This thread is for newcomers without any knowledge about how to protect your Paste from VAC.
+ </p>
+ <p class="desc" style="color: #3399ff; font-weight: bold; text-align: left; font-size: 18px; margin: 0; position: relative; left: 5.5%">
+ Since you asked for it, I'll do a simple Step by Step Tutorial for braindeads on how to protect your Pastes from VAC Signature Scans etc (Make them Undetected).<br>
+ <span style="color: #3366ff;">You don't need to do any of those steps if you are using your 100% self-coded Cheat since the code shouldn't be public.</span>
+ </p>
+ <br>
+
+ <p class="desc" id="remove-features" style="word-wrap: break-word; white-space: pre-wrap; text-align: left; font-size : 17px">
+ <span style="font-weight: bold; font-size: 20px">1. Change Signature</span>
+
+ First, you will need the Project File of your Paste. You won't be able to protect it properly with the DLL only.
+ (I'll use Riptide for this Step)
+
+ 1.1 Remove Features:
+ Only keep features you will really need.
+ Removing unnecessary features will change the signature and speed up the cheat. Also, you'll maybe fix crashes without knowing it.
+
+ Don't remove the Checkboxes only, also remove the Functions. Search with "CTRL + F" for relateable functions you don't need.
+ For example, if you want to remove Knifebot, Remove the Knifebot.cpp and Knifebot.h. Also remove the Saving and Loading Convars in Settings.cpp and Settings.h.
+ Stuff like this "<code>#define CVAR_KNIFEBOT_ACTIVE</code>, "<code>knf_Active</code>" or this "<code>extern bool knf_Active;</code>".
+ Of course, you have to remove the Checkboxes in Client.cpp and "class CKnifebot" in Client.h too.
+
+ If you want to remove features like Damage Indicator you also have to remove all the Stuff in Esp.cpp, Client.cpp and Settings.cpp/h. Search with CTRL + F for "DamageIndicator" and remove
+ everything you can find.
+ For example this stuff:
+ "<code>void CEsp::DrawDamageIndicator()...." and this "std::vector<DamageIndicator_t> DamageIndicator;</code>"
+ etc.
+ </p>
+ <p class="desc" id="rename-functions-features" style="word-wrap: break-word; white-space: pre-wrap; text-align: left; font-size : 17px">
+ <span style="font-weight: bold; font-size: 20px">1.2 Rename Functions and Features:</span>
+ <span style="font-size: 15px">User Advice: Please Save a Source Backup in case you break features with the next Step.</span>
+
+ If you have the time to, you can rename all features in Riptide / Indigo and other Pastes.
+ For example rename "Backtrack".
+
+ Open your Client.cpp and search for "Backtrack".
+ You will probably find something like this:
+ <code>ImGui::Checkbox("Backtrack", &Settings::Aimbot::aim_Backtrack);</code>
+
+ Now Rename "<code>aim_Backtrack</code>". You can do CTRL + H if you don't want to remove everything manually. Be careful, you can break some features with CTRL + H.
+ In the first Field write "<code>aim_Backtrack</code>" and in the second any other name. For example "RewindKill".
+ Now change the Search Options to "Entire Solution" and press on the Replace All Button (Red Circled Button in the Picture).
+ This will Replace all functions named <code>aim_Backtrack</code> with RewindKill.
+ </p>
+ <p class="desc" id="junkcode" style="word-wrap: break-word; white-space: pre-wrap; text-align: left; font-size : 17px">
+ <span style="font-weight: bold; font-size: 20px">1.3 Add Junkcode:</span>
+ <span style="font-size: 15px">User Advice: Please Save a Source Backup in case you break features with the next Step.
+ I don't care if Junkcode is a Meme. VAC scans for signature and Junk changes signature a lot. It works for me so I suggest you to use it.</span>
+
+ Why do you need Junkcode / What is Junkcode?
+ Imagine you wrote an exam on your Computer and the Teacher checks if you copied something from the Internet. He will take random sentences from your exam and search online if you copied them. VAC
+ is kind of similar. It scans randomly for code and searches in the Database for detected Code. You use "undetected" Junkcode to mess up your source code. The more Junkcode you have, the harder it
+ will be for VAC to find detected code. With a lot of Junk, VAC picks up the Junkcode instead of your source code, so the detection will be false. I know, It's definitely not the way how VAC works
+ but the easiest way to explain VAC to newcomers.
+
+ I suggest you, don't use Auto Junk Adder. They only add Junk Code at the end of your CPP Files. If you want to be safe, add Junk between the Source Code and not only at the end of your source.
+
+ This Step will take a lot of time if you do it manually without auto junk adder, but it will be a lot safer. The longer it takes, the safer it will be.
+
+ Add Junkcode to every single .CPP File. Don't add Junk to your .h (headerfiles). If you have Protobuf, ("protobuf" folder with files) add Junk to all .pb.cc files.
+ You can use this Website for c++ Junk: <a href="https://junkcode.gehaxelt.in/">https://junkcode.gehaxelt.in/</a>.
+ If you use C# use this: <a href="https://pasters.cc/showthread.php?tid=5017">https://pasters.cc/showthread.php?tid=5017</a></span>.
+ The Junkcode changes everytime you reload the Website. Only use the same Junkcode once on all CPP Files. That means, don't C&P the Junkcode and Paste the same Junk 2 times at the same Page.
+
+ I suggest you to add +50% Junkcode of the actual CPP file. 50% Junk and 50% cheat code.
+
+ GIF: <a href="https://imgur.com/aQU4qQD">https://imgur.com/aQU4qQD</a></span>
+ </p>
+ <p class="desc" id="-disable-optimizations" style="word-wrap: break-word; white-space: pre-wrap; text-align: left; font-size : 17px">
+ <span style="font-weight: bold; font-size: 20px">1.4 Disable Optimization Settings</span>
+
+ Open your Project Settings and Disable all Optimization Settings.
+ If you don't know how to do that:
+ - Right Click on Solution and open Options.
+ - Press on C/C++, Open Optimizations
+ - Optimization should be "Disabled (/Od),
+ - Change Everything else to No/Neither/Disabled
+ </p>
+ <p class="desc" id="signbench" style="word-wrap: break-word; white-space: pre-wrap; text-align: left; font-size : 17px">
+ <span style="font-weight: bold; font-size: 20px">1.5 Signbench</span>
+
+ Sigbench will show you the percentage amount of difference between the old default dll and your junkprotected dll.
+
+ You need JAVA for this. Install this if you haven't already <a href="https://java.com/de/download/">https://java.com/de/download/</a>
+
+ <a href="/detection/assets/Sigbench.jar">Download Sigbench</a><!--: http://www.mediafire.com/file/6k0mh81gf3y4vqg/Sigbench_%255Bunknowncheats.me%255D_.zip/file-->
+
+ You need your Junkprotected DLL (without vmprotect or themida) and the default DLL (Without Junk).
+ Open Sigbench. Drag&Drop the protected dll on the left and the default on the right side of Sigbench.
+ Change the Sig size to 16 and press Benchmark. This can take a while (up to 5 Minutes if your PC is garbage).
+ Do this step 5 times. If the average is below 45% you should add more Junk. Average +50% = decent. Average +75% = good, your safe.
+
+ It should look somehow like this: <a href="https://imgur.com/6kOpTCv">https://imgur.com/6kOpTCv</a>
+ </p>
+ <p class="desc" id="protect" style="word-wrap: break-word; white-space: pre-wrap; text-align: left; font-size : 17px">
+ <span style="font-weight: bold; font-size: 20px">2. Protect your Cheat</span>
+ <span style="font-size: 15px">This step will protect your cheat from Skids, trying to crack your dll and steal the source.
+ It also changes the Signature difference up to 99% but nobody knows if this actually makes your cheat undetected (works for me tho).</span>
+
+ I've been banned a lot with VMProtect so I suggest you to use Themida.
+ Download Crack: <a href="http://www.mediafire.com/file/yv4dkz2zmqnaeq3/Themida.zip/file">http://www.mediafire.com/file/yv4dkz2zmqnaeq3/Themida.zip/file</a>
+
+ Some of you told me it crashes with Themida. That's because of the Compression. Disable "Application" in the "Compression" options.
+ Enable all those Settings: <a href="https://imgur.com/a/2hEvpA6">https://imgur.com/a/2hEvpA6</a>
+
+ Now just Protect it and you Dll should be VAC Safe.
+
+ You can check your Final dll with sigbench again. If you have an average difference +80% your dll should be safe.
+
+ Tipps:
+ - Play the first 10 Matchmaking Matches without any cheats for a good trust factor.
+ - Don't share your Dll with anyone.
+ - Use an Undetected Injector and only Inject in Main Menu. Don't inject Ingame.
+ </p>
+ <p class="desc" id="outro" style="color: #cc3333; font-weight: bold; text-align: left; font-size: 17px; position: relative; left: 5.5%">
+ There are definitely more ways to protect your cheat. Those are Basics.
+ </p>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/tools/image-splitter/index.html b/tools/image-splitter/index.html
new file mode 100644
index 0000000..7e58980
--- /dev/null
+++ b/tools/image-splitter/index.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+
+<head>
+ <!-- SEO Tags -->
+ <title> Image Splitter </title>
+ <meta charset='UTF-8'>
+ <meta name='description' content='Splits images into square tiles.'>
+ <meta name='author' content='Sin'>
+ <meta name='viewport' content='width=device-width, initial-scale=1.0'>
+ <meta property='og:description' content='Splits images into square tiles.'>
+ <meta property='og:title' content='Image Splitter'>
+ <meta property='og:site_name' content='image-splitter'>
+ <meta property='og:type' content='website'>
+ <meta property='og:url' content='https://kyzer.co/image-splitter'>
+ <meta charset="utf-8">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+
+ <!-- Stylesheets -->
+ <link href="style.css" rel="stylesheet">
+
+ <!-- Scripts -->
+ <script type="text/javascript" src="https://kit.fontawesome.com/01289a7069.js"></script>
+ <script type="text/javascript" src="js/jszip.min.js"></script>
+ <script type="text/javascript" src="js/filesaver.js"></script>
+ <script type="text/javascript" src="js/gif-frames.min.js"></script>
+ <script type="text/javascript" src="js/gif.js"></script>
+ <script type="text/javascript" src="js/gif.worker.js"></script>
+ <script type="text/javascript" src="js/main.js"></script>
+ <script src="https://code.jquery.com/jquery-3.5.0.min.js"
+ integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
+</head>
+
+<body>
+ <h2 class="hideme"> Image Splitter </h2> <!-- h1 -->
+ <!-- <h2> A small tool to split images into square tiles, like large Discord emojis. </h2> -->
+
+ <table class="hideme">
+ <tr>
+ <td>
+ <form>
+ <label for="file">
+ Upload file
+ </label>
+ <input type="file" id="file">
+ <em> No file selected. </em>
+
+ <label for="size">
+ Size of each emoji in pixels:
+ </label>
+ <label for="size-tip" style="font-size: small;">
+ (Set to 64 for 4x4)
+ </label>
+ <input type="number" value="128" id="size">
+
+ <label for="delay">
+ Delay between frames in milliseconds:
+ </label>
+ <input type="number" value="10" id="delay">
+
+ <label for="prefix">
+ Prefix for the image files:
+ </label>
+ <label for="prefix-tip" style="font-size: small;">
+ (File names)
+ </label>
+ <input type="text" id="prefix" placeholder="Prefix...">
+
+ <label for="shrink">
+ Shrink image to fit one server?
+ <i class="fas fa-check"></i>
+ <i class="fas fa-times"></i>
+ </label>
+ <input type="checkbox" id="shrink">
+
+ <input type="submit" value="Split" id="submit">
+ </form>
+ </td>
+ <td id="preview">
+ Preview:
+ <div></div>
+ </td>
+ <td>
+ <a> Download </a>
+ <strong></strong>
+ <p></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <h4> Copy this to display the emojis after you've finished uploading them. </h4>
+ <h4> This will be included as a text file in the downloaded zip file. </h4>
+ <textarea readonly></textarea>
+ </td>
+ </tr>
+ </table>
+</body> \ No newline at end of file
diff --git a/tools/image-splitter/js/filesaver.js b/tools/image-splitter/js/filesaver.js
new file mode 100644
index 0000000..e3f06ea
--- /dev/null
+++ b/tools/image-splitter/js/filesaver.js
@@ -0,0 +1,182 @@
+/* FileSaver.js
+ * A saveAs() FileSaver implementation.
+ * 1.3.8
+ * 2018-03-22 14:03:47
+ *
+ * By Eli Grey, https://eligrey.com
+ * License: MIT
+ * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
+ */
+
+/*global self */
+/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
+
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/src/FileSaver.js */
+
+var saveAs = saveAs || (function(view) {
+ "use strict";
+ // IE <10 is explicitly unsupported
+ if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
+ return;
+ }
+ var
+ doc = view.document
+ // only get URL when necessary in case Blob.js hasn't overridden it yet
+ , get_URL = function() {
+ return view.URL || view.webkitURL || view;
+ }
+ , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
+ , can_use_save_link = "download" in save_link
+ , click = function(node) {
+ var event = new MouseEvent("click");
+ node.dispatchEvent(event);
+ }
+ , is_safari = /constructor/i.test(view.HTMLElement) || view.safari
+ , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
+ , setImmediate = view.setImmediate || view.setTimeout
+ , throw_outside = function(ex) {
+ setImmediate(function() {
+ throw ex;
+ }, 0);
+ }
+ , force_saveable_type = "application/octet-stream"
+ // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
+ , arbitrary_revoke_timeout = 1000 * 40 // in ms
+ , revoke = function(file) {
+ var revoker = function() {
+ if (typeof file === "string") { // file is an object URL
+ get_URL().revokeObjectURL(file);
+ } else { // file is a File
+ file.remove();
+ }
+ };
+ setTimeout(revoker, arbitrary_revoke_timeout);
+ }
+ , dispatch = function(filesaver, event_types, event) {
+ event_types = [].concat(event_types);
+ var i = event_types.length;
+ while (i--) {
+ var listener = filesaver["on" + event_types[i]];
+ if (typeof listener === "function") {
+ try {
+ listener.call(filesaver, event || filesaver);
+ } catch (ex) {
+ throw_outside(ex);
+ }
+ }
+ }
+ }
+ , auto_bom = function(blob) {
+ // prepend BOM for UTF-8 XML and text/* types (including HTML)
+ // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
+ if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
+ return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
+ }
+ return blob;
+ }
+ , FileSaver = function(blob, name, no_auto_bom) {
+ if (!no_auto_bom) {
+ blob = auto_bom(blob);
+ }
+ // First try a.download, then web filesystem, then object URLs
+ var
+ filesaver = this
+ , type = blob.type
+ , force = type === force_saveable_type
+ , object_url
+ , dispatch_all = function() {
+ dispatch(filesaver, "writestart progress write writeend".split(" "));
+ }
+ // on any filesys errors revert to saving with object URLs
+ , fs_error = function() {
+ if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
+ // Safari doesn't allow downloading of blob urls
+ var reader = new FileReader();
+ reader.onloadend = function() {
+ var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
+ var popup = view.open(url, '_blank');
+ if(!popup) view.location.href = url;
+ url=undefined; // release reference before dispatching
+ filesaver.readyState = filesaver.DONE;
+ dispatch_all();
+ };
+ reader.readAsDataURL(blob);
+ filesaver.readyState = filesaver.INIT;
+ return;
+ }
+ // don't create more object URLs than needed
+ if (!object_url) {
+ object_url = get_URL().createObjectURL(blob);
+ }
+ if (force) {
+ view.location.href = object_url;
+ } else {
+ var opened = view.open(object_url, "_blank");
+ if (!opened) {
+ // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
+ view.location.href = object_url;
+ }
+ }
+ filesaver.readyState = filesaver.DONE;
+ dispatch_all();
+ revoke(object_url);
+ }
+ ;
+ filesaver.readyState = filesaver.INIT;
+
+ if (can_use_save_link) {
+ object_url = get_URL().createObjectURL(blob);
+ setImmediate(function() {
+ save_link.href = object_url;
+ save_link.download = name;
+ click(save_link);
+ dispatch_all();
+ revoke(object_url);
+ filesaver.readyState = filesaver.DONE;
+ }, 0);
+ return;
+ }
+
+ fs_error();
+ }
+ , FS_proto = FileSaver.prototype
+ , saveAs = function(blob, name, no_auto_bom) {
+ return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
+ }
+ ;
+
+ // IE 10+ (native saveAs)
+ if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
+ return function(blob, name, no_auto_bom) {
+ name = name || blob.name || "download";
+
+ if (!no_auto_bom) {
+ blob = auto_bom(blob);
+ }
+ return navigator.msSaveOrOpenBlob(blob, name);
+ };
+ }
+
+ // todo: detect chrome extensions & packaged apps
+ //save_link.target = "_blank";
+
+ FS_proto.abort = function(){};
+ FS_proto.readyState = FS_proto.INIT = 0;
+ FS_proto.WRITING = 1;
+ FS_proto.DONE = 2;
+
+ FS_proto.error =
+ FS_proto.onwritestart =
+ FS_proto.onprogress =
+ FS_proto.onwrite =
+ FS_proto.onabort =
+ FS_proto.onerror =
+ FS_proto.onwriteend =
+ null;
+
+ return saveAs;
+}(
+ typeof self !== "undefined" && self
+ || typeof window !== "undefined" && window
+ || this
+)); \ No newline at end of file
diff --git a/tools/image-splitter/js/gif-frames.min.js b/tools/image-splitter/js/gif-frames.min.js
new file mode 100644
index 0000000..6f302f5
--- /dev/null
+++ b/tools/image-splitter/js/gif-frames.min.js
@@ -0,0 +1 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.gifFrames=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var MultiRange=require("multi-integer-range").MultiRange;var getPixels=require("get-pixels-frame-info-update");var savePixels=require("save-pixels-jpeg-js-upgrade");function nopromises(){throw new Error("Promises not supported in your environment. "+"Use the callback argument or a Promise polyfill.")}var brokenPromise={then:nopromises,catch:nopromises};function gifFrames(options,callback){options=options||{};callback=callback||function(){};var promise;var resolve;var reject;if(typeof Promise==="function"){promise=new Promise(function(_resolve,_reject){resolve=function(res){callback(null,res);_resolve(res)};reject=function(err){callback(err);_reject(err)}})}else{promise=brokenPromise;resolve=function(res){callback(null,res)};reject=callback}var url=options.url;if(!url){reject(new Error('"url" option is required.'));return promise}var frames=options.frames;if(!frames&&frames!==0){reject(new Error('"frames" option is required.'));return promise}var outputType=options.outputType||"jpg";var quality=options.quality;var cumulative=options.cumulative;var acceptedFrames=frames==="all"?"all":new MultiRange(frames);var inputType=typeof window==="undefined"?"image/gif":".GIF";getPixels(url,inputType,function(err,pixels,framesInfo){if(err){reject(err);return}if(pixels.shape.length<4){reject(new Error('"url" input should be multi-frame GIF.'));return}var frameData=[];var maxAccumulatedFrame=0;for(var i=0;i<pixels.shape[0];i++){if(acceptedFrames!=="all"&&!acceptedFrames.has(i)){continue}(function(frameIndex){frameData.push({getImage:function(){if(cumulative&&frameIndex>maxAccumulatedFrame){var lastFrame=pixels.pick(maxAccumulatedFrame);for(var f=maxAccumulatedFrame+1;f<=frameIndex;f++){var frame=pixels.pick(f);for(var x=0;x<frame.shape[0];x++){for(var y=0;y<frame.shape[1];y++){if(frame.get(x,y,3)===0){frame.set(x,y,0,lastFrame.get(x,y,0));frame.set(x,y,1,lastFrame.get(x,y,1));frame.set(x,y,2,lastFrame.get(x,y,2));frame.set(x,y,3,lastFrame.get(x,y,3))}}}lastFrame=frame}maxAccumulatedFrame=frameIndex}return savePixels(pixels.pick(frameIndex),outputType,{quality:quality})},frameIndex:frameIndex,frameInfo:framesInfo&&framesInfo[frameIndex]})})(i)}resolve(frameData)});return promise}module.exports=gifFrames},{"get-pixels-frame-info-update":15,"multi-integer-range":33,"save-pixels-jpeg-js-upgrade":81}],2:[function(require,module,exports){(function(global){"use strict";function compare(a,b){if(a===b){return 0}var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break}}if(x<y){return-1}if(y<x){return 1}return 0}function isBuffer(b){if(global.Buffer&&typeof global.Buffer.isBuffer==="function"){return global.Buffer.isBuffer(b)}return!!(b!=null&&b._isBuffer)}var util=require("util/");var hasOwn=Object.prototype.hasOwnProperty;var pSlice=Array.prototype.slice;var functionsHaveNames=function(){return function foo(){}.name==="foo"}();function pToString(obj){return Object.prototype.toString.call(obj)}function isView(arrbuf){if(isBuffer(arrbuf)){return false}if(typeof global.ArrayBuffer!=="function"){return false}if(typeof ArrayBuffer.isView==="function"){return ArrayBuffer.isView(arrbuf)}if(!arrbuf){return false}if(arrbuf instanceof DataView){return true}if(arrbuf.buffer&&arrbuf.buffer instanceof ArrayBuffer){return true}return false}var assert=module.exports=ok;var regex=/\s*function\s+([^\(\s]*)\s*/;function getName(func){if(!util.isFunction(func)){return}if(functionsHaveNames){return func.name}var str=func.toString();var match=str.match(regex);return match&&match[1]}assert.AssertionError=function AssertionError(options){this.name="AssertionError";this.actual=options.actual;this.expected=options.expected;this.operator=options.operator;if(options.message){this.message=options.message;this.generatedMessage=false}else{this.message=getMessage(this);this.generatedMessage=true}var stackStartFunction=options.stackStartFunction||fail;if(Error.captureStackTrace){Error.captureStackTrace(this,stackStartFunction)}else{var err=new Error;if(err.stack){var out=err.stack;var fn_name=getName(stackStartFunction);var idx=out.indexOf("\n"+fn_name);if(idx>=0){var next_line=out.indexOf("\n",idx+1);out=out.substring(next_line+1)}this.stack=out}}};util.inherits(assert.AssertionError,Error);function truncate(s,n){if(typeof s==="string"){return s.length<n?s:s.slice(0,n)}else{return s}}function inspect(something){if(functionsHaveNames||!util.isFunction(something)){return util.inspect(something)}var rawname=getName(something);var name=rawname?": "+rawname:"";return"[Function"+name+"]"}function getMessage(self){return truncate(inspect(self.actual),128)+" "+self.operator+" "+truncate(inspect(self.expected),128)}function fail(actual,expected,message,operator,stackStartFunction){throw new assert.AssertionError({message:message,actual:actual,expected:expected,operator:operator,stackStartFunction:stackStartFunction})}assert.fail=fail;function ok(value,message){if(!value)fail(value,true,message,"==",assert.ok)}assert.ok=ok;assert.equal=function equal(actual,expected,message){if(actual!=expected)fail(actual,expected,message,"==",assert.equal)};assert.notEqual=function notEqual(actual,expected,message){if(actual==expected){fail(actual,expected,message,"!=",assert.notEqual)}};assert.deepEqual=function deepEqual(actual,expected,message){if(!_deepEqual(actual,expected,false)){fail(actual,expected,message,"deepEqual",assert.deepEqual)}};assert.deepStrictEqual=function deepStrictEqual(actual,expected,message){if(!_deepEqual(actual,expected,true)){fail(actual,expected,message,"deepStrictEqual",assert.deepStrictEqual)}};function _deepEqual(actual,expected,strict,memos){if(actual===expected){return true}else if(isBuffer(actual)&&isBuffer(expected)){return compare(actual,expected)===0}else if(util.isDate(actual)&&util.isDate(expected)){return actual.getTime()===expected.getTime()}else if(util.isRegExp(actual)&&util.isRegExp(expected)){return actual.source===expected.source&&actual.global===expected.global&&actual.multiline===expected.multiline&&actual.lastIndex===expected.lastIndex&&actual.ignoreCase===expected.ignoreCase}else if((actual===null||typeof actual!=="object")&&(expected===null||typeof expected!=="object")){return strict?actual===expected:actual==expected}else if(isView(actual)&&isView(expected)&&pToString(actual)===pToString(expected)&&!(actual instanceof Float32Array||actual instanceof Float64Array)){return compare(new Uint8Array(actual.buffer),new Uint8Array(expected.buffer))===0}else if(isBuffer(actual)!==isBuffer(expected)){return false}else{memos=memos||{actual:[],expected:[]};var actualIndex=memos.actual.indexOf(actual);if(actualIndex!==-1){if(actualIndex===memos.expected.indexOf(expected)){return true}}memos.actual.push(actual);memos.expected.push(expected);return objEquiv(actual,expected,strict,memos)}}function isArguments(object){return Object.prototype.toString.call(object)=="[object Arguments]"}function objEquiv(a,b,strict,actualVisitedObjects){if(a===null||a===undefined||b===null||b===undefined)return false;if(util.isPrimitive(a)||util.isPrimitive(b))return a===b;if(strict&&Object.getPrototypeOf(a)!==Object.getPrototypeOf(b))return false;var aIsArgs=isArguments(a);var bIsArgs=isArguments(b);if(aIsArgs&&!bIsArgs||!aIsArgs&&bIsArgs)return false;if(aIsArgs){a=pSlice.call(a);b=pSlice.call(b);return _deepEqual(a,b,strict)}var ka=objectKeys(a);var kb=objectKeys(b);var key,i;if(ka.length!==kb.length)return false;ka.sort();kb.sort();for(i=ka.length-1;i>=0;i--){if(ka[i]!==kb[i])return false}for(i=ka.length-1;i>=0;i--){key=ka[i];if(!_deepEqual(a[key],b[key],strict,actualVisitedObjects))return false}return true}assert.notDeepEqual=function notDeepEqual(actual,expected,message){if(_deepEqual(actual,expected,false)){fail(actual,expected,message,"notDeepEqual",assert.notDeepEqual)}};assert.notDeepStrictEqual=notDeepStrictEqual;function notDeepStrictEqual(actual,expected,message){if(_deepEqual(actual,expected,true)){fail(actual,expected,message,"notDeepStrictEqual",notDeepStrictEqual)}}assert.strictEqual=function strictEqual(actual,expected,message){if(actual!==expected){fail(actual,expected,message,"===",assert.strictEqual)}};assert.notStrictEqual=function notStrictEqual(actual,expected,message){if(actual===expected){fail(actual,expected,message,"!==",assert.notStrictEqual)}};function expectedException(actual,expected){if(!actual||!expected){return false}if(Object.prototype.toString.call(expected)=="[object RegExp]"){return expected.test(actual)}try{if(actual instanceof expected){return true}}catch(e){}if(Error.isPrototypeOf(expected)){return false}return expected.call({},actual)===true}function _tryBlock(block){var error;try{block()}catch(e){error=e}return error}function _throws(shouldThrow,block,expected,message){var actual;if(typeof block!=="function"){throw new TypeError('"block" argument must be a function')}if(typeof expected==="string"){message=expected;expected=null}actual=_tryBlock(block);message=(expected&&expected.name?" ("+expected.name+").":".")+(message?" "+message:".");if(shouldThrow&&!actual){fail(actual,expected,"Missing expected exception"+message)}var userProvidedMessage=typeof message==="string";var isUnwantedException=!shouldThrow&&util.isError(actual);var isUnexpectedException=!shouldThrow&&actual&&!expected;if(isUnwantedException&&userProvidedMessage&&expectedException(actual,expected)||isUnexpectedException){fail(actual,expected,"Got unwanted exception"+message)}if(shouldThrow&&actual&&expected&&!expectedException(actual,expected)||!shouldThrow&&actual){throw actual}}assert.throws=function(block,error,message){_throws(true,block,error,message)};assert.doesNotThrow=function(block,error,message){_throws(false,block,error,message)};assert.ifError=function(err){if(err)throw err};var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj){if(hasOwn.call(obj,key))keys.push(key)}return keys}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"util/":104}],3:[function(require,module,exports){"use strict";exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i<len;++i){lookup[i]=code[i];revLookup[code.charCodeAt(i)]=i}revLookup["-".charCodeAt(0)]=62;revLookup["_".charCodeAt(0)]=63;function placeHoldersCount(b64){var len=b64.length;if(len%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}return b64[len-2]==="="?2:b64[len-1]==="="?1:0}function byteLength(b64){return b64.length*3/4-placeHoldersCount(b64)}function toByteArray(b64){var i,l,tmp,placeHolders,arr;var len=b64.length;placeHolders=placeHoldersCount(b64);arr=new Arr(len*3/4-placeHolders);l=placeHolders>0?len-4:len;var L=0;for(i=0;i<l;i+=4){tmp=revLookup[b64.charCodeAt(i)]<<18|revLookup[b64.charCodeAt(i+1)]<<12|revLookup[b64.charCodeAt(i+2)]<<6|revLookup[b64.charCodeAt(i+3)];arr[L++]=tmp>>16&255;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}if(placeHolders===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[L++]=tmp&255}else if(placeHolders===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;i<end;i+=3){tmp=(uint8[i]<<16)+(uint8[i+1]<<8)+uint8[i+2];output.push(tripletToBase64(tmp))}return output.join("")}function fromByteArray(uint8){var tmp;var len=uint8.length;var extraBytes=len%3;var output="";var parts=[];var maxChunkLength=16383;for(var i=0,len2=len-extraBytes;i<len2;i+=maxChunkLength){parts.push(encodeChunk(uint8,i,i+maxChunkLength>len2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];output+=lookup[tmp>>2];output+=lookup[tmp<<4&63];output+="=="}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];output+=lookup[tmp>>10];output+=lookup[tmp>>4&63];output+=lookup[tmp<<2&63];output+="="}parts.push(output);return parts.join("")}},{}],4:[function(require,module,exports){},{}],5:[function(require,module,exports){(function(process,Buffer){"use strict";var assert=require("assert");var Zstream=require("pako/lib/zlib/zstream");var zlib_deflate=require("pako/lib/zlib/deflate.js");var zlib_inflate=require("pako/lib/zlib/inflate.js");var constants=require("pako/lib/zlib/constants");for(var key in constants){exports[key]=constants[key]}exports.NONE=0;exports.DEFLATE=1;exports.INFLATE=2;exports.GZIP=3;exports.GUNZIP=4;exports.DEFLATERAW=5;exports.INFLATERAW=6;exports.UNZIP=7;var GZIP_HEADER_ID1=31;var GZIP_HEADER_ID2=139;function Zlib(mode){if(typeof mode!=="number"||mode<exports.DEFLATE||mode>exports.UNZIP){throw new TypeError("Bad argument")}this.dictionary=null;this.err=0;this.flush=0;this.init_done=false;this.level=0;this.memLevel=0;this.mode=mode;this.strategy=0;this.windowBits=0;this.write_in_progress=false;this.pending_close=false;this.gzip_id_bytes_read=0}Zlib.prototype.close=function(){if(this.write_in_progress){this.pending_close=true;return}this.pending_close=false;assert(this.init_done,"close before init");assert(this.mode<=exports.UNZIP);if(this.mode===exports.DEFLATE||this.mode===exports.GZIP||this.mode===exports.DEFLATERAW){zlib_deflate.deflateEnd(this.strm)}else if(this.mode===exports.INFLATE||this.mode===exports.GUNZIP||this.mode===exports.INFLATERAW||this.mode===exports.UNZIP){zlib_inflate.inflateEnd(this.strm)}this.mode=exports.NONE;this.dictionary=null};Zlib.prototype.write=function(flush,input,in_off,in_len,out,out_off,out_len){return this._write(true,flush,input,in_off,in_len,out,out_off,out_len)};Zlib.prototype.writeSync=function(flush,input,in_off,in_len,out,out_off,out_len){return this._write(false,flush,input,in_off,in_len,out,out_off,out_len)};Zlib.prototype._write=function(async,flush,input,in_off,in_len,out,out_off,out_len){assert.equal(arguments.length,8);assert(this.init_done,"write before init");assert(this.mode!==exports.NONE,"already finalized");assert.equal(false,this.write_in_progress,"write already in progress");assert.equal(false,this.pending_close,"close is pending");this.write_in_progress=true;assert.equal(false,flush===undefined,"must provide flush value");this.write_in_progress=true;if(flush!==exports.Z_NO_FLUSH&&flush!==exports.Z_PARTIAL_FLUSH&&flush!==exports.Z_SYNC_FLUSH&&flush!==exports.Z_FULL_FLUSH&&flush!==exports.Z_FINISH&&flush!==exports.Z_BLOCK){throw new Error("Invalid flush value")}if(input==null){input=Buffer.alloc(0);in_len=0;in_off=0}this.strm.avail_in=in_len;this.strm.input=input;this.strm.next_in=in_off;this.strm.avail_out=out_len;this.strm.output=out;this.strm.next_out=out_off;this.flush=flush;if(!async){this._process();if(this._checkError()){return this._afterSync()}return}var self=this;process.nextTick(function(){self._process();self._after()});return this};Zlib.prototype._afterSync=function(){var avail_out=this.strm.avail_out;var avail_in=this.strm.avail_in;this.write_in_progress=false;return[avail_in,avail_out]};Zlib.prototype._process=function(){var next_expected_header_byte=null;switch(this.mode){case exports.DEFLATE:case exports.GZIP:case exports.DEFLATERAW:this.err=zlib_deflate.deflate(this.strm,this.flush);break;case exports.UNZIP:if(this.strm.avail_in>0){next_expected_header_byte=this.strm.next_in}switch(this.gzip_id_bytes_read){case 0:if(next_expected_header_byte===null){break}if(this.strm.input[next_expected_header_byte]===GZIP_HEADER_ID1){this.gzip_id_bytes_read=1;next_expected_header_byte++;if(this.strm.avail_in===1){break}}else{this.mode=exports.INFLATE;break}case 1:if(next_expected_header_byte===null){break}if(this.strm.input[next_expected_header_byte]===GZIP_HEADER_ID2){this.gzip_id_bytes_read=2;this.mode=exports.GUNZIP}else{this.mode=exports.INFLATE}break;default:throw new Error("invalid number of gzip magic number bytes read")}case exports.INFLATE:case exports.GUNZIP:case exports.INFLATERAW:this.err=zlib_inflate.inflate(this.strm,this.flush);if(this.err===exports.Z_NEED_DICT&&this.dictionary){this.err=zlib_inflate.inflateSetDictionary(this.strm,this.dictionary);if(this.err===exports.Z_OK){this.err=zlib_inflate.inflate(this.strm,this.flush)}else if(this.err===exports.Z_DATA_ERROR){this.err=exports.Z_NEED_DICT}}while(this.strm.avail_in>0&&this.mode===exports.GUNZIP&&this.err===exports.Z_STREAM_END&&this.strm.next_in[0]!==0){this.reset();this.err=zlib_inflate.inflate(this.strm,this.flush)}break;default:throw new Error("Unknown mode "+this.mode)}};Zlib.prototype._checkError=function(){switch(this.err){case exports.Z_OK:case exports.Z_BUF_ERROR:if(this.strm.avail_out!==0&&this.flush===exports.Z_FINISH){this._error("unexpected end of file");return false}break;case exports.Z_STREAM_END:break;case exports.Z_NEED_DICT:if(this.dictionary==null){this._error("Missing dictionary")}else{this._error("Bad dictionary")}return false;default:this._error("Zlib error");return false}return true};Zlib.prototype._after=function(){if(!this._checkError()){return}var avail_out=this.strm.avail_out;var avail_in=this.strm.avail_in;this.write_in_progress=false;this.callback(avail_in,avail_out);if(this.pending_close){this.close()}};Zlib.prototype._error=function(message){if(this.strm.msg){message=this.strm.msg}this.onerror(message,this.err);this.write_in_progress=false;if(this.pending_close){this.close()}};Zlib.prototype.init=function(windowBits,level,memLevel,strategy,dictionary){assert(arguments.length===4||arguments.length===5,"init(windowBits, level, memLevel, strategy, [dictionary])");assert(windowBits>=8&&windowBits<=15,"invalid windowBits");assert(level>=-1&&level<=9,"invalid compression level");assert(memLevel>=1&&memLevel<=9,"invalid memlevel");assert(strategy===exports.Z_FILTERED||strategy===exports.Z_HUFFMAN_ONLY||strategy===exports.Z_RLE||strategy===exports.Z_FIXED||strategy===exports.Z_DEFAULT_STRATEGY,"invalid strategy");this._init(level,windowBits,memLevel,strategy,dictionary);this._setDictionary()};Zlib.prototype.params=function(){throw new Error("deflateParams Not supported")};Zlib.prototype.reset=function(){this._reset();this._setDictionary()};Zlib.prototype._init=function(level,windowBits,memLevel,strategy,dictionary){this.level=level;this.windowBits=windowBits;this.memLevel=memLevel;this.strategy=strategy;this.flush=exports.Z_NO_FLUSH;this.err=exports.Z_OK;if(this.mode===exports.GZIP||this.mode===exports.GUNZIP){this.windowBits+=16}if(this.mode===exports.UNZIP){this.windowBits+=32}if(this.mode===exports.DEFLATERAW||this.mode===exports.INFLATERAW){this.windowBits=-1*this.windowBits}this.strm=new Zstream;switch(this.mode){case exports.DEFLATE:case exports.GZIP:case exports.DEFLATERAW:this.err=zlib_deflate.deflateInit2(this.strm,this.level,exports.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case exports.INFLATE:case exports.GUNZIP:case exports.INFLATERAW:case exports.UNZIP:this.err=zlib_inflate.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}if(this.err!==exports.Z_OK){this._error("Init error")}this.dictionary=dictionary;this.write_in_progress=false;this.init_done=true};Zlib.prototype._setDictionary=function(){if(this.dictionary==null){return}this.err=exports.Z_OK;switch(this.mode){case exports.DEFLATE:case exports.DEFLATERAW:this.err=zlib_deflate.deflateSetDictionary(this.strm,this.dictionary);break;default:break}if(this.err!==exports.Z_OK){this._error("Failed to set dictionary")}};Zlib.prototype._reset=function(){this.err=exports.Z_OK;switch(this.mode){case exports.DEFLATE:case exports.DEFLATERAW:case exports.GZIP:this.err=zlib_deflate.deflateReset(this.strm);break;case exports.INFLATE:case exports.INFLATERAW:case exports.GUNZIP:this.err=zlib_inflate.inflateReset(this.strm);break;default:break}if(this.err!==exports.Z_OK){this._error("Failed to reset stream")}};exports.Zlib=Zlib}).call(this,require("_process"),require("buffer").Buffer)},{_process:73,assert:2,buffer:7,"pako/lib/zlib/constants":41,"pako/lib/zlib/deflate.js":43,"pako/lib/zlib/inflate.js":45,"pako/lib/zlib/zstream":49}],6:[function(require,module,exports){(function(process){"use strict";var Buffer=require("buffer").Buffer;var Transform=require("stream").Transform;var binding=require("./binding");var util=require("util");var assert=require("assert").ok;var kMaxLength=require("buffer").kMaxLength;var kRangeErrorMessage="Cannot create final Buffer. It would be larger "+"than 0x"+kMaxLength.toString(16)+" bytes";binding.Z_MIN_WINDOWBITS=8;binding.Z_MAX_WINDOWBITS=15;binding.Z_DEFAULT_WINDOWBITS=15;binding.Z_MIN_CHUNK=64;binding.Z_MAX_CHUNK=Infinity;binding.Z_DEFAULT_CHUNK=16*1024;binding.Z_MIN_MEMLEVEL=1;binding.Z_MAX_MEMLEVEL=9;binding.Z_DEFAULT_MEMLEVEL=8;binding.Z_MIN_LEVEL=-1;binding.Z_MAX_LEVEL=9;binding.Z_DEFAULT_LEVEL=binding.Z_DEFAULT_COMPRESSION;var bkeys=Object.keys(binding);for(var bk=0;bk<bkeys.length;bk++){var bkey=bkeys[bk];if(bkey.match(/^Z/)){Object.defineProperty(exports,bkey,{enumerable:true,value:binding[bkey],writable:false})}}var codes={Z_OK:binding.Z_OK,Z_STREAM_END:binding.Z_STREAM_END,Z_NEED_DICT:binding.Z_NEED_DICT,Z_ERRNO:binding.Z_ERRNO,Z_STREAM_ERROR:binding.Z_STREAM_ERROR,Z_DATA_ERROR:binding.Z_DATA_ERROR,Z_MEM_ERROR:binding.Z_MEM_ERROR,Z_BUF_ERROR:binding.Z_BUF_ERROR,Z_VERSION_ERROR:binding.Z_VERSION_ERROR};var ckeys=Object.keys(codes);for(var ck=0;ck<ckeys.length;ck++){var ckey=ckeys[ck];codes[codes[ckey]]=ckey}Object.defineProperty(exports,"codes",{enumerable:true,value:Object.freeze(codes),writable:false});exports.Deflate=Deflate;exports.Inflate=Inflate;exports.Gzip=Gzip;exports.Gunzip=Gunzip;exports.DeflateRaw=DeflateRaw;exports.InflateRaw=InflateRaw;exports.Unzip=Unzip;exports.createDeflate=function(o){return new Deflate(o)};exports.createInflate=function(o){return new Inflate(o)};exports.createDeflateRaw=function(o){return new DeflateRaw(o)};exports.createInflateRaw=function(o){return new InflateRaw(o)};exports.createGzip=function(o){return new Gzip(o)};exports.createGunzip=function(o){return new Gunzip(o)};exports.createUnzip=function(o){return new Unzip(o)};exports.deflate=function(buffer,opts,callback){if(typeof opts==="function"){callback=opts;opts={}}return zlibBuffer(new Deflate(opts),buffer,callback)};exports.deflateSync=function(buffer,opts){return zlibBufferSync(new Deflate(opts),buffer)};exports.gzip=function(buffer,opts,callback){if(typeof opts==="function"){callback=opts;opts={}}return zlibBuffer(new Gzip(opts),buffer,callback)};exports.gzipSync=function(buffer,opts){return zlibBufferSync(new Gzip(opts),buffer)};exports.deflateRaw=function(buffer,opts,callback){if(typeof opts==="function"){callback=opts;opts={}}return zlibBuffer(new DeflateRaw(opts),buffer,callback)};exports.deflateRawSync=function(buffer,opts){return zlibBufferSync(new DeflateRaw(opts),buffer)};exports.unzip=function(buffer,opts,callback){if(typeof opts==="function"){callback=opts;opts={}}return zlibBuffer(new Unzip(opts),buffer,callback)};exports.unzipSync=function(buffer,opts){return zlibBufferSync(new Unzip(opts),buffer)};exports.inflate=function(buffer,opts,callback){if(typeof opts==="function"){callback=opts;opts={}}return zlibBuffer(new Inflate(opts),buffer,callback)};exports.inflateSync=function(buffer,opts){return zlibBufferSync(new Inflate(opts),buffer)};exports.gunzip=function(buffer,opts,callback){if(typeof opts==="function"){callback=opts;opts={}}return zlibBuffer(new Gunzip(opts),buffer,callback)};exports.gunzipSync=function(buffer,opts){return zlibBufferSync(new Gunzip(opts),buffer)};exports.inflateRaw=function(buffer,opts,callback){if(typeof opts==="function"){callback=opts;opts={}}return zlibBuffer(new InflateRaw(opts),buffer,callback)};exports.inflateRawSync=function(buffer,opts){return zlibBufferSync(new InflateRaw(opts),buffer)};function zlibBuffer(engine,buffer,callback){var buffers=[];var nread=0;engine.on("error",onError);engine.on("end",onEnd);engine.end(buffer);flow();function flow(){var chunk;while(null!==(chunk=engine.read())){buffers.push(chunk);nread+=chunk.length}engine.once("readable",flow)}function onError(err){engine.removeListener("end",onEnd);engine.removeListener("readable",flow);callback(err)}function onEnd(){var buf;var err=null;if(nread>=kMaxLength){err=new RangeError(kRangeErrorMessage)}else{buf=Buffer.concat(buffers,nread)}buffers=[];engine.close();callback(err,buf)}}function zlibBufferSync(engine,buffer){if(typeof buffer==="string")buffer=Buffer.from(buffer);if(!Buffer.isBuffer(buffer))throw new TypeError("Not a string or buffer");var flushFlag=engine._finishFlushFlag;return engine._processChunk(buffer,flushFlag)}function Deflate(opts){if(!(this instanceof Deflate))return new Deflate(opts);Zlib.call(this,opts,binding.DEFLATE)}function Inflate(opts){if(!(this instanceof Inflate))return new Inflate(opts);Zlib.call(this,opts,binding.INFLATE)}function Gzip(opts){if(!(this instanceof Gzip))return new Gzip(opts);Zlib.call(this,opts,binding.GZIP)}function Gunzip(opts){if(!(this instanceof Gunzip))return new Gunzip(opts);Zlib.call(this,opts,binding.GUNZIP)}function DeflateRaw(opts){if(!(this instanceof DeflateRaw))return new DeflateRaw(opts);Zlib.call(this,opts,binding.DEFLATERAW)}function InflateRaw(opts){if(!(this instanceof InflateRaw))return new InflateRaw(opts);Zlib.call(this,opts,binding.INFLATERAW)}function Unzip(opts){if(!(this instanceof Unzip))return new Unzip(opts);Zlib.call(this,opts,binding.UNZIP)}function isValidFlushFlag(flag){return flag===binding.Z_NO_FLUSH||flag===binding.Z_PARTIAL_FLUSH||flag===binding.Z_SYNC_FLUSH||flag===binding.Z_FULL_FLUSH||flag===binding.Z_FINISH||flag===binding.Z_BLOCK}function Zlib(opts,mode){var _this=this;this._opts=opts=opts||{};this._chunkSize=opts.chunkSize||exports.Z_DEFAULT_CHUNK;Transform.call(this,opts);if(opts.flush&&!isValidFlushFlag(opts.flush)){throw new Error("Invalid flush flag: "+opts.flush)}if(opts.finishFlush&&!isValidFlushFlag(opts.finishFlush)){throw new Error("Invalid flush flag: "+opts.finishFlush)}this._flushFlag=opts.flush||binding.Z_NO_FLUSH;this._finishFlushFlag=typeof opts.finishFlush!=="undefined"?opts.finishFlush:binding.Z_FINISH;if(opts.chunkSize){if(opts.chunkSize<exports.Z_MIN_CHUNK||opts.chunkSize>exports.Z_MAX_CHUNK){throw new Error("Invalid chunk size: "+opts.chunkSize)}}if(opts.windowBits){if(opts.windowBits<exports.Z_MIN_WINDOWBITS||opts.windowBits>exports.Z_MAX_WINDOWBITS){throw new Error("Invalid windowBits: "+opts.windowBits)}}if(opts.level){if(opts.level<exports.Z_MIN_LEVEL||opts.level>exports.Z_MAX_LEVEL){throw new Error("Invalid compression level: "+opts.level)}}if(opts.memLevel){if(opts.memLevel<exports.Z_MIN_MEMLEVEL||opts.memLevel>exports.Z_MAX_MEMLEVEL){throw new Error("Invalid memLevel: "+opts.memLevel)}}if(opts.strategy){if(opts.strategy!=exports.Z_FILTERED&&opts.strategy!=exports.Z_HUFFMAN_ONLY&&opts.strategy!=exports.Z_RLE&&opts.strategy!=exports.Z_FIXED&&opts.strategy!=exports.Z_DEFAULT_STRATEGY){throw new Error("Invalid strategy: "+opts.strategy)}}if(opts.dictionary){if(!Buffer.isBuffer(opts.dictionary)){throw new Error("Invalid dictionary: it should be a Buffer instance")}}this._handle=new binding.Zlib(mode);var self=this;this._hadError=false;this._handle.onerror=function(message,errno){_close(self);self._hadError=true;var error=new Error(message);error.errno=errno;error.code=exports.codes[errno];self.emit("error",error)};var level=exports.Z_DEFAULT_COMPRESSION;if(typeof opts.level==="number")level=opts.level;var strategy=exports.Z_DEFAULT_STRATEGY;if(typeof opts.strategy==="number")strategy=opts.strategy;this._handle.init(opts.windowBits||exports.Z_DEFAULT_WINDOWBITS,level,opts.memLevel||exports.Z_DEFAULT_MEMLEVEL,strategy,opts.dictionary);this._buffer=Buffer.allocUnsafe(this._chunkSize);this._offset=0;this._level=level;this._strategy=strategy;this.once("end",this.close);Object.defineProperty(this,"_closed",{get:function(){return!_this._handle},configurable:true,enumerable:true})}util.inherits(Zlib,Transform);Zlib.prototype.params=function(level,strategy,callback){if(level<exports.Z_MIN_LEVEL||level>exports.Z_MAX_LEVEL){throw new RangeError("Invalid compression level: "+level)}if(strategy!=exports.Z_FILTERED&&strategy!=exports.Z_HUFFMAN_ONLY&&strategy!=exports.Z_RLE&&strategy!=exports.Z_FIXED&&strategy!=exports.Z_DEFAULT_STRATEGY){throw new TypeError("Invalid strategy: "+strategy)}if(this._level!==level||this._strategy!==strategy){var self=this;this.flush(binding.Z_SYNC_FLUSH,function(){assert(self._handle,"zlib binding closed");self._handle.params(level,strategy);if(!self._hadError){self._level=level;self._strategy=strategy;if(callback)callback()}})}else{process.nextTick(callback)}};Zlib.prototype.reset=function(){assert(this._handle,"zlib binding closed");return this._handle.reset()};Zlib.prototype._flush=function(callback){this._transform(Buffer.alloc(0),"",callback)};Zlib.prototype.flush=function(kind,callback){var _this2=this;var ws=this._writableState;if(typeof kind==="function"||kind===undefined&&!callback){callback=kind;kind=binding.Z_FULL_FLUSH}if(ws.ended){if(callback)process.nextTick(callback)}else if(ws.ending){if(callback)this.once("end",callback)}else if(ws.needDrain){if(callback){this.once("drain",function(){return _this2.flush(kind,callback)})}}else{this._flushFlag=kind;this.write(Buffer.alloc(0),"",callback)}};Zlib.prototype.close=function(callback){_close(this,callback);process.nextTick(emitCloseNT,this)};function _close(engine,callback){if(callback)process.nextTick(callback);if(!engine._handle)return;engine._handle.close();engine._handle=null}function emitCloseNT(self){self.emit("close")}Zlib.prototype._transform=function(chunk,encoding,cb){var flushFlag;var ws=this._writableState;var ending=ws.ending||ws.ended;var last=ending&&(!chunk||ws.length===chunk.length);if(chunk!==null&&!Buffer.isBuffer(chunk))return cb(new Error("invalid input"));if(!this._handle)return cb(new Error("zlib binding closed"));if(last)flushFlag=this._finishFlushFlag;else{flushFlag=this._flushFlag;if(chunk.length>=ws.length){this._flushFlag=this._opts.flush||binding.Z_NO_FLUSH}}this._processChunk(chunk,flushFlag,cb)};Zlib.prototype._processChunk=function(chunk,flushFlag,cb){var availInBefore=chunk&&chunk.length;var availOutBefore=this._chunkSize-this._offset;var inOff=0;var self=this;var async=typeof cb==="function";if(!async){var buffers=[];var nread=0;var error;this.on("error",function(er){error=er});assert(this._handle,"zlib binding closed");do{var res=this._handle.writeSync(flushFlag,chunk,inOff,availInBefore,this._buffer,this._offset,availOutBefore)}while(!this._hadError&&callback(res[0],res[1]));if(this._hadError){throw error}if(nread>=kMaxLength){_close(this);throw new RangeError(kRangeErrorMessage)}var buf=Buffer.concat(buffers,nread);_close(this);return buf}assert(this._handle,"zlib binding closed");var req=this._handle.write(flushFlag,chunk,inOff,availInBefore,this._buffer,this._offset,availOutBefore);req.buffer=chunk;req.callback=callback;function callback(availInAfter,availOutAfter){if(this){this.buffer=null;this.callback=null}if(self._hadError)return;var have=availOutBefore-availOutAfter;assert(have>=0,"have should not go down");if(have>0){var out=self._buffer.slice(self._offset,self._offset+have);self._offset+=have;if(async){self.push(out)}else{buffers.push(out);nread+=out.length}}if(availOutAfter===0||self._offset>=self._chunkSize){availOutBefore=self._chunkSize;self._offset=0;self._buffer=Buffer.allocUnsafe(self._chunkSize)}if(availOutAfter===0){inOff+=availInBefore-availInAfter;availInBefore=availInAfter;if(!async)return true;var newReq=self._handle.write(flushFlag,chunk,inOff,availInBefore,self._buffer,self._offset,self._chunkSize);newReq.callback=callback;newReq.buffer=chunk;return}if(!async)return false;cb()}};util.inherits(Deflate,Zlib);util.inherits(Inflate,Zlib);util.inherits(Gzip,Zlib);util.inherits(Gunzip,Zlib);util.inherits(DeflateRaw,Zlib);util.inherits(InflateRaw,Zlib);util.inherits(Unzip,Zlib)}).call(this,require("_process"))},{"./binding":5,_process:73,assert:2,buffer:7,stream:82,util:104}],7:[function(require,module,exports){"use strict";var base64=require("base64-js");var ieee754=require("ieee754");exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;var K_MAX_LENGTH=2147483647;exports.kMaxLength=K_MAX_LENGTH;Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!=="undefined"&&typeof console.error==="function"){console.error("This browser lacks typed array (Uint8Array) support which is required by "+"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.")}function typedArraySupport(){try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return arr.foo()===42}catch(e){return false}}function createBuffer(length){if(length>K_MAX_LENGTH){throw new RangeError("Invalid typed array length")}var buf=new Uint8Array(length);buf.__proto__=Buffer.prototype;return buf}function Buffer(arg,encodingOrOffset,length){if(typeof arg==="number"){if(typeof encodingOrOffset==="string"){throw new Error("If encoding is specified then the first argument must be a string")}return allocUnsafe(arg)}return from(arg,encodingOrOffset,length)}if(typeof Symbol!=="undefined"&&Symbol.species&&Buffer[Symbol.species]===Buffer){Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:true,enumerable:false,writable:false})}Buffer.poolSize=8192;function from(value,encodingOrOffset,length){if(typeof value==="number"){throw new TypeError('"value" argument must not be a number')}if(value instanceof ArrayBuffer){return fromArrayBuffer(value,encodingOrOffset,length)}if(typeof value==="string"){return fromString(value,encodingOrOffset)}return fromObject(value)}Buffer.from=function(value,encodingOrOffset,length){return from(value,encodingOrOffset,length)};Buffer.prototype.__proto__=Uint8Array.prototype;Buffer.__proto__=Uint8Array;function assertSize(size){if(typeof size!=="number"){throw new TypeError('"size" argument must be a number')}else if(size<0){throw new RangeError('"size" argument must not be negative')}}function alloc(size,fill,encoding){assertSize(size);if(size<=0){return createBuffer(size)}if(fill!==undefined){return typeof encoding==="string"?createBuffer(size).fill(fill,encoding):createBuffer(size).fill(fill)}return createBuffer(size)}Buffer.alloc=function(size,fill,encoding){return alloc(size,fill,encoding)};function allocUnsafe(size){assertSize(size);return createBuffer(size<0?0:checked(size)|0)}Buffer.allocUnsafe=function(size){return allocUnsafe(size)};Buffer.allocUnsafeSlow=function(size){return allocUnsafe(size)};function fromString(string,encoding){if(typeof encoding!=="string"||encoding===""){encoding="utf8"}if(!Buffer.isEncoding(encoding)){throw new TypeError('"encoding" must be a valid string encoding')}var length=byteLength(string,encoding)|0;var buf=createBuffer(length);var actual=buf.write(string,encoding);if(actual!==length){buf=buf.slice(0,actual)}return buf}function fromArrayLike(array){var length=array.length<0?0:checked(array.length)|0;var buf=createBuffer(length);for(var i=0;i<length;i+=1){buf[i]=array[i]&255}return buf}function fromArrayBuffer(array,byteOffset,length){if(byteOffset<0||array.byteLength<byteOffset){throw new RangeError("'offset' is out of bounds")}if(array.byteLength<byteOffset+(length||0)){throw new RangeError("'length' is out of bounds")}var buf;if(byteOffset===undefined&&length===undefined){buf=new Uint8Array(array)}else if(length===undefined){buf=new Uint8Array(array,byteOffset)}else{buf=new Uint8Array(array,byteOffset,length)}buf.__proto__=Buffer.prototype;return buf}function fromObject(obj){if(Buffer.isBuffer(obj)){var len=checked(obj.length)|0;var buf=createBuffer(len);if(buf.length===0){return buf}obj.copy(buf,0,0,len);return buf}if(obj){if(isArrayBufferView(obj)||"length"in obj){if(typeof obj.length!=="number"||numberIsNaN(obj.length)){return createBuffer(0)}return fromArrayLike(obj)}if(obj.type==="Buffer"&&Array.isArray(obj.data)){return fromArrayLike(obj.data)}}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function checked(length){if(length>=K_MAX_LENGTH){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+K_MAX_LENGTH.toString(16)+" bytes")}return length|0}function SlowBuffer(length){if(+length!=length){length=0}return Buffer.alloc(+length)}Buffer.isBuffer=function isBuffer(b){return b!=null&&b._isBuffer===true};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};Buffer.isEncoding=function isEncoding(encoding){switch(String(encoding).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return true;default:return false}};Buffer.concat=function concat(list,length){if(!Array.isArray(list)){throw new TypeError('"list" argument must be an Array of Buffers')}if(list.length===0){return Buffer.alloc(0)}var i;if(length===undefined){length=0;for(i=0;i<list.length;++i){length+=list[i].length}}var buffer=Buffer.allocUnsafe(length);var pos=0;for(i=0;i<list.length;++i){var buf=list[i];if(!Buffer.isBuffer(buf)){throw new TypeError('"list" argument must be an Array of Buffers')}buf.copy(buffer,pos);pos+=buf.length}return buffer};function byteLength(string,encoding){if(Buffer.isBuffer(string)){return string.length}if(isArrayBufferView(string)||string instanceof ArrayBuffer){return string.byteLength}if(typeof string!=="string"){string=""+string}var len=string.length;if(len===0)return 0;var loweredCase=false;for(;;){switch(encoding){case"ascii":case"latin1":case"binary":return len;case"utf8":case"utf-8":case undefined:return utf8ToBytes(string).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return len*2;case"hex":return len>>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;if(start===undefined||start<0){start=0}if(start>this.length){return""}if(end===undefined||end>this.length){end=this.length}if(end<=0){return""}end>>>=0;start>>>=0;if(end<=start){return""}if(!encoding)encoding="utf8";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype._isBuffer=true;function swap(b,n,m){var i=b[n];b[n]=b[m];b[m]=i}Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(var i=0;i<len;i+=2){swap(this,i,i+1)}return this};Buffer.prototype.swap32=function swap32(){var len=this.length;if(len%4!==0){throw new RangeError("Buffer size must be a multiple of 32-bits")}for(var i=0;i<len;i+=4){swap(this,i,i+3);swap(this,i+1,i+2)}return this};Buffer.prototype.swap64=function swap64(){var len=this.length;if(len%8!==0){throw new RangeError("Buffer size must be a multiple of 64-bits")}for(var i=0;i<len;i+=8){swap(this,i,i+7);swap(this,i+1,i+6);swap(this,i+2,i+5);swap(this,i+3,i+4)}return this};Buffer.prototype.toString=function toString(){var length=this.length;if(length===0)return"";if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments)};Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return"<Buffer "+str+">"};Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(!Buffer.isBuffer(target)){throw new TypeError("Argument must be a Buffer")}if(start===undefined){start=0}if(end===undefined){end=target?target.length:0}if(thisStart===undefined){thisStart=0}if(thisEnd===undefined){thisEnd=this.length}if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError("out of range index")}if(thisStart>=thisEnd&&start>=end){return 0}if(thisStart>=thisEnd){return-1}if(start>=end){return 1}start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;var x=thisEnd-thisStart;var y=end-start;var len=Math.min(x,y);var thisCopy=this.slice(thisStart,thisEnd);var targetCopy=target.slice(start,end);for(var i=0;i<len;++i){if(thisCopy[i]!==targetCopy[i]){x=thisCopy[i];y=targetCopy[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){if(buffer.length===0)return-1;if(typeof byteOffset==="string"){encoding=byteOffset;byteOffset=0}else if(byteOffset>2147483647){byteOffset=2147483647}else if(byteOffset<-2147483648){byteOffset=-2147483648}byteOffset=+byteOffset;if(numberIsNaN(byteOffset)){byteOffset=dir?0:buffer.length-1}if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else byteOffset=buffer.length-1}else if(byteOffset<0){if(dir)byteOffset=0;else return-1}if(typeof val==="string"){val=Buffer.from(val,encoding)}if(Buffer.isBuffer(val)){if(val.length===0){return-1}return arrayIndexOf(buffer,val,byteOffset,encoding,dir)}else if(typeof val==="number"){val=val&255;if(typeof Uint8Array.prototype.indexOf==="function"){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset)}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset)}}return arrayIndexOf(buffer,[val],byteOffset,encoding,dir)}throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){var indexSize=1;var arrLength=arr.length;var valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==="ucs2"||encoding==="ucs-2"||encoding==="utf16le"||encoding==="utf-16le"){if(arr.length<2||val.length<2){return-1}indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2}}function read(buf,i){if(indexSize===1){return buf[i]}else{return buf.readUInt16BE(i*indexSize)}}var i;if(dir){var foundIndex=-1;for(i=byteOffset;i<arrLength;i++){if(read(arr,i)===read(val,foundIndex===-1?0:i-foundIndex)){if(foundIndex===-1)foundIndex=i;if(i-foundIndex+1===valLength)return foundIndex*indexSize}else{if(foundIndex!==-1)i-=i-foundIndex;foundIndex=-1}}}else{if(byteOffset+valLength>arrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){var found=true;for(var j=0;j<valLength;j++){if(read(arr,i+j)!==read(val,j)){found=false;break}}if(found)return i}}return-1}Buffer.prototype.includes=function includes(val,byteOffset,encoding){return this.indexOf(val,byteOffset,encoding)!==-1};Buffer.prototype.indexOf=function indexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,true)};Buffer.prototype.lastIndexOf=function lastIndexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,false)};function hexWrite(buf,string,offset,length){offset=Number(offset)||0;var remaining=buf.length-offset;if(!length){length=remaining}else{length=Number(length);if(length>remaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new TypeError("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;i<length;++i){var parsed=parseInt(string.substr(i*2,2),16);if(numberIsNaN(parsed))return i;buf[offset+i]=parsed}return i}function utf8Write(buf,string,offset,length){return blitBuffer(utf8ToBytes(string,buf.length-offset),buf,offset,length)}function asciiWrite(buf,string,offset,length){return blitBuffer(asciiToBytes(string),buf,offset,length)}function latin1Write(buf,string,offset,length){return asciiWrite(buf,string,offset,length)}function base64Write(buf,string,offset,length){return blitBuffer(base64ToBytes(string),buf,offset,length)}function ucs2Write(buf,string,offset,length){return blitBuffer(utf16leToBytes(string,buf.length-offset),buf,offset,length)}Buffer.prototype.write=function write(string,offset,length,encoding){if(offset===undefined){encoding="utf8";length=this.length;offset=0}else if(length===undefined&&typeof offset==="string"){encoding=offset;length=this.length;offset=0}else if(isFinite(offset)){offset=offset>>>0;if(isFinite(length)){length=length>>>0;if(encoding===undefined)encoding="utf8"}else{encoding=length;length=undefined}}else{throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported")}var remaining=this.length-offset;if(length===undefined||length>remaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"latin1":case"binary":return latin1Write(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i<end){var firstByte=buf[i];var codePoint=null;var bytesPerSequence=firstByte>239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}var res="";var i=0;while(i<len){res+=String.fromCharCode.apply(String,codePoints.slice(i,i+=MAX_ARGUMENTS_LENGTH))}return res}function asciiSlice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]&127)}return ret}function latin1Slice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i])}return ret}function hexSlice(buf,start,end){var len=buf.length;if(!start||start<0)start=0;if(!end||end<0||end>len)end=len;var out="";for(var i=start;i<end;++i){out+=toHex(buf[i])}return out}function utf16leSlice(buf,start,end){var bytes=buf.slice(start,end);var res="";for(var i=0;i<bytes.length;i+=2){res+=String.fromCharCode(bytes[i]+bytes[i+1]*256)}return res}Buffer.prototype.slice=function slice(start,end){var len=this.length;start=~~start;end=end===undefined?len:~~end;if(start<0){start+=len;if(start<0)start=0}else if(start>len){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(end<start)end=start;var newBuf=this.subarray(start,end);newBuf.__proto__=Buffer.prototype;return newBuf};function checkOffset(offset,ext,length){if(offset%1!==0||offset<0)throw new RangeError("offset is not uint");if(offset+ext>length)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}return val};Buffer.prototype.readUIntBE=function readUIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){checkOffset(offset,byteLength,this.length)}var val=this[offset+--byteLength];var mul=1;while(byteLength>0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||value<min)throw new RangeError('"value" argument is out of bounds');if(offset+ext>buf.length)throw new RangeError("Index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var mul=1;var i=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var i=byteLength-1;var mul=1;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,255,0);this[offset]=value&255;return offset+1};Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);this[offset]=value&255;this[offset+1]=value>>>8;return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);this[offset]=value>>>8;this[offset+1]=value&255;return offset+2};Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255;return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255;return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){if(value<0&&sub===0&&this[offset+i-1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);this[offset]=value&255;this[offset+1]=value>>>8;return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);this[offset]=value>>>8;this[offset+1]=value&255;return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24;return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255;return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(offset<0)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e38,-3.4028234663852886e38)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157e308,-1.7976931348623157e308)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end<start)end=start;if(end===start)return 0;if(target.length===0||this.length===0)return 0;if(targetStart<0){throw new RangeError("targetStart out of bounds")}if(start<0||start>=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart<end-start){end=target.length-targetStart+start}var len=end-start;var i;if(this===target&&start<targetStart&&targetStart<end){for(i=len-1;i>=0;--i){target[i+targetStart]=this[i+start]}}else if(len<1e3){for(i=0;i<len;++i){target[i+targetStart]=this[i+start]}}else{Uint8Array.prototype.set.call(target,this.subarray(start,start+len),targetStart)}return len};Buffer.prototype.fill=function fill(val,start,end,encoding){if(typeof val==="string"){if(typeof start==="string"){encoding=start;start=0;end=this.length}else if(typeof end==="string"){encoding=end;end=this.length}if(val.length===1){var code=val.charCodeAt(0);if(code<256){val=code}}if(encoding!==undefined&&typeof encoding!=="string"){throw new TypeError("encoding must be a string")}if(typeof encoding==="string"&&!Buffer.isEncoding(encoding)){throw new TypeError("Unknown encoding: "+encoding)}}else if(typeof val==="number"){val=val&255}if(start<0||this.length<start||this.length<end){throw new RangeError("Out of range index")}if(end<=start){return this}start=start>>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;var i;if(typeof val==="number"){for(i=start;i<end;++i){this[i]=val}}else{var bytes=Buffer.isBuffer(val)?val:new Buffer(val,encoding);var len=bytes.length;for(i=0;i<end-start;++i){this[i+start]=bytes[i%len]}}return this};var INVALID_BASE64_RE=/[^+/0-9A-Za-z-_]/g;function base64clean(str){str=str.trim().replace(INVALID_BASE64_RE,"");if(str.length<2)return"";while(str.length%4!==0){str=str+"="}return str}function toHex(n){if(n<16)return"0"+n.toString(16);return n.toString(16)}function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];for(var i=0;i<length;++i){codePoint=string.charCodeAt(i);if(codePoint>55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i<str.length;++i){byteArray.push(str.charCodeAt(i)&255)}return byteArray}function utf16leToBytes(str,units){var c,hi,lo;var byteArray=[];for(var i=0;i<str.length;++i){if((units-=2)<0)break;c=str.charCodeAt(i);hi=c>>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i<length;++i){if(i+offset>=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function isArrayBufferView(obj){return typeof ArrayBuffer.isView==="function"&&ArrayBuffer.isView(obj)}function numberIsNaN(obj){return obj!==obj}},{"base64-js":3,ieee754:25}],8:[function(require,module,exports){(function(Buffer){"use strict";var Readable=require("readable-stream").Readable;var util=require("util");module.exports=ContentStream;function ContentStream(obj,options){if(!(this instanceof ContentStream)){return new ContentStream(obj,options)}Readable.call(this,options);if(obj===null||obj===undefined){obj=String(obj)}this._obj=obj}util.inherits(ContentStream,Readable);ContentStream.prototype._read=function(n){var obj=this._obj;if(typeof obj==="string"){this.push(new Buffer(obj))}else if(Buffer.isBuffer(obj)){this.push(obj)}else{this.push(new Buffer(JSON.stringify(obj)))}this.push(null)}}).call(this,require("buffer").Buffer)},{buffer:7,"readable-stream":79,util:104}],9:[function(require,module,exports){(function(Buffer){function isArray(arg){if(Array.isArray){return Array.isArray(arg)}return objectToString(arg)==="[object Array]"}exports.isArray=isArray;function isBoolean(arg){return typeof arg==="boolean"}exports.isBoolean=isBoolean;function isNull(arg){return arg===null}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==="number"}exports.isNumber=isNumber;function isString(arg){return typeof arg==="string"}exports.isString=isString;function isSymbol(arg){return typeof arg==="symbol"}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0}exports.isUndefined=isUndefined;function isRegExp(re){return objectToString(re)==="[object RegExp]"}exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==="object"&&arg!==null}exports.isObject=isObject;function isDate(d){return objectToString(d)==="[object Date]"}exports.isDate=isDate;function isError(e){return objectToString(e)==="[object Error]"||e instanceof Error}exports.isError=isError;function isFunction(arg){return typeof arg==="function"}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==="boolean"||typeof arg==="number"||typeof arg==="string"||typeof arg==="symbol"||typeof arg==="undefined"}exports.isPrimitive=isPrimitive;exports.isBuffer=Buffer.isBuffer;function objectToString(o){return Object.prototype.toString.call(o)}}).call(this,{isBuffer:require("../../is-buffer/index.js")})},{"../../is-buffer/index.js":28}],10:[function(require,module,exports){"use strict";var createThunk=require("./lib/thunk.js");function Procedure(){this.argTypes=[];this.shimArgs=[];this.arrayArgs=[];this.arrayBlockIndices=[];this.scalarArgs=[];this.offsetArgs=[];this.offsetArgIndex=[];this.indexArgs=[];this.shapeArgs=[];this.funcName="";this.pre=null;this.body=null;this.post=null;this.debug=false}function compileCwise(user_args){var proc=new Procedure;proc.pre=user_args.pre;proc.body=user_args.body;proc.post=user_args.post;var proc_args=user_args.args.slice(0);proc.argTypes=proc_args;for(var i=0;i<proc_args.length;++i){var arg_type=proc_args[i];if(arg_type==="array"||typeof arg_type==="object"&&arg_type.blockIndices){proc.argTypes[i]="array";proc.arrayArgs.push(i);proc.arrayBlockIndices.push(arg_type.blockIndices?arg_type.blockIndices:0);proc.shimArgs.push("array"+i);if(i<proc.pre.args.length&&proc.pre.args[i].count>0){throw new Error("cwise: pre() block may not reference array args")}if(i<proc.post.args.length&&proc.post.args[i].count>0){throw new Error("cwise: post() block may not reference array args")}}else if(arg_type==="scalar"){proc.scalarArgs.push(i);proc.shimArgs.push("scalar"+i)}else if(arg_type==="index"){proc.indexArgs.push(i);if(i<proc.pre.args.length&&proc.pre.args[i].count>0){throw new Error("cwise: pre() block may not reference array index")}if(i<proc.body.args.length&&proc.body.args[i].lvalue){throw new Error("cwise: body() block may not write to array index")}if(i<proc.post.args.length&&proc.post.args[i].count>0){throw new Error("cwise: post() block may not reference array index")}}else if(arg_type==="shape"){proc.shapeArgs.push(i);if(i<proc.pre.args.length&&proc.pre.args[i].lvalue){throw new Error("cwise: pre() block may not write to array shape")}if(i<proc.body.args.length&&proc.body.args[i].lvalue){throw new Error("cwise: body() block may not write to array shape")}if(i<proc.post.args.length&&proc.post.args[i].lvalue){throw new Error("cwise: post() block may not write to array shape")}}else if(typeof arg_type==="object"&&arg_type.offset){proc.argTypes[i]="offset";proc.offsetArgs.push({array:arg_type.array,offset:arg_type.offset});proc.offsetArgIndex.push(i)}else{throw new Error("cwise: Unknown argument type "+proc_args[i])}}if(proc.arrayArgs.length<=0){throw new Error("cwise: No array arguments specified")}if(proc.pre.args.length>proc_args.length){throw new Error("cwise: Too many arguments in pre() block")}if(proc.body.args.length>proc_args.length){throw new Error("cwise: Too many arguments in body() block")}if(proc.post.args.length>proc_args.length){throw new Error("cwise: Too many arguments in post() block")}proc.debug=!!user_args.printCode||!!user_args.debug;proc.funcName=user_args.funcName||"cwise";proc.blockSize=user_args.blockSize||64;return createThunk(proc)}module.exports=compileCwise},{"./lib/thunk.js":12}],11:[function(require,module,exports){"use strict";var uniq=require("uniq");function innerFill(order,proc,body){var dimension=order.length,nargs=proc.arrayArgs.length,has_index=proc.indexArgs.length>0,code=[],vars=[],idx=0,pidx=0,i,j;for(i=0;i<dimension;++i){vars.push(["i",i,"=0"].join(""))}for(j=0;j<nargs;++j){for(i=0;i<dimension;++i){pidx=idx;idx=order[i];if(i===0){vars.push(["d",j,"s",i,"=t",j,"p",idx].join(""))}else{vars.push(["d",j,"s",i,"=(t",j,"p",idx,"-s",pidx,"*t",j,"p",pidx,")"].join(""))}}}if(vars.length>0){code.push("var "+vars.join(","))}for(i=dimension-1;i>=0;--i){idx=order[i];code.push(["for(i",i,"=0;i",i,"<s",idx,";++i",i,"){"].join(""))}code.push(body);for(i=0;i<dimension;++i){pidx=idx;idx=order[i];for(j=0;j<nargs;++j){code.push(["p",j,"+=d",j,"s",i].join(""))}if(has_index){if(i>0){code.push(["index[",pidx,"]-=s",pidx].join(""))}code.push(["++index[",idx,"]"].join(""))}code.push("}")}return code.join("\n")}function outerFill(matched,order,proc,body){var dimension=order.length,nargs=proc.arrayArgs.length,blockSize=proc.blockSize,has_index=proc.indexArgs.length>0,code=[];for(var i=0;i<nargs;++i){code.push(["var offset",i,"=p",i].join(""))}for(var i=matched;i<dimension;++i){code.push(["for(var j"+i+"=SS[",order[i],"]|0;j",i,">0;){"].join(""));code.push(["if(j",i,"<",blockSize,"){"].join(""));code.push(["s",order[i],"=j",i].join(""));code.push(["j",i,"=0"].join(""));code.push(["}else{s",order[i],"=",blockSize].join(""));code.push(["j",i,"-=",blockSize,"}"].join(""));if(has_index){code.push(["index[",order[i],"]=j",i].join(""))}}for(var i=0;i<nargs;++i){var indexStr=["offset"+i];for(var j=matched;j<dimension;++j){indexStr.push(["j",j,"*t",i,"p",order[j]].join(""))}code.push(["p",i,"=(",indexStr.join("+"),")"].join(""))}code.push(innerFill(order,proc,body));for(var i=matched;i<dimension;++i){code.push("}")}return code.join("\n")}function countMatches(orders){var matched=0,dimension=orders[0].length;while(matched<dimension){for(var j=1;j<orders.length;++j){if(orders[j][matched]!==orders[0][matched]){return matched}}++matched}return matched}function processBlock(block,proc,dtypes){var code=block.body;var pre=[];var post=[];for(var i=0;i<block.args.length;++i){var carg=block.args[i];if(carg.count<=0){continue}var re=new RegExp(carg.name,"g");var ptrStr="";var arrNum=proc.arrayArgs.indexOf(i);switch(proc.argTypes[i]){case"offset":var offArgIndex=proc.offsetArgIndex.indexOf(i);var offArg=proc.offsetArgs[offArgIndex];arrNum=offArg.array;ptrStr="+q"+offArgIndex;case"array":ptrStr="p"+arrNum+ptrStr;var localStr="l"+i;var arrStr="a"+arrNum;if(proc.arrayBlockIndices[arrNum]===0){if(carg.count===1){if(dtypes[arrNum]==="generic"){if(carg.lvalue){pre.push(["var ",localStr,"=",arrStr,".get(",ptrStr,")"].join(""));code=code.replace(re,localStr);post.push([arrStr,".set(",ptrStr,",",localStr,")"].join(""))}else{code=code.replace(re,[arrStr,".get(",ptrStr,")"].join(""))}}else{code=code.replace(re,[arrStr,"[",ptrStr,"]"].join(""))}}else if(dtypes[arrNum]==="generic"){pre.push(["var ",localStr,"=",arrStr,".get(",ptrStr,")"].join(""));code=code.replace(re,localStr);if(carg.lvalue){post.push([arrStr,".set(",ptrStr,",",localStr,")"].join(""))}}else{pre.push(["var ",localStr,"=",arrStr,"[",ptrStr,"]"].join(""));code=code.replace(re,localStr);if(carg.lvalue){post.push([arrStr,"[",ptrStr,"]=",localStr].join(""))}}}else{var reStrArr=[carg.name],ptrStrArr=[ptrStr];for(var j=0;j<Math.abs(proc.arrayBlockIndices[arrNum]);j++){reStrArr.push("\\s*\\[([^\\]]+)\\]");ptrStrArr.push("$"+(j+1)+"*t"+arrNum+"b"+j)}re=new RegExp(reStrArr.join(""),"g");ptrStr=ptrStrArr.join("+");if(dtypes[arrNum]==="generic"){throw new Error("cwise: Generic arrays not supported in combination with blocks!")}else{code=code.replace(re,[arrStr,"[",ptrStr,"]"].join(""))}}break;case"scalar":code=code.replace(re,"Y"+proc.scalarArgs.indexOf(i));break;case"index":code=code.replace(re,"index");break;case"shape":code=code.replace(re,"shape");break}}return[pre.join("\n"),code,post.join("\n")].join("\n").trim()}function typeSummary(dtypes){var summary=new Array(dtypes.length);var allEqual=true;for(var i=0;i<dtypes.length;++i){var t=dtypes[i];var digits=t.match(/\d+/);if(!digits){digits=""}else{digits=digits[0]}if(t.charAt(0)===0){summary[i]="u"+t.charAt(1)+digits}else{summary[i]=t.charAt(0)+digits}if(i>0){allEqual=allEqual&&summary[i]===summary[i-1]}}if(allEqual){return summary[0]}return summary.join("")}function generateCWiseOp(proc,typesig){var dimension=typesig[1].length-Math.abs(proc.arrayBlockIndices[0])|0;var orders=new Array(proc.arrayArgs.length);var dtypes=new Array(proc.arrayArgs.length);for(var i=0;i<proc.arrayArgs.length;++i){dtypes[i]=typesig[2*i];orders[i]=typesig[2*i+1]}var blockBegin=[],blockEnd=[];var loopBegin=[],loopEnd=[];var loopOrders=[];for(var i=0;i<proc.arrayArgs.length;++i){if(proc.arrayBlockIndices[i]<0){loopBegin.push(0);loopEnd.push(dimension);blockBegin.push(dimension);blockEnd.push(dimension+proc.arrayBlockIndices[i])}else{loopBegin.push(proc.arrayBlockIndices[i]);loopEnd.push(proc.arrayBlockIndices[i]+dimension);blockBegin.push(0);blockEnd.push(proc.arrayBlockIndices[i])}var newOrder=[];for(var j=0;j<orders[i].length;j++){if(loopBegin[i]<=orders[i][j]&&orders[i][j]<loopEnd[i]){newOrder.push(orders[i][j]-loopBegin[i])}}loopOrders.push(newOrder)}var arglist=["SS"];var code=["'use strict'"];var vars=[];for(var j=0;j<dimension;++j){vars.push(["s",j,"=SS[",j,"]"].join(""))}for(var i=0;i<proc.arrayArgs.length;++i){arglist.push("a"+i);arglist.push("t"+i);arglist.push("p"+i);for(var j=0;j<dimension;++j){vars.push(["t",i,"p",j,"=t",i,"[",loopBegin[i]+j,"]"].join(""))}for(var j=0;j<Math.abs(proc.arrayBlockIndices[i]);++j){vars.push(["t",i,"b",j,"=t",i,"[",blockBegin[i]+j,"]"].join(""))}}for(var i=0;i<proc.scalarArgs.length;++i){arglist.push("Y"+i)}if(proc.shapeArgs.length>0){vars.push("shape=SS.slice(0)")}if(proc.indexArgs.length>0){var zeros=new Array(dimension);for(var i=0;i<dimension;++i){zeros[i]="0"}vars.push(["index=[",zeros.join(","),"]"].join(""))}for(var i=0;i<proc.offsetArgs.length;++i){var off_arg=proc.offsetArgs[i];var init_string=[];for(var j=0;j<off_arg.offset.length;++j){if(off_arg.offset[j]===0){continue}else if(off_arg.offset[j]===1){init_string.push(["t",off_arg.array,"p",j].join(""))}else{init_string.push([off_arg.offset[j],"*t",off_arg.array,"p",j].join(""))}}if(init_string.length===0){vars.push("q"+i+"=0")}else{vars.push(["q",i,"=",init_string.join("+")].join(""))}}var thisVars=uniq([].concat(proc.pre.thisVars).concat(proc.body.thisVars).concat(proc.post.thisVars));vars=vars.concat(thisVars);if(vars.length>0){code.push("var "+vars.join(","))}for(var i=0;i<proc.arrayArgs.length;++i){code.push("p"+i+"|=0")}if(proc.pre.body.length>3){code.push(processBlock(proc.pre,proc,dtypes))}var body=processBlock(proc.body,proc,dtypes);var matched=countMatches(loopOrders);if(matched<dimension){code.push(outerFill(matched,loopOrders[0],proc,body))}else{code.push(innerFill(loopOrders[0],proc,body))}if(proc.post.body.length>3){code.push(processBlock(proc.post,proc,dtypes))}if(proc.debug){console.log("-----Generated cwise routine for ",typesig,":\n"+code.join("\n")+"\n----------")}var loopName=[proc.funcName||"unnamed","_cwise_loop_",orders[0].join("s"),"m",matched,typeSummary(dtypes)].join("");var f=new Function(["function ",loopName,"(",arglist.join(","),"){",code.join("\n"),"} return ",loopName].join(""));return f()}module.exports=generateCWiseOp},{uniq:100}],12:[function(require,module,exports){"use strict";var compile=require("./compile.js");function createThunk(proc){var code=["'use strict'","var CACHED={}"];var vars=[];var thunkName=proc.funcName+"_cwise_thunk";code.push(["return function ",thunkName,"(",proc.shimArgs.join(","),"){"].join(""));var typesig=[];var string_typesig=[];var proc_args=[["array",proc.arrayArgs[0],".shape.slice(",Math.max(0,proc.arrayBlockIndices[0]),proc.arrayBlockIndices[0]<0?","+proc.arrayBlockIndices[0]+")":")"].join("")];var shapeLengthConditions=[],shapeConditions=[];for(var i=0;i<proc.arrayArgs.length;++i){var j=proc.arrayArgs[i];vars.push(["t",j,"=array",j,".dtype,","r",j,"=array",j,".order"].join(""));typesig.push("t"+j);typesig.push("r"+j);string_typesig.push("t"+j);string_typesig.push("r"+j+".join()");proc_args.push("array"+j+".data");proc_args.push("array"+j+".stride");proc_args.push("array"+j+".offset|0");if(i>0){shapeLengthConditions.push("array"+proc.arrayArgs[0]+".shape.length===array"+j+".shape.length+"+(Math.abs(proc.arrayBlockIndices[0])-Math.abs(proc.arrayBlockIndices[i])));shapeConditions.push("array"+proc.arrayArgs[0]+".shape[shapeIndex+"+Math.max(0,proc.arrayBlockIndices[0])+"]===array"+j+".shape[shapeIndex+"+Math.max(0,proc.arrayBlockIndices[i])+"]")}}if(proc.arrayArgs.length>1){code.push("if (!("+shapeLengthConditions.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same dimensionality!')");code.push("for(var shapeIndex=array"+proc.arrayArgs[0]+".shape.length-"+Math.abs(proc.arrayBlockIndices[0])+"; shapeIndex--\x3e0;) {");code.push("if (!("+shapeConditions.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same shape!')");code.push("}")}for(var i=0;i<proc.scalarArgs.length;++i){proc_args.push("scalar"+proc.scalarArgs[i])}vars.push(["type=[",string_typesig.join(","),"].join()"].join(""));vars.push("proc=CACHED[type]");code.push("var "+vars.join(","));code.push(["if(!proc){","CACHED[type]=proc=compile([",typesig.join(","),"])}","return proc(",proc_args.join(","),")}"].join(""));if(proc.debug){console.log("-----Generated thunk:\n"+code.join("\n")+"\n----------")}var thunk=new Function("compile",code.join("\n"));return thunk(compile.bind(undefined,proc))}module.exports=createThunk},{"./compile.js":11}],13:[function(require,module,exports){(function(Buffer){module.exports=dataUriToBuffer;function dataUriToBuffer(uri){if(!/^data\:/i.test(uri)){throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")')}uri=uri.replace(/\r?\n/g,"");var firstComma=uri.indexOf(",");if(-1===firstComma||firstComma<=4)throw new TypeError("malformed data: URI");var meta=uri.substring(5,firstComma).split(";");var base64=false;var charset="US-ASCII";for(var i=0;i<meta.length;i++){if("base64"==meta[i]){base64=true}else if(0==meta[i].indexOf("charset=")){charset=meta[i].substring(8)}}var data=unescape(uri.substring(firstComma+1));var encoding=base64?"base64":"ascii";var buffer=new Buffer(data,encoding);buffer.type=meta[0]||"text/plain";buffer.charset=charset;return buffer}}).call(this,require("buffer").Buffer)},{buffer:7}],14:[function(require,module,exports){var objectCreate=Object.create||objectCreatePolyfill;var objectKeys=Object.keys||objectKeysPolyfill;var bind=Function.prototype.bind||functionBindPolyfill;function EventEmitter(){if(!this._events||!Object.prototype.hasOwnProperty.call(this,"_events")){this._events=objectCreate(null);this._eventsCount=0}this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;var defaultMaxListeners=10;var hasDefineProperty;try{var o={};if(Object.defineProperty)Object.defineProperty(o,"x",{value:0});hasDefineProperty=o.x===0}catch(err){hasDefineProperty=false}if(hasDefineProperty){Object.defineProperty(EventEmitter,"defaultMaxListeners",{enumerable:true,get:function(){return defaultMaxListeners},set:function(arg){if(typeof arg!=="number"||arg<0||arg!==arg)throw new TypeError('"defaultMaxListeners" must be a positive number');defaultMaxListeners=arg}})}else{EventEmitter.defaultMaxListeners=defaultMaxListeners}EventEmitter.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=="number"||n<0||isNaN(n))throw new TypeError('"n" argument must be a positive number');this._maxListeners=n;return this};function $getMaxListeners(that){if(that._maxListeners===undefined)return EventEmitter.defaultMaxListeners;return that._maxListeners}EventEmitter.prototype.getMaxListeners=function getMaxListeners(){return $getMaxListeners(this)};function emitNone(handler,isFn,self){if(isFn)handler.call(self);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)listeners[i].call(self)}}function emitOne(handler,isFn,self,arg1){if(isFn)handler.call(self,arg1);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)listeners[i].call(self,arg1)}}function emitTwo(handler,isFn,self,arg1,arg2){if(isFn)handler.call(self,arg1,arg2);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)listeners[i].call(self,arg1,arg2)}}function emitThree(handler,isFn,self,arg1,arg2,arg3){if(isFn)handler.call(self,arg1,arg2,arg3);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)listeners[i].call(self,arg1,arg2,arg3)}}function emitMany(handler,isFn,self,args){if(isFn)handler.apply(self,args);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)listeners[i].apply(self,args)}}EventEmitter.prototype.emit=function emit(type){var er,handler,len,args,i,events;var doError=type==="error";events=this._events;if(events)doError=doError&&events.error==null;else if(!doError)return false;if(doError){if(arguments.length>1)er=arguments[1];if(er instanceof Error){throw er}else{var err=new Error('Unhandled "error" event. ('+er+")");err.context=er;throw err}return false}handler=events[type];if(!handler)return false;var isFn=typeof handler==="function";len=arguments.length;switch(len){case 1:emitNone(handler,isFn,this);break;case 2:emitOne(handler,isFn,this,arguments[1]);break;case 3:emitTwo(handler,isFn,this,arguments[1],arguments[2]);break;case 4:emitThree(handler,isFn,this,arguments[1],arguments[2],arguments[3]);break;default:args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];emitMany(handler,isFn,this,args)}return true};function _addListener(target,type,listener,prepend){var m;var events;var existing;if(typeof listener!=="function")throw new TypeError('"listener" argument must be a function');events=target._events;if(!events){events=target._events=objectCreate(null);target._eventsCount=0}else{if(events.newListener){target.emit("newListener",type,listener.listener?listener.listener:listener);events=target._events}existing=events[type]}if(!existing){existing=events[type]=listener;++target._eventsCount}else{if(typeof existing==="function"){existing=events[type]=prepend?[listener,existing]:[existing,listener]}else{if(prepend){existing.unshift(listener)}else{existing.push(listener)}}if(!existing.warned){m=$getMaxListeners(target);if(m&&m>0&&existing.length>m){existing.warned=true;var w=new Error("Possible EventEmitter memory leak detected. "+existing.length+' "'+String(type)+'" listeners '+"added. Use emitter.setMaxListeners() to "+"increase limit.");w.name="MaxListenersExceededWarning";w.emitter=target;w.type=type;w.count=existing.length;if(typeof console==="object"&&console.warn){console.warn("%s: %s",w.name,w.message)}}}}return target}EventEmitter.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,false)};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,true)};function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;switch(arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:var args=new Array(arguments.length);for(var i=0;i<args.length;++i)args[i]=arguments[i];this.listener.apply(this.target,args)}}}function _onceWrap(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=bind.call(onceWrapper,state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped}EventEmitter.prototype.once=function once(type,listener){if(typeof listener!=="function")throw new TypeError('"listener" argument must be a function');this.on(type,_onceWrap(this,type,listener));return this};EventEmitter.prototype.prependOnceListener=function prependOnceListener(type,listener){if(typeof listener!=="function")throw new TypeError('"listener" argument must be a function');this.prependListener(type,_onceWrap(this,type,listener));return this};EventEmitter.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;if(typeof listener!=="function")throw new TypeError('"listener" argument must be a function');events=this._events;if(!events)return this;list=events[type];if(!list)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=objectCreate(null);else{delete events[type];if(events.removeListener)this.emit("removeListener",type,list.listener||listener)}}else if(typeof list!=="function"){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break}}if(position<0)return this;if(position===0)list.shift();else spliceOne(list,position);if(list.length===1)events[type]=list[0];if(events.removeListener)this.emit("removeListener",type,originalListener||listener)}return this};EventEmitter.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(!events)return this;if(!events.removeListener){if(arguments.length===0){this._events=objectCreate(null);this._eventsCount=0}else if(events[type]){if(--this._eventsCount===0)this._events=objectCreate(null);else delete events[type]}return this}if(arguments.length===0){var keys=objectKeys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events=objectCreate(null);this._eventsCount=0;return this}listeners=events[type];if(typeof listeners==="function"){this.removeListener(type,listeners)}else if(listeners){for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i])}}return this};function _listeners(target,type,unwrap){var events=target._events;if(!events)return[];var evlistener=events[type];if(!evlistener)return[];if(typeof evlistener==="function")return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners(evlistener):arrayClone(evlistener,evlistener.length)}EventEmitter.prototype.listeners=function listeners(type){return _listeners(this,type,true)};EventEmitter.prototype.rawListeners=function rawListeners(type){return _listeners(this,type,false)};EventEmitter.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==="function"){return emitter.listenerCount(type)}else{return listenerCount.call(emitter,type)}};EventEmitter.prototype.listenerCount=listenerCount;function listenerCount(type){var events=this._events;if(events){var evlistener=events[type];if(typeof evlistener==="function"){return 1}else if(evlistener){return evlistener.length}}return 0}EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};function spliceOne(list,index){for(var i=index,k=i+1,n=list.length;k<n;i+=1,k+=1)list[i]=list[k];list.pop()}function arrayClone(arr,n){var copy=new Array(n);for(var i=0;i<n;++i)copy[i]=arr[i];return copy}function unwrapListeners(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i]}return ret}function objectCreatePolyfill(proto){var F=function(){};F.prototype=proto;return new F}function objectKeysPolyfill(obj){var keys=[];for(var k in obj)if(Object.prototype.hasOwnProperty.call(obj,k)){keys.push(k)}return k}function functionBindPolyfill(context){var fn=this;return function(){return fn.apply(context,arguments)}}},{}],15:[function(require,module,exports){(function(Buffer,process){"use strict";var path=require("path");var ndarray=require("ndarray");var GifReader=require("omggif").GifReader;var pack=require("ndarray-pack");var through=require("through");var parseDataURI=require("data-uri-to-buffer");function defaultImage(url,cb){var img=new Image;img.crossOrigin="Anonymous";img.onload=function(){var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var context=canvas.getContext("2d");context.drawImage(img,0,0);var pixels=context.getImageData(0,0,img.width,img.height);cb(null,ndarray(new Uint8Array(pixels.data),[img.width,img.height,4],[4,4*img.width,1],0))};img.onerror=function(err){cb(err)};img.src=url}function handleGif(data,cb){var reader;try{reader=new GifReader(data)}catch(err){cb(err);return}if(reader.numFrames()>0){var framesInfo=[];var nshape=[reader.numFrames(),reader.height,reader.width,4];var ndata=new Uint8Array(nshape[0]*nshape[1]*nshape[2]*nshape[3]);var result=ndarray(ndata,nshape);try{for(var i=0;i<reader.numFrames();++i){reader.decodeAndBlitFrameRGBA(i,ndata.subarray(result.index(i,0,0,0),result.index(i+1,0,0,0)));framesInfo.push(reader.frameInfo(i))}}catch(err){cb(err);return}cb(null,result.transpose(0,2,1),framesInfo)}else{var nshape=[reader.height,reader.width,4];var ndata=new Uint8Array(nshape[0]*nshape[1]*nshape[2]);var result=ndarray(ndata,nshape);try{reader.decodeAndBlitFrameRGBA(0,ndata)}catch(err){cb(err);return}cb(null,result.transpose(1,0))}}function httpGif(url,cb){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("application/binary")}xhr.onerror=function(err){cb(err)};xhr.onload=function(){if(xhr.readyState!==4){return}var data=new Uint8Array(xhr.response);handleGif(data,cb);return};xhr.send()}function copyBuffer(buffer){if(buffer[0]===undefined){var n=buffer.length;var result=new Uint8Array(n);for(var i=0;i<n;++i){result[i]=buffer.get(i)}return result}else{return new Uint8Array(buffer)}}function dataGif(url,cb){process.nextTick(function(){try{var buffer=parseDataURI(url);if(buffer){handleGif(copyBuffer(buffer),cb)}else{cb(new Error("Error parsing data URI"))}}catch(err){cb(err)}})}module.exports=function getPixels(url,type,cb){if(!cb){cb=type;type=""}var ext=path.extname(url);switch(type||ext.toUpperCase()){case".GIF":httpGif(url,cb);break;default:if(Buffer.isBuffer(url)){url="data:"+type+";base64,"+url.toString("base64")}if(url.indexOf("data:image/gif;")===0){dataGif(url,cb)}else{defaultImage(url,cb)}}}}).call(this,{isBuffer:require("../is-buffer/index.js")},require("_process"))},{"../is-buffer/index.js":28,_process:73,"data-uri-to-buffer":13,ndarray:37,"ndarray-pack":35,omggif:38,path:50,through:99}],16:[function(require,module,exports){(function(Buffer){var assert=require("assert");var EventEmitter=require("events").EventEmitter;var ReadableStream=require("readable-stream");var util=require("util");var NeuQuant=require("./TypedNeuQuant.js");var LZWEncoder=require("./LZWEncoder.js");function ByteCapacitor(options){ReadableStream.call(this,options);this.okayToPush=true;this.resetData()}util.inherits(ByteCapacitor,ReadableStream);ByteCapacitor.prototype._read=function(){this.okayToPush=true};ByteCapacitor.prototype.resetData=function(){this.data=[]};ByteCapacitor.prototype.flushData=function(){if(!this.okayToPush){var err=new Error("GIF memory limit exceeded. Please `read` from GIF before writing additional frames/information.");return this.emit("error",err)}var buff=new Buffer(this.data);this.resetData();this.okayToPush=this.push(buff)};ByteCapacitor.prototype.writeByte=function(val){this.data.push(val)};ByteCapacitor.prototype.writeUTFBytes=function(string){for(var l=string.length,i=0;i<l;i++){this.writeByte(string.charCodeAt(i))}};ByteCapacitor.prototype.writeBytes=function(array,offset,length){for(var l=length||array.length,i=offset||0;i<l;i++){this.writeByte(array[i])}};function GIFEncoder(width,height,options){options=options||{};var hwm=options.highWaterMark;ByteCapacitor.call(this,{highWaterMark:hwm||hwm===0?hwm:64*1024});this.width=~~width;this.height=~~height;this.transparent=null;this.transIndex=0;this.repeat=-1;this.delay=0;this.pixels=null;this.indexedPixels=null;this.colorDepth=null;this.colorTab=null;this.usedEntry=[];this.palSize=7;this.dispose=-1;this.firstFrame=true;this.sample=10;var that=this;function flushData(){that.flushData()}this.on("writeHeader#stop",flushData);this.on("frame#stop",flushData);this.on("finish#stop",function finishGif(){flushData();that.push(null)})}util.inherits(GIFEncoder,ByteCapacitor);GIFEncoder.prototype.setDelay=function(milliseconds){this.delay=Math.round(milliseconds/10)};GIFEncoder.prototype.setFrameRate=function(fps){this.delay=Math.round(100/fps)};GIFEncoder.prototype.setDispose=function(disposalCode){if(disposalCode>=0)this.dispose=disposalCode};GIFEncoder.prototype.setRepeat=function(repeat){this.repeat=repeat};GIFEncoder.prototype.setTransparent=function(color){this.transparent=color};GIFEncoder.prototype.analyzeImage=function(imageData){this.setImagePixels(this.removeAlphaChannel(imageData));this.analyzePixels()};GIFEncoder.prototype.writeImageInfo=function(){if(this.firstFrame){this.writeLSD();this.writePalette();if(this.repeat>=0){this.writeNetscapeExt()}}this.writeGraphicCtrlExt();this.writeImageDesc();if(!this.firstFrame)this.writePalette();this.firstFrame=false};GIFEncoder.prototype.outputImage=function(){this.writePixels()};GIFEncoder.prototype.addFrame=function(imageData){this.emit("frame#start");this.analyzeImage(imageData);this.writeImageInfo();this.outputImage();this.emit("frame#stop")};GIFEncoder.prototype.finish=function(){this.emit("finish#start");this.writeByte(59);this.emit("finish#stop")};GIFEncoder.prototype.setQuality=function(quality){if(quality<1)quality=1;this.sample=quality};GIFEncoder.prototype.writeHeader=function(){this.emit("writeHeader#start");this.writeUTFBytes("GIF89a");this.emit("writeHeader#stop")};GIFEncoder.prototype.analyzePixels=function(){var len=this.pixels.length;var nPix=len/3;this.indexedPixels=new Uint8Array(nPix);var imgq=new NeuQuant(this.pixels,this.sample);imgq.buildColormap();this.colorTab=imgq.getColormap();var k=0;for(var j=0;j<nPix;j++){var index=imgq.lookupRGB(this.pixels[k++]&255,this.pixels[k++]&255,this.pixels[k++]&255);this.usedEntry[index]=true;this.indexedPixels[j]=index}this.pixels=null;this.colorDepth=8;this.palSize=7;if(this.transparent!==null){this.transIndex=this.findClosest(this.transparent)}};GIFEncoder.prototype.findClosest=function(c){if(this.colorTab===null)return-1;var r=(c&16711680)>>16;var g=(c&65280)>>8;var b=c&255;var minpos=0;var dmin=256*256*256;var len=this.colorTab.length;for(var i=0;i<len;){var dr=r-(this.colorTab[i++]&255);var dg=g-(this.colorTab[i++]&255);var db=b-(this.colorTab[i]&255);var d=dr*dr+dg*dg+db*db;var index=i/3;if(this.usedEntry[index]&&d<dmin){dmin=d;minpos=index}i++}return minpos};GIFEncoder.prototype.removeAlphaChannel=function(data){var w=this.width;var h=this.height;var pixels=new Uint8Array(w*h*3);var count=0;for(var i=0;i<h;i++){for(var j=0;j<w;j++){var b=i*w*4+j*4;pixels[count++]=data[b];pixels[count++]=data[b+1];pixels[count++]=data[b+2]}}return pixels};GIFEncoder.prototype.setImagePixels=function(pixels){this.pixels=pixels};GIFEncoder.prototype.writeGraphicCtrlExt=function(){this.writeByte(33);this.writeByte(249);this.writeByte(4);var transp,disp;if(this.transparent===null){transp=0;disp=0}else{transp=1;disp=2}if(this.dispose>=0){disp=dispose&7}disp<<=2;this.writeByte(0|disp|0|transp);this.writeShort(this.delay);this.writeByte(this.transIndex);this.writeByte(0)};GIFEncoder.prototype.writeImageDesc=function(){this.writeByte(44);this.writeShort(0);this.writeShort(0);this.writeShort(this.width);this.writeShort(this.height);if(this.firstFrame){this.writeByte(0)}else{this.writeByte(128|0|0|0|this.palSize)}};GIFEncoder.prototype.writeLSD=function(){this.writeShort(this.width);this.writeShort(this.height);this.writeByte(128|112|0|this.palSize);this.writeByte(0);this.writeByte(0)};GIFEncoder.prototype.writeNetscapeExt=function(){this.writeByte(33);this.writeByte(255);this.writeByte(11);this.writeUTFBytes("NETSCAPE2.0");this.writeByte(3);this.writeByte(1);this.writeShort(this.repeat);this.writeByte(0)};GIFEncoder.prototype.writePalette=function(){this.writeBytes(this.colorTab);var n=3*256-this.colorTab.length;for(var i=0;i<n;i++)this.writeByte(0)};GIFEncoder.prototype.writeShort=function(pValue){this.writeByte(pValue&255);this.writeByte(pValue>>8&255)};GIFEncoder.prototype.writePixels=function(){var enc=new LZWEncoder(this.width,this.height,this.indexedPixels,this.colorDepth);enc.encode(this)};GIFEncoder.prototype.stream=function(){return this};GIFEncoder.ByteCapacitor=ByteCapacitor;module.exports=GIFEncoder}).call(this,require("buffer").Buffer)},{"./LZWEncoder.js":17,"./TypedNeuQuant.js":18,assert:2,buffer:7,events:14,"readable-stream":24,util:104}],17:[function(require,module,exports){var EOF=-1;var BITS=12;var HSIZE=5003;var masks=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function LZWEncoder(width,height,pixels,colorDepth){var initCodeSize=Math.max(2,colorDepth);var accum=new Uint8Array(256);var htab=new Int32Array(HSIZE);var codetab=new Int32Array(HSIZE);var cur_accum,cur_bits=0;var a_count;var free_ent=0;var maxcode;var remaining;var curPixel;var n_bits;var clear_flg=false;var g_init_bits,ClearCode,EOFCode;function char_out(c,outs){accum[a_count++]=c;if(a_count>=254)flush_char(outs)}function cl_block(outs){cl_hash(HSIZE);free_ent=ClearCode+2;clear_flg=true;output(ClearCode,outs)}function cl_hash(hsize){for(var i=0;i<hsize;++i)htab[i]=-1}function compress(init_bits,outs){var fcode,c,i,ent,disp,hsize_reg,hshift;g_init_bits=init_bits;clear_flg=false;n_bits=g_init_bits;maxcode=MAXCODE(n_bits);ClearCode=1<<init_bits-1;EOFCode=ClearCode+1;free_ent=ClearCode+2;a_count=0;ent=nextPixel();hshift=0;for(fcode=HSIZE;fcode<65536;fcode*=2)++hshift;hshift=8-hshift;hsize_reg=HSIZE;cl_hash(hsize_reg);output(ClearCode,outs);outer_loop:while((c=nextPixel())!=EOF){fcode=(c<<BITS)+ent;i=c<<hshift^ent;if(htab[i]===fcode){ent=codetab[i];continue}else if(htab[i]>=0){disp=hsize_reg-i;if(i===0)disp=1;do{if((i-=disp)<0)i+=hsize_reg;if(htab[i]===fcode){ent=codetab[i];continue outer_loop}}while(htab[i]>=0)}output(ent,outs);ent=c;if(free_ent<1<<BITS){codetab[i]=free_ent++;htab[i]=fcode}else{cl_block(outs)}}output(ent,outs);output(EOFCode,outs)}function encode(outs){outs.writeByte(initCodeSize);remaining=width*height;curPixel=0;compress(initCodeSize+1,outs);outs.writeByte(0)}function flush_char(outs){if(a_count>0){outs.writeByte(a_count);outs.writeBytes(accum,0,a_count);a_count=0}}function MAXCODE(n_bits){return(1<<n_bits)-1}function nextPixel(){if(remaining===0)return EOF;--remaining;var pix=pixels[curPixel++];return pix&255}function output(code,outs){cur_accum&=masks[cur_bits];if(cur_bits>0)cur_accum|=code<<cur_bits;else cur_accum=code;cur_bits+=n_bits;while(cur_bits>=8){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}if(free_ent>maxcode||clear_flg){if(clear_flg){maxcode=MAXCODE(n_bits=g_init_bits);clear_flg=false}else{++n_bits;if(n_bits==BITS)maxcode=1<<BITS;else maxcode=MAXCODE(n_bits)}}if(code==EOFCode){while(cur_bits>0){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}flush_char(outs)}}this.encode=encode}module.exports=LZWEncoder},{}],18:[function(require,module,exports){var ncycles=100;var netsize=256;var maxnetpos=netsize-1;var netbiasshift=4;var intbiasshift=16;var intbias=1<<intbiasshift;var gammashift=10;var gamma=1<<gammashift;var betashift=10;var beta=intbias>>betashift;var betagamma=intbias<<gammashift-betashift;var initrad=netsize>>3;var radiusbiasshift=6;var radiusbias=1<<radiusbiasshift;var initradius=initrad*radiusbias;var radiusdec=30;var alphabiasshift=10;var initalpha=1<<alphabiasshift;var alphadec;var radbiasshift=8;var radbias=1<<radbiasshift;var alpharadbshift=alphabiasshift+radbiasshift;var alpharadbias=1<<alpharadbshift;var prime1=499;var prime2=491;var prime3=487;var prime4=503;var minpicturebytes=3*prime4;function NeuQuant(pixels,samplefac){var network;var netindex;var bias;var freq;var radpower;function init(){network=[];netindex=new Int32Array(256);bias=new Int32Array(netsize);freq=new Int32Array(netsize);radpower=new Int32Array(netsize>>3);var i,v;for(i=0;i<netsize;i++){v=(i<<netbiasshift+8)/netsize;network[i]=new Float64Array([v,v,v,0]);freq[i]=intbias/netsize;bias[i]=0}}function unbiasnet(){for(var i=0;i<netsize;i++){network[i][0]>>=netbiasshift;network[i][1]>>=netbiasshift;network[i][2]>>=netbiasshift;network[i][3]=i}}function altersingle(alpha,i,b,g,r){network[i][0]-=alpha*(network[i][0]-b)/initalpha;network[i][1]-=alpha*(network[i][1]-g)/initalpha;network[i][2]-=alpha*(network[i][2]-r)/initalpha}function alterneigh(radius,i,b,g,r){var lo=Math.abs(i-radius);var hi=Math.min(i+radius,netsize);var j=i+1;var k=i-1;var m=1;var p,a;while(j<hi||k>lo){a=radpower[m++];if(j<hi){p=network[j++];p[0]-=a*(p[0]-b)/alpharadbias;p[1]-=a*(p[1]-g)/alpharadbias;p[2]-=a*(p[2]-r)/alpharadbias}if(k>lo){p=network[k--];p[0]-=a*(p[0]-b)/alpharadbias;p[1]-=a*(p[1]-g)/alpharadbias;p[2]-=a*(p[2]-r)/alpharadbias}}}function contest(b,g,r){var bestd=~(1<<31);var bestbiasd=bestd;var bestpos=-1;var bestbiaspos=bestpos;var i,n,dist,biasdist,betafreq;for(i=0;i<netsize;i++){n=network[i];dist=Math.abs(n[0]-b)+Math.abs(n[1]-g)+Math.abs(n[2]-r);if(dist<bestd){bestd=dist;bestpos=i}biasdist=dist-(bias[i]>>intbiasshift-netbiasshift);if(biasdist<bestbiasd){bestbiasd=biasdist;bestbiaspos=i}betafreq=freq[i]>>betashift;freq[i]-=betafreq;bias[i]+=betafreq<<gammashift}freq[bestpos]+=beta;bias[bestpos]-=betagamma;return bestbiaspos}function inxbuild(){var i,j,p,q,smallpos,smallval,previouscol=0,startpos=0;for(i=0;i<netsize;i++){p=network[i];smallpos=i;smallval=p[1];for(j=i+1;j<netsize;j++){q=network[j];if(q[1]<smallval){smallpos=j;smallval=q[1]}}q=network[smallpos];if(i!=smallpos){j=q[0];q[0]=p[0];p[0]=j;j=q[1];q[1]=p[1];p[1]=j;j=q[2];q[2]=p[2];p[2]=j;j=q[3];q[3]=p[3];p[3]=j}if(smallval!=previouscol){netindex[previouscol]=startpos+i>>1;for(j=previouscol+1;j<smallval;j++)netindex[j]=i;previouscol=smallval;startpos=i}}netindex[previouscol]=startpos+maxnetpos>>1;for(j=previouscol+1;j<256;j++)netindex[j]=maxnetpos}function inxsearch(b,g,r){var a,p,dist;var bestd=1e3;var best=-1;var i=netindex[g];var j=i-1;while(i<netsize||j>=0){if(i<netsize){p=network[i];dist=p[1]-g;if(dist>=bestd)i=netsize;else{i++;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist<bestd){a=p[2]-r;if(a<0)a=-a;dist+=a;if(dist<bestd){bestd=dist;best=p[3]}}}}if(j>=0){p=network[j];dist=g-p[1];if(dist>=bestd)j=-1;else{j--;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist<bestd){a=p[2]-r;if(a<0)a=-a;dist+=a;if(dist<bestd){bestd=dist;best=p[3]}}}}}return best}function learn(){var i;var lengthcount=pixels.length;var alphadec=30+(samplefac-1)/3;var samplepixels=lengthcount/(3*samplefac);var delta=~~(samplepixels/ncycles);var alpha=initalpha;var radius=initradius;var rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(i=0;i<rad;i++)radpower[i]=alpha*((rad*rad-i*i)*radbias/(rad*rad));var step;if(lengthcount<minpicturebytes){samplefac=1;step=3}else if(lengthcount%prime1!==0){step=3*prime1}else if(lengthcount%prime2!==0){step=3*prime2}else if(lengthcount%prime3!==0){step=3*prime3}else{step=3*prime4}var b,g,r,j;var pix=0;i=0;while(i<samplepixels){b=(pixels[pix]&255)<<netbiasshift;g=(pixels[pix+1]&255)<<netbiasshift;r=(pixels[pix+2]&255)<<netbiasshift;j=contest(b,g,r);altersingle(alpha,j,b,g,r);if(rad!==0)alterneigh(rad,j,b,g,r);pix+=step;if(pix>=lengthcount)pix-=lengthcount;i++;if(delta===0)delta=1;if(i%delta===0){alpha-=alpha/alphadec;radius-=radius/radiusdec;rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(j=0;j<rad;j++)radpower[j]=alpha*((rad*rad-j*j)*radbias/(rad*rad))}}}function buildColormap(){init();learn();unbiasnet();inxbuild()}this.buildColormap=buildColormap;function getColormap(){var map=[];var index=[];for(var i=0;i<netsize;i++)index[network[i][3]]=i;var k=0;for(var l=0;l<netsize;l++){var j=index[l];map[k++]=network[j][0];map[k++]=network[j][1];map[k++]=network[j][2]}return map}this.getColormap=getColormap;this.lookupRGB=inxsearch}module.exports=NeuQuant},{}],19:[function(require,module,exports){(function(process){module.exports=Duplex;var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj)keys.push(key);return keys};var util=require("core-util-is");util.inherits=require("inherits");var Readable=require("./_stream_readable");var Writable=require("./_stream_writable");util.inherits(Duplex,Readable);forEach(objectKeys(Writable.prototype),function(method){if(!Duplex.prototype[method])Duplex.prototype[method]=Writable.prototype[method]});function Duplex(options){if(!(this instanceof Duplex))return new Duplex(options);Readable.call(this,options);Writable.call(this,options);if(options&&options.readable===false)this.readable=false;if(options&&options.writable===false)this.writable=false;this.allowHalfOpen=true;if(options&&options.allowHalfOpen===false)this.allowHalfOpen=false;this.once("end",onend)}function onend(){if(this.allowHalfOpen||this._writableState.ended)return;process.nextTick(this.end.bind(this))}function forEach(xs,f){for(var i=0,l=xs.length;i<l;i++){f(xs[i],i)}}}).call(this,require("_process"))},{"./_stream_readable":21,"./_stream_writable":23,_process:73,"core-util-is":9,inherits:26}],20:[function(require,module,exports){module.exports=PassThrough;var Transform=require("./_stream_transform");var util=require("core-util-is");util.inherits=require("inherits");util.inherits(PassThrough,Transform);function PassThrough(options){if(!(this instanceof PassThrough))return new PassThrough(options);Transform.call(this,options)}PassThrough.prototype._transform=function(chunk,encoding,cb){cb(null,chunk)}},{"./_stream_transform":22,"core-util-is":9,inherits:26}],21:[function(require,module,exports){(function(process){module.exports=Readable;var isArray=require("isarray");var Buffer=require("buffer").Buffer;Readable.ReadableState=ReadableState;var EE=require("events").EventEmitter;if(!EE.listenerCount)EE.listenerCount=function(emitter,type){return emitter.listeners(type).length};var Stream=require("stream");var util=require("core-util-is");util.inherits=require("inherits");var StringDecoder;var debug=require("util");if(debug&&debug.debuglog){debug=debug.debuglog("stream")}else{debug=function(){}}util.inherits(Readable,Stream);function ReadableState(options,stream){var Duplex=require("./_stream_duplex");options=options||{};var hwm=options.highWaterMark;var defaultHwm=options.objectMode?16:16*1024;this.highWaterMark=hwm||hwm===0?hwm:defaultHwm;this.highWaterMark=~~this.highWaterMark;this.buffer=[];this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.ended=false;this.endEmitted=false;this.reading=false;this.sync=true;this.needReadable=false;this.emittedReadable=false;this.readableListening=false;this.objectMode=!!options.objectMode;if(stream instanceof Duplex)this.objectMode=this.objectMode||!!options.readableObjectMode;this.defaultEncoding=options.defaultEncoding||"utf8";this.ranOut=false;this.awaitDrain=0;this.readingMore=false;this.decoder=null;this.encoding=null;if(options.encoding){if(!StringDecoder)StringDecoder=require("string_decoder/").StringDecoder;this.decoder=new StringDecoder(options.encoding);this.encoding=options.encoding}}function Readable(options){var Duplex=require("./_stream_duplex");if(!(this instanceof Readable))return new Readable(options);this._readableState=new ReadableState(options,this);this.readable=true;Stream.call(this)}Readable.prototype.push=function(chunk,encoding){var state=this._readableState;if(util.isString(chunk)&&!state.objectMode){encoding=encoding||state.defaultEncoding;if(encoding!==state.encoding){chunk=new Buffer(chunk,encoding);encoding=""}}return readableAddChunk(this,state,chunk,encoding,false)};Readable.prototype.unshift=function(chunk){var state=this._readableState;return readableAddChunk(this,state,chunk,"",true)};function readableAddChunk(stream,state,chunk,encoding,addToFront){var er=chunkInvalid(state,chunk);if(er){stream.emit("error",er)}else if(util.isNullOrUndefined(chunk)){state.reading=false;if(!state.ended)onEofChunk(stream,state)}else if(state.objectMode||chunk&&chunk.length>0){if(state.ended&&!addToFront){var e=new Error("stream.push() after EOF");stream.emit("error",e)}else if(state.endEmitted&&addToFront){var e=new Error("stream.unshift() after end event");stream.emit("error",e)}else{if(state.decoder&&!addToFront&&!encoding)chunk=state.decoder.write(chunk);if(!addToFront)state.reading=false;if(state.flowing&&state.length===0&&!state.sync){stream.emit("data",chunk);stream.read(0)}else{state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream)}maybeReadMore(stream,state)}}else if(!addToFront){state.reading=false}return needMoreData(state)}function needMoreData(state){return!state.ended&&(state.needReadable||state.length<state.highWaterMark||state.length===0)}Readable.prototype.setEncoding=function(enc){if(!StringDecoder)StringDecoder=require("string_decoder/").StringDecoder;this._readableState.decoder=new StringDecoder(enc);this._readableState.encoding=enc;return this};var MAX_HWM=8388608;function roundUpToNextPowerOf2(n){if(n>=MAX_HWM){n=MAX_HWM}else{n--;for(var p=1;p<32;p<<=1)n|=n>>p;n++}return n}function howMuchToRead(n,state){if(state.length===0&&state.ended)return 0;if(state.objectMode)return n===0?0:1;if(isNaN(n)||util.isNull(n)){if(state.flowing&&state.buffer.length)return state.buffer[0].length;else return state.length}if(n<=0)return 0;if(n>state.highWaterMark)state.highWaterMark=roundUpToNextPowerOf2(n);if(n>state.length){if(!state.ended){state.needReadable=true;return 0}else return state.length}return n}Readable.prototype.read=function(n){debug("read",n);var state=this._readableState;var nOrig=n;if(!util.isNumber(n)||n>0)state.emittedReadable=false;if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){debug("read: emitReadable",state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null}var doRead=state.needReadable;debug("need readable",doRead);if(state.length===0||state.length-n<state.highWaterMark){doRead=true;debug("length less than watermark",doRead)}if(state.ended||state.reading){doRead=false;debug("reading or ended",doRead)}if(doRead){debug("do read");state.reading=true;state.sync=true;if(state.length===0)state.needReadable=true;this._read(state.highWaterMark);state.sync=false}if(doRead&&!state.reading)n=howMuchToRead(nOrig,state);var ret;if(n>0)ret=fromList(n,state);else ret=null;if(util.isNull(ret)){state.needReadable=true;n=0}state.length-=n;if(state.length===0&&!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended&&state.length===0)endReadable(this);if(!util.isNull(ret))this.emit("data",ret);return ret};function chunkInvalid(state,chunk){var er=null;if(!util.isBuffer(chunk)&&!util.isString(chunk)&&!util.isNullOrUndefined(chunk)&&!state.objectMode){er=new TypeError("Invalid non-string/buffer chunk")}return er}function onEofChunk(stream,state){if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;emitReadable(stream)}function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(!state.emittedReadable){debug("emitReadable",state.flowing);state.emittedReadable=true;if(state.sync)process.nextTick(function(){emitReadable_(stream)});else emitReadable_(stream)}}function emitReadable_(stream){debug("emit readable");stream.emit("readable");flow(stream)}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;process.nextTick(function(){maybeReadMore_(stream,state)})}}function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length<state.highWaterMark){debug("maybeReadMore read 0");stream.read(0);if(len===state.length)break;else len=state.length}state.readingMore=false}Readable.prototype._read=function(n){this.emit("error",new Error("not implemented"))};Readable.prototype.pipe=function(dest,pipeOpts){var src=this;var state=this._readableState;switch(state.pipesCount){case 0:state.pipes=dest;break;case 1:state.pipes=[state.pipes,dest];break;default:state.pipes.push(dest);break}state.pipesCount+=1;debug("pipe count=%d opts=%j",state.pipesCount,pipeOpts);var doEnd=(!pipeOpts||pipeOpts.end!==false)&&dest!==process.stdout&&dest!==process.stderr;var endFn=doEnd?onend:cleanup;if(state.endEmitted)process.nextTick(endFn);else src.once("end",endFn);dest.on("unpipe",onunpipe);function onunpipe(readable){debug("onunpipe");if(readable===src){cleanup()}}function onend(){debug("onend");dest.end()}var ondrain=pipeOnDrain(src);dest.on("drain",ondrain);function cleanup(){debug("cleanup");dest.removeListener("close",onclose);dest.removeListener("finish",onfinish);dest.removeListener("drain",ondrain);dest.removeListener("error",onerror);dest.removeListener("unpipe",onunpipe);src.removeListener("end",onend);src.removeListener("end",cleanup);src.removeListener("data",ondata);if(state.awaitDrain&&(!dest._writableState||dest._writableState.needDrain))ondrain()}src.on("data",ondata);function ondata(chunk){debug("ondata");var ret=dest.write(chunk);if(false===ret){debug("false write response, pause",src._readableState.awaitDrain);src._readableState.awaitDrain++;src.pause()}}function onerror(er){debug("onerror",er);unpipe();dest.removeListener("error",onerror);if(EE.listenerCount(dest,"error")===0)dest.emit("error",er)}if(!dest._events||!dest._events.error)dest.on("error",onerror);else if(isArray(dest._events.error))dest._events.error.unshift(onerror);else dest._events.error=[onerror,dest._events.error];function onclose(){dest.removeListener("finish",onfinish);unpipe()}dest.once("close",onclose);function onfinish(){debug("onfinish");dest.removeListener("close",onclose);unpipe()}dest.once("finish",onfinish);function unpipe(){debug("unpipe");src.unpipe(dest)}dest.emit("pipe",src);if(!state.flowing){debug("pipe resume");src.resume()}return dest};function pipeOnDrain(src){return function(){var state=src._readableState;debug("pipeOnDrain",state.awaitDrain);if(state.awaitDrain)state.awaitDrain--;if(state.awaitDrain===0&&EE.listenerCount(src,"data")){state.flowing=true;flow(src)}}}Readable.prototype.unpipe=function(dest){var state=this._readableState;if(state.pipesCount===0)return this;if(state.pipesCount===1){if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;state.pipes=null;state.pipesCount=0;state.flowing=false;if(dest)dest.emit("unpipe",this);return this}if(!dest){var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;state.flowing=false;for(var i=0;i<len;i++)dests[i].emit("unpipe",this);return this}var i=indexOf(state.pipes,dest);if(i===-1)return this;state.pipes.splice(i,1);state.pipesCount-=1;if(state.pipesCount===1)state.pipes=state.pipes[0];dest.emit("unpipe",this);return this};Readable.prototype.on=function(ev,fn){var res=Stream.prototype.on.call(this,ev,fn);if(ev==="data"&&false!==this._readableState.flowing){this.resume()}if(ev==="readable"&&this.readable){var state=this._readableState;if(!state.readableListening){state.readableListening=true;state.emittedReadable=false;state.needReadable=true;if(!state.reading){var self=this;process.nextTick(function(){debug("readable nexttick read 0");self.read(0)})}else if(state.length){emitReadable(this,state)}}}return res};Readable.prototype.addListener=Readable.prototype.on;Readable.prototype.resume=function(){var state=this._readableState;if(!state.flowing){debug("resume");state.flowing=true;if(!state.reading){debug("resume read 0");this.read(0)}resume(this,state)}return this};function resume(stream,state){if(!state.resumeScheduled){state.resumeScheduled=true;process.nextTick(function(){resume_(stream,state)})}}function resume_(stream,state){state.resumeScheduled=false;stream.emit("resume");flow(stream);if(state.flowing&&!state.reading)stream.read(0)}Readable.prototype.pause=function(){debug("call pause flowing=%j",this._readableState.flowing);if(false!==this._readableState.flowing){debug("pause");this._readableState.flowing=false;this.emit("pause")}return this};function flow(stream){var state=stream._readableState;debug("flow",state.flowing);if(state.flowing){do{var chunk=stream.read()}while(null!==chunk&&state.flowing)}}Readable.prototype.wrap=function(stream){var state=this._readableState;var paused=false;var self=this;stream.on("end",function(){debug("wrapped end");if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)self.push(chunk)}self.push(null)});stream.on("data",function(chunk){debug("wrapped data");if(state.decoder)chunk=state.decoder.write(chunk);if(!chunk||!state.objectMode&&!chunk.length)return;var ret=self.push(chunk);if(!ret){paused=true;stream.pause()}});for(var i in stream){if(util.isFunction(stream[i])&&util.isUndefined(this[i])){this[i]=function(method){return function(){return stream[method].apply(stream,arguments)}}(i)}}var events=["error","close","destroy","pause","resume"];forEach(events,function(ev){stream.on(ev,self.emit.bind(self,ev))});self._read=function(n){debug("wrapped _read",n);if(paused){paused=false;stream.resume()}};return self};Readable._fromList=fromList;function fromList(n,state){var list=state.buffer;var length=state.length;var stringMode=!!state.decoder;var objectMode=!!state.objectMode;var ret;if(list.length===0)return null;if(length===0)ret=null;else if(objectMode)ret=list.shift();else if(!n||n>=length){if(stringMode)ret=list.join("");else ret=Buffer.concat(list,length);list.length=0}else{if(n<list[0].length){var buf=list[0];ret=buf.slice(0,n);list[0]=buf.slice(n)}else if(n===list[0].length){ret=list.shift()}else{if(stringMode)ret="";else ret=new Buffer(n);var c=0;for(var i=0,l=list.length;i<l&&c<n;i++){var buf=list[0];var cpy=Math.min(n-c,buf.length);if(stringMode)ret+=buf.slice(0,cpy);else buf.copy(ret,c,0,cpy);if(cpy<buf.length)list[0]=buf.slice(cpy);else list.shift();c+=cpy}}}return ret}function endReadable(stream){var state=stream._readableState;if(state.length>0)throw new Error("endReadable called on non-empty stream");if(!state.endEmitted){state.ended=true;process.nextTick(function(){if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end")}})}}function forEach(xs,f){for(var i=0,l=xs.length;i<l;i++){f(xs[i],i)}}function indexOf(xs,x){for(var i=0,l=xs.length;i<l;i++){if(xs[i]===x)return i}return-1}}).call(this,require("_process"))},{"./_stream_duplex":19,_process:73,buffer:7,"core-util-is":9,events:14,inherits:26,isarray:29,stream:82,"string_decoder/":98,util:4}],22:[function(require,module,exports){module.exports=Transform;var Duplex=require("./_stream_duplex");var util=require("core-util-is");util.inherits=require("inherits");util.inherits(Transform,Duplex);function TransformState(options,stream){this.afterTransform=function(er,data){return afterTransform(stream,er,data)};this.needTransform=false;this.transforming=false;this.writecb=null;this.writechunk=null}function afterTransform(stream,er,data){var ts=stream._transformState;ts.transforming=false;var cb=ts.writecb;if(!cb)return stream.emit("error",new Error("no writecb in Transform class"));ts.writechunk=null;ts.writecb=null;if(!util.isNullOrUndefined(data))stream.push(data);if(cb)cb(er);var rs=stream._readableState;rs.reading=false;if(rs.needReadable||rs.length<rs.highWaterMark){stream._read(rs.highWaterMark)}}function Transform(options){if(!(this instanceof Transform))return new Transform(options);Duplex.call(this,options);this._transformState=new TransformState(options,this);var stream=this;this._readableState.needReadable=true;this._readableState.sync=false;this.once("prefinish",function(){if(util.isFunction(this._flush))this._flush(function(er){done(stream,er)});else done(stream)})}Transform.prototype.push=function(chunk,encoding){this._transformState.needTransform=false;return Duplex.prototype.push.call(this,chunk,encoding)};Transform.prototype._transform=function(chunk,encoding,cb){throw new Error("not implemented")};Transform.prototype._write=function(chunk,encoding,cb){var ts=this._transformState;ts.writecb=cb;ts.writechunk=chunk;ts.writeencoding=encoding;if(!ts.transforming){var rs=this._readableState;if(ts.needTransform||rs.needReadable||rs.length<rs.highWaterMark)this._read(rs.highWaterMark)}};Transform.prototype._read=function(n){var ts=this._transformState;if(!util.isNull(ts.writechunk)&&ts.writecb&&!ts.transforming){ts.transforming=true;this._transform(ts.writechunk,ts.writeencoding,ts.afterTransform)}else{ts.needTransform=true}};function done(stream,er){if(er)return stream.emit("error",er);var ws=stream._writableState;var ts=stream._transformState;if(ws.length)throw new Error("calling transform done when ws.length != 0");if(ts.transforming)throw new Error("calling transform done when still transforming");return stream.push(null)}},{"./_stream_duplex":19,"core-util-is":9,inherits:26}],23:[function(require,module,exports){(function(process){module.exports=Writable;var Buffer=require("buffer").Buffer;Writable.WritableState=WritableState;var util=require("core-util-is");util.inherits=require("inherits");var Stream=require("stream");util.inherits(Writable,Stream);function WriteReq(chunk,encoding,cb){this.chunk=chunk;this.encoding=encoding;this.callback=cb}function WritableState(options,stream){var Duplex=require("./_stream_duplex");options=options||{};var hwm=options.highWaterMark;var defaultHwm=options.objectMode?16:16*1024;this.highWaterMark=hwm||hwm===0?hwm:defaultHwm;this.objectMode=!!options.objectMode;if(stream instanceof Duplex)this.objectMode=this.objectMode||!!options.writableObjectMode;this.highWaterMark=~~this.highWaterMark;this.needDrain=false;this.ending=false;this.ended=false;this.finished=false;var noDecode=options.decodeStrings===false;this.decodeStrings=!noDecode;this.defaultEncoding=options.defaultEncoding||"utf8";this.length=0;this.writing=false;this.corked=0;this.sync=true;this.bufferProcessing=false;this.onwrite=function(er){onwrite(stream,er)};this.writecb=null;this.writelen=0;this.buffer=[];this.pendingcb=0;this.prefinished=false;this.errorEmitted=false}function Writable(options){var Duplex=require("./_stream_duplex");if(!(this instanceof Writable)&&!(this instanceof Duplex))return new Writable(options);this._writableState=new WritableState(options,this);this.writable=true;Stream.call(this)}Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))};function writeAfterEnd(stream,state,cb){var er=new Error("write after end");stream.emit("error",er);process.nextTick(function(){cb(er)})}function validChunk(stream,state,chunk,cb){var valid=true;if(!util.isBuffer(chunk)&&!util.isString(chunk)&&!util.isNullOrUndefined(chunk)&&!state.objectMode){var er=new TypeError("Invalid non-string/buffer chunk");stream.emit("error",er);process.nextTick(function(){cb(er)});valid=false}return valid}Writable.prototype.write=function(chunk,encoding,cb){var state=this._writableState;var ret=false;if(util.isFunction(encoding)){cb=encoding;encoding=null}if(util.isBuffer(chunk))encoding="buffer";else if(!encoding)encoding=state.defaultEncoding;if(!util.isFunction(cb))cb=function(){};if(state.ended)writeAfterEnd(this,state,cb);else if(validChunk(this,state,chunk,cb)){state.pendingcb++;ret=writeOrBuffer(this,state,chunk,encoding,cb)}return ret};Writable.prototype.cork=function(){var state=this._writableState;state.corked++};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.finished&&!state.bufferProcessing&&state.buffer.length)clearBuffer(this,state)}};function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&util.isString(chunk)){chunk=new Buffer(chunk,encoding)}return chunk}function writeOrBuffer(stream,state,chunk,encoding,cb){chunk=decodeChunk(state,chunk,encoding);if(util.isBuffer(chunk))encoding="buffer";var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length<state.highWaterMark;if(!ret)state.needDrain=true;if(state.writing||state.corked)state.buffer.push(new WriteReq(chunk,encoding,cb));else doWrite(stream,state,false,len,chunk,encoding,cb);return ret}function doWrite(stream,state,writev,len,chunk,encoding,cb){state.writelen=len;state.writecb=cb;state.writing=true;state.sync=true;if(writev)stream._writev(chunk,state.onwrite);else stream._write(chunk,encoding,state.onwrite);state.sync=false}function onwriteError(stream,state,sync,er,cb){if(sync)process.nextTick(function(){state.pendingcb--;cb(er)});else{state.pendingcb--;cb(er)}stream._writableState.errorEmitted=true;stream.emit("error",er)}function onwriteStateUpdate(state){state.writing=false;state.writecb=null;state.length-=state.writelen;state.writelen=0}function onwrite(stream,er){var state=stream._writableState;var sync=state.sync;var cb=state.writecb;onwriteStateUpdate(state);if(er)onwriteError(stream,state,sync,er,cb);else{var finished=needFinish(stream,state);if(!finished&&!state.corked&&!state.bufferProcessing&&state.buffer.length){clearBuffer(stream,state)}if(sync){process.nextTick(function(){afterWrite(stream,state,finished,cb)})}else{afterWrite(stream,state,finished,cb)}}}function afterWrite(stream,state,finished,cb){if(!finished)onwriteDrain(stream,state);state.pendingcb--;cb();finishMaybe(stream,state)}function onwriteDrain(stream,state){if(state.length===0&&state.needDrain){state.needDrain=false;stream.emit("drain")}}function clearBuffer(stream,state){state.bufferProcessing=true;if(stream._writev&&state.buffer.length>1){var cbs=[];for(var c=0;c<state.buffer.length;c++)cbs.push(state.buffer[c].callback);state.pendingcb++;doWrite(stream,state,true,state.length,state.buffer,"",function(err){for(var i=0;i<cbs.length;i++){state.pendingcb--;cbs[i](err)}});state.buffer=[]}else{for(var c=0;c<state.buffer.length;c++){var entry=state.buffer[c];var chunk=entry.chunk;var encoding=entry.encoding;var cb=entry.callback;var len=state.objectMode?1:chunk.length;doWrite(stream,state,false,len,chunk,encoding,cb);if(state.writing){c++;break}}if(c<state.buffer.length)state.buffer=state.buffer.slice(c);else state.buffer.length=0}state.bufferProcessing=false}Writable.prototype._write=function(chunk,encoding,cb){cb(new Error("not implemented"))};Writable.prototype._writev=null;Writable.prototype.end=function(chunk,encoding,cb){var state=this._writableState;if(util.isFunction(chunk)){cb=chunk;chunk=null;encoding=null}else if(util.isFunction(encoding)){cb=encoding;encoding=null}if(!util.isNullOrUndefined(chunk))this.write(chunk,encoding);if(state.corked){state.corked=1;this.uncork()}if(!state.ending&&!state.finished)endWritable(this,state,cb)};function needFinish(stream,state){return state.ending&&state.length===0&&!state.finished&&!state.writing}function prefinish(stream,state){if(!state.prefinished){state.prefinished=true;stream.emit("prefinish")}}function finishMaybe(stream,state){var need=needFinish(stream,state);if(need){if(state.pendingcb===0){prefinish(stream,state);state.finished=true;stream.emit("finish")}else prefinish(stream,state)}return need}function endWritable(stream,state,cb){state.ending=true;finishMaybe(stream,state);if(cb){if(state.finished)process.nextTick(cb);else stream.once("finish",cb)}state.ended=true}}).call(this,require("_process"))},{"./_stream_duplex":19,_process:73,buffer:7,"core-util-is":9,inherits:26,stream:82}],24:[function(require,module,exports){(function(process){exports=module.exports=require("./lib/_stream_readable.js");exports.Stream=require("stream");exports.Readable=exports;exports.Writable=require("./lib/_stream_writable.js");exports.Duplex=require("./lib/_stream_duplex.js");exports.Transform=require("./lib/_stream_transform.js");exports.PassThrough=require("./lib/_stream_passthrough.js");if(!process.browser&&process.env.READABLE_STREAM==="disable"){module.exports=require("stream")}}).call(this,require("_process"))},{"./lib/_stream_duplex.js":19,"./lib/_stream_passthrough.js":20,"./lib/_stream_readable.js":21,"./lib/_stream_transform.js":22,"./lib/_stream_writable.js":23,_process:73,stream:82}],25:[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<<mLen|m;eLen+=mLen;for(;eLen>0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],26:[function(require,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],27:[function(require,module,exports){"use strict";function iota(n){var result=new Array(n);for(var i=0;i<n;++i){result[i]=i}return result}module.exports=iota},{}],28:[function(require,module,exports){module.exports=function(obj){return obj!=null&&(isBuffer(obj)||isSlowBuffer(obj)||!!obj._isBuffer)};function isBuffer(obj){return!!obj.constructor&&typeof obj.constructor.isBuffer==="function"&&obj.constructor.isBuffer(obj)}function isSlowBuffer(obj){return typeof obj.readFloatLE==="function"&&typeof obj.slice==="function"&&isBuffer(obj.slice(0,0))}},{}],29:[function(require,module,exports){module.exports=Array.isArray||function(arr){return Object.prototype.toString.call(arr)=="[object Array]"}},{}],30:[function(require,module,exports){var encode=require("./lib/encoder"),decode=require("./lib/decoder");module.exports={encode:encode,decode:decode}},{"./lib/decoder":31,"./lib/encoder":32}],31:[function(require,module,exports){(function(Buffer){var JpegImage=function jpegImage(){"use strict";var dctZigZag=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]);var dctCos1=4017;var dctSin1=799;var dctCos3=3406;var dctSin3=2276;var dctCos6=1567;var dctSin6=3784;var dctSqrt2=5793;var dctSqrt1d2=2896;function constructor(){}function buildHuffmanTable(codeLengths,values){var k=0,code=[],i,j,length=16;while(length>0&&!codeLengths[length-1])length--;code.push({children:[],index:0});var p=code[0],q;for(i=0;i<length;i++){for(j=0;j<codeLengths[i];j++){p=code.pop();p.children[p.index]=values[k];while(p.index>0){p=code.pop()}p.index++;code.push(p);while(code.length<=i){code.push(q={children:[],index:0});p.children[p.index]=q.children;p=q}k++}if(i+1<length){code.push(q={children:[],index:0});p.children[p.index]=q.children;p=q}}return code[0].children}function decodeScan(data,offset,frame,components,resetInterval,spectralStart,spectralEnd,successivePrev,successive){var precision=frame.precision;var samplesPerLine=frame.samplesPerLine;var scanLines=frame.scanLines;var mcusPerLine=frame.mcusPerLine;var progressive=frame.progressive;var maxH=frame.maxH,maxV=frame.maxV;var startOffset=offset,bitsData=0,bitsCount=0;function readBit(){if(bitsCount>0){bitsCount--;return bitsData>>bitsCount&1}bitsData=data[offset++];if(bitsData==255){var nextByte=data[offset++];if(nextByte){throw new Error("unexpected marker: "+(bitsData<<8|nextByte).toString(16))}}bitsCount=7;return bitsData>>>7}function decodeHuffman(tree){var node=tree,bit;while((bit=readBit())!==null){node=node[bit];if(typeof node==="number")return node;if(typeof node!=="object")throw new Error("invalid huffman sequence")}return null}function receive(length){var n=0;while(length>0){var bit=readBit();if(bit===null)return;n=n<<1|bit;length--}return n}function receiveAndExtend(length){var n=receive(length);if(n>=1<<length-1)return n;return n+(-1<<length)+1}function decodeBaseline(component,zz){var t=decodeHuffman(component.huffmanTableDC);var diff=t===0?0:receiveAndExtend(t);zz[0]=component.pred+=diff;var k=1;while(k<64){var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15)break;k+=16;continue}k+=r;var z=dctZigZag[k];zz[z]=receiveAndExtend(s);k++}}function decodeDCFirst(component,zz){var t=decodeHuffman(component.huffmanTableDC);var diff=t===0?0:receiveAndExtend(t)<<successive;zz[0]=component.pred+=diff}function decodeDCSuccessive(component,zz){zz[0]|=readBit()<<successive}var eobrun=0;function decodeACFirst(component,zz){if(eobrun>0){eobrun--;return}var k=spectralStart,e=spectralEnd;while(k<=e){var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15){eobrun=receive(r)+(1<<r)-1;break}k+=16;continue}k+=r;var z=dctZigZag[k];zz[z]=receiveAndExtend(s)*(1<<successive);k++}}var successiveACState=0,successiveACNextValue;function decodeACSuccessive(component,zz){var k=spectralStart,e=spectralEnd,r=0;while(k<=e){var z=dctZigZag[k];var direction=zz[z]<0?-1:1;switch(successiveACState){case 0:var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15){eobrun=receive(r)+(1<<r);successiveACState=4}else{r=16;successiveACState=1}}else{if(s!==1)throw new Error("invalid ACn encoding");successiveACNextValue=receiveAndExtend(s);successiveACState=r?2:3}continue;case 1:case 2:if(zz[z])zz[z]+=(readBit()<<successive)*direction;else{r--;if(r===0)successiveACState=successiveACState==2?3:0}break;case 3:if(zz[z])zz[z]+=(readBit()<<successive)*direction;else{zz[z]=successiveACNextValue<<successive;successiveACState=0}break;case 4:if(zz[z])zz[z]+=(readBit()<<successive)*direction;break}k++}if(successiveACState===4){eobrun--;if(eobrun===0)successiveACState=0}}function decodeMcu(component,decode,mcu,row,col){var mcuRow=mcu/mcusPerLine|0;var mcuCol=mcu%mcusPerLine;var blockRow=mcuRow*component.v+row;var blockCol=mcuCol*component.h+col;decode(component,component.blocks[blockRow][blockCol])}function decodeBlock(component,decode,mcu){var blockRow=mcu/component.blocksPerLine|0;var blockCol=mcu%component.blocksPerLine;decode(component,component.blocks[blockRow][blockCol])}var componentsLength=components.length;var component,i,j,k,n;var decodeFn;if(progressive){if(spectralStart===0)decodeFn=successivePrev===0?decodeDCFirst:decodeDCSuccessive;else decodeFn=successivePrev===0?decodeACFirst:decodeACSuccessive}else{decodeFn=decodeBaseline}var mcu=0,marker;var mcuExpected;if(componentsLength==1){mcuExpected=components[0].blocksPerLine*components[0].blocksPerColumn}else{mcuExpected=mcusPerLine*frame.mcusPerColumn}if(!resetInterval)resetInterval=mcuExpected;var h,v;while(mcu<mcuExpected){for(i=0;i<componentsLength;i++)components[i].pred=0;eobrun=0;if(componentsLength==1){component=components[0];for(n=0;n<resetInterval;n++){decodeBlock(component,decodeFn,mcu);mcu++}}else{for(n=0;n<resetInterval;n++){for(i=0;i<componentsLength;i++){component=components[i];h=component.h;v=component.v;for(j=0;j<v;j++){for(k=0;k<h;k++){decodeMcu(component,decodeFn,mcu,j,k)}}}mcu++;if(mcu===mcuExpected)break}}bitsCount=0;marker=data[offset]<<8|data[offset+1];if(marker<65280){throw new Error("marker was not found")}if(marker>=65488&&marker<=65495){offset+=2}else break}return offset-startOffset}function buildComponentData(frame,component){var lines=[];var blocksPerLine=component.blocksPerLine;var blocksPerColumn=component.blocksPerColumn;var samplesPerLine=blocksPerLine<<3;var R=new Int32Array(64),r=new Uint8Array(64);function quantizeAndInverse(zz,dataOut,dataIn){var qt=component.quantizationTable;var v0,v1,v2,v3,v4,v5,v6,v7,t;var p=dataIn;var i;for(i=0;i<64;i++)p[i]=zz[i]*qt[i];for(i=0;i<8;++i){var row=8*i;if(p[1+row]==0&&p[2+row]==0&&p[3+row]==0&&p[4+row]==0&&p[5+row]==0&&p[6+row]==0&&p[7+row]==0){t=dctSqrt2*p[0+row]+512>>10;p[0+row]=t;p[1+row]=t;p[2+row]=t;p[3+row]=t;p[4+row]=t;p[5+row]=t;p[6+row]=t;p[7+row]=t;continue}v0=dctSqrt2*p[0+row]+128>>8;v1=dctSqrt2*p[4+row]+128>>8;v2=p[2+row];v3=p[6+row];v4=dctSqrt1d2*(p[1+row]-p[7+row])+128>>8;v7=dctSqrt1d2*(p[1+row]+p[7+row])+128>>8;v5=p[3+row]<<4;v6=p[5+row]<<4;t=v0-v1+1>>1;v0=v0+v1+1>>1;v1=t;t=v2*dctSin6+v3*dctCos6+128>>8;v2=v2*dctCos6-v3*dctSin6+128>>8;v3=t;t=v4-v6+1>>1;v4=v4+v6+1>>1;v6=t;t=v7+v5+1>>1;v5=v7-v5+1>>1;v7=t;t=v0-v3+1>>1;v0=v0+v3+1>>1;v3=t;t=v1-v2+1>>1;v1=v1+v2+1>>1;v2=t;t=v4*dctSin3+v7*dctCos3+2048>>12;v4=v4*dctCos3-v7*dctSin3+2048>>12;v7=t;t=v5*dctSin1+v6*dctCos1+2048>>12;v5=v5*dctCos1-v6*dctSin1+2048>>12;v6=t;p[0+row]=v0+v7;p[7+row]=v0-v7;p[1+row]=v1+v6;p[6+row]=v1-v6;p[2+row]=v2+v5;p[5+row]=v2-v5;p[3+row]=v3+v4;p[4+row]=v3-v4}for(i=0;i<8;++i){var col=i;if(p[1*8+col]==0&&p[2*8+col]==0&&p[3*8+col]==0&&p[4*8+col]==0&&p[5*8+col]==0&&p[6*8+col]==0&&p[7*8+col]==0){t=dctSqrt2*dataIn[i+0]+8192>>14;p[0*8+col]=t;p[1*8+col]=t;p[2*8+col]=t;p[3*8+col]=t;p[4*8+col]=t;p[5*8+col]=t;p[6*8+col]=t;p[7*8+col]=t;continue}v0=dctSqrt2*p[0*8+col]+2048>>12;v1=dctSqrt2*p[4*8+col]+2048>>12;v2=p[2*8+col];v3=p[6*8+col];v4=dctSqrt1d2*(p[1*8+col]-p[7*8+col])+2048>>12;v7=dctSqrt1d2*(p[1*8+col]+p[7*8+col])+2048>>12;v5=p[3*8+col];v6=p[5*8+col];t=v0-v1+1>>1;v0=v0+v1+1>>1;v1=t;t=v2*dctSin6+v3*dctCos6+2048>>12;v2=v2*dctCos6-v3*dctSin6+2048>>12;v3=t;t=v4-v6+1>>1;v4=v4+v6+1>>1;v6=t;t=v7+v5+1>>1;v5=v7-v5+1>>1;v7=t;t=v0-v3+1>>1;v0=v0+v3+1>>1;v3=t;t=v1-v2+1>>1;v1=v1+v2+1>>1;v2=t;t=v4*dctSin3+v7*dctCos3+2048>>12;v4=v4*dctCos3-v7*dctSin3+2048>>12;v7=t;t=v5*dctSin1+v6*dctCos1+2048>>12;v5=v5*dctCos1-v6*dctSin1+2048>>12;v6=t;p[0*8+col]=v0+v7;p[7*8+col]=v0-v7;p[1*8+col]=v1+v6;p[6*8+col]=v1-v6;p[2*8+col]=v2+v5;p[5*8+col]=v2-v5;p[3*8+col]=v3+v4;p[4*8+col]=v3-v4}for(i=0;i<64;++i){var sample=128+(p[i]+8>>4);dataOut[i]=sample<0?0:sample>255?255:sample}}var i,j;for(var blockRow=0;blockRow<blocksPerColumn;blockRow++){var scanLine=blockRow<<3;for(i=0;i<8;i++)lines.push(new Uint8Array(samplesPerLine));for(var blockCol=0;blockCol<blocksPerLine;blockCol++){quantizeAndInverse(component.blocks[blockRow][blockCol],r,R);var offset=0,sample=blockCol<<3;for(j=0;j<8;j++){var line=lines[scanLine+j];for(i=0;i<8;i++)line[sample+i]=r[offset++]}}}return lines}function clampTo8bit(a){return a<0?0:a>255?255:a}constructor.prototype={load:function load(path){var xhr=new XMLHttpRequest;xhr.open("GET",path,true);xhr.responseType="arraybuffer";xhr.onload=function(){var data=new Uint8Array(xhr.response||xhr.mozResponseArrayBuffer);this.parse(data);if(this.onload)this.onload()}.bind(this);xhr.send(null)},parse:function parse(data){var offset=0,length=data.length;function readUint16(){var value=data[offset]<<8|data[offset+1];offset+=2;return value}function readDataBlock(){var length=readUint16();var array=data.subarray(offset,offset+length-2);offset+=array.length;return array}function prepareComponents(frame){var maxH=0,maxV=0;var component,componentId;for(componentId in frame.components){if(frame.components.hasOwnProperty(componentId)){component=frame.components[componentId];if(maxH<component.h)maxH=component.h;if(maxV<component.v)maxV=component.v}}var mcusPerLine=Math.ceil(frame.samplesPerLine/8/maxH);var mcusPerColumn=Math.ceil(frame.scanLines/8/maxV);for(componentId in frame.components){if(frame.components.hasOwnProperty(componentId)){component=frame.components[componentId];var blocksPerLine=Math.ceil(Math.ceil(frame.samplesPerLine/8)*component.h/maxH);var blocksPerColumn=Math.ceil(Math.ceil(frame.scanLines/8)*component.v/maxV);var blocksPerLineForMcu=mcusPerLine*component.h;var blocksPerColumnForMcu=mcusPerColumn*component.v;var blocks=[];for(var i=0;i<blocksPerColumnForMcu;i++){var row=[];for(var j=0;j<blocksPerLineForMcu;j++)row.push(new Int32Array(64));blocks.push(row)}component.blocksPerLine=blocksPerLine;component.blocksPerColumn=blocksPerColumn;component.blocks=blocks}}frame.maxH=maxH;frame.maxV=maxV;frame.mcusPerLine=mcusPerLine;frame.mcusPerColumn=mcusPerColumn}var jfif=null;var adobe=null;var pixels=null;var frame,resetInterval;var quantizationTables=[],frames=[];var huffmanTablesAC=[],huffmanTablesDC=[];var fileMarker=readUint16();if(fileMarker!=65496){throw new Error("SOI not found")}fileMarker=readUint16();while(fileMarker!=65497){var i,j,l;switch(fileMarker){case 65280:break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var appData=readDataBlock();if(fileMarker===65504){if(appData[0]===74&&appData[1]===70&&appData[2]===73&&appData[3]===70&&appData[4]===0){jfif={version:{major:appData[5],minor:appData[6]},densityUnits:appData[7],xDensity:appData[8]<<8|appData[9],yDensity:appData[10]<<8|appData[11],thumbWidth:appData[12],thumbHeight:appData[13],thumbData:appData.subarray(14,14+3*appData[12]*appData[13])}}}if(fileMarker===65518){if(appData[0]===65&&appData[1]===100&&appData[2]===111&&appData[3]===98&&appData[4]===101&&appData[5]===0){adobe={version:appData[6],flags0:appData[7]<<8|appData[8],flags1:appData[9]<<8|appData[10],transformCode:appData[11]}}}break;case 65499:var quantizationTablesLength=readUint16();var quantizationTablesEnd=quantizationTablesLength+offset-2;while(offset<quantizationTablesEnd){var quantizationTableSpec=data[offset++];var tableData=new Int32Array(64);if(quantizationTableSpec>>4===0){for(j=0;j<64;j++){var z=dctZigZag[j];tableData[z]=data[offset++]}}else if(quantizationTableSpec>>4===1){for(j=0;j<64;j++){var z=dctZigZag[j];tableData[z]=readUint16()}}else throw new Error("DQT: invalid table spec");quantizationTables[quantizationTableSpec&15]=tableData}break;case 65472:case 65473:case 65474:readUint16();frame={};frame.extended=fileMarker===65473;frame.progressive=fileMarker===65474;frame.precision=data[offset++];frame.scanLines=readUint16();frame.samplesPerLine=readUint16();frame.components={};frame.componentsOrder=[];var componentsCount=data[offset++],componentId;var maxH=0,maxV=0;for(i=0;i<componentsCount;i++){componentId=data[offset];var h=data[offset+1]>>4;var v=data[offset+1]&15;var qId=data[offset+2];frame.componentsOrder.push(componentId);frame.components[componentId]={h:h,v:v,quantizationIdx:qId};offset+=3}prepareComponents(frame);frames.push(frame);break;case 65476:var huffmanLength=readUint16();for(i=2;i<huffmanLength;){var huffmanTableSpec=data[offset++];var codeLengths=new Uint8Array(16);var codeLengthSum=0;for(j=0;j<16;j++,offset++)codeLengthSum+=codeLengths[j]=data[offset];var huffmanValues=new Uint8Array(codeLengthSum);for(j=0;j<codeLengthSum;j++,offset++)huffmanValues[j]=data[offset];i+=17+codeLengthSum;(huffmanTableSpec>>4===0?huffmanTablesDC:huffmanTablesAC)[huffmanTableSpec&15]=buildHuffmanTable(codeLengths,huffmanValues)}break;case 65501:readUint16();resetInterval=readUint16();break;case 65498:var scanLength=readUint16();var selectorsCount=data[offset++];var components=[],component;for(i=0;i<selectorsCount;i++){component=frame.components[data[offset++]];var tableSpec=data[offset++];component.huffmanTableDC=huffmanTablesDC[tableSpec>>4];component.huffmanTableAC=huffmanTablesAC[tableSpec&15];components.push(component)}var spectralStart=data[offset++];var spectralEnd=data[offset++];var successiveApproximation=data[offset++];var processed=decodeScan(data,offset,frame,components,resetInterval,spectralStart,spectralEnd,successiveApproximation>>4,successiveApproximation&15);offset+=processed;break;default:if(data[offset-3]==255&&data[offset-2]>=192&&data[offset-2]<=254){offset-=3;break}throw new Error("unknown JPEG marker "+fileMarker.toString(16))}fileMarker=readUint16()}if(frames.length!=1)throw new Error("only single frame JPEGs supported");for(var i=0;i<frames.length;i++){var cp=frames[i].components;for(var j in cp){cp[j].quantizationTable=quantizationTables[cp[j].quantizationIdx];delete cp[j].quantizationIdx}}this.width=frame.samplesPerLine;this.height=frame.scanLines;this.jfif=jfif;this.adobe=adobe;this.components=[];for(var i=0;i<frame.componentsOrder.length;i++){var component=frame.components[frame.componentsOrder[i]];this.components.push({lines:buildComponentData(frame,component),scaleX:component.h/frame.maxH,scaleY:component.v/frame.maxV})}},getData:function getData(width,height){var scaleX=this.width/width,scaleY=this.height/height;var component1,component2,component3,component4;var component1Line,component2Line,component3Line,component4Line;var x,y;var offset=0;var Y,Cb,Cr,K,C,M,Ye,R,G,B;var colorTransform;var dataLength=width*height*this.components.length;var data=new Uint8Array(dataLength);switch(this.components.length){case 1:component1=this.components[0];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];for(x=0;x<width;x++){Y=component1Line[0|x*component1.scaleX*scaleX];data[offset++]=Y}}break;case 2:component1=this.components[0];component2=this.components[1];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];component2Line=component2.lines[0|y*component2.scaleY*scaleY];for(x=0;x<width;x++){Y=component1Line[0|x*component1.scaleX*scaleX];data[offset++]=Y;Y=component2Line[0|x*component2.scaleX*scaleX];data[offset++]=Y}}break;case 3:colorTransform=true;if(this.adobe&&this.adobe.transformCode)colorTransform=true;else if(typeof this.colorTransform!=="undefined")colorTransform=!!this.colorTransform;component1=this.components[0];component2=this.components[1];component3=this.components[2];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];component2Line=component2.lines[0|y*component2.scaleY*scaleY];component3Line=component3.lines[0|y*component3.scaleY*scaleY];for(x=0;x<width;x++){if(!colorTransform){R=component1Line[0|x*component1.scaleX*scaleX];G=component2Line[0|x*component2.scaleX*scaleX];B=component3Line[0|x*component3.scaleX*scaleX]}else{Y=component1Line[0|x*component1.scaleX*scaleX];Cb=component2Line[0|x*component2.scaleX*scaleX];Cr=component3Line[0|x*component3.scaleX*scaleX];R=clampTo8bit(Y+1.402*(Cr-128));G=clampTo8bit(Y-.3441363*(Cb-128)-.71413636*(Cr-128));B=clampTo8bit(Y+1.772*(Cb-128))}data[offset++]=R;data[offset++]=G;data[offset++]=B}}break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";colorTransform=false;if(this.adobe&&this.adobe.transformCode)colorTransform=true;else if(typeof this.colorTransform!=="undefined")colorTransform=!!this.colorTransform;component1=this.components[0];component2=this.components[1];component3=this.components[2];component4=this.components[3];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];component2Line=component2.lines[0|y*component2.scaleY*scaleY];component3Line=component3.lines[0|y*component3.scaleY*scaleY];component4Line=component4.lines[0|y*component4.scaleY*scaleY];for(x=0;x<width;x++){if(!colorTransform){C=component1Line[0|x*component1.scaleX*scaleX];M=component2Line[0|x*component2.scaleX*scaleX];Ye=component3Line[0|x*component3.scaleX*scaleX];K=component4Line[0|x*component4.scaleX*scaleX]}else{Y=component1Line[0|x*component1.scaleX*scaleX];Cb=component2Line[0|x*component2.scaleX*scaleX];Cr=component3Line[0|x*component3.scaleX*scaleX];K=component4Line[0|x*component4.scaleX*scaleX];C=255-clampTo8bit(Y+1.402*(Cr-128));M=255-clampTo8bit(Y-.3441363*(Cb-128)-.71413636*(Cr-128));Ye=255-clampTo8bit(Y+1.772*(Cb-128))}data[offset++]=255-C;data[offset++]=255-M;data[offset++]=255-Ye;data[offset++]=255-K}}break;default:throw"Unsupported color mode"}return data},copyToImageData:function copyToImageData(imageData){var width=imageData.width,height=imageData.height;var imageDataArray=imageData.data;var data=this.getData(width,height);var i=0,j=0,x,y;var Y,K,C,M,R,G,B;switch(this.components.length){case 1:for(y=0;y<height;y++){for(x=0;x<width;x++){Y=data[i++];imageDataArray[j++]=Y;imageDataArray[j++]=Y;imageDataArray[j++]=Y;imageDataArray[j++]=255}}break;case 3:for(y=0;y<height;y++){for(x=0;x<width;x++){R=data[i++];G=data[i++];B=data[i++];imageDataArray[j++]=R;imageDataArray[j++]=G;imageDataArray[j++]=B;imageDataArray[j++]=255}}break;case 4:for(y=0;y<height;y++){for(x=0;x<width;x++){C=data[i++];M=data[i++];Y=data[i++];K=data[i++];R=255-clampTo8bit(C*(1-K/255)+K);G=255-clampTo8bit(M*(1-K/255)+K);B=255-clampTo8bit(Y*(1-K/255)+K);imageDataArray[j++]=R;imageDataArray[j++]=G;imageDataArray[j++]=B;imageDataArray[j++]=255}}break;default:throw"Unsupported color mode"}}};return constructor}();module.exports=decode;function decode(jpegData,useTArray){var arr=new Uint8Array(jpegData);var decoder=new JpegImage;decoder.parse(arr);var image={width:decoder.width,height:decoder.height,data:useTArray?new Uint8Array(decoder.width*decoder.height*4):new Buffer(decoder.width*decoder.height*4)};decoder.copyToImageData(image);return image}}).call(this,require("buffer").Buffer)},{buffer:7}],32:[function(require,module,exports){(function(Buffer){var btoa=btoa||function(buf){return new Buffer(buf).toString("base64")};function JPEGEncoder(quality){var self=this;var fround=Math.round;var ffloor=Math.floor;var YTable=new Array(64);var UVTable=new Array(64);var fdtbl_Y=new Array(64);var fdtbl_UV=new Array(64);var YDC_HT;var UVDC_HT;var YAC_HT;var UVAC_HT;var bitcode=new Array(65535);var category=new Array(65535);var outputfDCTQuant=new Array(64);var DU=new Array(64);var byteout=[];var bytenew=0;var bytepos=7;var YDU=new Array(64);var UDU=new Array(64);var VDU=new Array(64);var clt=new Array(256);var RGB_YUV_TABLE=new Array(2048);var currentQuality;var ZigZag=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63];var std_dc_luminance_nrcodes=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];var std_dc_luminance_values=[0,1,2,3,4,5,6,7,8,9,10,11];var std_ac_luminance_nrcodes=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125];var std_ac_luminance_values=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250];var std_dc_chrominance_nrcodes=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];var std_dc_chrominance_values=[0,1,2,3,4,5,6,7,8,9,10,11];var std_ac_chrominance_nrcodes=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119];var std_ac_chrominance_values=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function initQuantTables(sf){var YQT=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99];for(var i=0;i<64;i++){var t=ffloor((YQT[i]*sf+50)/100);if(t<1){t=1}else if(t>255){t=255}YTable[ZigZag[i]]=t}var UVQT=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99];for(var j=0;j<64;j++){var u=ffloor((UVQT[j]*sf+50)/100);if(u<1){u=1}else if(u>255){u=255}UVTable[ZigZag[j]]=u}var aasf=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379];var k=0;for(var row=0;row<8;row++){for(var col=0;col<8;col++){fdtbl_Y[k]=1/(YTable[ZigZag[k]]*aasf[row]*aasf[col]*8);fdtbl_UV[k]=1/(UVTable[ZigZag[k]]*aasf[row]*aasf[col]*8);k++}}}function computeHuffmanTbl(nrcodes,std_table){var codevalue=0;var pos_in_table=0;var HT=new Array;for(var k=1;k<=16;k++){for(var j=1;j<=nrcodes[k];j++){HT[std_table[pos_in_table]]=[];HT[std_table[pos_in_table]][0]=codevalue;HT[std_table[pos_in_table]][1]=k;pos_in_table++;codevalue++}codevalue*=2}return HT}function initHuffmanTbl(){YDC_HT=computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);UVDC_HT=computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);YAC_HT=computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);UVAC_HT=computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values)}function initCategoryNumber(){var nrlower=1;var nrupper=2;for(var cat=1;cat<=15;cat++){for(var nr=nrlower;nr<nrupper;nr++){category[32767+nr]=cat;bitcode[32767+nr]=[];bitcode[32767+nr][1]=cat;bitcode[32767+nr][0]=nr}for(var nrneg=-(nrupper-1);nrneg<=-nrlower;nrneg++){category[32767+nrneg]=cat;bitcode[32767+nrneg]=[];bitcode[32767+nrneg][1]=cat;bitcode[32767+nrneg][0]=nrupper-1+nrneg}nrlower<<=1;nrupper<<=1}}function initRGBYUVTable(){for(var i=0;i<256;i++){RGB_YUV_TABLE[i]=19595*i;RGB_YUV_TABLE[i+256>>0]=38470*i;RGB_YUV_TABLE[i+512>>0]=7471*i+32768;RGB_YUV_TABLE[i+768>>0]=-11059*i;RGB_YUV_TABLE[i+1024>>0]=-21709*i;RGB_YUV_TABLE[i+1280>>0]=32768*i+8421375;RGB_YUV_TABLE[i+1536>>0]=-27439*i;RGB_YUV_TABLE[i+1792>>0]=-5329*i}}function writeBits(bs){var value=bs[0];var posval=bs[1]-1;while(posval>=0){if(value&1<<posval){bytenew|=1<<bytepos}posval--;bytepos--;if(bytepos<0){if(bytenew==255){writeByte(255);writeByte(0)}else{writeByte(bytenew)}bytepos=7;bytenew=0}}}function writeByte(value){byteout.push(value)}function writeWord(value){writeByte(value>>8&255);writeByte(value&255)}function fDCTQuant(data,fdtbl){var d0,d1,d2,d3,d4,d5,d6,d7;var dataOff=0;var i;var I8=8;var I64=64;for(i=0;i<I8;++i){d0=data[dataOff];d1=data[dataOff+1];d2=data[dataOff+2];d3=data[dataOff+3];d4=data[dataOff+4];d5=data[dataOff+5];d6=data[dataOff+6];d7=data[dataOff+7];var tmp0=d0+d7;var tmp7=d0-d7;var tmp1=d1+d6;var tmp6=d1-d6;var tmp2=d2+d5;var tmp5=d2-d5;var tmp3=d3+d4;var tmp4=d3-d4;var tmp10=tmp0+tmp3;var tmp13=tmp0-tmp3;var tmp11=tmp1+tmp2;var tmp12=tmp1-tmp2;data[dataOff]=tmp10+tmp11;data[dataOff+4]=tmp10-tmp11;var z1=(tmp12+tmp13)*.707106781;data[dataOff+2]=tmp13+z1;data[dataOff+6]=tmp13-z1;tmp10=tmp4+tmp5;tmp11=tmp5+tmp6;tmp12=tmp6+tmp7;var z5=(tmp10-tmp12)*.382683433;var z2=.5411961*tmp10+z5;var z4=1.306562965*tmp12+z5;var z3=tmp11*.707106781;var z11=tmp7+z3;var z13=tmp7-z3;data[dataOff+5]=z13+z2;data[dataOff+3]=z13-z2;data[dataOff+1]=z11+z4;data[dataOff+7]=z11-z4;dataOff+=8}dataOff=0;for(i=0;i<I8;++i){d0=data[dataOff];d1=data[dataOff+8];d2=data[dataOff+16];d3=data[dataOff+24];d4=data[dataOff+32];d5=data[dataOff+40];d6=data[dataOff+48];d7=data[dataOff+56];var tmp0p2=d0+d7;var tmp7p2=d0-d7;var tmp1p2=d1+d6;var tmp6p2=d1-d6;var tmp2p2=d2+d5;var tmp5p2=d2-d5;var tmp3p2=d3+d4;var tmp4p2=d3-d4;var tmp10p2=tmp0p2+tmp3p2;var tmp13p2=tmp0p2-tmp3p2;var tmp11p2=tmp1p2+tmp2p2;var tmp12p2=tmp1p2-tmp2p2;data[dataOff]=tmp10p2+tmp11p2;data[dataOff+32]=tmp10p2-tmp11p2;var z1p2=(tmp12p2+tmp13p2)*.707106781;data[dataOff+16]=tmp13p2+z1p2;data[dataOff+48]=tmp13p2-z1p2;tmp10p2=tmp4p2+tmp5p2;tmp11p2=tmp5p2+tmp6p2;tmp12p2=tmp6p2+tmp7p2;var z5p2=(tmp10p2-tmp12p2)*.382683433;var z2p2=.5411961*tmp10p2+z5p2;var z4p2=1.306562965*tmp12p2+z5p2;var z3p2=tmp11p2*.707106781;var z11p2=tmp7p2+z3p2;var z13p2=tmp7p2-z3p2;data[dataOff+40]=z13p2+z2p2;data[dataOff+24]=z13p2-z2p2;data[dataOff+8]=z11p2+z4p2;data[dataOff+56]=z11p2-z4p2;dataOff++}var fDCTQuant;for(i=0;i<I64;++i){fDCTQuant=data[i]*fdtbl[i];outputfDCTQuant[i]=fDCTQuant>0?fDCTQuant+.5|0:fDCTQuant-.5|0}return outputfDCTQuant}function writeAPP0(){writeWord(65504);writeWord(16);writeByte(74);writeByte(70);writeByte(73);writeByte(70);writeByte(0);writeByte(1);writeByte(1);writeByte(0);writeWord(1);writeWord(1);writeByte(0);writeByte(0)}function writeSOF0(width,height){writeWord(65472);writeWord(17);writeByte(8);writeWord(height);writeWord(width);writeByte(3);writeByte(1);writeByte(17);writeByte(0);writeByte(2);writeByte(17);writeByte(1);writeByte(3);writeByte(17);writeByte(1)}function writeDQT(){writeWord(65499);writeWord(132);writeByte(0);for(var i=0;i<64;i++){writeByte(YTable[i])}writeByte(1);for(var j=0;j<64;j++){writeByte(UVTable[j])}}function writeDHT(){writeWord(65476);writeWord(418);writeByte(0);for(var i=0;i<16;i++){writeByte(std_dc_luminance_nrcodes[i+1])}for(var j=0;j<=11;j++){writeByte(std_dc_luminance_values[j])}writeByte(16);for(var k=0;k<16;k++){writeByte(std_ac_luminance_nrcodes[k+1])}for(var l=0;l<=161;l++){writeByte(std_ac_luminance_values[l])}writeByte(1);for(var m=0;m<16;m++){writeByte(std_dc_chrominance_nrcodes[m+1])}for(var n=0;n<=11;n++){writeByte(std_dc_chrominance_values[n])}writeByte(17);for(var o=0;o<16;o++){writeByte(std_ac_chrominance_nrcodes[o+1])}for(var p=0;p<=161;p++){writeByte(std_ac_chrominance_values[p])}}function writeSOS(){writeWord(65498);writeWord(12);writeByte(3);writeByte(1);writeByte(0);writeByte(2);writeByte(17);writeByte(3);writeByte(17);writeByte(0);writeByte(63);writeByte(0)}function processDU(CDU,fdtbl,DC,HTDC,HTAC){var EOB=HTAC[0];var M16zeroes=HTAC[240];var pos;var I16=16;var I63=63;var I64=64;var DU_DCT=fDCTQuant(CDU,fdtbl);for(var j=0;j<I64;++j){DU[ZigZag[j]]=DU_DCT[j]}var Diff=DU[0]-DC;DC=DU[0];if(Diff==0){writeBits(HTDC[0])}else{pos=32767+Diff;writeBits(HTDC[category[pos]]);writeBits(bitcode[pos])}var end0pos=63;for(;end0pos>0&&DU[end0pos]==0;end0pos--){}if(end0pos==0){writeBits(EOB);return DC}var i=1;var lng;while(i<=end0pos){var startpos=i;for(;DU[i]==0&&i<=end0pos;++i){}var nrzeroes=i-startpos;if(nrzeroes>=I16){lng=nrzeroes>>4;for(var nrmarker=1;nrmarker<=lng;++nrmarker)writeBits(M16zeroes);nrzeroes=nrzeroes&15}pos=32767+DU[i];writeBits(HTAC[(nrzeroes<<4)+category[pos]]);writeBits(bitcode[pos]);i++}if(end0pos!=I63){writeBits(EOB)}return DC}function initCharLookupTable(){var sfcc=String.fromCharCode;for(var i=0;i<256;i++){clt[i]=sfcc(i)}}this.encode=function(image,quality){var time_start=(new Date).getTime();if(quality)setQuality(quality);byteout=new Array;bytenew=0;bytepos=7;writeWord(65496);writeAPP0();writeDQT();writeSOF0(image.width,image.height);writeDHT();writeSOS();var DCY=0;var DCU=0;var DCV=0;bytenew=0;bytepos=7;this.encode.displayName="_encode_";var imageData=image.data;var width=image.width;var height=image.height;var quadWidth=width*4;var tripleWidth=width*3;var x,y=0;var r,g,b;var start,p,col,row,pos;while(y<height){x=0;while(x<quadWidth){start=quadWidth*y+x;p=start;col=-1;row=0;for(pos=0;pos<64;pos++){row=pos>>3;col=(pos&7)*4;p=start+row*quadWidth+col;if(y+row>=height){p-=quadWidth*(y+1+row-height)}if(x+col>=quadWidth){p-=x+col-quadWidth+4}r=imageData[p++];g=imageData[p++];b=imageData[p++];YDU[pos]=(RGB_YUV_TABLE[r]+RGB_YUV_TABLE[g+256>>0]+RGB_YUV_TABLE[b+512>>0]>>16)-128;UDU[pos]=(RGB_YUV_TABLE[r+768>>0]+RGB_YUV_TABLE[g+1024>>0]+RGB_YUV_TABLE[b+1280>>0]>>16)-128;VDU[pos]=(RGB_YUV_TABLE[r+1280>>0]+RGB_YUV_TABLE[g+1536>>0]+RGB_YUV_TABLE[b+1792>>0]>>16)-128}DCY=processDU(YDU,fdtbl_Y,DCY,YDC_HT,YAC_HT);DCU=processDU(UDU,fdtbl_UV,DCU,UVDC_HT,UVAC_HT);DCV=processDU(VDU,fdtbl_UV,DCV,UVDC_HT,UVAC_HT);x+=32}y+=8}if(bytepos>=0){var fillbits=[];fillbits[1]=bytepos+1;fillbits[0]=(1<<bytepos+1)-1;writeBits(fillbits)}writeWord(65497);return new Buffer(byteout);var jpegDataUri="data:image/jpeg;base64,"+btoa(byteout.join(""));byteout=[];var duration=(new Date).getTime()-time_start;return jpegDataUri};function setQuality(quality){if(quality<=0){quality=1}if(quality>100){quality=100}if(currentQuality==quality)return;var sf=0;if(quality<50){sf=Math.floor(5e3/quality)}else{sf=Math.floor(200-quality*2)}initQuantTables(sf);currentQuality=quality}function init(){var time_start=(new Date).getTime();if(!quality)quality=50;initCharLookupTable();initHuffmanTbl();initCategoryNumber();initRGBYUVTable();setQuality(quality);var duration=(new Date).getTime()-time_start}init()}module.exports=encode;function encode(imgData,qu){if(typeof qu==="undefined")qu=50;var encoder=new JPEGEncoder(qu);var data=encoder.encode(imgData,qu);return{data:data,width:imgData.width,height:imgData.height}}function getImageDataFromImage(idOrElement){var theImg=typeof idOrElement=="string"?document.getElementById(idOrElement):idOrElement;var cvs=document.createElement("canvas");cvs.width=theImg.width;cvs.height=theImg.height;var ctx=cvs.getContext("2d");ctx.drawImage(theImg,0,0);return ctx.getImageData(0,0,cvs.width,cvs.height)}}).call(this,require("buffer").Buffer)},{buffer:7}],33:[function(require,module,exports){"use strict";var MultiRange=function(){function MultiRange(data){function isArray(x){return Object.prototype.toString.call(x)==="[object Array]"}this.ranges=[];if(typeof data==="string"){this.parseString(data)}else if(typeof data==="number"){this.appendRange(data,data)}else if(data instanceof MultiRange){this.ranges=data.getRanges()}else if(isArray(data)){for(var _i=0,_a=data;_i<_a.length;_i++){var item=_a[_i];if(isArray(item)){if(item.length===2){this.appendRange(item[0],item[1])}else{throw new TypeError("Invalid array initializer")}}else if(typeof item==="number"){this.append(item)}else{throw new TypeError("Invalid array initialzer")}}}else if(data!==undefined){throw new TypeError("Invalid input")}}MultiRange.prototype.parseString=function(data){function toInt(str){var m=str.match(/^\(?(\-?\d+)/);return parseInt(m[1],10)}var s=data.replace(/\s/g,"");if(!s.length)return;var match;for(var _i=0,_a=s.split(",");_i<_a.length;_i++){var r=_a[_i];if(match=r.match(/^(\d+|\(\-?\d+\))$/)){var val=toInt(match[1]);this.appendRange(val,val)}else if(match=r.match(/^(\d+|\(\-?\d+\))?\-(\d+|\(\-?\d+\))?$/)){var min=match[1]===undefined?-Infinity:toInt(match[1]);var max=match[2]===undefined?+Infinity:toInt(match[2]);this.appendRange(min,max)}else{throw new SyntaxError("Invalid input")}}};MultiRange.prototype.clone=function(){return new MultiRange(this)};MultiRange.prototype.append=function(value){if(value===undefined){throw new TypeError("Invalid input")}else if(value instanceof MultiRange){for(var _i=0,_a=value.ranges;_i<_a.length;_i++){var r=_a[_i];this.appendRange(r[0],r[1])}return this}else{return this.append(new MultiRange(value))}};MultiRange.prototype.appendRange=function(min,max){var newRange=[min,max];if(newRange[0]>newRange[1]){newRange=[newRange[1],newRange[0]]}if(newRange[0]===Infinity&&newRange[1]===Infinity||newRange[0]===-Infinity&&newRange[1]===-Infinity){throw new RangeError("Infinity can be used only within an unbounded range segment")}var overlap=this.findOverlap(newRange);this.ranges.splice(overlap.lo,overlap.count,overlap.union);return this};MultiRange.prototype.subtract=function(value){if(value===undefined){throw new TypeError("Invalid input")}else if(value instanceof MultiRange){for(var _i=0,_a=value.ranges;_i<_a.length;_i++){var r=_a[_i];this.subtractRange(r[0],r[1])}return this}else{return this.subtract(new MultiRange(value))}};MultiRange.prototype.subtractRange=function(min,max){var newRange=[min,max];if(newRange[0]>newRange[1]){newRange=[newRange[1],newRange[0]]}var overlap=this.findOverlap(newRange);if(overlap.count>0){var remain=[];if(this.ranges[overlap.lo][0]<newRange[0]){remain.push([this.ranges[overlap.lo][0],newRange[0]-1])}if(newRange[1]<this.ranges[overlap.lo+overlap.count-1][1]){remain.push([newRange[1]+1,this.ranges[overlap.lo+overlap.count-1][1]])}this.ranges.splice.apply(this.ranges,[overlap.lo,overlap.count].concat(remain))}return this};MultiRange.prototype.intersect=function(value){if(value===undefined){throw new TypeError("Invalid input")}else if(value instanceof MultiRange){var result=[];var jstart=0;for(var i=0;i<this.ranges.length;i++){var r1=this.ranges[i];for(var j=jstart;j<value.ranges.length;j++){var r2=value.ranges[j];if(r1[0]<=r2[1]&&r1[1]>=r2[0]){jstart=j;var min=Math.max(r1[0],r2[0]);var max=Math.min(r1[1],r2[1]);result.push([min,max])}else if(r1[1]<r2[0]){break}}}this.ranges=result;return this}else{return this.intersect(new MultiRange(value))}};MultiRange.prototype.findOverlap=function(target){for(var hi=this.ranges.length-1;hi>=0;hi--){var r=this.ranges[hi];var union=void 0;if(union=this.calcUnion(r,target)){var count=1;var tmp=void 0;while(hi-count>=0&&(tmp=this.calcUnion(union,this.ranges[hi-count]))){union=tmp;count++}return{lo:hi+1-count,count:count,union:union}}else if(r[1]<target[0]){return{lo:hi+1,count:0,union:target}}}return{lo:0,count:0,union:target}};MultiRange.prototype.calcUnion=function(a,b){if(a[1]+1<b[0]||a[0]-1>b[1]){return null}return[Math.min(a[0],b[0]),Math.max(a[1],b[1])]};MultiRange.prototype.getRanges=function(){var result=[];for(var _i=0,_a=this.ranges;_i<_a.length;_i++){var r=_a[_i];result.push([r[0],r[1]])}return result};MultiRange.prototype.has=function(value){if(value===undefined){throw new TypeError("Invalid input")}else if(value instanceof MultiRange){var s=0;var len=this.ranges.length;for(var _i=0,_a=value.ranges;_i<_a.length;_i++){var tr=_a[_i];var i=void 0;for(i=s;i<len;i++){var my=this.ranges[i];if(tr[0]>=my[0]&&tr[1]<=my[1]&&tr[1]>=my[0]&&tr[1]<=my[1])break}if(i===len)return false}return true}else{return this.has(new MultiRange(value))}};MultiRange.prototype.hasRange=function(min,max){return this.has(new MultiRange([[min,max]]))};MultiRange.prototype.segmentLength=function(){return this.ranges.length};MultiRange.prototype.length=function(){if(this.isUnbounded())return Infinity;var result=0;for(var _i=0,_a=this.ranges;_i<_a.length;_i++){var r=_a[_i];result+=r[1]-r[0]+1}return result};MultiRange.prototype.equals=function(cmp){if(cmp===undefined){throw new TypeError("Invalid input")}else if(cmp instanceof MultiRange){if(cmp===this)return true;if(this.ranges.length!==cmp.ranges.length)return false;for(var i=0;i<this.ranges.length;i++){if(this.ranges[i][0]!==cmp.ranges[i][0]||this.ranges[i][1]!==cmp.ranges[i][1])return false}return true}else{return this.equals(new MultiRange(cmp))}};MultiRange.prototype.isUnbounded=function(){return this.ranges.length>0&&(this.ranges[0][0]===-Infinity||this.ranges[this.ranges.length-1][1]===Infinity)};MultiRange.prototype.min=function(){if(this.ranges.length===0)return undefined;return this.ranges[0][0]};MultiRange.prototype.max=function(){if(this.ranges.length===0)return undefined;return this.ranges[this.ranges.length-1][1]};MultiRange.prototype.shift=function(){var min=this.min();if(min===-Infinity)throw new RangeError("shift() was invoked on an unbounded MultiRange which contains -Infinity");if(min!==undefined)this.subtract(min);return min};MultiRange.prototype.pop=function(){var max=this.max();if(max===Infinity)throw new RangeError("pop() was invoked on an unbounded MultiRange which contains +Infinity");if(max!==undefined)this.subtract(max);return max};MultiRange.prototype.toString=function(){function wrap(i){return i>=0?String(i):"("+i+")"}var ranges=[];for(var _i=0,_a=this.ranges;_i<_a.length;_i++){var r=_a[_i];if(r[0]===-Infinity){if(r[1]===Infinity){ranges.push("-")}else{ranges.push("-"+wrap(r[1]))}}else if(r[1]===Infinity){ranges.push(wrap(r[0])+"-")}else if(r[0]==r[1]){ranges.push(wrap(r[0]))}else{ranges.push(wrap(r[0])+"-"+wrap(r[1]))}}return ranges.join(",")};MultiRange.prototype.toArray=function(){if(this.isUnbounded()){throw new RangeError("You cannot build an array from an unbounded range")}var result=new Array(this.length());var idx=0;for(var _i=0,_a=this.ranges;_i<_a.length;_i++){var r=_a[_i];for(var n=r[0];n<=r[1];n++){result[idx++]=n}}return result};MultiRange.prototype.getIterator=function(){var _this=this;if(this.isUnbounded()){throw new RangeError("Unbounded ranges cannot be iterated over")}var i=0,curRange=this.ranges[i],j=curRange?curRange[0]:undefined;return{next:function(){if(!curRange)return{done:true};var ret=j;if(++j>curRange[1]){curRange=_this.ranges[++i];j=curRange?curRange[0]:undefined}return{value:ret}}}};return MultiRange}();exports.MultiRange=MultiRange;if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){MultiRange.prototype[Symbol.iterator]=MultiRange.prototype.getIterator}function multirange(data){return new MultiRange(data)}exports.multirange=multirange},{}],34:[function(require,module,exports){"use strict";var compile=require("cwise-compiler");var EmptyProc={body:"",args:[],thisVars:[],localVars:[]};function fixup(x){if(!x){return EmptyProc}for(var i=0;i<x.args.length;++i){var a=x.args[i];if(i===0){x.args[i]={name:a,lvalue:true,rvalue:!!x.rvalue,count:x.count||1}}else{x.args[i]={name:a,lvalue:false,rvalue:true,count:1}}}if(!x.thisVars){x.thisVars=[]}if(!x.localVars){x.localVars=[]}return x}function pcompile(user_args){return compile({args:user_args.args,pre:fixup(user_args.pre),body:fixup(user_args.body),post:fixup(user_args.proc),funcName:user_args.funcName})}function makeOp(user_args){var args=[];for(var i=0;i<user_args.args.length;++i){args.push("a"+i)}var wrapper=new Function("P",["return function ",user_args.funcName,"_ndarrayops(",args.join(","),") {P(",args.join(","),");return a0}"].join(""));return wrapper(pcompile(user_args))}var assign_ops={add:"+",sub:"-",mul:"*",div:"/",mod:"%",band:"&",bor:"|",bxor:"^",lshift:"<<",rshift:">>",rrshift:">>>"};(function(){for(var id in assign_ops){var op=assign_ops[id];exports[id]=makeOp({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+op+"c"},funcName:id});exports[id+"eq"]=makeOp({args:["array","array"],body:{args:["a","b"],body:"a"+op+"=b"},rvalue:true,funcName:id+"eq"});exports[id+"s"]=makeOp({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+op+"s"},funcName:id+"s"});exports[id+"seq"]=makeOp({args:["array","scalar"],body:{args:["a","s"],body:"a"+op+"=s"},rvalue:true,funcName:id+"seq"})}})();var unary_ops={not:"!",bnot:"~",neg:"-",recip:"1.0/"};(function(){for(var id in unary_ops){var op=unary_ops[id];exports[id]=makeOp({args:["array","array"],body:{args:["a","b"],body:"a="+op+"b"},funcName:id});exports[id+"eq"]=makeOp({args:["array"],body:{args:["a"],body:"a="+op+"a"},rvalue:true,count:2,funcName:id+"eq"})}})();var binary_ops={and:"&&",or:"||",eq:"===",neq:"!==",lt:"<",gt:">",leq:"<=",geq:">="};(function(){for(var id in binary_ops){var op=binary_ops[id];exports[id]=makeOp({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+op+"c"},funcName:id});exports[id+"s"]=makeOp({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+op+"s"},funcName:id+"s"});exports[id+"eq"]=makeOp({args:["array","array"],body:{args:["a","b"],body:"a=a"+op+"b"},rvalue:true,count:2,funcName:id+"eq"});exports[id+"seq"]=makeOp({args:["array","scalar"],body:{args:["a","s"],body:"a=a"+op+"s"},rvalue:true,count:2,funcName:id+"seq"})}})();var math_unary=["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan"];(function(){for(var i=0;i<math_unary.length;++i){var f=math_unary[i];exports[f]=makeOp({args:["array","array"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b)",thisVars:["this_f"]},funcName:f});exports[f+"eq"]=makeOp({args:["array"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a"],body:"a=this_f(a)",thisVars:["this_f"]},rvalue:true,count:2,funcName:f+"eq"})}})();var math_comm=["max","min","atan2","pow"];(function(){for(var i=0;i<math_comm.length;++i){var f=math_comm[i];exports[f]=makeOp({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:f});exports[f+"s"]=makeOp({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:f+"s"});exports[f+"eq"]=makeOp({args:["array","array"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:true,count:2,funcName:f+"eq"});exports[f+"seq"]=makeOp({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:true,count:2,funcName:f+"seq"})}})();var math_noncomm=["atan2","pow"];(function(){for(var i=0;i<math_noncomm.length;++i){var f=math_noncomm[i];exports[f+"op"]=makeOp({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:f+"op"});exports[f+"ops"]=makeOp({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:f+"ops"});exports[f+"opeq"]=makeOp({args:["array","array"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:true,count:2,funcName:f+"opeq"});exports[f+"opseq"]=makeOp({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+f,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:true,count:2,funcName:f+"opseq"})}})();exports.any=compile({args:["array"],pre:EmptyProc,body:{args:[{name:"a",lvalue:false,rvalue:true,count:1}],body:"if(a){return true}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return false"},funcName:"any"});exports.all=compile({args:["array"],pre:EmptyProc,body:{args:[{name:"x",lvalue:false,rvalue:true,count:1}],body:"if(!x){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"all"});exports.sum=compile({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:false,rvalue:true,count:1}],body:"this_s+=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"sum"});exports.prod=compile({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=1"},body:{args:[{name:"a",lvalue:false,rvalue:true,count:1}],body:"this_s*=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"prod"});exports.norm2squared=compile({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:false,rvalue:true,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm2squared"});exports.norm2=compile({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:false,rvalue:true,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return Math.sqrt(this_s)"},funcName:"norm2"});exports.norminf=compile({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:false,rvalue:true,count:4}],body:"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norminf"});exports.norm1=compile({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:false,rvalue:true,count:3}],body:"this_s+=a<0?-a:a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm1"});exports.sup=compile({args:["array"],pre:{body:"this_h=-Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:false,rvalue:true,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}});exports.inf=compile({args:["array"],pre:{body:"this_h=Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:false,rvalue:true,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}});exports.argmin=compile({args:["index","array","shape"],pre:{body:"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:false,rvalue:false,count:0},{name:"_inline_0_arg1_",lvalue:false,rvalue:false,count:0},{name:"_inline_0_arg2_",lvalue:false,rvalue:true,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:false,rvalue:true,count:2},{name:"_inline_1_arg1_",lvalue:false,rvalue:true,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}});exports.argmax=compile({args:["index","array","shape"],pre:{body:"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:false,rvalue:false,count:0},{name:"_inline_0_arg1_",lvalue:false,rvalue:false,count:0},{name:"_inline_0_arg2_",lvalue:false,rvalue:true,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:false,rvalue:true,count:2},{name:"_inline_1_arg1_",lvalue:false,rvalue:true,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}});exports.random=makeOp({args:["array"],pre:{args:[],body:"this_f=Math.random",thisVars:["this_f"]},body:{args:["a"],body:"a=this_f()",thisVars:["this_f"]},funcName:"random"});exports.assign=makeOp({args:["array","array"],body:{args:["a","b"],body:"a=b"},funcName:"assign"});exports.assigns=makeOp({args:["array","scalar"],body:{args:["a","b"],body:"a=b"},funcName:"assigns"});exports.equals=compile({args:["array","array"],pre:EmptyProc,body:{args:[{name:"x",lvalue:false,rvalue:true,count:1},{name:"y",lvalue:false,rvalue:true,count:1}],body:"if(x!==y){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"equals"})},{"cwise-compiler":10}],35:[function(require,module,exports){"use strict";var ndarray=require("ndarray");var do_convert=require("./doConvert.js");module.exports=function convert(arr,result){var shape=[],c=arr,sz=1;while(Array.isArray(c)){shape.push(c.length);sz*=c.length;c=c[0]}if(shape.length===0){return ndarray()}if(!result){result=ndarray(new Float64Array(sz),shape)}do_convert(result,arr);return result}},{"./doConvert.js":36,ndarray:37}],36:[function(require,module,exports){module.exports=require("cwise-compiler")({args:["array","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\n}\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\n}",args:[{name:"_inline_1_arg0_",lvalue:true,rvalue:false,count:1},{name:"_inline_1_arg1_",lvalue:false,rvalue:true,count:1},{name:"_inline_1_arg2_",lvalue:false,rvalue:true,count:4}],thisVars:[],localVars:["_inline_1_i","_inline_1_v"]},post:{body:"{}",args:[],thisVars:[],localVars:[]},funcName:"convert",blockSize:64})},{"cwise-compiler":10}],37:[function(require,module,exports){var iota=require("iota-array");var isBuffer=require("is-buffer");var hasTypedArrays=typeof Float64Array!=="undefined";function compare1st(a,b){return a[0]-b[0]}function order(){var stride=this.stride;var terms=new Array(stride.length);var i;for(i=0;i<terms.length;++i){terms[i]=[Math.abs(stride[i]),i]}terms.sort(compare1st);var result=new Array(terms.length);for(i=0;i<result.length;++i){result[i]=terms[i][1]}return result}function compileConstructor(dtype,dimension){var className=["View",dimension,"d",dtype].join("");if(dimension<0){className="View_Nil"+dtype}var useGetters=dtype==="generic";if(dimension===-1){var code="function "+className+"(a){this.data=a;};var proto="+className+".prototype;proto.dtype='"+dtype+"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new "+className+"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_"+className+"(a){return new "+className+"(a);}";var procedure=new Function(code);return procedure()}else if(dimension===0){var code="function "+className+"(a,d) {this.data = a;this.offset = d};var proto="+className+".prototype;proto.dtype='"+dtype+"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function "+className+"_copy() {return new "+className+"(this.data,this.offset)};proto.pick=function "+className+"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function "+className+"_get(){return "+(useGetters?"this.data.get(this.offset)":"this.data[this.offset]")+"};proto.set=function "+className+"_set(v){return "+(useGetters?"this.data.set(this.offset,v)":"this.data[this.offset]=v")+"};return function construct_"+className+"(a,b,c,d){return new "+className+"(a,d)}";var procedure=new Function("TrivialArray",code);return procedure(CACHED_CONSTRUCTORS[dtype][0])}var code=["'use strict'"];var indices=iota(dimension);var args=indices.map(function(i){return"i"+i});var index_str="this.offset+"+indices.map(function(i){return"this.stride["+i+"]*i"+i}).join("+");var shapeArg=indices.map(function(i){return"b"+i}).join(",");var strideArg=indices.map(function(i){return"c"+i}).join(",");code.push("function "+className+"(a,"+shapeArg+","+strideArg+",d){this.data=a","this.shape=["+shapeArg+"]","this.stride=["+strideArg+"]","this.offset=d|0}","var proto="+className+".prototype","proto.dtype='"+dtype+"'","proto.dimension="+dimension);code.push("Object.defineProperty(proto,'size',{get:function "+className+"_size(){return "+indices.map(function(i){return"this.shape["+i+"]"}).join("*"),"}})");if(dimension===1){code.push("proto.order=[0]")}else{code.push("Object.defineProperty(proto,'order',{get:");if(dimension<4){code.push("function "+className+"_order(){");if(dimension===2){code.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})")}else if(dimension===3){code.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")}}else{code.push("ORDER})")}}code.push("proto.set=function "+className+"_set("+args.join(",")+",v){");if(useGetters){code.push("return this.data.set("+index_str+",v)}")}else{code.push("return this.data["+index_str+"]=v}")}code.push("proto.get=function "+className+"_get("+args.join(",")+"){");if(useGetters){code.push("return this.data.get("+index_str+")}")}else{code.push("return this.data["+index_str+"]}")}code.push("proto.index=function "+className+"_index(",args.join(),"){return "+index_str+"}");code.push("proto.hi=function "+className+"_hi("+args.join(",")+"){return new "+className+"(this.data,"+indices.map(function(i){return["(typeof i",i,"!=='number'||i",i,"<0)?this.shape[",i,"]:i",i,"|0"].join("")}).join(",")+","+indices.map(function(i){return"this.stride["+i+"]"}).join(",")+",this.offset)}");var a_vars=indices.map(function(i){return"a"+i+"=this.shape["+i+"]"});var c_vars=indices.map(function(i){return"c"+i+"=this.stride["+i+"]"});code.push("proto.lo=function "+className+"_lo("+args.join(",")+"){var b=this.offset,d=0,"+a_vars.join(",")+","+c_vars.join(","));for(var i=0;i<dimension;++i){code.push("if(typeof i"+i+"==='number'&&i"+i+">=0){d=i"+i+"|0;b+=c"+i+"*d;a"+i+"-=d}")}code.push("return new "+className+"(this.data,"+indices.map(function(i){return"a"+i}).join(",")+","+indices.map(function(i){return"c"+i}).join(",")+",b)}");code.push("proto.step=function "+className+"_step("+args.join(",")+"){var "+indices.map(function(i){return"a"+i+"=this.shape["+i+"]"}).join(",")+","+indices.map(function(i){return"b"+i+"=this.stride["+i+"]"}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(var i=0;i<dimension;++i){code.push("if(typeof i"+i+"==='number'){d=i"+i+"|0;if(d<0){c+=b"+i+"*(a"+i+"-1);a"+i+"=ceil(-a"+i+"/d)}else{a"+i+"=ceil(a"+i+"/d)}b"+i+"*=d}")}code.push("return new "+className+"(this.data,"+indices.map(function(i){return"a"+i}).join(",")+","+indices.map(function(i){return"b"+i}).join(",")+",c)}");var tShape=new Array(dimension);var tStride=new Array(dimension);for(var i=0;i<dimension;++i){tShape[i]="a[i"+i+"]";tStride[i]="b[i"+i+"]"}code.push("proto.transpose=function "+className+"_transpose("+args+"){"+args.map(function(n,idx){return n+"=("+n+"===undefined?"+idx+":"+n+"|0)"}).join(";"),"var a=this.shape,b=this.stride;return new "+className+"(this.data,"+tShape.join(",")+","+tStride.join(",")+",this.offset)}");code.push("proto.pick=function "+className+"_pick("+args+"){var a=[],b=[],c=this.offset");for(var i=0;i<dimension;++i){code.push("if(typeof i"+i+"==='number'&&i"+i+">=0){c=(c+this.stride["+i+"]*i"+i+")|0}else{a.push(this.shape["+i+"]);b.push(this.stride["+i+"])}")}code.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}");code.push("return function construct_"+className+"(data,shape,stride,offset){return new "+className+"(data,"+indices.map(function(i){return"shape["+i+"]"}).join(",")+","+indices.map(function(i){return"stride["+i+"]"}).join(",")+",offset)}");var procedure=new Function("CTOR_LIST","ORDER",code.join("\n"));return procedure(CACHED_CONSTRUCTORS[dtype],order)}function arrayDType(data){if(isBuffer(data)){return"buffer"}if(hasTypedArrays){switch(Object.prototype.toString.call(data)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped"}}if(Array.isArray(data)){return"array"}return"generic"}var CACHED_CONSTRUCTORS={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],buffer:[],generic:[]};(function(){for(var id in CACHED_CONSTRUCTORS){CACHED_CONSTRUCTORS[id].push(compileConstructor(id,-1))}});function wrappedNDArrayCtor(data,shape,stride,offset){if(data===undefined){var ctor=CACHED_CONSTRUCTORS.array[0];return ctor([])}else if(typeof data==="number"){data=[data]}if(shape===undefined){shape=[data.length]}var d=shape.length;if(stride===undefined){stride=new Array(d);for(var i=d-1,sz=1;i>=0;--i){stride[i]=sz;sz*=shape[i]}}if(offset===undefined){offset=0;for(var i=0;i<d;++i){if(stride[i]<0){offset-=(shape[i]-1)*stride[i]}}}var dtype=arrayDType(data);var ctor_list=CACHED_CONSTRUCTORS[dtype];while(ctor_list.length<=d+1){ctor_list.push(compileConstructor(dtype,ctor_list.length-1))}var ctor=ctor_list[d+1];return ctor(data,shape,stride,offset)}module.exports=wrappedNDArrayCtor},{"iota-array":27,"is-buffer":28}],38:[function(require,module,exports){function GifWriter(buf,width,height,gopts){var p=0;var gopts=gopts===undefined?{}:gopts;var loop_count=gopts.loop===undefined?null:gopts.loop;var global_palette=gopts.palette===undefined?null:gopts.palette;if(width<=0||height<=0||width>65535||height>65535)throw"Width/Height invalid.";function check_palette_and_num_colors(palette){var num_colors=palette.length;if(num_colors<2||num_colors>256||num_colors&num_colors-1)throw"Invalid code/color length, must be power of 2 and 2 .. 256.";return num_colors}buf[p++]=71;buf[p++]=73;buf[p++]=70;buf[p++]=56;buf[p++]=57;buf[p++]=97;var gp_num_colors_pow2=0;var background=0;if(global_palette!==null){var gp_num_colors=check_palette_and_num_colors(global_palette);while(gp_num_colors>>=1)++gp_num_colors_pow2;gp_num_colors=1<<gp_num_colors_pow2;--gp_num_colors_pow2;if(gopts.background!==undefined){background=gopts.background;if(background>=gp_num_colors)throw"Background index out of range.";if(background===0)throw"Background index explicitly passed as 0."}}buf[p++]=width&255;buf[p++]=width>>8&255;buf[p++]=height&255;buf[p++]=height>>8&255;buf[p++]=(global_palette!==null?128:0)|gp_num_colors_pow2;buf[p++]=background;buf[p++]=0;if(global_palette!==null){for(var i=0,il=global_palette.length;i<il;++i){var rgb=global_palette[i];buf[p++]=rgb>>16&255;buf[p++]=rgb>>8&255;buf[p++]=rgb&255}}if(loop_count!==null){if(loop_count<0||loop_count>65535)throw"Loop count invalid.";buf[p++]=33;buf[p++]=255;buf[p++]=11;buf[p++]=78;buf[p++]=69;buf[p++]=84;buf[p++]=83;buf[p++]=67;buf[p++]=65;buf[p++]=80;buf[p++]=69;buf[p++]=50;buf[p++]=46;buf[p++]=48;buf[p++]=3;buf[p++]=1;buf[p++]=loop_count&255;buf[p++]=loop_count>>8&255;buf[p++]=0}var ended=false;this.addFrame=function(x,y,w,h,indexed_pixels,opts){if(ended===true){--p;ended=false}opts=opts===undefined?{}:opts;if(x<0||y<0||x>65535||y>65535)throw"x/y invalid.";if(w<=0||h<=0||w>65535||h>65535)throw"Width/Height invalid.";if(indexed_pixels.length<w*h)throw"Not enough pixels for the frame size.";var using_local_palette=true;var palette=opts.palette;if(palette===undefined||palette===null){using_local_palette=false;palette=global_palette}if(palette===undefined||palette===null)throw"Must supply either a local or global palette.";var num_colors=check_palette_and_num_colors(palette);var min_code_size=0;while(num_colors>>=1)++min_code_size;num_colors=1<<min_code_size;var delay=opts.delay===undefined?0:opts.delay;var disposal=opts.disposal===undefined?0:opts.disposal;if(disposal<0||disposal>3)throw"Disposal out of range.";var use_transparency=false;var transparent_index=0;if(opts.transparent!==undefined&&opts.transparent!==null){use_transparency=true;transparent_index=opts.transparent;if(transparent_index<0||transparent_index>=num_colors)throw"Transparent color index."}if(disposal!==0||use_transparency||delay!==0){buf[p++]=33;buf[p++]=249;buf[p++]=4;buf[p++]=disposal<<2|(use_transparency===true?1:0);buf[p++]=delay&255;buf[p++]=delay>>8&255;buf[p++]=transparent_index;buf[p++]=0}buf[p++]=44;buf[p++]=x&255;buf[p++]=x>>8&255;buf[p++]=y&255;buf[p++]=y>>8&255;buf[p++]=w&255;buf[p++]=w>>8&255;buf[p++]=h&255;buf[p++]=h>>8&255;buf[p++]=using_local_palette===true?128|min_code_size-1:0;if(using_local_palette===true){for(var i=0,il=palette.length;i<il;++i){var rgb=palette[i];buf[p++]=rgb>>16&255;buf[p++]=rgb>>8&255;buf[p++]=rgb&255}}p=GifWriterOutputLZWCodeStream(buf,p,min_code_size<2?2:min_code_size,indexed_pixels)};this.end=function(){if(ended===false){buf[p++]=59;ended=true}return p}}function GifWriterOutputLZWCodeStream(buf,p,min_code_size,index_stream){buf[p++]=min_code_size;var cur_subblock=p++;var clear_code=1<<min_code_size;var code_mask=clear_code-1;var eoi_code=clear_code+1;var next_code=eoi_code+1;var cur_code_size=min_code_size+1;var cur_shift=0;var cur=0;function emit_bytes_to_buffer(bit_block_size){while(cur_shift>=bit_block_size){buf[p++]=cur&255;cur>>=8;cur_shift-=8;if(p===cur_subblock+256){buf[cur_subblock]=255;cur_subblock=p++}}}function emit_code(c){cur|=c<<cur_shift;cur_shift+=cur_code_size;emit_bytes_to_buffer(8)}var ib_code=index_stream[0]&code_mask;var code_table={};emit_code(clear_code);for(var i=1,il=index_stream.length;i<il;++i){var k=index_stream[i]&code_mask;var cur_key=ib_code<<8|k;var cur_code=code_table[cur_key];if(cur_code===undefined){cur|=ib_code<<cur_shift;cur_shift+=cur_code_size;while(cur_shift>=8){buf[p++]=cur&255;cur>>=8;cur_shift-=8;if(p===cur_subblock+256){buf[cur_subblock]=255;cur_subblock=p++}}if(next_code===4096){emit_code(clear_code);next_code=eoi_code+1;cur_code_size=min_code_size+1;code_table={}}else{if(next_code>=1<<cur_code_size)++cur_code_size;code_table[cur_key]=next_code++}ib_code=k}else{ib_code=cur_code}}emit_code(ib_code);emit_code(eoi_code);emit_bytes_to_buffer(1);if(cur_subblock+1===p){buf[cur_subblock]=0}else{buf[cur_subblock]=p-cur_subblock-1;buf[p++]=0}return p}function GifReader(buf){var p=0;if(buf[p++]!==71||buf[p++]!==73||buf[p++]!==70||buf[p++]!==56||(buf[p++]+1&253)!==56||buf[p++]!==97){throw"Invalid GIF 87a/89a header."}var width=buf[p++]|buf[p++]<<8;var height=buf[p++]|buf[p++]<<8;var pf0=buf[p++];var global_palette_flag=pf0>>7;var num_global_colors_pow2=pf0&7;var num_global_colors=1<<num_global_colors_pow2+1;var background=buf[p++];buf[p++];var global_palette_offset=null;if(global_palette_flag){global_palette_offset=p;p+=num_global_colors*3}var no_eof=true;var frames=[];var delay=0;var transparent_index=null;var disposal=0;var loop_count=null;this.width=width;this.height=height;while(no_eof&&p<buf.length){switch(buf[p++]){case 33:switch(buf[p++]){case 255:if(buf[p]!==11||buf[p+1]==78&&buf[p+2]==69&&buf[p+3]==84&&buf[p+4]==83&&buf[p+5]==67&&buf[p+6]==65&&buf[p+7]==80&&buf[p+8]==69&&buf[p+9]==50&&buf[p+10]==46&&buf[p+11]==48&&buf[p+12]==3&&buf[p+13]==1&&buf[p+16]==0){p+=14;loop_count=buf[p++]|buf[p++]<<8;p++}else{p+=12;while(true){var block_size=buf[p++];if(block_size===0)break;p+=block_size}}break;case 249:if(buf[p++]!==4||buf[p+4]!==0)throw"Invalid graphics extension block.";var pf1=buf[p++];delay=buf[p++]|buf[p++]<<8;transparent_index=buf[p++];if((pf1&1)===0)transparent_index=null;disposal=pf1>>2&7;p++;break;case 254:while(true){var block_size=buf[p++];if(block_size===0)break;p+=block_size}break;default:throw"Unknown graphic control label: 0x"+buf[p-1].toString(16)}break;case 44:var x=buf[p++]|buf[p++]<<8;var y=buf[p++]|buf[p++]<<8;var w=buf[p++]|buf[p++]<<8;var h=buf[p++]|buf[p++]<<8;var pf2=buf[p++];var local_palette_flag=pf2>>7;var interlace_flag=pf2>>6&1;var num_local_colors_pow2=pf2&7;var num_local_colors=1<<num_local_colors_pow2+1;var palette_offset=global_palette_offset;var has_local_palette=false;if(local_palette_flag){var has_local_palette=true;palette_offset=p;p+=num_local_colors*3}var data_offset=p;p++;while(true){var block_size=buf[p++];if(block_size===0)break;p+=block_size}frames.push({x:x,y:y,width:w,height:h,has_local_palette:has_local_palette,palette_offset:palette_offset,data_offset:data_offset,data_length:p-data_offset,transparent_index:transparent_index,interlaced:!!interlace_flag,delay:delay,disposal:disposal});break;case 59:no_eof=false;break;default:throw"Unknown gif block: 0x"+buf[p-1].toString(16);break}}this.numFrames=function(){return frames.length};this.loopCount=function(){return loop_count};this.frameInfo=function(frame_num){if(frame_num<0||frame_num>=frames.length)throw"Frame index out of range.";return frames[frame_num]};this.decodeAndBlitFrameBGRA=function(frame_num,pixels){var frame=this.frameInfo(frame_num);var num_pixels=frame.width*frame.height;var index_stream=new Uint8Array(num_pixels);GifReaderLZWOutputIndexStream(buf,frame.data_offset,index_stream,num_pixels);var palette_offset=frame.palette_offset;var trans=frame.transparent_index;if(trans===null)trans=256;var framewidth=frame.width;var framestride=width-framewidth;var xleft=framewidth;var opbeg=(frame.y*width+frame.x)*4;var opend=((frame.y+frame.height)*width+frame.x)*4;var op=opbeg;var scanstride=framestride*4;if(frame.interlaced===true){scanstride+=width*4*7}var interlaceskip=8;for(var i=0,il=index_stream.length;i<il;++i){var index=index_stream[i];if(xleft===0){op+=scanstride;xleft=framewidth;if(op>=opend){scanstride=framestride*4+width*4*(interlaceskip-1);op=opbeg+(framewidth+framestride)*(interlaceskip<<1);interlaceskip>>=1}}if(index===trans){op+=4}else{var r=buf[palette_offset+index*3];var g=buf[palette_offset+index*3+1];var b=buf[palette_offset+index*3+2];pixels[op++]=b;pixels[op++]=g;pixels[op++]=r;pixels[op++]=255}--xleft}};this.decodeAndBlitFrameRGBA=function(frame_num,pixels){var frame=this.frameInfo(frame_num);var num_pixels=frame.width*frame.height;var index_stream=new Uint8Array(num_pixels);GifReaderLZWOutputIndexStream(buf,frame.data_offset,index_stream,num_pixels);var palette_offset=frame.palette_offset;var trans=frame.transparent_index;if(trans===null)trans=256;var framewidth=frame.width;var framestride=width-framewidth;var xleft=framewidth;var opbeg=(frame.y*width+frame.x)*4;var opend=((frame.y+frame.height)*width+frame.x)*4;var op=opbeg;var scanstride=framestride*4;if(frame.interlaced===true){scanstride+=width*4*7}var interlaceskip=8;for(var i=0,il=index_stream.length;i<il;++i){var index=index_stream[i];if(xleft===0){op+=scanstride;xleft=framewidth;if(op>=opend){scanstride=framestride*4+width*4*(interlaceskip-1);op=opbeg+(framewidth+framestride)*(interlaceskip<<1);interlaceskip>>=1}}if(index===trans){op+=4}else{var r=buf[palette_offset+index*3];var g=buf[palette_offset+index*3+1];var b=buf[palette_offset+index*3+2];pixels[op++]=r;pixels[op++]=g;pixels[op++]=b;pixels[op++]=255}--xleft}}}function GifReaderLZWOutputIndexStream(code_stream,p,output,output_length){var min_code_size=code_stream[p++];var clear_code=1<<min_code_size;var eoi_code=clear_code+1;var next_code=eoi_code+1;var cur_code_size=min_code_size+1;var code_mask=(1<<cur_code_size)-1;var cur_shift=0;var cur=0;var op=0;var subblock_size=code_stream[p++];var code_table=new Int32Array(4096);var prev_code=null;while(true){while(cur_shift<16){if(subblock_size===0)break;cur|=code_stream[p++]<<cur_shift;cur_shift+=8;if(subblock_size===1){subblock_size=code_stream[p++]}else{--subblock_size}}if(cur_shift<cur_code_size)break;var code=cur&code_mask;cur>>=cur_code_size;cur_shift-=cur_code_size;if(code===clear_code){next_code=eoi_code+1;cur_code_size=min_code_size+1;code_mask=(1<<cur_code_size)-1;prev_code=null;continue}else if(code===eoi_code){break}var chase_code=code<next_code?code:prev_code;var chase_length=0;var chase=chase_code;while(chase>clear_code){chase=code_table[chase]>>8;++chase_length}var k=chase;var op_end=op+chase_length+(chase_code!==code?1:0);if(op_end>output_length){console.log("Warning, gif stream longer than expected.");return}output[op++]=k;op+=chase_length;var b=op;if(chase_code!==code)output[op++]=k;chase=chase_code;while(chase_length--){chase=code_table[chase];output[--b]=chase&255;chase>>=8}if(prev_code!==null&&next_code<4096){code_table[next_code++]=prev_code<<8|k;if(next_code>=code_mask+1&&cur_code_size<12){++cur_code_size;code_mask=code_mask<<1|1}}prev_code=code}if(op!==output_length){console.log("Warning, gif stream shorter than expected.")}return output}try{exports.GifWriter=GifWriter;exports.GifReader=GifReader}catch(e){}},{}],39:[function(require,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";function _has(obj,key){return Object.prototype.hasOwnProperty.call(obj,key)}exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(_has(source,p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){var i,l,len,pos,chunk,result;len=0;for(i=0,l=chunks.length;i<l;i++){len+=chunks[i].length}result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length}return result}};var fnUntyped={arraySet:function(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){return[].concat.apply([],chunks)}};exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped)}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped)}};exports.setTyped(TYPED_OK)},{}],40:[function(require,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],41:[function(require,module,exports){"use strict";module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],42:[function(require,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc^=-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],43:[function(require,module,exports){"use strict";var utils=require("../utils/common");var trees=require("./trees");var adler32=require("./adler32");var crc32=require("./crc32");var msg=require("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scan<strend);len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask;while(s.insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH){break}}}}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0)}function deflate_stored(s,flush){var max_block_size=65535;if(max_block_size>s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}if(hash_head!==0&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head)}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}while(--s.match_length!==0);s.strstart++}else{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask}}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_slow(s,flush){var hash_head;var bflush;var max_insert;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}s.prev_length=s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}else if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush){flush_block_only(s,false)}s.strstart++;s.lookahead--;if(s.strm.avail_out===0){return BS_NEED_MORE}}else{s.match_available=1;s.strstart++;s.lookahead--}}if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_rle(s,flush){var bflush;var prev;var scan,strend;var _win=s.window;for(;;){if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function Config(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func}var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);s.lit_bufsize=1<<memLevel+6;s.pending_buf_size=s.lit_bufsize*4;s.pending_buf=new utils.Buf8(s.pending_buf_size);s.d_buf=1*s.lit_bufsize;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.name.length){val=s.gzhead.name.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.comment.length){val=s.gzhead.comment.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}function deflateSetDictionary(strm,dictionary){var dictLength=dictionary.length;var s;var str,n;var wrap;var avail;var next;var input;var tmpDict;if(!strm||!strm.state){return Z_STREAM_ERROR}s=strm.state;wrap=s.wrap;if(wrap===2||wrap===1&&s.status!==INIT_STATE||s.lookahead){return Z_STREAM_ERROR}if(wrap===1){strm.adler=adler32(strm.adler,dictionary,dictLength,0)}s.wrap=0;if(dictLength>=s.w_size){if(wrap===0){zero(s.head);s.strstart=0;s.block_start=0;s.insert=0}tmpDict=new utils.Buf8(s.w_size);utils.arraySet(tmpDict,dictionary,dictLength-s.w_size,s.w_size,0);dictionary=tmpDict;dictLength=s.w_size}avail=strm.avail_in;next=strm.next_in;input=strm.input;strm.avail_in=dictLength;strm.next_in=0;strm.input=dictionary;fill_window(s);while(s.lookahead>=MIN_MATCH){str=s.strstart;n=s.lookahead-(MIN_MATCH-1);do{s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++}while(--n);s.strstart=str;s.lookahead=MIN_MATCH-1;fill_window(s)}s.strstart+=s.lookahead;s.block_start=s.strstart;s.insert=s.lookahead;s.lookahead=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;strm.next_in=next;strm.input=input;strm.avail_in=avail;s.wrap=wrap;return Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateSetDictionary=deflateSetDictionary;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":39,"./adler32":40,"./crc32":42,"./messages":47,"./trees":48}],44:[function(require,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var s_window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;s_window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<<state.lenbits)-1;dmask=(1<<state.distbits)-1;top:do{if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=lcode[hold&lmask];dolen:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits<op){hold+=input[_in++]<<bits;bits+=8}len+=hold&(1<<op)-1;hold>>>=op;bits-=op}if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=dcode[hold&dmask];dodist:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bits<op){hold+=input[_in++]<<bits;bits+=8;if(bits<op){hold+=input[_in++]<<bits;bits+=8}}dist+=hold&(1<<op)-1;if(dist>dmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=s_window;if(wnext===0){from+=wsize-op;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}else if(wnext<op){from+=wsize+wnext-op;op-=wnext;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=0;if(wnext<len){op=wnext;len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}}else{from+=wnext-op;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}while(len>2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<<op)-1)];continue dodist}else{strm.msg="invalid distance code";state.mode=BAD;break top}break}}else if((op&64)===0){here=lcode[(here&65535)+(hold&(1<<op)-1)];continue dolen}else if(op&32){state.mode=TYPE;break top}else{strm.msg="invalid literal/length code";state.mode=BAD;break top}break}}while(_in<last&&_out<end);len=bits>>3;_in-=len;bits-=len<<3;hold&=(1<<bits)-1;strm.next_in=_in;strm.next_out=_out;strm.avail_in=_in<last?5+(last-_in):5-(_in-last);strm.avail_out=_out<end?257+(end-_out):257-(_out-end);state.hold=hold;state.bits=bits;return}},{}],45:[function(require,module,exports){"use strict";var utils=require("../utils/common");var adler32=require("./adler32");var crc32=require("./crc32");var inflate_fast=require("./inffast");var inflate_table=require("./inftrees");var CODES=0;var LENS=1;var DISTS=2;var Z_FINISH=4;var Z_BLOCK=5;var Z_TREES=6;var Z_OK=0;var Z_STREAM_END=1;var Z_NEED_DICT=2;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_MEM_ERROR=-4;var Z_BUF_ERROR=-5;var Z_DEFLATED=8;var HEAD=1;var FLAGS=2;var TIME=3;var OS=4;var EXLEN=5;var EXTRA=6;var NAME=7;var COMMENT=8;var HCRC=9;var DICTID=10;var DICT=11;var TYPE=12;var TYPEDO=13;var STORED=14;var COPY_=15;var COPY=16;var TABLE=17;var LENLENS=18;var CODELENS=19;var LEN_=20;var LEN=21;var LENEXT=22;var DIST=23;var DISTEXT=24;var MATCH=25;var LIT=26;var CHECK=27;var LENGTH=28;var DONE=29;var BAD=30;var MEM=31;var SYNC=32;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var MAX_WBITS=15;var DEF_WBITS=MAX_WBITS;function zswap32(q){return(q>>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<<state.wbits;state.wnext=0;state.whave=0;state.window=new utils.Buf8(state.wsize)}if(copy>=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave<state.wsize){state.whave+=dist}}}return 0}function inflate(strm,flush){var state;var input,output;var next;var put;var have,left;var hold;var bits;var _in,_out;var copy;var from;var from_source;var here=0;var here_bits,here_op,here_val;var last_bits,last_op,last_val;var len;var ret;var hbuf=new utils.Buf8(4);var opts;var n;var order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!strm||!strm.state||!strm.output||!strm.input&&strm.avail_in!==0){return Z_STREAM_ERROR}state=strm.state;if(state.mode===TYPE){state.mode=TYPEDO}put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;_in=have;_out=left;ret=Z_OK;inf_leave:for(;;){switch(state.mode){case HEAD:if(state.wrap===0){state.mode=TYPEDO;break}while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.wrap&2&&hold===35615){state.check=0;hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<<len;strm.adler=state.check=1;state.mode=hold&512?DICTID:TYPE;hold=0;bits=0;break;case FLAGS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.flags=hold;if((state.flags&255)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}if(state.flags&57344){strm.msg="unknown header flags set";state.mode=BAD;break}if(state.head){state.head.text=hold>>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.time=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.xflags=hold&255;state.head.os=hold>>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length=hold;if(state.head){state.head.extra_len=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.name=null}state.length=0;state.mode=COMMENT;case COMMENT:if(state.flags&4096){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.comment+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.comment=null}state.mode=HCRC;case HCRC:if(state.flags&512){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.check&65535)){strm.msg="header crc mismatch";state.mode=BAD;break}hold=0;bits=0}if(state.head){state.head.hcrc=state.flags>>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}strm.adler=state.check=zswap32(hold);hold=0;bits=0;state.mode=DICT;case DICT:if(state.havedict===0){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;return Z_NEED_DICT}strm.adler=state.check=1;state.mode=TYPE;case TYPE:if(flush===Z_BLOCK||flush===Z_TREES){break inf_leave}case TYPEDO:if(state.last){hold>>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.last=hold&1;hold>>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((hold&65535)!==(hold>>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave}case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.nlen=(hold&31)+257;hold>>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have<state.ncode){while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.lens[order[state.have++]]=hold&7;hold>>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have<state.nlen+state.ndist){for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_val<16){hold>>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave}case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_op&&(here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.lencode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<<state.distbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.distcode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.offset+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<<bits;bits+=8}_out-=left;strm.total_out+=_out;state.total+=_out;if(_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,put-_out):adler32(state.check,output,_out,put-_out)}_out=left;if((state.flags?hold:zswap32(hold))!==state.check){strm.msg="incorrect data check";state.mode=BAD;break}hold=0;bits=0}state.mode=LENGTH;case LENGTH:if(state.wrap&&state.flags){while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.total&4294967295)){strm.msg="incorrect length check";state.mode=BAD;break}hold=0;bits=0}state.mode=DONE;case DONE:ret=Z_STREAM_END;break inf_leave;case BAD:ret=Z_DATA_ERROR;break inf_leave;case MEM:return Z_MEM_ERROR;case SYNC:default:return Z_STREAM_ERROR}}strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;if(state.wsize||_out!==strm.avail_out&&state.mode<BAD&&(state.mode<CHECK||flush!==Z_FINISH)){if(updatewindow(strm,strm.output,strm.next_out,_out-strm.avail_out)){state.mode=MEM;return Z_MEM_ERROR}}_in-=strm.avail_in;_out-=strm.avail_out;strm.total_in+=_in;strm.total_out+=_out;state.total+=_out;if(state.wrap&&_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,strm.next_out-_out):adler32(state.check,output,_out,strm.next_out-_out)}strm.data_type=state.bits+(state.last?64:0)+(state.mode===TYPE?128:0)+(state.mode===LEN_||state.mode===COPY_?256:0);if((_in===0&&_out===0||flush===Z_FINISH)&&ret===Z_OK){ret=Z_BUF_ERROR}return ret}function inflateEnd(strm){if(!strm||!strm.state){return Z_STREAM_ERROR}var state=strm.state;if(state.window){state.window=null}strm.state=null;return Z_OK}function inflateGetHeader(strm,head){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if((state.wrap&2)===0){return Z_STREAM_ERROR}state.head=head;head.done=false;return Z_OK}function inflateSetDictionary(strm,dictionary){var dictLength=dictionary.length;var state;var dictid;var ret;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(state.wrap!==0&&state.mode!==DICT){return Z_STREAM_ERROR}if(state.mode===DICT){dictid=1;dictid=adler32(dictid,dictionary,dictLength,0);if(dictid!==state.check){return Z_DATA_ERROR}}ret=updatewindow(strm,dictionary,dictLength,dictLength);if(ret){state.mode=MEM;return Z_MEM_ERROR}state.havedict=1;return Z_OK}exports.inflateReset=inflateReset;exports.inflateReset2=inflateReset2;exports.inflateResetKeep=inflateResetKeep;exports.inflateInit=inflateInit;exports.inflateInit2=inflateInit2;exports.inflate=inflate;exports.inflateEnd=inflateEnd;exports.inflateGetHeader=inflateGetHeader;exports.inflateSetDictionary=inflateSetDictionary;exports.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":39,"./adler32":40,"./crc32":42,"./inffast":44,"./inftrees":46}],46:[function(require,module,exports){"use strict";var utils=require("../utils/common");var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var CODES=0;var LENS=1;var DISTS=2;var lbase=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var lext=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var dext=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;var len=0;var sym=0;var min=0,max=0;var root=0;var curr=0;var drop=0;var left=0;var used=0;var huff=0;var incr;var fill;var low;var mask;var next;var base=null;var base_index=0;var end;var count=new utils.Buf16(MAXBITS+1);var offs=new utils.Buf16(MAXBITS+1);var extra=null;var extra_index=0;var here_bits,here_op,here_val;for(len=0;len<=MAXBITS;len++){count[len]=0}for(sym=0;sym<codes;sym++){count[lens[lens_index+sym]]++}root=bits;for(max=MAXBITS;max>=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min<max;min++){if(count[min]!==0){break}}if(root<min){root=min}left=1;for(len=1;len<=MAXBITS;len++){left<<=1;left-=count[len];if(left<0){return-1}}if(left>0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;len<MAXBITS;len++){offs[len+1]=offs[len]+count[len]}for(sym=0;sym<codes;sym++){if(lens[lens_index+sym]!==0){work[offs[lens[lens_index+sym]]++]=sym}}if(type===CODES){base=extra=work;end=19}else if(type===LENS){base=lbase;base_index-=257;extra=lext;extra_index-=257;end=256}else{base=dbase;extra=dext;end=-1}huff=0;sym=0;len=min;next=table_index;curr=root;drop=0;low=-1;used=1<<root;mask=used-1;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}for(;;){here_bits=len-drop;if(work[sym]<end){here_op=0;here_val=work[sym]}else if(work[sym]>end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<<len-drop;fill=1<<curr;min=fill;do{fill-=incr;table[next+(huff>>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<<len-1;while(huff&incr){incr>>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<<curr;while(curr+drop<max){left-=count[curr+drop];if(left<=0){break}curr++;left<<=1}used+=1<<curr;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":39}],47:[function(require,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],48:[function(require,module,exports){"use strict";var utils=require("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);function StaticTreeDesc(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length}var static_l_desc;var static_d_desc;var static_bl_desc;function TreeDesc(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc}function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&65535;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<<s.bi_valid&65535;s.bi_valid+=length}}function send_code(s,c,tree){send_bits(s,tree[c*2],tree[c*2+1])}function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]*2+1]+1;if(bits>max_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++){_length_code[length++]=code}}_length_code[length-1]=code;dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++){_dist_code[dist++]=code}}dist>>=7;for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]-7;n++){_dist_code[256+dist++]=code}}for(bits=0;bits<=MAX_BITS;bits++){bl_count[bits]=0}n=0;while(n<=143){static_ltree[n*2+1]=8;n++;bl_count[8]++}while(n<=255){static_ltree[n*2+1]=9;n++;bl_count[9]++}while(n<=279){static_ltree[n*2+1]=7;n++;bl_count[7]++}while(n<=287){static_ltree[n*2+1]=8;n++;bl_count[8]++}gen_codes(static_ltree,L_CODES+1,bl_count);for(n=0;n<D_CODES;n++){static_dtree[n*2+1]=5;static_dtree[n*2]=bi_reverse(n,5)}static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES,MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS)}function init_block(s){var n;for(n=0;n<L_CODES;n++){s.dyn_ltree[n*2]=0}for(n=0;n<D_CODES;n++){s.dyn_dtree[n*2]=0}for(n=0;n<BL_CODES;n++){s.bl_tree[n*2]=0}s.dyn_ltree[END_BLOCK*2]=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0}function bi_windup(s){if(s.bi_valid>8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]<tree[_m2]||tree[_n2]===tree[_m2]&&depth[n]<=depth[m]}function pqdownheap(s,tree,k){var v=s.heap[k];var j=k<<1;while(j<=s.heap_len){if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth)){j++}if(smaller(tree,v,s.heap[j],s.depth)){break}s.heap[k]=s.heap[j];k=j;j<<=1}s.heap[k]=v}function compress_block(s,ltree,dtree){var dist;var lc;var lx=0;var code;var extra;if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0){send_code(s,lc,ltree)}else{code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra)}dist--;code=d_code(dist);send_code(s,code,dtree);extra=extra_dbits[code];if(extra!==0){dist-=base_dist[code];send_bits(s,dist,extra)}}}while(lx<s.last_lit)}send_code(s,END_BLOCK,ltree)}function build_tree(s,desc){var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;var max_code=-1;var node;s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++){if(tree[n*2]!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0}else{tree[n*2+1]=0}}while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node*2]=1;s.depth[node]=0;s.opt_len--;if(has_stree){s.static_len-=stree[node*2+1]}}desc.max_code=max_code;for(n=s.heap_len>>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){s.bl_tree[curlen*2]+=count}else if(curlen!==0){if(curlen!==prevlen){s.bl_tree[curlen*2]++}s.bl_tree[REP_3_6*2]++}else if(count<=10){s.bl_tree[REPZ_3_10*2]++}else{s.bl_tree[REPZ_11_138*2]++}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function send_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){do{send_code(s,curlen,s.bl_tree)}while(--count!==0)}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--}send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2)}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3)}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7)}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function build_bl_tree(s){var max_blindex;scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);build_tree(s,s.bl_desc);for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank<blcodes;rank++){send_bits(s,s.bl_tree[bl_order[rank]*2+1],3)}send_tree(s,s.dyn_ltree,lcodes-1);send_tree(s,s.dyn_dtree,dcodes-1)}function detect_data_type(s){var black_mask=4093624447;var n;for(n=0;n<=31;n++,black_mask>>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n<LITERALS;n++){if(s.dyn_ltree[n*2]!==0){return Z_TEXT}}return Z_BINARY}var static_init_done=false;function _tr_init(s){if(!static_init_done){tr_static_init();static_init_done=true}s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc);s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;init_block(s)}function _tr_stored_block(s,buf,stored_len,last){send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);copy_block(s,buf,stored_len,true)}function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s)}function _tr_flush_block(s,buf,stored_len,last){var opt_lenb,static_lenb;var max_blindex=0;if(s.level>0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":39}],49:[function(require,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}],50:[function(require,module,exports){(function(process){function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")};exports.sep="/";exports.delimiter=":";exports.dirname=function(path){var result=splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir};exports.basename=function(path,ext){var f=splitPath(path)[2];if(ext&&f.substr(-1*ext.length)===ext){f=f.substr(0,f.length-ext.length)}return f};exports.extname=function(path){return splitPath(path)[3]};function filter(xs,f){if(xs.filter)return xs.filter(f);var res=[];for(var i=0;i<xs.length;i++){if(f(xs[i],i,xs))res.push(xs[i])}return res}var substr="ab".substr(-1)==="b"?function(str,start,len){return str.substr(start,len)}:function(str,start,len){if(start<0)start=str.length+start;return str.substr(start,len)}}).call(this,require("_process"))},{_process:73}],51:[function(require,module,exports){(function(Buffer){"use strict";var interlaceUtils=require("./interlace");var pixelBppMap={1:{0:0,1:0,2:0,3:255},2:{0:0,1:0,2:0,3:1},3:{0:0,1:1,2:2,3:255},4:{0:0,1:1,2:2,3:3}};function bitRetriever(data,depth){var leftOver=[];var i=0;function split(){if(i===data.length){throw new Error("Ran out of data")}var byte=data[i];i++;var byte8,byte7,byte6,byte5,byte4,byte3,byte2,byte1;switch(depth){default:throw new Error("unrecognised depth");case 16:byte2=data[i];i++;leftOver.push((byte<<8)+byte2);break;case 4:byte2=byte&15;byte1=byte>>4;leftOver.push(byte1,byte2);break;case 2:byte4=byte&3;byte3=byte>>2&3;byte2=byte>>4&3;byte1=byte>>6&3;leftOver.push(byte1,byte2,byte3,byte4);break;case 1:byte8=byte&1;byte7=byte>>1&1;byte6=byte>>2&1;byte5=byte>>3&1;byte4=byte>>4&1;byte3=byte>>5&1;byte2=byte>>6&1;byte1=byte>>7&1;leftOver.push(byte1,byte2,byte3,byte4,byte5,byte6,byte7,byte8);break}}return{get:function(count){while(leftOver.length<count){split()}var returner=leftOver.slice(0,count);leftOver=leftOver.slice(count);return returner},resetAfterLine:function(){leftOver.length=0},end:function(){if(i!==data.length){throw new Error("extra data found")}}}}function mapImage8Bit(image,pxData,getPxPos,bpp,data,rawPos){var imageWidth=image.width;var imageHeight=image.height;var imagePass=image.index;for(var y=0;y<imageHeight;y++){for(var x=0;x<imageWidth;x++){var pxPos=getPxPos(x,y,imagePass);for(var i=0;i<4;i++){var idx=pixelBppMap[bpp][i];if(i===data.length){throw new Error("Ran out of data")}pxData[pxPos+i]=idx!==255?data[idx+rawPos]:255}rawPos+=bpp}}return rawPos}function mapImageCustomBit(image,pxData,getPxPos,bpp,bits,maxBit){var imageWidth=image.width;var imageHeight=image.height;var imagePass=image.index;for(var y=0;y<imageHeight;y++){for(var x=0;x<imageWidth;x++){var pixelData=bits.get(bpp);var pxPos=getPxPos(x,y,imagePass);for(var i=0;i<4;i++){var idx=pixelBppMap[bpp][i];pxData[pxPos+i]=idx!==255?pixelData[idx]:maxBit}}bits.resetAfterLine()}}exports.dataToBitMap=function(data,bitmapInfo){var width=bitmapInfo.width;var height=bitmapInfo.height;var depth=bitmapInfo.depth;var bpp=bitmapInfo.bpp;var interlace=bitmapInfo.interlace;if(depth!==8){var bits=bitRetriever(data,depth)}var pxData;if(depth<=8){pxData=new Buffer(width*height*4)}else{pxData=new Uint16Array(width*height*4)}var maxBit=Math.pow(2,depth)-1;var rawPos=0;var images;var getPxPos;if(interlace){images=interlaceUtils.getImagePasses(width,height);getPxPos=interlaceUtils.getInterlaceIterator(width,height)}else{var nonInterlacedPxPos=0;getPxPos=function(){var returner=nonInterlacedPxPos;nonInterlacedPxPos+=4;return returner};images=[{width:width,height:height}]}for(var imageIndex=0;imageIndex<images.length;imageIndex++){if(depth===8){rawPos=mapImage8Bit(images[imageIndex],pxData,getPxPos,bpp,data,rawPos)}else{mapImageCustomBit(images[imageIndex],pxData,getPxPos,bpp,bits,maxBit)}}if(depth===8){if(rawPos!==data.length){throw new Error("extra data found")}}else{bits.end()}return pxData}}).call(this,require("buffer").Buffer)},{"./interlace":61,buffer:7}],52:[function(require,module,exports){(function(Buffer){"use strict";var constants=require("./constants");module.exports=function(data,width,height,options){var outHasAlpha=options.colorType===constants.COLORTYPE_COLOR_ALPHA;if(options.inputHasAlpha&&outHasAlpha){return data}if(!options.inputHasAlpha&&!outHasAlpha){return data}var outBpp=outHasAlpha?4:3;var outData=new Buffer(width*height*outBpp);var inBpp=options.inputHasAlpha?4:3;var inIndex=0;var outIndex=0;var bgColor=options.bgColor||{};if(bgColor.red===undefined){bgColor.red=255}if(bgColor.green===undefined){bgColor.green=255}if(bgColor.blue===undefined){bgColor.blue=255}for(var y=0;y<height;y++){for(var x=0;x<width;x++){var red=data[inIndex];var green=data[inIndex+1];var blue=data[inIndex+2];var alpha;if(options.inputHasAlpha){alpha=data[inIndex+3];if(!outHasAlpha){alpha/=255;red=Math.min(Math.max(Math.round((1-alpha)*bgColor.red+alpha*red),0),255);green=Math.min(Math.max(Math.round((1-alpha)*bgColor.green+alpha*green),0),255);blue=Math.min(Math.max(Math.round((1-alpha)*bgColor.blue+alpha*blue),0),255)}}else{alpha=255}outData[outIndex]=red;outData[outIndex+1]=green;outData[outIndex+2]=blue;if(outHasAlpha){outData[outIndex+3]=alpha}inIndex+=inBpp;outIndex+=outBpp}}return outData}}).call(this,require("buffer").Buffer)},{"./constants":54,buffer:7}],53:[function(require,module,exports){(function(process,Buffer){"use strict";var util=require("util");var Stream=require("stream");var ChunkStream=module.exports=function(){Stream.call(this);this._buffers=[];this._buffered=0;this._reads=[];this._paused=false;this._encoding="utf8";this.writable=true};util.inherits(ChunkStream,Stream);ChunkStream.prototype.read=function(length,callback){this._reads.push({length:Math.abs(length),allowLess:length<0,func:callback});process.nextTick(function(){this._process();if(this._paused&&this._reads.length>0){this._paused=false;this.emit("drain")}}.bind(this))};ChunkStream.prototype.write=function(data,encoding){if(!this.writable){this.emit("error",new Error("Stream not writable"));return false}var dataBuffer;if(Buffer.isBuffer(data)){dataBuffer=data}else{dataBuffer=new Buffer(data,encoding||this._encoding)}this._buffers.push(dataBuffer);this._buffered+=dataBuffer.length;this._process();if(this._reads&&this._reads.length===0){this._paused=true}return this.writable&&!this._paused};ChunkStream.prototype.end=function(data,encoding){if(data){this.write(data,encoding)}this.writable=false;if(!this._buffers){return}if(this._buffers.length===0){this._end()}else{this._buffers.push(null);this._process()}};ChunkStream.prototype.destroySoon=ChunkStream.prototype.end;ChunkStream.prototype._end=function(){if(this._reads.length>0){this.emit("error",new Error("There are some read requests waitng on finished stream"))}this.destroy()};ChunkStream.prototype.destroy=function(){if(!this._buffers){return}this.writable=false;this._reads=null;this._buffers=null;this.emit("close")};ChunkStream.prototype._processReadAllowingLess=function(read){this._reads.shift();var smallerBuf=this._buffers[0];if(smallerBuf.length>read.length){this._buffered-=read.length;this._buffers[0]=smallerBuf.slice(read.length);read.func.call(this,smallerBuf.slice(0,read.length))}else{this._buffered-=smallerBuf.length;this._buffers.shift();read.func.call(this,smallerBuf)}};ChunkStream.prototype._processRead=function(read){this._reads.shift();var pos=0;var count=0;var data=new Buffer(read.length);while(pos<read.length){var buf=this._buffers[count++];var len=Math.min(buf.length,read.length-pos);buf.copy(data,pos,0,len);pos+=len;if(len!==buf.length){this._buffers[--count]=buf.slice(len)}}if(count>0){this._buffers.splice(0,count)}this._buffered-=read.length;read.func.call(this,data)};ChunkStream.prototype._process=function(){try{while(this._buffered>0&&this._reads&&this._reads.length>0){var read=this._reads[0];if(read.allowLess){this._processReadAllowingLess(read)}else if(this._buffered>=read.length){this._processRead(read)}else{break}}if(this._buffers&&this._buffers.length>0&&this._buffers[0]===null){this._end()}}catch(ex){this.emit("error",ex)}}}).call(this,require("_process"),require("buffer").Buffer)},{_process:73,buffer:7,stream:82,util:104}],54:[function(require,module,exports){"use strict";module.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}},{}],55:[function(require,module,exports){"use strict";var crcTable=[];(function(){for(var i=0;i<256;i++){var currentCrc=i;for(var j=0;j<8;j++){if(currentCrc&1){currentCrc=3988292384^currentCrc>>>1}else{currentCrc=currentCrc>>>1}}crcTable[i]=currentCrc}})();var CrcCalculator=module.exports=function(){this._crc=-1};CrcCalculator.prototype.write=function(data){for(var i=0;i<data.length;i++){this._crc=crcTable[(this._crc^data[i])&255]^this._crc>>>8}return true};CrcCalculator.prototype.crc32=function(){return this._crc^-1};CrcCalculator.crc32=function(buf){var crc=-1;for(var i=0;i<buf.length;i++){crc=crcTable[(crc^buf[i])&255]^crc>>>8}return crc^-1}},{}],56:[function(require,module,exports){(function(Buffer){"use strict";var paethPredictor=require("./paeth-predictor");function filterNone(pxData,pxPos,byteWidth,rawData,rawPos){pxData.copy(rawData,rawPos,pxPos,pxPos+byteWidth)}function filterSumNone(pxData,pxPos,byteWidth){var sum=0;var length=pxPos+byteWidth;for(var i=pxPos;i<length;i++){sum+=Math.abs(pxData[i])}return sum}function filterSub(pxData,pxPos,byteWidth,rawData,rawPos,bpp){for(var x=0;x<byteWidth;x++){var left=x>=bpp?pxData[pxPos+x-bpp]:0;var val=pxData[pxPos+x]-left;rawData[rawPos+x]=val}}function filterSumSub(pxData,pxPos,byteWidth,bpp){var sum=0;for(var x=0;x<byteWidth;x++){var left=x>=bpp?pxData[pxPos+x-bpp]:0;var val=pxData[pxPos+x]-left;sum+=Math.abs(val)}return sum}function filterUp(pxData,pxPos,byteWidth,rawData,rawPos){for(var x=0;x<byteWidth;x++){var up=pxPos>0?pxData[pxPos+x-byteWidth]:0;var val=pxData[pxPos+x]-up;rawData[rawPos+x]=val}}function filterSumUp(pxData,pxPos,byteWidth){var sum=0;var length=pxPos+byteWidth;for(var x=pxPos;x<length;x++){var up=pxPos>0?pxData[x-byteWidth]:0;var val=pxData[x]-up;sum+=Math.abs(val)}return sum}function filterAvg(pxData,pxPos,byteWidth,rawData,rawPos,bpp){for(var x=0;x<byteWidth;x++){var left=x>=bpp?pxData[pxPos+x-bpp]:0;var up=pxPos>0?pxData[pxPos+x-byteWidth]:0;var val=pxData[pxPos+x]-(left+up>>1);rawData[rawPos+x]=val}}function filterSumAvg(pxData,pxPos,byteWidth,bpp){var sum=0;for(var x=0;x<byteWidth;x++){var left=x>=bpp?pxData[pxPos+x-bpp]:0;var up=pxPos>0?pxData[pxPos+x-byteWidth]:0;var val=pxData[pxPos+x]-(left+up>>1);sum+=Math.abs(val)}return sum}function filterPaeth(pxData,pxPos,byteWidth,rawData,rawPos,bpp){for(var x=0;x<byteWidth;x++){var left=x>=bpp?pxData[pxPos+x-bpp]:0;var up=pxPos>0?pxData[pxPos+x-byteWidth]:0;var upleft=pxPos>0&&x>=bpp?pxData[pxPos+x-(byteWidth+bpp)]:0;var val=pxData[pxPos+x]-paethPredictor(left,up,upleft);rawData[rawPos+x]=val}}function filterSumPaeth(pxData,pxPos,byteWidth,bpp){var sum=0;for(var x=0;x<byteWidth;x++){var left=x>=bpp?pxData[pxPos+x-bpp]:0;var up=pxPos>0?pxData[pxPos+x-byteWidth]:0;var upleft=pxPos>0&&x>=bpp?pxData[pxPos+x-(byteWidth+bpp)]:0;var val=pxData[pxPos+x]-paethPredictor(left,up,upleft);sum+=Math.abs(val)}return sum}var filters={0:filterNone,1:filterSub,2:filterUp,3:filterAvg,4:filterPaeth};var filterSums={0:filterSumNone,1:filterSumSub,2:filterSumUp,3:filterSumAvg,4:filterSumPaeth};module.exports=function(pxData,width,height,options,bpp){var filterTypes;if(!("filterType"in options)||options.filterType===-1){filterTypes=[0,1,2,3,4]}else if(typeof options.filterType==="number"){filterTypes=[options.filterType]}else{throw new Error("unrecognised filter types")}var byteWidth=width*bpp;var rawPos=0;var pxPos=0;var rawData=new Buffer((byteWidth+1)*height);var sel=filterTypes[0];for(var y=0;y<height;y++){if(filterTypes.length>1){var min=Infinity;for(var i=0;i<filterTypes.length;i++){var sum=filterSums[filterTypes[i]](pxData,pxPos,byteWidth,bpp);if(sum<min){sel=filterTypes[i];min=sum}}}rawData[rawPos]=sel;rawPos++;filters[sel](pxData,pxPos,byteWidth,rawData,rawPos,bpp);rawPos+=byteWidth;pxPos+=byteWidth}return rawData}}).call(this,require("buffer").Buffer)},{"./paeth-predictor":65,buffer:7}],57:[function(require,module,exports){(function(Buffer){"use strict";var util=require("util");var ChunkStream=require("./chunkstream");var Filter=require("./filter-parse");var FilterAsync=module.exports=function(bitmapInfo){ChunkStream.call(this);var buffers=[];var that=this;this._filter=new Filter(bitmapInfo,{read:this.read.bind(this),write:function(buffer){buffers.push(buffer)},complete:function(){that.emit("complete",Buffer.concat(buffers))}});this._filter.start()};util.inherits(FilterAsync,ChunkStream)}).call(this,require("buffer").Buffer)},{"./chunkstream":53,"./filter-parse":59,buffer:7,util:104}],58:[function(require,module,exports){(function(Buffer){"use strict";var SyncReader=require("./sync-reader");var Filter=require("./filter-parse");exports.process=function(inBuffer,bitmapInfo){var outBuffers=[];var reader=new SyncReader(inBuffer);var filter=new Filter(bitmapInfo,{read:reader.read.bind(reader),write:function(bufferPart){outBuffers.push(bufferPart)},complete:function(){}});filter.start();reader.process();return Buffer.concat(outBuffers)}}).call(this,require("buffer").Buffer)},{"./filter-parse":59,"./sync-reader":71,buffer:7}],59:[function(require,module,exports){(function(Buffer){"use strict";var interlaceUtils=require("./interlace");var paethPredictor=require("./paeth-predictor");function getByteWidth(width,bpp,depth){var byteWidth=width*bpp;if(depth!==8){byteWidth=Math.ceil(byteWidth/(8/depth))}return byteWidth}var Filter=module.exports=function(bitmapInfo,dependencies){var width=bitmapInfo.width;var height=bitmapInfo.height;var interlace=bitmapInfo.interlace;var bpp=bitmapInfo.bpp;var depth=bitmapInfo.depth;this.read=dependencies.read;this.write=dependencies.write;this.complete=dependencies.complete;this._imageIndex=0;this._images=[];if(interlace){var passes=interlaceUtils.getImagePasses(width,height);for(var i=0;i<passes.length;i++){this._images.push({byteWidth:getByteWidth(passes[i].width,bpp,depth),height:passes[i].height,lineIndex:0})}}else{this._images.push({byteWidth:getByteWidth(width,bpp,depth),height:height,lineIndex:0})}if(depth===8){this._xComparison=bpp}else if(depth===16){this._xComparison=bpp*2}else{this._xComparison=1}};Filter.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Filter.prototype._unFilterType1=function(rawData,unfilteredLine,byteWidth){var xComparison=this._xComparison;var xBiggerThan=xComparison-1;for(var x=0;x<byteWidth;x++){var rawByte=rawData[1+x];var f1Left=x>xBiggerThan?unfilteredLine[x-xComparison]:0;unfilteredLine[x]=rawByte+f1Left}};Filter.prototype._unFilterType2=function(rawData,unfilteredLine,byteWidth){var lastLine=this._lastLine;for(var x=0;x<byteWidth;x++){var rawByte=rawData[1+x];var f2Up=lastLine?lastLine[x]:0;unfilteredLine[x]=rawByte+f2Up}};Filter.prototype._unFilterType3=function(rawData,unfilteredLine,byteWidth){var xComparison=this._xComparison;var xBiggerThan=xComparison-1;var lastLine=this._lastLine;for(var x=0;x<byteWidth;x++){var rawByte=rawData[1+x];var f3Up=lastLine?lastLine[x]:0;var f3Left=x>xBiggerThan?unfilteredLine[x-xComparison]:0;var f3Add=Math.floor((f3Left+f3Up)/2);unfilteredLine[x]=rawByte+f3Add}};Filter.prototype._unFilterType4=function(rawData,unfilteredLine,byteWidth){var xComparison=this._xComparison;var xBiggerThan=xComparison-1;var lastLine=this._lastLine;for(var x=0;x<byteWidth;x++){var rawByte=rawData[1+x];var f4Up=lastLine?lastLine[x]:0;var f4Left=x>xBiggerThan?unfilteredLine[x-xComparison]:0;var f4UpLeft=x>xBiggerThan&&lastLine?lastLine[x-xComparison]:0;var f4Add=paethPredictor(f4Left,f4Up,f4UpLeft);unfilteredLine[x]=rawByte+f4Add}};Filter.prototype._reverseFilterLine=function(rawData){var filter=rawData[0];var unfilteredLine;var currentImage=this._images[this._imageIndex];var byteWidth=currentImage.byteWidth;if(filter===0){unfilteredLine=rawData.slice(1,byteWidth+1)}else{unfilteredLine=new Buffer(byteWidth);switch(filter){case 1:this._unFilterType1(rawData,unfilteredLine,byteWidth);break;case 2:this._unFilterType2(rawData,unfilteredLine,byteWidth);break;case 3:this._unFilterType3(rawData,unfilteredLine,byteWidth);break;case 4:this._unFilterType4(rawData,unfilteredLine,byteWidth);break;default:throw new Error("Unrecognised filter type - "+filter)}}this.write(unfilteredLine);currentImage.lineIndex++;if(currentImage.lineIndex>=currentImage.height){this._lastLine=null;this._imageIndex++;currentImage=this._images[this._imageIndex]}else{this._lastLine=unfilteredLine}if(currentImage){this.read(currentImage.byteWidth+1,this._reverseFilterLine.bind(this))}else{this._lastLine=null;this.complete()}}}).call(this,require("buffer").Buffer)},{"./interlace":61,"./paeth-predictor":65,buffer:7}],60:[function(require,module,exports){(function(Buffer){"use strict";function dePalette(indata,outdata,width,height,palette){var pxPos=0;for(var y=0;y<height;y++){for(var x=0;x<width;x++){var color=palette[indata[pxPos]];if(!color){throw new Error("index "+indata[pxPos]+" not in palette")}for(var i=0;i<4;i++){outdata[pxPos+i]=color[i]}pxPos+=4}}}function replaceTransparentColor(indata,outdata,width,height,transColor){var pxPos=0;for(var y=0;y<height;y++){for(var x=0;x<width;x++){var makeTrans=false;if(transColor.length===1){if(transColor[0]===indata[pxPos]){makeTrans=true}}else if(transColor[0]===indata[pxPos]&&transColor[1]===indata[pxPos+1]&&transColor[2]===indata[pxPos+2]){makeTrans=true}if(makeTrans){for(var i=0;i<4;i++){outdata[pxPos+i]=0}}pxPos+=4}}}function scaleDepth(indata,outdata,width,height,depth){var maxOutSample=255;var maxInSample=Math.pow(2,depth)-1;var pxPos=0;for(var y=0;y<height;y++){for(var x=0;x<width;x++){for(var i=0;i<4;i++){outdata[pxPos+i]=Math.floor(indata[pxPos+i]*maxOutSample/maxInSample+.5)}pxPos+=4}}}module.exports=function(indata,imageData){var depth=imageData.depth;var width=imageData.width;var height=imageData.height;var colorType=imageData.colorType;var transColor=imageData.transColor;var palette=imageData.palette;var outdata=indata;if(colorType===3){dePalette(indata,outdata,width,height,palette)}else{if(transColor){replaceTransparentColor(indata,outdata,width,height,transColor)}if(depth!==8){if(depth===16){outdata=new Buffer(width*height*4)}scaleDepth(indata,outdata,width,height,depth)}}return outdata}}).call(this,require("buffer").Buffer)},{buffer:7}],61:[function(require,module,exports){"use strict";var imagePasses=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];exports.getImagePasses=function(width,height){var images=[];var xLeftOver=width%8;var yLeftOver=height%8;var xRepeats=(width-xLeftOver)/8;var yRepeats=(height-yLeftOver)/8;for(var i=0;i<imagePasses.length;i++){var pass=imagePasses[i];var passWidth=xRepeats*pass.x.length;var passHeight=yRepeats*pass.y.length;for(var j=0;j<pass.x.length;j++){if(pass.x[j]<xLeftOver){passWidth++}else{break}}for(j=0;j<pass.y.length;j++){if(pass.y[j]<yLeftOver){passHeight++}else{break}}if(passWidth>0&&passHeight>0){images.push({width:passWidth,height:passHeight,index:i})}}return images};exports.getInterlaceIterator=function(width){return function(x,y,pass){var outerXLeftOver=x%imagePasses[pass].x.length;var outerX=(x-outerXLeftOver)/imagePasses[pass].x.length*8+imagePasses[pass].x[outerXLeftOver];var outerYLeftOver=y%imagePasses[pass].y.length;var outerY=(y-outerYLeftOver)/imagePasses[pass].y.length*8+imagePasses[pass].y[outerYLeftOver];return outerX*4+outerY*width*4}}},{}],62:[function(require,module,exports){(function(Buffer){"use strict";var util=require("util");var Stream=require("stream");var constants=require("./constants");var Packer=require("./packer");var PackerAsync=module.exports=function(opt){Stream.call(this);var options=opt||{};this._packer=new Packer(options);this._deflate=this._packer.createDeflate();this.readable=true};util.inherits(PackerAsync,Stream);PackerAsync.prototype.pack=function(data,width,height,gamma){this.emit("data",new Buffer(constants.PNG_SIGNATURE));this.emit("data",this._packer.packIHDR(width,height));if(gamma){this.emit("data",this._packer.packGAMA(gamma))}var filteredData=this._packer.filterData(data,width,height);this._deflate.on("error",this.emit.bind(this,"error"));this._deflate.on("data",function(compressedData){this.emit("data",this._packer.packIDAT(compressedData))}.bind(this));this._deflate.on("end",function(){this.emit("data",this._packer.packIEND());this.emit("end")}.bind(this));this._deflate.end(filteredData)}}).call(this,require("buffer").Buffer)},{"./constants":54,"./packer":64,buffer:7,stream:82,util:104}],63:[function(require,module,exports){(function(Buffer){"use strict";var hasSyncZlib=true;var zlib=require("zlib");if(!zlib.deflateSync){hasSyncZlib=false}var constants=require("./constants");var Packer=require("./packer");module.exports=function(metaData,opt){if(!hasSyncZlib){throw new Error("To use the sync capability of this library in old node versions, please also add a dependency on node-zlb-backport")}var options=opt||{};var packer=new Packer(options);var chunks=[];chunks.push(new Buffer(constants.PNG_SIGNATURE));chunks.push(packer.packIHDR(metaData.width,metaData.height));if(metaData.gamma){chunks.push(packer.packGAMA(metaData.gamma))}var filteredData=packer.filterData(metaData.data,metaData.width,metaData.height);var compressedData=zlib.deflateSync(filteredData,packer.getDeflateOptions());filteredData=null;if(!compressedData||!compressedData.length){throw new Error("bad png - invalid compressed data response")}chunks.push(packer.packIDAT(compressedData));chunks.push(packer.packIEND());return Buffer.concat(chunks)}}).call(this,require("buffer").Buffer)},{"./constants":54,"./packer":64,buffer:7,zlib:6}],64:[function(require,module,exports){(function(Buffer){"use strict";var constants=require("./constants");var CrcStream=require("./crc");var bitPacker=require("./bitpacker");var filter=require("./filter-pack");var zlib=require("zlib");var Packer=module.exports=function(options){this._options=options;options.deflateChunkSize=options.deflateChunkSize||32*1024;options.deflateLevel=options.deflateLevel!=null?options.deflateLevel:9;options.deflateStrategy=options.deflateStrategy!=null?options.deflateStrategy:3;options.inputHasAlpha=options.inputHasAlpha!=null?options.inputHasAlpha:true;options.deflateFactory=options.deflateFactory||zlib.createDeflate;options.bitDepth=options.bitDepth||8;options.colorType=typeof options.colorType==="number"?options.colorType:constants.COLORTYPE_COLOR_ALPHA;if(options.colorType!==constants.COLORTYPE_COLOR&&options.colorType!==constants.COLORTYPE_COLOR_ALPHA){throw new Error("option color type:"+options.colorType+" is not supported at present")}if(options.bitDepth!==8){throw new Error("option bit depth:"+options.bitDepth+" is not supported at present")}};Packer.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Packer.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Packer.prototype.filterData=function(data,width,height){var packedData=bitPacker(data,width,height,this._options);var bpp=constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];var filteredData=filter(packedData,width,height,this._options,bpp);return filteredData};Packer.prototype._packChunk=function(type,data){var len=data?data.length:0;var buf=new Buffer(len+12);buf.writeUInt32BE(len,0);buf.writeUInt32BE(type,4);if(data){data.copy(buf,8)}buf.writeInt32BE(CrcStream.crc32(buf.slice(4,buf.length-4)),buf.length-4);return buf};Packer.prototype.packGAMA=function(gamma){var buf=new Buffer(4);buf.writeUInt32BE(Math.floor(gamma*constants.GAMMA_DIVISION),0);return this._packChunk(constants.TYPE_gAMA,buf)};Packer.prototype.packIHDR=function(width,height){var buf=new Buffer(13);buf.writeUInt32BE(width,0);buf.writeUInt32BE(height,4);buf[8]=this._options.bitDepth;buf[9]=this._options.colorType;buf[10]=0;buf[11]=0;buf[12]=0;return this._packChunk(constants.TYPE_IHDR,buf)};Packer.prototype.packIDAT=function(data){return this._packChunk(constants.TYPE_IDAT,data)};Packer.prototype.packIEND=function(){return this._packChunk(constants.TYPE_IEND,null)}}).call(this,require("buffer").Buffer)},{"./bitpacker":52,"./constants":54,"./crc":55,"./filter-pack":56,buffer:7,zlib:6}],65:[function(require,module,exports){"use strict";module.exports=function paethPredictor(left,above,upLeft){var paeth=left+above-upLeft;var pLeft=Math.abs(paeth-left);var pAbove=Math.abs(paeth-above);var pUpLeft=Math.abs(paeth-upLeft);if(pLeft<=pAbove&&pLeft<=pUpLeft){return left}if(pAbove<=pUpLeft){return above}return upLeft}},{}],66:[function(require,module,exports){"use strict";var util=require("util");var zlib=require("zlib");var ChunkStream=require("./chunkstream");var FilterAsync=require("./filter-parse-async");var Parser=require("./parser");var bitmapper=require("./bitmapper");var formatNormaliser=require("./format-normaliser");var ParserAsync=module.exports=function(options){ChunkStream.call(this);this._parser=new Parser(options,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this)});this._options=options;this.writable=true;this._parser.start()};util.inherits(ParserAsync,ChunkStream);ParserAsync.prototype._handleError=function(err){this.emit("error",err);this.writable=false;this.destroy();if(this._inflate&&this._inflate.destroy){this._inflate.destroy()}this.errord=true};ParserAsync.prototype._inflateData=function(data){if(!this._inflate){this._inflate=zlib.createInflate();this._inflate.on("error",this.emit.bind(this,"error"));this._filter.on("complete",this._complete.bind(this));this._inflate.pipe(this._filter)}this._inflate.write(data)};ParserAsync.prototype._handleMetaData=function(metaData){this.emit("metadata",metaData);this._bitmapInfo=Object.create(metaData);this._filter=new FilterAsync(this._bitmapInfo)};ParserAsync.prototype._handleTransColor=function(transColor){this._bitmapInfo.transColor=transColor};ParserAsync.prototype._handlePalette=function(palette){this._bitmapInfo.palette=palette};ParserAsync.prototype._finished=function(){if(this.errord){return}if(!this._inflate){this.emit("error","No Inflate block")}else{this._inflate.end()}this.destroySoon()};ParserAsync.prototype._complete=function(filteredData){if(this.errord){return}try{var bitmapData=bitmapper.dataToBitMap(filteredData,this._bitmapInfo);var normalisedBitmapData=formatNormaliser(bitmapData,this._bitmapInfo);bitmapData=null}catch(ex){this._handleError(ex);return}this.emit("parsed",normalisedBitmapData)}},{"./bitmapper":51,"./chunkstream":53,"./filter-parse-async":57,"./format-normaliser":60,"./parser":68,util:104,zlib:6}],67:[function(require,module,exports){(function(Buffer){"use strict";var hasSyncZlib=true;var zlib=require("zlib");if(!zlib.deflateSync){hasSyncZlib=false}var SyncReader=require("./sync-reader");var FilterSync=require("./filter-parse-sync");var Parser=require("./parser");var bitmapper=require("./bitmapper");var formatNormaliser=require("./format-normaliser");module.exports=function(buffer,options){if(!hasSyncZlib){throw new Error("To use the sync capability of this library in old node versions, please also add a dependency on node-zlb-backport")}var err;function handleError(_err_){err=_err_}var metaData;function handleMetaData(_metaData_){metaData=_metaData_}function handleTransColor(transColor){metaData.transColor=transColor}function handlePalette(palette){metaData.palette=palette}var gamma;function handleGamma(_gamma_){gamma=_gamma_}var inflateDataList=[];function handleInflateData(inflatedData){inflateDataList.push(inflatedData)}var reader=new SyncReader(buffer);var parser=new Parser(options,{read:reader.read.bind(reader),error:handleError,metadata:handleMetaData,gamma:handleGamma,palette:handlePalette,transColor:handleTransColor,inflateData:handleInflateData});parser.start();reader.process();if(err){throw err}var inflateData=Buffer.concat(inflateDataList);inflateDataList.length=0;var inflatedData=zlib.inflateSync(inflateData);inflateData=null;if(!inflatedData||!inflatedData.length){throw new Error("bad png - invalid inflate data response")}var unfilteredData=FilterSync.process(inflatedData,metaData);inflateData=null;var bitmapData=bitmapper.dataToBitMap(unfilteredData,metaData);unfilteredData=null;var normalisedBitmapData=formatNormaliser(bitmapData,metaData);metaData.data=normalisedBitmapData;metaData.gamma=gamma||0;return metaData}}).call(this,require("buffer").Buffer)},{"./bitmapper":51,"./filter-parse-sync":58,"./format-normaliser":60,"./parser":68,"./sync-reader":71,buffer:7,zlib:6}],68:[function(require,module,exports){(function(Buffer){"use strict";var constants=require("./constants");var CrcCalculator=require("./crc");var Parser=module.exports=function(options,dependencies){this._options=options;options.checkCRC=options.checkCRC!==false;this._hasIHDR=false;this._hasIEND=false;this._palette=[];this._colorType=0;this._chunks={};this._chunks[constants.TYPE_IHDR]=this._handleIHDR.bind(this);this._chunks[constants.TYPE_IEND]=this._handleIEND.bind(this);this._chunks[constants.TYPE_IDAT]=this._handleIDAT.bind(this);this._chunks[constants.TYPE_PLTE]=this._handlePLTE.bind(this);this._chunks[constants.TYPE_tRNS]=this._handleTRNS.bind(this);this._chunks[constants.TYPE_gAMA]=this._handleGAMA.bind(this);this.read=dependencies.read;this.error=dependencies.error;this.metadata=dependencies.metadata;this.gamma=dependencies.gamma;this.transColor=dependencies.transColor;this.palette=dependencies.palette;this.parsed=dependencies.parsed;this.inflateData=dependencies.inflateData;this.inflateData=dependencies.inflateData;this.finished=dependencies.finished};Parser.prototype.start=function(){this.read(constants.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Parser.prototype._parseSignature=function(data){var signature=constants.PNG_SIGNATURE;for(var i=0;i<signature.length;i++){if(data[i]!==signature[i]){this.error(new Error("Invalid file signature"));return}}this.read(8,this._parseChunkBegin.bind(this))};Parser.prototype._parseChunkBegin=function(data){var length=data.readUInt32BE(0);var type=data.readUInt32BE(4);var name="";for(var i=4;i<8;i++){name+=String.fromCharCode(data[i])}var ancillary=Boolean(data[4]&32);if(!this._hasIHDR&&type!==constants.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}this._crc=new CrcCalculator;this._crc.write(new Buffer(name));if(this._chunks[type]){return this._chunks[type](length)}if(!ancillary){this.error(new Error("Unsupported critical chunk type "+name));return}this.read(length+4,this._skipChunk.bind(this))};Parser.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Parser.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Parser.prototype._parseChunkEnd=function(data){var fileCrc=data.readInt32BE(0);var calcCrc=this._crc.crc32();if(this._options.checkCRC&&calcCrc!==fileCrc){this.error(new Error("Crc error - "+fileCrc+" - "+calcCrc));return}if(!this._hasIEND){this.read(8,this._parseChunkBegin.bind(this))}};Parser.prototype._handleIHDR=function(length){this.read(length,this._parseIHDR.bind(this))};Parser.prototype._parseIHDR=function(data){this._crc.write(data);var width=data.readUInt32BE(0);var height=data.readUInt32BE(4);var depth=data[8];var colorType=data[9];var compr=data[10];var filter=data[11];var interlace=data[12];if(depth!==8&&depth!==4&&depth!==2&&depth!==1&&depth!==16){this.error(new Error("Unsupported bit depth "+depth));return}if(!(colorType in constants.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(compr!==0){this.error(new Error("Unsupported compression method"));return}if(filter!==0){this.error(new Error("Unsupported filter method"));return}if(interlace!==0&&interlace!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=colorType;var bpp=constants.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=true;this.metadata({width:width,height:height,depth:depth,interlace:Boolean(interlace),palette:Boolean(colorType&constants.COLORTYPE_PALETTE),color:Boolean(colorType&constants.COLORTYPE_COLOR),alpha:Boolean(colorType&constants.COLORTYPE_ALPHA),bpp:bpp,colorType:colorType});this._handleChunkEnd()};Parser.prototype._handlePLTE=function(length){this.read(length,this._parsePLTE.bind(this))};Parser.prototype._parsePLTE=function(data){this._crc.write(data);var entries=Math.floor(data.length/3);for(var i=0;i<entries;i++){this._palette.push([data[i*3],data[i*3+1],data[i*3+2],255])}this.palette(this._palette);this._handleChunkEnd()};Parser.prototype._handleTRNS=function(length){this.read(length,this._parseTRNS.bind(this))};Parser.prototype._parseTRNS=function(data){this._crc.write(data);if(this._colorType===constants.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(new Error("Transparency chunk must be after palette"));return}if(data.length>this._palette.length){this.error(new Error("More transparent colors than palette size"));return}for(var i=0;i<data.length;i++){this._palette[i][3]=data[i]}this.palette(this._palette)}if(this._colorType===constants.COLORTYPE_GRAYSCALE){this.transColor([data.readUInt16BE(0)])}if(this._colorType===constants.COLORTYPE_COLOR){this.transColor([data.readUInt16BE(0),data.readUInt16BE(2),data.readUInt16BE(4)])}this._handleChunkEnd()};Parser.prototype._handleGAMA=function(length){this.read(length,this._parseGAMA.bind(this))};Parser.prototype._parseGAMA=function(data){this._crc.write(data);this.gamma(data.readUInt32BE(0)/constants.GAMMA_DIVISION);this._handleChunkEnd()};Parser.prototype._handleIDAT=function(length){this.read(-length,this._parseIDAT.bind(this,length))};Parser.prototype._parseIDAT=function(length,data){this._crc.write(data);if(this._colorType===constants.COLORTYPE_PALETTE_COLOR&&this._palette.length===0){throw new Error("Expected palette not found")}this.inflateData(data);var leftOverLength=length-data.length;if(leftOverLength>0){this._handleIDAT(leftOverLength)}else{this._handleChunkEnd()}};Parser.prototype._handleIEND=function(length){this.read(length,this._parseIEND.bind(this))};Parser.prototype._parseIEND=function(data){this._crc.write(data);this._hasIEND=true;this._handleChunkEnd();if(this.finished){this.finished()}}}).call(this,require("buffer").Buffer)},{"./constants":54,"./crc":55,buffer:7}],69:[function(require,module,exports){"use strict";var parse=require("./parser-sync");var pack=require("./packer-sync");exports.read=function(buffer,options){return parse(buffer,options||{})};exports.write=function(png){return pack(png)}},{"./packer-sync":63,"./parser-sync":67}],70:[function(require,module,exports){(function(process,Buffer){"use strict";var util=require("util");var Stream=require("stream");var Parser=require("./parser-async");var Packer=require("./packer-async");var PNGSync=require("./png-sync");var PNG=exports.PNG=function(options){Stream.call(this);options=options||{};this.width=options.width||0;this.height=options.height||0;this.data=this.width>0&&this.height>0?new Buffer(4*this.width*this.height):null;if(options.fill&&this.data){this.data.fill(0)}this.gamma=0;this.readable=this.writable=true;this._parser=new Parser(options);this._parser.on("error",this.emit.bind(this,"error"));this._parser.on("close",this._handleClose.bind(this));this._parser.on("metadata",this._metadata.bind(this));this._parser.on("gamma",this._gamma.bind(this));this._parser.on("parsed",function(data){this.data=data;this.emit("parsed",data)}.bind(this));this._packer=new Packer(options);this._packer.on("data",this.emit.bind(this,"data"));this._packer.on("end",this.emit.bind(this,"end"));this._parser.on("close",this._handleClose.bind(this));this._packer.on("error",this.emit.bind(this,"error"))};util.inherits(PNG,Stream);PNG.sync=PNGSync;PNG.prototype.pack=function(){if(!this.data||!this.data.length){this.emit("error","No data provided");return this}process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this));return this};PNG.prototype.parse=function(data,callback){if(callback){var onParsed,onError;onParsed=function(parsedData){this.removeListener("error",onError);this.data=parsedData;callback(null,this)}.bind(this);onError=function(err){this.removeListener("parsed",onParsed);callback(err,null)}.bind(this);this.once("parsed",onParsed);this.once("error",onError)}this.end(data);return this};PNG.prototype.write=function(data){this._parser.write(data);return true};PNG.prototype.end=function(data){this._parser.end(data)};PNG.prototype._metadata=function(metadata){this.width=metadata.width;this.height=metadata.height;this.emit("metadata",metadata)};PNG.prototype._gamma=function(gamma){this.gamma=gamma};PNG.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable){this.emit("close")}};PNG.bitblt=function(src,dst,srcX,srcY,width,height,deltaX,deltaY){if(srcX>src.width||srcY>src.height||srcX+width>src.width||srcY+height>src.height){throw new Error("bitblt reading outside image")}if(deltaX>dst.width||deltaY>dst.height||deltaX+width>dst.width||deltaY+height>dst.height){throw new Error("bitblt writing outside image")}for(var y=0;y<height;y++){src.data.copy(dst.data,(deltaY+y)*dst.width+deltaX<<2,(srcY+y)*src.width+srcX<<2,(srcY+y)*src.width+srcX+width<<2)}};PNG.prototype.bitblt=function(dst,srcX,srcY,width,height,deltaX,deltaY){PNG.bitblt(this,dst,srcX,srcY,width,height,deltaX,deltaY);return this};PNG.adjustGamma=function(src){if(src.gamma){for(var y=0;y<src.height;y++){for(var x=0;x<src.width;x++){var idx=src.width*y+x<<2;for(var i=0;i<3;i++){var sample=src.data[idx+i]/255;sample=Math.pow(sample,1/2.2/src.gamma);src.data[idx+i]=Math.round(sample*255)}}}src.gamma=0}};PNG.prototype.adjustGamma=function(){PNG.adjustGamma(this)}}).call(this,require("_process"),require("buffer").Buffer)},{"./packer-async":62,"./parser-async":66,"./png-sync":69,_process:73,buffer:7,stream:82,util:104}],71:[function(require,module,exports){"use strict";var SyncReader=module.exports=function(buffer){this._buffer=buffer;this._reads=[]};SyncReader.prototype.read=function(length,callback){this._reads.push({length:Math.abs(length),allowLess:length<0,func:callback})};SyncReader.prototype.process=function(){while(this._reads.length>0&&this._buffer.length){var read=this._reads[0];if(this._buffer.length&&(this._buffer.length>=read.length||read.allowLess)){this._reads.shift();var buf=this._buffer;this._buffer=buf.slice(read.length);read.func.call(this,buf.slice(0,read.length))}else{break}}if(this._reads.length>0){return new Error("There are some read requests waitng on finished stream")}if(this._buffer.length>0){return new Error("unrecognised content at end of stream")}}},{}],72:[function(require,module,exports){(function(process){"use strict";if(!process.version||process.version.indexOf("v0.")===0||process.version.indexOf("v1.")===0&&process.version.indexOf("v1.8.")!==0){module.exports=nextTick}else{module.exports=process.nextTick}function nextTick(fn,arg1,arg2,arg3){if(typeof fn!=="function"){throw new TypeError('"callback" argument must be a function')}var len=arguments.length;var args,i;switch(len){case 0:case 1:return process.nextTick(fn);case 2:return process.nextTick(function afterTickOne(){fn.call(null,arg1)});case 3:return process.nextTick(function afterTickTwo(){fn.call(null,arg1,arg2)});case 4:return process.nextTick(function afterTickThree(){fn.call(null,arg1,arg2,arg3)});default:args=new Array(len-1);i=0;while(i<args.length){args[i++]=arguments[i]}return process.nextTick(function afterTick(){fn.apply(null,args)})}}}).call(this,require("_process"))},{_process:73}],73:[function(require,module,exports){var process=module.exports={};var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function"){cachedSetTimeout=setTimeout}else{cachedSetTimeout=defaultSetTimout}}catch(e){cachedSetTimeout=defaultSetTimout}try{if(typeof clearTimeout==="function"){cachedClearTimeout=clearTimeout}else{cachedClearTimeout=defaultClearTimeout}}catch(e){cachedClearTimeout=defaultClearTimeout}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){return setTimeout(fun,0)}if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0)}try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){return clearTimeout(marker)}if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker)}try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;runClearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.prependListener=noop;process.prependOnceListener=noop;process.listeners=function(name){return[]};process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],74:[function(require,module,exports){arguments[4][19][0].apply(exports,arguments)},{"./_stream_readable":76,"./_stream_writable":78,_process:73,"core-util-is":9,dup:19,inherits:26}],75:[function(require,module,exports){arguments[4][20][0].apply(exports,arguments)},{"./_stream_transform":77,"core-util-is":9,dup:20,inherits:26}],76:[function(require,module,exports){(function(process){module.exports=Readable;var isArray=require("isarray");var Buffer=require("buffer").Buffer;Readable.ReadableState=ReadableState;var EE=require("events").EventEmitter;if(!EE.listenerCount)EE.listenerCount=function(emitter,type){return emitter.listeners(type).length};var Stream=require("stream");var util=require("core-util-is");util.inherits=require("inherits");var StringDecoder;util.inherits(Readable,Stream);function ReadableState(options,stream){options=options||{};var hwm=options.highWaterMark;this.highWaterMark=hwm||hwm===0?hwm:16*1024;this.highWaterMark=~~this.highWaterMark;this.buffer=[];this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=false;this.ended=false;this.endEmitted=false;this.reading=false;this.calledRead=false;this.sync=true;this.needReadable=false;this.emittedReadable=false;this.readableListening=false;this.objectMode=!!options.objectMode;this.defaultEncoding=options.defaultEncoding||"utf8";this.ranOut=false;this.awaitDrain=0;this.readingMore=false;this.decoder=null;this.encoding=null;if(options.encoding){if(!StringDecoder)StringDecoder=require("string_decoder/").StringDecoder;this.decoder=new StringDecoder(options.encoding);this.encoding=options.encoding}}function Readable(options){if(!(this instanceof Readable))return new Readable(options);this._readableState=new ReadableState(options,this);this.readable=true;Stream.call(this)}Readable.prototype.push=function(chunk,encoding){var state=this._readableState;if(typeof chunk==="string"&&!state.objectMode){encoding=encoding||state.defaultEncoding;if(encoding!==state.encoding){chunk=new Buffer(chunk,encoding);encoding=""}}return readableAddChunk(this,state,chunk,encoding,false)};Readable.prototype.unshift=function(chunk){var state=this._readableState;return readableAddChunk(this,state,chunk,"",true)};function readableAddChunk(stream,state,chunk,encoding,addToFront){var er=chunkInvalid(state,chunk);if(er){stream.emit("error",er)}else if(chunk===null||chunk===undefined){state.reading=false;if(!state.ended)onEofChunk(stream,state)}else if(state.objectMode||chunk&&chunk.length>0){if(state.ended&&!addToFront){var e=new Error("stream.push() after EOF");stream.emit("error",e)}else if(state.endEmitted&&addToFront){var e=new Error("stream.unshift() after end event");stream.emit("error",e)}else{if(state.decoder&&!addToFront&&!encoding)chunk=state.decoder.write(chunk);state.length+=state.objectMode?1:chunk.length;if(addToFront){state.buffer.unshift(chunk)}else{state.reading=false;state.buffer.push(chunk)}if(state.needReadable)emitReadable(stream);maybeReadMore(stream,state)}}else if(!addToFront){state.reading=false}return needMoreData(state)}function needMoreData(state){return!state.ended&&(state.needReadable||state.length<state.highWaterMark||state.length===0)}Readable.prototype.setEncoding=function(enc){if(!StringDecoder)StringDecoder=require("string_decoder/").StringDecoder;this._readableState.decoder=new StringDecoder(enc);this._readableState.encoding=enc};var MAX_HWM=8388608;function roundUpToNextPowerOf2(n){if(n>=MAX_HWM){n=MAX_HWM}else{n--;for(var p=1;p<32;p<<=1)n|=n>>p;n++}return n}function howMuchToRead(n,state){if(state.length===0&&state.ended)return 0;if(state.objectMode)return n===0?0:1;if(n===null||isNaN(n)){if(state.flowing&&state.buffer.length)return state.buffer[0].length;else return state.length}if(n<=0)return 0;if(n>state.highWaterMark)state.highWaterMark=roundUpToNextPowerOf2(n);if(n>state.length){if(!state.ended){state.needReadable=true;return 0}else return state.length}return n}Readable.prototype.read=function(n){var state=this._readableState;state.calledRead=true;var nOrig=n;var ret;if(typeof n!=="number"||n>0)state.emittedReadable=false;if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){ret=null;if(state.length>0&&state.decoder){ret=fromList(n,state);state.length-=ret.length}if(state.length===0)endReadable(this);return ret}var doRead=state.needReadable;if(state.length-n<=state.highWaterMark)doRead=true;if(state.ended||state.reading)doRead=false;if(doRead){state.reading=true;state.sync=true;if(state.length===0)state.needReadable=true;this._read(state.highWaterMark);state.sync=false}if(doRead&&!state.reading)n=howMuchToRead(nOrig,state);if(n>0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=true;n=0}state.length-=n;if(state.length===0&&!state.ended)state.needReadable=true;if(state.ended&&!state.endEmitted&&state.length===0)endReadable(this);return ret};function chunkInvalid(state,chunk){var er=null;if(!Buffer.isBuffer(chunk)&&"string"!==typeof chunk&&chunk!==null&&chunk!==undefined&&!state.objectMode){er=new TypeError("Invalid non-string/buffer chunk")}return er}function onEofChunk(stream,state){if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;if(state.length>0)emitReadable(stream);else endReadable(stream)}function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(state.emittedReadable)return;state.emittedReadable=true;if(state.sync)process.nextTick(function(){emitReadable_(stream)});else emitReadable_(stream)}function emitReadable_(stream){stream.emit("readable")}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;process.nextTick(function(){maybeReadMore_(stream,state)})}}function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length<state.highWaterMark){stream.read(0);if(len===state.length)break;else len=state.length}state.readingMore=false}Readable.prototype._read=function(n){this.emit("error",new Error("not implemented"))};Readable.prototype.pipe=function(dest,pipeOpts){var src=this;var state=this._readableState;switch(state.pipesCount){case 0:state.pipes=dest;break;case 1:state.pipes=[state.pipes,dest];break;default:state.pipes.push(dest);break}state.pipesCount+=1;var doEnd=(!pipeOpts||pipeOpts.end!==false)&&dest!==process.stdout&&dest!==process.stderr;var endFn=doEnd?onend:cleanup;if(state.endEmitted)process.nextTick(endFn);else src.once("end",endFn);dest.on("unpipe",onunpipe);function onunpipe(readable){if(readable!==src)return;cleanup()}function onend(){dest.end()}var ondrain=pipeOnDrain(src);dest.on("drain",ondrain);function cleanup(){dest.removeListener("close",onclose);dest.removeListener("finish",onfinish);dest.removeListener("drain",ondrain);dest.removeListener("error",onerror);dest.removeListener("unpipe",onunpipe);src.removeListener("end",onend);src.removeListener("end",cleanup);if(!dest._writableState||dest._writableState.needDrain)ondrain()}function onerror(er){unpipe();dest.removeListener("error",onerror);if(EE.listenerCount(dest,"error")===0)dest.emit("error",er)}if(!dest._events||!dest._events.error)dest.on("error",onerror);else if(isArray(dest._events.error))dest._events.error.unshift(onerror);else dest._events.error=[onerror,dest._events.error];function onclose(){dest.removeListener("finish",onfinish);unpipe()}dest.once("close",onclose);function onfinish(){dest.removeListener("close",onclose);unpipe()}dest.once("finish",onfinish);function unpipe(){src.unpipe(dest)}dest.emit("pipe",src);if(!state.flowing){this.on("readable",pipeOnReadable);state.flowing=true;process.nextTick(function(){flow(src)})}return dest};function pipeOnDrain(src){return function(){var dest=this;var state=src._readableState;state.awaitDrain--;if(state.awaitDrain===0)flow(src)}}function flow(src){var state=src._readableState;var chunk;state.awaitDrain=0;function write(dest,i,list){var written=dest.write(chunk);if(false===written){state.awaitDrain++}}while(state.pipesCount&&null!==(chunk=src.read())){if(state.pipesCount===1)write(state.pipes,0,null);else forEach(state.pipes,write);src.emit("data",chunk);if(state.awaitDrain>0)return}if(state.pipesCount===0){state.flowing=false;if(EE.listenerCount(src,"data")>0)emitDataEvents(src);return}state.ranOut=true}function pipeOnReadable(){if(this._readableState.ranOut){this._readableState.ranOut=false;flow(this)}}Readable.prototype.unpipe=function(dest){var state=this._readableState;if(state.pipesCount===0)return this;if(state.pipesCount===1){if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;state.pipes=null;state.pipesCount=0;this.removeListener("readable",pipeOnReadable);state.flowing=false;if(dest)dest.emit("unpipe",this);return this}if(!dest){var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;this.removeListener("readable",pipeOnReadable);state.flowing=false;for(var i=0;i<len;i++)dests[i].emit("unpipe",this);return this}var i=indexOf(state.pipes,dest);if(i===-1)return this;state.pipes.splice(i,1);state.pipesCount-=1;if(state.pipesCount===1)state.pipes=state.pipes[0];dest.emit("unpipe",this);return this};Readable.prototype.on=function(ev,fn){var res=Stream.prototype.on.call(this,ev,fn);if(ev==="data"&&!this._readableState.flowing)emitDataEvents(this);if(ev==="readable"&&this.readable){var state=this._readableState;if(!state.readableListening){state.readableListening=true;state.emittedReadable=false;state.needReadable=true;if(!state.reading){this.read(0)}else if(state.length){emitReadable(this,state)}}}return res};Readable.prototype.addListener=Readable.prototype.on;Readable.prototype.resume=function(){emitDataEvents(this);this.read(0);this.emit("resume")};Readable.prototype.pause=function(){emitDataEvents(this,true);this.emit("pause")};function emitDataEvents(stream,startPaused){var state=stream._readableState;if(state.flowing){throw new Error("Cannot switch to old mode now.")}var paused=startPaused||false;var readable=false;stream.readable=true;stream.pipe=Stream.prototype.pipe;stream.on=stream.addListener=Stream.prototype.on;stream.on("readable",function(){readable=true;var c;while(!paused&&null!==(c=stream.read()))stream.emit("data",c);if(c===null){readable=false;stream._readableState.needReadable=true}});stream.pause=function(){paused=true;this.emit("pause")};stream.resume=function(){paused=false;if(readable)process.nextTick(function(){stream.emit("readable")});else this.read(0);this.emit("resume")};stream.emit("readable")}Readable.prototype.wrap=function(stream){var state=this._readableState;var paused=false;var self=this;stream.on("end",function(){if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)self.push(chunk)}self.push(null)});stream.on("data",function(chunk){if(state.decoder)chunk=state.decoder.write(chunk);if(state.objectMode&&(chunk===null||chunk===undefined))return;else if(!state.objectMode&&(!chunk||!chunk.length))return;var ret=self.push(chunk);if(!ret){paused=true;stream.pause()}});for(var i in stream){if(typeof stream[i]==="function"&&typeof this[i]==="undefined"){this[i]=function(method){return function(){return stream[method].apply(stream,arguments)}}(i)}}var events=["error","close","destroy","pause","resume"];forEach(events,function(ev){stream.on(ev,self.emit.bind(self,ev))});self._read=function(n){if(paused){paused=false;stream.resume()}};return self};Readable._fromList=fromList;function fromList(n,state){var list=state.buffer;var length=state.length;var stringMode=!!state.decoder;var objectMode=!!state.objectMode;var ret;if(list.length===0)return null;if(length===0)ret=null;else if(objectMode)ret=list.shift();else if(!n||n>=length){if(stringMode)ret=list.join("");else ret=Buffer.concat(list,length);list.length=0}else{if(n<list[0].length){var buf=list[0];ret=buf.slice(0,n);list[0]=buf.slice(n)}else if(n===list[0].length){ret=list.shift()}else{if(stringMode)ret="";else ret=new Buffer(n);var c=0;for(var i=0,l=list.length;i<l&&c<n;i++){var buf=list[0];var cpy=Math.min(n-c,buf.length);if(stringMode)ret+=buf.slice(0,cpy);else buf.copy(ret,c,0,cpy);if(cpy<buf.length)list[0]=buf.slice(cpy);else list.shift();c+=cpy}}}return ret}function endReadable(stream){var state=stream._readableState;if(state.length>0)throw new Error("endReadable called on non-empty stream");if(!state.endEmitted&&state.calledRead){state.ended=true;process.nextTick(function(){if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end")}})}}function forEach(xs,f){for(var i=0,l=xs.length;i<l;i++){f(xs[i],i)}}function indexOf(xs,x){for(var i=0,l=xs.length;i<l;i++){if(xs[i]===x)return i}return-1}}).call(this,require("_process"))},{_process:73,buffer:7,"core-util-is":9,events:14,inherits:26,isarray:29,stream:82,"string_decoder/":98}],77:[function(require,module,exports){module.exports=Transform;var Duplex=require("./_stream_duplex");var util=require("core-util-is");util.inherits=require("inherits");util.inherits(Transform,Duplex);function TransformState(options,stream){this.afterTransform=function(er,data){return afterTransform(stream,er,data)};this.needTransform=false;this.transforming=false;this.writecb=null;this.writechunk=null}function afterTransform(stream,er,data){var ts=stream._transformState;ts.transforming=false;var cb=ts.writecb;if(!cb)return stream.emit("error",new Error("no writecb in Transform class"));ts.writechunk=null;ts.writecb=null;if(data!==null&&data!==undefined)stream.push(data);if(cb)cb(er);var rs=stream._readableState;rs.reading=false;if(rs.needReadable||rs.length<rs.highWaterMark){stream._read(rs.highWaterMark)}}function Transform(options){if(!(this instanceof Transform))return new Transform(options);Duplex.call(this,options);var ts=this._transformState=new TransformState(options,this);var stream=this;this._readableState.needReadable=true;this._readableState.sync=false;this.once("finish",function(){if("function"===typeof this._flush)this._flush(function(er){done(stream,er)});else done(stream)})}Transform.prototype.push=function(chunk,encoding){this._transformState.needTransform=false;return Duplex.prototype.push.call(this,chunk,encoding)};Transform.prototype._transform=function(chunk,encoding,cb){throw new Error("not implemented")};Transform.prototype._write=function(chunk,encoding,cb){var ts=this._transformState;ts.writecb=cb;ts.writechunk=chunk;ts.writeencoding=encoding;if(!ts.transforming){var rs=this._readableState;if(ts.needTransform||rs.needReadable||rs.length<rs.highWaterMark)this._read(rs.highWaterMark)}};Transform.prototype._read=function(n){var ts=this._transformState;if(ts.writechunk!==null&&ts.writecb&&!ts.transforming){ts.transforming=true;this._transform(ts.writechunk,ts.writeencoding,ts.afterTransform)}else{ts.needTransform=true}};function done(stream,er){if(er)return stream.emit("error",er);var ws=stream._writableState;var rs=stream._readableState;var ts=stream._transformState;if(ws.length)throw new Error("calling transform done when ws.length != 0");if(ts.transforming)throw new Error("calling transform done when still transforming");return stream.push(null)}},{"./_stream_duplex":74,"core-util-is":9,inherits:26}],78:[function(require,module,exports){(function(process){module.exports=Writable;var Buffer=require("buffer").Buffer;Writable.WritableState=WritableState;var util=require("core-util-is");util.inherits=require("inherits");var Stream=require("stream");util.inherits(Writable,Stream);function WriteReq(chunk,encoding,cb){this.chunk=chunk;this.encoding=encoding;this.callback=cb}function WritableState(options,stream){options=options||{};var hwm=options.highWaterMark;this.highWaterMark=hwm||hwm===0?hwm:16*1024;this.objectMode=!!options.objectMode;this.highWaterMark=~~this.highWaterMark;this.needDrain=false;this.ending=false;this.ended=false;this.finished=false;var noDecode=options.decodeStrings===false;this.decodeStrings=!noDecode;this.defaultEncoding=options.defaultEncoding||"utf8";this.length=0;this.writing=false;this.sync=true;this.bufferProcessing=false;this.onwrite=function(er){onwrite(stream,er)};this.writecb=null;this.writelen=0;this.buffer=[];this.errorEmitted=false}function Writable(options){var Duplex=require("./_stream_duplex");if(!(this instanceof Writable)&&!(this instanceof Duplex))return new Writable(options);this._writableState=new WritableState(options,this);this.writable=true;Stream.call(this)}Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))};function writeAfterEnd(stream,state,cb){var er=new Error("write after end");stream.emit("error",er);process.nextTick(function(){cb(er)})}function validChunk(stream,state,chunk,cb){var valid=true;if(!Buffer.isBuffer(chunk)&&"string"!==typeof chunk&&chunk!==null&&chunk!==undefined&&!state.objectMode){var er=new TypeError("Invalid non-string/buffer chunk");stream.emit("error",er);process.nextTick(function(){cb(er)});valid=false}return valid}Writable.prototype.write=function(chunk,encoding,cb){var state=this._writableState;var ret=false;if(typeof encoding==="function"){cb=encoding;encoding=null}if(Buffer.isBuffer(chunk))encoding="buffer";else if(!encoding)encoding=state.defaultEncoding;if(typeof cb!=="function")cb=function(){};if(state.ended)writeAfterEnd(this,state,cb);else if(validChunk(this,state,chunk,cb))ret=writeOrBuffer(this,state,chunk,encoding,cb);return ret};function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==="string"){chunk=new Buffer(chunk,encoding)}return chunk}function writeOrBuffer(stream,state,chunk,encoding,cb){chunk=decodeChunk(state,chunk,encoding);if(Buffer.isBuffer(chunk))encoding="buffer";var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length<state.highWaterMark;if(!ret)state.needDrain=true;if(state.writing)state.buffer.push(new WriteReq(chunk,encoding,cb));else doWrite(stream,state,len,chunk,encoding,cb);return ret}function doWrite(stream,state,len,chunk,encoding,cb){state.writelen=len;state.writecb=cb;state.writing=true;state.sync=true;stream._write(chunk,encoding,state.onwrite);state.sync=false}function onwriteError(stream,state,sync,er,cb){if(sync)process.nextTick(function(){cb(er)});else cb(er);stream._writableState.errorEmitted=true;stream.emit("error",er)}function onwriteStateUpdate(state){state.writing=false;state.writecb=null;state.length-=state.writelen;state.writelen=0}function onwrite(stream,er){var state=stream._writableState;var sync=state.sync;var cb=state.writecb;onwriteStateUpdate(state);if(er)onwriteError(stream,state,sync,er,cb);else{var finished=needFinish(stream,state);if(!finished&&!state.bufferProcessing&&state.buffer.length)clearBuffer(stream,state);if(sync){process.nextTick(function(){afterWrite(stream,state,finished,cb)})}else{afterWrite(stream,state,finished,cb)}}}function afterWrite(stream,state,finished,cb){if(!finished)onwriteDrain(stream,state);cb();if(finished)finishMaybe(stream,state)}function onwriteDrain(stream,state){if(state.length===0&&state.needDrain){state.needDrain=false;stream.emit("drain")}}function clearBuffer(stream,state){state.bufferProcessing=true;for(var c=0;c<state.buffer.length;c++){var entry=state.buffer[c];var chunk=entry.chunk;var encoding=entry.encoding;var cb=entry.callback;var len=state.objectMode?1:chunk.length;doWrite(stream,state,len,chunk,encoding,cb);if(state.writing){c++;break}}state.bufferProcessing=false;if(c<state.buffer.length)state.buffer=state.buffer.slice(c);else state.buffer.length=0}Writable.prototype._write=function(chunk,encoding,cb){cb(new Error("not implemented"))};Writable.prototype.end=function(chunk,encoding,cb){var state=this._writableState;if(typeof chunk==="function"){cb=chunk;chunk=null;encoding=null}else if(typeof encoding==="function"){cb=encoding;encoding=null}if(typeof chunk!=="undefined"&&chunk!==null)this.write(chunk,encoding);if(!state.ending&&!state.finished)endWritable(this,state,cb)};function needFinish(stream,state){return state.ending&&state.length===0&&!state.finished&&!state.writing}function finishMaybe(stream,state){var need=needFinish(stream,state);if(need){state.finished=true;stream.emit("finish")}return need}function endWritable(stream,state,cb){state.ending=true;finishMaybe(stream,state);if(cb){if(state.finished)process.nextTick(cb);else stream.once("finish",cb)}state.ended=true}}).call(this,require("_process"))},{"./_stream_duplex":74,_process:73,buffer:7,"core-util-is":9,inherits:26,stream:82}],79:[function(require,module,exports){(function(process){var Stream=require("stream");exports=module.exports=require("./lib/_stream_readable.js");exports.Stream=Stream;exports.Readable=exports;exports.Writable=require("./lib/_stream_writable.js");exports.Duplex=require("./lib/_stream_duplex.js");exports.Transform=require("./lib/_stream_transform.js");exports.PassThrough=require("./lib/_stream_passthrough.js");if(!process.browser&&process.env.READABLE_STREAM==="disable"){module.exports=require("stream")}}).call(this,require("_process"))},{"./lib/_stream_duplex.js":74,"./lib/_stream_passthrough.js":75,"./lib/_stream_readable.js":76,"./lib/_stream_transform.js":77,"./lib/_stream_writable.js":78,_process:73,stream:82}],80:[function(require,module,exports){var buffer=require("buffer");var Buffer=buffer.Buffer;function copyProps(src,dst){for(var key in src){dst[key]=src[key]}}if(Buffer.from&&Buffer.alloc&&Buffer.allocUnsafe&&Buffer.allocUnsafeSlow){module.exports=buffer}else{copyProps(buffer,exports);exports.Buffer=SafeBuffer}function SafeBuffer(arg,encodingOrOffset,length){return Buffer(arg,encodingOrOffset,length)}copyProps(Buffer,SafeBuffer);SafeBuffer.from=function(arg,encodingOrOffset,length){if(typeof arg==="number"){throw new TypeError("Argument must not be a number")}return Buffer(arg,encodingOrOffset,length)};SafeBuffer.alloc=function(size,fill,encoding){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}var buf=Buffer(size);if(fill!==undefined){if(typeof encoding==="string"){buf.fill(fill,encoding)}else{buf.fill(fill)}}else{buf.fill(0)}return buf};SafeBuffer.allocUnsafe=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return Buffer(size)};SafeBuffer.allocUnsafeSlow=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return buffer.SlowBuffer(size)}},{buffer:7}],81:[function(require,module,exports){(function(Buffer){"use strict";var ContentStream=require("contentstream");var GifEncoder=require("gif-encoder");var jpegJs=require("jpeg-js");var PNG=require("pngjs-nozlib").PNG;var ndarray=require("ndarray");var ops=require("ndarray-ops");var through=require("through");function handleData(array,data,frame){var i,j,ptr=0,c;if(array.shape.length===4){return handleData(array.pick(frame),data,0)}else if(array.shape.length===3){if(array.shape[2]===3){ops.assign(ndarray(data,[array.shape[0],array.shape[1],3],[4,4*array.shape[0],1]),array);ops.assigns(ndarray(data,[array.shape[0]*array.shape[1]],[4],3),255)}else if(array.shape[2]===4){ops.assign(ndarray(data,[array.shape[0],array.shape[1],4],[4,array.shape[0]*4,1]),array)}else if(array.shape[2]===1){ops.assign(ndarray(data,[array.shape[0],array.shape[1],3],[4,4*array.shape[0],1]),ndarray(array.data,[array.shape[0],array.shape[1],3],[array.stride[0],array.stride[1],0],array.offset));ops.assigns(ndarray(data,[array.shape[0]*array.shape[1]],[4],3),255)}else{return new Error("Incompatible array shape")}}else if(array.shape.length===2){ops.assign(ndarray(data,[array.shape[0],array.shape[1],3],[4,4*array.shape[0],1]),ndarray(array.data,[array.shape[0],array.shape[1],3],[array.stride[0],array.stride[1],0],array.offset));ops.assigns(ndarray(data,[array.shape[0]*array.shape[1]],[4],3),255)}else{return new Error("Incompatible array shape")}return data}function haderror(err){var result=through();result.emit("error",err);return result}module.exports=function savePixels(array,type,options){options=options||{};switch(type.toUpperCase()){case"JPG":case".JPG":case"JPEG":case".JPEG":case"JPE":case".JPE":var width=array.shape[0];var height=array.shape[1];var data=new Buffer(width*height*4);data=handleData(array,data);var rawImageData={data:data,width:width,height:height};var jpegImageData=jpegJs.encode(rawImageData,options.quality);return new ContentStream(jpegImageData.data);case"GIF":case".GIF":var frames=array.shape.length===4?array.shape[0]:1;var width=array.shape.length===4?array.shape[1]:array.shape[0];var height=array.shape.length===4?array.shape[2]:array.shape[1];var data=new Buffer(width*height*4);var gif=new GifEncoder(width,height);gif.writeHeader();for(var i=0;i<frames;i++){data=handleData(array,data,i);gif.addFrame(data)}gif.finish();return gif;case"PNG":case".PNG":var png=new PNG({width:array.shape[0],height:array.shape[1]});var data=handleData(array,png.data);if(typeof data==="Error")return haderror(data);png.data=data;return png.pack();case"CANVAS":var canvas=document.createElement("canvas");var context=canvas.getContext("2d");canvas.width=array.shape[0];canvas.height=array.shape[1];var imageData=context.getImageData(0,0,canvas.width,canvas.height);var data=imageData.data;data=handleData(array,data);if(typeof data==="Error")return haderror(data);context.putImageData(imageData,0,0);return canvas;default:return haderror(new Error("Unsupported file type: "+type))}}}).call(this,require("buffer").Buffer)},{buffer:7,contentstream:8,"gif-encoder":16,"jpeg-js":30,ndarray:37,"ndarray-ops":34,"pngjs-nozlib":70,through:99}],82:[function(require,module,exports){module.exports=Stream;var EE=require("events").EventEmitter;var inherits=require("inherits");inherits(Stream,EE);Stream.Readable=require("readable-stream/readable.js");Stream.Writable=require("readable-stream/writable.js");Stream.Duplex=require("readable-stream/duplex.js");Stream.Transform=require("readable-stream/transform.js");Stream.PassThrough=require("readable-stream/passthrough.js");Stream.Stream=Stream;function Stream(){EE.call(this)}Stream.prototype.pipe=function(dest,options){var source=this;function ondata(chunk){if(dest.writable){if(false===dest.write(chunk)&&source.pause){source.pause()}}}source.on("data",ondata);function ondrain(){if(source.readable&&source.resume){source.resume()}}dest.on("drain",ondrain);if(!dest._isStdio&&(!options||options.end!==false)){source.on("end",onend);source.on("close",onclose)}var didOnEnd=false;function onend(){if(didOnEnd)return;didOnEnd=true;dest.end()}function onclose(){if(didOnEnd)return;didOnEnd=true;if(typeof dest.destroy==="function")dest.destroy()}function onerror(er){cleanup();if(EE.listenerCount(this,"error")===0){throw er}}source.on("error",onerror);dest.on("error",onerror);function cleanup(){source.removeListener("data",ondata);dest.removeListener("drain",ondrain);source.removeListener("end",onend);source.removeListener("close",onclose);source.removeListener("error",onerror);dest.removeListener("error",onerror);source.removeListener("end",cleanup);source.removeListener("close",cleanup);dest.removeListener("close",cleanup)}source.on("end",cleanup);source.on("close",cleanup);dest.on("close",cleanup);dest.emit("pipe",source);return dest}},{events:14,inherits:26,"readable-stream/duplex.js":84,"readable-stream/passthrough.js":93,"readable-stream/readable.js":94,"readable-stream/transform.js":95,"readable-stream/writable.js":96}],83:[function(require,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=="[object Array]"}},{}],84:[function(require,module,exports){module.exports=require("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":85}],85:[function(require,module,exports){"use strict";var processNextTick=require("process-nextick-args");var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj){keys.push(key)}return keys};module.exports=Duplex;var util=require("core-util-is");util.inherits=require("inherits");var Readable=require("./_stream_readable");var Writable=require("./_stream_writable");util.inherits(Duplex,Readable);var keys=objectKeys(Writable.prototype);for(var v=0;v<keys.length;v++){var method=keys[v];if(!Duplex.prototype[method])Duplex.prototype[method]=Writable.prototype[method]}function Duplex(options){if(!(this instanceof Duplex))return new Duplex(options);Readable.call(this,options);Writable.call(this,options);if(options&&options.readable===false)this.readable=false;if(options&&options.writable===false)this.writable=false;this.allowHalfOpen=true;if(options&&options.allowHalfOpen===false)this.allowHalfOpen=false;this.once("end",onend)}function onend(){if(this.allowHalfOpen||this._writableState.ended)return;processNextTick(onEndNT,this)}function onEndNT(self){self.end()}Object.defineProperty(Duplex.prototype,"destroyed",{get:function(){if(this._readableState===undefined||this._writableState===undefined){return false}return this._readableState.destroyed&&this._writableState.destroyed},set:function(value){if(this._readableState===undefined||this._writableState===undefined){return}this._readableState.destroyed=value;this._writableState.destroyed=value}});Duplex.prototype._destroy=function(err,cb){this.push(null);this.end();processNextTick(cb,err)};function forEach(xs,f){for(var i=0,l=xs.length;i<l;i++){f(xs[i],i)}}},{"./_stream_readable":87,"./_stream_writable":89,"core-util-is":9,inherits:26,"process-nextick-args":72}],86:[function(require,module,exports){"use strict";module.exports=PassThrough;var Transform=require("./_stream_transform");var util=require("core-util-is");util.inherits=require("inherits");util.inherits(PassThrough,Transform);function PassThrough(options){if(!(this instanceof PassThrough))return new PassThrough(options);Transform.call(this,options)}PassThrough.prototype._transform=function(chunk,encoding,cb){cb(null,chunk)}},{"./_stream_transform":88,"core-util-is":9,inherits:26}],87:[function(require,module,exports){(function(process){"use strict";var processNextTick=require("process-nextick-args");module.exports=Readable;var isArray=require("isarray");var Duplex;Readable.ReadableState=ReadableState;var EE=require("events").EventEmitter;var EElistenerCount=function(emitter,type){return emitter.listeners(type).length};var Stream=require("./internal/streams/stream");var Buffer=require("safe-buffer").Buffer;function _uint8ArrayToBuffer(chunk){return Buffer.from(chunk)}function _isUint8Array(obj){return Object.prototype.toString.call(obj)==="[object Uint8Array]"||Buffer.isBuffer(obj)}var util=require("core-util-is");util.inherits=require("inherits");var debugUtil=require("util");var debug=void 0;if(debugUtil&&debugUtil.debuglog){debug=debugUtil.debuglog("stream")}else{debug=function(){}}var BufferList=require("./internal/streams/BufferList");var destroyImpl=require("./internal/streams/destroy");var StringDecoder;util.inherits(Readable,Stream);var kProxyEvents=["error","close","destroy","pause","resume"];function prependListener(emitter,event,fn){if(typeof emitter.prependListener==="function"){return emitter.prependListener(event,fn)}else{if(!emitter._events||!emitter._events[event])emitter.on(event,fn);else if(isArray(emitter._events[event]))emitter._events[event].unshift(fn);else emitter._events[event]=[fn,emitter._events[event]]}}function ReadableState(options,stream){Duplex=Duplex||require("./_stream_duplex");options=options||{};this.objectMode=!!options.objectMode;if(stream instanceof Duplex)this.objectMode=this.objectMode||!!options.readableObjectMode;var hwm=options.highWaterMark;var defaultHwm=this.objectMode?16:16*1024;this.highWaterMark=hwm||hwm===0?hwm:defaultHwm;this.highWaterMark=Math.floor(this.highWaterMark);this.buffer=new BufferList;this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.ended=false;this.endEmitted=false;this.reading=false;this.sync=true;this.needReadable=false;this.emittedReadable=false;this.readableListening=false;this.resumeScheduled=false;this.destroyed=false;this.defaultEncoding=options.defaultEncoding||"utf8";this.awaitDrain=0;this.readingMore=false;this.decoder=null;this.encoding=null;if(options.encoding){if(!StringDecoder)StringDecoder=require("string_decoder/").StringDecoder;this.decoder=new StringDecoder(options.encoding);this.encoding=options.encoding}}function Readable(options){Duplex=Duplex||require("./_stream_duplex");if(!(this instanceof Readable))return new Readable(options);this._readableState=new ReadableState(options,this);this.readable=true;if(options){if(typeof options.read==="function")this._read=options.read;if(typeof options.destroy==="function")this._destroy=options.destroy}Stream.call(this)}Object.defineProperty(Readable.prototype,"destroyed",{get:function(){if(this._readableState===undefined){return false}return this._readableState.destroyed},set:function(value){if(!this._readableState){return}this._readableState.destroyed=value}});Readable.prototype.destroy=destroyImpl.destroy;Readable.prototype._undestroy=destroyImpl.undestroy;Readable.prototype._destroy=function(err,cb){this.push(null);cb(err)};Readable.prototype.push=function(chunk,encoding){var state=this._readableState;var skipChunkCheck;if(!state.objectMode){if(typeof chunk==="string"){encoding=encoding||state.defaultEncoding;if(encoding!==state.encoding){chunk=Buffer.from(chunk,encoding);encoding=""}skipChunkCheck=true}}else{skipChunkCheck=true}return readableAddChunk(this,chunk,encoding,false,skipChunkCheck)};Readable.prototype.unshift=function(chunk){return readableAddChunk(this,chunk,null,true,false)};function readableAddChunk(stream,chunk,encoding,addToFront,skipChunkCheck){var state=stream._readableState;if(chunk===null){state.reading=false;onEofChunk(stream,state)}else{var er;if(!skipChunkCheck)er=chunkInvalid(state,chunk);if(er){stream.emit("error",er)}else if(state.objectMode||chunk&&chunk.length>0){if(typeof chunk!=="string"&&Object.getPrototypeOf(chunk)!==Buffer.prototype&&!state.objectMode){chunk=_uint8ArrayToBuffer(chunk)}if(addToFront){if(state.endEmitted)stream.emit("error",new Error("stream.unshift() after end event"));else addChunk(stream,state,chunk,true)}else if(state.ended){stream.emit("error",new Error("stream.push() after EOF"))}else{state.reading=false;if(state.decoder&&!encoding){chunk=state.decoder.write(chunk);if(state.objectMode||chunk.length!==0)addChunk(stream,state,chunk,false);else maybeReadMore(stream,state)}else{addChunk(stream,state,chunk,false)}}}else if(!addToFront){state.reading=false}}return needMoreData(state)}function addChunk(stream,state,chunk,addToFront){if(state.flowing&&state.length===0&&!state.sync){stream.emit("data",chunk);stream.read(0)}else{state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream)}maybeReadMore(stream,state)}function chunkInvalid(state,chunk){var er;if(!_isUint8Array(chunk)&&typeof chunk!=="string"&&chunk!==undefined&&!state.objectMode){er=new TypeError("Invalid non-string/buffer chunk")}return er}function needMoreData(state){return!state.ended&&(state.needReadable||state.length<state.highWaterMark||state.length===0)}Readable.prototype.isPaused=function(){return this._readableState.flowing===false};Readable.prototype.setEncoding=function(enc){if(!StringDecoder)StringDecoder=require("string_decoder/").StringDecoder;this._readableState.decoder=new StringDecoder(enc);this._readableState.encoding=enc;return this};var MAX_HWM=8388608;function computeNewHighWaterMark(n){if(n>=MAX_HWM){n=MAX_HWM}else{n--;n|=n>>>1;n|=n>>>2;n|=n>>>4;n|=n>>>8;n|=n>>>16;n++}return n}function howMuchToRead(n,state){if(n<=0||state.length===0&&state.ended)return 0;if(state.objectMode)return 1;if(n!==n){if(state.flowing&&state.length)return state.buffer.head.data.length;else return state.length}if(n>state.highWaterMark)state.highWaterMark=computeNewHighWaterMark(n);if(n<=state.length)return n;if(!state.ended){state.needReadable=true;return 0}return state.length}Readable.prototype.read=function(n){debug("read",n);n=parseInt(n,10);var state=this._readableState;var nOrig=n;if(n!==0)state.emittedReadable=false;if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){debug("read: emitReadable",state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null}var doRead=state.needReadable;debug("need readable",doRead);if(state.length===0||state.length-n<state.highWaterMark){doRead=true;debug("length less than watermark",doRead)}if(state.ended||state.reading){doRead=false;debug("reading or ended",doRead)}else if(doRead){debug("do read");state.reading=true;state.sync=true;if(state.length===0)state.needReadable=true;this._read(state.highWaterMark);state.sync=false;if(!state.reading)n=howMuchToRead(nOrig,state)}var ret;if(n>0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=true;n=0}else{state.length-=n}if(state.length===0){if(!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended)endReadable(this)}if(ret!==null)this.emit("data",ret);return ret};function onEofChunk(stream,state){if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;emitReadable(stream)}function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(!state.emittedReadable){debug("emitReadable",state.flowing);state.emittedReadable=true;if(state.sync)processNextTick(emitReadable_,stream);else emitReadable_(stream)}}function emitReadable_(stream){debug("emit readable");stream.emit("readable");flow(stream)}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;processNextTick(maybeReadMore_,stream,state)}}function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length<state.highWaterMark){debug("maybeReadMore read 0");stream.read(0);if(len===state.length)break;else len=state.length}state.readingMore=false}Readable.prototype._read=function(n){this.emit("error",new Error("_read() is not implemented"))};Readable.prototype.pipe=function(dest,pipeOpts){var src=this;var state=this._readableState;switch(state.pipesCount){case 0:state.pipes=dest;break;case 1:state.pipes=[state.pipes,dest];break;default:state.pipes.push(dest);break}state.pipesCount+=1;debug("pipe count=%d opts=%j",state.pipesCount,pipeOpts);var doEnd=(!pipeOpts||pipeOpts.end!==false)&&dest!==process.stdout&&dest!==process.stderr;var endFn=doEnd?onend:unpipe;if(state.endEmitted)processNextTick(endFn);else src.once("end",endFn);dest.on("unpipe",onunpipe);function onunpipe(readable,unpipeInfo){debug("onunpipe");if(readable===src){if(unpipeInfo&&unpipeInfo.hasUnpiped===false){unpipeInfo.hasUnpiped=true;cleanup()}}}function onend(){debug("onend");dest.end()}var ondrain=pipeOnDrain(src);dest.on("drain",ondrain);var cleanedUp=false;function cleanup(){debug("cleanup");dest.removeListener("close",onclose);dest.removeListener("finish",onfinish);dest.removeListener("drain",ondrain);dest.removeListener("error",onerror);dest.removeListener("unpipe",onunpipe);src.removeListener("end",onend);src.removeListener("end",unpipe);src.removeListener("data",ondata);cleanedUp=true;if(state.awaitDrain&&(!dest._writableState||dest._writableState.needDrain))ondrain()}var increasedAwaitDrain=false;src.on("data",ondata);function ondata(chunk){debug("ondata");increasedAwaitDrain=false;var ret=dest.write(chunk);if(false===ret&&!increasedAwaitDrain){if((state.pipesCount===1&&state.pipes===dest||state.pipesCount>1&&indexOf(state.pipes,dest)!==-1)&&!cleanedUp){debug("false write response, pause",src._readableState.awaitDrain);src._readableState.awaitDrain++;increasedAwaitDrain=true}src.pause()}}function onerror(er){debug("onerror",er);unpipe();dest.removeListener("error",onerror);if(EElistenerCount(dest,"error")===0)dest.emit("error",er)}prependListener(dest,"error",onerror);function onclose(){dest.removeListener("finish",onfinish);unpipe()}dest.once("close",onclose);function onfinish(){debug("onfinish");dest.removeListener("close",onclose);unpipe()}dest.once("finish",onfinish);function unpipe(){debug("unpipe");src.unpipe(dest)}dest.emit("pipe",src);if(!state.flowing){debug("pipe resume");src.resume()}return dest};function pipeOnDrain(src){return function(){var state=src._readableState;debug("pipeOnDrain",state.awaitDrain);if(state.awaitDrain)state.awaitDrain--;if(state.awaitDrain===0&&EElistenerCount(src,"data")){state.flowing=true;flow(src)}}}Readable.prototype.unpipe=function(dest){var state=this._readableState;var unpipeInfo={hasUnpiped:false};if(state.pipesCount===0)return this;if(state.pipesCount===1){if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;state.pipes=null;state.pipesCount=0;state.flowing=false;if(dest)dest.emit("unpipe",this,unpipeInfo);return this}if(!dest){var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;state.flowing=false;for(var i=0;i<len;i++){dests[i].emit("unpipe",this,unpipeInfo)}return this}var index=indexOf(state.pipes,dest);if(index===-1)return this;state.pipes.splice(index,1);state.pipesCount-=1;if(state.pipesCount===1)state.pipes=state.pipes[0];dest.emit("unpipe",this,unpipeInfo);return this};Readable.prototype.on=function(ev,fn){var res=Stream.prototype.on.call(this,ev,fn);if(ev==="data"){if(this._readableState.flowing!==false)this.resume()}else if(ev==="readable"){var state=this._readableState;if(!state.endEmitted&&!state.readableListening){state.readableListening=state.needReadable=true;state.emittedReadable=false;if(!state.reading){processNextTick(nReadingNextTick,this)}else if(state.length){emitReadable(this)}}}return res};Readable.prototype.addListener=Readable.prototype.on;function nReadingNextTick(self){debug("readable nexttick read 0");self.read(0)}Readable.prototype.resume=function(){var state=this._readableState;if(!state.flowing){debug("resume");state.flowing=true;resume(this,state)}return this};function resume(stream,state){if(!state.resumeScheduled){state.resumeScheduled=true;processNextTick(resume_,stream,state)}}function resume_(stream,state){if(!state.reading){debug("resume read 0");stream.read(0)}state.resumeScheduled=false;state.awaitDrain=0;stream.emit("resume");flow(stream);if(state.flowing&&!state.reading)stream.read(0)}Readable.prototype.pause=function(){debug("call pause flowing=%j",this._readableState.flowing);if(false!==this._readableState.flowing){debug("pause");this._readableState.flowing=false;this.emit("pause")}return this};function flow(stream){var state=stream._readableState;debug("flow",state.flowing);while(state.flowing&&stream.read()!==null){}}Readable.prototype.wrap=function(stream){var state=this._readableState;var paused=false;var self=this;stream.on("end",function(){debug("wrapped end");if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)self.push(chunk)}self.push(null)});stream.on("data",function(chunk){debug("wrapped data");if(state.decoder)chunk=state.decoder.write(chunk);if(state.objectMode&&(chunk===null||chunk===undefined))return;else if(!state.objectMode&&(!chunk||!chunk.length))return;var ret=self.push(chunk);if(!ret){paused=true;stream.pause()}});for(var i in stream){if(this[i]===undefined&&typeof stream[i]==="function"){this[i]=function(method){return function(){return stream[method].apply(stream,arguments)}}(i)}}for(var n=0;n<kProxyEvents.length;n++){stream.on(kProxyEvents[n],self.emit.bind(self,kProxyEvents[n]))}self._read=function(n){debug("wrapped _read",n);if(paused){paused=false;stream.resume()}};return self};Readable._fromList=fromList;function fromList(n,state){if(state.length===0)return null;var ret;if(state.objectMode)ret=state.buffer.shift();else if(!n||n>=state.length){if(state.decoder)ret=state.buffer.join("");else if(state.buffer.length===1)ret=state.buffer.head.data;else ret=state.buffer.concat(state.length);state.buffer.clear()}else{ret=fromListPartial(n,state.buffer,state.decoder)}return ret}function fromListPartial(n,list,hasStrings){var ret;if(n<list.head.data.length){ret=list.head.data.slice(0,n);list.head.data=list.head.data.slice(n)}else if(n===list.head.data.length){ret=list.shift()}else{ret=hasStrings?copyFromBufferString(n,list):copyFromBuffer(n,list)}return ret}function copyFromBufferString(n,list){var p=list.head;var c=1;var ret=p.data;n-=ret.length;while(p=p.next){var str=p.data;var nb=n>str.length?str.length:n;if(nb===str.length)ret+=str;else ret+=str.slice(0,n);n-=nb;if(n===0){if(nb===str.length){++c;if(p.next)list.head=p.next;else list.head=list.tail=null}else{list.head=p;p.data=str.slice(nb)}break}++c}list.length-=c;return ret}function copyFromBuffer(n,list){var ret=Buffer.allocUnsafe(n);var p=list.head;var c=1;p.data.copy(ret);n-=p.data.length;while(p=p.next){var buf=p.data;var nb=n>buf.length?buf.length:n;buf.copy(ret,ret.length-n,0,nb);n-=nb;if(n===0){if(nb===buf.length){++c;if(p.next)list.head=p.next;else list.head=list.tail=null}else{list.head=p;p.data=buf.slice(nb)}break}++c}list.length-=c;return ret}function endReadable(stream){var state=stream._readableState;if(state.length>0)throw new Error('"endReadable()" called on non-empty stream');if(!state.endEmitted){state.ended=true;processNextTick(endReadableNT,state,stream)}}function endReadableNT(state,stream){if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end")}}function forEach(xs,f){for(var i=0,l=xs.length;i<l;i++){f(xs[i],i)}}function indexOf(xs,x){for(var i=0,l=xs.length;i<l;i++){if(xs[i]===x)return i}return-1}}).call(this,require("_process"))},{"./_stream_duplex":85,"./internal/streams/BufferList":90,"./internal/streams/destroy":91,"./internal/streams/stream":92,_process:73,"core-util-is":9,events:14,inherits:26,isarray:83,"process-nextick-args":72,"safe-buffer":80,"string_decoder/":97,util:4}],88:[function(require,module,exports){"use strict";module.exports=Transform;var Duplex=require("./_stream_duplex");var util=require("core-util-is");util.inherits=require("inherits");util.inherits(Transform,Duplex);function TransformState(stream){this.afterTransform=function(er,data){return afterTransform(stream,er,data)};this.needTransform=false;this.transforming=false;this.writecb=null;this.writechunk=null;this.writeencoding=null}function afterTransform(stream,er,data){var ts=stream._transformState;ts.transforming=false;var cb=ts.writecb;if(!cb){return stream.emit("error",new Error("write callback called multiple times"))}ts.writechunk=null;ts.writecb=null;if(data!==null&&data!==undefined)stream.push(data);cb(er);var rs=stream._readableState;rs.reading=false;if(rs.needReadable||rs.length<rs.highWaterMark){stream._read(rs.highWaterMark)}}function Transform(options){if(!(this instanceof Transform))return new Transform(options);Duplex.call(this,options);this._transformState=new TransformState(this);var stream=this;this._readableState.needReadable=true;this._readableState.sync=false;if(options){if(typeof options.transform==="function")this._transform=options.transform;if(typeof options.flush==="function")this._flush=options.flush}this.once("prefinish",function(){if(typeof this._flush==="function")this._flush(function(er,data){done(stream,er,data)});else done(stream)})}Transform.prototype.push=function(chunk,encoding){this._transformState.needTransform=false;return Duplex.prototype.push.call(this,chunk,encoding)};Transform.prototype._transform=function(chunk,encoding,cb){throw new Error("_transform() is not implemented")};Transform.prototype._write=function(chunk,encoding,cb){var ts=this._transformState;ts.writecb=cb;ts.writechunk=chunk;ts.writeencoding=encoding;if(!ts.transforming){var rs=this._readableState;if(ts.needTransform||rs.needReadable||rs.length<rs.highWaterMark)this._read(rs.highWaterMark)}};Transform.prototype._read=function(n){var ts=this._transformState;if(ts.writechunk!==null&&ts.writecb&&!ts.transforming){ts.transforming=true;this._transform(ts.writechunk,ts.writeencoding,ts.afterTransform)}else{ts.needTransform=true}};Transform.prototype._destroy=function(err,cb){var _this=this;Duplex.prototype._destroy.call(this,err,function(err2){cb(err2);_this.emit("close")})};function done(stream,er,data){if(er)return stream.emit("error",er);if(data!==null&&data!==undefined)stream.push(data);var ws=stream._writableState;var ts=stream._transformState;if(ws.length)throw new Error("Calling transform done when ws.length != 0");if(ts.transforming)throw new Error("Calling transform done when still transforming");return stream.push(null)}},{"./_stream_duplex":85,"core-util-is":9,inherits:26}],89:[function(require,module,exports){(function(process){"use strict";var processNextTick=require("process-nextick-args");module.exports=Writable;function WriteReq(chunk,encoding,cb){this.chunk=chunk;this.encoding=encoding;this.callback=cb;this.next=null}function CorkedRequest(state){var _this=this;this.next=null;this.entry=null;this.finish=function(){onCorkedFinish(_this,state)}}var asyncWrite=!process.browser&&["v0.10","v0.9."].indexOf(process.version.slice(0,5))>-1?setImmediate:processNextTick;var Duplex;Writable.WritableState=WritableState;var util=require("core-util-is");util.inherits=require("inherits");var internalUtil={deprecate:require("util-deprecate")};var Stream=require("./internal/streams/stream");var Buffer=require("safe-buffer").Buffer;function _uint8ArrayToBuffer(chunk){return Buffer.from(chunk)}function _isUint8Array(obj){return Object.prototype.toString.call(obj)==="[object Uint8Array]"||Buffer.isBuffer(obj)}var destroyImpl=require("./internal/streams/destroy");util.inherits(Writable,Stream);function nop(){}function WritableState(options,stream){Duplex=Duplex||require("./_stream_duplex");options=options||{};this.objectMode=!!options.objectMode;if(stream instanceof Duplex)this.objectMode=this.objectMode||!!options.writableObjectMode;var hwm=options.highWaterMark;var defaultHwm=this.objectMode?16:16*1024;this.highWaterMark=hwm||hwm===0?hwm:defaultHwm;this.highWaterMark=Math.floor(this.highWaterMark);this.finalCalled=false;this.needDrain=false;this.ending=false;this.ended=false;this.finished=false;this.destroyed=false;var noDecode=options.decodeStrings===false;this.decodeStrings=!noDecode;this.defaultEncoding=options.defaultEncoding||"utf8";this.length=0;this.writing=false;this.corked=0;this.sync=true;this.bufferProcessing=false;this.onwrite=function(er){onwrite(stream,er)};this.writecb=null;this.writelen=0;this.bufferedRequest=null;this.lastBufferedRequest=null;this.pendingcb=0;this.prefinished=false;this.errorEmitted=false;this.bufferedRequestCount=0;this.corkedRequestsFree=new CorkedRequest(this)}WritableState.prototype.getBuffer=function getBuffer(){var current=this.bufferedRequest;var out=[];while(current){out.push(current);current=current.next}return out};(function(){try{Object.defineProperty(WritableState.prototype,"buffer",{get:internalUtil.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer "+"instead.","DEP0003")})}catch(_){}})();var realHasInstance;if(typeof Symbol==="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==="function"){realHasInstance=Function.prototype[Symbol.hasInstance];Object.defineProperty(Writable,Symbol.hasInstance,{value:function(object){if(realHasInstance.call(this,object))return true;return object&&object._writableState instanceof WritableState}})}else{realHasInstance=function(object){return object instanceof this}}function Writable(options){Duplex=Duplex||require("./_stream_duplex");if(!realHasInstance.call(Writable,this)&&!(this instanceof Duplex)){return new Writable(options)}this._writableState=new WritableState(options,this);this.writable=true;if(options){if(typeof options.write==="function")this._write=options.write;if(typeof options.writev==="function")this._writev=options.writev;if(typeof options.destroy==="function")this._destroy=options.destroy;if(typeof options.final==="function")this._final=options.final}Stream.call(this)}Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function writeAfterEnd(stream,cb){var er=new Error("write after end");stream.emit("error",er);processNextTick(cb,er)}function validChunk(stream,state,chunk,cb){var valid=true;var er=false;if(chunk===null){er=new TypeError("May not write null values to stream")}else if(typeof chunk!=="string"&&chunk!==undefined&&!state.objectMode){er=new TypeError("Invalid non-string/buffer chunk")}if(er){stream.emit("error",er);processNextTick(cb,er);valid=false}return valid}Writable.prototype.write=function(chunk,encoding,cb){var state=this._writableState;var ret=false;var isBuf=_isUint8Array(chunk)&&!state.objectMode;if(isBuf&&!Buffer.isBuffer(chunk)){chunk=_uint8ArrayToBuffer(chunk)}if(typeof encoding==="function"){cb=encoding;encoding=null}if(isBuf)encoding="buffer";else if(!encoding)encoding=state.defaultEncoding;if(typeof cb!=="function")cb=nop;if(state.ended)writeAfterEnd(this,cb);else if(isBuf||validChunk(this,state,chunk,cb)){state.pendingcb++;ret=writeOrBuffer(this,state,isBuf,chunk,encoding,cb)}return ret};Writable.prototype.cork=function(){var state=this._writableState;state.corked++};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.finished&&!state.bufferProcessing&&state.bufferedRequest)clearBuffer(this,state)}};Writable.prototype.setDefaultEncoding=function setDefaultEncoding(encoding){if(typeof encoding==="string")encoding=encoding.toLowerCase();if(!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((encoding+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+encoding);this._writableState.defaultEncoding=encoding;return this};function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==="string"){chunk=Buffer.from(chunk,encoding)}return chunk}function writeOrBuffer(stream,state,isBuf,chunk,encoding,cb){if(!isBuf){var newChunk=decodeChunk(state,chunk,encoding);if(chunk!==newChunk){isBuf=true;encoding="buffer";chunk=newChunk}}var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length<state.highWaterMark;if(!ret)state.needDrain=true;if(state.writing||state.corked){var last=state.lastBufferedRequest;state.lastBufferedRequest={chunk:chunk,encoding:encoding,isBuf:isBuf,callback:cb,next:null};if(last){last.next=state.lastBufferedRequest}else{state.bufferedRequest=state.lastBufferedRequest}state.bufferedRequestCount+=1}else{doWrite(stream,state,false,len,chunk,encoding,cb)}return ret}function doWrite(stream,state,writev,len,chunk,encoding,cb){state.writelen=len;state.writecb=cb;state.writing=true;state.sync=true;if(writev)stream._writev(chunk,state.onwrite);else stream._write(chunk,encoding,state.onwrite);state.sync=false}function onwriteError(stream,state,sync,er,cb){--state.pendingcb;if(sync){processNextTick(cb,er);processNextTick(finishMaybe,stream,state);stream._writableState.errorEmitted=true;stream.emit("error",er)}else{cb(er);stream._writableState.errorEmitted=true;stream.emit("error",er);finishMaybe(stream,state)}}function onwriteStateUpdate(state){state.writing=false;state.writecb=null;state.length-=state.writelen;state.writelen=0}function onwrite(stream,er){var state=stream._writableState;var sync=state.sync;var cb=state.writecb;onwriteStateUpdate(state);if(er)onwriteError(stream,state,sync,er,cb);else{var finished=needFinish(state);if(!finished&&!state.corked&&!state.bufferProcessing&&state.bufferedRequest){clearBuffer(stream,state)}if(sync){asyncWrite(afterWrite,stream,state,finished,cb)}else{afterWrite(stream,state,finished,cb)}}}function afterWrite(stream,state,finished,cb){if(!finished)onwriteDrain(stream,state);state.pendingcb--;cb();finishMaybe(stream,state)}function onwriteDrain(stream,state){if(state.length===0&&state.needDrain){state.needDrain=false;stream.emit("drain")}}function clearBuffer(stream,state){state.bufferProcessing=true;var entry=state.bufferedRequest;if(stream._writev&&entry&&entry.next){var l=state.bufferedRequestCount;var buffer=new Array(l);var holder=state.corkedRequestsFree;holder.entry=entry;var count=0;var allBuffers=true;while(entry){buffer[count]=entry;if(!entry.isBuf)allBuffers=false;entry=entry.next;count+=1}buffer.allBuffers=allBuffers;doWrite(stream,state,true,state.length,buffer,"",holder.finish);state.pendingcb++;state.lastBufferedRequest=null;if(holder.next){state.corkedRequestsFree=holder.next;holder.next=null}else{state.corkedRequestsFree=new CorkedRequest(state)}}else{while(entry){var chunk=entry.chunk;var encoding=entry.encoding;var cb=entry.callback;var len=state.objectMode?1:chunk.length;doWrite(stream,state,false,len,chunk,encoding,cb);entry=entry.next;if(state.writing){break}}if(entry===null)state.lastBufferedRequest=null}state.bufferedRequestCount=0;state.bufferedRequest=entry;state.bufferProcessing=false}Writable.prototype._write=function(chunk,encoding,cb){cb(new Error("_write() is not implemented"))};Writable.prototype._writev=null;Writable.prototype.end=function(chunk,encoding,cb){var state=this._writableState;if(typeof chunk==="function"){cb=chunk;chunk=null;encoding=null}else if(typeof encoding==="function"){cb=encoding;encoding=null}if(chunk!==null&&chunk!==undefined)this.write(chunk,encoding);if(state.corked){state.corked=1;this.uncork()}if(!state.ending&&!state.finished)endWritable(this,state,cb)};function needFinish(state){return state.ending&&state.length===0&&state.bufferedRequest===null&&!state.finished&&!state.writing}function callFinal(stream,state){stream._final(function(err){state.pendingcb--;if(err){stream.emit("error",err)}state.prefinished=true;stream.emit("prefinish");finishMaybe(stream,state)})}function prefinish(stream,state){if(!state.prefinished&&!state.finalCalled){if(typeof stream._final==="function"){state.pendingcb++;state.finalCalled=true;processNextTick(callFinal,stream,state)}else{state.prefinished=true;stream.emit("prefinish")}}}function finishMaybe(stream,state){var need=needFinish(state);if(need){prefinish(stream,state);if(state.pendingcb===0){state.finished=true;stream.emit("finish")}}return need}function endWritable(stream,state,cb){state.ending=true;finishMaybe(stream,state);if(cb){if(state.finished)processNextTick(cb);else stream.once("finish",cb)}state.ended=true;stream.writable=false}function onCorkedFinish(corkReq,state,err){var entry=corkReq.entry;corkReq.entry=null;while(entry){var cb=entry.callback;state.pendingcb--;cb(err);entry=entry.next}if(state.corkedRequestsFree){state.corkedRequestsFree.next=corkReq}else{state.corkedRequestsFree=corkReq}}Object.defineProperty(Writable.prototype,"destroyed",{get:function(){if(this._writableState===undefined){return false}return this._writableState.destroyed},set:function(value){if(!this._writableState){return}this._writableState.destroyed=value}});Writable.prototype.destroy=destroyImpl.destroy;Writable.prototype._undestroy=destroyImpl.undestroy;Writable.prototype._destroy=function(err,cb){this.end();cb(err)}}).call(this,require("_process"))},{"./_stream_duplex":85,"./internal/streams/destroy":91,"./internal/streams/stream":92,_process:73,"core-util-is":9,inherits:26,"process-nextick-args":72,"safe-buffer":80,"util-deprecate":101}],90:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var Buffer=require("safe-buffer").Buffer;function copyBuffer(src,target,offset){src.copy(target,offset)}module.exports=function(){function BufferList(){_classCallCheck(this,BufferList);this.head=null;this.tail=null;this.length=0}BufferList.prototype.push=function push(v){var entry={data:v,next:null};if(this.length>0)this.tail.next=entry;else this.head=entry;this.tail=entry;++this.length};BufferList.prototype.unshift=function unshift(v){var entry={data:v,next:this.head};if(this.length===0)this.tail=entry;this.head=entry;++this.length};BufferList.prototype.shift=function shift(){if(this.length===0)return;var ret=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;--this.length;return ret};BufferList.prototype.clear=function clear(){this.head=this.tail=null;this.length=0};BufferList.prototype.join=function join(s){if(this.length===0)return"";var p=this.head;var ret=""+p.data;while(p=p.next){ret+=s+p.data}return ret};BufferList.prototype.concat=function concat(n){if(this.length===0)return Buffer.alloc(0);if(this.length===1)return this.head.data;var ret=Buffer.allocUnsafe(n>>>0);var p=this.head;var i=0;while(p){copyBuffer(p.data,ret,i);i+=p.data.length;p=p.next}return ret};return BufferList}()},{"safe-buffer":80}],91:[function(require,module,exports){"use strict";var processNextTick=require("process-nextick-args");function destroy(err,cb){var _this=this;var readableDestroyed=this._readableState&&this._readableState.destroyed;var writableDestroyed=this._writableState&&this._writableState.destroyed;if(readableDestroyed||writableDestroyed){if(cb){cb(err)}else if(err&&(!this._writableState||!this._writableState.errorEmitted)){processNextTick(emitErrorNT,this,err)}return}if(this._readableState){this._readableState.destroyed=true}if(this._writableState){this._writableState.destroyed=true}this._destroy(err||null,function(err){if(!cb&&err){processNextTick(emitErrorNT,_this,err);if(_this._writableState){_this._writableState.errorEmitted=true}}else if(cb){cb(err)}})}function undestroy(){if(this._readableState){this._readableState.destroyed=false;this._readableState.reading=false;this._readableState.ended=false;this._readableState.endEmitted=false}if(this._writableState){this._writableState.destroyed=false;this._writableState.ended=false;this._writableState.ending=false;this._writableState.finished=false;this._writableState.errorEmitted=false}}function emitErrorNT(self,err){self.emit("error",err)}module.exports={destroy:destroy,undestroy:undestroy}},{"process-nextick-args":72}],92:[function(require,module,exports){module.exports=require("events").EventEmitter},{events:14}],93:[function(require,module,exports){module.exports=require("./readable").PassThrough},{"./readable":94}],94:[function(require,module,exports){exports=module.exports=require("./lib/_stream_readable.js");exports.Stream=exports;exports.Readable=exports;exports.Writable=require("./lib/_stream_writable.js");exports.Duplex=require("./lib/_stream_duplex.js");exports.Transform=require("./lib/_stream_transform.js");exports.PassThrough=require("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":85,"./lib/_stream_passthrough.js":86,"./lib/_stream_readable.js":87,"./lib/_stream_transform.js":88,"./lib/_stream_writable.js":89}],95:[function(require,module,exports){module.exports=require("./readable").Transform},{"./readable":94}],96:[function(require,module,exports){module.exports=require("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":89}],97:[function(require,module,exports){"use strict";var Buffer=require("safe-buffer").Buffer;var isEncoding=Buffer.isEncoding||function(encoding){encoding=""+encoding;switch(encoding&&encoding.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return true;default:return false}};function _normalizeEncoding(enc){if(!enc)return"utf8";var retried;while(true){switch(enc){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return enc;default:if(retried)return;enc=(""+enc).toLowerCase();retried=true}}}function normalizeEncoding(enc){var nenc=_normalizeEncoding(enc);if(typeof nenc!=="string"&&(Buffer.isEncoding===isEncoding||!isEncoding(enc)))throw new Error("Unknown encoding: "+enc);return nenc||enc}exports.StringDecoder=StringDecoder;function StringDecoder(encoding){this.encoding=normalizeEncoding(encoding);var nb;switch(this.encoding){case"utf16le":this.text=utf16Text;this.end=utf16End;nb=4;break;case"utf8":this.fillLast=utf8FillLast;nb=4;break;case"base64":this.text=base64Text;this.end=base64End;nb=3;break;default:this.write=simpleWrite;this.end=simpleEnd;return}this.lastNeed=0;this.lastTotal=0;this.lastChar=Buffer.allocUnsafe(nb)}StringDecoder.prototype.write=function(buf){if(buf.length===0)return"";var r;var i;if(this.lastNeed){r=this.fillLast(buf);if(r===undefined)return"";i=this.lastNeed;this.lastNeed=0}else{i=0}if(i<buf.length)return r?r+this.text(buf,i):this.text(buf,i);return r||""};StringDecoder.prototype.end=utf8End;StringDecoder.prototype.text=utf8Text;StringDecoder.prototype.fillLast=function(buf){if(this.lastNeed<=buf.length){buf.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed);return this.lastChar.toString(this.encoding,0,this.lastTotal)}buf.copy(this.lastChar,this.lastTotal-this.lastNeed,0,buf.length);this.lastNeed-=buf.length};function utf8CheckByte(byte){if(byte<=127)return 0;else if(byte>>5===6)return 2;else if(byte>>4===14)return 3;else if(byte>>3===30)return 4;return-1}function utf8CheckIncomplete(self,buf,i){var j=buf.length-1;if(j<i)return 0;var nb=utf8CheckByte(buf[j]);if(nb>=0){if(nb>0)self.lastNeed=nb-1;return nb}if(--j<i)return 0;nb=utf8CheckByte(buf[j]);if(nb>=0){if(nb>0)self.lastNeed=nb-2;return nb}if(--j<i)return 0;nb=utf8CheckByte(buf[j]);if(nb>=0){if(nb>0){if(nb===2)nb=0;else self.lastNeed=nb-3}return nb}return 0}function utf8CheckExtraBytes(self,buf,p){if((buf[0]&192)!==128){self.lastNeed=0;return"�".repeat(p)}if(self.lastNeed>1&&buf.length>1){if((buf[1]&192)!==128){self.lastNeed=1;return"�".repeat(p+1)}if(self.lastNeed>2&&buf.length>2){if((buf[2]&192)!==128){self.lastNeed=2;return"�".repeat(p+2)}}}}function utf8FillLast(buf){var p=this.lastTotal-this.lastNeed;var r=utf8CheckExtraBytes(this,buf,p);if(r!==undefined)return r;if(this.lastNeed<=buf.length){buf.copy(this.lastChar,p,0,this.lastNeed);return this.lastChar.toString(this.encoding,0,this.lastTotal)}buf.copy(this.lastChar,p,0,buf.length);this.lastNeed-=buf.length}function utf8Text(buf,i){var total=utf8CheckIncomplete(this,buf,i);if(!this.lastNeed)return buf.toString("utf8",i);this.lastTotal=total;var end=buf.length-(total-this.lastNeed);buf.copy(this.lastChar,0,end);return buf.toString("utf8",i,end)}function utf8End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed)return r+"�".repeat(this.lastTotal-this.lastNeed);return r}function utf16Text(buf,i){if((buf.length-i)%2===0){var r=buf.toString("utf16le",i);if(r){var c=r.charCodeAt(r.length-1);if(c>=55296&&c<=56319){this.lastNeed=2;this.lastTotal=4;this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1];return r.slice(0,-1)}}return r}this.lastNeed=1;this.lastTotal=2;this.lastChar[0]=buf[buf.length-1];return buf.toString("utf16le",i,buf.length-1)}function utf16End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed){var end=this.lastTotal-this.lastNeed;return r+this.lastChar.toString("utf16le",0,end)}return r}function base64Text(buf,i){var n=(buf.length-i)%3;if(n===0)return buf.toString("base64",i);this.lastNeed=3-n;this.lastTotal=3;if(n===1){this.lastChar[0]=buf[buf.length-1]}else{this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1]}return buf.toString("base64",i,buf.length-n)}function base64End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed)return r+this.lastChar.toString("base64",0,3-this.lastNeed);return r}function simpleWrite(buf){return buf.toString(this.encoding)}function simpleEnd(buf){return buf&&buf.length?this.write(buf):""}},{"safe-buffer":80}],98:[function(require,module,exports){var Buffer=require("buffer").Buffer;var isBufferEncoding=Buffer.isEncoding||function(encoding){switch(encoding&&encoding.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return true;default:return false}};function assertEncoding(encoding){if(encoding&&!isBufferEncoding(encoding)){throw new Error("Unknown encoding: "+encoding)}}var StringDecoder=exports.StringDecoder=function(encoding){this.encoding=(encoding||"utf8").toLowerCase().replace(/[-_]/,"");assertEncoding(encoding);switch(this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2;this.detectIncompleteChar=utf16DetectIncompleteChar;break;case"base64":this.surrogateSize=3;this.detectIncompleteChar=base64DetectIncompleteChar;break;default:this.write=passThroughWrite;return}this.charBuffer=new Buffer(6);this.charReceived=0;this.charLength=0};StringDecoder.prototype.write=function(buffer){var charStr="";while(this.charLength){var available=buffer.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:buffer.length;buffer.copy(this.charBuffer,this.charReceived,0,available);this.charReceived+=available;if(this.charReceived<this.charLength){return""}buffer=buffer.slice(available,buffer.length);charStr=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var charCode=charStr.charCodeAt(charStr.length-1);if(charCode>=55296&&charCode<=56319){this.charLength+=this.surrogateSize;charStr="";continue}this.charReceived=this.charLength=0;if(buffer.length===0){return charStr}break}this.detectIncompleteChar(buffer);var end=buffer.length;if(this.charLength){buffer.copy(this.charBuffer,0,buffer.length-this.charReceived,end);end-=this.charReceived}charStr+=buffer.toString(this.encoding,0,end);var end=charStr.length-1;var charCode=charStr.charCodeAt(end);if(charCode>=55296&&charCode<=56319){var size=this.surrogateSize;this.charLength+=size;this.charReceived+=size;this.charBuffer.copy(this.charBuffer,size,0,size);buffer.copy(this.charBuffer,0,0,size);return charStr.substring(0,end)}return charStr};StringDecoder.prototype.detectIncompleteChar=function(buffer){var i=buffer.length>=3?3:buffer.length;for(;i>0;i--){var c=buffer[buffer.length-i];if(i==1&&c>>5==6){this.charLength=2;break}if(i<=2&&c>>4==14){this.charLength=3;break}if(i<=3&&c>>3==30){this.charLength=4;break}}this.charReceived=i};StringDecoder.prototype.end=function(buffer){var res="";if(buffer&&buffer.length)res=this.write(buffer);if(this.charReceived){var cr=this.charReceived;var buf=this.charBuffer;var enc=this.encoding;res+=buf.slice(0,cr).toString(enc)}return res};function passThroughWrite(buffer){return buffer.toString(this.encoding)}function utf16DetectIncompleteChar(buffer){this.charReceived=buffer.length%2;this.charLength=this.charReceived?2:0}function base64DetectIncompleteChar(buffer){this.charReceived=buffer.length%3;this.charLength=this.charReceived?3:0}},{buffer:7}],99:[function(require,module,exports){(function(process){var Stream=require("stream");exports=module.exports=through;through.through=through;function through(write,end,opts){write=write||function(data){this.queue(data)};end=end||function(){this.queue(null)};var ended=false,destroyed=false,buffer=[],_ended=false;var stream=new Stream;stream.readable=stream.writable=true;stream.paused=false;stream.autoDestroy=!(opts&&opts.autoDestroy===false);stream.write=function(data){write.call(this,data);return!stream.paused};function drain(){while(buffer.length&&!stream.paused){var data=buffer.shift();if(null===data)return stream.emit("end");else stream.emit("data",data)}}stream.queue=stream.push=function(data){if(_ended)return stream;if(data===null)_ended=true;buffer.push(data);drain();return stream};stream.on("end",function(){stream.readable=false;if(!stream.writable&&stream.autoDestroy)process.nextTick(function(){stream.destroy()})});function _end(){stream.writable=false;end.call(stream);if(!stream.readable&&stream.autoDestroy)stream.destroy()}stream.end=function(data){if(ended)return;ended=true;if(arguments.length)stream.write(data);_end();return stream};stream.destroy=function(){if(destroyed)return;destroyed=true;ended=true;buffer.length=0;stream.writable=stream.readable=false;stream.emit("close");return stream};stream.pause=function(){if(stream.paused)return;stream.paused=true;return stream};stream.resume=function(){if(stream.paused){stream.paused=false;stream.emit("resume")}drain();if(!stream.paused)stream.emit("drain");return stream};return stream}}).call(this,require("_process"))},{_process:73,stream:82}],100:[function(require,module,exports){"use strict";function unique_pred(list,compare){var ptr=1,len=list.length,a=list[0],b=list[0];for(var i=1;i<len;++i){b=a;a=list[i];if(compare(a,b)){if(i===ptr){ptr++;continue}list[ptr++]=a}}list.length=ptr;return list}function unique_eq(list){var ptr=1,len=list.length,a=list[0],b=list[0];for(var i=1;i<len;++i,b=a){b=a;a=list[i];if(a!==b){if(i===ptr){ptr++;continue}list[ptr++]=a}}list.length=ptr;return list}function unique(list,compare,sorted){if(list.length===0){return list}if(compare){if(!sorted){list.sort(compare)}return unique_pred(list,compare)}if(!sorted){list.sort()}return unique_eq(list)}module.exports=unique},{}],101:[function(require,module,exports){(function(global){module.exports=deprecate;function deprecate(fn,msg){if(config("noDeprecation")){return fn}var warned=false;function deprecated(){if(!warned){if(config("throwDeprecation")){throw new Error(msg)}else if(config("traceDeprecation")){console.trace(msg)}else{console.warn(msg)}warned=true}return fn.apply(this,arguments)}return deprecated}function config(name){try{if(!global.localStorage)return false}catch(_){return false}var val=global.localStorage[name];if(null==val)return false;return String(val).toLowerCase()==="true"}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],102:[function(require,module,exports){arguments[4][26][0].apply(exports,arguments)},{dup:26}],103:[function(require,module,exports){module.exports=function isBuffer(arg){return arg&&typeof arg==="object"&&typeof arg.copy==="function"&&typeof arg.fill==="function"&&typeof arg.readUInt8==="function"}},{}],104:[function(require,module,exports){(function(process,global){var formatRegExp=/%[sdj%]/g;exports.format=function(f){if(!isString(f)){var objects=[];for(var i=0;i<arguments.length;i++){objects.push(inspect(arguments[i]))}return objects.join(" ")}var i=1;var args=arguments;var len=args.length;var str=String(f).replace(formatRegExp,function(x){if(x==="%%")return"%";if(i>=len)return x;switch(x){case"%s":return String(args[i++]);case"%d":return Number(args[i++]);case"%j":try{return JSON.stringify(args[i++])}catch(_){return"[Circular]"}default:return x}});for(var x=args[i];i<len;x=args[++i]){if(isNull(x)||!isObject(x)){str+=" "+x}else{str+=" "+inspect(x)}}return str};exports.deprecate=function(fn,msg){if(isUndefined(global.process)){return function(){return exports.deprecate(fn,msg).apply(this,arguments)}}if(process.noDeprecation===true){return fn}var warned=false;function deprecated(){if(!warned){if(process.throwDeprecation){throw new Error(msg)}else if(process.traceDeprecation){console.trace(msg)}else{console.error(msg)}warned=true}return fn.apply(this,arguments)}return deprecated};var debugs={};var debugEnviron;exports.debuglog=function(set){if(isUndefined(debugEnviron))debugEnviron=process.env.NODE_DEBUG||"";set=set.toUpperCase();if(!debugs[set]){if(new RegExp("\\b"+set+"\\b","i").test(debugEnviron)){var pid=process.pid;debugs[set]=function(){var msg=exports.format.apply(exports,arguments);console.error("%s %d: %s",set,pid,msg)}}else{debugs[set]=function(){}}}return debugs[set]};function inspect(obj,opts){var ctx={seen:[],stylize:stylizeNoColor};if(arguments.length>=3)ctx.depth=arguments[2];if(arguments.length>=4)ctx.colors=arguments[3];if(isBoolean(opts)){ctx.showHidden=opts}else if(opts){exports._extend(ctx,opts)}if(isUndefined(ctx.showHidden))ctx.showHidden=false;if(isUndefined(ctx.depth))ctx.depth=2;if(isUndefined(ctx.colors))ctx.colors=false;if(isUndefined(ctx.customInspect))ctx.customInspect=true;if(ctx.colors)ctx.stylize=stylizeWithColor;return formatValue(ctx,obj,ctx.depth)}exports.inspect=inspect;inspect.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};inspect.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function stylizeWithColor(str,styleType){var style=inspect.styles[styleType];if(style){return"["+inspect.colors[style][0]+"m"+str+"["+inspect.colors[style][1]+"m"}else{return str}}function stylizeNoColor(str,styleType){return str}function arrayToHash(array){var hash={};array.forEach(function(val,idx){hash[val]=true});return hash}function formatValue(ctx,value,recurseTimes){if(ctx.customInspect&&value&&isFunction(value.inspect)&&value.inspect!==exports.inspect&&!(value.constructor&&value.constructor.prototype===value)){var ret=value.inspect(recurseTimes,ctx);if(!isString(ret)){ret=formatValue(ctx,ret,recurseTimes)}return ret}var primitive=formatPrimitive(ctx,value);if(primitive){return primitive}var keys=Object.keys(value);var visibleKeys=arrayToHash(keys);if(ctx.showHidden){keys=Object.getOwnPropertyNames(value)}if(isError(value)&&(keys.indexOf("message")>=0||keys.indexOf("description")>=0)){return formatError(value)}if(keys.length===0){if(isFunction(value)){var name=value.name?": "+value.name:"";return ctx.stylize("[Function"+name+"]","special")}if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}if(isDate(value)){return ctx.stylize(Date.prototype.toString.call(value),"date")}if(isError(value)){return formatError(value)}}var base="",array=false,braces=["{","}"];if(isArray(value)){array=true;braces=["[","]"]}if(isFunction(value)){var n=value.name?": "+value.name:"";base=" [Function"+n+"]"}if(isRegExp(value)){base=" "+RegExp.prototype.toString.call(value)}if(isDate(value)){base=" "+Date.prototype.toUTCString.call(value)}if(isError(value)){base=" "+formatError(value)}if(keys.length===0&&(!array||value.length==0)){return braces[0]+base+braces[1]}if(recurseTimes<0){if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}else{return ctx.stylize("[Object]","special")}}ctx.seen.push(value);var output;if(array){output=formatArray(ctx,value,recurseTimes,visibleKeys,keys)}else{output=keys.map(function(key){return formatProperty(ctx,value,recurseTimes,visibleKeys,key,array)})}ctx.seen.pop();return reduceToSingleString(output,base,braces)}function formatPrimitive(ctx,value){if(isUndefined(value))return ctx.stylize("undefined","undefined");if(isString(value)){var simple="'"+JSON.stringify(value).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return ctx.stylize(simple,"string")}if(isNumber(value))return ctx.stylize(""+value,"number");if(isBoolean(value))return ctx.stylize(""+value,"boolean");if(isNull(value))return ctx.stylize("null","null")}function formatError(value){return"["+Error.prototype.toString.call(value)+"]"}function formatArray(ctx,value,recurseTimes,visibleKeys,keys){var output=[];for(var i=0,l=value.length;i<l;++i){if(hasOwnProperty(value,String(i))){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,String(i),true))}else{output.push("")}}keys.forEach(function(key){if(!key.match(/^\d+$/)){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,key,true))}});return output}function formatProperty(ctx,value,recurseTimes,visibleKeys,key,array){var name,str,desc;desc=Object.getOwnPropertyDescriptor(value,key)||{value:value[key]};if(desc.get){if(desc.set){str=ctx.stylize("[Getter/Setter]","special")}else{str=ctx.stylize("[Getter]","special")}}else{if(desc.set){str=ctx.stylize("[Setter]","special")}}if(!hasOwnProperty(visibleKeys,key)){name="["+key+"]"}if(!str){if(ctx.seen.indexOf(desc.value)<0){if(isNull(recurseTimes)){str=formatValue(ctx,desc.value,null)}else{str=formatValue(ctx,desc.value,recurseTimes-1)}if(str.indexOf("\n")>-1){if(array){str=str.split("\n").map(function(line){return" "+line}).join("\n").substr(2)}else{str="\n"+str.split("\n").map(function(line){return" "+line}).join("\n")}}}else{str=ctx.stylize("[Circular]","special")}}if(isUndefined(name)){if(array&&key.match(/^\d+$/)){return str}name=JSON.stringify(""+key);if(name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)){name=name.substr(1,name.length-2);name=ctx.stylize(name,"name")}else{name=name.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'");name=ctx.stylize(name,"string")}}return name+": "+str}function reduceToSingleString(output,base,braces){var numLinesEst=0;var length=output.reduce(function(prev,cur){numLinesEst++;if(cur.indexOf("\n")>=0)numLinesEst++;return prev+cur.replace(/\u001b\[\d\d?m/g,"").length+1},0);if(length>60){return braces[0]+(base===""?"":base+"\n ")+" "+output.join(",\n ")+" "+braces[1]}return braces[0]+base+" "+output.join(", ")+" "+braces[1]}function isArray(ar){return Array.isArray(ar)}exports.isArray=isArray;function isBoolean(arg){return typeof arg==="boolean"}exports.isBoolean=isBoolean;function isNull(arg){return arg===null}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==="number"}exports.isNumber=isNumber;function isString(arg){return typeof arg==="string"}exports.isString=isString;function isSymbol(arg){return typeof arg==="symbol"}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0}exports.isUndefined=isUndefined;function isRegExp(re){return isObject(re)&&objectToString(re)==="[object RegExp]"}exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==="object"&&arg!==null}exports.isObject=isObject;function isDate(d){return isObject(d)&&objectToString(d)==="[object Date]"}exports.isDate=isDate;function isError(e){return isObject(e)&&(objectToString(e)==="[object Error]"||e instanceof Error)}exports.isError=isError;function isFunction(arg){return typeof arg==="function"}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==="boolean"||typeof arg==="number"||typeof arg==="string"||typeof arg==="symbol"||typeof arg==="undefined"}exports.isPrimitive=isPrimitive;exports.isBuffer=require("./support/isBuffer");function objectToString(o){return Object.prototype.toString.call(o)}function pad(n){return n<10?"0"+n.toString(10):n.toString(10)}var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function timestamp(){var d=new Date;var time=[pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(":");return[d.getDate(),months[d.getMonth()],time].join(" ")}exports.log=function(){console.log("%s - %s",timestamp(),exports.format.apply(exports,arguments))};exports.inherits=require("inherits");exports._extend=function(origin,add){if(!add||!isObject(add))return origin;var keys=Object.keys(add);var i=keys.length;while(i--){origin[keys[i]]=add[keys[i]]}return origin};function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./support/isBuffer":103,_process:73,inherits:102}]},{},[1])(1)}); \ No newline at end of file
diff --git a/tools/image-splitter/js/gif.js b/tools/image-splitter/js/gif.js
new file mode 100644
index 0000000..2e4d204
--- /dev/null
+++ b/tools/image-splitter/js/gif.js
@@ -0,0 +1,3 @@
+// gif.js 0.2.0 - https://github.com/jnordberg/gif.js
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.GIF=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}else{var err=new Error('Uncaught, unspecified "error" event. ('+er+")");err.context=er;throw err}}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:args=Array.prototype.slice.call(arguments,1);handler.apply(this,args)}}else if(isObject(handler)){args=Array.prototype.slice.call(arguments,1);listeners=handler.slice();len=listeners.length;for(i=0;i<len;i++)listeners[i].apply(this,args)}return true};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events)this._events={};if(this._events.newListener)this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener);if(!this._events[type])this._events[type]=listener;else if(isObject(this._events[type]))this._events[type].push(listener);else this._events[type]=[this._events[type],listener];if(isObject(this._events[type])&&!this._events[type].warned){if(!isUndefined(this._maxListeners)){m=this._maxListeners}else{m=EventEmitter.defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-- >0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else if(listeners){while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener))return 1;else if(evlistener)return evlistener.length}return 0};EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type)};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],2:[function(require,module,exports){var UA,browser,mode,platform,ua;ua=navigator.userAgent.toLowerCase();platform=navigator.platform.toLowerCase();UA=ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/)||[null,"unknown",0];mode=UA[1]==="ie"&&document.documentMode;browser={name:UA[1]==="version"?UA[3]:UA[1],version:mode||parseFloat(UA[1]==="opera"&&UA[4]?UA[4]:UA[2]),platform:{name:ua.match(/ip(?:ad|od|hone)/)?"ios":(ua.match(/(?:webos|android)/)||platform.match(/mac|win|linux/)||["other"])[0]}};browser[browser.name]=true;browser[browser.name+parseInt(browser.version,10)]=true;browser.platform[browser.platform.name]=true;module.exports=browser},{}],3:[function(require,module,exports){var EventEmitter,GIF,browser,extend=function(child,parent){for(var key in parent){if(hasProp.call(parent,key))child[key]=parent[key]}function ctor(){this.constructor=child}ctor.prototype=parent.prototype;child.prototype=new ctor;child.__super__=parent.prototype;return child},hasProp={}.hasOwnProperty,indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i<l;i++){if(i in this&&this[i]===item)return i}return-1},slice=[].slice;EventEmitter=require("events").EventEmitter;browser=require("./browser.coffee");GIF=function(superClass){var defaults,frameDefaults;extend(GIF,superClass);defaults={workerScript:"gif.worker.js",workers:2,repeat:0,background:"#fff",quality:10,width:null,height:null,transparent:null,debug:false,dither:false};frameDefaults={delay:500,copy:false};function GIF(options){var base,key,value;this.running=false;this.options={};this.frames=[];this.freeWorkers=[];this.activeWorkers=[];this.setOptions(options);for(key in defaults){value=defaults[key];if((base=this.options)[key]==null){base[key]=value}}}GIF.prototype.setOption=function(key,value){this.options[key]=value;if(this._canvas!=null&&(key==="width"||key==="height")){return this._canvas[key]=value}};GIF.prototype.setOptions=function(options){var key,results,value;results=[];for(key in options){if(!hasProp.call(options,key))continue;value=options[key];results.push(this.setOption(key,value))}return results};GIF.prototype.addFrame=function(image,options){var frame,key;if(options==null){options={}}frame={};frame.transparent=this.options.transparent;for(key in frameDefaults){frame[key]=options[key]||frameDefaults[key]}if(this.options.width==null){this.setOption("width",image.width)}if(this.options.height==null){this.setOption("height",image.height)}if(typeof ImageData!=="undefined"&&ImageData!==null&&image instanceof ImageData){frame.data=image.data}else if(typeof CanvasRenderingContext2D!=="undefined"&&CanvasRenderingContext2D!==null&&image instanceof CanvasRenderingContext2D||typeof WebGLRenderingContext!=="undefined"&&WebGLRenderingContext!==null&&image instanceof WebGLRenderingContext){if(options.copy){frame.data=this.getContextData(image)}else{frame.context=image}}else if(image.childNodes!=null){if(options.copy){frame.data=this.getImageData(image)}else{frame.image=image}}else{throw new Error("Invalid image")}return this.frames.push(frame)};GIF.prototype.render=function(){var i,j,numWorkers,ref;if(this.running){throw new Error("Already running")}if(this.options.width==null||this.options.height==null){throw new Error("Width and height must be set prior to rendering")}this.running=true;this.nextFrame=0;this.finishedFrames=0;this.imageParts=function(){var j,ref,results;results=[];for(i=j=0,ref=this.frames.length;0<=ref?j<ref:j>ref;i=0<=ref?++j:--j){results.push(null)}return results}.call(this);numWorkers=this.spawnWorkers();if(this.options.globalPalette===true){this.renderNextFrame()}else{for(i=j=0,ref=numWorkers;0<=ref?j<ref:j>ref;i=0<=ref?++j:--j){this.renderNextFrame()}}this.emit("start");return this.emit("progress",0)};GIF.prototype.abort=function(){var worker;while(true){worker=this.activeWorkers.shift();if(worker==null){break}this.log("killing active worker");worker.terminate()}this.running=false;return this.emit("abort")};GIF.prototype.spawnWorkers=function(){var j,numWorkers,ref,results;numWorkers=Math.min(this.options.workers,this.frames.length);(function(){results=[];for(var j=ref=this.freeWorkers.length;ref<=numWorkers?j<numWorkers:j>numWorkers;ref<=numWorkers?j++:j--){results.push(j)}return results}).apply(this).forEach(function(_this){return function(i){var worker;_this.log("spawning worker "+i);worker=new Worker(_this.options.workerScript);worker.onmessage=function(event){_this.activeWorkers.splice(_this.activeWorkers.indexOf(worker),1);_this.freeWorkers.push(worker);return _this.frameFinished(event.data)};return _this.freeWorkers.push(worker)}}(this));return numWorkers};GIF.prototype.frameFinished=function(frame){var i,j,ref;this.log("frame "+frame.index+" finished - "+this.activeWorkers.length+" active");this.finishedFrames++;this.emit("progress",this.finishedFrames/this.frames.length);this.imageParts[frame.index]=frame;if(this.options.globalPalette===true){this.options.globalPalette=frame.globalPalette;this.log("global palette analyzed");if(this.frames.length>2){for(i=j=1,ref=this.freeWorkers.length;1<=ref?j<ref:j>ref;i=1<=ref?++j:--j){this.renderNextFrame()}}}if(indexOf.call(this.imageParts,null)>=0){return this.renderNextFrame()}else{return this.finishRendering()}};GIF.prototype.finishRendering=function(){var data,frame,i,image,j,k,l,len,len1,len2,len3,offset,page,ref,ref1,ref2;len=0;ref=this.imageParts;for(j=0,len1=ref.length;j<len1;j++){frame=ref[j];len+=(frame.data.length-1)*frame.pageSize+frame.cursor}len+=frame.pageSize-frame.cursor;this.log("rendering finished - filesize "+Math.round(len/1e3)+"kb");data=new Uint8Array(len);offset=0;ref1=this.imageParts;for(k=0,len2=ref1.length;k<len2;k++){frame=ref1[k];ref2=frame.data;for(i=l=0,len3=ref2.length;l<len3;i=++l){page=ref2[i];data.set(page,offset);if(i===frame.data.length-1){offset+=frame.cursor}else{offset+=frame.pageSize}}}image=new Blob([data],{type:"image/gif"});return this.emit("finished",image,data)};GIF.prototype.renderNextFrame=function(){var frame,task,worker;if(this.freeWorkers.length===0){throw new Error("No free workers")}if(this.nextFrame>=this.frames.length){return}frame=this.frames[this.nextFrame++];worker=this.freeWorkers.shift();task=this.getTask(frame);this.log("starting frame "+(task.index+1)+" of "+this.frames.length);this.activeWorkers.push(worker);return worker.postMessage(task)};GIF.prototype.getContextData=function(ctx){return ctx.getImageData(0,0,this.options.width,this.options.height).data};GIF.prototype.getImageData=function(image){var ctx;if(this._canvas==null){this._canvas=document.createElement("canvas");this._canvas.width=this.options.width;this._canvas.height=this.options.height}ctx=this._canvas.getContext("2d");ctx.setFill=this.options.background;ctx.fillRect(0,0,this.options.width,this.options.height);ctx.drawImage(image,0,0);return this.getContextData(ctx)};GIF.prototype.getTask=function(frame){var index,task;index=this.frames.indexOf(frame);task={index:index,last:index===this.frames.length-1,delay:frame.delay,transparent:frame.transparent,width:this.options.width,height:this.options.height,quality:this.options.quality,dither:this.options.dither,globalPalette:this.options.globalPalette,repeat:this.options.repeat,canTransfer:browser.name==="chrome"};if(frame.data!=null){task.data=frame.data}else if(frame.context!=null){task.data=this.getContextData(frame.context)}else if(frame.image!=null){task.data=this.getImageData(frame.image)}else{throw new Error("Invalid frame")}return task};GIF.prototype.log=function(){var args;args=1<=arguments.length?slice.call(arguments,0):[];if(!this.options.debug){return}return console.log.apply(console,args)};return GIF}(EventEmitter);module.exports=GIF},{"./browser.coffee":2,events:1}]},{},[3])(3)});
+//# sourceMappingURL=gif.js.map
diff --git a/tools/image-splitter/js/gif.worker.js b/tools/image-splitter/js/gif.worker.js
new file mode 100644
index 0000000..269624e
--- /dev/null
+++ b/tools/image-splitter/js/gif.worker.js
@@ -0,0 +1,3 @@
+// gif.worker.js 0.2.0 - https://github.com/jnordberg/gif.js
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){var NeuQuant=require("./TypedNeuQuant.js");var LZWEncoder=require("./LZWEncoder.js");function ByteArray(){this.page=-1;this.pages=[];this.newPage()}ByteArray.pageSize=4096;ByteArray.charMap={};for(var i=0;i<256;i++)ByteArray.charMap[i]=String.fromCharCode(i);ByteArray.prototype.newPage=function(){this.pages[++this.page]=new Uint8Array(ByteArray.pageSize);this.cursor=0};ByteArray.prototype.getData=function(){var rv="";for(var p=0;p<this.pages.length;p++){for(var i=0;i<ByteArray.pageSize;i++){rv+=ByteArray.charMap[this.pages[p][i]]}}return rv};ByteArray.prototype.writeByte=function(val){if(this.cursor>=ByteArray.pageSize)this.newPage();this.pages[this.page][this.cursor++]=val};ByteArray.prototype.writeUTFBytes=function(string){for(var l=string.length,i=0;i<l;i++)this.writeByte(string.charCodeAt(i))};ByteArray.prototype.writeBytes=function(array,offset,length){for(var l=length||array.length,i=offset||0;i<l;i++)this.writeByte(array[i])};function GIFEncoder(width,height){this.width=~~width;this.height=~~height;this.transparent=null;this.transIndex=0;this.repeat=-1;this.delay=0;this.image=null;this.pixels=null;this.indexedPixels=null;this.colorDepth=null;this.colorTab=null;this.neuQuant=null;this.usedEntry=new Array;this.palSize=7;this.dispose=-1;this.firstFrame=true;this.sample=10;this.dither=false;this.globalPalette=false;this.out=new ByteArray}GIFEncoder.prototype.setDelay=function(milliseconds){this.delay=Math.round(milliseconds/10)};GIFEncoder.prototype.setFrameRate=function(fps){this.delay=Math.round(100/fps)};GIFEncoder.prototype.setDispose=function(disposalCode){if(disposalCode>=0)this.dispose=disposalCode};GIFEncoder.prototype.setRepeat=function(repeat){this.repeat=repeat};GIFEncoder.prototype.setTransparent=function(color){this.transparent=color};GIFEncoder.prototype.addFrame=function(imageData){this.image=imageData;this.colorTab=this.globalPalette&&this.globalPalette.slice?this.globalPalette:null;this.getImagePixels();this.analyzePixels();if(this.globalPalette===true)this.globalPalette=this.colorTab;if(this.firstFrame){this.writeLSD();this.writePalette();if(this.repeat>=0){this.writeNetscapeExt()}}this.writeGraphicCtrlExt();this.writeImageDesc();if(!this.firstFrame&&!this.globalPalette)this.writePalette();this.writePixels();this.firstFrame=false};GIFEncoder.prototype.finish=function(){this.out.writeByte(59)};GIFEncoder.prototype.setQuality=function(quality){if(quality<1)quality=1;this.sample=quality};GIFEncoder.prototype.setDither=function(dither){if(dither===true)dither="FloydSteinberg";this.dither=dither};GIFEncoder.prototype.setGlobalPalette=function(palette){this.globalPalette=palette};GIFEncoder.prototype.getGlobalPalette=function(){return this.globalPalette&&this.globalPalette.slice&&this.globalPalette.slice(0)||this.globalPalette};GIFEncoder.prototype.writeHeader=function(){this.out.writeUTFBytes("GIF89a")};GIFEncoder.prototype.analyzePixels=function(){if(!this.colorTab){this.neuQuant=new NeuQuant(this.pixels,this.sample);this.neuQuant.buildColormap();this.colorTab=this.neuQuant.getColormap()}if(this.dither){this.ditherPixels(this.dither.replace("-serpentine",""),this.dither.match(/-serpentine/)!==null)}else{this.indexPixels()}this.pixels=null;this.colorDepth=8;this.palSize=7;if(this.transparent!==null){this.transIndex=this.findClosest(this.transparent,true)}};GIFEncoder.prototype.indexPixels=function(imgq){var nPix=this.pixels.length/3;this.indexedPixels=new Uint8Array(nPix);var k=0;for(var j=0;j<nPix;j++){var index=this.findClosestRGB(this.pixels[k++]&255,this.pixels[k++]&255,this.pixels[k++]&255);this.usedEntry[index]=true;this.indexedPixels[j]=index}};GIFEncoder.prototype.ditherPixels=function(kernel,serpentine){var kernels={FalseFloydSteinberg:[[3/8,1,0],[3/8,0,1],[2/8,1,1]],FloydSteinberg:[[7/16,1,0],[3/16,-1,1],[5/16,0,1],[1/16,1,1]],Stucki:[[8/42,1,0],[4/42,2,0],[2/42,-2,1],[4/42,-1,1],[8/42,0,1],[4/42,1,1],[2/42,2,1],[1/42,-2,2],[2/42,-1,2],[4/42,0,2],[2/42,1,2],[1/42,2,2]],Atkinson:[[1/8,1,0],[1/8,2,0],[1/8,-1,1],[1/8,0,1],[1/8,1,1],[1/8,0,2]]};if(!kernel||!kernels[kernel]){throw"Unknown dithering kernel: "+kernel}var ds=kernels[kernel];var index=0,height=this.height,width=this.width,data=this.pixels;var direction=serpentine?-1:1;this.indexedPixels=new Uint8Array(this.pixels.length/3);for(var y=0;y<height;y++){if(serpentine)direction=direction*-1;for(var x=direction==1?0:width-1,xend=direction==1?width:0;x!==xend;x+=direction){index=y*width+x;var idx=index*3;var r1=data[idx];var g1=data[idx+1];var b1=data[idx+2];idx=this.findClosestRGB(r1,g1,b1);this.usedEntry[idx]=true;this.indexedPixels[index]=idx;idx*=3;var r2=this.colorTab[idx];var g2=this.colorTab[idx+1];var b2=this.colorTab[idx+2];var er=r1-r2;var eg=g1-g2;var eb=b1-b2;for(var i=direction==1?0:ds.length-1,end=direction==1?ds.length:0;i!==end;i+=direction){var x1=ds[i][1];var y1=ds[i][2];if(x1+x>=0&&x1+x<width&&y1+y>=0&&y1+y<height){var d=ds[i][0];idx=index+x1+y1*width;idx*=3;data[idx]=Math.max(0,Math.min(255,data[idx]+er*d));data[idx+1]=Math.max(0,Math.min(255,data[idx+1]+eg*d));data[idx+2]=Math.max(0,Math.min(255,data[idx+2]+eb*d))}}}}};GIFEncoder.prototype.findClosest=function(c,used){return this.findClosestRGB((c&16711680)>>16,(c&65280)>>8,c&255,used)};GIFEncoder.prototype.findClosestRGB=function(r,g,b,used){if(this.colorTab===null)return-1;if(this.neuQuant&&!used){return this.neuQuant.lookupRGB(r,g,b)}var c=b|g<<8|r<<16;var minpos=0;var dmin=256*256*256;var len=this.colorTab.length;for(var i=0,index=0;i<len;index++){var dr=r-(this.colorTab[i++]&255);var dg=g-(this.colorTab[i++]&255);var db=b-(this.colorTab[i++]&255);var d=dr*dr+dg*dg+db*db;if((!used||this.usedEntry[index])&&d<dmin){dmin=d;minpos=index}}return minpos};GIFEncoder.prototype.getImagePixels=function(){var w=this.width;var h=this.height;this.pixels=new Uint8Array(w*h*3);var data=this.image;var srcPos=0;var count=0;for(var i=0;i<h;i++){for(var j=0;j<w;j++){this.pixels[count++]=data[srcPos++];this.pixels[count++]=data[srcPos++];this.pixels[count++]=data[srcPos++];srcPos++}}};GIFEncoder.prototype.writeGraphicCtrlExt=function(){this.out.writeByte(33);this.out.writeByte(249);this.out.writeByte(4);var transp,disp;if(this.transparent===null){transp=0;disp=0}else{transp=1;disp=2}if(this.dispose>=0){disp=dispose&7}disp<<=2;this.out.writeByte(0|disp|0|transp);this.writeShort(this.delay);this.out.writeByte(this.transIndex);this.out.writeByte(0)};GIFEncoder.prototype.writeImageDesc=function(){this.out.writeByte(44);this.writeShort(0);this.writeShort(0);this.writeShort(this.width);this.writeShort(this.height);if(this.firstFrame||this.globalPalette){this.out.writeByte(0)}else{this.out.writeByte(128|0|0|0|this.palSize)}};GIFEncoder.prototype.writeLSD=function(){this.writeShort(this.width);this.writeShort(this.height);this.out.writeByte(128|112|0|this.palSize);this.out.writeByte(0);this.out.writeByte(0)};GIFEncoder.prototype.writeNetscapeExt=function(){this.out.writeByte(33);this.out.writeByte(255);this.out.writeByte(11);this.out.writeUTFBytes("NETSCAPE2.0");this.out.writeByte(3);this.out.writeByte(1);this.writeShort(this.repeat);this.out.writeByte(0)};GIFEncoder.prototype.writePalette=function(){this.out.writeBytes(this.colorTab);var n=3*256-this.colorTab.length;for(var i=0;i<n;i++)this.out.writeByte(0)};GIFEncoder.prototype.writeShort=function(pValue){this.out.writeByte(pValue&255);this.out.writeByte(pValue>>8&255)};GIFEncoder.prototype.writePixels=function(){var enc=new LZWEncoder(this.width,this.height,this.indexedPixels,this.colorDepth);enc.encode(this.out)};GIFEncoder.prototype.stream=function(){return this.out};module.exports=GIFEncoder},{"./LZWEncoder.js":2,"./TypedNeuQuant.js":3}],2:[function(require,module,exports){var EOF=-1;var BITS=12;var HSIZE=5003;var masks=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function LZWEncoder(width,height,pixels,colorDepth){var initCodeSize=Math.max(2,colorDepth);var accum=new Uint8Array(256);var htab=new Int32Array(HSIZE);var codetab=new Int32Array(HSIZE);var cur_accum,cur_bits=0;var a_count;var free_ent=0;var maxcode;var clear_flg=false;var g_init_bits,ClearCode,EOFCode;function char_out(c,outs){accum[a_count++]=c;if(a_count>=254)flush_char(outs)}function cl_block(outs){cl_hash(HSIZE);free_ent=ClearCode+2;clear_flg=true;output(ClearCode,outs)}function cl_hash(hsize){for(var i=0;i<hsize;++i)htab[i]=-1}function compress(init_bits,outs){var fcode,c,i,ent,disp,hsize_reg,hshift;g_init_bits=init_bits;clear_flg=false;n_bits=g_init_bits;maxcode=MAXCODE(n_bits);ClearCode=1<<init_bits-1;EOFCode=ClearCode+1;free_ent=ClearCode+2;a_count=0;ent=nextPixel();hshift=0;for(fcode=HSIZE;fcode<65536;fcode*=2)++hshift;hshift=8-hshift;hsize_reg=HSIZE;cl_hash(hsize_reg);output(ClearCode,outs);outer_loop:while((c=nextPixel())!=EOF){fcode=(c<<BITS)+ent;i=c<<hshift^ent;if(htab[i]===fcode){ent=codetab[i];continue}else if(htab[i]>=0){disp=hsize_reg-i;if(i===0)disp=1;do{if((i-=disp)<0)i+=hsize_reg;if(htab[i]===fcode){ent=codetab[i];continue outer_loop}}while(htab[i]>=0)}output(ent,outs);ent=c;if(free_ent<1<<BITS){codetab[i]=free_ent++;htab[i]=fcode}else{cl_block(outs)}}output(ent,outs);output(EOFCode,outs)}function encode(outs){outs.writeByte(initCodeSize);remaining=width*height;curPixel=0;compress(initCodeSize+1,outs);outs.writeByte(0)}function flush_char(outs){if(a_count>0){outs.writeByte(a_count);outs.writeBytes(accum,0,a_count);a_count=0}}function MAXCODE(n_bits){return(1<<n_bits)-1}function nextPixel(){if(remaining===0)return EOF;--remaining;var pix=pixels[curPixel++];return pix&255}function output(code,outs){cur_accum&=masks[cur_bits];if(cur_bits>0)cur_accum|=code<<cur_bits;else cur_accum=code;cur_bits+=n_bits;while(cur_bits>=8){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}if(free_ent>maxcode||clear_flg){if(clear_flg){maxcode=MAXCODE(n_bits=g_init_bits);clear_flg=false}else{++n_bits;if(n_bits==BITS)maxcode=1<<BITS;else maxcode=MAXCODE(n_bits)}}if(code==EOFCode){while(cur_bits>0){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}flush_char(outs)}}this.encode=encode}module.exports=LZWEncoder},{}],3:[function(require,module,exports){var ncycles=100;var netsize=256;var maxnetpos=netsize-1;var netbiasshift=4;var intbiasshift=16;var intbias=1<<intbiasshift;var gammashift=10;var gamma=1<<gammashift;var betashift=10;var beta=intbias>>betashift;var betagamma=intbias<<gammashift-betashift;var initrad=netsize>>3;var radiusbiasshift=6;var radiusbias=1<<radiusbiasshift;var initradius=initrad*radiusbias;var radiusdec=30;var alphabiasshift=10;var initalpha=1<<alphabiasshift;var alphadec;var radbiasshift=8;var radbias=1<<radbiasshift;var alpharadbshift=alphabiasshift+radbiasshift;var alpharadbias=1<<alpharadbshift;var prime1=499;var prime2=491;var prime3=487;var prime4=503;var minpicturebytes=3*prime4;function NeuQuant(pixels,samplefac){var network;var netindex;var bias;var freq;var radpower;function init(){network=[];netindex=new Int32Array(256);bias=new Int32Array(netsize);freq=new Int32Array(netsize);radpower=new Int32Array(netsize>>3);var i,v;for(i=0;i<netsize;i++){v=(i<<netbiasshift+8)/netsize;network[i]=new Float64Array([v,v,v,0]);freq[i]=intbias/netsize;bias[i]=0}}function unbiasnet(){for(var i=0;i<netsize;i++){network[i][0]>>=netbiasshift;network[i][1]>>=netbiasshift;network[i][2]>>=netbiasshift;network[i][3]=i}}function altersingle(alpha,i,b,g,r){network[i][0]-=alpha*(network[i][0]-b)/initalpha;network[i][1]-=alpha*(network[i][1]-g)/initalpha;network[i][2]-=alpha*(network[i][2]-r)/initalpha}function alterneigh(radius,i,b,g,r){var lo=Math.abs(i-radius);var hi=Math.min(i+radius,netsize);var j=i+1;var k=i-1;var m=1;var p,a;while(j<hi||k>lo){a=radpower[m++];if(j<hi){p=network[j++];p[0]-=a*(p[0]-b)/alpharadbias;p[1]-=a*(p[1]-g)/alpharadbias;p[2]-=a*(p[2]-r)/alpharadbias}if(k>lo){p=network[k--];p[0]-=a*(p[0]-b)/alpharadbias;p[1]-=a*(p[1]-g)/alpharadbias;p[2]-=a*(p[2]-r)/alpharadbias}}}function contest(b,g,r){var bestd=~(1<<31);var bestbiasd=bestd;var bestpos=-1;var bestbiaspos=bestpos;var i,n,dist,biasdist,betafreq;for(i=0;i<netsize;i++){n=network[i];dist=Math.abs(n[0]-b)+Math.abs(n[1]-g)+Math.abs(n[2]-r);if(dist<bestd){bestd=dist;bestpos=i}biasdist=dist-(bias[i]>>intbiasshift-netbiasshift);if(biasdist<bestbiasd){bestbiasd=biasdist;bestbiaspos=i}betafreq=freq[i]>>betashift;freq[i]-=betafreq;bias[i]+=betafreq<<gammashift}freq[bestpos]+=beta;bias[bestpos]-=betagamma;return bestbiaspos}function inxbuild(){var i,j,p,q,smallpos,smallval,previouscol=0,startpos=0;for(i=0;i<netsize;i++){p=network[i];smallpos=i;smallval=p[1];for(j=i+1;j<netsize;j++){q=network[j];if(q[1]<smallval){smallpos=j;smallval=q[1]}}q=network[smallpos];if(i!=smallpos){j=q[0];q[0]=p[0];p[0]=j;j=q[1];q[1]=p[1];p[1]=j;j=q[2];q[2]=p[2];p[2]=j;j=q[3];q[3]=p[3];p[3]=j}if(smallval!=previouscol){netindex[previouscol]=startpos+i>>1;for(j=previouscol+1;j<smallval;j++)netindex[j]=i;previouscol=smallval;startpos=i}}netindex[previouscol]=startpos+maxnetpos>>1;for(j=previouscol+1;j<256;j++)netindex[j]=maxnetpos}function inxsearch(b,g,r){var a,p,dist;var bestd=1e3;var best=-1;var i=netindex[g];var j=i-1;while(i<netsize||j>=0){if(i<netsize){p=network[i];dist=p[1]-g;if(dist>=bestd)i=netsize;else{i++;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist<bestd){a=p[2]-r;if(a<0)a=-a;dist+=a;if(dist<bestd){bestd=dist;best=p[3]}}}}if(j>=0){p=network[j];dist=g-p[1];if(dist>=bestd)j=-1;else{j--;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist<bestd){a=p[2]-r;if(a<0)a=-a;dist+=a;if(dist<bestd){bestd=dist;best=p[3]}}}}}return best}function learn(){var i;var lengthcount=pixels.length;var alphadec=30+(samplefac-1)/3;var samplepixels=lengthcount/(3*samplefac);var delta=~~(samplepixels/ncycles);var alpha=initalpha;var radius=initradius;var rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(i=0;i<rad;i++)radpower[i]=alpha*((rad*rad-i*i)*radbias/(rad*rad));var step;if(lengthcount<minpicturebytes){samplefac=1;step=3}else if(lengthcount%prime1!==0){step=3*prime1}else if(lengthcount%prime2!==0){step=3*prime2}else if(lengthcount%prime3!==0){step=3*prime3}else{step=3*prime4}var b,g,r,j;var pix=0;i=0;while(i<samplepixels){b=(pixels[pix]&255)<<netbiasshift;g=(pixels[pix+1]&255)<<netbiasshift;r=(pixels[pix+2]&255)<<netbiasshift;j=contest(b,g,r);altersingle(alpha,j,b,g,r);if(rad!==0)alterneigh(rad,j,b,g,r);pix+=step;if(pix>=lengthcount)pix-=lengthcount;i++;if(delta===0)delta=1;if(i%delta===0){alpha-=alpha/alphadec;radius-=radius/radiusdec;rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(j=0;j<rad;j++)radpower[j]=alpha*((rad*rad-j*j)*radbias/(rad*rad))}}}function buildColormap(){init();learn();unbiasnet();inxbuild()}this.buildColormap=buildColormap;function getColormap(){var map=[];var index=[];for(var i=0;i<netsize;i++)index[network[i][3]]=i;var k=0;for(var l=0;l<netsize;l++){var j=index[l];map[k++]=network[j][0];map[k++]=network[j][1];map[k++]=network[j][2]}return map}this.getColormap=getColormap;this.lookupRGB=inxsearch}module.exports=NeuQuant},{}],4:[function(require,module,exports){var GIFEncoder,renderFrame;GIFEncoder=require("./GIFEncoder.js");renderFrame=function(frame){var encoder,page,stream,transfer;encoder=new GIFEncoder(frame.width,frame.height);if(frame.index===0){encoder.writeHeader()}else{encoder.firstFrame=false}encoder.setTransparent(frame.transparent);encoder.setRepeat(frame.repeat);encoder.setDelay(frame.delay);encoder.setQuality(frame.quality);encoder.setDither(frame.dither);encoder.setGlobalPalette(frame.globalPalette);encoder.addFrame(frame.data);if(frame.last){encoder.finish()}if(frame.globalPalette===true){frame.globalPalette=encoder.getGlobalPalette()}stream=encoder.stream();frame.data=stream.pages;frame.cursor=stream.cursor;frame.pageSize=stream.constructor.pageSize;if(frame.canTransfer){transfer=function(){var i,len,ref,results;ref=frame.data;results=[];for(i=0,len=ref.length;i<len;i++){page=ref[i];results.push(page.buffer)}return results}();return self.postMessage(frame,transfer)}else{return self.postMessage(frame)}};self.onmessage=function(event){return renderFrame(event.data)}},{"./GIFEncoder.js":1}]},{},[4]);
+//# sourceMappingURL=gif.worker.js.map
diff --git a/tools/image-splitter/js/jszip.min.js b/tools/image-splitter/js/jszip.min.js
new file mode 100644
index 0000000..b918873
--- /dev/null
+++ b/tools/image-splitter/js/jszip.min.js
@@ -0,0 +1,15 @@
+/*!
+
+JSZip v3.1.5 - A JavaScript class for generating and reading zip files
+<http://stuartk.com/jszip>
+
+(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
+Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
+
+JSZip uses the library pako released under the MIT license :
+https://github.com/nodeca/pako/blob/master/LICENSE
+*/
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";var d=a("./utils"),e=a("./support"),f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";c.encode=function(a){for(var b,c,e,g,h,i,j,k=[],l=0,m=a.length,n=m,o="string"!==d.getTypeOf(a);l<a.length;)n=m-l,o?(b=a[l++],c=l<m?a[l++]:0,e=l<m?a[l++]:0):(b=a.charCodeAt(l++),c=l<m?a.charCodeAt(l++):0,e=l<m?a.charCodeAt(l++):0),g=b>>2,h=(3&b)<<4|c>>4,i=n>1?(15&c)<<2|e>>6:64,j=n>2?63&e:64,k.push(f.charAt(g)+f.charAt(h)+f.charAt(i)+f.charAt(j));return k.join("")},c.decode=function(a){var b,c,d,g,h,i,j,k=0,l=0,m="data:";if(a.substr(0,m.length)===m)throw new Error("Invalid base64 input, it looks like a data url.");a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");var n=3*a.length/4;if(a.charAt(a.length-1)===f.charAt(64)&&n--,a.charAt(a.length-2)===f.charAt(64)&&n--,n%1!==0)throw new Error("Invalid base64 input, bad content length.");var o;for(o=e.uint8array?new Uint8Array(0|n):new Array(0|n);k<a.length;)g=f.indexOf(a.charAt(k++)),h=f.indexOf(a.charAt(k++)),i=f.indexOf(a.charAt(k++)),j=f.indexOf(a.charAt(k++)),b=g<<2|h>>4,c=(15&h)<<4|i>>2,d=(3&i)<<6|j,o[l++]=b,64!==i&&(o[l++]=c),64!==j&&(o[l++]=d);return o}},{"./support":30,"./utils":32}],2:[function(a,b,c){"use strict";function d(a,b,c,d,e){this.compressedSize=a,this.uncompressedSize=b,this.crc32=c,this.compression=d,this.compressedContent=e}var e=a("./external"),f=a("./stream/DataWorker"),g=a("./stream/DataLengthProbe"),h=a("./stream/Crc32Probe"),g=a("./stream/DataLengthProbe");d.prototype={getContentWorker:function(){var a=new f(e.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new g("data_length")),b=this;return a.on("end",function(){if(this.streamInfo.data_length!==b.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),a},getCompressedWorker:function(){return new f(e.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},d.createWorkerFrom=function(a,b,c){return a.pipe(new h).pipe(new g("uncompressedSize")).pipe(b.compressWorker(c)).pipe(new g("compressedSize")).withStreamInfo("compression",b)},b.exports=d},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(a,b,c){"use strict";var d=a("./stream/GenericWorker");c.STORE={magic:"\0\0",compressWorker:function(a){return new d("STORE compression")},uncompressWorker:function(){return new d("STORE decompression")}},c.DEFLATE=a("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;c<256;c++){a=c;for(var d=0;d<8;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=h,f=d+c;a^=-1;for(var g=d;g<f;g++)a=a>>>8^e[255&(a^b[g])];return a^-1}function f(a,b,c,d){var e=h,f=d+c;a^=-1;for(var g=d;g<f;g++)a=a>>>8^e[255&(a^b.charCodeAt(g))];return a^-1}var g=a("./utils"),h=d();b.exports=function(a,b){if("undefined"==typeof a||!a.length)return 0;var c="string"!==g.getTypeOf(a);return c?e(0|b,a,a.length,0):f(0|b,a,a.length,0)}},{"./utils":32}],5:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!0,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],6:[function(a,b,c){"use strict";var d=null;d="undefined"!=typeof Promise?Promise:a("lie"),b.exports={Promise:d}},{lie:58}],7:[function(a,b,c){"use strict";function d(a,b){h.call(this,"FlateWorker/"+a),this._pako=null,this._pakoAction=a,this._pakoOptions=b,this.meta={}}var e="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,f=a("pako"),g=a("./utils"),h=a("./stream/GenericWorker"),i=e?"uint8array":"array";c.magic="\b\0",g.inherits(d,h),d.prototype.processChunk=function(a){this.meta=a.meta,null===this._pako&&this._createPako(),this._pako.push(g.transformTo(i,a.data),!1)},d.prototype.flush=function(){h.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},d.prototype.cleanUp=function(){h.prototype.cleanUp.call(this),this._pako=null},d.prototype._createPako=function(){this._pako=new f[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var a=this;this._pako.onData=function(b){a.push({data:b,meta:a.meta})}},c.compressWorker=function(a){return new d("Deflate",a)},c.uncompressWorker=function(){return new d("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:59}],8:[function(a,b,c){"use strict";function d(a,b,c,d){f.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=b,this.zipPlatform=c,this.encodeFileName=d,this.streamFiles=a,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}var e=a("../utils"),f=a("../stream/GenericWorker"),g=a("../utf8"),h=a("../crc32"),i=a("../signature"),j=function(a,b){var c,d="";for(c=0;c<b;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},k=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},l=function(a,b){return 63&(a||0)},m=function(a,b,c,d,f,m){var n,o,p=a.file,q=a.compression,r=m!==g.utf8encode,s=e.transformTo("string",m(p.name)),t=e.transformTo("string",g.utf8encode(p.name)),u=p.comment,v=e.transformTo("string",m(u)),w=e.transformTo("string",g.utf8encode(u)),x=t.length!==p.name.length,y=w.length!==u.length,z="",A="",B="",C=p.dir,D=p.date,E={crc32:0,compressedSize:0,uncompressedSize:0};b&&!c||(E.crc32=a.crc32,E.compressedSize=a.compressedSize,E.uncompressedSize=a.uncompressedSize);var F=0;b&&(F|=8),r||!x&&!y||(F|=2048);var G=0,H=0;C&&(G|=16),"UNIX"===f?(H=798,G|=k(p.unixPermissions,C)):(H=20,G|=l(p.dosPermissions,C)),n=D.getUTCHours(),n<<=6,n|=D.getUTCMinutes(),n<<=5,n|=D.getUTCSeconds()/2,o=D.getUTCFullYear()-1980,o<<=4,o|=D.getUTCMonth()+1,o<<=5,o|=D.getUTCDate(),x&&(A=j(1,1)+j(h(s),4)+t,z+="up"+j(A.length,2)+A),y&&(B=j(1,1)+j(h(v),4)+w,z+="uc"+j(B.length,2)+B);var I="";I+="\n\0",I+=j(F,2),I+=q.magic,I+=j(n,2),I+=j(o,2),I+=j(E.crc32,4),I+=j(E.compressedSize,4),I+=j(E.uncompressedSize,4),I+=j(s.length,2),I+=j(z.length,2);var J=i.LOCAL_FILE_HEADER+I+s+z,K=i.CENTRAL_FILE_HEADER+j(H,2)+I+j(v.length,2)+"\0\0\0\0"+j(G,4)+j(d,4)+s+z+v;return{fileRecord:J,dirRecord:K}},n=function(a,b,c,d,f){var g="",h=e.transformTo("string",f(d));return g=i.CENTRAL_DIRECTORY_END+"\0\0\0\0"+j(a,2)+j(a,2)+j(b,4)+j(c,4)+j(h.length,2)+h},o=function(a){var b="";return b=i.DATA_DESCRIPTOR+j(a.crc32,4)+j(a.compressedSize,4)+j(a.uncompressedSize,4)};e.inherits(d,f),d.prototype.push=function(a){var b=a.meta.percent||0,c=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(a):(this.bytesWritten+=a.data.length,f.prototype.push.call(this,{data:a.data,meta:{currentFile:this.currentFile,percent:c?(b+100*(c-d-1))/c:100}}))},d.prototype.openedSource=function(a){this.currentSourceOffset=this.bytesWritten,this.currentFile=a.file.name;var b=this.streamFiles&&!a.file.dir;if(b){var c=m(a,b,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:c.fileRecord,meta:{percent:0}})}else this.accumulate=!0},d.prototype.closedSource=function(a){this.accumulate=!1;var b=this.streamFiles&&!a.file.dir,c=m(a,b,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(c.dirRecord),b)this.push({data:o(a),meta:{percent:100}});else for(this.push({data:c.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},d.prototype.flush=function(){for(var a=this.bytesWritten,b=0;b<this.dirRecords.length;b++)this.push({data:this.dirRecords[b],meta:{percent:100}});var c=this.bytesWritten-a,d=n(this.dirRecords.length,c,a,this.zipComment,this.encodeFileName);this.push({data:d,meta:{percent:100}})},d.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},d.prototype.registerPrevious=function(a){this._sources.push(a);var b=this;return a.on("data",function(a){b.processChunk(a)}),a.on("end",function(){b.closedSource(b.previous.streamInfo),b._sources.length?b.prepareNextSource():b.end()}),a.on("error",function(a){b.error(a)}),this},d.prototype.resume=function(){return!!f.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},d.prototype.error=function(a){var b=this._sources;if(!f.prototype.error.call(this,a))return!1;for(var c=0;c<b.length;c++)try{b[c].error(a)}catch(a){}return!0},d.prototype.lock=function(){f.prototype.lock.call(this);for(var a=this._sources,b=0;b<a.length;b++)a[b].lock()},b.exports=d},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(a,b,c){"use strict";var d=a("../compressions"),e=a("./ZipFileWorker"),f=function(a,b){var c=a||b,e=d[c];if(!e)throw new Error(c+" is not a valid compression method !");return e};c.generateWorker=function(a,b,c){var d=new e(b.streamFiles,c,b.platform,b.encodeFileName),g=0;try{a.forEach(function(a,c){g++;var e=f(c.options.compression,b.compression),h=c.options.compressionOptions||b.compressionOptions||{},i=c.dir,j=c.date;c._compressWorker(e,h).withStreamInfo("file",{name:a,dir:i,date:j,comment:c.comment||"",unixPermissions:c.unixPermissions,dosPermissions:c.dosPermissions}).pipe(d)}),d.entriesCount=g}catch(h){d.error(h)}return d}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(a,b,c){"use strict";function d(){if(!(this instanceof d))return new d;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files={},this.comment=null,this.root="",this.clone=function(){var a=new d;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a}}d.prototype=a("./object"),d.prototype.loadAsync=a("./load"),d.support=a("./support"),d.defaults=a("./defaults"),d.version="3.1.5",d.loadAsync=function(a,b){return(new d).loadAsync(a,b)},d.external=a("./external"),b.exports=d},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(a,b,c){"use strict";function d(a){return new f.Promise(function(b,c){var d=a.decompressed.getContentWorker().pipe(new i);d.on("error",function(a){c(a)}).on("end",function(){d.streamInfo.crc32!==a.decompressed.crc32?c(new Error("Corrupted zip : CRC32 mismatch")):b()}).resume()})}var e=a("./utils"),f=a("./external"),g=a("./utf8"),e=a("./utils"),h=a("./zipEntries"),i=a("./stream/Crc32Probe"),j=a("./nodejsUtils");b.exports=function(a,b){var c=this;return b=e.extend(b||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:g.utf8decode}),j.isNode&&j.isStream(a)?f.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):e.prepareContent("the loaded zip file",a,!0,b.optimizedBinaryString,b.base64).then(function(a){var c=new h(b);return c.load(a),c}).then(function(a){var c=[f.Promise.resolve(a)],e=a.files;if(b.checkCRC32)for(var g=0;g<e.length;g++)c.push(d(e[g]));return f.Promise.all(c)}).then(function(a){for(var d=a.shift(),e=d.files,f=0;f<e.length;f++){var g=e[f];c.file(g.fileNameStr,g.decompressed,{binary:!0,optimizedBinaryString:!0,date:g.date,dir:g.dir,comment:g.fileCommentStr.length?g.fileCommentStr:null,unixPermissions:g.unixPermissions,dosPermissions:g.dosPermissions,createFolders:b.createFolders})}return d.zipComment.length&&(c.comment=d.zipComment),c})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(a,b,c){"use strict";function d(a,b){f.call(this,"Nodejs stream input adapter for "+a),this._upstreamEnded=!1,this._bindStream(b)}var e=a("../utils"),f=a("../stream/GenericWorker");e.inherits(d,f),d.prototype._bindStream=function(a){var b=this;this._stream=a,a.pause(),a.on("data",function(a){b.push({data:a,meta:{percent:0}})}).on("error",function(a){b.isPaused?this.generatedError=a:b.error(a)}).on("end",function(){b.isPaused?b._upstreamEnded=!0:b.end()})},d.prototype.pause=function(){return!!f.prototype.pause.call(this)&&(this._stream.pause(),!0)},d.prototype.resume=function(){return!!f.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},b.exports=d},{"../stream/GenericWorker":28,"../utils":32}],13:[function(a,b,c){"use strict";function d(a,b,c){e.call(this,b),this._helper=a;var d=this;a.on("data",function(a,b){d.push(a)||d._helper.pause(),c&&c(b)}).on("error",function(a){d.emit("error",a)}).on("end",function(){d.push(null)})}var e=a("readable-stream").Readable,f=a("../utils");f.inherits(d,e),d.prototype._read=function(){this._helper.resume()},b.exports=d},{"../utils":32,"readable-stream":16}],14:[function(a,b,c){"use strict";b.exports={isNode:"undefined"!=typeof Buffer,newBufferFrom:function(a,b){return new Buffer(a,b)},allocBuffer:function(a){return Buffer.alloc?Buffer.alloc(a):new Buffer(a)},isBuffer:function(a){return Buffer.isBuffer(a)},isStream:function(a){return a&&"function"==typeof a.on&&"function"==typeof a.pause&&"function"==typeof a.resume}}},{}],15:[function(a,b,c){"use strict";function d(a){return"[object RegExp]"===Object.prototype.toString.call(a)}var e=a("./utf8"),f=a("./utils"),g=a("./stream/GenericWorker"),h=a("./stream/StreamHelper"),i=a("./defaults"),j=a("./compressedObject"),k=a("./zipObject"),l=a("./generate"),m=a("./nodejsUtils"),n=a("./nodejs/NodejsStreamInputAdapter"),o=function(a,b,c){var d,e=f.getTypeOf(b),h=f.extend(c||{},i);h.date=h.date||new Date,null!==h.compression&&(h.compression=h.compression.toUpperCase()),"string"==typeof h.unixPermissions&&(h.unixPermissions=parseInt(h.unixPermissions,8)),h.unixPermissions&&16384&h.unixPermissions&&(h.dir=!0),h.dosPermissions&&16&h.dosPermissions&&(h.dir=!0),h.dir&&(a=q(a)),h.createFolders&&(d=p(a))&&r.call(this,d,!0);var l="string"===e&&h.binary===!1&&h.base64===!1;c&&"undefined"!=typeof c.binary||(h.binary=!l);var o=b instanceof j&&0===b.uncompressedSize;(o||h.dir||!b||0===b.length)&&(h.base64=!1,h.binary=!0,b="",h.compression="STORE",e="string");var s=null;s=b instanceof j||b instanceof g?b:m.isNode&&m.isStream(b)?new n(a,b):f.prepareContent(a,b,h.binary,h.optimizedBinaryString,h.base64);var t=new k(a,s,h);this.files[a]=t},p=function(a){"/"===a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf("/");return b>0?a.substring(0,b):""},q=function(a){return"/"!==a.slice(-1)&&(a+="/"),a},r=function(a,b){return b="undefined"!=typeof b?b:i.createFolders,a=q(a),this.files[a]||o.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},s={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(a){var b,c,d;for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],c=b.slice(this.root.length,b.length),c&&b.slice(0,this.root.length)===this.root&&a(c,d))},filter:function(a){var b=[];return this.forEach(function(c,d){a(c,d)&&b.push(d)}),b},file:function(a,b,c){if(1===arguments.length){if(d(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}var f=this.files[this.root+a];return f&&!f.dir?f:null}return a=this.root+a,o.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=r.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!==a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(a){var b,c={};try{if(c=f.extend(a||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:e.utf8encode}),c.type=c.type.toLowerCase(),c.compression=c.compression.toUpperCase(),"binarystring"===c.type&&(c.type="string"),!c.type)throw new Error("No output type specified.");f.checkSupport(c.type),"darwin"!==c.platform&&"freebsd"!==c.platform&&"linux"!==c.platform&&"sunos"!==c.platform||(c.platform="UNIX"),"win32"===c.platform&&(c.platform="DOS");var d=c.comment||this.comment||"";b=l.generateWorker(this,c,d)}catch(i){b=new g("error"),b.error(i)}return new h(b,c.type||"string",c.mimeType)},generateAsync:function(a,b){return this.generateInternalStream(a).accumulate(b)},generateNodeStream:function(a,b){return a=a||{},a.type||(a.type="nodebuffer"),this.generateInternalStream(a).toNodejsStream(b)}};b.exports=s},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(a,b,c){b.exports=a("stream")},{stream:void 0}],17:[function(a,b,c){"use strict";function d(a){e.call(this,a);for(var b=0;b<this.data.length;b++)a[b]=255&a[b]}var e=a("./DataReader"),f=a("../utils");f.inherits(d,e),d.prototype.byteAt=function(a){return this.data[this.zero+a]},d.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f-this.zero;return-1},d.prototype.readAndCheckSignature=function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.readData(4);return b===f[0]&&c===f[1]&&d===f[2]&&e===f[3]},d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return[];var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./DataReader":18}],18:[function(a,b,c){"use strict";function d(a){this.data=a,this.length=a.length,this.index=0,this.zero=0}var e=a("../utils");d.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<this.zero+a||a<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(a){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return e.transformTo("string",this.readData(a))},readData:function(a){},lastIndexOfSignature:function(a){},readAndCheckSignature:function(a){},readDate:function(){var a=this.readInt(4);return new Date(Date.UTC((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1))}},b.exports=d},{"../utils":32}],19:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./Uint8ArrayReader"),f=a("../utils");f.inherits(d,e),d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./DataReader"),f=a("../utils");f.inherits(d,e),d.prototype.byteAt=function(a){return this.data.charCodeAt(this.zero+a)},d.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)-this.zero},d.prototype.readAndCheckSignature=function(a){var b=this.readData(4);return a===b},d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./DataReader":18}],21:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./ArrayReader"),f=a("../utils");f.inherits(d,e),d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":32,"./ArrayReader":17}],22:[function(a,b,c){"use strict";var d=a("../utils"),e=a("../support"),f=a("./ArrayReader"),g=a("./StringReader"),h=a("./NodeBufferReader"),i=a("./Uint8ArrayReader");b.exports=function(a){var b=d.getTypeOf(a);return d.checkSupport(b),"string"!==b||e.uint8array?"nodebuffer"===b?new h(a):e.uint8array?new i(d.transformTo("uint8array",a)):new f(d.transformTo("array",a)):new g(a)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],24:[function(a,b,c){"use strict";function d(a){e.call(this,"ConvertWorker to "+a),this.destType=a}var e=a("./GenericWorker"),f=a("../utils");f.inherits(d,e),d.prototype.processChunk=function(a){this.push({data:f.transformTo(this.destType,a.data),meta:a.meta})},b.exports=d},{"../utils":32,"./GenericWorker":28}],25:[function(a,b,c){"use strict";function d(){e.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}var e=a("./GenericWorker"),f=a("../crc32"),g=a("../utils");g.inherits(d,e),d.prototype.processChunk=function(a){this.streamInfo.crc32=f(a.data,this.streamInfo.crc32||0),this.push(a)},b.exports=d},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(a,b,c){"use strict";function d(a){f.call(this,"DataLengthProbe for "+a),this.propName=a,this.withStreamInfo(a,0)}var e=a("../utils"),f=a("./GenericWorker");e.inherits(d,f),d.prototype.processChunk=function(a){if(a){var b=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=b+a.data.length}f.prototype.processChunk.call(this,a)},b.exports=d},{"../utils":32,"./GenericWorker":28}],27:[function(a,b,c){"use strict";function d(a){f.call(this,"DataWorker");var b=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,a.then(function(a){b.dataIsReady=!0,b.data=a,b.max=a&&a.length||0,b.type=e.getTypeOf(a),b.isPaused||b._tickAndRepeat()},function(a){b.error(a)})}var e=a("../utils"),f=a("./GenericWorker"),g=16384;e.inherits(d,f),d.prototype.cleanUp=function(){f.prototype.cleanUp.call(this),this.data=null},d.prototype.resume=function(){return!!f.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,e.delay(this._tickAndRepeat,[],this)),!0)},d.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(e.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},d.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var a=g,b=null,c=Math.min(this.max,this.index+a);if(this.index>=this.max)return this.end();switch(this.type){case"string":b=this.data.substring(this.index,c);break;case"uint8array":b=this.data.subarray(this.index,c);break;case"array":case"nodebuffer":b=this.data.slice(this.index,c)}return this.index=c,this.push({data:b,meta:{percent:this.max?this.index/this.max*100:0}})},b.exports=d},{"../utils":32,"./GenericWorker":28}],28:[function(a,b,c){"use strict";function d(a){this.name=a||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}d.prototype={push:function(a){this.emit("data",a)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(a){this.emit("error",a)}return!0},error:function(a){return!this.isFinished&&(this.isPaused?this.generatedError=a:(this.isFinished=!0,this.emit("error",a),this.previous&&this.previous.error(a),this.cleanUp()),!0)},on:function(a,b){return this._listeners[a].push(b),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(a,b){if(this._listeners[a])for(var c=0;c<this._listeners[a].length;c++)this._listeners[a][c].call(this,b)},pipe:function(a){return a.registerPrevious(this)},registerPrevious:function(a){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=a.streamInfo,this.mergeStreamInfo(),this.previous=a;var b=this;return a.on("data",function(a){b.processChunk(a)}),a.on("end",function(){b.end()}),a.on("error",function(a){b.error(a)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;this.isPaused=!1;var a=!1;return this.generatedError&&(this.error(this.generatedError),a=!0),this.previous&&this.previous.resume(),!a},flush:function(){},processChunk:function(a){this.push(a)},withStreamInfo:function(a,b){return this.extraStreamInfo[a]=b,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var a in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(a)&&(this.streamInfo[a]=this.extraStreamInfo[a])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var a="Worker "+this.name;return this.previous?this.previous+" -> "+a:a}},b.exports=d},{}],29:[function(a,b,c){"use strict";function d(a,b,c){switch(a){case"blob":return h.newBlob(h.transformTo("arraybuffer",b),c);case"base64":return k.encode(b);default:return h.transformTo(a,b)}}function e(a,b){var c,d=0,e=null,f=0;for(c=0;c<b.length;c++)f+=b[c].length;switch(a){case"string":return b.join("");case"array":return Array.prototype.concat.apply([],b);case"uint8array":for(e=new Uint8Array(f),c=0;c<b.length;c++)e.set(b[c],d),d+=b[c].length;return e;case"nodebuffer":return Buffer.concat(b);default:throw new Error("concat : unsupported type '"+a+"'")}}function f(a,b){return new m.Promise(function(c,f){var g=[],h=a._internalType,i=a._outputType,j=a._mimeType;a.on("data",function(a,c){g.push(a),b&&b(c)}).on("error",function(a){g=[],f(a)}).on("end",function(){try{var a=d(i,e(h,g),j);c(a)}catch(b){f(b)}g=[]}).resume()})}function g(a,b,c){var d=b;switch(b){case"blob":case"arraybuffer":d="uint8array";break;case"base64":d="string"}try{this._internalType=d,this._outputType=b,this._mimeType=c,h.checkSupport(d),this._worker=a.pipe(new i(d)),a.lock()}catch(e){this._worker=new j("error"),this._worker.error(e)}}var h=a("../utils"),i=a("./ConvertWorker"),j=a("./GenericWorker"),k=a("../base64"),l=a("../support"),m=a("../external"),n=null;if(l.nodestream)try{n=a("../nodejs/NodejsStreamOutputAdapter")}catch(o){}g.prototype={accumulate:function(a){return f(this,a)},on:function(a,b){var c=this;return"data"===a?this._worker.on(a,function(a){b.call(c,a.data,a.meta)}):this._worker.on(a,function(){h.delay(b,arguments,c)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(a){if(h.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new n(this,{objectMode:"nodebuffer"!==this._outputType},a)}},b.exports=g},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(a,b,c){"use strict";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,c.nodebuffer="undefined"!=typeof Buffer,c.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)c.blob=!1;else{var d=new ArrayBuffer(0);try{c.blob=0===new Blob([d],{type:"application/zip"}).size}catch(e){try{var f=self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder,g=new f;g.append(d),c.blob=0===g.getBlob("application/zip").size}catch(e){c.blob=!1}}}try{c.nodestream=!!a("readable-stream").Readable}catch(e){c.nodestream=!1}},{"readable-stream":16}],31:[function(a,b,c){"use strict";function d(){i.call(this,"utf-8 decode"),this.leftOver=null}function e(){i.call(this,"utf-8 encode")}for(var f=a("./utils"),g=a("./support"),h=a("./nodejsUtils"),i=a("./stream/GenericWorker"),j=new Array(256),k=0;k<256;k++)j[k]=k>=252?6:k>=248?5:k>=240?4:k>=224?3:k>=192?2:1;j[254]=j[254]=1;var l=function(a){var b,c,d,e,f,h=a.length,i=0;for(e=0;e<h;e++)c=a.charCodeAt(e),55296===(64512&c)&&e+1<h&&(d=a.charCodeAt(e+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),e++)),i+=c<128?1:c<2048?2:c<65536?3:4;for(b=g.uint8array?new Uint8Array(i):new Array(i),f=0,e=0;f<i;e++)c=a.charCodeAt(e),55296===(64512&c)&&e+1<h&&(d=a.charCodeAt(e+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),e++)),c<128?b[f++]=c:c<2048?(b[f++]=192|c>>>6,b[f++]=128|63&c):c<65536?(b[f++]=224|c>>>12,b[f++]=128|c>>>6&63,b[f++]=128|63&c):(b[f++]=240|c>>>18,b[f++]=128|c>>>12&63,b[f++]=128|c>>>6&63,b[f++]=128|63&c);return b},m=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+j[a[c]]>b?c:b},n=function(a){var b,c,d,e,g=a.length,h=new Array(2*g);for(c=0,b=0;b<g;)if(d=a[b++],d<128)h[c++]=d;else if(e=j[d],e>4)h[c++]=65533,b+=e-1;else{for(d&=2===e?31:3===e?15:7;e>1&&b<g;)d=d<<6|63&a[b++],e--;e>1?h[c++]=65533:d<65536?h[c++]=d:(d-=65536,h[c++]=55296|d>>10&1023,h[c++]=56320|1023&d)}return h.length!==c&&(h.subarray?h=h.subarray(0,c):h.length=c),f.applyFromCharCode(h)};c.utf8encode=function(a){return g.nodebuffer?h.newBufferFrom(a,"utf-8"):l(a)},c.utf8decode=function(a){return g.nodebuffer?f.transformTo("nodebuffer",a).toString("utf-8"):(a=f.transformTo(g.uint8array?"uint8array":"array",a),n(a))},f.inherits(d,i),d.prototype.processChunk=function(a){var b=f.transformTo(g.uint8array?"uint8array":"array",a.data);if(this.leftOver&&this.leftOver.length){if(g.uint8array){var d=b;b=new Uint8Array(d.length+this.leftOver.length),b.set(this.leftOver,0),b.set(d,this.leftOver.length)}else b=this.leftOver.concat(b);this.leftOver=null}var e=m(b),h=b;e!==b.length&&(g.uint8array?(h=b.subarray(0,e),this.leftOver=b.subarray(e,b.length)):(h=b.slice(0,e),this.leftOver=b.slice(e,b.length))),this.push({data:c.utf8decode(h),meta:a.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:c.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},c.Utf8DecodeWorker=d,f.inherits(e,i),e.prototype.processChunk=function(a){this.push({data:c.utf8encode(a.data),meta:a.meta})},c.Utf8EncodeWorker=e},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(a,b,c){"use strict";function d(a){var b=null;return b=i.uint8array?new Uint8Array(a.length):new Array(a.length),f(a,b)}function e(a){return a}function f(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function g(a){var b=65536,d=c.getTypeOf(a),e=!0;if("uint8array"===d?e=n.applyCanBeUsed.uint8array:"nodebuffer"===d&&(e=n.applyCanBeUsed.nodebuffer),e)for(;b>1;)try{return n.stringifyByChunk(a,d,b)}catch(f){b=Math.floor(b/2)}return n.stringifyByChar(a)}function h(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];
+return b}var i=a("./support"),j=a("./base64"),k=a("./nodejsUtils"),l=a("core-js/library/fn/set-immediate"),m=a("./external");c.newBlob=function(a,b){c.checkSupport("blob");try{return new Blob([a],{type:b})}catch(d){try{var e=self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder,f=new e;return f.append(a),f.getBlob(b)}catch(d){throw new Error("Bug : can't construct the Blob.")}}};var n={stringifyByChunk:function(a,b,c){var d=[],e=0,f=a.length;if(f<=c)return String.fromCharCode.apply(null,a);for(;e<f;)"array"===b||"nodebuffer"===b?d.push(String.fromCharCode.apply(null,a.slice(e,Math.min(e+c,f)))):d.push(String.fromCharCode.apply(null,a.subarray(e,Math.min(e+c,f)))),e+=c;return d.join("")},stringifyByChar:function(a){for(var b="",c=0;c<a.length;c++)b+=String.fromCharCode(a[c]);return b},applyCanBeUsed:{uint8array:function(){try{return i.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(a){return!1}}(),nodebuffer:function(){try{return i.nodebuffer&&1===String.fromCharCode.apply(null,k.allocBuffer(1)).length}catch(a){return!1}}()}};c.applyFromCharCode=g;var o={};o.string={string:e,array:function(a){return f(a,new Array(a.length))},arraybuffer:function(a){return o.string.uint8array(a).buffer},uint8array:function(a){return f(a,new Uint8Array(a.length))},nodebuffer:function(a){return f(a,k.allocBuffer(a.length))}},o.array={string:g,array:e,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return k.newBufferFrom(a)}},o.arraybuffer={string:function(a){return g(new Uint8Array(a))},array:function(a){return h(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:e,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return k.newBufferFrom(new Uint8Array(a))}},o.uint8array={string:g,array:function(a){return h(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:e,nodebuffer:function(a){return k.newBufferFrom(a)}},o.nodebuffer={string:g,array:function(a){return h(a,new Array(a.length))},arraybuffer:function(a){return o.nodebuffer.uint8array(a).buffer},uint8array:function(a){return h(a,new Uint8Array(a.length))},nodebuffer:e},c.transformTo=function(a,b){if(b||(b=""),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=o[d][a](b);return e},c.getTypeOf=function(a){return"string"==typeof a?"string":"[object Array]"===Object.prototype.toString.call(a)?"array":i.nodebuffer&&k.isBuffer(a)?"nodebuffer":i.uint8array&&a instanceof Uint8Array?"uint8array":i.arraybuffer&&a instanceof ArrayBuffer?"arraybuffer":void 0},c.checkSupport=function(a){var b=i[a.toLowerCase()];if(!b)throw new Error(a+" is not supported by this platform")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d="";for(c=0;c<(a||"").length;c++)b=a.charCodeAt(c),d+="\\x"+(b<16?"0":"")+b.toString(16).toUpperCase();return d},c.delay=function(a,b,c){l(function(){a.apply(c||null,b||[])})},c.inherits=function(a,b){var c=function(){};c.prototype=b.prototype,a.prototype=new c},c.extend=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&"undefined"==typeof c[b]&&(c[b]=arguments[a][b]);return c},c.prepareContent=function(a,b,e,f,g){var h=m.Promise.resolve(b).then(function(a){var b=i.blob&&(a instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(a))!==-1);return b&&"undefined"!=typeof FileReader?new m.Promise(function(b,c){var d=new FileReader;d.onload=function(a){b(a.target.result)},d.onerror=function(a){c(a.target.error)},d.readAsArrayBuffer(a)}):a});return h.then(function(b){var h=c.getTypeOf(b);return h?("arraybuffer"===h?b=c.transformTo("uint8array",b):"string"===h&&(g?b=j.decode(b):e&&f!==!0&&(b=d(b))),b):m.Promise.reject(new Error("Can't read the data of '"+a+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"core-js/library/fn/set-immediate":36}],33:[function(a,b,c){"use strict";function d(a){this.files=[],this.loadOptions=a}var e=a("./reader/readerFor"),f=a("./utils"),g=a("./signature"),h=a("./zipEntry"),i=(a("./utf8"),a("./support"));d.prototype={checkSignature:function(a){if(!this.reader.readAndCheckSignature(a)){this.reader.index-=4;var b=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+f.pretty(b)+", expected "+f.pretty(a)+")")}},isSignature:function(a,b){var c=this.reader.index;this.reader.setIndex(a);var d=this.reader.readString(4),e=d===b;return this.reader.setIndex(c),e},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var a=this.reader.readData(this.zipCommentLength),b=i.uint8array?"uint8array":"array",c=f.transformTo(b,a);this.zipComment=this.loadOptions.decodeFileName(c)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;e<d;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readData(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(g.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(g.CENTRAL_FILE_HEADER);)a=new h({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(g.CENTRAL_DIRECTORY_END);if(a<0){var b=!this.isSignature(0,g.LOCAL_FILE_HEADER);throw b?new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip: can't find end of central directory")}this.reader.setIndex(a);var c=a;if(this.checkSignature(g.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===f.MAX_VALUE_16BITS||this.diskWithCentralDirStart===f.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===f.MAX_VALUE_16BITS||this.centralDirRecords===f.MAX_VALUE_16BITS||this.centralDirSize===f.MAX_VALUE_32BITS||this.centralDirOffset===f.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(g.ZIP64_CENTRAL_DIRECTORY_LOCATOR),a<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(a),this.checkSignature(g.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,g.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(g.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(g.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var d=this.centralDirOffset+this.centralDirSize;this.zip64&&(d+=20,d+=12+this.zip64EndOfCentralSize);var e=c-d;if(e>0)this.isSignature(c,g.CENTRAL_FILE_HEADER)||(this.reader.zero=e);else if(e<0)throw new Error("Corrupted zip: missing "+Math.abs(e)+" bytes.")},prepareReader:function(a){this.reader=e(a)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=d},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(a,b,c){"use strict";function d(a,b){this.options=a,this.loadOptions=b}var e=a("./reader/readerFor"),f=a("./utils"),g=a("./compressedObject"),h=a("./crc32"),i=a("./utf8"),j=a("./compressions"),k=a("./support"),l=0,m=3,n=function(a){for(var b in j)if(j.hasOwnProperty(b)&&j[b].magic===a)return j[b];return null};d.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readData(this.fileNameLength),a.skip(c),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(b=n(this.compressionMethod),null===b)throw new Error("Corrupted zip : compression "+f.pretty(this.compressionMethod)+" unknown (inner file : "+f.transformTo("string",this.fileName)+")");this.decompressed=new g(this.compressedSize,this.uncompressedSize,this.crc32,b,a.readData(this.compressedSize))},readCentralPart:function(a){this.versionMadeBy=a.readInt(2),a.skip(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4);var b=a.readInt(2);if(this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");a.skip(b),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),a===l&&(this.dosPermissions=63&this.externalFileAttributes),a===m&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(a){if(this.extraFields[1]){var b=e(this.extraFields[1].value);this.uncompressedSize===f.MAX_VALUE_32BITS&&(this.uncompressedSize=b.readInt(8)),this.compressedSize===f.MAX_VALUE_32BITS&&(this.compressedSize=b.readInt(8)),this.localHeaderOffset===f.MAX_VALUE_32BITS&&(this.localHeaderOffset=b.readInt(8)),this.diskNumberStart===f.MAX_VALUE_32BITS&&(this.diskNumberStart=b.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});a.index<e;)b=a.readInt(2),c=a.readInt(2),d=a.readData(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){var a=k.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=i.utf8decode(this.fileName),this.fileCommentStr=i.utf8decode(this.fileComment);else{var b=this.findExtraFieldUnicodePath();if(null!==b)this.fileNameStr=b;else{var c=f.transformTo(a,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(c)}var d=this.findExtraFieldUnicodeComment();if(null!==d)this.fileCommentStr=d;else{var e=f.transformTo(a,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(e)}}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=e(a.value);return 1!==b.readInt(1)?null:h(this.fileName)!==b.readInt(4)?null:i.utf8decode(b.readData(a.length-5))}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=e(a.value);return 1!==b.readInt(1)?null:h(this.fileComment)!==b.readInt(4)?null:i.utf8decode(b.readData(a.length-5))}return null}},b.exports=d},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(a,b,c){"use strict";var d=a("./stream/StreamHelper"),e=a("./stream/DataWorker"),f=a("./utf8"),g=a("./compressedObject"),h=a("./stream/GenericWorker"),i=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this.unixPermissions=c.unixPermissions,this.dosPermissions=c.dosPermissions,this._data=b,this._dataBinary=c.binary,this.options={compression:c.compression,compressionOptions:c.compressionOptions}};i.prototype={internalStream:function(a){var b=null,c="string";try{if(!a)throw new Error("No output type specified.");c=a.toLowerCase();var e="string"===c||"text"===c;"binarystring"!==c&&"text"!==c||(c="string"),b=this._decompressWorker();var g=!this._dataBinary;g&&!e&&(b=b.pipe(new f.Utf8EncodeWorker)),!g&&e&&(b=b.pipe(new f.Utf8DecodeWorker))}catch(i){b=new h("error"),b.error(i)}return new d(b,c,"")},async:function(a,b){return this.internalStream(a).accumulate(b)},nodeStream:function(a,b){return this.internalStream(a||"nodebuffer").toNodejsStream(b)},_compressWorker:function(a,b){if(this._data instanceof g&&this._data.compression.magic===a.magic)return this._data.getCompressedWorker();var c=this._decompressWorker();return this._dataBinary||(c=c.pipe(new f.Utf8EncodeWorker)),g.createWorkerFrom(c,a,b)},_decompressWorker:function(){return this._data instanceof g?this._data.getContentWorker():this._data instanceof h?this._data:new e(this._data)}};for(var j=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],k=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},l=0;l<j.length;l++)i.prototype[j[l]]=k;b.exports=i},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(a,b,c){a("../modules/web.immediate"),b.exports=a("../modules/_core").setImmediate},{"../modules/_core":40,"../modules/web.immediate":56}],37:[function(a,b,c){b.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},{}],38:[function(a,b,c){var d=a("./_is-object");b.exports=function(a){if(!d(a))throw TypeError(a+" is not an object!");return a}},{"./_is-object":51}],39:[function(a,b,c){var d={}.toString;b.exports=function(a){return d.call(a).slice(8,-1)}},{}],40:[function(a,b,c){var d=b.exports={version:"2.3.0"};"number"==typeof __e&&(__e=d)},{}],41:[function(a,b,c){var d=a("./_a-function");b.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},{"./_a-function":37}],42:[function(a,b,c){b.exports=!a("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":45}],43:[function(a,b,c){var d=a("./_is-object"),e=a("./_global").document,f=d(e)&&d(e.createElement);b.exports=function(a){return f?e.createElement(a):{}}},{"./_global":46,"./_is-object":51}],44:[function(a,b,c){var d=a("./_global"),e=a("./_core"),f=a("./_ctx"),g=a("./_hide"),h="prototype",i=function(a,b,c){var j,k,l,m=a&i.F,n=a&i.G,o=a&i.S,p=a&i.P,q=a&i.B,r=a&i.W,s=n?e:e[b]||(e[b]={}),t=s[h],u=n?d:o?d[b]:(d[b]||{})[h];n&&(c=b);for(j in c)k=!m&&u&&void 0!==u[j],k&&j in s||(l=k?u[j]:c[j],s[j]=n&&"function"!=typeof u[j]?c[j]:q&&k?f(l,d):r&&u[j]==l?function(a){var b=function(b,c,d){if(this instanceof a){switch(arguments.length){case 0:return new a;case 1:return new a(b);case 2:return new a(b,c)}return new a(b,c,d)}return a.apply(this,arguments)};return b[h]=a[h],b}(l):p&&"function"==typeof l?f(Function.call,l):l,p&&((s.virtual||(s.virtual={}))[j]=l,a&i.R&&t&&!t[j]&&g(t,j,l)))};i.F=1,i.G=2,i.S=4,i.P=8,i.B=16,i.W=32,i.U=64,i.R=128,b.exports=i},{"./_core":40,"./_ctx":41,"./_global":46,"./_hide":47}],45:[function(a,b,c){b.exports=function(a){try{return!!a()}catch(b){return!0}}},{}],46:[function(a,b,c){var d=b.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=d)},{}],47:[function(a,b,c){var d=a("./_object-dp"),e=a("./_property-desc");b.exports=a("./_descriptors")?function(a,b,c){return d.f(a,b,e(1,c))}:function(a,b,c){return a[b]=c,a}},{"./_descriptors":42,"./_object-dp":52,"./_property-desc":53}],48:[function(a,b,c){b.exports=a("./_global").document&&document.documentElement},{"./_global":46}],49:[function(a,b,c){b.exports=!a("./_descriptors")&&!a("./_fails")(function(){return 7!=Object.defineProperty(a("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":42,"./_dom-create":43,"./_fails":45}],50:[function(a,b,c){b.exports=function(a,b,c){var d=void 0===c;switch(b.length){case 0:return d?a():a.call(c);case 1:return d?a(b[0]):a.call(c,b[0]);case 2:return d?a(b[0],b[1]):a.call(c,b[0],b[1]);case 3:return d?a(b[0],b[1],b[2]):a.call(c,b[0],b[1],b[2]);case 4:return d?a(b[0],b[1],b[2],b[3]):a.call(c,b[0],b[1],b[2],b[3])}return a.apply(c,b)}},{}],51:[function(a,b,c){b.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},{}],52:[function(a,b,c){var d=a("./_an-object"),e=a("./_ie8-dom-define"),f=a("./_to-primitive"),g=Object.defineProperty;c.f=a("./_descriptors")?Object.defineProperty:function(a,b,c){if(d(a),b=f(b,!0),d(c),e)try{return g(a,b,c)}catch(h){}if("get"in c||"set"in c)throw TypeError("Accessors not supported!");return"value"in c&&(a[b]=c.value),a}},{"./_an-object":38,"./_descriptors":42,"./_ie8-dom-define":49,"./_to-primitive":55}],53:[function(a,b,c){b.exports=function(a,b){return{enumerable:!(1&a),configurable:!(2&a),writable:!(4&a),value:b}}},{}],54:[function(a,b,c){var d,e,f,g=a("./_ctx"),h=a("./_invoke"),i=a("./_html"),j=a("./_dom-create"),k=a("./_global"),l=k.process,m=k.setImmediate,n=k.clearImmediate,o=k.MessageChannel,p=0,q={},r="onreadystatechange",s=function(){var a=+this;if(q.hasOwnProperty(a)){var b=q[a];delete q[a],b()}},t=function(a){s.call(a.data)};m&&n||(m=function(a){for(var b=[],c=1;arguments.length>c;)b.push(arguments[c++]);return q[++p]=function(){h("function"==typeof a?a:Function(a),b)},d(p),p},n=function(a){delete q[a]},"process"==a("./_cof")(l)?d=function(a){l.nextTick(g(s,a,1))}:o?(e=new o,f=e.port2,e.port1.onmessage=t,d=g(f.postMessage,f,1)):k.addEventListener&&"function"==typeof postMessage&&!k.importScripts?(d=function(a){k.postMessage(a+"","*")},k.addEventListener("message",t,!1)):d=r in j("script")?function(a){i.appendChild(j("script"))[r]=function(){i.removeChild(this),s.call(a)}}:function(a){setTimeout(g(s,a,1),0)}),b.exports={set:m,clear:n}},{"./_cof":39,"./_ctx":41,"./_dom-create":43,"./_global":46,"./_html":48,"./_invoke":50}],55:[function(a,b,c){var d=a("./_is-object");b.exports=function(a,b){if(!d(a))return a;var c,e;if(b&&"function"==typeof(c=a.toString)&&!d(e=c.call(a)))return e;if("function"==typeof(c=a.valueOf)&&!d(e=c.call(a)))return e;if(!b&&"function"==typeof(c=a.toString)&&!d(e=c.call(a)))return e;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":51}],56:[function(a,b,c){var d=a("./_export"),e=a("./_task");d(d.G+d.B,{setImmediate:e.set,clearImmediate:e.clear})},{"./_export":44,"./_task":54}],57:[function(a,b,c){(function(a){"use strict";function c(){k=!0;for(var a,b,c=l.length;c;){for(b=l,l=[],a=-1;++a<c;)b[a]();c=l.length}k=!1}function d(a){1!==l.push(a)||k||e()}var e,f=a.MutationObserver||a.WebKitMutationObserver;if(f){var g=0,h=new f(c),i=a.document.createTextNode("");h.observe(i,{characterData:!0}),e=function(){i.data=g=++g%2}}else if(a.setImmediate||"undefined"==typeof a.MessageChannel)e="document"in a&&"onreadystatechange"in a.document.createElement("script")?function(){var b=a.document.createElement("script");b.onreadystatechange=function(){c(),b.onreadystatechange=null,b.parentNode.removeChild(b),b=null},a.document.documentElement.appendChild(b)}:function(){setTimeout(c,0)};else{var j=new a.MessageChannel;j.port1.onmessage=c,e=function(){j.port2.postMessage(0)}}var k,l=[];b.exports=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],58:[function(a,b,c){"use strict";function d(){}function e(a){if("function"!=typeof a)throw new TypeError("resolver must be a function");this.state=s,this.queue=[],this.outcome=void 0,a!==d&&i(this,a)}function f(a,b,c){this.promise=a,"function"==typeof b&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),"function"==typeof c&&(this.onRejected=c,this.callRejected=this.otherCallRejected)}function g(a,b,c){o(function(){var d;try{d=b(c)}catch(e){return p.reject(a,e)}d===a?p.reject(a,new TypeError("Cannot resolve promise with itself")):p.resolve(a,d)})}function h(a){var b=a&&a.then;if(a&&("object"==typeof a||"function"==typeof a)&&"function"==typeof b)return function(){b.apply(a,arguments)}}function i(a,b){function c(b){f||(f=!0,p.reject(a,b))}function d(b){f||(f=!0,p.resolve(a,b))}function e(){b(d,c)}var f=!1,g=j(e);"error"===g.status&&c(g.value)}function j(a,b){var c={};try{c.value=a(b),c.status="success"}catch(d){c.status="error",c.value=d}return c}function k(a){return a instanceof this?a:p.resolve(new this(d),a)}function l(a){var b=new this(d);return p.reject(b,a)}function m(a){function b(a,b){function d(a){g[b]=a,++h!==e||f||(f=!0,p.resolve(j,g))}c.resolve(a).then(d,function(a){f||(f=!0,p.reject(j,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=new Array(e),h=0,i=-1,j=new this(d);++i<e;)b(a[i],i);return j}function n(a){function b(a){c.resolve(a).then(function(a){f||(f=!0,p.resolve(h,a))},function(a){f||(f=!0,p.reject(h,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=-1,h=new this(d);++g<e;)b(a[g]);return h}var o=a("immediate"),p={},q=["REJECTED"],r=["FULFILLED"],s=["PENDING"];b.exports=e,e.prototype["catch"]=function(a){return this.then(null,a)},e.prototype.then=function(a,b){if("function"!=typeof a&&this.state===r||"function"!=typeof b&&this.state===q)return this;var c=new this.constructor(d);if(this.state!==s){var e=this.state===r?a:b;g(c,e,this.outcome)}else this.queue.push(new f(c,a,b));return c},f.prototype.callFulfilled=function(a){p.resolve(this.promise,a)},f.prototype.otherCallFulfilled=function(a){g(this.promise,this.onFulfilled,a)},f.prototype.callRejected=function(a){p.reject(this.promise,a)},f.prototype.otherCallRejected=function(a){g(this.promise,this.onRejected,a)},p.resolve=function(a,b){var c=j(h,b);if("error"===c.status)return p.reject(a,c.value);var d=c.value;if(d)i(a,d);else{a.state=r,a.outcome=b;for(var e=-1,f=a.queue.length;++e<f;)a.queue[e].callFulfilled(b)}return a},p.reject=function(a,b){a.state=q,a.outcome=b;for(var c=-1,d=a.queue.length;++c<d;)a.queue[c].callRejected(b);return a},e.resolve=k,e.reject=l,e.all=m,e.race=n},{immediate:57}],59:[function(a,b,c){"use strict";var d=a("./lib/utils/common").assign,e=a("./lib/deflate"),f=a("./lib/inflate"),g=a("./lib/zlib/constants"),h={};d(h,e,f,g),b.exports=h},{"./lib/deflate":60,"./lib/inflate":61,"./lib/utils/common":62,"./lib/zlib/constants":65}],60:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=i.assign({level:s,method:u,chunkSize:16384,windowBits:15,memLevel:8,strategy:t,to:""},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=h.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==p)throw new Error(k[c]);if(b.header&&h.deflateSetHeader(this.strm,b.header),b.dictionary){var e;if(e="string"==typeof b.dictionary?j.string2buf(b.dictionary):"[object ArrayBuffer]"===m.call(b.dictionary)?new Uint8Array(b.dictionary):b.dictionary,c=h.deflateSetDictionary(this.strm,e),c!==p)throw new Error(k[c]);this._dict_set=!0}}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg||k[c.err];return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}function g(a,b){return b=b||{},b.gzip=!0,e(a,b)}var h=a("./zlib/deflate"),i=a("./utils/common"),j=a("./utils/strings"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=Object.prototype.toString,n=0,o=4,p=0,q=1,r=2,s=-1,t=0,u=8;d.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?o:n,"string"==typeof a?e.input=j.string2buf(a):"[object ArrayBuffer]"===m.call(a)?e.input=new Uint8Array(a):e.input=a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new i.Buf8(f),e.next_out=0,e.avail_out=f),c=h.deflate(e,d),c!==q&&c!==p)return this.onEnd(c),this.ended=!0,!1;0!==e.avail_out&&(0!==e.avail_in||d!==o&&d!==r)||("string"===this.options.to?this.onData(j.buf2binstring(i.shrinkBuf(e.output,e.next_out))):this.onData(i.shrinkBuf(e.output,e.next_out)))}while((e.avail_in>0||0===e.avail_out)&&c!==q);return d===o?(c=h.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):d!==r||(this.onEnd(p),e.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===p&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=d,c.deflate=e,c.deflateRaw=f,c.gzip=g},{"./utils/common":62,"./utils/strings":63,"./zlib/deflate":67,"./zlib/messages":72,"./zlib/zstream":74}],61:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg||k[c.err];return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a("./zlib/inflate"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/constants"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=a("./zlib/gzheader"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,"string"==typeof a?m.input=i.binstring2buf(a):"[object ArrayBuffer]"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l="string"==typeof p?i.string2buf(p):"[object ArrayBuffer]"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0!==m.avail_out&&c!==j.Z_STREAM_END&&(0!==m.avail_in||d!==j.Z_FINISH&&d!==j.Z_SYNC_FLUSH)||("string"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out)))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d!==j.Z_SYNC_FLUSH||(this.onEnd(j.Z_OK),m.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{"./utils/common":62,"./utils/strings":63,"./zlib/constants":65,"./zlib/gzheader":68,"./zlib/inflate":70,"./zlib/messages":72,"./zlib/zstream":74}],62:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;f<d;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;b<c;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;b<c;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;f<d;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],63:[function(a,b,c){"use strict";function d(a,b){if(b<65537&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;d<b;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;j<256;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;f<h;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=c<128?1:c<2048?2:c<65536?3:4;for(b=new e.Buf8(i),g=0,f=0;g<i;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),c<128?b[g++]=c:c<2048?(b[g++]=192|c>>>6,b[g++]=128|63&c):c<65536?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;c<d;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;c<h;)if(f=a[c++],f<128)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&c<h;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:f<65536?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":62}],64:[function(a,b,c){"use strict";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0;
+}b.exports=d},{}],65:[function(a,b,c){"use strict";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],66:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;c<256;c++){a=c;for(var d=0;d<8;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;h<g;h++)a=a>>>8^e[255&(a^b[h])];return a^-1}var f=d();b.exports=e},{}],67:[function(a,b,c){"use strict";function d(a,b){return a.msg=I[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(E.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){F._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,E.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=G(a.adler,b,e,c):2===a.state.wrap&&(a.adler=H(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-la?a.strstart-(a.w_size-la):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ka,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&f<m);if(d=ka-(m-f),f=m-ka,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-la)){E.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=ja)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+ja-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<ja)););}while(a.lookahead<la&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===J)return ua;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return ua;if(a.strstart-a.block_start>=a.w_size-la&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?ua:ua}function o(a,b){for(var c,d;;){if(a.lookahead<la){if(m(a),a.lookahead<la&&b===J)return ua;if(0===a.lookahead)break}if(c=0,a.lookahead>=ja&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-la&&(a.match_length=l(a,c)),a.match_length>=ja)if(d=F._tr_tally(a,a.strstart-a.match_start,a.match_length-ja),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=ja){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=a.strstart<ja-1?a.strstart:ja-1,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function p(a,b){for(var c,d,e;;){if(a.lookahead<la){if(m(a),a.lookahead<la&&b===J)return ua;if(0===a.lookahead)break}if(c=0,a.lookahead>=ja&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=ja-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-la&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===U||a.match_length===ja&&a.strstart-a.match_start>4096)&&(a.match_length=ja-1)),a.prev_length>=ja&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-ja,d=F._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-ja),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=ja-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return ua}else if(a.match_available){if(d=F._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return ua}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=F._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<ja-1?a.strstart:ja-1,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ka){if(m(a),a.lookahead<=ka&&b===J)return ua;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=ja&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ka;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&e<f);a.match_length=ka-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=ja?(c=F._tr_tally(a,1,a.match_length-ja),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===J)return ua;break}if(a.match_length=0,c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function s(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e}function t(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=D[a.level].max_lazy,a.good_match=D[a.level].good_length,a.nice_match=D[a.level].nice_length,a.max_chain_length=D[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=ja-1,a.match_available=0,a.ins_h=0}function u(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new E.Buf16(2*ha),this.dyn_dtree=new E.Buf16(2*(2*fa+1)),this.bl_tree=new E.Buf16(2*(2*ga+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new E.Buf16(ia+1),this.heap=new E.Buf16(2*ea+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new E.Buf16(2*ea+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=Z,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?na:sa,a.adler=2===b.wrap?0:1,b.last_flush=J,F._tr_init(b),O):d(a,Q)}function w(a){var b=v(a);return b===O&&t(a.state),b}function x(a,b){return a&&a.state?2!==a.state.wrap?Q:(a.state.gzhead=b,O):Q}function y(a,b,c,e,f,g){if(!a)return Q;var h=1;if(b===T&&(b=6),e<0?(h=0,e=-e):e>15&&(h=2,e-=16),f<1||f>_||c!==$||e<8||e>15||b<0||b>9||g<0||g>X)return d(a,Q);8===e&&(e=9);var i=new u;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+ja-1)/ja),i.window=new E.Buf8(2*i.w_size),i.head=new E.Buf16(i.hash_size),i.prev=new E.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new E.Buf8(i.pending_buf_size),i.d_buf=1*i.lit_bufsize,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,w(a)}function z(a,b){return y(a,b,$,aa,ba,Y)}function A(a,b){var c,h,k,l;if(!a||!a.state||b>N||b<0)return a?d(a,Q):Q;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===ta&&b!==M)return d(a,0===a.avail_out?S:Q);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===na)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=H(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=oa):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,ya),h.status=sa);else{var m=$+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=V||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ma),m+=31-m%31,h.status=sa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===oa)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pa)}else h.status=pa;if(h.status===pa)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=qa)}else h.status=qa;if(h.status===qa)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=ra)}else h.status=ra;if(h.status===ra&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=sa)):h.status=sa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,O}else if(0===a.avail_in&&e(b)<=e(c)&&b!==M)return d(a,S);if(h.status===ta&&0!==a.avail_in)return d(a,S);if(0!==a.avail_in||0!==h.lookahead||b!==J&&h.status!==ta){var o=h.strategy===V?r(h,b):h.strategy===W?q(h,b):D[h.level].func(h,b);if(o!==wa&&o!==xa||(h.status=ta),o===ua||o===wa)return 0===a.avail_out&&(h.last_flush=-1),O;if(o===va&&(b===K?F._tr_align(h):b!==N&&(F._tr_stored_block(h,0,0,!1),b===L&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,O}return b!==M?O:h.wrap<=0?P:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?O:P)}function B(a){var b;return a&&a.state?(b=a.state.status,b!==na&&b!==oa&&b!==pa&&b!==qa&&b!==ra&&b!==sa&&b!==ta?d(a,Q):(a.state=null,b===sa?d(a,R):O)):Q}function C(a,b){var c,d,e,g,h,i,j,k,l=b.length;if(!a||!a.state)return Q;if(c=a.state,g=c.wrap,2===g||1===g&&c.status!==na||c.lookahead)return Q;for(1===g&&(a.adler=G(a.adler,b,l,0)),c.wrap=0,l>=c.w_size&&(0===g&&(f(c.head),c.strstart=0,c.block_start=0,c.insert=0),k=new E.Buf8(c.w_size),E.arraySet(k,b,l-c.w_size,c.w_size,0),b=k,l=c.w_size),h=a.avail_in,i=a.next_in,j=a.input,a.avail_in=l,a.next_in=0,a.input=b,m(c);c.lookahead>=ja;){d=c.strstart,e=c.lookahead-(ja-1);do c.ins_h=(c.ins_h<<c.hash_shift^c.window[d+ja-1])&c.hash_mask,c.prev[d&c.w_mask]=c.head[c.ins_h],c.head[c.ins_h]=d,d++;while(--e);c.strstart=d,c.lookahead=ja-1,m(c)}return c.strstart+=c.lookahead,c.block_start=c.strstart,c.insert=c.lookahead,c.lookahead=0,c.match_length=c.prev_length=ja-1,c.match_available=0,a.next_in=i,a.input=j,a.avail_in=h,c.wrap=g,O}var D,E=a("../utils/common"),F=a("./trees"),G=a("./adler32"),H=a("./crc32"),I=a("./messages"),J=0,K=1,L=3,M=4,N=5,O=0,P=1,Q=-2,R=-3,S=-5,T=-1,U=1,V=2,W=3,X=4,Y=0,Z=2,$=8,_=9,aa=15,ba=8,ca=29,da=256,ea=da+1+ca,fa=30,ga=19,ha=2*ea+1,ia=15,ja=3,ka=258,la=ka+ja+1,ma=32,na=42,oa=69,pa=73,qa=91,ra=103,sa=113,ta=666,ua=1,va=2,wa=3,xa=4,ya=3;D=[new s(0,0,0,0,n),new s(4,4,8,4,o),new s(4,5,16,8,o),new s(4,6,32,32,o),new s(4,4,16,16,p),new s(8,16,32,32,p),new s(8,16,128,128,p),new s(8,32,128,256,p),new s(32,128,258,1024,p),new s(32,258,258,4096,p)],c.deflateInit=z,c.deflateInit2=y,c.deflateReset=w,c.deflateResetKeep=v,c.deflateSetHeader=x,c.deflate=A,c.deflateEnd=B,c.deflateSetDictionary=C,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":62,"./adler32":64,"./crc32":66,"./messages":72,"./trees":73}],68:[function(a,b,c){"use strict";function d(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=d},{}],69:[function(a,b,c){"use strict";var d=30,e=12;b.exports=function(a,b){var c,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;c=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=c.dmax,l=c.wsize,m=c.whave,n=c.wnext,o=c.window,p=c.hold,q=c.bits,r=c.lencode,s=c.distcode,t=(1<<c.lenbits)-1,u=(1<<c.distbits)-1;a:do{q<15&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){c.mode=e;break a}a.msg="invalid literal/length code",c.mode=d;break a}x=65535&v,w&=15,w&&(q<w&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),q<15&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg="invalid distance code",c.mode=d;break a}if(y=65535&v,w&=15,q<w&&(p+=B[f++]<<q,q+=8,q<w&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg="invalid distance too far back",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg="invalid distance too far back",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,w<x){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(n<w){if(z+=l+n-w,w-=n,w<x){x-=w;do C[h++]=o[z++];while(--w);if(z=0,n<x){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,w<x){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(f<g&&h<j);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=f<g?5+(g-f):5-(f-g),a.avail_out=h<j?257+(j-h):257-(h-j),c.hold=p,c.bits=q}},{}],70:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,b<0?(c=0,b=-b):(c=(b>>4)+1,b<48&&(b&=15)),b&&(b<8||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;b<144;)a.lens[b++]=8;for(;b<256;)a.lens[b++]=9;for(;b<280;)a.lens[b++]=7;for(;b<288;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;b<32;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new s.Buf8(f.wsize)),d>=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,r,pa,qa,ra,sa,ta,ua,va,wa,xa,ya,za,Aa=0,Ba=new s.Buf8(4),Ca=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return G;c=a.state,c.mode===W&&(c.mode=X),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xa=D;a:for(;;)switch(c.mode){case L:if(0===c.wrap){c.mode=X;break}for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=ma;break}if((15&m)!==K){a.msg="unknown compression method",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=ma;break}c.dmax=1<<wa,a.adler=c.check=1,c.mode=512&m?U:W,m=0,n=0;break;case M:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==K){a.msg="unknown compression method",c.mode=ma;break}if(57344&c.flags){a.msg="unknown header flags set",c.mode=ma;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&q<i);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=S;case S:if(4096&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa));while(wa&&q<i);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=T;case T:if(512&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg="header crc mismatch",c.mode=ma;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=V;case V:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,F;a.adler=c.check=1,c.mode=W;case W:if(b===B||b===C)break a;case X:if(c.last){m>>>=7&n,n-=7&n,c.mode=ja;break}for(;n<3;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg="invalid block type",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg="invalid stored block lengths",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;n<14;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.have<c.ncode;){for(;n<3;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Ca[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have<c.nlen+c.ndist;){for(;Aa=c.lencode[m&(1<<c.lenbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(sa<16)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<<c.lenbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(ra&&0===(240&ra)){for(ta=qa,ua=ra,va=sa;Aa=c.lencode[va+((m&(1<<ta+ua)-1)>>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg="invalid literal/length code",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<<c.distbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&ra)){for(ta=qa,ua=ra,va=sa;Aa=c.distcode[va+((m&(1<<ta+ua)-1)>>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;n<32;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?u(c.check,f,p,h-p):t(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg="incorrect data check",c.mode=ma;break}m=0,n=0}c.mode=ka;case ka:if(c.wrap&&c.flags){for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg="incorrect length check",c.mode=ma;break}m=0,n=0}c.mode=la;case la:xa=E;break a;case ma:xa=H;break a;case na:return I;case oa:default:return G}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<ma&&(c.mode<ja||b!==A))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=na,I):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?u(c.check,f,p,a.next_out-p):t(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===W?128:0)+(c.mode===ca||c.mode===Z?256:0),(0===o&&0===p||b===A)&&xa===D&&(xa=J),xa)}function n(a){if(!a||!a.state)return G;var b=a.state;return b.window&&(b.window=null),a.state=null,D}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?G:(c.head=b,b.done=!1,D)):G}function p(a,b){var c,d,e,f=b.length;return a&&a.state?(c=a.state,0!==c.wrap&&c.mode!==V?G:c.mode===V&&(d=1,d=t(d,b,f,0),d!==c.check)?H:(e=l(a,b,f,f))?(c.mode=na,I):(c.havedict=1,D)):G}var q,r,s=a("../utils/common"),t=a("./adler32"),u=a("./crc32"),v=a("./inffast"),w=a("./inftrees"),x=0,y=1,z=2,A=4,B=5,C=6,D=0,E=1,F=2,G=-2,H=-3,I=-4,J=-5,K=8,L=1,M=2,N=3,O=4,P=5,Q=6,R=7,S=8,T=9,U=10,V=11,W=12,X=13,Y=14,Z=15,$=16,_=17,aa=18,ba=19,ca=20,da=21,ea=22,fa=23,ga=24,ha=25,ia=26,ja=27,ka=28,la=29,ma=30,na=31,oa=32,pa=852,qa=592,ra=15,sa=ra,ta=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateSetDictionary=p,c.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":62,"./adler32":64,"./crc32":66,"./inffast":69,"./inftrees":71}],71:[function(a,b,c){"use strict";var d=a("../utils/common"),e=15,f=852,g=592,h=0,i=1,j=2,k=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],l=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],m=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],n=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];b.exports=function(a,b,c,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new d.Buf16(e+1),Q=new d.Buf16(e+1),R=null,S=0;for(D=0;D<=e;D++)P[D]=0;for(E=0;E<o;E++)P[b[c+E]]++;for(H=C,G=e;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;F<G&&0===P[F];F++);for(H<F&&(H=F),K=1,D=1;D<=e;D++)if(K<<=1,K-=P[D],K<0)return-1;if(K>0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;D<e;D++)Q[D+1]=Q[D]+P[D];for(E=0;E<o;E++)0!==b[c+E]&&(r[Q[b[c+E]]++]=E);if(a===h?(N=R=r,y=19):a===i?(N=k,O-=257,R=l,S-=257,y=256):(N=m,R=n,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===i&&L>f||a===j&&L>g)return 1;for(;;){z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;I+J<G&&(K-=P[I+J],!(K<=0));)I++,K<<=1;if(L+=1<<I,a===i&&L>f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":62}],72:[function(a,b,c){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],73:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length}function f(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b}function g(a){return a<256?ia[a]:ia[256+(a>>>7)]}function h(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function i(a,b,c){a.bi_valid>X-c?(a.bi_buf|=b<<a.bi_valid&65535,h(a,a.bi_buf),a.bi_buf=b>>X-a.bi_valid,a.bi_valid+=c-X):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function j(a,b,c){i(a,c[2*b],c[2*b+1])}function k(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function l(a){16===a.bi_valid?(h(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function m(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;f<=W;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,
+c=a.heap_max+1;c<V;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function n(a,b,c){var d,e,f=new Array(W+1),g=0;for(d=1;d<=W;d++)f[d]=g=g+c[d-1]<<1;for(e=0;e<=b;e++){var h=a[2*e+1];0!==h&&(a[2*e]=k(f[h]++,h))}}function o(){var a,b,c,d,f,g=new Array(W+1);for(c=0,d=0;d<Q-1;d++)for(ka[d]=c,a=0;a<1<<ba[d];a++)ja[c++]=d;for(ja[c-1]=d,f=0,d=0;d<16;d++)for(la[d]=f,a=0;a<1<<ca[d];a++)ia[f++]=d;for(f>>=7;d<T;d++)for(la[d]=f<<7,a=0;a<1<<ca[d]-7;a++)ia[256+f++]=d;for(b=0;b<=W;b++)g[b]=0;for(a=0;a<=143;)ga[2*a+1]=8,a++,g[8]++;for(;a<=255;)ga[2*a+1]=9,a++,g[9]++;for(;a<=279;)ga[2*a+1]=7,a++,g[7]++;for(;a<=287;)ga[2*a+1]=8,a++,g[8]++;for(n(ga,S+1,g),a=0;a<T;a++)ha[2*a+1]=5,ha[2*a]=k(a,5);ma=new e(ga,ba,R+1,S,W),na=new e(ha,ca,0,T,W),oa=new e(new Array(0),da,0,U,Y)}function p(a){var b;for(b=0;b<S;b++)a.dyn_ltree[2*b]=0;for(b=0;b<T;b++)a.dyn_dtree[2*b]=0;for(b=0;b<U;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*Z]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function q(a){a.bi_valid>8?h(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function r(a,b,c,d){q(a),d&&(h(a,c),h(a,~c)),G.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function s(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function t(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&s(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!s(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function u(a,b,c){var d,e,f,h,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],e=a.pending_buf[a.l_buf+k],k++,0===d?j(a,e,b):(f=ja[e],j(a,f+R+1,b),h=ba[f],0!==h&&(e-=ka[f],i(a,e,h)),d--,f=g(d),j(a,f,c),h=ca[f],0!==h&&(d-=la[f],i(a,d,h)));while(k<a.last_lit);j(a,Z,b)}function v(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=V,c=0;c<i;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=j<2?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)t(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],t(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,t(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],m(a,b),n(f,j,a.bl_count)}function w(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;d<=c;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(h<j?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*$]++):h<=10?a.bl_tree[2*_]++:a.bl_tree[2*aa]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function x(a,b,c){var d,e,f=-1,g=b[1],h=0,k=7,l=4;for(0===g&&(k=138,l=3),d=0;d<=c;d++)if(e=g,g=b[2*(d+1)+1],!(++h<k&&e===g)){if(h<l){do j(a,e,a.bl_tree);while(0!==--h)}else 0!==e?(e!==f&&(j(a,e,a.bl_tree),h--),j(a,$,a.bl_tree),i(a,h-3,2)):h<=10?(j(a,_,a.bl_tree),i(a,h-3,3)):(j(a,aa,a.bl_tree),i(a,h-11,7));h=0,f=e,0===g?(k=138,l=3):e===g?(k=6,l=3):(k=7,l=4)}}function y(a){var b;for(w(a,a.dyn_ltree,a.l_desc.max_code),w(a,a.dyn_dtree,a.d_desc.max_code),v(a,a.bl_desc),b=U-1;b>=3&&0===a.bl_tree[2*ea[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function z(a,b,c,d){var e;for(i(a,b-257,5),i(a,c-1,5),i(a,d-4,4),e=0;e<d;e++)i(a,a.bl_tree[2*ea[e]+1],3);x(a,a.dyn_ltree,b-1),x(a,a.dyn_dtree,c-1)}function A(a){var b,c=4093624447;for(b=0;b<=31;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return I;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return J;for(b=32;b<R;b++)if(0!==a.dyn_ltree[2*b])return J;return I}function B(a){pa||(o(),pa=!0),a.l_desc=new f(a.dyn_ltree,ma),a.d_desc=new f(a.dyn_dtree,na),a.bl_desc=new f(a.bl_tree,oa),a.bi_buf=0,a.bi_valid=0,p(a)}function C(a,b,c,d){i(a,(L<<1)+(d?1:0),3),r(a,b,c,!0)}function D(a){i(a,M<<1,3),j(a,Z,ga),l(a)}function E(a,b,c,d){var e,f,g=0;a.level>0?(a.strm.data_type===K&&(a.strm.data_type=A(a)),v(a,a.l_desc),v(a,a.d_desc),g=y(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,f<=e&&(e=f)):e=f=c+5,c+4<=e&&b!==-1?C(a,b,c,d):a.strategy===H||f===e?(i(a,(M<<1)+(d?1:0),3),u(a,ga,ha)):(i(a,(N<<1)+(d?1:0),3),z(a,a.l_desc.max_code+1,a.d_desc.max_code+1,g+1),u(a,a.dyn_ltree,a.dyn_dtree)),p(a),d&&q(a)}function F(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ja[c]+R+1)]++,a.dyn_dtree[2*g(b)]++),a.last_lit===a.lit_bufsize-1}var G=a("../utils/common"),H=4,I=0,J=1,K=2,L=0,M=1,N=2,O=3,P=258,Q=29,R=256,S=R+1+Q,T=30,U=19,V=2*S+1,W=15,X=16,Y=7,Z=256,$=16,_=17,aa=18,ba=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ca=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],da=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fa=512,ga=new Array(2*(S+2));d(ga);var ha=new Array(2*T);d(ha);var ia=new Array(fa);d(ia);var ja=new Array(P-O+1);d(ja);var ka=new Array(Q);d(ka);var la=new Array(T);d(la);var ma,na,oa,pa=!1;c._tr_init=B,c._tr_stored_block=C,c._tr_flush_block=E,c._tr_tally=F,c._tr_align=D},{"../utils/common":62}],74:[function(a,b,c){"use strict";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}]},{},[10])(10)}); \ No newline at end of file
diff --git a/tools/image-splitter/js/main.js b/tools/image-splitter/js/main.js
new file mode 100644
index 0000000..a931769
--- /dev/null
+++ b/tools/image-splitter/js/main.js
@@ -0,0 +1,361 @@
+const $ = document.querySelector.bind(document); // i made jquery :poggers:
+
+document.addEventListener('DOMContentLoaded', init);
+
+const VALID_EXTENSIONS = [
+ '.gif',
+ '.svg',
+ '.jpg',
+ '.jpeg',
+ '.png',
+ '.bmp',
+ '.tiff',
+ '.webp'
+]
+
+let txt, previewDiv, prev, shrinkCheck, shrinkCross, fileInfo;
+let submit, fileInput, prefixInput, sizeInput, shrinkInput, delayLabel, delayInput, form, download;
+let progress, timeTaken;
+
+const section = document.createElement('canvas');
+const ctx = section.getContext('2d');
+
+function init () {
+ txt = $('textarea');
+ previewDiv = $('div');
+ prev = $('td#preview');
+ shrinkCheck = $('i.fa-check');
+ shrinkCross = $('i.fa-times');
+ fileInfo = $('em');
+
+ form = $('form');
+ prefixInput = $('input#prefix');
+ shrinkInput = $('input#shrink');
+ delayInput = $('input#delay');
+ fileInput = $('input#file');
+ sizeInput = $('input#size');
+ submit = $('input#submit');
+ delayLabel = $('label[for="delay"]');
+ download = $('a');
+
+ progress = $('strong');
+ timeTaken = $('p');
+
+ delayLabel.style.display = delayInput.style.display = 'none';
+
+ form.addEventListener('submit', e => e.preventDefault());
+ shrinkInput.addEventListener('click', toggleShrink);
+ addEventListeners();
+ toggleShrink();
+}
+
+const toBlob = (d) => new Promise((res) => d.toBlob(res));
+const isValidFile = (file) => !!file && VALID_EXTENSIONS.some(ext => file.name.endsWith(ext));
+
+function addEventListeners () {
+ form.addEventListener('submit', splitImages);
+ fileInput.addEventListener('change', handleFileChange);
+}
+
+function toggleShrink () {
+ if (shrinkInput.checked) {
+ shrinkCheck.style.display = '';
+ shrinkCross.style.display = 'none';
+ } else {
+ shrinkCross.style.display = '';
+ shrinkCheck.style.display = 'none';
+ }
+}
+
+function handleFileChange () {
+ file = fileInput.files[ 0 ] || file;
+ if (!isValidFile(file)) return;
+ fileInfo.innerText = file.name;
+ delayLabel.style.display = delayInput.style.display = file.name.endsWith('.gif') ? '' : 'none';
+}
+
+function save () {
+ saveAs(currentZip, 'emojis.zip');
+}
+
+function resize (img, w, h) {
+ const resizerCanvas = document.createElement('canvas');
+ const resizerCtx = resizerCanvas.getContext('2d');
+ resizerCanvas.width = w;
+ resizerCanvas.height = h;
+ resizerCtx.drawImage(img, 0, 0, w, h);
+ return resizerCanvas;
+}
+
+async function splitImages () {
+ if (!isValidFile(file)) return;
+
+ const size = +sizeInput.value;
+ submit.value = "Working...";
+
+ form.removeEventListener('submit', splitImages);
+ fileInput.removeEventListener('change', handleFileChange);
+
+ // Clear preview from previous image splitting
+ for (const el of document.querySelectorAll('div.imageRow'))
+ el.parentNode.removeChild(el);
+
+ let str = '';
+ let done = 0;
+ let w, h, numTiles;
+ const prefix = prefixInput.value || file.name.replace(/\.\w+$/, '');
+ const zip = new JSZip();
+ const startTime = Date.now();
+
+ timeTaken.innerText = 'In progress...';
+ submit.value = 'Wait for it...';
+ progress.innerText = '';
+ txt.value = '';
+ section.width = section.height = size;
+
+ if (file.name.endsWith('.gif')) {
+ // Is the image a gif?
+
+ try {
+ // Create array of frames of the provided gif
+ var frames = await gifFrames({
+ url: URL.createObjectURL(file),
+ frames: 'all',
+ outputType: 'canvas'
+ });
+ } catch (err) {
+ fileInfo.innerText = err;
+ throw err;
+ }
+
+ const delay = +delayInput.value;
+
+ const img = frames[ 0 ].frameInfo;
+ w = Math.ceil(img.width / size);
+ h = Math.ceil(img.height / size);
+ numTiles = w * h;
+
+ if (shrinkInput.checked && numTiles > 50) {
+ const scale = 50 / (w * h);
+
+ for (let i = 0; i < frames.length; i++) {
+ const frameImage = frames[ i ].getImage();
+ frames[ i ] = resize(frameImage, img.width * scale, img.height * scale);
+ }
+
+ const frameImage = frames[ 0 ];
+
+ w = Math.ceil(img.width * scale / size);
+ h = Math.ceil(img.height * scale / size);
+ numTiles = w * h;
+ }
+
+ const previewSize = Math.min(prev.offsetWidth / w, prev.offsetHeight / h);
+
+ const queue = [];
+ ctx.fillStyle = '#36393F';
+
+ for (let y = 0; y > -h; y--) {
+ const q = [];
+
+ for (let x = 0; x > -w; x--) {
+ // Script path relative to index.html
+ const gif = new GIF({
+ workerScript: 'js/gif.worker.js'
+ });
+
+ ctx.clearRect(0, 0, size, size);
+ ctx.fillRect(0, 0, size, size);
+
+ for (const image of frames) {
+ if (image instanceof HTMLElement) {
+ // document.body.appendChild(image);
+ // console.log(image)
+ ctx.drawImage(image, x * size, y * size);
+ } else {
+ ctx.drawImage(image.getImage(), x * size, y * size);
+ }
+
+ gif.addFrame(section, { copy: true, delay });
+ }
+
+ gif.render();
+
+ await new Promise((res, rej) => {
+ gif.on('finished', blob => {
+ if (blob.size > 256000) {
+ txt.value += `WARNING: Image ${ prefix }_${ -x }_${ -y } is too large for a discord emoji (>256kb) at ${ blob.size / 1000 }kb.\n`;
+ }
+
+ if (numTiles > 50) {
+ zip.file(`section${ Math.floor(done / 50) }/${ prefix }_${ -x }_${ -y }.gif`, blob);
+ } else {
+ zip.file(`${ prefix }_${ -x }_${ -y }.gif`, blob);
+ }
+
+ const preview = document.createElement('img');
+ preview.src = URL.createObjectURL(blob);
+ preview.width = preview.height = previewSize;
+ q.push(preview);
+
+ str += `:${ prefix }_${ -x }_${ -y }:`;
+ res();
+ })
+ });
+
+ progress.innerText = `Progress: ${ ++done }/${ numTiles }`;
+ }
+
+ queue.push(q);
+ str += '\r\n';
+ }
+
+ for (let y = 0; y < h; y++) {
+ const row = document.createElement('div');
+ row.classList.add('imageRow');
+ row.style.height = `${ Math.floor(previewSize) + 0.8 * 2 }px`;
+
+ for (let x = 0; x < w; x++) {
+ row.appendChild(queue[ y ][ x ]);
+ }
+
+ previewDiv.appendChild(row);
+ }
+ } else {
+
+ // If the image is not a gif
+ let img = new Image();
+ img.src = URL.createObjectURL(file);
+
+ await new Promise((res, rej) => {
+ img.addEventListener('load', async function () {
+
+ w = Math.ceil(img.width / size);
+ h = Math.ceil(img.height / size);
+ numTiles = w * h;
+
+ if (shrinkInput.checked && numTiles > 50) {
+ // Find a scale value such that w * h <= 50
+
+ const scale = 50 / (w * h);
+
+ img = resize(img, img.width * scale, img.height * scale);
+
+ w = Math.ceil(img.width / size);
+ h = Math.ceil(img.height / size);
+ numTiles = w * h;
+ }
+
+ // const c = document.createElement('canvas');
+ // c.width = img.width;
+ // c.height = img.height;
+ // c.getContext('2d').drawImage(img, 0, 0);
+ // document.body.appendChild(c);
+
+ const previewSize = Math.min(prev.offsetWidth / w, prev.offsetHeight / h);
+
+ for (let y = 0; y > -h; y--) {
+ const row = document.createElement('div');
+ row.classList.add('imageRow');
+ row.style.height = `${ Math.floor(previewSize) + 0.8 * 2 }px`;
+
+ for (let x = 0; x > -w; x--) {
+ ctx.drawImage(img, x * size, y * size);
+ const blob = await toBlob(section);
+
+ if (blob.size > 256000) {
+ txt.value += `WARNING: Image ${ prefix }_${ -x }_${ -y } is too large for a discord emoji (>256kb) at ${ blob.size / 1000 }kb.\n`;
+ }
+
+ if (numTiles > 50) {
+ zip.file(`section${ Math.floor(done / 50) }/${ prefix }_${ -x }_${ -y }.png`, blob);
+ } else {
+ zip.file(`${ prefix }_${ -x }_${ -y }.png`, blob);
+ }
+
+ const preview = document.createElement('img');
+ preview.src = URL.createObjectURL(blob);
+ preview.width = preview.height = previewSize;
+ row.appendChild(preview);
+
+ ctx.clearRect(0, 0, size, size);
+ str += `:${ prefix }_${ -x }_${ -y }:`;
+ progress.innerText = `Progress: ${ ++done }/${ numTiles }`;
+ }
+
+ previewDiv.appendChild(row);
+ str += '\r\n';
+ }
+
+ res();
+ });
+ });
+ }
+
+ progress.innerText = `Progress: ${ numTiles }/${ numTiles }`;
+
+ txt.value += str;
+
+ zip.file('emojis.txt', str);
+ currentZip = await zip.generateAsync({ type: 'blob' });
+
+ timeTaken.innerText = `Time taken: ${ Date.now() - startTime }ms`;
+ submit.value = 'Split';
+
+ download.removeEventListener('click', save);
+ download.addEventListener('click', save);
+
+ addEventListeners();
+}
+
+$(window).on('keydown', function () {
+ if (event.keyCode == 123)
+ return false;
+ else if (event.ctrlKey && event.shiftKey && event.keyCode == 73)
+ return false;
+ else if (event.ctrlKey && event.keyCode == 73)
+ return false;
+ else if (event.ctrlKey && event.shiftKey && event.keyCode == 74)
+ return false;
+ else if (event.ctrlKey && event.keyCode == 74)
+ return false;
+});
+document.addEventListener('contextmenu', event => event.preventDefault());
+
+$(document).ready(function () {
+ $(window).scroll(function () {
+ $('.hideme').each(function (i) {
+ var bottom_of_object = $(this).position().top + $(this).outerHeight();
+ var bottom_of_window = $(window).scrollTop() + $(window).height();
+
+ if (bottom_of_window > bottom_of_object) {
+ $(this).animate({
+ 'opacity': '1'
+ }, 500);
+ }
+ });
+ });
+ $('.hideme').each(function (i) {
+ var bottom_of_object = $(this).position().top + $(this).outerHeight();
+ var bottom_of_window = $(window).scrollTop() + $(window).height();
+
+ if (bottom_of_window > bottom_of_object) {
+ $(this).animate({
+ 'opacity': '1'
+ }, 500);
+ }
+ if (document.getElementById("heading")) {
+ $(document.getElementById("heading")).animate({
+ 'opacity': '1'
+ }, 500);
+ }
+ if (document.getElementById("title-quotes")) {
+ $(document.getElementById("title-quotes")).animate({
+ 'opacity': '1'
+ }, 1500);
+ }
+ // document.getElementById("heading").animate({
+ // 'opacity': '1'
+ // }, 500);
+ });
+}); \ No newline at end of file
diff --git a/tools/image-splitter/style.css b/tools/image-splitter/style.css
new file mode 100644
index 0000000..a0f6691
--- /dev/null
+++ b/tools/image-splitter/style.css
@@ -0,0 +1,219 @@
+@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:400');
+
+:root {
+ --black: #1b1918;
+ --dark: #222222;
+ --blue: #8487FF;
+ --grey: #c5c8c6;
+ --reddish: #d75f87;
+ --orange: #cb8700;
+ --white: #ededed;
+ --lblue: #87AFD7;
+}
+
+::-webkit-scrollbar {
+ width: 10px;
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--grey);
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: var(--white);
+}
+
+::-webkit-scrollbar-track {
+ background: transparent;
+}
+
+::-webkit-scrollbar-track:hover {
+ background: var(--black);
+}
+
+* {
+ font-weight: 400;
+ font-family: 'Roboto Mono', monospace;
+}
+
+html, body {
+ padding: 0;
+ background-color: var(--dark);
+ color: var(--grey);
+ overflow-x: hidden;
+ text-align: center;
+ user-select: none;
+}
+
+h1 {
+ color: var(--orange);
+ font-size: 2rem;
+}
+
+h2 {
+ font-size: 1.2rem;
+}
+
+table {
+ width: 100%;
+ margin: 10px;
+ text-align: center;
+}
+
+div {
+ margin-top: 10px;
+}
+
+td#preview {
+ color: var(--lblue);
+}
+
+td {
+ vertical-align: top;
+ background-color: var(--black);
+ box-shadow: 0 4px 10px 0 rgba(0, 0, 0, .2);
+ padding: 50px;
+ display: inline-block;
+ margin: 10px;
+}
+
+td:first-child {
+ text-align: center;
+}
+
+input[type="file"] {
+ display: none;
+}
+
+input[type="number"], input[type="text"] {
+ background-color: var(--white);
+ margin: auto;
+ border: 0;
+ padding: 5px;
+ outline: none;
+}
+
+input[type="submit"] {
+ margin: auto;
+ margin-top: 10px;
+ background-color: var(--black);
+ cursor: pointer;
+ border: 2px solid var(--white);
+ color: var(--white);
+ outline: none;
+ padding: 0.5rem 0.8rem;
+}
+
+input[type="submit"]:hover {
+ background-color: var(--white);
+ color: var(--black);
+}
+
+label[for="file"] {
+ padding: 5px;
+ color: var(--reddish);
+ border: 2px solid var(--reddish);
+ cursor: pointer;
+}
+
+label[for="file"]:hover {
+ color: var(--black);
+ background-color: var(--reddish);
+}
+
+label {
+ font-size: 0.95rem;
+}
+
+input#shrink {
+ opacity: 0;
+ position: absolute;
+}
+
+label[for="shrink"] {
+ cursor: pointer;
+ user-select: none;
+}
+
+i.fa-check {
+ color: rgb(7, 219, 7);
+}
+
+i.fa-times {
+ color: rgb(255, 42, 42);
+}
+
+i.fa-check, i.fa-times {
+ font-size: 1.1rem;
+ vertical-align: middle;
+ width: 1.2rem;
+}
+
+label, input, textarea, strong {
+ display: block;
+ margin: 0.5rem;
+}
+
+h4 {
+ display: block;
+ margin: 0;
+}
+
+td a {
+ text-decoration: none;
+ color: var(--blue);
+ font-size: 1.1em;
+ cursor: pointer;
+ outline: none;
+ padding: 5px 20px;
+ border: 0;
+ margin: 10px;
+ vertical-align: middle;
+ background-color: transparent;
+ border: 2px solid var(--blue);
+}
+
+a:hover {
+ color: var(--black);
+ background-color: var(--blue);
+}
+
+textarea {
+ background-color: var(--white);
+ color: var(--black);
+ outline: none;
+ border: 0;
+ margin: auto;
+ width: 90%;
+ height: 200px;
+ margin-top: 15px;
+}
+
+div.imageRow {
+ display: block;
+ padding: 0;
+ margin: 0;
+}
+
+div.imageRow img {
+ border: .8px solid var(--reddish);
+}
+
+div#footer {
+ margin: 100px 0 0 0;
+ padding: 50px 0;
+ background: var(--black);
+ width: 100%;
+}
+
+div#footer h1 {
+ font-size: 2rem;
+}
+
+div#footer a {
+ color: var(--white);
+}
+
+.hideme {
+ opacity: 0;
+} \ No newline at end of file
diff --git a/tools/index.html b/tools/index.html
new file mode 100644
index 0000000..833db44
--- /dev/null
+++ b/tools/index.html
@@ -0,0 +1 @@
+<script>location.href = 'https://kyzer.co/directory/demos/'</script> \ No newline at end of file
diff --git a/tools/input-lag/.htaccess b/tools/input-lag/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/tools/input-lag/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/tools/input-lag/css/main.css b/tools/input-lag/css/main.css
new file mode 100644
index 0000000..a044e24
--- /dev/null
+++ b/tools/input-lag/css/main.css
@@ -0,0 +1,13 @@
+body {
+ margin: 0;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+svg {
+ width: 100%;
+ height: 100%;
+} \ No newline at end of file
diff --git a/tools/input-lag/index.html b/tools/input-lag/index.html
new file mode 100644
index 0000000..7f3ee68
--- /dev/null
+++ b/tools/input-lag/index.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Input Lag</title>
+ <!-- Site metadata -->
+ <meta name="description" content="Input Lag Simulation">
+ <meta property="og:description" content="Input Lag Simulation">
+ <meta property="og:title" content="s1nical - Input Lag">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/input-lag">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/input-lag">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Input Lag Simulation",
+ "headline": "Input Lag Simulation",
+ "url": "https://kyzer.co/input-lag",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/input-lag/css/main.css">
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+</head>
+
+ <body>
+ <script src="/input-lag/js/main.js"></script>
+ </body>
+
+</html> \ No newline at end of file
diff --git a/tools/input-lag/js/main.js b/tools/input-lag/js/main.js
new file mode 100644
index 0000000..8756bcc
--- /dev/null
+++ b/tools/input-lag/js/main.js
@@ -0,0 +1,84 @@
+var margin = {
+ top: 20,
+ right: 10,
+ bottom: 20,
+ left: 10
+};
+var width = screen.width - margin.left - margin.right;
+var height = screen.height - margin.top - margin.bottom;
+var circleRadius = 20;
+var delay = 100; // in ms
+var circleOffset = circleRadius;
+
+var svg = d3.select("body").append("svg")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .append("g")
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+
+var delays = [1, 5, 10, 20, 50, 100, 500, 1000, 2000];
+
+var circle2 = svg.append('circle')
+ .attr('cx', (width / 2) - circleOffset)
+ .attr('cy', (height / 2) - circleOffset)
+ .attr('r', circleRadius)
+ .attr('fill', 'red')
+
+var circle1 = svg.append('circle')
+ .attr('cx', (width / 2) - circleOffset)
+ .attr('cy', (height / 2) - circleOffset)
+ .attr('r', circleRadius)
+ .attr('fill', 'gray')
+
+var ds = svg.selectAll('.delay')
+ .data(delays)
+ .enter()
+ .append('g')
+ .attr('class', 'delay')
+ .attr('left', 100)
+ .attr('top', 50)
+ .attr('transform', function (d, i) {
+ return 'translate(' + i * 100 + ', 0)';
+ })
+
+function updateButtons() {
+ svg.selectAll('.delay')
+ .select('text')
+ .attr('fill', function (d) {
+ return d === delay ? 'black' : 'lightblue'
+ })
+}
+
+ds.append('text')
+ .text(function (d) {
+ return d + ' ms';
+ })
+ .on('click', function (d) {
+ delay = d;
+ updateButtons();
+ });
+
+svg.append('rect')
+ .attr('height', height)
+ .attr('width', width)
+ .attr('opacity', 0)
+ .on('mousemove', function () {
+ var start = performance.now();
+ var x = d3.event.x;
+ var y = d3.event.y;
+ circle1.attr('cx', x - circleOffset / 2)
+ circle1.attr('cy', y - circleOffset)
+
+ var step = function (timestamp) {
+ if (timestamp - start < delay) {
+ window.requestAnimationFrame(step);
+ } else {
+ circle2.attr('cx', x - circleOffset / 2);
+ circle2.attr('cy', y - circleOffset);
+ }
+ }
+
+ window.requestAnimationFrame(step);
+ })
+
+updateButtons(); \ No newline at end of file
diff --git a/tools/ip-detection/.htaccess b/tools/ip-detection/.htaccess
new file mode 100644
index 0000000..45552cb
--- /dev/null
+++ b/tools/ip-detection/.htaccess
@@ -0,0 +1 @@
+Options -Indexes \ No newline at end of file
diff --git a/tools/ip-detection/index.html b/tools/ip-detection/index.html
new file mode 100644
index 0000000..9622371
--- /dev/null
+++ b/tools/ip-detection/index.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - IP Detection</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- Site metadata -->
+ <meta name="description" content="IP Detection">
+ <meta property="og:description" content="IP Detection">
+ <meta property="og:title" content="s1nical - IP Detection">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/ip-detection">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/ip-detection">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "IP Detection",
+ "headline": "IP Detection",
+ "url": "https://kyzer.co/ip-detection",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+ <script src="/ip-detection/js/main.js"></script>
+</head>
+
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <!--<a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <!--<a href="http://status.maldrama.ml" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <style>
+ .result {
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ }
+ </style>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <div class="content">
+ <div style="text-align: center;">IP: <span class="result" id="ip"></span></div>
+ <div style="text-align: center;">Location: <span class="result" id="address"></span></div>
+ <hr/><h3 style="text-align: center;">Full Response:</h3>
+ <pre class="result" id="details" style="text-align: left;"></pre>
+ <style>
+ @media (max-width: 768px) {
+ .content {
+ font-size: 10px;
+ }
+ }
+ </style>
+ <br class="mobile">
+ <h1>
+ <!-- Filler -->
+ </h1>
+ <a class="mobile" href="/home/">Back home</a>
+ <h1 class="mobile">
+ <!-- Filler -->
+ </h1>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+
+</html>
diff --git a/tools/ip-detection/js/main.js b/tools/ip-detection/js/main.js
new file mode 100644
index 0000000..ce117d8
--- /dev/null
+++ b/tools/ip-detection/js/main.js
@@ -0,0 +1,5 @@
+$.get("https://ipinfo.io/json", function (response) {
+ $("#ip").html(response.ip);
+ $("#address").html(response.city + ", " + response.region);
+ $("#details").html(JSON.stringify(response, null, 4));
+}, "jsonp");
diff --git a/tools/keycodes/index.html b/tools/keycodes/index.html
new file mode 100644
index 0000000..21029ba
--- /dev/null
+++ b/tools/keycodes/index.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>s1nical - Keycodes</title>
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <!-- Site metadata -->
+ <meta name="description" content="Keycodes">
+ <meta property="og:description" content="Keycodes">
+ <meta property="og:title" content="s1nical - Keycodes">
+ <meta property="twitter:card" content="summary">
+ <meta property="twitter:site" content="@9inny">
+ <meta property="og:image" content="">
+ <meta property="og:url" content="https://kyzer.co/keycodes">
+ <link rel="apple-touch-icon" sizes="128x128" href="/favicon.jpg">
+ <link rel="icon" type="image/jpg" href="/favicon.jpg" sizes="128x128">
+ <link rel="canonical" href="https://kyzer.co/keycodes">
+ <link rel="author" href="humans.txt" />
+ <!-- Schema.org Stuff -->
+ <script type="application/ld+json">
+ {
+ "name": "s1nical",
+ "alternateName": "s1n",
+ "description": "Keycodes",
+ "headline": "Keycodes",
+ "url": "https://kyzer.co/keycodes",
+ "image": "",
+ "sameAs": [
+ "https://twitter.com/9inny",
+ "https://github.com/8cy",
+ "https://www.reddit.com/user/s1nical/"
+ ],
+ "publisher": {
+ "@type": "Organization",
+ "logo": {
+ "@type": "ImageObject",
+ "url": ""
+ }
+ },
+ "@type": "WebSite",
+ "@context": "http://schema.org"
+ }
+ </script>
+ <!-- External Libraries -->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.3.1/trianglify.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
+ <!-- CSS Links -->
+ <link rel="stylesheet" href="/about/css/main.css">
+ <link rel="stylesheet" href="/about/css/navigation-bar.css">
+ <link rel="stylesheet" href="/about/css/loader-animation.css">
+ <link rel="stylesheet" href="/about/css/blog-slider.css">
+ <link rel="stylesheet" href="/css/404.css">
+ <!-- Invisible Scripts -->
+ <script src="/js/loader-animation.js"></script>
+ <script src="/js/refresh-on-media.js"></script>
+</head>
+
+ <body>
+ <!-- Visable Scripts -->
+ <script src="/js/background-sparkles.js"></script>
+
+ <!-- Navigation Bar -->
+ <div class="navigation-bar">
+ <nav class="nav">
+ <a href="/home/" class="nav-item" active-color="orange">Home</a>
+ <!-- Had `is-active` after it but removed it due to not highlighting. -->
+ <a href="/about/" class="nav-item" active-color="green">About</a> <!-- About -->
+ <!--<a href="https://p.s1n.pw/" class="nav-item" active-color="blue">Portfolio</a> <!-- Testimonials -->
+ <a href="https://kyzer.co/status" class="nav-item" active-color="red">Status</a> <!-- Blog -->
+ <!--<a href="/cars/" class="nav-item" active-color="rebeccapurple">Cars</a> <!-- Contact -->
+ <!--<a href="https://nani.s1n.pw" class="nav-item" active-color="rebeccapurple">Nani?!</a>-->
+ <span class="nav-indicator"></span>
+ </nav>
+ </div>
+
+ <style>
+ .keycodes-parent {
+ height: 100%;
+ text-align: center;
+ line-height: 1.4;
+ font-size: 25px;
+ }
+
+ pre {
+ text-align: left;
+ }
+ </style>
+
+ <script>
+ document.addEventListener("keydown", function(event) {
+
+ console.log(event);
+
+ document.getElementById("keycodes").innerHTML = `
+ <!--&nbsp;&nbsp;&nbsp;
+ <b>which: ${event.which}</b>
+ <br>&nbsp;-->
+ <b>keyCode:</b> ${event.keyCode}
+ <br>&nbsp;&nbsp;&nbsp;
+ <b>shiftKey:</b> ${event.shiftKey}
+ </br>&nbsp;&nbsp;&nbsp;&nbsp;
+ <b>altKey:</b> ${event.altKey}
+ <br>&nbsp;&nbsp;&nbsp;
+ <b>ctrlKey:</b> ${event.ctrlKey}
+ <br>&nbsp;&nbsp;
+ <b>metaKey:</b> ${event.metaKey}
+ <br>&nbsp;&nbsp;
+ <b>key:</b> ${event.key}
+ `;
+
+ });
+
+ $(window).on('keydown', function () {
+ if (event.keyCode == 123, 112, 114, 116)
+ return false;
+ else if (event.ctrlKey && event.shiftKey && event.keyCode == 73)
+ return false;
+ else if (event.ctrlKey && event.keyCode == 73)
+ return false;
+ else if (event.ctrlKey && event.shiftKey && event.keyCode == 74)
+ return false;
+ else if (event.ctrlKey && event.keyCode == 74)
+ return false;
+ });
+ </script>
+
+ <div class="bio">
+ <div class="links">
+ <div class="blog-slider">
+ <div class="content" style="text-align: center;">
+ <div class="keycodes-parent">
+ <span id="keycodes">
+ <b>keyCode:</b> NaN<br>
+ <b>shiftKey:</b> NaN<br>
+ <b>altKey:</b> NaN<br>
+ <b>ctrlKey:</b> NaN<br>
+ <b>metaKey:</b> NaN<br>
+ <b>key:</b> NaN
+ </span>
+ </div>
+ <a class="mobile" href="/home/">Back home</a>
+ <h1 class="mobile">
+ <!-- Filler -->
+ </h1>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Loading Animation -->
+ <div class="loader-wrapper">
+ <div class="loader">
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ <row>
+ <span></span>
+ <span></span>
+ <span></span>
+ </row>
+ </div>
+ </div>
+ </body>
+
+</html>
diff --git a/visitors/.htaccess b/visitors/.htaccess
new file mode 100644
index 0000000..0762e39
--- /dev/null
+++ b/visitors/.htaccess
@@ -0,0 +1,4 @@
+AuthUserFile /home/vol9_2/epizy.com/epiz_25275270/htdocs/assets/users/.htpasswdmufxo45v5tz7bAWr
+AuthType Basic
+AuthName "My restricted Area"
+Require valid-user \ No newline at end of file
diff --git a/visitors/index.php b/visitors/index.php
new file mode 100644
index 0000000..fe3dac7
--- /dev/null
+++ b/visitors/index.php
@@ -0,0 +1,11 @@
+<?php
+ //require_once('pass.php');
+
+ $url1=$_SERVER['REQUEST_URI'];
+ header("Refresh: 5; URL=$url1");
+?>
+<title>s1nical - Visitors</title>
+<b>Cleared On: 2020/01/13</b>
+<!---->
+
+<pre><b>User IP</b>: 24.21.215.107 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/02/2020 19:14:32 <br></pre><pre><b>User IP</b>: 24.21.215.107 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/02/2020 19:17:24 <br></pre><pre><b>User IP</b>: 162.158.106.243 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/79.0.3945.130 Safari/537.36 (compatible; Cloudflare SpeedTest/1.0; +https://blog.cloudflare.com/new-speed-page/) <br>on Time : 03/02/2020 19:18:59 <br></pre><pre><b>User IP</b>: 162.158.107.216 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/79.0.3945.130 Safari/537.36 (compatible; Cloudflare SpeedTest/1.0; +https://blog.cloudflare.com/new-speed-page/) <br>on Time : 03/02/2020 19:18:59 <br></pre><pre><b>User IP</b>: 162.158.107.216 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0;+http://www.cloudflare.com/always-online) <br>on Time : 03/02/2020 20:35:17 <br></pre><pre><b>User IP</b>: 162.158.79.92 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34 <br>on Time : 03/02/2020 20:35:20 <br></pre><pre><b>User IP</b>: 108.162.246.218 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0;+http://www.cloudflare.com/always-online) <br>on Time : 03/02/2020 20:36:00 <br></pre><pre><b>User IP</b>: 172.68.65.111 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34 <br>on Time : 03/02/2020 20:36:00 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/02/2020 22:34:29 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/03/2020 09:00:22 <br></pre><pre><b>User IP</b>: 108.162.246.20 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1 <br>on Time : 03/04/2020 14:20:54 <br></pre><pre><b>User IP</b>: 141.101.98.43 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/04/2020 14:21:58 <br></pre><pre><b>User IP</b>: 162.158.107.184 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1 <br>on Time : 03/04/2020 14:26:28 <br></pre><pre><b>User IP</b>: 162.158.107.184 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1 <br>on Time : 03/04/2020 14:26:29 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/04/2020 19:10:31 <br></pre><pre><b>User IP</b>: 108.162.246.164 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/79.0.3945.130 Safari/537.36 (compatible; Cloudflare SpeedTest/1.0; +https://blog.cloudflare.com/new-speed-page/) <br>on Time : 03/04/2020 19:11:09 <br></pre><pre><b>User IP</b>: 162.158.107.226 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/79.0.3945.130 Safari/537.36 (compatible; Cloudflare SpeedTest/1.0; +https://blog.cloudflare.com/new-speed-page/) <br>on Time : 03/04/2020 19:11:10 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/04/2020 19:12:49 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/04/2020 19:29:14 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 <br>on Time : 03/04/2020 19:52:38 <br></pre><pre><b>User IP</b>: 108.162.246.164 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 03/05/2020 12:52:31 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/05/2020 15:30:36 <br></pre><pre><b>User IP</b>: 162.158.187.76 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/05/2020 16:35:14 <br></pre><pre><b>User IP</b>: 162.158.187.76 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/05/2020 16:40:42 <br></pre><pre><b>User IP</b>: 162.158.187.76 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.92 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/05/2020 16:44:09 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 03/05/2020 18:11:36 <br></pre><pre><b>User IP</b>: 162.158.107.154 <b> Browser</b>: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0 <br>on Time : 03/05/2020 20:40:06 <br></pre><pre><b>User IP</b>: 162.158.187.76 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/06/2020 09:00:25 <br></pre><pre><b>User IP</b>: 162.158.187.76 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.92 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/06/2020 09:03:57 <br></pre><pre><b>User IP</b>: 162.158.187.76 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36 <br>on Time : 03/07/2020 06:17:03 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 03/07/2020 06:17:04 <br></pre><pre><b>User IP</b>: 108.162.250.114 <b> Browser</b>: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36 <br>on Time : 03/07/2020 15:41:49 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/08/2020 17:35:16 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/09/2020 10:00:31 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.92 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/09/2020 10:43:19 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/09/2020 19:21:47 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/09/2020 19:26:53 <br></pre><pre><b>User IP</b>: 162.158.92.145 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 10:31:02 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 11:46:17 <br></pre><pre><b>User IP</b>: 172.69.63.136 <b> Browser</b>: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36 <br>on Time : 03/10/2020 11:46:20 <br></pre><pre><b>User IP</b>: 108.162.246.224 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 <br>on Time : 03/10/2020 12:11:54 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 03/10/2020 12:16:24 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 03/10/2020 12:16:26 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:25:45 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:35:17 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:47:13 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:47:21 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:49:07 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:49:12 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:49:34 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:50:14 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:50:20 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:50:23 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:51:03 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:51:03 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:51:07 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:51:57 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:51:57 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:52:00 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:52:14 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:52:20 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:53:21 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:53:22 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:53:27 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:54:12 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:54:27 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:54:33 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/10/2020 12:54:39 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 03/10/2020 13:02:07 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.86 Safari/537.36 <br>on Time : 03/10/2020 14:46:03 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 19:17:49 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 19:42:25 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 19:54:01 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 19:58:55 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 20:04:50 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 20:52:13 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 2020/03/10 21:08:43 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 2020/03/10 21:08:58 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 2020/03/10 21:09:10 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:11:53 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:13:12 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:13:29 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:13:36 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:14:37 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:16:48 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:16:57 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:18:23 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:18:40 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:18:56 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:19:13 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:19:33 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:19:46 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:20:01 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:24:08 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:27:05 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:27:25 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:33:08 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:35:00 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:44:19 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 18:49:59 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/10/2020 19:13:12 <br></pre><pre><b>User IP</b>: 172.69.68.240 <b> Browser</b>: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 <br>on Time : 03/11/2020 0:15:07 <br></pre><pre><b>User IP</b>: 172.69.70.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/78.0.3904.70 Safari/537.36 <br>on Time : 03/11/2020 0:15:12 <br></pre><pre><b>User IP</b>: 172.69.70.62 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1 <br>on Time : 03/11/2020 0:15:25 <br></pre><pre><b>User IP</b>: 162.158.107.216 <b> Browser</b>: Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36 <br>on Time : 03/11/2020 0:15:26 <br></pre><pre><b>User IP</b>: 108.162.246.20 <b> Browser</b>: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2) <br>on Time : 03/11/2020 0:15:26 <br></pre><pre><b>User IP</b>: 172.69.68.41 <b> Browser</b>: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 <br>on Time : 03/11/2020 0:17:36 <br></pre><pre><b>User IP</b>: 172.69.70.14 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/78.0.3904.70 Safari/537.36 <br>on Time : 03/11/2020 0:17:39 <br></pre><pre><b>User IP</b>: 172.69.71.97 <b> Browser</b>: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 <br>on Time : 03/11/2020 0:42:13 <br></pre><pre><b>User IP</b>: 172.69.68.120 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/78.0.3904.70 Safari/537.36 <br>on Time : 03/11/2020 0:42:15 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/11/2020 8:47:48 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/11/2020 8:48:43 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/11/2020 8:49:15 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/11/2020 9:16:32 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12371.89.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 <br>on Time : 03/11/2020 9:28:57 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.86 Safari/537.36 <br>on Time : 03/11/2020 10:11:52 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.86 Safari/537.36 <br>on Time : 03/11/2020 10:16:59 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.86 Safari/537.36 <br>on Time : 03/11/2020 10:17:16 <br></pre><pre><b>User IP</b>: 162.158.94.167 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 OPR/67.0.3575.53 <br>on Time : 03/12/2020 0:22:59 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/12/2020 7:00:39 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.86 Safari/537.36 <br>on Time : 03/12/2020 8:38:25 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.86 Safari/537.36 <br>on Time : 03/12/2020 8:38:50 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.86 Safari/537.36 <br>on Time : 03/12/2020 11:20:32 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (X11; CrOS x86_64 12607.82.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.123 Safari/537.36 <br>on Time : 03/12/2020 13:06:25 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/12/2020 23:15:16 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/12/2020 23:30:34 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/12/2020 23:30:38 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/12/2020 23:54:17 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/12/2020 23:55:47 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/12/2020 23:56:50 <br></pre><pre><b>User IP</b>: 172.69.24.92 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0;+http://www.cloudflare.com/always-online) <br>on Time : 03/12/2020 23:56:54 <br></pre><pre><b>User IP</b>: 172.69.24.202 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0;+http://www.cloudflare.com/always-online) <br>on Time : 03/12/2020 23:56:55 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/13/2020 2:23:28 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/13/2020 2:33:23 <br></pre><pre><b>User IP</b>: 108.162.246.20 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34 <br>on Time : 03/13/2020 16:45:45 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/13/2020 19:53:58 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/13/2020 20:22:47 <br></pre><pre><b>User IP</b>: 172.68.189.124 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 <br>on Time : 03/14/2020 9:58:36 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/15/2020 6:01:23 <br></pre><pre><b>User IP</b>: 108.162.229.135 <b> Browser</b>: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 OPR/54.0.2952.64 (Edition Yx) <br>on Time : 03/16/2020 1:27:42 <br></pre><pre><b>User IP</b>: 108.162.229.245 <b> Browser</b>: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0 <br>on Time : 03/16/2020 11:13:49 <br></pre><pre><b>User IP</b>: 108.162.229.245 <b> Browser</b>: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0 <br>on Time : 03/16/2020 11:13:49 <br></pre><pre><b>User IP</b>: 162.158.74.14 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/17/2020 5:09:11 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/17/2020 7:00:22 <br></pre><pre><b>User IP</b>: 172.69.162.145 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/17/2020 7:00:28 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/17/2020 7:02:38 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/18/2020 17:27:51 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/18/2020 22:32:14 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/19/2020 5:36:36 <br></pre><pre><b>User IP</b>: 173.245.54.158 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 <br>on Time : 03/19/2020 11:00:24 <br></pre><pre><b>User IP</b>: 108.162.246.182 <b> Browser</b>: Mozilla/5.0 (Macintosh; PPC Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0 <br>on Time : 03/19/2020 17:17:00 <br></pre><pre><b>User IP</b>: 172.69.22.89 <b> Browser</b>: python-requests/2.21.0 <br>on Time : 03/20/2020 13:19:17 <br></pre><pre><b>User IP</b>: 162.158.122.9 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/21/2020 22:34:09 <br></pre><pre><b>User IP</b>: 162.158.122.33 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/22/2020 10:26:19 <br></pre><pre><b>User IP</b>: 108.162.216.161 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/22/2020 16:15:30 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/22/2020 23:53:15 <br></pre><pre><b>User IP</b>: 108.162.229.135 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0 <br>on Time : 03/23/2020 20:30:19 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/24/2020 6:23:17 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/24/2020 11:13:04 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/24/2020 13:24:34 <br></pre><pre><b>User IP</b>: 141.101.69.52 <b> Browser</b>: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0 <br>on Time : 03/24/2020 20:59:55 <br></pre><pre><b>User IP</b>: 141.101.69.192 <b> Browser</b>: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0 <br>on Time : 03/24/2020 20:59:55 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/24/2020 22:34:11 <br></pre><pre><b>User IP</b>: 162.158.106.39 <b> Browser</b>: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31 <br>on Time : 03/25/2020 10:43:57 <br></pre><pre><b>User IP</b>: 108.162.245.5 <b> Browser</b>: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31 <br>on Time : 03/25/2020 13:06:56 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/25/2020 22:37:43 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/25/2020 22:37:43 <br></pre><pre><b>User IP</b>: 162.158.122.33 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 <br>on Time : 03/25/2020 22:37:44 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/25/2020 22:37:48 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/25/2020 22:46:51 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/26/2020 5:10:53 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/26/2020 7:24:00 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/26/2020 8:30:55 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/26/2020 13:07:02 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/26/2020 21:53:31 <br></pre><pre><b>User IP</b>: 162.158.38.57 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/26/2020 22:39:15 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/27/2020 4:11:55 <br></pre><pre><b>User IP</b>: 162.158.38.57 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/27/2020 12:25:48 <br></pre><pre><b>User IP</b>: 108.162.246.8 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34 <br>on Time : 03/27/2020 16:47:56 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/27/2020 22:34:13 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 03/28/2020 5:59:42 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/28/2020 9:35:08 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/28/2020 9:35:08 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/29/2020 10:17:18 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/29/2020 14:17:45 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/29/2020 14:29:38 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/29/2020 16:01:15 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/29/2020 16:01:15 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/29/2020 22:59:37 <br></pre><pre><b>User IP</b>: 162.158.183.120 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/30/2020 7:30:13 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 03/30/2020 8:10:34 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/30/2020 16:44:47 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/30/2020 16:44:48 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/30/2020 17:05:10 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/30/2020 18:14:15 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/30/2020 20:06:34 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/30/2020 22:34:15 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/31/2020 0:59:50 <br></pre><pre><b>User IP</b>: 162.158.38.57 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/31/2020 4:04:12 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/31/2020 4:36:56 <br></pre><pre><b>User IP</b>: 162.158.63.49 <b> Browser</b>: Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; [email protected]) <br>on Time : 03/31/2020 14:21:53 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 03/31/2020 14:29:26 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/31/2020 17:07:00 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 03/31/2020 22:47:56 <br></pre><pre><b>User IP</b>: 141.101.77.215 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 <br>on Time : 04/01/2020 2:52:17 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/01/2020 7:49:03 <br></pre><pre><b>User IP</b>: 162.158.182.139 <b> Browser</b>: Go-http-client/1.1 <br>on Time : 04/01/2020 8:59:02 <br></pre><pre><b>User IP</b>: 162.158.38.57 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/01/2020 14:34:55 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/02/2020 2:42:36 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/02/2020 19:25:08 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/02/2020 22:34:17 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/03/2020 4:35:45 <br></pre><pre><b>User IP</b>: 162.158.38.57 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/03/2020 4:37:10 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 04/03/2020 15:12:43 <br></pre><pre><b>User IP</b>: 162.158.111.88 <b> Browser</b>: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0 <br>on Time : 04/03/2020 16:16:04 <br></pre><pre><b>User IP</b>: 162.158.62.136 <b> Browser</b>: Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; [email protected]) <br>on Time : 04/03/2020 23:10:31 <br></pre><pre><b>User IP</b>: 108.162.219.89 <b> Browser</b>: Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; [email protected]) <br>on Time : 04/03/2020 23:36:05 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/03/2020 23:43:48 <br></pre><pre><b>User IP</b>: 162.158.63.11 <b> Browser</b>: Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; [email protected]) <br>on Time : 04/04/2020 0:06:09 <br></pre><pre><b>User IP</b>: 108.162.219.109 <b> Browser</b>: Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; [email protected]) <br>on Time : 04/04/2020 0:06:11 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/04/2020 0:30:14 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 04/04/2020 0:30:59 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/04/2020 1:23:37 <br></pre><pre><b>User IP</b>: 162.158.38.57 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/04/2020 1:25:47 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/04/2020 9:22:32 <br></pre><pre><b>User IP</b>: 172.68.132.16 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BuiltWith/1.0; +http://builtwith.com/biup) Chrome/74.0.3729.131 Safari/537.36 <br>on Time : 04/04/2020 16:06:14 <br></pre><pre><b>User IP</b>: 162.158.122.189 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/04/2020 18:21:09 <br></pre><pre><b>User IP</b>: 162.158.122.189 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/04/2020 18:21:09 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 04/04/2020 23:53:28 <br></pre><pre><b>User IP</b>: 162.158.34.227 <b> Browser</b>: YOURLS v1.7.6 +http://yourls.org/ (running on http://crack.cf) <br>on Time : 04/04/2020 23:54:31 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 04/04/2020 23:54:37 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 04/05/2020 1:26:49 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1 <br>on Time : 04/05/2020 1:26:56 <br></pre><pre><b>User IP</b>: 108.162.215.207 <b> Browser</b>: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 <br>on Time : 04/05/2020 1:52:23 <br></pre><pre><b>User IP</b>: 108.162.229.69 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/05/2020 6:30:22 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/05/2020 15:57:01 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/05/2020 22:34:19 <br></pre><pre><b>User IP</b>: 172.69.69.19 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/06/2020 1:03:51 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 04/06/2020 2:17:36 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/06/2020 3:02:04 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) /1.8.10 Chrome/76.0.3809.146 Electron/6.1.9 Safari/537.36 <br>on Time : 04/06/2020 17:35:17 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 <br>on Time : 04/07/2020 6:34:45 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/07/2020 11:40:46 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/07/2020 14:06:54 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/07/2020 15:39:04 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/08/2020 3:58:24 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/08/2020 3:58:24 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/08/2020 11:02:16 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/08/2020 12:43:30 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/08/2020 12:43:30 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/08/2020 16:23:39 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/08/2020 16:27:59 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/08/2020 16:28:21 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/08/2020 18:57:35 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/08/2020 18:57:35 <br></pre><pre><b>User IP</b>: 108.162.237.127 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/08/2020 22:34:22 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/09/2020 5:25:54 <br></pre><pre><b>User IP</b>: 108.162.237.127 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/09/2020 5:32:50 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/10/2020 0:52:28 <br></pre><pre><b>User IP</b>: 162.158.134.39 <b> Browser</b>: Go-http-client/1.1 <br>on Time : 04/10/2020 6:18:44 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/10/2020 11:26:17 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/10/2020 16:31:34 <br></pre><pre><b>User IP</b>: 108.162.246.128 <b> Browser</b>: Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34 <br>on Time : 04/10/2020 17:28:09 <br></pre><pre><b>User IP</b>: 172.69.22.89 <b> Browser</b>: <br>on Time : 04/11/2020 0:30:29 <br></pre><pre><b>User IP</b>: 172.68.189.130 <b> Browser</b>: <br>on Time : 04/11/2020 0:30:30 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/11/2020 17:21:05 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/11/2020 19:00:16 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/12/2020 6:26:38 <br></pre><pre><b>User IP</b>: 162.158.134.49 <b> Browser</b>: Go-http-client/1.1 <br>on Time : 04/12/2020 13:28:47 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/12/2020 16:55:41 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/12/2020 17:04:16 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/13/2020 4:02:36 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/13/2020 14:26:16 <br></pre><pre><b>User IP</b>: 108.162.219.11 <b> Browser</b>: Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; http://cloudsystemnetworks.com) <br>on Time : 04/13/2020 16:17:43 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/13/2020 17:42:45 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/14/2020 0:22:05 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/14/2020 0:25:27 <br></pre><pre><b>User IP</b>: 108.162.216.149 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/14/2020 22:25:09 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/14/2020 22:25:09 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/14/2020 22:30:45 <br></pre><pre><b>User IP</b>: 108.162.216.149 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/14/2020 22:34:01 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/15/2020 1:21:44 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/15/2020 3:10:28 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/15/2020 4:17:44 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/15/2020 4:18:31 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/15/2020 7:16:29 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/15/2020 7:46:47 <br></pre><pre><b>User IP</b>: 162.158.159.59 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/15/2020 14:57:17 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/15/2020 15:02:19 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/15/2020 16:19:20 <br></pre><pre><b>User IP</b>: 141.101.98.151 <b> Browser</b>: YOURLS v1.7.6 +http://yourls.org/ (running on http://crack.cf) <br>on Time : 04/15/2020 18:18:20 <br></pre><pre><b>User IP</b>: 172.69.63.80 <b> Browser</b>: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) <br>on Time : 04/15/2020 18:18:48 <br></pre><pre><b>User IP</b>: 172.69.63.56 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/15/2020 18:18:48 <br></pre><pre><b>User IP</b>: 108.162.246.236 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 137.0.0.30.124 (iPhone12,5; iOS 13_4_1; en_US; en-US; scale=3.00; 1242x2688; 208685371) <br>on Time : 04/15/2020 18:18:50 <br></pre><pre><b>User IP</b>: 108.162.246.236 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 137.0.0.30.124 (iPhone12,5; iOS 13_4_1; en_US; en-US; scale=3.00; 1242x2688; 208685371) <br>on Time : 04/15/2020 18:19:25 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/16/2020 7:40:58 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/16/2020 9:38:27 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/16/2020 12:51:40 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/16/2020 18:59:34 <br></pre><pre><b>User IP</b>: 162.158.186.165 <b> Browser</b>: Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; http://cloudsystemnetworks.com) <br>on Time : 04/16/2020 19:11:51 <br></pre><pre><b>User IP</b>: 172.68.174.119 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/16/2020 19:48:42 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/17/2020 0:26:11 <br></pre><pre><b>User IP</b>: 162.158.134.85 <b> Browser</b>: Go-http-client/1.1 <br>on Time : 04/17/2020 2:23:08 <br></pre><pre><b>User IP</b>: 172.68.174.19 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/17/2020 8:38:01 <br></pre><pre><b>User IP</b>: 172.69.190.71 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0 <br>on Time : 04/17/2020 9:32:40 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/17/2020 9:36:03 <br></pre><pre><b>User IP</b>: 162.158.158.94 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0 <br>on Time : 04/17/2020 15:06:57 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/17/2020 18:06:59 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/17/2020 18:07:00 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/17/2020 18:07:18 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/17/2020 19:15:48 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/17/2020 19:15:48 <br></pre><pre><b>User IP</b>: 172.68.174.7 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 137.0.0.30.124 (iPhone11,8; iOS 13_3_1; en_VN; en-VN; scale=2.00; 828x1792; 208685371) <br>on Time : 04/17/2020 22:24:57 <br></pre><pre><b>User IP</b>: 172.68.142.140 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 <br>on Time : 04/17/2020 22:24:59 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/18/2020 6:10:44 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/18/2020 6:10:44 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/18/2020 10:26:15 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/18/2020 14:32:50 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/18/2020 14:32:41 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/18/2020 19:49:17 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/18/2020 21:08:15 <br></pre><pre><b>User IP</b>: 172.68.174.121 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 <br>on Time : 04/18/2020 21:08:24 <br></pre><pre><b>User IP</b>: 162.158.74.184 <b> Browser</b>: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) <br>on Time : 04/19/2020 1:10:10 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/19/2020 2:39:16 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/19/2020 3:16:30 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/19/2020 6:17:14 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/19/2020 6:58:05 <br></pre><pre><b>User IP</b>: 108.162.216.149 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/19/2020 19:13:14 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/19/2020 21:46:17 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/19/2020 22:57:09 <br></pre><pre><b>User IP</b>: 172.69.190.49 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0 <br>on Time : 04/20/2020 0:04:20 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/20/2020 2:51:44 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/20/2020 7:06:55 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/20/2020 8:47:41 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/20/2020 11:50:04 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/20/2020 15:27:04 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/20/2020 16:31:16 <br></pre><pre><b>User IP</b>: 173.245.54.236 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 <br>on Time : 04/20/2020 17:23:19 <br></pre><pre><b>User IP</b>: 173.245.54.248 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 <br>on Time : 04/20/2020 17:23:21 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 5:29:26 <br></pre><pre><b>User IP</b>: 172.68.244.153 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 8:14:40 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 11:36:15 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 11:36:15 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 13:05:38 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 13:48:53 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 13:53:42 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/21/2020 21:08:12 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/22/2020 6:45:48 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/22/2020 12:40:00 <br></pre><pre><b>User IP</b>: 162.158.154.148 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0 <br>on Time : 04/22/2020 20:35:20 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 1:35:19 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 3:57:30 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 12:53:12 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 14:28:37 <br></pre><pre><b>User IP</b>: 162.158.183.120 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 15:11:32 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 15:21:42 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 16:27:24 <br></pre><pre><b>User IP</b>: 172.69.68.21 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 16:27:26 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/23/2020 19:04:15 <br></pre><pre><b>User IP</b>: 172.68.174.97 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 <br>on Time : 04/24/2020 12:38:18 <br></pre><pre><b>User IP</b>: 172.68.174.31 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 <br>on Time : 04/24/2020 13:24:04 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/24/2020 14:34:34 <br></pre><pre><b>User IP</b>: 162.158.62.208 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/24/2020 19:08:57 <br></pre><pre><b>User IP</b>: 108.162.219.49 <b> Browser</b>: Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; http://cloudsystemnetworks.com) <br>on Time : 04/24/2020 19:47:46 <br></pre><pre><b>User IP</b>: 162.158.122.111 <b> Browser</b>: Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; http://cloudsystemnetworks.com) <br>on Time : 04/24/2020 21:36:33 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/24/2020 21:38:51 <br></pre><pre><b>User IP</b>: 162.158.182.223 <b> Browser</b>: Go-http-client/1.1 <br>on Time : 04/24/2020 22:14:04 <br></pre><pre><b>User IP</b>: 141.101.107.189 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/25/2020 4:26:21 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/25/2020 7:11:14 <br></pre><pre><b>User IP</b>: 108.162.246.206 <b> Browser</b>: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31 <br>on Time : 04/25/2020 9:51:18 <br></pre><pre><b>User IP</b>: 172.68.174.31 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 <br>on Time : 04/25/2020 17:00:05 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/25/2020 23:26:37 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/26/2020 3:03:16 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/26/2020 10:08:21 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/26/2020 10:08:23 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/26/2020 10:08:34 <br></pre><pre><b>User IP</b>: 172.68.174.139 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 <br>on Time : 04/26/2020 12:27:26 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/26/2020 18:16:54 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/27/2020 2:20:54 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/27/2020 11:57:06 <br></pre><pre><b>User IP</b>: 108.162.216.149 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/27/2020 15:34:23 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/27/2020 17:24:22 <br></pre><pre><b>User IP</b>: 162.158.122.111 <b> Browser</b>: Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; http://cloudsystemnetworks.com) <br>on Time : 04/27/2020 17:24:56 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/27/2020 20:46:36 <br></pre><pre><b>User IP</b>: 172.68.174.97 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 138.0.0.32.117 (iPhone12,5; iOS 13_4_1; en_US; en-US; scale=3.00; 1242x2688; 209823574) <br>on Time : 04/27/2020 20:55:29 <br></pre><pre><b>User IP</b>: 172.68.174.31 <b> Browser</b>: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 138.0.0.32.117 (iPhone12,5; iOS 13_4_1; en_US; en-US; scale=3.00; 1242x2688; 209823574) <br>on Time : 04/27/2020 20:56:31 <br></pre><pre><b>User IP</b>: 141.101.69.34 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0 <br>on Time : 04/27/2020 23:37:52 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/28/2020 4:58:35 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/28/2020 5:38:48 <br></pre><pre><b>User IP</b>: 162.158.123.136 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0 <br>on Time : 04/28/2020 5:38:52 <br></pre><pre><b>User IP</b>: 162.158.94.197 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/28/2020 7:24:03 <br></pre><pre><b>User IP</b>: 172.68.189.22 <b> Browser</b>: Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15 Epiphany/605.1.15 <br>on Time : 04/29/2020 0:29:26 <br></pre><pre><b>User IP</b>: 172.69.68.22 <b> Browser</b>: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) <br>on Time : 04/29/2020 1:14:05 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/29/2020 5:44:52 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/29/2020 7:17:10 <br></pre><pre><b>User IP</b>: 162.158.94.197 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/29/2020 11:12:11 <br></pre><pre><b>User IP</b>: 162.158.94.197 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/29/2020 12:23:19 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/29/2020 13:18:07 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/29/2020 14:31:26 <br></pre><pre><b>User IP</b>: 108.162.216.149 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/29/2020 15:22:01 <br></pre><pre><b>User IP</b>: 162.158.94.197 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/29/2020 19:25:07 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/29/2020 20:57:04 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/30/2020 5:33:37 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/30/2020 7:58:29 <br></pre><pre><b>User IP</b>: 162.158.74.186 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/30/2020 9:26:53 <br></pre><pre><b>User IP</b>: 108.162.242.6 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 Edg/81.0.416.68 <br>on Time : 04/30/2020 10:03:41 <br></pre><pre><b>User IP</b>: 162.158.94.197 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/30/2020 10:36:06 <br></pre><pre><b>User IP</b>: 162.158.134.39 <b> Browser</b>: Go-http-client/1.1 <br>on Time : 04/30/2020 11:29:30 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/30/2020 13:20:00 <br></pre><pre><b>User IP</b>: 141.101.69.214 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/30/2020 16:21:49 <br></pre><pre><b>User IP</b>: 172.68.174.97 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 <br>on Time : 04/30/2020 16:33:12 <br></pre><pre><b>User IP</b>: 172.68.174.139 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 <br>on Time : 04/30/2020 17:10:12 <br></pre><pre><b>User IP</b>: 108.162.216.149 <b> Browser</b>: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) <br>on Time : 04/30/2020 17:58:23 <br></pre><pre><b>User IP</b>: 162.158.187.212 <b> Browser</b>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon <br>on Time : 04/30/2020 18:07:36 <br></pre><pre><b>User IP</b>: 172.68.174.31 <b> Browser</b>: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 <br>on Time : 04/30/2020 19:57:57 <br></pre> \ No newline at end of file