svg.escobar.life

Unnamed repository; edit this file 'description' to name the repository.

commit 3ac2d82e63e316d1bee13e79dd540f61920ef9d5
parent 8a0576dd38207d5a93d2f1c4c8015ac3f3b8c1ee
Author: Pablo Emilio Escobar Gaviria <pablo-escobar@riseup.net>
Date:   Wed,  2 Dec 2020 09:53:20 -0300

Started working on porting the app to my personal website

Diffstat:
M.gitignore | 4----
AMakefile | 4++++
Melm.json | 2+-
Mindex.html | 56+++++++++++++++++++++++++++-----------------------------
Mscript.min.js | 8397++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Msrc/View.elm | 37+++++++++++++++++--------------------
Mstyles.css | 78+++++++++++++++++++-----------------------------------------------------------
7 files changed, 8463 insertions(+), 115 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -1,7 +1,4 @@
-.vscode
-.idea
 elm-stuff
 build/output
 src/assets
 output
-*.afphoto-
\ No newline at end of file
diff --git a/Makefile b/Makefile
@@ -0,0 +1,4 @@
+.PHONY: build
+
+build:
+	elm make --output=script.min.js src/Main.elm
diff --git a/elm.json b/elm.json
@@ -3,7 +3,7 @@
     "source-directories": [
         "src"
     ],
-    "elm-version": "0.19.0",
+    "elm-version": "0.19.1",
     "dependencies": {
         "direct": {
             "elm/browser": "1.0.1",
diff --git a/index.html b/index.html
@@ -1,41 +1,39 @@
 <!DOCTYPE HTML>
 <html>
-    <!-- Gark Garcia (C) 2019. ALL RIGHTS RESERVED -->
-    <head>
+<head>
 	<meta charset="UTF-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1">
 	<link rel="stylesheet" href="styles.css">
 
-        <link rel="icon" 
-              type="image/svg+xml" 
-              sizes="32x32 16x16 180x180" 
-              href="assets/icons/favicon-opaque.svg">
+  <link rel="icon" 
+        type="image/svg+xml" 
+        sizes="32x32 16x16 180x180" 
+        href="assets/icons/favicon-opaque.svg">
 
-        <link rel="apple-touch-icon" 
-              type="image/svg+xml" 
-              sizes="32x32 16x16 180x180" 
-              href="assets/icons/favicon-opaque.svg">
+  <link rel="apple-touch-icon" 
+        type="image/svg+xml" 
+        sizes="32x32 16x16 180x180" 
+        href="assets/icons/favicon-opaque.svg">
 
-        <link rel="mask-icon" 
-              href="assets/icons/favicon-transparent.svg" 
-              color="#b362ff">
+  <link rel="mask-icon" 
+        href="assets/icons/favicon-transparent.svg" 
+        color="#b362ff">
  
-        <link rel="manifest" href="app.webmanifest">
-        <script src="script.min.js"></script>
-    </head>
-
-    <body>
+  <link rel="manifest" href="app.webmanifest">
+  <script src="script.min.js"></script>
+</head>
+<body>
 	<script>Elm.Main.init()</script>
-        <script>
-            function load() {
-                navigator.serviceWorker
-                    .register('./service-worker.js')
-                    .then(console.log)
-                    .catch(console.error);
-            }
+  <script>
+      function load() {
+          navigator.serviceWorker
+              .register('./service-worker.js')
+              .then(console.log)
+              .catch(console.error);
+      }
 
-            if ('serviceWorker' in navigator)
-                window.addEventListener('load', load);
-        </script>
-    </body>
+      if ('serviceWorker' in navigator)
+          window.addEventListener('load', load);
+  </script>
+</body>
 </html>
diff --git a/script.min.js b/script.min.js
@@ -1 +1,8394 @@
-(function(e){'use strict';var ba=Math.floor,na=String.fromCharCode;function a(e,a,t){return t.a=e,t.f=a,t}function t(e){return a(2,e,function(t){return function(a){return e(t,a)}})}function b(e){return a(3,e,function(t){return function(a){return function(b){return e(t,a,b)}}})}function n(e){return a(4,e,function(t){return function(a){return function(b){return function(n){return e(t,a,b,n)}}}})}function d(t){return a(5,t,function(n){return function(a){return function(b){return function(i){return function(d){return t(n,a,b,i,d)}}}}})}function i(t){return a(6,t,function(n){return function(a){return function(b){return function(i){return function(d){return function(e){return t(n,a,b,i,d,e)}}}}}})}function s(t){return a(7,t,function(n){return function(a){return function(b){return function(i){return function(d){return function(e){return function(s){return t(n,a,b,i,d,e,s)}}}}}}})}function l(t){return a(8,t,function(n){return function(a){return function(b){return function(i){return function(d){return function(e){return function(s){return function(l){return t(n,a,b,i,d,e,s,l)}}}}}}}})}function o(t){return a(9,t,function(n){return function(a){return function(b){return function(s){return function(d){return function(e){return function(l){return function(o){return function(r){return t(n,a,b,s,d,e,l,o,r)}}}}}}}}})}function h(e,t,a){return 2===e.a?e.f(t,a):e(t)(a)}function $(e,t,a,b){return 3===e.a?e.f(t,a,b):e(t)(a)(b)}function r(e,t,a,b,n){return 4===e.a?e.f(t,a,b,n):e(t)(a)(b)(n)}function g(t,n,a,b,i,d){return 5===t.a?t.f(n,a,b,i,d):t(n)(a)(b)(i)(d)}function m(t,n,a,b,i,d,e){return 6===t.a?t.f(n,a,b,i,d,e):t(n)(a)(b)(i)(d)(e)}function u(t,n,a,b,i,d,e,s){return 7===t.a?t.f(n,a,b,i,d,e,s):t(n)(a)(b)(i)(d)(e)(s)}function p(t,n,a,b,i,d,e,s,l){return 8===t.a?t.f(n,a,b,i,d,e,s,l):t(n)(a)(b)(i)(d)(e)(s)(l)}function c(e,a){return{$:1,a:e,b:a}}function v(e){for(var a=ka,t=e.length;t--;)a=c(e[t],a);return a}function y(e){for(var a=[];e.b;e=e.b)a.push(e.a);return a}function k(){return"<internals>"}function A(e){throw new Error("https://github.com/elm/core/blob/1.0.0/hints/"+e+".md")}function E(e,a){for(var t,b=[],n=j(e,a,0,b);n&&(t=b.pop());n=j(t.a,t.b,0,b));return n}function j(e,a,t,b){if(100<t)return b.push(T(e,a)),!0;if(e===a)return!0;if("object"!=typeof e||null===e||null===a)return"function"==typeof e&&A(5),!1;for(var n in 0>e.$&&(e=An(e),a=An(a)),e)if(!j(e[n],a[n],t+1,b))return!1;return!0}function C(e,a,t){if("object"!=typeof e)return e===a?0:e<a?-1:1;if("undefined"==typeof e.$)return(t=C(e.a,a.a))?t:(t=C(e.b,a.b))?t:C(e.c,a.c);for(;e.b&&a.b&&!(t=C(e.a,a.a));e=e.b,a=a.b);return t||(e.b?1:a.b?-1:0)}function T(e,a){return{a:e,b:a}}function L(e,a,t){return{a:e,b:a,c:t}}function N(e){return e}function _(e,a){var t={};for(var b in e)t[b]=e[b];for(var b in a)t[b]=a[b];return t}function w(e,a){if("string"==typeof e)return e+a;if(!e.b)return a;var t=c(e.a,a);e=e.b;for(var b=t;e.b;e=e.b)b=b.b=c(e.a,a);return t}function O(e){return{$:2,b:e}}function S(e,a){return{$:9,f:e,g:a}}function I(e,a){switch(e.$){case 2:return e.b(a);case 5:return null===a?_n(e.c):K("null",a);case 3:return B(a)?R(e.b,a,v):K("a LIST",a);case 4:return B(a)?R(e.b,a,D):K("an ARRAY",a);case 6:var t=e.d;if("object"!=typeof a||null===a||!(t in a))return K("an OBJECT with a field named `"+t+"`",a);var b=I(e.b,a[t]);return Yn(b)?b:yd(h(xd,t,b.a));case 7:var n=e.e;if(!B(a))return K("an ARRAY",a);if(n>=a.length)return K("a LONGER array. Need index "+n+" but only see "+a.length+" entries",a);var b=I(e.b,a[n]);return Yn(b)?b:yd(h(Ad,n,b.a));case 8:if("object"!=typeof a||null===a||B(a))return K("an OBJECT",a);var d=ka;for(var s in a)if(a.hasOwnProperty(s)){var b=I(e.b,a[s]);if(!Yn(b))return yd(h(xd,s,b.a));d=c(T(s,b.a),d)}return _n(od(d));case 9:for(var b,l=e.f,o=e.g,r=0;r<o.length;r++){if(b=I(o[r],a),!Yn(b))return b;l=l(b.a)}return _n(l);case 10:var b=I(e.b,a);return Yn(b)?I(e.h(b.a),a):b;case 11:for(var b,$=ka,g=e.g;g.b;g=g.b){if(b=I(g.a,a),Yn(b))return b;$=c(b.a,$)}return yd(Ed(od($)));case 1:return yd(h(kd,e.a,q(a)));case 0:return _n(e.a);}}function R(e,a,t){for(var b,n=a.length,d=Array(n),s=0;s<n;s++){if(b=I(e,a[s]),!Yn(b))return yd(h(Ad,s,b.a));d[s]=b.a}return _n(t(d))}function B(e){return Array.isArray(e)||"undefined"!=typeof FileList&&e instanceof FileList}function D(e){return h(vd,e.length,function(a){return e[a]})}function K(e,a){return yd(h(kd,"Expecting "+e,q(a)))}function J(e,a){if(e===a)return!0;if(e.$!==a.$)return!1;switch(e.$){case 0:case 1:return e.a===a.a;case 2:return e.b===a.b;case 5:return e.c===a.c;case 3:case 4:case 8:return J(e.b,a.b);case 6:return e.d===a.d&&J(e.b,a.b);case 7:return e.e===a.e&&J(e.b,a.b);case 9:return e.f===a.f&&G(e.g,a.g);case 10:return e.h===a.h&&J(e.b,a.b);case 11:return G(e.g,a.g);}}function G(e,a){var t=e.length;if(t!==a.length)return!1;for(var b=0;b<t;b++)if(!J(e[b],a[b]))return!1;return!0}function q(e){return e}function F(e){return e}function M(e){return{$:0,a:e}}function X(e){return{$:1,a:e}}function P(e){return{$:2,b:e,c:null}}function H(e){return{$:5,b:e}}function W(e){var a={$:0,e:ab++,f:e,g:null,h:[]};return U(a),a}function z(e){return P(function(a){a(M(W(e)))})}function Z(e,a){e.h.push(a),U(e)}function U(e){if(nb.push(e),!bb){for(bb=!0;e=nb.shift();)Y(e);bb=!1}}function Y(e){for(;e.f;){var a=e.f.$;if(0===a||1===a){for(;e.g&&e.g.$!==a;)e.g=e.g.i;if(!e.g)return;e.f=e.g.b(e.f.a),e.g=e.g.i}else{if(2===a)return void(e.f.c=e.f.b(function(a){e.f=a,U(e)}));if(5===a){if(0===e.h.length)return;e.f=e.f.b(e.h.shift())}else e.g={$:3===a?0:1,b:e.f.b,i:e.g},e.f=e.f.d}}}function V(e,a,t,b,n,d){function i(e,a){s=h(b,e,o),r(o=s.a,a),ne(l,s.b,n(o))}var s=h(Zt,e,q(a?a.flags:void 0));Yn(s)||A(2);var l={};s=t(s.a);var o=s.a,r=d(i,o),c=Q(l,i);return ne(l,s.b,n(o)),c?{ports:c}:{}}function Q(e,a){var t;for(var b in ib){var n=ib[b];n.a&&(t=t||{},t[b]=n.a(b,a)),e[b]=ae(n,a)}return t}function ee(e,a,t,b,n){return{b:e,c:a,d:t,e:b,f:n}}function ae(e,a){function t(e){return h(Qt,t,H(function(a){var t=a.a;return 0===a.$?$(d,b,t,e):i&&s?r(n,b,t.i,t.j,e):$(n,b,i?t.i:t.j,e)}))}var b={g:a,h:void 0},n=e.c,d=e.d,i=e.e,s=e.f;return b.h=W(h(Qt,t,e.b))}function te(e){return function(a){return{$:1,k:e,l:a}}}function be(e){return{$:2,m:e}}function ne(e,a,t){var b={};for(var n in de(!0,a,b,null),de(!1,t,b,null),e)Z(e[n],{$:"fx",a:b[n]||{i:ka,j:ka}})}function de(e,a,t,b){switch(a.$){case 1:var n=a.k,d=ie(e,n,b,a.l);return void(t[n]=se(e,d,t[n]));case 2:for(var i=a.m;i.b;i=i.b)de(e,i.a,t,b);return;case 3:return void de(e,a.o,t,{p:a.n,q:b});}}function ie(e,a,t,b){var n=e?ib[a].e:ib[a].f;return h(n,function(e){for(var a=t;a;a=a.q)e=a.p(e);return e},b)}function se(e,a,t){return t=t||{i:ka,j:ka},e?t.i=c(a,t.i):t.j=c(a,t.j),t}function le(e,a){for(var t in a)t in e?"init"==t?A(6):le(e[t],a[t]):e[t]=a[t]}function oe(e,a){for(var t=a.i;t.b;t=t.b)e.setRequestHeader(t.a.a,t.a.b);e.timeout=a.n.a||0,e.responseType=a.bf.d,e.withCredentials=a.B}function re(e,a){return h(200<=a.status&&300>a.status?zd:Hd,he(a),e(a.response))}function he(e){return{bN:e.responseURL,aY:e.status,bA:e.statusText,i:ce(e.getAllResponseHeaders())}}function ce(e){if(!e)return In;for(var a=In,t=e.split("\r\n"),b=t.length;b--;){var n=t[b],d=n.indexOf(": ");if(0<d){var s=n.substring(0,d),l=n.substring(d+2);a=$(Zn,s,function(e){return Cn(Un(e)?l+", "+e.a:l)},a)}}return a}function $e(e,a,t){a.upload.addEventListener("progress",function(b){a.c||W(h(Xd,e,T(t,Yd({bz:b.loaded,ab:b.total}))))}),a.addEventListener("progress",function(b){a.c||W(h(Xd,e,T(t,Ud({bv:b.loaded,ab:b.lengthComputable?Cn(b.total):Tn}))))})}function ge(){return ia||(ia=document.createElement("a"))}function fe(e){if("function"==typeof MouseEvent)e.dispatchEvent(new MouseEvent("click"));else{var a=document.createEvent("MouseEvents");a.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),document.body.appendChild(e),e.dispatchEvent(a),document.body.removeChild(e)}}function me(e){return P(function(a){sa=document.createElement("input"),sa.type="file",sa.accept=h(Bd,",",e),sa.addEventListener("change",function(e){a(M(e.target.files[0]))}),fe(sa)})}function ue(e,a){e.appendChild(a)}function pe(e){return{$:0,a:e}}function ve(e,a){return{$:5,l:e,m:a,k:void 0}}function ye(e){return /^(on|formAction$)/i.test(e)?"data-"+e:e}function ke(e){return /^javascript:/i.test(e.replace(/\s/g,""))?"":e}function xe(e){return /^\s*(javascript:|data:text\/html)/i.test(e)?"":e}function Ae(e,a){var t=ns(a);return{$:a.$,a:t?$(ts,3>t?Gb:qb,bs(e),a.a):h(as,e,a.a)}}function Ee(e){for(var a={};e.b;e=e.b){var t=e.a,b=t.$,n=t.n,d=t.o;if("a2"===b){"className"===n?je(a,n,F(d)):a[n]=F(d);continue}var i=a[b]||(a[b]={});"a3"===b&&"class"===n?je(i,n,d):i[n]=d}return a}function je(e,a,t){var b=e[a];e[a]=b?b+" "+t:t}function Ce(e,a){var t=e.$;if(5===t)return Ce(e.k||(e.k=e.m()),a);if(0===t)return vb.createTextNode(e.a);if(4===t){for(var b=e.k,n=e.j;4===b.$;)"object"==typeof n?n.push(b.j):n=[n,b.j],b=b.k;var d={j:n,p:a},s=Ce(b,d);return s.elm_event_node_ref=d,s}if(3===t){var s=e.h(e.g);return Te(s,a,e.d),s}var s=e.f?vb.createElementNS(e.f,e.c):vb.createElement(e.c);la&&"a"==e.c&&s.addEventListener("click",la(s)),Te(s,a,e.d);for(var l=e.e,o=0;o<l.length;o++)ue(s,Ce(1===t?l[o]:l[o].b,a));return s}function Te(e,a,t){for(var b in t){var n=t[b];"a1"==b?Le(e,n):"a0"==b?we(e,a,n):"a3"==b?Ne(e,n):"a4"==b?_e(e,n):("value"!=b&&"checked"!=b||e[b]!==n)&&(e[b]=n)}}function Le(e,a){var t=e.style;for(var b in a)t[b]=a[b]}function Ne(e,a){for(var t in a){var b=a[t];"undefined"==typeof b?e.removeAttribute(t):e.setAttribute(t,b)}}function _e(e,a){for(var t in a){var b=a[t],n=b.f,d=b.o;"undefined"==typeof d?e.removeAttributeNS(n,t):e.setAttributeNS(n,t,d)}}function we(e,a,t){var b=e.elmFs||(e.elmFs={});for(var n in t){var d=t[n],i=b[n];if(!d){e.removeEventListener(n,i),b[n]=void 0;continue}if(i){var s=i.q;if(s.$===d.$){i.q=d;continue}e.removeEventListener(n,i)}i=Oe(a,d),e.addEventListener(n,i,oa&&{passive:2>ns(d)}),b[n]=i}}function Oe(e,a){function t(a){var b=t.q,n=I(b.a,a);if(Yn(n)){for(var d,s,l=ns(b),o=n.a,r=l?3>l?o.a:o.t:o,h=1==l?o.b:3==l&&o.ad,c=(h&&a.stopPropagation(),(2==l?o.b:3==l&&o.aa)&&a.preventDefault(),e);d=c.j;){if("function"==typeof d)r=d(r);else for(var s=d.length;s--;)r=d[s](r);c=c.p}c(r,h)}}return t.q=a,t}function Se(e,a){return e.$==a.$&&J(e.a,a.a)}function Ie(e,a){var t=[];return Be(e,a,t,0),t}function Re(e,a,t,b){var n={$:a,r:t,s:b,t:void 0,u:void 0};return e.push(n),n}function Be(e,a,t,b){if(e!==a){var n=e.$,d=a.$;if(n!==d)if(1===n&&2===d)a=Qe(a),d=1;else return void Re(t,0,b,a);switch(d){case 5:for(var s=e.l,l=a.l,o=s.length,r=o===l.length;r&&o--;)r=s[o]===l[o];if(r)return void(a.k=e.k);a.k=a.m();var h=[];return Be(e.k,a.k,h,0),void(0<h.length&&Re(t,1,b,h));case 4:for(var c=e.j,$=a.j,g=!1,f=e.k;4===f.$;)g=!0,"object"==typeof c?c.push(f.j):c=[c,f.j],f=f.k;for(var m=a.k;4===m.$;)g=!0,"object"==typeof $?$.push(m.j):$=[$,m.j],m=m.k;return g&&c.length!==$.length?void Re(t,0,b,a):((g?!De(c,$):c!==$)&&Re(t,2,b,$),void Be(f,m,t,b+1));case 0:return void(e.a!==a.a&&Re(t,3,b,a.a));case 1:return void Ke(e,a,t,b,Ge);case 2:return void Ke(e,a,t,b,qe);case 3:if(e.h!==a.h)return void Re(t,0,b,a);var u=Je(e.d,a.d);u&&Re(t,4,b,u);var p=a.i(e.g,a.g);return void(p&&Re(t,5,b,p));}}}function De(e,a){for(var t=0;t<e.length;t++)if(e[t]!==a[t])return!1;return!0}function Ke(e,a,t,b,n){if(e.c!==a.c||e.f!==a.f)return void Re(t,0,b,a);var d=Je(e.d,a.d);d&&Re(t,4,b,d),n(e,a,t,b)}function Je(e,a,t){var b;for(var n in e){if("a1"==n||"a0"==n||"a3"==n||"a4"==n){var d=Je(e[n],a[n]||{},n);d&&(b=b||{},b[n]=d);continue}if(!(n in a)){b=b||{},b[n]=t?"a1"===t?"":"a0"===t||"a3"===t?void 0:{f:e[n].f,o:void 0}:"string"==typeof e[n]?"":null;continue}var i=e[n],s=a[n];i===s&&"value"!=n&&"checked"!=n||"a0"===t&&Se(i,s)||(b=b||{},b[n]=s)}for(var l in a)l in e||(b=b||{},b[l]=a[l]);return b}function Ge(e,a,t,b){var n=e.e,d=a.e,s=n.length,l=d.length;s>l?Re(t,6,b,{v:l,i:s-l}):s<l&&Re(t,7,b,{v:s,e:d});for(var o,r=s<l?s:l,h=0;h<r;h++)o=n[h],Be(o,d[h],t,++b),b+=o.b||0}function qe(e,a,t,b){for(var n=[],d={},i=[],s=e.e,l=a.e,o=s.length,r=l.length,h=0,c=0,$=b;h<o&&c<r;){var g=s[h],f=l[c],m=g.a,u=f.a,p=g.b,v=f.b,k=void 0,A=void 0;if(m===u){$++,Be(p,v,n,$),$+=p.b||0,h++,c++;continue}var E=s[h+1],j=l[c+1];if(E){var C=E.a,T=E.b;A=u===C}if(j){var L=j.a,N=j.b;k=m===L}if(k&&A){$++,Be(p,N,n,$),Fe(d,n,m,v,c,i),$+=p.b||0,$++,Me(d,n,m,T,$),$+=T.b||0,h+=2,c+=2;continue}if(k){$++,Fe(d,n,u,v,c,i),Be(p,N,n,$),$+=p.b||0,h+=1,c+=2;continue}if(A){$++,Me(d,n,m,p,$),$+=p.b||0,$++,Be(T,v,n,$),$+=T.b||0,h+=2,c+=1;continue}if(E&&C===L){$++,Me(d,n,m,p,$),Fe(d,n,u,v,c,i),$+=p.b||0,$++,Be(T,N,n,$),$+=T.b||0,h+=2,c+=2;continue}break}for(;h<o;){$++;var g=s[h],p=g.b;Me(d,n,g.a,p,$),$+=p.b||0,h++}for(;c<r;){var _=_||[],f=l[c];Fe(d,n,f.a,f.b,void 0,_),c++}(0<n.length||0<i.length||_)&&Re(t,8,b,{w:n,x:i,y:_})}function Fe(e,a,t,b,n,d){var i=e[t];if(!i)return i={c:0,z:b,r:n,s:void 0},d.push({r:n,A:i}),void(e[t]=i);if(1===i.c){d.push({r:n,A:i}),i.c=2;var s=[];return Be(i.z,b,s,i.r),i.r=n,void(i.s.s={w:s,A:i})}Fe(e,a,t+"_elmW6BL",b,n,d)}function Me(e,a,t,b,n){var d=e[t];if(!d){var i=Re(a,9,n,void 0);return void(e[t]={c:1,z:b,r:n,s:i})}if(0===d.c){d.c=2;var s=[];return Be(b,d.z,s,n),void Re(a,9,n,{w:s,A:d})}Me(e,a,t+"_elmW6BL",b,n)}function Xe(e,a,t,b){Pe(e,a,t,0,0,a.b,b)}function Pe(e,a,t,b,n,d,s){for(var l,o=t[b],r=o.r;r===n;){if(l=o.$,1===l)Xe(e,a.k,o.s,s);else if(8===l){o.t=e,o.u=s;var h=o.s.w;0<h.length&&Pe(e,a,h,0,n,d,s)}else if(9===l){o.t=e,o.u=s;var c=o.s;if(c){c.A.s=e;var h=c.w;0<h.length&&Pe(e,a,h,0,n,d,s)}}else o.t=e,o.u=s;if(b++,!(o=t[b])||(r=o.r)>d)return b}var $=a.$;if(4===$){for(var g=a.k;4===g.$;)g=g.k;return Pe(e,g,t,b,n+1,d,e.elm_event_node_ref)}for(var f=a.e,m=e.childNodes,u=0;u<f.length;u++){n++;var p=1===$?f[u]:f[u].b,v=n+(p.b||0);if(n<=r&&r<=v&&(b=Pe(m[u],p,t,b,n,v,s),!(o=t[b])||(r=o.r)>d))return b;n=v}return b}function He(e,a,t,b){return 0===t.length?e:(Xe(e,a,t,b),We(e,t))}function We(e,a){for(var t=0;t<a.length;t++){var b=a[t],n=b.t,d=ze(n,b);n===e&&(e=d)}return e}function ze(e,a){switch(a.$){case 0:return Ze(e,a.s,a.u);case 4:return Te(e,a.u,a.s),e;case 3:return e.replaceData(0,e.length,a.s),e;case 1:return We(e,a.s);case 2:return e.elm_event_node_ref?e.elm_event_node_ref.j=a.s:e.elm_event_node_ref={j:a.s,p:a.u},e;case 6:for(var t=a.s,b=0;b<t.i;b++)e.removeChild(e.childNodes[t.v]);return e;case 7:for(var t=a.s,n=t.e,b=t.v,d=e.childNodes[b];b<n.length;b++)e.insertBefore(Ce(n[b],a.u),d);return e;case 9:var t=a.s;if(!t)return e.parentNode.removeChild(e),e;var s=t.A;return"undefined"!=typeof s.r&&e.parentNode.removeChild(e),s.s=We(e,t.w),e;case 8:return Ue(e,a);case 5:return a.s(e);default:A(10);}}function Ze(e,a,t){var b=e.parentNode,n=Ce(a,t);return n.elm_event_node_ref||(n.elm_event_node_ref=e.elm_event_node_ref),b&&n!==e&&b.replaceChild(n,e),n}function Ue(e,a){var t=a.s,b=Ye(t.y,a);e=We(e,t.w);for(var n=t.x,d=0;d<n.length;d++){var s=n[d],l=s.A,o=2===l.c?l.s:Ce(l.z,a.u);e.insertBefore(o,e.childNodes[s.r])}return b&&ue(e,b),e}function Ye(e,a){if(e){for(var t=vb.createDocumentFragment(),b=0;b<e.length;b++){var n=e[b],d=n.A;ue(t,2===d.c?d.s:Ce(d.z,a.u))}return t}}function Ve(e){if(3===e.nodeType)return pe(e.textContent);if(1!==e.nodeType)return pe("");for(var a=ka,t=e.attributes,b=t.length;b--;){var n=t[b],d=n.name,s=n.value;a=c(h(Db,d,s),a)}for(var l=e.tagName.toLowerCase(),o=ka,r=e.childNodes,b=r.length;b--;)o=c(Ve(r[b]),o);return $(xb,l,a,o)}function Qe(e){for(var a=e.e,t=a.length,b=Array(t),n=0;n<t;n++)b[n]=a[n].b;return{$:1,c:e.c,d:e.d,e:b,f:e.f,b:e.b}}function ea(e,a){function t(){b=1===b?0:(en(t),a(e),1)}a(e);var b=0;return function(n,d){e=n,d?(a(e),2==b&&(b=1)):(0==b&&en(t),b=2)}}function aa(e,a){return P(function(t){en(function(){var b=document.getElementById(e);t(b?M(a(b)):X(rr(e)))})})}function ta(e){return P(function(a){en(function(){a(M(e()))})})}var da,ia,sa,la,oa,ra=b(function(e,a,t){for(var b=Array(e),n=0;n<e;n++)b[n]=t(a+n);return b}),ha=t(function(e,a){for(var t=Array(e),b=0;b<e&&a.b;b++)t[b]=a.a,a=a.b;return t.length=b,T(t,a)}),ca=t(function(e,a){return a[e]}),$a=b(function(e,a,t){for(var b=t.length,n=Array(b),d=0;d<b;d++)n[d]=t[d];return n[e]=a,n}),ga=t(function(e,a){for(var t=a.length,b=Array(t+1),n=0;n<t;n++)b[n]=a[n];return b[t]=e,b}),fa=b(function(e,a,t){for(var b=t.length,n=0;n<b;n++)a=h(e,t[n],a);return a}),ma=b(function(e,a,t){for(var b=t.length-1;0<=b;b--)a=h(e,t[b],a);return a}),ua=t(function(e,a){for(var t=a.length,b=Array(t),n=0;n<t;n++)b[n]=e(a[n]);return b}),pa=b(function(e,a,t){for(var b=t.length,n=Array(b),d=0;d<b;d++)n[d]=h(e,a+d,t[d]);return n}),va=b(function(e,a,t){return t.slice(e,a)}),ya=b(function(e,a,t){var b=a.length,n=e-b;n>t.length&&(n=t.length);for(var d=b+n,s=Array(d),l=0;l<b;l++)s[l]=a[l];for(var l=0;l<n;l++)s[l+b]=t[l];return s}),ka={$:0},xa=t(c),Aa=b(function(e,a,t){for(var b=[];a.b&&t.b;a=a.b,t=t.b)b.push(h(e,a.a,t.a));return v(b)}),Ea=n(function(e,a,t,b){for(var n=[];a.b&&t.b&&b.b;a=a.b,t=t.b,b=b.b)n.push($(e,a.a,t.a,b.a));return v(n)}),ja=d(function(e,a,t,b,n){for(var d=[];a.b&&t.b&&b.b&&n.b;a=a.b,t=t.b,b=b.b,n=n.b)d.push(r(e,a.a,t.a,b.a,n.a));return v(d)}),Ca=i(function(e,a,t,b,n,d){for(var i=[];a.b&&t.b&&b.b&&n.b&&d.b;a=a.b,t=t.b,b=b.b,n=n.b,d=d.b)i.push(g(e,a.a,t.a,b.a,n.a,d.a));return v(i)}),Ta=t(function(e,a){return v(y(a).sort(function(t,a){return C(e(t),e(a))}))}),La=t(function(e,a){return v(y(a).sort(function(t,a){var b=h(e,t,a);return b===un?0:b===pn?-1:1}))}),Na=t(function(e,a){return a}),_a=t(function(e,a){return console.log(e+": "+k(a)),a}),wa=t(E),Oa=t(function(e,a){return!E(e,a)}),Sa=t(function(e,a){return 0>C(e,a)}),Ia=t(function(e,a){return 1>C(e,a)}),Ra=t(function(e,a){return 0<C(e,a)}),Ba=t(function(e,a){return 0<=C(e,a)}),Da=t(function(e,a){var t=C(e,a);return 0>t?pn:t?kn:un}),Ka=0,Ja=t(w),Ga=/.^/,qa=t(function(e,a){var t="g";e.aD&&(t+="m"),e.ag&&(t+="i");try{return Cn(new RegExp(a,t))}catch(e){return Tn}}),Fa=t(function(e,a){return null!==a.match(e)}),Ma=b(function(e,a,t){for(var b,n=[],d=0,s=a.lastIndex,l=-1;d++<e&&(b=a.exec(t))&&l!=a.lastIndex;){for(var o,h=b.length-1,c=Array(h);0<h;)o=b[h],c[--h]=o?Cn(o):Tn;n.push(r(Ln,b[0],b.index,d,v(c))),l=a.lastIndex}return a.lastIndex=s,v(n)}),Xa=n(function(e,a,t,b){function n(a){if(d++>=e)return a;for(var b=arguments.length-3,n=Array(b);0<b;){var s=arguments[b];n[--b]=s?Cn(s):Tn}return t(r(Ln,a,arguments[arguments.length-2],d,v(n)))}var d=0;return b.replace(a,n)}),Pa=b(function(e,a,t){for(var b,d=t,i=[],s=a.lastIndex,l=a.lastIndex;e--&&(b=a.exec(d),!!b);)i.push(d.slice(s,b.index)),s=a.lastIndex;return i.push(d.slice(s)),a.lastIndex=l,v(i)}),Ha=t(function(e,a){return e+a}),Wa=t(function(e,a){return e-a}),za=t(function(e,a){return e*a}),Za=t(function(e,a){return e/a}),Ua=t(function(e,a){return 0|e/a}),Ya=t(Math.pow),Va=t(function(e,t){return t%e}),Qa=t(function(e,a){var t=a%e;return 0===e?A(11):0<t&&0>e||0>t&&0<e?t+e:t}),et=Math.PI,at=Math.E,tt=Math.cos,bt=Math.sin,nt=Math.tan,dt=Math.acos,it=Math.asin,st=Math.atan,lt=t(Math.atan2),ot=Math.ceil,rt=Math.round,ht=Math.sqrt,ct=Math.log,$t=isNaN,gt=t(function(e,a){return e&&a}),ft=t(function(e,a){return e||a}),mt=t(function(e,a){return e!==a}),ut=t(function(e,a){return e+a}),pt=t(function(e,a){return e+a}),vt=t(function(e,a){for(var t=a.length,b=Array(t),n=0;n<t;){var d=a.charCodeAt(n);if(55296<=d&&56319>=d){b[n]=e(N(a[n]+a[n+1])),n+=2;continue}b[n]=e(N(a[n])),n++}return b.join("")}),yt=t(function(e,a){for(var t=[],b=a.length,n=0;n<b;){var d=a[n],s=a.charCodeAt(n);n++,55296<=s&&56319>=s&&(d+=a[n],n++),e(N(d))&&t.push(d)}return t.join("")}),kt=b(function(e,a,t){for(var b=t.length,n=0;n<b;){var d=t[n],s=t.charCodeAt(n);n++,55296<=s&&56319>=s&&(d+=t[n],n++),a=h(e,N(d),a)}return a}),xt=b(function(e,a,t){for(var b=t.length;b--;){var n=t[b],d=t.charCodeAt(b);56320<=d&&57343>=d&&(b--,n=t[b]+n),a=h(e,N(n),a)}return a}),At=t(function(e,a){return a.split(e)}),Et=t(function(e,a){return a.join(e)}),jt=b(function(e,a,t){return t.slice(e,a)}),Ct=t(function(e,a){for(var t=a.length;t--;){var b=a[t],n=a.charCodeAt(t);if(56320<=n&&57343>=n&&(t--,b=a[t]+b),e(N(b)))return!0}return!1}),Tt=t(function(e,a){for(var t=a.length;t--;){var b=a[t],n=a.charCodeAt(t);if(56320<=n&&57343>=n&&(t--,b=a[t]+b),!e(N(b)))return!1}return!0}),Lt=t(function(e,a){return-1<a.indexOf(e)}),Nt=t(function(e,a){return 0===a.indexOf(e)}),_t=t(function(e,a){return a.length>=e.length&&a.lastIndexOf(e)===a.length-e.length}),wt=t(function(e,a){var t=e.length;if(1>t)return ka;for(var b=0,n=[];-1<(b=a.indexOf(e,b));)n.push(b),b+=t;return v(n)}),Ot=O(function(e){return"number"==typeof e?-2147483647<e&&2147483647>e&&(0|e)===e?_n(e):isFinite(e)&&!(e%1)?_n(e):K("an INT",e):K("an INT",e)}),St=O(function(e){return"boolean"==typeof e?_n(e):K("a BOOL",e)}),It=O(function(e){return"number"==typeof e?_n(e):K("a FLOAT",e)}),Rt=O(function(e){return _n(q(e))}),Bt=O(function(e){return"string"==typeof e?_n(e):e instanceof String?_n(e+""):K("a STRING",e)}),Dt=t(function(e,a){return{$:6,d:e,b:a}}),Kt=t(function(e,a){return{$:7,e:e,b:a}}),Jt=t(function(e,a){return{$:10,b:a,h:e}}),Gt=t(function(e,a){return S(e,[a])}),qt=b(function(e,a,t){return S(e,[a,t])}),Ft=n(function(e,a,t,b){return S(e,[a,t,b])}),Mt=d(function(e,a,t,b,n){return S(e,[a,t,b,n])}),Xt=i(function(e,a,t,b,n,d){return S(e,[a,t,b,n,d])}),Pt=s(function(e,a,t,b,n,d,i){return S(e,[a,t,b,n,d,i])}),Ht=l(function(e,a,t,b,n,d,i,s){return S(e,[a,t,b,n,d,i,s])}),Wt=o(function(e,a,t,b,n,d,i,s,l){return S(e,[a,t,b,n,d,i,s,l])}),zt=t(function(e,a){try{var t=JSON.parse(a);return I(e,t)}catch(t){return yd(h(kd,"This is not valid JSON! "+t.message,q(a)))}}),Zt=t(function(e,a){return I(e,F(a))}),Ut=t(function(e,a){return JSON.stringify(F(a),null,e)+""}),Yt=b(function(e,a,t){return t[e]=F(a),t}),Vt=q(null),Qt=t(function(e,a){return{$:3,b:e,d:a}}),eb=t(function(e,a){return{$:4,b:e,d:a}}),ab=0,tb=t(function(e,a){return P(function(t){Z(e,a),t(M(Ka))})}),bb=!1,nb=[],db=n(function(e,a,t,b){return V(a,b,e.bn,e.bL,e.bI,function(){return function(){}})}),ib={},sb=t(function(e,a){return P(function(t){e.g(a),t(M(Ka))})}),lb=t(function(e,a){return h(tb,e.h,{$:0,a:a})}),ob=t(function(e,a){return{$:3,n:e,o:a}}),rb=t(function(e,a){return a}),hb=t(function(e,a){return function(t){return e(a(t))}}),cb=b(function(e,a,t){return P(function(b){function n(e){b(a(t.bf.a(e)))}var d=new XMLHttpRequest;d.addEventListener("error",function(){n(Zd)}),d.addEventListener("timeout",function(){n(Vd)}),d.addEventListener("load",function(){n(re(t.bf.b,d))}),Un(t.o)&&$e(e,d,t.o.a);try{d.open(t.m,t.bN,!0)}catch(a){return n(Wd(t.bN))}return oe(d,t),t.a6.a&&d.setRequestHeader("Content-Type",t.a6.a),d.send(t.a6.b),function(){d.c=!0,d.abort()}})}),$b=b(function(e,a,t){return{$:0,d:e,b:a,a:t}}),gb=t(function(e,a){return{$:0,d:a.d,b:a.b,a:function(t){return e(a.a(t))}}}),fb=t(function(e,a){return{$:0,a:e,b:a}}),mb=t(function(e,a){return new Blob([a],{type:e})}),ub=O(function(e){return"undefined"!=typeof File&&e instanceof File?_n(e):K("a FILE",e)}),pb=b(function(e,a,t){return P(function(){var b=new Blob([t],{type:a});if(navigator.msSaveOrOpenBlob)return void navigator.msSaveOrOpenBlob(b,e);var n=ge(),d=URL.createObjectURL(b);n.href=d,n.download=e,fe(n),URL.revokeObjectURL(d)})}),vb="undefined"==typeof document?{}:document,yb=n(function(e,a,t,b){var n=b.node;return n.parentNode.replaceChild(Ce(e,function(){}),n),{}}),kb=t(function(e,a){return t(function(t,b){for(var n,d=[],i=0;b.b;b=b.b)n=b.a,i+=n.b||0,d.push(n);return i+=d.length,{$:1,c:a,d:Ee(t),e:d,f:e,b:i}})}),xb=kb(void 0),Ab=t(function(e,a){return t(function(t,b){for(var n,d=[],i=0;b.b;b=b.b)n=b.a,i+=n.b.b||0,d.push(n);return i+=d.length,{$:2,c:a,d:Ee(t),e:d,f:e,b:i}})}),Eb=Ab(void 0),jb=t(function(e,a){return{$:4,j:e,k:a,b:1+(a.b||0)}}),Cb=t(function(e,t){return ve([e,t],function(){return e(t)})}),Tb=b(function(e,t,a){return ve([e,t,a],function(){return h(e,t,a)})}),Lb=n(function(e,t,a,b){return ve([e,t,a,b],function(){return $(e,t,a,b)})}),Nb=d(function(e,t,a,b,n){return ve([e,t,a,b,n],function(){return r(e,t,a,b,n)})}),_b=i(function(t,n,a,b,i,d){return ve([t,n,a,b,i,d],function(){return g(t,n,a,b,i,d)})}),wb=s(function(t,n,a,b,i,d,e){return ve([t,n,a,b,i,d,e],function(){return m(t,n,a,b,i,d,e)})}),Ob=l(function(t,n,a,b,i,d,e,s){return ve([t,n,a,b,i,d,e,s],function(){return u(t,n,a,b,i,d,e,s)})}),Sb=o(function(t,n,a,b,i,d,e,s,l){return ve([t,n,a,b,i,d,e,s,l],function(){return p(t,n,a,b,i,d,e,s,l)})}),Ib=t(function(e,a){return{$:"a0",n:e,o:a}}),Rb=t(function(e,a){return{$:"a1",n:e,o:a}}),Bb=t(function(e,a){return{$:"a2",n:e,o:a}}),Db=t(function(e,a){return{$:"a3",n:e,o:a}}),Kb=b(function(e,a,t){return{$:"a4",n:a,o:{f:e,o:t}}}),Jb=t(function(e,a){return"a0"===a.$?h(Ib,a.n,Ae(e,a.o)):a}),Gb=t(function(e,a){return T(e(a.a),a.b)}),qb=t(function(e,a){return{t:e(a.t),ad:a.ad,aa:a.aa}});try{window.addEventListener("t",null,Object.defineProperty({},"passive",{get:function(){oa=!0}}))}catch(a){}var Fb,Mb,Xb=d(function(e,a,t,b,n){for(var d,s=e.length,l=a+s<=n.length,o=0;l&&o<s;)d=n.charCodeAt(a),l=e[o++]===n[a++]&&(10===d?(t++,b=1):(b++,55296==(63488&d)?e[o++]===n[a++]:1));return L(l?a:-1,t,b)}),Pb=b(function(e,a,t){return t.length<=a?-1:55296==(63488&t.charCodeAt(a))?e(N(t.substr(a,2)))?a+2:-1:e(N(t[a]))?"\n"===t[a]?-2:a+1:-1}),Hb=b(function(e,a,t){return t.charCodeAt(a)===e}),Wb=t(function(e,a){for(;e<a.length;e++){var t=a.charCodeAt(e);if(48>t||57<t)return e}return e}),zb=b(function(e,a,t){for(var b,n=0;a<t.length&&(b=t.charCodeAt(a)-48,!(0>b||e<=b));a++)n=e*n+b;return T(a,n)}),Zb=t(function(e,a){for(var t,b=0;e<a.length;e++)if(t=a.charCodeAt(e),48<=t&&57>=t)b=16*b+t-48;else if(65<=t&&70>=t)b=16*b+t-55;else if(97<=t&&102>=t)b=16*b+t-87;else break;return T(e,b)}),Ub=d(function(e,a,t,b,n){for(var d=n.indexOf(e,a),i=0>d?n.length:d+e.length;a<i;){var s=n.charCodeAt(a++);10===s?(b=1,t++):(b++,55296==(63488&s)&&a++)}return L(d,t,b)}),Yb=Fb||n(function(e,a,t,b){return V(a,b,e.bn,e.bL,e.bI,function(a,t){var n=e.bO,d=b.node,i=Ve(d);return ea(t,function(e){var t=n(e),b=Ie(i,t);d=He(d,i,b,a),i=t})})}),Vb=Mb||n(function(e,a,t,b){return V(a,b,e.bn,e.bL,e.bI,function(a,t){var b=e.O&&e.O(a),n=e.bO,d=vb.title,i=vb.body,s=Ve(i);return ea(t,function(e){la=b;var t=n(e),l=xb("body")(ka)(t.a6),o=Ie(s,l);i=He(i,s,o,a),s=l,la=0,d!==t.bK&&(vb.title=d=t.bK)})})}),Qb="undefined"==typeof cancelAnimationFrame?function(e){clearTimeout(e)}:cancelAnimationFrame,en="undefined"==typeof requestAnimationFrame?function(e){return setTimeout(e,1e3/60)}:requestAnimationFrame,an=t(function(e,a){return h(Pi,Yi,P(function(){a&&history.go(a),e()}))}),tn=t(function(e,a){return h(Pi,Yi,P(function(){history.pushState({},"",a),e()}))}),bn=t(function(e,a){return h(Pi,Yi,P(function(){history.replaceState({},"",a),e()}))}),nn={addEventListener:function(){},removeEventListener:function(){}},dn="undefined"==typeof document?nn:document,sn="undefined"==typeof window?nn:window,ln=b(function(e,a,t){return z(P(function(){function b(e){W(t(e))}return e.addEventListener(a,b,oa&&{passive:!0}),function(){e.removeEventListener(a,b)}}))}),on=t(function(e,a){var t=I(e,a);return Yn(t)?Cn(t.a):Tn}),rn=t(function(e,a){return aa(a,function(a){return a[e](),Ka})}),hn=t(function(e,a){return ta(function(){return sn.scroll(e,a),Ka})}),cn=b(function(e,a,t){return aa(e,function(e){return e.scrollLeft=a,e.scrollTop=t,Ka})}),$n=t(function(e,a){return e(a)}),gn=t(function(e,a){if(!a.$){var t=a.a;return t}return e}),fn=ma,mn=b(function(e,a,b){var n=b.c,d=b.d,i=t(function(a,t){if(!a.$){var b=a.a;return $(fn,i,t,b)}var n=a.a;return $(fn,e,t,n)});return $(fn,i,$(fn,e,a,d),n)}),un=1,pn=0,vn=xa,yn=function(e){return $(mn,vn,ka,e)},kn=2,xn=b(function(e,a,b){foldr:for(;;){if(-2===b.$)return a;var n=b.b,d=b.c,i=b.d,s=b.e,l=e,o=$(e,n,d,$(xn,e,a,s));e=l,a=o,b=i;continue foldr}}),An=function(e){return $(xn,b(function(e,a,t){return h(vn,T(e,a),t)}),ka,e)},En=function(e){return $(xn,b(function(e,a,t){return h(vn,e,t)}),ka,e)},jn=function(e){return En(e)},Cn=function(e){return{$:0,a:e}},Tn={$:1},Ln=n(function(e,a,t,b){return{bm:a,bp:e,br:t,aZ:b}}),Nn={bd:T(0,0),W:"example.svg",T:"<svg> . . . </svg>",X:0,Z:0,aX:0,bM:h(gn,Ga,function(e){return h(qa,{ag:!1,aD:!1},e)}("!|#|\\$|%|&|'|\\(|\\)|\\*|\\+|,|\\/|:|;|=|\\?|@|\\[|\\]"))},_n=function(e){return{$:0,a:e}},wn=b(function(e,a,t){return a(e(t))}),On=function(e){return e},Sn={$:-2},In=Sn,Rn=Da,Bn=t(function(e,a){get:for(;;){if(-2===a.$)return Tn;var t=a.b,b=a.c,n=a.d,d=a.e,i=h(Rn,e,t);switch(i){case 0:var s=e,l=n;e=s,a=l;continue get;case 1:return Cn(b);default:var s=e,l=d;e=s,a=l;continue get;}}}),Dn=d(function(t,a,b,n,d){return{$:-1,a:t,b:a,c:b,d:n,e:d}}),Kn=d(function(e,a,t,b,n){if(-1===n.$&&!n.a){var d=n.a,i=n.b,s=n.c,l=n.d,o=n.e;if(-1===b.$&&!b.a){var r=b.a,h=b.b,c=b.c,$=b.d,f=b.e;return g(Dn,0,a,t,g(Dn,1,h,c,$,f),g(Dn,1,i,s,l,o))}return g(Dn,e,i,s,g(Dn,0,a,t,b,l),o)}if(-1===b.$&&!b.a&&-1===b.d.$&&!b.d.a){var m=b.a,h=b.b,c=b.c,u=b.d,p=u.a,v=u.b,y=u.c,k=u.d,x=u.e,f=b.e;return g(Dn,0,h,c,g(Dn,1,v,y,k,x),g(Dn,1,a,t,f,n))}return g(Dn,e,a,t,b,n)}),Jn=b(function(e,a,t){if(-2===t.$)return g(Dn,0,e,a,Sn,Sn);var b=t.a,n=t.b,d=t.c,i=t.d,s=t.e,l=h(Rn,e,n);return 0===l?g(Kn,b,n,d,$(Jn,e,a,i),s):1===l?g(Dn,b,n,a,i,s):g(Kn,b,n,d,i,$(Jn,e,a,s))}),Gn=b(function(e,a,t){var b=$(Jn,e,a,t);if(-1===b.$&&!b.a){var n=b.a,d=b.b,i=b.c,s=b.d,l=b.e;return g(Dn,1,d,i,s,l)}return b}),qn=function(e){getMin:for(;;)if(-1===e.$&&-1===e.d.$){var a=e.d;e=a;continue getMin}else return e},Fn=function(e){if(-1===e.$&&-1===e.d.$&&-1===e.e.$){if(-1===e.e.d.$&&!e.e.d.a){var a=e.a,t=e.b,b=e.c,n=e.d,d=n.a,i=n.b,s=n.c,l=n.d,o=n.e,r=e.e,h=r.a,c=r.b,$=r.c,f=r.d,m=f.a,u=f.b,p=f.c,y=f.d,x=f.e,A=r.e;return g(Dn,0,u,p,g(Dn,1,t,b,g(Dn,0,i,s,l,o),y),g(Dn,1,c,$,x,A))}var a=e.a,t=e.b,b=e.c,E=e.d,d=E.a,i=E.b,s=E.c,l=E.d,o=E.e,j=e.e,h=j.a,c=j.b,$=j.c,f=j.d,A=j.e;return 1===a?g(Dn,1,t,b,g(Dn,0,i,s,l,o),g(Dn,0,c,$,f,A)):g(Dn,1,t,b,g(Dn,0,i,s,l,o),g(Dn,0,c,$,f,A))}return e},Mn=function(e){if(-1===e.$&&-1===e.d.$&&-1===e.e.$){if(-1===e.d.d.$&&!e.d.d.a){var a=e.a,t=e.b,b=e.c,n=e.d,d=n.a,i=n.b,s=n.c,l=n.d,o=l.a,r=l.b,h=l.c,c=l.d,$=l.e,f=n.e,m=e.e,u=m.a,p=m.b,y=m.c,x=m.d,A=m.e;return g(Dn,0,i,s,g(Dn,1,r,h,c,$),g(Dn,1,t,b,f,g(Dn,0,p,y,x,A)))}var a=e.a,t=e.b,b=e.c,E=e.d,d=E.a,i=E.b,s=E.c,j=E.d,f=E.e,C=e.e,u=C.a,p=C.b,y=C.c,x=C.d,A=C.e;return 1===a?g(Dn,1,t,b,g(Dn,0,i,s,j,f),g(Dn,0,p,y,x,A)):g(Dn,1,t,b,g(Dn,0,i,s,j,f),g(Dn,0,p,y,x,A))}return e},Xn=s(function(e,a,t,b,n,d,i){if(-1===d.$&&!d.a){var s=d.a,l=d.b,o=d.c,r=d.d,h=d.e;return g(Dn,t,l,o,r,g(Dn,0,b,n,h,i))}_n2$2:for(;;)if(-1!==i.$||1!==i.a)break _n2$2;else if(-1===i.d.$){if(1===i.d.a){var c=i.a,$=i.d,f=$.a;return Mn(a)}break _n2$2}else{var m=i.a,u=i.d;return Mn(a)}return a}),Pn=function(e){if(-1===e.$&&-1===e.d.$){var a=e.a,t=e.b,b=e.c,n=e.d,d=n.a,i=n.d,s=e.e;if(1===d){if(-1===i.$&&!i.a){i.a;return g(Dn,a,t,b,Pn(n),s)}var l=Fn(e);if(-1===l.$){var o=l.a,r=l.b,h=l.c,c=l.d,$=l.e;return g(Kn,o,r,h,Pn(c),$)}return Sn}return g(Dn,a,t,b,Pn(n),s)}return Sn},Hn=t(function(e,a){if(-2===a.$)return Sn;var t=a.a,b=a.b,n=a.c,d=a.d,i=a.e;if(0>C(e,b)){if(-1===d.$&&1===d.a){var s=d.a,l=d.d;if(-1===l.$&&!l.a){l.a;return g(Dn,t,b,n,h(Hn,e,d),i)}var o=Fn(a);if(-1===o.$){var r=o.a,c=o.b,$=o.c,f=o.d,m=o.e;return g(Kn,r,c,$,h(Hn,e,f),m)}return Sn}return g(Dn,t,b,n,h(Hn,e,d),i)}return h(Wn,e,u(Xn,e,a,t,b,n,d,i))}),Wn=t(function(e,a){if(-1===a.$){var t=a.a,b=a.b,n=a.c,d=a.d,i=a.e;if(E(e,b)){var s=qn(i);if(-1===s.$){var l=s.b,o=s.c;return g(Kn,t,l,o,d,Pn(i))}return Sn}return g(Kn,t,b,n,d,h(Hn,e,i))}return Sn}),zn=t(function(e,a){var t=h(Hn,e,a);if(-1===t.$&&!t.a){var b=t.a,n=t.b,d=t.c,i=t.d,s=t.e;return g(Dn,1,n,d,i,s)}return t}),Zn=b(function(e,a,t){var b=a(h(Bn,e,t));if(!b.$){var n=b.a;return $(Gn,e,n,t)}return h(zn,e,t)}),Un=function(e){return!e.$},Yn=function(e){return!e.$},Vn=32,Qn=n(function(e,a,t,b){return{$:0,a:e,b:a,c:t,d:b}}),ed=ot,ad=t(function(e,a){return ct(a)/ct(e)}),td=ed(h(ad,2,Vn)),bd=[],nd=r(Qn,0,td,bd,bd),dd=function(e){return{$:1,a:e}},id=function(e){return{$:0,a:e}},sd=ha,ld=b(function(e,a,t){foldl:for(;;){if(!t.b)return a;var b=t.a,n=t.b,d=e,i=h(e,b,a);e=d,a=i,t=n;continue foldl}}),od=function(e){return $(ld,vn,ka,e)},rd=t(function(e,a){compressNodes:for(;;){var t=h(sd,Vn,e),b=t.a,n=t.b,d=h(vn,id(b),a);if(!n.b)return od(d);e=n,a=d;continue compressNodes}}),hd=t(function(e,a){return a(e)}),cd=function(e){var a=e.a;return a},$d=t(function(e,a){treeFromBuilder:for(;;){var t=ed(a/Vn);if(1===t)return h(sd,Vn,e).a;var b=h(rd,e,ka);e=b,a=t;continue treeFromBuilder}}),gd=t(function(e,a){return 0<C(e,a)?e:a}),fd=function(e){return e.length},md=t(function(e,a){if(!a.e)return r(Qn,fd(a.g),td,bd,a.g);var t=a.e*Vn,b=ba(h(ad,Vn,t-1)),n=e?od(a.h):a.h,d=h($d,n,a.e);return r(Qn,fd(a.g)+t,h(gd,5,b*td),d,a.g)}),ud=ra,pd=d(function(e,a,t,b,n){initializeHelp:for(;;){if(0>a)return h(md,!1,{h:b,e:0|t/Vn,g:n});var d=dd($(ud,Vn,a,e)),i=e,s=a-Vn,l=t,o=h(vn,d,b),r=n;e=i,a=s,t=l,b=o,n=r;continue initializeHelp}}),vd=t(function(e,a){if(0>=e)return nd;var t=e%Vn,b=$(ud,t,e-t,a);return g(pd,a,e-t-Vn,e,ka,b)}),yd=function(e){return{$:1,a:e}},kd=t(function(e,a){return{$:3,a:e,b:a}}),xd=t(function(e,a){return{$:0,a:e,b:a}}),Ad=t(function(e,a){return{$:1,a:e,b:a}}),Ed=function(e){return{$:2,a:e}},jd=function(e){var a=e.charCodeAt(0);return 55296<=a&&56319>=a?1024*(a-55296)+e.charCodeAt(1)-56320+65536:a},Cd=function(e){var a=jd(e);return 97<=a&&122>=a},Td=function(e){var a=jd(e);return 90>=a&&65<=a},Ld=function(e){return Cd(e)||Td(e)},Nd=function(e){var a=jd(e);return 57>=a&&48<=a},_d=function(e){return Cd(e)||Td(e)||Nd(e)},wd=function(e){return $(ld,t(function(e,a){return a+1}),0,e)},Od=b(function(e,a,t){rangeHelp:for(;;)if(1>C(e,a)){var b=e,n=a-1,d=h(vn,a,t);e=b,a=n,t=d;continue rangeHelp}else return t}),Sd=t(function(e,a){return $(Od,e,a,ka)}),Id=t(function(e,a){return $(Aa,e,h(Sd,0,wd(a)-1),a)}),Rd=function(e){return e+""},Bd=t(function(e,a){return h(Et,e,y(a))}),Dd=function(e){var a=e.charCodeAt(0);return a?Cn(55296<=a&&56319>=a?T(N(e[0]+e[1]),e.slice(2)):T(N(e[0]),e.slice(1))):Tn},Kd=t(function(e,a){return v(h(At,e,a))}),Jd=function(e){return h(Bd,"\n    ",h(Kd,"\n",e))},Gd=t(function(e,a){return"\n\n("+(Rd(e+1)+(") "+Jd(qd(a))))}),qd=function(e){return h(Fd,e,ka)},Fd=t(function(e,a){errorToStringHelp:for(;;)switch(e.$){case 0:var t=e.a,b=e.b,n=function(){var e=Dd(t);if(1===e.$)return!1;var a=e.a,b=a.a,n=a.b;return Ld(b)&&h(Tt,_d,n)}(),d=n?"."+t:"['"+(t+"']"),s=b,l=h(vn,d,a);e=s,a=l;continue errorToStringHelp;case 1:var o=e.a,b=e.b,i="["+(Rd(o)+"]"),s=b,l=h(vn,i,a);e=s,a=l;continue errorToStringHelp;case 2:var r=e.a;if(!r.b)return"Ran into a Json.Decode.oneOf with no possibilities"+function(){return a.b?" at json"+h(Bd,"",od(a)):"!"}();if(!r.b.b){var b=r.a,s=b,l=a;e=s,a=l;continue errorToStringHelp}else{var c=function(){return a.b?"The Json.Decode.oneOf at json"+h(Bd,"",od(a)):"Json.Decode.oneOf"}(),$=c+(" failed in the following "+(Rd(wd(r))+" ways:"));return h(Bd,"\n\n",h(vn,$,h(Id,Gd,r)))}default:var g=e.a,f=e.b,$=function(){return a.b?"Problem with the value at json"+(h(Bd,"",od(a))+":\n\n    "):"Problem with the given value:\n\n"}();return $+(Jd(h(Ut,4,f))+("\n\n"+g));}}),Md=sb,Xd=lb,Pd=t(function(t,b){if(!b.$){var n=b.a;return _n(t(n))}var a=b.a;return yd(a)}),Hd=t(function(e,a){return{$:3,a:e,b:a}}),Wd=function(e){return{$:0,a:e}},zd=t(function(e,a){return{$:4,a:e,b:a}}),Zd={$:2},Ud=function(e){return{$:1,a:e}},Yd=function(e){return{$:0,a:e}},Vd={$:1},Qd=t(function(e,a){return $($b,"",On,h(wn,a,e))}),ei=t(function(a,t){if(!t.$){var b=t.a;return _n(b)}var n=t.a;return yd(a(n))}),ai=function(e){return{$:4,a:e}},ti=function(e){return{$:3,a:e}},bi=function(e){return{$:0,a:e}},ni={$:2},di={$:1},ii=t(function(e,a){switch(a.$){case 0:var t=a.a;return yd(bi(t));case 1:return yd(di);case 2:return yd(ni);case 3:var b=a.a;return yd(ti(b.aY));default:var n=a.b;return h(ei,ai,e(n));}}),si={$:0},li=function(e){return{$:1,a:e}},oi=M,ri=t(function(e,a){return{aO:e,a_:a}}),hi=oi(h(ri,In,ka)),ci=Qt,$i=function(e){return P(function(a){var t=e.f;2===t.$&&t.c&&t.c(),e.f=null,a(M(0))})},gi=b(function(e,a,t){updateReqs:for(;;){if(!a.b)return oi(t);var b=a.a,n=a.b;if(!b.$){var d=b.a,i=h(Bn,d,t);if(1===i.$){var s=e,l=t;e=s,a=n,t=l;continue updateReqs}else{var o=i.a;return h(ci,function(){return $(gi,e,n,h(zn,d,t))},$i(o))}}else{var r=b.a;return h(ci,function(a){var b=r.o;if(1===b.$)return $(gi,e,n,t);var d=b.a;return $(gi,e,n,$(Gn,d,a,t))},z($(cb,e,Md(e),r)))}}}),fi=n(function(e,a,t,b){return h(ci,function(e){return oi(h(ri,e,t))},$(gi,e,a,b.aO))}),mi=n(function(e,t,n,i){if(!i.b)return t;var s=i.a,a=i.b;if(!a.b)return h(e,s,t);var l=a.a,b=a.b;if(!b.b)return h(e,s,h(e,l,t));var o=b.a,c=b.b;if(!c.b)return h(e,s,h(e,l,h(e,o,t)));var g=c.a,d=c.b,f=500<n?$(ld,e,t,od(d)):r(mi,e,t,n+1,d);return h(e,s,h(e,l,h(e,o,h(e,g,f))))}),ui=b(function(e,a,t){return r(mi,e,a,0,t)}),pi=b(function(e,a,t){var b=e(a);if(!b.$){var n=b.a;return h(vn,n,t)}return t}),vi=t(function(e,a){return $(ui,pi(e),ka,a)}),yi=b(function(e,a,t){return h(ci,function(n){return h(ci,function(a){return oi(h(e,n,a))},t)},a)}),ki=function(e){return $(ui,yi(vn),oi(ka),e)},xi=n(function(e,a,t,b){var n=b.a,d=b.b;return E(a,n)?Cn(h(Md,e,d(t))):Tn}),Ai=b(function(e,a,t){var b=a.a,n=a.b;return h(ci,function(){return oi(t)},ki(h(vi,$(xi,e,b,n),t.a_)))}),Ei=function(e){return{$:0,a:e}},ji=t(function(e,a){if(!a.$){var t=a.a;return Ei(t)}var b=a.a;return li({B:b.B,a6:b.a6,bf:h(gb,e,b.bf),i:b.i,m:b.m,n:b.n,o:b.o,bN:b.bN})}),Ci=t(function(e,a){return{$:0,a:e,b:a}}),Ti=t(function(e,a){var t=a.a,b=a.b;return h(Ci,t,h(wn,b,e))});ib.Http=ee(hi,fi,Ai,ji,Ti);var Li=te("Http"),Ni=te("Http"),_i=function(e){return Li(li({B:!1,a6:e.a6,bf:e.bf,i:e.i,m:e.m,n:e.n,o:e.o,bN:e.bN}))},wi=function(e){return _i({a6:si,bf:e.bf,i:ka,m:"GET",n:Tn,o:Tn,bN:e.bN})}({bf:function(e){return h(Qd,e,ii(_n))}(function(e){return{$:1,a:e}}),bN:"assets/example.svg"}),Oi=t(function(e,a){if(!a.$){var t=a.a;return _(e,{T:t,X:1})}return _(e,{X:1})}),Si=function(e){return e?0:1},Ii=function(e){return{$:1,a:e}},Ri=function(e){return{$:0,a:e}},Bi=function(e){return{$:5,a:e}},Di=oi(0),Ki=t(function(e,a){return $(ui,t(function(a,t){return h(vn,e(a),t)}),ka,a)}),Ji=t(function(e,a){return h(ci,function(t){return oi(e(t))},a)}),Gi=t(function(e,a){return z(h(ci,Md(e),a))}),qi=b(function(e,a){return h(Ji,function(){return 0},ki(h(Ki,Gi(e),a)))}),Fi=b(function(){return oi(0)}),Mi=t(function(e,a){return h(Ji,e,a)});ib.Task=ee(Di,qi,Fi,Mi);var Xi=te("Task"),Pi=t(function(e,a){return Xi(h(Ji,e,a))}),Hi=function(e){return e.name},Wi=function(e){return P(function(a){var t=new FileReader;return t.addEventListener("loadend",function(){a(M(t.result))}),t.readAsText(e),function(){t.abort()}})},zi=t(function(e,a){return h(Pi,a,me(e))}),Zi=t(function(e,a){if(!a.$)return T(e,h(zi,v(["image/svg+xml"]),function(e){return Bi(Ii(e))}));var t=a.a;return T(_(e,{W:Hi(t)}),h(Pi,Ri,Wi(t)))}),Ui=be(ka),Yi=function(e){never:for(;;){var a=e;e=a;continue never}},Vi=b(function(e,a,t){return h(Pi,Yi,$(pb,e,a,t))}),Qi=t(function(e,a){switch(e.$){case 0:var t=e.a;return T(_(a,{T:t}),Ui);case 1:var b=e.a;return T(h(Oi,a,b),Ui);case 2:var n=e.a;return T(_(a,{aX:n}),Ui);case 3:return T(_(a,{Z:Si(a.Z)}),Ui);case 4:return T(a,$(Vi,a.W,"image/svg+xml",a.T));case 5:var d=e.a;return h(Zi,a,d);default:var i=e.a;return T(_(a,{bd:i}),Ui);}}),es=t(function(e,t){if(!t.$){var b=t.a;return b}return e}),as=Gt,ts=qt,bs=function(e){return{$:0,a:e}},ns=function(e){switch(e.$){case 0:return 0;case 1:return 1;case 2:return 2;default:return 3;}},ds=xb("code"),is=xb("pre"),ss=pe,ls=function(e){return v([e])},os=t(function(e,a){return h(Bb,e,q(a))}),rs=os("className"),hs=xb("div"),cs=t(function(e,a){return h(Db,ye(e),xe(a))}),$s=t(function(e,a){return $(ui,t(function(a,t){return e(a)?h(vn,a,t):t}),ka,a)}),gs=function(e){var a=e.b;return a},fs=function(e){return rs(h(Bd," ",h(Ki,cd,h($s,gs,e))))},ms=function(e){return""===e},us=xb("span"),ps=function(e){return"elmsh"+function(){return 0===e?"0":1===e?"-comm":2===e?"1":3===e?"2":4===e?"3":5===e?"4":6===e?"5":7===e?"6":"7"}()},vs=function(e){var a=e.bJ,t=e.bw,b=e.a4;return!t&&ms(b)?ss(a):h(us,v([fs(v([T(ps(t),t),T("elmsh-"+b,""!==b)]))]),v([ss(a)]))},ys=b(function(e,a,t){var b=t.bi,n=t.bk;return h(hs,v([fs(v([T("elmsh-line",!0),T("elmsh-hl",E(n,Cn(0))),T("elmsh-add",E(n,Cn(1))),T("elmsh-del",E(n,Cn(2)))])),h(cs,"data-elmsh-lc",Rd(e+a))]),h(Ki,vs,b))}),ks=t(function(e,a){return a.b?$(ui,vn,a,e):e}),xs=function(e){return $(ui,ks,ka,e)},As=function(e){return h(ds,v([rs("elmsh")]),xs(h(Ki,function(e){var a=e.bk,t=e.bi;return E(a,Tn)?h(Ki,vs,t):v([h(us,v([fs(v([T("elmsh-hl",E(a,Cn(0))),T("elmsh-add",E(a,Cn(1))),T("elmsh-del",E(a,Cn(2)))]))]),h(Ki,vs,t))])},e)))},Es=t(function(e,a){if(1===e.$)return h(is,v([rs("elmsh")]),v([As(a)]));var t=e.a;return h(is,v([rs("elmsh")]),ls(h(ds,ka,h(Id,ys(t),a))))}),js=t(function(e,a){return h(Es,e,a)}),Cs=b(function(e,a,t){return{ai:a,aI:t,aS:e}}),Ts=function(e){return $(Cs,e.aS,e.ai,e.aI)},Ls=t(function(e,a){bagToList:for(;;)switch(e.$){case 0:return a;case 1:var t=e.a,b=e.b,n=t,d=h(vn,b,a);e=n,a=d;continue bagToList;default:var t=e.a,i=e.b,n=t,d=h(Ls,i,a);e=n,a=d;continue bagToList;}}),Ns=t(function(e,a){var t=e({ai:1,c:ka,d:1,b:0,aS:1,a:a});if(!t.$){var b=t.b;return _n(b)}var n=t.b;return yd(h(Ls,n,ka))}),_s=t(function(e,t){var b=h(Ns,e,t);if(!b.$){var n=b.a;return _n(n)}var a=b.a;return yd(h(Ki,Ts,a))}),ws=t(function(e,a){return{$:1,a:e,b:a}}),Os=b(function(e,a,t){return{$:0,a:e,b:a,c:t}}),Ss=t(function(e,t){return function(b){var n=t(b);if(!n.$){var d=n.a,i=n.b,a=n.c;return $(Os,d,e(i),a)}var d=n.a,s=n.b;return h(ws,d,s)}}),Is=Ss,Rs=function(e){return{$:1,a:e}},Bs=function(e){return{$:0,a:e}},Ds=function(e){if(!e.$){var t=e.a;return Bs(t)}var b=e.a;return Rs(b)},Ks=n(function(e,a,t,b){loopHelp:for(;;){var n=t(a),d=n(b);if(!d.$){var i=d.a,s=d.b,l=d.c;if(!s.$){var o=s.a,r=e||i,c=t;e=r,a=o,t=c,b=l;continue loopHelp}else{var g=s.a;return $(Os,e||i,g,l)}}else{var i=d.a,f=d.b;return h(ws,e||i,f)}}}),Js=t(function(e,a){return function(t){return r(Ks,!1,e,a,t)}}),Gs=t(function(e,a){return h(Js,e,function(e){return h(Is,Ds,a(e))})}),qs=function(e){return{$:1,a:e}},Fs=function(e){return{$:0,a:e}},Ms=t(function(e){return e}),Xs=jt,Ps=t(function(e,t){return function(b){var n=t(b);if(1===n.$){var d=n.a,i=n.b;return h(ws,d,i)}var d=n.a,s=n.b,a=n.c;return $(Os,d,h(e,$(Xs,b.b,a.b,b.a),s),a)}}),Hs=function(e){return h(Ps,Ms,e)},Ws={$:0},zs=t(function(e,a){return{$:2,a:e,b:a}}),Zs=b(function(e,a,t){oneOfHelp:for(;;){if(!t.b)return h(ws,!1,a);var b=t.a,n=t.b,d=b(e);if(!d.$){var i=d;return i}var i=d,s=i.a,l=i.b;if(s)return i;var o=e,r=h(zs,a,l);e=o,a=r,t=n;continue oneOfHelp}}),Us=function(e){return function(a){return $(Zs,a,Ws,e)}},Ys=function(e){return function(a){return $(Os,!1,e,a)}},Vs={$:11},Qs=t(function(e,a){return{$:1,a:e,b:a}}),el=n(function(e,a,t,b){return{ai:a,a9:b,aI:t,aS:e}}),al=t(function(e,a){return h(Qs,Ws,r(el,e.aS,e.ai,a,e.c))}),tl=Pb,bl=t(function(e,a){return function(t){var b=$(tl,e,t.b,t.a);return E(b,-1)?h(ws,!1,h(al,t,a)):E(b,-2)?$(Os,!0,0,{ai:1,c:t.c,d:t.d,b:t.b+1,aS:t.aS+1,a:t.a}):$(Os,!0,0,{ai:t.ai+1,c:t.c,d:t.d,b:b,aS:t.aS,a:t.a})}}),nl=function(e){return h(bl,e,Vs)},dl=d(function(e,a,t,b,n){chompWhileHelp:for(;;){var d=$(tl,e,a,n.a);if(E(d,-1))return $(Os,0>C(n.b,a),0,{ai:b,c:n.c,d:n.d,b:a,aS:t,a:n.a});if(E(d,-2)){var i=e,s=a+1,l=t+1,o=1,r=n;e=i,a=s,t=l,b=o,n=r;continue chompWhileHelp}else{var i=e,s=d,l=t,o=b+1,r=n;e=i,a=s,t=l,b=o,n=r;continue chompWhileHelp}}}),il=function(e){return function(a){return g(dl,e,a.b,a.aS,a.ai,a)}},sl=b(function(e,t,n){return function(d){var i=t(d);if(1===i.$){var s=i.a,l=i.b;return h(ws,s,l)}var o=i.a,r=i.b,a=i.c,c=n(a);if(1===c.$){var g=c.a,l=c.b;return h(ws,o||g,l)}var g=c.a,f=c.b,b=c.c;return $(Os,o||g,h(e,r,f),b)}}),ll=t(function(e,a){return $(sl,Ms,e,a)}),ol=ll,rl=function(e){return h(ol,h(ol,Ys(0),nl(e)),il(e))},hl=function(e){return"\n"===e},cl={$:0},$l=t(function(e,t){return function(n){var d=t(n);if(1===d.$){var i=d.a,s=d.b;return h(ws,i,s)}var l=d.a,o=d.b,a=d.c,r=e(o),c=r(a);if(1===c.$){var g=c.a,s=c.b;return h(ws,l||g,s)}var g=c.a,f=c.b,b=c.c;return $(Os,l||g,f,b)}}),gl=$l,fl=function(e){return{$:8,a:e}},ml=t(function(e,a){return{$:0,a:e,b:a}}),ul=function(e){var a=e.a,t=e.b,b=!ms(a);return function(e){var n=g(Xb,a,e.b,e.aS,e.ai,e.a),d=n.a,i=n.b,s=n.c;return E(d,-1)?h(ws,!1,h(al,e,t)):$(Os,b,0,{ai:s,c:e.c,d:e.d,b:d,aS:i,a:e.a})}},pl=function(e){return ul(h(ml,e,fl(e)))},vl=function(e){return{$:12,a:e}},yl=function(e){return function(a){return h(ws,!1,h(al,a,e))}},kl=function(e){return yl(vl(e))},xl=function(e){return e.length},Al=function(e){return function(a){return E(xl(a.a),a.b)?$(Os,!1,0,a):h(ws,!1,h(al,a,e))}}({$:10}),El=b(function(e,a,t){return h(gl,function(t){return e(w(t,a))},t)}),jl=b(function(e,a,t){return h(gl,function(t){return e(h(vn,t,a))},t)}),Cl=t(function(e,a){return h(ol,a,il(e))}),Tl=t(function(e,a){var t=e.am,b=e.ay,n=e.an,d=e.av;return Us(v([h(Is,Ms(h(vn,t(n),a)),pl(n)),h(Is,Ms(a),Al),$(El,Tl(e),a,Us(d)),$(jl,Tl(e),a,h(Is,t,Hs(h(Cl,b,nl(Ms(!0))))))]))}),Ll=b(function(e,a,t){var b=a.am,n=a.ay,d=a.ac,i=a.an,s=a.av;return Us(v([h(gl,function(t){return 1===e?Ys(t):$(Ll,e-1,a,t)},h(Is,Ms(h(vn,b(i),t)),pl(i))),$(jl,h(Ll,e+1,a),t,h(Is,b,Hs(h(Cl,n,pl(d))))),$(El,Tl(a),t,Us(s)),h(Is,Ms(t),Al),$(jl,h(Ll,e,a),t,h(Is,b,Hs(h(Cl,n,nl(Ms(!0))))))]))}),Nl=t(function(e,a){var t=e.ac,b=e.an,n=e.ay,d=T(Dd(e.ac),Dd(e.an));if(1===d.a.$){d.a;return kl("Trying to parse a delimited helper, but the start token cannot be an empty string!")}if(1===d.b.$){d.b;return kl("Trying to parse a delimited helper, but the end token cannot be an empty string!")}var i=d.a.a,s=i.a,l=d.b.a,o=l.a;return e.ax?$(Ll,1,_(e,{ay:function(e){return n(e)&&!E(e,s)&&!E(e,o)}}),a):h(Tl,_(e,{ay:function(e){return n(e)&&!E(e,o)}}),a)}),_l=function(e){var a=e.ac,t=e.ay,b=e.am;return h(gl,function(a){return h(Nl,e,v([a]))},h(Is,Ms(b(a)),pl(a)))},wl={$:1},Ol=b(function(e,a,t){return e(a(t))}),Sl=function(e){return{$:3,a:e}},Il={$:2},Rl=h(Is,function(){return T(Il,"\n")},pl("\n")),Bl=h(Is,ls,Rl),Dl={am:function(e){return T(Sl(2),e)},an:"\"",av:v([Bl]),ax:!1,ay:h(Ol,function(e){return!e},hl),ac:"\""},Kl=_l(_(Dl,{am:function(e){return T(wl,e)},an:"-->",ac:"<!--"})),Jl=h(ol,h(ol,Ys(0),nl(function(e){return"<"===e})),Us(v([nl(function(e){return"/"===e||"!"===e||"?"===e}),Ys(0)]))),Gl=function(e){return" "===e||"\t"===e},ql=function(e){return Gl(e)||hl(e)},Fl=_l(Dl),Ml=_l(_(Dl,{an:"'",ac:"'"})),Xl=Us(v([Fl,Ml,h(Is,function(e){return v([T(Sl(2),e)])},Hs(rl(function(e){return!ql(e)&&">"!==e})))])),Pl=Us(v([h(Is,function(e){return T(cl,e)},Hs(rl(Gl))),Rl])),Hl=function(e){return Us(v([$(jl,Hl,e,Pl),$(El,Ys,e,Xl),Ys(e)]))},Wl=function(e){return Us(v([$(jl,Wl,e,Pl),$(jl,Hl,e,h(Is,function(){return T(cl,"=")},pl("="))),Ys(e)]))},zl=function(e){return Td(e)||Cd(e)||Nd(e)},Zl=function(e){return zl(e)||"-"===e},Ul=function(e){return Zl(e)||"_"===e},Yl=function(e){return Us(v([h(Is,Fs,$(jl,Wl,e,h(Is,function(e){return T(Sl(1),e)},Hs(rl(Ul))))),h(Is,function(a){return Fs(h(vn,a,e))},Pl),h(Is,function(a){return Fs(h(vn,T(cl,a),e))},Hs(rl(function(e){return!ql(e)&&">"!==e}))),Ys(qs(e))]))},Vl=function(e){return Us(v([h(gl,function(a){return h(Gs,h(vn,a,e),Yl)},h(Is,function(e){return T(Sl(0),e)},Hs(h(Cl,Zl,nl(zl))))),Ys(e)]))},Ql=function(e){return h(gl,Vl,h(Is,function(a){return h(vn,T(cl,a),e)},Hs(Jl)))},eo=h(Gs,ka,function(e){return Us(v([h(Is,function(a){return Fs(h(vn,a,e))},Pl),h(Is,function(a){return Fs(w(a,e))},Kl),h(Is,function(a){return Fs(h(vn,T(cl,a),e))},Hs(rl(function(e){return"<"!==e&&!hl(e)}))),h(Is,Fs,Ql(e)),Ys(qs(e))]))}),ao=function(e){return{bi:e,bk:Tn}},to=t(function(e,a){var t=a.a,b=a.b;switch(t.$){case 0:return{a4:"",bw:0,bJ:b};case 1:return{a4:"",bw:1,bJ:b};case 2:return{a4:"",bw:0,bJ:b};default:var n=t.a,d=e(n),i=d.a,s=d.b;return{a4:s,bw:i,bJ:b};}}),bo=b(function(e,a,t){var b=a.a,n=a.b,d=t.a,i=t.b,s=t.c;if(E(b,Il))return L(h(vn,ao(i),d),v([h(to,e,T(b,n))]),Tn);if(E(Cn(b),s)){if(i.b){var l=i.a,o=i.b;return L(d,h(vn,_(l,{bJ:w(n,l.bJ)}),o),s)}return L(d,h(vn,h(to,e,T(b,n)),i),s)}return L(d,h(vn,h(to,e,T(b,n)),i),Cn(b))}),no=t(function(e,a){return function(e){var a=e.a,t=e.b;return h(vn,ao(t),a)}($(ld,bo(e),L(ka,ka,Tn),a))}),io=h(wn,_s(eo),Pd(no(function(e){return 0===e?T(4,"xml-t"):1===e?T(6,"xml-a"):T(3,"xlm-av")}))),so=h(wn,io,Pd(On)),lo=function(e){return h(es,h(is,ka,v([h(ds,ka,v([ss(e.T)]))])),h(Pd,js(Tn),so(""===e.T?"<svg ...> ... </svg>":e.T)))},oo=function(e){return{$:0,a:e}},ro=Ib,ho=t(function(e,a){return h(ro,e,oo(a))}),co=t(function(e,a){return $(ui,Dt,a,e)}),$o=Ot,go=function(e){return h(ho,"scroll",h(as,e,$(ts,function(e){return function(a){return T(e,a)}},h(co,v(["target","scrollLeft"]),$o),h(co,v(["target","scrollTop"]),$o))))},fo=function(e){return{$:6,a:e}},mo=xb("textarea"),uo=os("alt"),po=t(function(e,a){return h(Bb,e,q(a))}),vo=po("spellcheck"),yo=os("value"),ko=function(e){return T(e,!0)},xo=function(e){return{$:1,a:e}},Ao=t(function(e,a){return h(ro,e,xo(a))}),Eo=h(co,v(["target","value"]),Bt),jo=function(e){return h(Ao,"input",h(as,ko,h(as,e,Eo)))},Co=function(e){return h(mo,v([yo(e.T),jo(Ri),go(fo),vo(!1),uo("Text Editor")]),ka)},To=Rd,Lo=function(e){return h(Rb,"transform",e)},No=function(e){var a=e.a,t=e.b;return Lo("translate("+(To(-a)+("px, "+(To(-t)+"px)"))))},_o=os("id"),wo=function(e){return h(hs,v([_o("editor"),uo("Text Editor")]),v([h(hs,v([No(e.bd)]),v([lo(e)])),Co(e)]))},Oo={$:4},So={$:0},Io={$:3},Ro=function(e){return!!e},Bo=xb("img"),Do=function(e){return h(os,"src",xe(e))},Ko=function(e){return h(Bo,v([Do(Ro(e)?"assets/bulb-on.svg":"assets/bulb-off.svg"),uo("Toggle Dark Mode")]),ka)},Jo=h(Bo,v([Do("assets/download.svg"),uo("Download")]),ka),Go=h(Bo,v([_o("error"),Do("assets/error.svg"),uo("Something Went Wrong")]),ka),qo=function(e){return{$:2,a:e}},Fo=function(e){return h(ho,"error",bs(e))},Mo=function(e){return h(ho,"load",bs(e))},Xo=function(e){return!e},Po=function(e){return Xo(e.aX)?Fo(qo(1)):Mo(qo(0))},Ho=h(Bo,v([Do("assets/upload.svg"),uo("Upload")]),ka),Wo=function(e){var a=e.bp;switch(a){case"!":return"%21";case"#":return"%23";case"$":return"%24";case"%":return"%25";case"&":return"%26";case"'":return"%27";case"(":return"%28";case")":return"%29";case"*":return"%2A";case"+":return"%2B";case",":return"%2C";case"/":return"%2F";case":":return"%3A";case";":return"%3B";case"=":return"%3D";case"?":return"%3F";case"@":return"%40";case"[":return"%5B";case"]":return"%5D";default:return a;}},zo=Xa(1/0),Zo=function(e){return"data:image/svg+xml;utf8,"+$(zo,e.bM,Wo,e.T)},Uo=xb("button"),Yo=function(e){return h(ho,"click",bs(e))},Vo=function(e){return h(hs,v([_o("display"),rs(Ro(e.Z)?"dark":"light")]),v([h(Bo,v([_o("image"),Do(Zo(e)),Po(e),uo("Picture Display")]),ka),Go,h(Uo,v([Yo(Oo),uo("Download")]),v([Jo])),h(Uo,v([Yo(Bi(So)),uo("Upload")]),v([Ho])),h(Uo,v([Yo(Io),uo("Toggle Dark Mode")]),v([Ko(e.Z)]))]))},Qo=h(Bo,v([Do("assets/github.svg"),uo("Github Repository")]),ka),er=xb("a"),ar=Db("rel"),tr=os("target"),br=t(function(e,a){return h(er,w(v([tr("_blank"),ar("noopener noreferrer")]),e),a)}),nr=h(Bo,v([Do("assets/logo.svg"),uo("RawSvg")]),ka),dr=function(e){return h(os,"href",ke(e))},ir=Cb,sr=function(e){return h(hs,v([_o("container"),rs(Xo(e.aX)?"valid":"error")]),v([h(hs,v([_o("title")]),v([nr,h(br,v([dr("https://github.com/GarkGarcia/RawSvg"),_o("github")]),v([Qo])),h(br,v([dr("https://github.com/GarkGarcia/RawSvg/blob/master/LICENSE"),_o("copyright"),rs("elmsh-comm"),uo("License Information")]),v([ss("<!-- GarkGarcia (C) 2019 -->")]))])),Vo(e),h(ir,wo,e)]))},lr=function(e){return{$:1,a:e}},or=function(e){return{$:0,a:e}},rr=On,hr=t(function(e,a){return 1>e?a:$(Xs,e,xl(a),a)}),cr=Nt,$r=wt,gr=t(function(e,a){return 1>e?"":$(Xs,0,e,a)}),fr=function(e){for(var a,t=0,b=e.charCodeAt(0),n=43==b||45==b?1:0,d=n;d<e.length;++d){if(a=e.charCodeAt(d),48>a||57<a)return Tn;t=10*t+a-48}return d==n?Tn:Cn(45==b?-t:t)},mr=i(function(e,a,t,b,n,d){return{ar:d,at:a,aF:b,aH:t,aL:e,aM:n}}),ur=d(function(e,a,t,b,n){if(ms(n)||h(Lt,"@",n))return Tn;var d=h($r,":",n);if(!d.b)return Cn(m(mr,e,n,Tn,a,t,b));if(!d.b.b){var s=d.a,i=fr(h(hr,s+1,n));if(1===i.$)return Tn;return Cn(m(mr,e,h(gr,s,n),i,a,t,b))}return Tn}),pr=n(function(e,a,t,b){if(ms(b))return Tn;var n=h($r,"/",b);if(!n.b)return g(ur,e,"/",a,t,b);var d=n.a;return g(ur,e,h(hr,d,b),a,t,h(gr,d,b))}),vr=b(function(e,a,t){if(ms(t))return Tn;var b=h($r,"?",t);if(!b.b)return r(pr,e,Tn,a,t);var n=b.a;return r(pr,e,Cn(h(hr,n+1,t)),a,h(gr,n,t))}),yr=t(function(e,a){if(ms(a))return Tn;var t=h($r,"#",a);if(!t.b)return $(vr,e,Tn,a);var b=t.a;return $(vr,e,Cn(h(hr,b+1,a)),h(gr,b,a))}),kr=function(e){return h(cr,"http://",e)?h(yr,0,h(hr,7,e)):h(cr,"https://",e)?h(yr,1,h(hr,8,e)):Tn},xr=be(ka),Ar=Vb({bn:function(){return T(Nn,wi)},bI:function(){return xr},bL:Qi,bO:function(e){return{a6:function(){var a=e.X;return a?v([h(ir,sr,e)]):ka}(),bK:"RawSvg"}}});(function(a){e.Elm?le(e.Elm,a):e.Elm=a})({Main:{init:Ar(bs(0))(0)}})})(this);-
\ No newline at end of file
+(function(scope){
+'use strict';
+
+function F(arity, fun, wrapper) {
+  wrapper.a = arity;
+  wrapper.f = fun;
+  return wrapper;
+}
+
+function F2(fun) {
+  return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
+}
+function F3(fun) {
+  return F(3, fun, function(a) {
+    return function(b) { return function(c) { return fun(a, b, c); }; };
+  });
+}
+function F4(fun) {
+  return F(4, fun, function(a) { return function(b) { return function(c) {
+    return function(d) { return fun(a, b, c, d); }; }; };
+  });
+}
+function F5(fun) {
+  return F(5, fun, function(a) { return function(b) { return function(c) {
+    return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
+  });
+}
+function F6(fun) {
+  return F(6, fun, function(a) { return function(b) { return function(c) {
+    return function(d) { return function(e) { return function(f) {
+    return fun(a, b, c, d, e, f); }; }; }; }; };
+  });
+}
+function F7(fun) {
+  return F(7, fun, function(a) { return function(b) { return function(c) {
+    return function(d) { return function(e) { return function(f) {
+    return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
+  });
+}
+function F8(fun) {
+  return F(8, fun, function(a) { return function(b) { return function(c) {
+    return function(d) { return function(e) { return function(f) {
+    return function(g) { return function(h) {
+    return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
+  });
+}
+function F9(fun) {
+  return F(9, fun, function(a) { return function(b) { return function(c) {
+    return function(d) { return function(e) { return function(f) {
+    return function(g) { return function(h) { return function(i) {
+    return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
+  });
+}
+
+function A2(fun, a, b) {
+  return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
+}
+function A3(fun, a, b, c) {
+  return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
+}
+function A4(fun, a, b, c, d) {
+  return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
+}
+function A5(fun, a, b, c, d, e) {
+  return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
+}
+function A6(fun, a, b, c, d, e, f) {
+  return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
+}
+function A7(fun, a, b, c, d, e, f, g) {
+  return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
+}
+function A8(fun, a, b, c, d, e, f, g, h) {
+  return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
+}
+function A9(fun, a, b, c, d, e, f, g, h, i) {
+  return fun.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
+}
+
+console.warn('Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.');
+
+
+var _List_Nil_UNUSED = { $: 0 };
+var _List_Nil = { $: '[]' };
+
+function _List_Cons_UNUSED(hd, tl) { return { $: 1, a: hd, b: tl }; }
+function _List_Cons(hd, tl) { return { $: '::', a: hd, b: tl }; }
+
+
+var _List_cons = F2(_List_Cons);
+
+function _List_fromArray(arr)
+{
+	var out = _List_Nil;
+	for (var i = arr.length; i--; )
+	{
+		out = _List_Cons(arr[i], out);
+	}
+	return out;
+}
+
+function _List_toArray(xs)
+{
+	for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
+	{
+		out.push(xs.a);
+	}
+	return out;
+}
+
+var _List_map2 = F3(function(f, xs, ys)
+{
+	for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
+	{
+		arr.push(A2(f, xs.a, ys.a));
+	}
+	return _List_fromArray(arr);
+});
+
+var _List_map3 = F4(function(f, xs, ys, zs)
+{
+	for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
+	{
+		arr.push(A3(f, xs.a, ys.a, zs.a));
+	}
+	return _List_fromArray(arr);
+});
+
+var _List_map4 = F5(function(f, ws, xs, ys, zs)
+{
+	for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
+	{
+		arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
+	}
+	return _List_fromArray(arr);
+});
+
+var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
+{
+	for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
+	{
+		arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
+	}
+	return _List_fromArray(arr);
+});
+
+var _List_sortBy = F2(function(f, xs)
+{
+	return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
+		return _Utils_cmp(f(a), f(b));
+	}));
+});
+
+var _List_sortWith = F2(function(f, xs)
+{
+	return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
+		var ord = A2(f, a, b);
+		return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1;
+	}));
+});
+
+
+
+var _JsArray_empty = [];
+
+function _JsArray_singleton(value)
+{
+    return [value];
+}
+
+function _JsArray_length(array)
+{
+    return array.length;
+}
+
+var _JsArray_initialize = F3(function(size, offset, func)
+{
+    var result = new Array(size);
+
+    for (var i = 0; i < size; i++)
+    {
+        result[i] = func(offset + i);
+    }
+
+    return result;
+});
+
+var _JsArray_initializeFromList = F2(function (max, ls)
+{
+    var result = new Array(max);
+
+    for (var i = 0; i < max && ls.b; i++)
+    {
+        result[i] = ls.a;
+        ls = ls.b;
+    }
+
+    result.length = i;
+    return _Utils_Tuple2(result, ls);
+});
+
+var _JsArray_unsafeGet = F2(function(index, array)
+{
+    return array[index];
+});
+
+var _JsArray_unsafeSet = F3(function(index, value, array)
+{
+    var length = array.length;
+    var result = new Array(length);
+
+    for (var i = 0; i < length; i++)
+    {
+        result[i] = array[i];
+    }
+
+    result[index] = value;
+    return result;
+});
+
+var _JsArray_push = F2(function(value, array)
+{
+    var length = array.length;
+    var result = new Array(length + 1);
+
+    for (var i = 0; i < length; i++)
+    {
+        result[i] = array[i];
+    }
+
+    result[length] = value;
+    return result;
+});
+
+var _JsArray_foldl = F3(function(func, acc, array)
+{
+    var length = array.length;
+
+    for (var i = 0; i < length; i++)
+    {
+        acc = A2(func, array[i], acc);
+    }
+
+    return acc;
+});
+
+var _JsArray_foldr = F3(function(func, acc, array)
+{
+    for (var i = array.length - 1; i >= 0; i--)
+    {
+        acc = A2(func, array[i], acc);
+    }
+
+    return acc;
+});
+
+var _JsArray_map = F2(function(func, array)
+{
+    var length = array.length;
+    var result = new Array(length);
+
+    for (var i = 0; i < length; i++)
+    {
+        result[i] = func(array[i]);
+    }
+
+    return result;
+});
+
+var _JsArray_indexedMap = F3(function(func, offset, array)
+{
+    var length = array.length;
+    var result = new Array(length);
+
+    for (var i = 0; i < length; i++)
+    {
+        result[i] = A2(func, offset + i, array[i]);
+    }
+
+    return result;
+});
+
+var _JsArray_slice = F3(function(from, to, array)
+{
+    return array.slice(from, to);
+});
+
+var _JsArray_appendN = F3(function(n, dest, source)
+{
+    var destLen = dest.length;
+    var itemsToCopy = n - destLen;
+
+    if (itemsToCopy > source.length)
+    {
+        itemsToCopy = source.length;
+    }
+
+    var size = destLen + itemsToCopy;
+    var result = new Array(size);
+
+    for (var i = 0; i < destLen; i++)
+    {
+        result[i] = dest[i];
+    }
+
+    for (var i = 0; i < itemsToCopy; i++)
+    {
+        result[i + destLen] = source[i];
+    }
+
+    return result;
+});
+
+
+
+// LOG
+
+var _Debug_log_UNUSED = F2(function(tag, value)
+{
+	return value;
+});
+
+var _Debug_log = F2(function(tag, value)
+{
+	console.log(tag + ': ' + _Debug_toString(value));
+	return value;
+});
+
+
+// TODOS
+
+function _Debug_todo(moduleName, region)
+{
+	return function(message) {
+		_Debug_crash(8, moduleName, region, message);
+	};
+}
+
+function _Debug_todoCase(moduleName, region, value)
+{
+	return function(message) {
+		_Debug_crash(9, moduleName, region, value, message);
+	};
+}
+
+
+// TO STRING
+
+function _Debug_toString_UNUSED(value)
+{
+	return '<internals>';
+}
+
+function _Debug_toString(value)
+{
+	return _Debug_toAnsiString(false, value);
+}
+
+function _Debug_toAnsiString(ansi, value)
+{
+	if (typeof value === 'function')
+	{
+		return _Debug_internalColor(ansi, '<function>');
+	}
+
+	if (typeof value === 'boolean')
+	{
+		return _Debug_ctorColor(ansi, value ? 'True' : 'False');
+	}
+
+	if (typeof value === 'number')
+	{
+		return _Debug_numberColor(ansi, value + '');
+	}
+
+	if (value instanceof String)
+	{
+		return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
+	}
+
+	if (typeof value === 'string')
+	{
+		return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
+	}
+
+	if (typeof value === 'object' && '$' in value)
+	{
+		var tag = value.$;
+
+		if (typeof tag === 'number')
+		{
+			return _Debug_internalColor(ansi, '<internals>');
+		}
+
+		if (tag[0] === '#')
+		{
+			var output = [];
+			for (var k in value)
+			{
+				if (k === '$') continue;
+				output.push(_Debug_toAnsiString(ansi, value[k]));
+			}
+			return '(' + output.join(',') + ')';
+		}
+
+		if (tag === 'Set_elm_builtin')
+		{
+			return _Debug_ctorColor(ansi, 'Set')
+				+ _Debug_fadeColor(ansi, '.fromList') + ' '
+				+ _Debug_toAnsiString(ansi, $elm$core$Set$toList(value));
+		}
+
+		if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
+		{
+			return _Debug_ctorColor(ansi, 'Dict')
+				+ _Debug_fadeColor(ansi, '.fromList') + ' '
+				+ _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value));
+		}
+
+		if (tag === 'Array_elm_builtin')
+		{
+			return _Debug_ctorColor(ansi, 'Array')
+				+ _Debug_fadeColor(ansi, '.fromList') + ' '
+				+ _Debug_toAnsiString(ansi, $elm$core$Array$toList(value));
+		}
+
+		if (tag === '::' || tag === '[]')
+		{
+			var output = '[';
+
+			value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
+
+			for (; value.b; value = value.b) // WHILE_CONS
+			{
+				output += ',' + _Debug_toAnsiString(ansi, value.a);
+			}
+			return output + ']';
+		}
+
+		var output = '';
+		for (var i in value)
+		{
+			if (i === '$') continue;
+			var str = _Debug_toAnsiString(ansi, value[i]);
+			var c0 = str[0];
+			var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
+			output += ' ' + (parenless ? str : '(' + str + ')');
+		}
+		return _Debug_ctorColor(ansi, tag) + output;
+	}
+
+	if (typeof DataView === 'function' && value instanceof DataView)
+	{
+		return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>');
+	}
+
+	if (typeof File === 'function' && value instanceof File)
+	{
+		return _Debug_internalColor(ansi, '<' + value.name + '>');
+	}
+
+	if (typeof value === 'object')
+	{
+		var output = [];
+		for (var key in value)
+		{
+			var field = key[0] === '_' ? key.slice(1) : key;
+			output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
+		}
+		if (output.length === 0)
+		{
+			return '{}';
+		}
+		return '{ ' + output.join(', ') + ' }';
+	}
+
+	return _Debug_internalColor(ansi, '<internals>');
+}
+
+function _Debug_addSlashes(str, isChar)
+{
+	var s = str
+		.replace(/\\/g, '\\\\')
+		.replace(/\n/g, '\\n')
+		.replace(/\t/g, '\\t')
+		.replace(/\r/g, '\\r')
+		.replace(/\v/g, '\\v')
+		.replace(/\0/g, '\\0');
+
+	if (isChar)
+	{
+		return s.replace(/\'/g, '\\\'');
+	}
+	else
+	{
+		return s.replace(/\"/g, '\\"');
+	}
+}
+
+function _Debug_ctorColor(ansi, string)
+{
+	return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_numberColor(ansi, string)
+{
+	return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_stringColor(ansi, string)
+{
+	return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_charColor(ansi, string)
+{
+	return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_fadeColor(ansi, string)
+{
+	return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_internalColor(ansi, string)
+{
+	return ansi ? '\x1b[94m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_toHexDigit(n)
+{
+	return String.fromCharCode(n < 10 ? 48 + n : 55 + n);
+}
+
+
+// CRASH
+
+
+function _Debug_crash_UNUSED(identifier)
+{
+	throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');
+}
+
+
+function _Debug_crash(identifier, fact1, fact2, fact3, fact4)
+{
+	switch(identifier)
+	{
+		case 0:
+			throw new Error('What node should I take over? In JavaScript I need something like:\n\n    Elm.Main.init({\n        node: document.getElementById("elm-node")\n    })\n\nYou need to do this with any Browser.sandbox or Browser.element program.');
+
+		case 1:
+			throw new Error('Browser.application programs cannot handle URLs like this:\n\n    ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.');
+
+		case 2:
+			var jsonErrorString = fact1;
+			throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString);
+
+		case 3:
+			var portName = fact1;
+			throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
+
+		case 4:
+			var portName = fact1;
+			var problem = fact2;
+			throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
+
+		case 5:
+			throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.');
+
+		case 6:
+			var moduleName = fact1;
+			throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!');
+
+		case 8:
+			var moduleName = fact1;
+			var region = fact2;
+			var message = fact3;
+			throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
+
+		case 9:
+			var moduleName = fact1;
+			var region = fact2;
+			var value = fact3;
+			var message = fact4;
+			throw new Error(
+				'TODO in module `' + moduleName + '` from the `case` expression '
+				+ _Debug_regionToString(region) + '\n\nIt received the following value:\n\n    '
+				+ _Debug_toString(value).replace('\n', '\n    ')
+				+ '\n\nBut the branch that handles it says:\n\n    ' + message.replace('\n', '\n    ')
+			);
+
+		case 10:
+			throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
+
+		case 11:
+			throw new Error('Cannot perform mod 0. Division by zero error.');
+	}
+}
+
+function _Debug_regionToString(region)
+{
+	if (region.start.line === region.end.line)
+	{
+		return 'on line ' + region.start.line;
+	}
+	return 'on lines ' + region.start.line + ' through ' + region.end.line;
+}
+
+
+
+// EQUALITY
+
+function _Utils_eq(x, y)
+{
+	for (
+		var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
+		isEqual && (pair = stack.pop());
+		isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
+		)
+	{}
+
+	return isEqual;
+}
+
+function _Utils_eqHelp(x, y, depth, stack)
+{
+	if (depth > 100)
+	{
+		stack.push(_Utils_Tuple2(x,y));
+		return true;
+	}
+
+	if (x === y)
+	{
+		return true;
+	}
+
+	if (typeof x !== 'object' || x === null || y === null)
+	{
+		typeof x === 'function' && _Debug_crash(5);
+		return false;
+	}
+
+	/**/
+	if (x.$ === 'Set_elm_builtin')
+	{
+		x = $elm$core$Set$toList(x);
+		y = $elm$core$Set$toList(y);
+	}
+	if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
+	{
+		x = $elm$core$Dict$toList(x);
+		y = $elm$core$Dict$toList(y);
+	}
+	//*/
+
+	/**_UNUSED/
+	if (x.$ < 0)
+	{
+		x = $elm$core$Dict$toList(x);
+		y = $elm$core$Dict$toList(y);
+	}
+	//*/
+
+	for (var key in x)
+	{
+		if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
+		{
+			return false;
+		}
+	}
+	return true;
+}
+
+var _Utils_equal = F2(_Utils_eq);
+var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
+
+
+
+// COMPARISONS
+
+// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
+// the particular integer values assigned to LT, EQ, and GT.
+
+function _Utils_cmp(x, y, ord)
+{
+	if (typeof x !== 'object')
+	{
+		return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
+	}
+
+	/**/
+	if (x instanceof String)
+	{
+		var a = x.valueOf();
+		var b = y.valueOf();
+		return a === b ? 0 : a < b ? -1 : 1;
+	}
+	//*/
+
+	/**_UNUSED/
+	if (typeof x.$ === 'undefined')
+	//*/
+	/**/
+	if (x.$[0] === '#')
+	//*/
+	{
+		return (ord = _Utils_cmp(x.a, y.a))
+			? ord
+			: (ord = _Utils_cmp(x.b, y.b))
+				? ord
+				: _Utils_cmp(x.c, y.c);
+	}
+
+	// traverse conses until end of a list or a mismatch
+	for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
+	return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
+}
+
+var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
+var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
+var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
+var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
+
+var _Utils_compare = F2(function(x, y)
+{
+	var n = _Utils_cmp(x, y);
+	return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ;
+});
+
+
+// COMMON VALUES
+
+var _Utils_Tuple0_UNUSED = 0;
+var _Utils_Tuple0 = { $: '#0' };
+
+function _Utils_Tuple2_UNUSED(a, b) { return { a: a, b: b }; }
+function _Utils_Tuple2(a, b) { return { $: '#2', a: a, b: b }; }
+
+function _Utils_Tuple3_UNUSED(a, b, c) { return { a: a, b: b, c: c }; }
+function _Utils_Tuple3(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
+
+function _Utils_chr_UNUSED(c) { return c; }
+function _Utils_chr(c) { return new String(c); }
+
+
+// RECORDS
+
+function _Utils_update(oldRecord, updatedFields)
+{
+	var newRecord = {};
+
+	for (var key in oldRecord)
+	{
+		newRecord[key] = oldRecord[key];
+	}
+
+	for (var key in updatedFields)
+	{
+		newRecord[key] = updatedFields[key];
+	}
+
+	return newRecord;
+}
+
+
+// APPEND
+
+var _Utils_append = F2(_Utils_ap);
+
+function _Utils_ap(xs, ys)
+{
+	// append Strings
+	if (typeof xs === 'string')
+	{
+		return xs + ys;
+	}
+
+	// append Lists
+	if (!xs.b)
+	{
+		return ys;
+	}
+	var root = _List_Cons(xs.a, ys);
+	xs = xs.b
+	for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
+	{
+		curr = curr.b = _List_Cons(xs.a, ys);
+	}
+	return root;
+}
+
+
+
+// MATH
+
+var _Basics_add = F2(function(a, b) { return a + b; });
+var _Basics_sub = F2(function(a, b) { return a - b; });
+var _Basics_mul = F2(function(a, b) { return a * b; });
+var _Basics_fdiv = F2(function(a, b) { return a / b; });
+var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
+var _Basics_pow = F2(Math.pow);
+
+var _Basics_remainderBy = F2(function(b, a) { return a % b; });
+
+// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
+var _Basics_modBy = F2(function(modulus, x)
+{
+	var answer = x % modulus;
+	return modulus === 0
+		? _Debug_crash(11)
+		:
+	((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
+		? answer + modulus
+		: answer;
+});
+
+
+// TRIGONOMETRY
+
+var _Basics_pi = Math.PI;
+var _Basics_e = Math.E;
+var _Basics_cos = Math.cos;
+var _Basics_sin = Math.sin;
+var _Basics_tan = Math.tan;
+var _Basics_acos = Math.acos;
+var _Basics_asin = Math.asin;
+var _Basics_atan = Math.atan;
+var _Basics_atan2 = F2(Math.atan2);
+
+
+// MORE MATH
+
+function _Basics_toFloat(x) { return x; }
+function _Basics_truncate(n) { return n | 0; }
+function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
+
+var _Basics_ceiling = Math.ceil;
+var _Basics_floor = Math.floor;
+var _Basics_round = Math.round;
+var _Basics_sqrt = Math.sqrt;
+var _Basics_log = Math.log;
+var _Basics_isNaN = isNaN;
+
+
+// BOOLEANS
+
+function _Basics_not(bool) { return !bool; }
+var _Basics_and = F2(function(a, b) { return a && b; });
+var _Basics_or  = F2(function(a, b) { return a || b; });
+var _Basics_xor = F2(function(a, b) { return a !== b; });
+
+
+
+var _String_cons = F2(function(chr, str)
+{
+	return chr + str;
+});
+
+function _String_uncons(string)
+{
+	var word = string.charCodeAt(0);
+	return word
+		? $elm$core$Maybe$Just(
+			0xD800 <= word && word <= 0xDBFF
+				? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2))
+				: _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1))
+		)
+		: $elm$core$Maybe$Nothing;
+}
+
+var _String_append = F2(function(a, b)
+{
+	return a + b;
+});
+
+function _String_length(str)
+{
+	return str.length;
+}
+
+var _String_map = F2(function(func, string)
+{
+	var len = string.length;
+	var array = new Array(len);
+	var i = 0;
+	while (i < len)
+	{
+		var word = string.charCodeAt(i);
+		if (0xD800 <= word && word <= 0xDBFF)
+		{
+			array[i] = func(_Utils_chr(string[i] + string[i+1]));
+			i += 2;
+			continue;
+		}
+		array[i] = func(_Utils_chr(string[i]));
+		i++;
+	}
+	return array.join('');
+});
+
+var _String_filter = F2(function(isGood, str)
+{
+	var arr = [];
+	var len = str.length;
+	var i = 0;
+	while (i < len)
+	{
+		var char = str[i];
+		var word = str.charCodeAt(i);
+		i++;
+		if (0xD800 <= word && word <= 0xDBFF)
+		{
+			char += str[i];
+			i++;
+		}
+
+		if (isGood(_Utils_chr(char)))
+		{
+			arr.push(char);
+		}
+	}
+	return arr.join('');
+});
+
+function _String_reverse(str)
+{
+	var len = str.length;
+	var arr = new Array(len);
+	var i = 0;
+	while (i < len)
+	{
+		var word = str.charCodeAt(i);
+		if (0xD800 <= word && word <= 0xDBFF)
+		{
+			arr[len - i] = str[i + 1];
+			i++;
+			arr[len - i] = str[i - 1];
+			i++;
+		}
+		else
+		{
+			arr[len - i] = str[i];
+			i++;
+		}
+	}
+	return arr.join('');
+}
+
+var _String_foldl = F3(function(func, state, string)
+{
+	var len = string.length;
+	var i = 0;
+	while (i < len)
+	{
+		var char = string[i];
+		var word = string.charCodeAt(i);
+		i++;
+		if (0xD800 <= word && word <= 0xDBFF)
+		{
+			char += string[i];
+			i++;
+		}
+		state = A2(func, _Utils_chr(char), state);
+	}
+	return state;
+});
+
+var _String_foldr = F3(function(func, state, string)
+{
+	var i = string.length;
+	while (i--)
+	{
+		var char = string[i];
+		var word = string.charCodeAt(i);
+		if (0xDC00 <= word && word <= 0xDFFF)
+		{
+			i--;
+			char = string[i] + char;
+		}
+		state = A2(func, _Utils_chr(char), state);
+	}
+	return state;
+});
+
+var _String_split = F2(function(sep, str)
+{
+	return str.split(sep);
+});
+
+var _String_join = F2(function(sep, strs)
+{
+	return strs.join(sep);
+});
+
+var _String_slice = F3(function(start, end, str) {
+	return str.slice(start, end);
+});
+
+function _String_trim(str)
+{
+	return str.trim();
+}
+
+function _String_trimLeft(str)
+{
+	return str.replace(/^\s+/, '');
+}
+
+function _String_trimRight(str)
+{
+	return str.replace(/\s+$/, '');
+}
+
+function _String_words(str)
+{
+	return _List_fromArray(str.trim().split(/\s+/g));
+}
+
+function _String_lines(str)
+{
+	return _List_fromArray(str.split(/\r\n|\r|\n/g));
+}
+
+function _String_toUpper(str)
+{
+	return str.toUpperCase();
+}
+
+function _String_toLower(str)
+{
+	return str.toLowerCase();
+}
+
+var _String_any = F2(function(isGood, string)
+{
+	var i = string.length;
+	while (i--)
+	{
+		var char = string[i];
+		var word = string.charCodeAt(i);
+		if (0xDC00 <= word && word <= 0xDFFF)
+		{
+			i--;
+			char = string[i] + char;
+		}
+		if (isGood(_Utils_chr(char)))
+		{
+			return true;
+		}
+	}
+	return false;
+});
+
+var _String_all = F2(function(isGood, string)
+{
+	var i = string.length;
+	while (i--)
+	{
+		var char = string[i];
+		var word = string.charCodeAt(i);
+		if (0xDC00 <= word && word <= 0xDFFF)
+		{
+			i--;
+			char = string[i] + char;
+		}
+		if (!isGood(_Utils_chr(char)))
+		{
+			return false;
+		}
+	}
+	return true;
+});
+
+var _String_contains = F2(function(sub, str)
+{
+	return str.indexOf(sub) > -1;
+});
+
+var _String_startsWith = F2(function(sub, str)
+{
+	return str.indexOf(sub) === 0;
+});
+
+var _String_endsWith = F2(function(sub, str)
+{
+	return str.length >= sub.length &&
+		str.lastIndexOf(sub) === str.length - sub.length;
+});
+
+var _String_indexes = F2(function(sub, str)
+{
+	var subLen = sub.length;
+
+	if (subLen < 1)
+	{
+		return _List_Nil;
+	}
+
+	var i = 0;
+	var is = [];
+
+	while ((i = str.indexOf(sub, i)) > -1)
+	{
+		is.push(i);
+		i = i + subLen;
+	}
+
+	return _List_fromArray(is);
+});
+
+
+// TO STRING
+
+function _String_fromNumber(number)
+{
+	return number + '';
+}
+
+
+// INT CONVERSIONS
+
+function _String_toInt(str)
+{
+	var total = 0;
+	var code0 = str.charCodeAt(0);
+	var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;
+
+	for (var i = start; i < str.length; ++i)
+	{
+		var code = str.charCodeAt(i);
+		if (code < 0x30 || 0x39 < code)
+		{
+			return $elm$core$Maybe$Nothing;
+		}
+		total = 10 * total + code - 0x30;
+	}
+
+	return i == start
+		? $elm$core$Maybe$Nothing
+		: $elm$core$Maybe$Just(code0 == 0x2D ? -total : total);
+}
+
+
+// FLOAT CONVERSIONS
+
+function _String_toFloat(s)
+{
+	// check if it is a hex, octal, or binary number
+	if (s.length === 0 || /[\sxbo]/.test(s))
+	{
+		return $elm$core$Maybe$Nothing;
+	}
+	var n = +s;
+	// faster isNaN check
+	return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing;
+}
+
+function _String_fromList(chars)
+{
+	return _List_toArray(chars).join('');
+}
+
+
+
+
+function _Char_toCode(char)
+{
+	var code = char.charCodeAt(0);
+	if (0xD800 <= code && code <= 0xDBFF)
+	{
+		return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000
+	}
+	return code;
+}
+
+function _Char_fromCode(code)
+{
+	return _Utils_chr(
+		(code < 0 || 0x10FFFF < code)
+			? '\uFFFD'
+			:
+		(code <= 0xFFFF)
+			? String.fromCharCode(code)
+			:
+		(code -= 0x10000,
+			String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00)
+		)
+	);
+}
+
+function _Char_toUpper(char)
+{
+	return _Utils_chr(char.toUpperCase());
+}
+
+function _Char_toLower(char)
+{
+	return _Utils_chr(char.toLowerCase());
+}
+
+function _Char_toLocaleUpper(char)
+{
+	return _Utils_chr(char.toLocaleUpperCase());
+}
+
+function _Char_toLocaleLower(char)
+{
+	return _Utils_chr(char.toLocaleLowerCase());
+}
+
+
+
+/**/
+function _Json_errorToString(error)
+{
+	return $elm$json$Json$Decode$errorToString(error);
+}
+//*/
+
+
+// CORE DECODERS
+
+function _Json_succeed(msg)
+{
+	return {
+		$: 0,
+		a: msg
+	};
+}
+
+function _Json_fail(msg)
+{
+	return {
+		$: 1,
+		a: msg
+	};
+}
+
+function _Json_decodePrim(decoder)
+{
+	return { $: 2, b: decoder };
+}
+
+var _Json_decodeInt = _Json_decodePrim(function(value) {
+	return (typeof value !== 'number')
+		? _Json_expecting('an INT', value)
+		:
+	(-2147483647 < value && value < 2147483647 && (value | 0) === value)
+		? $elm$core$Result$Ok(value)
+		:
+	(isFinite(value) && !(value % 1))
+		? $elm$core$Result$Ok(value)
+		: _Json_expecting('an INT', value);
+});
+
+var _Json_decodeBool = _Json_decodePrim(function(value) {
+	return (typeof value === 'boolean')
+		? $elm$core$Result$Ok(value)
+		: _Json_expecting('a BOOL', value);
+});
+
+var _Json_decodeFloat = _Json_decodePrim(function(value) {
+	return (typeof value === 'number')
+		? $elm$core$Result$Ok(value)
+		: _Json_expecting('a FLOAT', value);
+});
+
+var _Json_decodeValue = _Json_decodePrim(function(value) {
+	return $elm$core$Result$Ok(_Json_wrap(value));
+});
+
+var _Json_decodeString = _Json_decodePrim(function(value) {
+	return (typeof value === 'string')
+		? $elm$core$Result$Ok(value)
+		: (value instanceof String)
+			? $elm$core$Result$Ok(value + '')
+			: _Json_expecting('a STRING', value);
+});
+
+function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }
+function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }
+
+function _Json_decodeNull(value) { return { $: 5, c: value }; }
+
+var _Json_decodeField = F2(function(field, decoder)
+{
+	return {
+		$: 6,
+		d: field,
+		b: decoder
+	};
+});
+
+var _Json_decodeIndex = F2(function(index, decoder)
+{
+	return {
+		$: 7,
+		e: index,
+		b: decoder
+	};
+});
+
+function _Json_decodeKeyValuePairs(decoder)
+{
+	return {
+		$: 8,
+		b: decoder
+	};
+}
+
+function _Json_mapMany(f, decoders)
+{
+	return {
+		$: 9,
+		f: f,
+		g: decoders
+	};
+}
+
+var _Json_andThen = F2(function(callback, decoder)
+{
+	return {
+		$: 10,
+		b: decoder,
+		h: callback
+	};
+});
+
+function _Json_oneOf(decoders)
+{
+	return {
+		$: 11,
+		g: decoders
+	};
+}
+
+
+// DECODING OBJECTS
+
+var _Json_map1 = F2(function(f, d1)
+{
+	return _Json_mapMany(f, [d1]);
+});
+
+var _Json_map2 = F3(function(f, d1, d2)
+{
+	return _Json_mapMany(f, [d1, d2]);
+});
+
+var _Json_map3 = F4(function(f, d1, d2, d3)
+{
+	return _Json_mapMany(f, [d1, d2, d3]);
+});
+
+var _Json_map4 = F5(function(f, d1, d2, d3, d4)
+{
+	return _Json_mapMany(f, [d1, d2, d3, d4]);
+});
+
+var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
+{
+	return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
+});
+
+var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
+{
+	return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
+});
+
+var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
+{
+	return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
+});
+
+var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
+{
+	return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
+});
+
+
+// DECODE
+
+var _Json_runOnString = F2(function(decoder, string)
+{
+	try
+	{
+		var value = JSON.parse(string);
+		return _Json_runHelp(decoder, value);
+	}
+	catch (e)
+	{
+		return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
+	}
+});
+
+var _Json_run = F2(function(decoder, value)
+{
+	return _Json_runHelp(decoder, _Json_unwrap(value));
+});
+
+function _Json_runHelp(decoder, value)
+{
+	switch (decoder.$)
+	{
+		case 2:
+			return decoder.b(value);
+
+		case 5:
+			return (value === null)
+				? $elm$core$Result$Ok(decoder.c)
+				: _Json_expecting('null', value);
+
+		case 3:
+			if (!_Json_isArray(value))
+			{
+				return _Json_expecting('a LIST', value);
+			}
+			return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
+
+		case 4:
+			if (!_Json_isArray(value))
+			{
+				return _Json_expecting('an ARRAY', value);
+			}
+			return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
+
+		case 6:
+			var field = decoder.d;
+			if (typeof value !== 'object' || value === null || !(field in value))
+			{
+				return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
+			}
+			var result = _Json_runHelp(decoder.b, value[field]);
+			return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a));
+
+		case 7:
+			var index = decoder.e;
+			if (!_Json_isArray(value))
+			{
+				return _Json_expecting('an ARRAY', value);
+			}
+			if (index >= value.length)
+			{
+				return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
+			}
+			var result = _Json_runHelp(decoder.b, value[index]);
+			return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a));
+
+		case 8:
+			if (typeof value !== 'object' || value === null || _Json_isArray(value))
+			{
+				return _Json_expecting('an OBJECT', value);
+			}
+
+			var keyValuePairs = _List_Nil;
+			// TODO test perf of Object.keys and switch when support is good enough
+			for (var key in value)
+			{
+				if (value.hasOwnProperty(key))
+				{
+					var result = _Json_runHelp(decoder.b, value[key]);
+					if (!$elm$core$Result$isOk(result))
+					{
+						return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a));
+					}
+					keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
+				}
+			}
+			return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs));
+
+		case 9:
+			var answer = decoder.f;
+			var decoders = decoder.g;
+			for (var i = 0; i < decoders.length; i++)
+			{
+				var result = _Json_runHelp(decoders[i], value);
+				if (!$elm$core$Result$isOk(result))
+				{
+					return result;
+				}
+				answer = answer(result.a);
+			}
+			return $elm$core$Result$Ok(answer);
+
+		case 10:
+			var result = _Json_runHelp(decoder.b, value);
+			return (!$elm$core$Result$isOk(result))
+				? result
+				: _Json_runHelp(decoder.h(result.a), value);
+
+		case 11:
+			var errors = _List_Nil;
+			for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
+			{
+				var result = _Json_runHelp(temp.a, value);
+				if ($elm$core$Result$isOk(result))
+				{
+					return result;
+				}
+				errors = _List_Cons(result.a, errors);
+			}
+			return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors)));
+
+		case 1:
+			return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
+
+		case 0:
+			return $elm$core$Result$Ok(decoder.a);
+	}
+}
+
+function _Json_runArrayDecoder(decoder, value, toElmValue)
+{
+	var len = value.length;
+	var array = new Array(len);
+	for (var i = 0; i < len; i++)
+	{
+		var result = _Json_runHelp(decoder, value[i]);
+		if (!$elm$core$Result$isOk(result))
+		{
+			return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a));
+		}
+		array[i] = result.a;
+	}
+	return $elm$core$Result$Ok(toElmValue(array));
+}
+
+function _Json_isArray(value)
+{
+	return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList);
+}
+
+function _Json_toElmArray(array)
+{
+	return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; });
+}
+
+function _Json_expecting(type, value)
+{
+	return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
+}
+
+
+// EQUALITY
+
+function _Json_equality(x, y)
+{
+	if (x === y)
+	{
+		return true;
+	}
+
+	if (x.$ !== y.$)
+	{
+		return false;
+	}
+
+	switch (x.$)
+	{
+		case 0:
+		case 1:
+			return x.a === y.a;
+
+		case 2:
+			return x.b === y.b;
+
+		case 5:
+			return x.c === y.c;
+
+		case 3:
+		case 4:
+		case 8:
+			return _Json_equality(x.b, y.b);
+
+		case 6:
+			return x.d === y.d && _Json_equality(x.b, y.b);
+
+		case 7:
+			return x.e === y.e && _Json_equality(x.b, y.b);
+
+		case 9:
+			return x.f === y.f && _Json_listEquality(x.g, y.g);
+
+		case 10:
+			return x.h === y.h && _Json_equality(x.b, y.b);
+
+		case 11:
+			return _Json_listEquality(x.g, y.g);
+	}
+}
+
+function _Json_listEquality(aDecoders, bDecoders)
+{
+	var len = aDecoders.length;
+	if (len !== bDecoders.length)
+	{
+		return false;
+	}
+	for (var i = 0; i < len; i++)
+	{
+		if (!_Json_equality(aDecoders[i], bDecoders[i]))
+		{
+			return false;
+		}
+	}
+	return true;
+}
+
+
+// ENCODE
+
+var _Json_encode = F2(function(indentLevel, value)
+{
+	return JSON.stringify(_Json_unwrap(value), null, indentLevel) + '';
+});
+
+function _Json_wrap(value) { return { $: 0, a: value }; }
+function _Json_unwrap(value) { return value.a; }
+
+function _Json_wrap_UNUSED(value) { return value; }
+function _Json_unwrap_UNUSED(value) { return value; }
+
+function _Json_emptyArray() { return []; }
+function _Json_emptyObject() { return {}; }
+
+var _Json_addField = F3(function(key, value, object)
+{
+	object[key] = _Json_unwrap(value);
+	return object;
+});
+
+function _Json_addEntry(func)
+{
+	return F2(function(entry, array)
+	{
+		array.push(_Json_unwrap(func(entry)));
+		return array;
+	});
+}
+
+var _Json_encodeNull = _Json_wrap(null);
+
+
+
+// TASKS
+
+function _Scheduler_succeed(value)
+{
+	return {
+		$: 0,
+		a: value
+	};
+}
+
+function _Scheduler_fail(error)
+{
+	return {
+		$: 1,
+		a: error
+	};
+}
+
+function _Scheduler_binding(callback)
+{
+	return {
+		$: 2,
+		b: callback,
+		c: null
+	};
+}
+
+var _Scheduler_andThen = F2(function(callback, task)
+{
+	return {
+		$: 3,
+		b: callback,
+		d: task
+	};
+});
+
+var _Scheduler_onError = F2(function(callback, task)
+{
+	return {
+		$: 4,
+		b: callback,
+		d: task
+	};
+});
+
+function _Scheduler_receive(callback)
+{
+	return {
+		$: 5,
+		b: callback
+	};
+}
+
+
+// PROCESSES
+
+var _Scheduler_guid = 0;
+
+function _Scheduler_rawSpawn(task)
+{
+	var proc = {
+		$: 0,
+		e: _Scheduler_guid++,
+		f: task,
+		g: null,
+		h: []
+	};
+
+	_Scheduler_enqueue(proc);
+
+	return proc;
+}
+
+function _Scheduler_spawn(task)
+{
+	return _Scheduler_binding(function(callback) {
+		callback(_Scheduler_succeed(_Scheduler_rawSpawn(task)));
+	});
+}
+
+function _Scheduler_rawSend(proc, msg)
+{
+	proc.h.push(msg);
+	_Scheduler_enqueue(proc);
+}
+
+var _Scheduler_send = F2(function(proc, msg)
+{
+	return _Scheduler_binding(function(callback) {
+		_Scheduler_rawSend(proc, msg);
+		callback(_Scheduler_succeed(_Utils_Tuple0));
+	});
+});
+
+function _Scheduler_kill(proc)
+{
+	return _Scheduler_binding(function(callback) {
+		var task = proc.f;
+		if (task.$ === 2 && task.c)
+		{
+			task.c();
+		}
+
+		proc.f = null;
+
+		callback(_Scheduler_succeed(_Utils_Tuple0));
+	});
+}
+
+
+/* STEP PROCESSES
+
+type alias Process =
+  { $ : tag
+  , id : unique_id
+  , root : Task
+  , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack }
+  , mailbox : [msg]
+  }
+
+*/
+
+
+var _Scheduler_working = false;
+var _Scheduler_queue = [];
+
+
+function _Scheduler_enqueue(proc)
+{
+	_Scheduler_queue.push(proc);
+	if (_Scheduler_working)
+	{
+		return;
+	}
+	_Scheduler_working = true;
+	while (proc = _Scheduler_queue.shift())
+	{
+		_Scheduler_step(proc);
+	}
+	_Scheduler_working = false;
+}
+
+
+function _Scheduler_step(proc)
+{
+	while (proc.f)
+	{
+		var rootTag = proc.f.$;
+		if (rootTag === 0 || rootTag === 1)
+		{
+			while (proc.g && proc.g.$ !== rootTag)
+			{
+				proc.g = proc.g.i;
+			}
+			if (!proc.g)
+			{
+				return;
+			}
+			proc.f = proc.g.b(proc.f.a);
+			proc.g = proc.g.i;
+		}
+		else if (rootTag === 2)
+		{
+			proc.f.c = proc.f.b(function(newRoot) {
+				proc.f = newRoot;
+				_Scheduler_enqueue(proc);
+			});
+			return;
+		}
+		else if (rootTag === 5)
+		{
+			if (proc.h.length === 0)
+			{
+				return;
+			}
+			proc.f = proc.f.b(proc.h.shift());
+		}
+		else // if (rootTag === 3 || rootTag === 4)
+		{
+			proc.g = {
+				$: rootTag === 3 ? 0 : 1,
+				b: proc.f.b,
+				i: proc.g
+			};
+			proc.f = proc.f.d;
+		}
+	}
+}
+
+
+
+function _Process_sleep(time)
+{
+	return _Scheduler_binding(function(callback) {
+		var id = setTimeout(function() {
+			callback(_Scheduler_succeed(_Utils_Tuple0));
+		}, time);
+
+		return function() { clearTimeout(id); };
+	});
+}
+
+
+
+
+// PROGRAMS
+
+
+var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args)
+{
+	return _Platform_initialize(
+		flagDecoder,
+		args,
+		impl.init,
+		impl.update,
+		impl.subscriptions,
+		function() { return function() {} }
+	);
+});
+
+
+
+// INITIALIZE A PROGRAM
+
+
+function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder)
+{
+	var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined));
+	$elm$core$Result$isOk(result) || _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/);
+	var managers = {};
+	result = init(result.a);
+	var model = result.a;
+	var stepper = stepperBuilder(sendToApp, model);
+	var ports = _Platform_setupEffects(managers, sendToApp);
+
+	function sendToApp(msg, viewMetadata)
+	{
+		result = A2(update, msg, model);
+		stepper(model = result.a, viewMetadata);
+		_Platform_dispatchEffects(managers, result.b, subscriptions(model));
+	}
+
+	_Platform_dispatchEffects(managers, result.b, subscriptions(model));
+
+	return ports ? { ports: ports } : {};
+}
+
+
+
+// TRACK PRELOADS
+//
+// This is used by code in elm/browser and elm/http
+// to register any HTTP requests that are triggered by init.
+//
+
+
+var _Platform_preload;
+
+
+function _Platform_registerPreload(url)
+{
+	_Platform_preload.add(url);
+}
+
+
+
+// EFFECT MANAGERS
+
+
+var _Platform_effectManagers = {};
+
+
+function _Platform_setupEffects(managers, sendToApp)
+{
+	var ports;
+
+	// setup all necessary effect managers
+	for (var key in _Platform_effectManagers)
+	{
+		var manager = _Platform_effectManagers[key];
+
+		if (manager.a)
+		{
+			ports = ports || {};
+			ports[key] = manager.a(key, sendToApp);
+		}
+
+		managers[key] = _Platform_instantiateManager(manager, sendToApp);
+	}
+
+	return ports;
+}
+
+
+function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap)
+{
+	return {
+		b: init,
+		c: onEffects,
+		d: onSelfMsg,
+		e: cmdMap,
+		f: subMap
+	};
+}
+
+
+function _Platform_instantiateManager(info, sendToApp)
+{
+	var router = {
+		g: sendToApp,
+		h: undefined
+	};
+
+	var onEffects = info.c;
+	var onSelfMsg = info.d;
+	var cmdMap = info.e;
+	var subMap = info.f;
+
+	function loop(state)
+	{
+		return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg)
+		{
+			var value = msg.a;
+
+			if (msg.$ === 0)
+			{
+				return A3(onSelfMsg, router, value, state);
+			}
+
+			return cmdMap && subMap
+				? A4(onEffects, router, value.i, value.j, state)
+				: A3(onEffects, router, cmdMap ? value.i : value.j, state);
+		}));
+	}
+
+	return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));
+}
+
+
+
+// ROUTING
+
+
+var _Platform_sendToApp = F2(function(router, msg)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		router.g(msg);
+		callback(_Scheduler_succeed(_Utils_Tuple0));
+	});
+});
+
+
+var _Platform_sendToSelf = F2(function(router, msg)
+{
+	return A2(_Scheduler_send, router.h, {
+		$: 0,
+		a: msg
+	});
+});
+
+
+
+// BAGS
+
+
+function _Platform_leaf(home)
+{
+	return function(value)
+	{
+		return {
+			$: 1,
+			k: home,
+			l: value
+		};
+	};
+}
+
+
+function _Platform_batch(list)
+{
+	return {
+		$: 2,
+		m: list
+	};
+}
+
+
+var _Platform_map = F2(function(tagger, bag)
+{
+	return {
+		$: 3,
+		n: tagger,
+		o: bag
+	}
+});
+
+
+
+// PIPE BAGS INTO EFFECT MANAGERS
+
+
+function _Platform_dispatchEffects(managers, cmdBag, subBag)
+{
+	var effectsDict = {};
+	_Platform_gatherEffects(true, cmdBag, effectsDict, null);
+	_Platform_gatherEffects(false, subBag, effectsDict, null);
+
+	for (var home in managers)
+	{
+		_Scheduler_rawSend(managers[home], {
+			$: 'fx',
+			a: effectsDict[home] || { i: _List_Nil, j: _List_Nil }
+		});
+	}
+}
+
+
+function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
+{
+	switch (bag.$)
+	{
+		case 1:
+			var home = bag.k;
+			var effect = _Platform_toEffect(isCmd, home, taggers, bag.l);
+			effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]);
+			return;
+
+		case 2:
+			for (var list = bag.m; list.b; list = list.b) // WHILE_CONS
+			{
+				_Platform_gatherEffects(isCmd, list.a, effectsDict, taggers);
+			}
+			return;
+
+		case 3:
+			_Platform_gatherEffects(isCmd, bag.o, effectsDict, {
+				p: bag.n,
+				q: taggers
+			});
+			return;
+	}
+}
+
+
+function _Platform_toEffect(isCmd, home, taggers, value)
+{
+	function applyTaggers(x)
+	{
+		for (var temp = taggers; temp; temp = temp.q)
+		{
+			x = temp.p(x);
+		}
+		return x;
+	}
+
+	var map = isCmd
+		? _Platform_effectManagers[home].e
+		: _Platform_effectManagers[home].f;
+
+	return A2(map, applyTaggers, value)
+}
+
+
+function _Platform_insert(isCmd, newEffect, effects)
+{
+	effects = effects || { i: _List_Nil, j: _List_Nil };
+
+	isCmd
+		? (effects.i = _List_Cons(newEffect, effects.i))
+		: (effects.j = _List_Cons(newEffect, effects.j));
+
+	return effects;
+}
+
+
+
+// PORTS
+
+
+function _Platform_checkPortName(name)
+{
+	if (_Platform_effectManagers[name])
+	{
+		_Debug_crash(3, name)
+	}
+}
+
+
+
+// OUTGOING PORTS
+
+
+function _Platform_outgoingPort(name, converter)
+{
+	_Platform_checkPortName(name);
+	_Platform_effectManagers[name] = {
+		e: _Platform_outgoingPortMap,
+		r: converter,
+		a: _Platform_setupOutgoingPort
+	};
+	return _Platform_leaf(name);
+}
+
+
+var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });
+
+
+function _Platform_setupOutgoingPort(name)
+{
+	var subs = [];
+	var converter = _Platform_effectManagers[name].r;
+
+	// CREATE MANAGER
+
+	var init = _Process_sleep(0);
+
+	_Platform_effectManagers[name].b = init;
+	_Platform_effectManagers[name].c = F3(function(router, cmdList, state)
+	{
+		for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS
+		{
+			// grab a separate reference to subs in case unsubscribe is called
+			var currentSubs = subs;
+			var value = _Json_unwrap(converter(cmdList.a));
+			for (var i = 0; i < currentSubs.length; i++)
+			{
+				currentSubs[i](value);
+			}
+		}
+		return init;
+	});
+
+	// PUBLIC API
+
+	function subscribe(callback)
+	{
+		subs.push(callback);
+	}
+
+	function unsubscribe(callback)
+	{
+		// copy subs into a new array in case unsubscribe is called within a
+		// subscribed callback
+		subs = subs.slice();
+		var index = subs.indexOf(callback);
+		if (index >= 0)
+		{
+			subs.splice(index, 1);
+		}
+	}
+
+	return {
+		subscribe: subscribe,
+		unsubscribe: unsubscribe
+	};
+}
+
+
+
+// INCOMING PORTS
+
+
+function _Platform_incomingPort(name, converter)
+{
+	_Platform_checkPortName(name);
+	_Platform_effectManagers[name] = {
+		f: _Platform_incomingPortMap,
+		r: converter,
+		a: _Platform_setupIncomingPort
+	};
+	return _Platform_leaf(name);
+}
+
+
+var _Platform_incomingPortMap = F2(function(tagger, finalTagger)
+{
+	return function(value)
+	{
+		return tagger(finalTagger(value));
+	};
+});
+
+
+function _Platform_setupIncomingPort(name, sendToApp)
+{
+	var subs = _List_Nil;
+	var converter = _Platform_effectManagers[name].r;
+
+	// CREATE MANAGER
+
+	var init = _Scheduler_succeed(null);
+
+	_Platform_effectManagers[name].b = init;
+	_Platform_effectManagers[name].c = F3(function(router, subList, state)
+	{
+		subs = subList;
+		return init;
+	});
+
+	// PUBLIC API
+
+	function send(incomingValue)
+	{
+		var result = A2(_Json_run, converter, _Json_wrap(incomingValue));
+
+		$elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);
+
+		var value = result.a;
+		for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS
+		{
+			sendToApp(temp.a(value));
+		}
+	}
+
+	return { send: send };
+}
+
+
+
+// EXPORT ELM MODULES
+//
+// Have DEBUG and PROD versions so that we can (1) give nicer errors in
+// debug mode and (2) not pay for the bits needed for that in prod mode.
+//
+
+
+function _Platform_export_UNUSED(exports)
+{
+	scope['Elm']
+		? _Platform_mergeExportsProd(scope['Elm'], exports)
+		: scope['Elm'] = exports;
+}
+
+
+function _Platform_mergeExportsProd(obj, exports)
+{
+	for (var name in exports)
+	{
+		(name in obj)
+			? (name == 'init')
+				? _Debug_crash(6)
+				: _Platform_mergeExportsProd(obj[name], exports[name])
+			: (obj[name] = exports[name]);
+	}
+}
+
+
+function _Platform_export(exports)
+{
+	scope['Elm']
+		? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports)
+		: scope['Elm'] = exports;
+}
+
+
+function _Platform_mergeExportsDebug(moduleName, obj, exports)
+{
+	for (var name in exports)
+	{
+		(name in obj)
+			? (name == 'init')
+				? _Debug_crash(6, moduleName)
+				: _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name])
+			: (obj[name] = exports[name]);
+	}
+}
+
+
+
+
+// HELPERS
+
+
+var _VirtualDom_divertHrefToApp;
+
+var _VirtualDom_doc = typeof document !== 'undefined' ? document : {};
+
+
+function _VirtualDom_appendChild(parent, child)
+{
+	parent.appendChild(child);
+}
+
+var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args)
+{
+	// NOTE: this function needs _Platform_export available to work
+
+	/**_UNUSED/
+	var node = args['node'];
+	//*/
+	/**/
+	var node = args && args['node'] ? args['node'] : _Debug_crash(0);
+	//*/
+
+	node.parentNode.replaceChild(
+		_VirtualDom_render(virtualNode, function() {}),
+		node
+	);
+
+	return {};
+});
+
+
+
+// TEXT
+
+
+function _VirtualDom_text(string)
+{
+	return {
+		$: 0,
+		a: string
+	};
+}
+
+
+
+// NODE
+
+
+var _VirtualDom_nodeNS = F2(function(namespace, tag)
+{
+	return F2(function(factList, kidList)
+	{
+		for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
+		{
+			var kid = kidList.a;
+			descendantsCount += (kid.b || 0);
+			kids.push(kid);
+		}
+		descendantsCount += kids.length;
+
+		return {
+			$: 1,
+			c: tag,
+			d: _VirtualDom_organizeFacts(factList),
+			e: kids,
+			f: namespace,
+			b: descendantsCount
+		};
+	});
+});
+
+
+var _VirtualDom_node = _VirtualDom_nodeNS(undefined);
+
+
+
+// KEYED NODE
+
+
+var _VirtualDom_keyedNodeNS = F2(function(namespace, tag)
+{
+	return F2(function(factList, kidList)
+	{
+		for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
+		{
+			var kid = kidList.a;
+			descendantsCount += (kid.b.b || 0);
+			kids.push(kid);
+		}
+		descendantsCount += kids.length;
+
+		return {
+			$: 2,
+			c: tag,
+			d: _VirtualDom_organizeFacts(factList),
+			e: kids,
+			f: namespace,
+			b: descendantsCount
+		};
+	});
+});
+
+
+var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);
+
+
+
+// CUSTOM
+
+
+function _VirtualDom_custom(factList, model, render, diff)
+{
+	return {
+		$: 3,
+		d: _VirtualDom_organizeFacts(factList),
+		g: model,
+		h: render,
+		i: diff
+	};
+}
+
+
+
+// MAP
+
+
+var _VirtualDom_map = F2(function(tagger, node)
+{
+	return {
+		$: 4,
+		j: tagger,
+		k: node,
+		b: 1 + (node.b || 0)
+	};
+});
+
+
+
+// LAZY
+
+
+function _VirtualDom_thunk(refs, thunk)
+{
+	return {
+		$: 5,
+		l: refs,
+		m: thunk,
+		k: undefined
+	};
+}
+
+var _VirtualDom_lazy = F2(function(func, a)
+{
+	return _VirtualDom_thunk([func, a], function() {
+		return func(a);
+	});
+});
+
+var _VirtualDom_lazy2 = F3(function(func, a, b)
+{
+	return _VirtualDom_thunk([func, a, b], function() {
+		return A2(func, a, b);
+	});
+});
+
+var _VirtualDom_lazy3 = F4(function(func, a, b, c)
+{
+	return _VirtualDom_thunk([func, a, b, c], function() {
+		return A3(func, a, b, c);
+	});
+});
+
+var _VirtualDom_lazy4 = F5(function(func, a, b, c, d)
+{
+	return _VirtualDom_thunk([func, a, b, c, d], function() {
+		return A4(func, a, b, c, d);
+	});
+});
+
+var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e)
+{
+	return _VirtualDom_thunk([func, a, b, c, d, e], function() {
+		return A5(func, a, b, c, d, e);
+	});
+});
+
+var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f)
+{
+	return _VirtualDom_thunk([func, a, b, c, d, e, f], function() {
+		return A6(func, a, b, c, d, e, f);
+	});
+});
+
+var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g)
+{
+	return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() {
+		return A7(func, a, b, c, d, e, f, g);
+	});
+});
+
+var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h)
+{
+	return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() {
+		return A8(func, a, b, c, d, e, f, g, h);
+	});
+});
+
+
+
+// FACTS
+
+
+var _VirtualDom_on = F2(function(key, handler)
+{
+	return {
+		$: 'a0',
+		n: key,
+		o: handler
+	};
+});
+var _VirtualDom_style = F2(function(key, value)
+{
+	return {
+		$: 'a1',
+		n: key,
+		o: value
+	};
+});
+var _VirtualDom_property = F2(function(key, value)
+{
+	return {
+		$: 'a2',
+		n: key,
+		o: value
+	};
+});
+var _VirtualDom_attribute = F2(function(key, value)
+{
+	return {
+		$: 'a3',
+		n: key,
+		o: value
+	};
+});
+var _VirtualDom_attributeNS = F3(function(namespace, key, value)
+{
+	return {
+		$: 'a4',
+		n: key,
+		o: { f: namespace, o: value }
+	};
+});
+
+
+
+// XSS ATTACK VECTOR CHECKS
+
+
+function _VirtualDom_noScript(tag)
+{
+	return tag == 'script' ? 'p' : tag;
+}
+
+function _VirtualDom_noOnOrFormAction(key)
+{
+	return /^(on|formAction$)/i.test(key) ? 'data-' + key : key;
+}
+
+function _VirtualDom_noInnerHtmlOrFormAction(key)
+{
+	return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key;
+}
+
+function _VirtualDom_noJavaScriptUri_UNUSED(value)
+{
+	return /^javascript:/i.test(value.replace(/\s/g,'')) ? '' : value;
+}
+
+function _VirtualDom_noJavaScriptUri(value)
+{
+	return /^javascript:/i.test(value.replace(/\s/g,''))
+		? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
+		: value;
+}
+
+function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value)
+{
+	return /^\s*(javascript:|data:text\/html)/i.test(value) ? '' : value;
+}
+
+function _VirtualDom_noJavaScriptOrHtmlUri(value)
+{
+	return /^\s*(javascript:|data:text\/html)/i.test(value)
+		? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
+		: value;
+}
+
+
+
+// MAP FACTS
+
+
+var _VirtualDom_mapAttribute = F2(function(func, attr)
+{
+	return (attr.$ === 'a0')
+		? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o))
+		: attr;
+});
+
+function _VirtualDom_mapHandler(func, handler)
+{
+	var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
+
+	// 0 = Normal
+	// 1 = MayStopPropagation
+	// 2 = MayPreventDefault
+	// 3 = Custom
+
+	return {
+		$: handler.$,
+		a:
+			!tag
+				? A2($elm$json$Json$Decode$map, func, handler.a)
+				:
+			A3($elm$json$Json$Decode$map2,
+				tag < 3
+					? _VirtualDom_mapEventTuple
+					: _VirtualDom_mapEventRecord,
+				$elm$json$Json$Decode$succeed(func),
+				handler.a
+			)
+	};
+}
+
+var _VirtualDom_mapEventTuple = F2(function(func, tuple)
+{
+	return _Utils_Tuple2(func(tuple.a), tuple.b);
+});
+
+var _VirtualDom_mapEventRecord = F2(function(func, record)
+{
+	return {
+		message: func(record.message),
+		stopPropagation: record.stopPropagation,
+		preventDefault: record.preventDefault
+	}
+});
+
+
+
+// ORGANIZE FACTS
+
+
+function _VirtualDom_organizeFacts(factList)
+{
+	for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS
+	{
+		var entry = factList.a;
+
+		var tag = entry.$;
+		var key = entry.n;
+		var value = entry.o;
+
+		if (tag === 'a2')
+		{
+			(key === 'className')
+				? _VirtualDom_addClass(facts, key, _Json_unwrap(value))
+				: facts[key] = _Json_unwrap(value);
+
+			continue;
+		}
+
+		var subFacts = facts[tag] || (facts[tag] = {});
+		(tag === 'a3' && key === 'class')
+			? _VirtualDom_addClass(subFacts, key, value)
+			: subFacts[key] = value;
+	}
+
+	return facts;
+}
+
+function _VirtualDom_addClass(object, key, newClass)
+{
+	var classes = object[key];
+	object[key] = classes ? classes + ' ' + newClass : newClass;
+}
+
+
+
+// RENDER
+
+
+function _VirtualDom_render(vNode, eventNode)
+{
+	var tag = vNode.$;
+
+	if (tag === 5)
+	{
+		return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode);
+	}
+
+	if (tag === 0)
+	{
+		return _VirtualDom_doc.createTextNode(vNode.a);
+	}
+
+	if (tag === 4)
+	{
+		var subNode = vNode.k;
+		var tagger = vNode.j;
+
+		while (subNode.$ === 4)
+		{
+			typeof tagger !== 'object'
+				? tagger = [tagger, subNode.j]
+				: tagger.push(subNode.j);
+
+			subNode = subNode.k;
+		}
+
+		var subEventRoot = { j: tagger, p: eventNode };
+		var domNode = _VirtualDom_render(subNode, subEventRoot);
+		domNode.elm_event_node_ref = subEventRoot;
+		return domNode;
+	}
+
+	if (tag === 3)
+	{
+		var domNode = vNode.h(vNode.g);
+		_VirtualDom_applyFacts(domNode, eventNode, vNode.d);
+		return domNode;
+	}
+
+	// at this point `tag` must be 1 or 2
+
+	var domNode = vNode.f
+		? _VirtualDom_doc.createElementNS(vNode.f, vNode.c)
+		: _VirtualDom_doc.createElement(vNode.c);
+
+	if (_VirtualDom_divertHrefToApp && vNode.c == 'a')
+	{
+		domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode));
+	}
+
+	_VirtualDom_applyFacts(domNode, eventNode, vNode.d);
+
+	for (var kids = vNode.e, i = 0; i < kids.length; i++)
+	{
+		_VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode));
+	}
+
+	return domNode;
+}
+
+
+
+// APPLY FACTS
+
+
+function _VirtualDom_applyFacts(domNode, eventNode, facts)
+{
+	for (var key in facts)
+	{
+		var value = facts[key];
+
+		key === 'a1'
+			? _VirtualDom_applyStyles(domNode, value)
+			:
+		key === 'a0'
+			? _VirtualDom_applyEvents(domNode, eventNode, value)
+			:
+		key === 'a3'
+			? _VirtualDom_applyAttrs(domNode, value)
+			:
+		key === 'a4'
+			? _VirtualDom_applyAttrsNS(domNode, value)
+			:
+		((key !== 'value' && key !== 'checked') || domNode[key] !== value) && (domNode[key] = value);
+	}
+}
+
+
+
+// APPLY STYLES
+
+
+function _VirtualDom_applyStyles(domNode, styles)
+{
+	var domNodeStyle = domNode.style;
+
+	for (var key in styles)
+	{
+		domNodeStyle[key] = styles[key];
+	}
+}
+
+
+
+// APPLY ATTRS
+
+
+function _VirtualDom_applyAttrs(domNode, attrs)
+{
+	for (var key in attrs)
+	{
+		var value = attrs[key];
+		typeof value !== 'undefined'
+			? domNode.setAttribute(key, value)
+			: domNode.removeAttribute(key);
+	}
+}
+
+
+
+// APPLY NAMESPACED ATTRS
+
+
+function _VirtualDom_applyAttrsNS(domNode, nsAttrs)
+{
+	for (var key in nsAttrs)
+	{
+		var pair = nsAttrs[key];
+		var namespace = pair.f;
+		var value = pair.o;
+
+		typeof value !== 'undefined'
+			? domNode.setAttributeNS(namespace, key, value)
+			: domNode.removeAttributeNS(namespace, key);
+	}
+}
+
+
+
+// APPLY EVENTS
+
+
+function _VirtualDom_applyEvents(domNode, eventNode, events)
+{
+	var allCallbacks = domNode.elmFs || (domNode.elmFs = {});
+
+	for (var key in events)
+	{
+		var newHandler = events[key];
+		var oldCallback = allCallbacks[key];
+
+		if (!newHandler)
+		{
+			domNode.removeEventListener(key, oldCallback);
+			allCallbacks[key] = undefined;
+			continue;
+		}
+
+		if (oldCallback)
+		{
+			var oldHandler = oldCallback.q;
+			if (oldHandler.$ === newHandler.$)
+			{
+				oldCallback.q = newHandler;
+				continue;
+			}
+			domNode.removeEventListener(key, oldCallback);
+		}
+
+		oldCallback = _VirtualDom_makeCallback(eventNode, newHandler);
+		domNode.addEventListener(key, oldCallback,
+			_VirtualDom_passiveSupported
+			&& { passive: $elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 }
+		);
+		allCallbacks[key] = oldCallback;
+	}
+}
+
+
+
+// PASSIVE EVENTS
+
+
+var _VirtualDom_passiveSupported;
+
+try
+{
+	window.addEventListener('t', null, Object.defineProperty({}, 'passive', {
+		get: function() { _VirtualDom_passiveSupported = true; }
+	}));
+}
+catch(e) {}
+
+
+
+// EVENT HANDLERS
+
+
+function _VirtualDom_makeCallback(eventNode, initialHandler)
+{
+	function callback(event)
+	{
+		var handler = callback.q;
+		var result = _Json_runHelp(handler.a, event);
+
+		if (!$elm$core$Result$isOk(result))
+		{
+			return;
+		}
+
+		var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
+
+		// 0 = Normal
+		// 1 = MayStopPropagation
+		// 2 = MayPreventDefault
+		// 3 = Custom
+
+		var value = result.a;
+		var message = !tag ? value : tag < 3 ? value.a : value.message;
+		var stopPropagation = tag == 1 ? value.b : tag == 3 && value.stopPropagation;
+		var currentEventNode = (
+			stopPropagation && event.stopPropagation(),
+			(tag == 2 ? value.b : tag == 3 && value.preventDefault) && event.preventDefault(),
+			eventNode
+		);
+		var tagger;
+		var i;
+		while (tagger = currentEventNode.j)
+		{
+			if (typeof tagger == 'function')
+			{
+				message = tagger(message);
+			}
+			else
+			{
+				for (var i = tagger.length; i--; )
+				{
+					message = tagger[i](message);
+				}
+			}
+			currentEventNode = currentEventNode.p;
+		}
+		currentEventNode(message, stopPropagation); // stopPropagation implies isSync
+	}
+
+	callback.q = initialHandler;
+
+	return callback;
+}
+
+function _VirtualDom_equalEvents(x, y)
+{
+	return x.$ == y.$ && _Json_equality(x.a, y.a);
+}
+
+
+
+// DIFF
+
+
+// TODO: Should we do patches like in iOS?
+//
+// type Patch
+//   = At Int Patch
+//   | Batch (List Patch)
+//   | Change ...
+//
+// How could it not be better?
+//
+function _VirtualDom_diff(x, y)
+{
+	var patches = [];
+	_VirtualDom_diffHelp(x, y, patches, 0);
+	return patches;
+}
+
+
+function _VirtualDom_pushPatch(patches, type, index, data)
+{
+	var patch = {
+		$: type,
+		r: index,
+		s: data,
+		t: undefined,
+		u: undefined
+	};
+	patches.push(patch);
+	return patch;
+}
+
+
+function _VirtualDom_diffHelp(x, y, patches, index)
+{
+	if (x === y)
+	{
+		return;
+	}
+
+	var xType = x.$;
+	var yType = y.$;
+
+	// Bail if you run into different types of nodes. Implies that the
+	// structure has changed significantly and it's not worth a diff.
+	if (xType !== yType)
+	{
+		if (xType === 1 && yType === 2)
+		{
+			y = _VirtualDom_dekey(y);
+			yType = 1;
+		}
+		else
+		{
+			_VirtualDom_pushPatch(patches, 0, index, y);
+			return;
+		}
+	}
+
+	// Now we know that both nodes are the same $.
+	switch (yType)
+	{
+		case 5:
+			var xRefs = x.l;
+			var yRefs = y.l;
+			var i = xRefs.length;
+			var same = i === yRefs.length;
+			while (same && i--)
+			{
+				same = xRefs[i] === yRefs[i];
+			}
+			if (same)
+			{
+				y.k = x.k;
+				return;
+			}
+			y.k = y.m();
+			var subPatches = [];
+			_VirtualDom_diffHelp(x.k, y.k, subPatches, 0);
+			subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches);
+			return;
+
+		case 4:
+			// gather nested taggers
+			var xTaggers = x.j;
+			var yTaggers = y.j;
+			var nesting = false;
+
+			var xSubNode = x.k;
+			while (xSubNode.$ === 4)
+			{
+				nesting = true;
+
+				typeof xTaggers !== 'object'
+					? xTaggers = [xTaggers, xSubNode.j]
+					: xTaggers.push(xSubNode.j);
+
+				xSubNode = xSubNode.k;
+			}
+
+			var ySubNode = y.k;
+			while (ySubNode.$ === 4)
+			{
+				nesting = true;
+
+				typeof yTaggers !== 'object'
+					? yTaggers = [yTaggers, ySubNode.j]
+					: yTaggers.push(ySubNode.j);
+
+				ySubNode = ySubNode.k;
+			}
+
+			// Just bail if different numbers of taggers. This implies the
+			// structure of the virtual DOM has changed.
+			if (nesting && xTaggers.length !== yTaggers.length)
+			{
+				_VirtualDom_pushPatch(patches, 0, index, y);
+				return;
+			}
+
+			// check if taggers are "the same"
+			if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers)
+			{
+				_VirtualDom_pushPatch(patches, 2, index, yTaggers);
+			}
+
+			// diff everything below the taggers
+			_VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1);
+			return;
+
+		case 0:
+			if (x.a !== y.a)
+			{
+				_VirtualDom_pushPatch(patches, 3, index, y.a);
+			}
+			return;
+
+		case 1:
+			_VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids);
+			return;
+
+		case 2:
+			_VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids);
+			return;
+
+		case 3:
+			if (x.h !== y.h)
+			{
+				_VirtualDom_pushPatch(patches, 0, index, y);
+				return;
+			}
+
+			var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
+			factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
+
+			var patch = y.i(x.g, y.g);
+			patch && _VirtualDom_pushPatch(patches, 5, index, patch);
+
+			return;
+	}
+}
+
+// assumes the incoming arrays are the same length
+function _VirtualDom_pairwiseRefEqual(as, bs)
+{
+	for (var i = 0; i < as.length; i++)
+	{
+		if (as[i] !== bs[i])
+		{
+			return false;
+		}
+	}
+
+	return true;
+}
+
+function _VirtualDom_diffNodes(x, y, patches, index, diffKids)
+{
+	// Bail if obvious indicators have changed. Implies more serious
+	// structural changes such that it's not worth it to diff.
+	if (x.c !== y.c || x.f !== y.f)
+	{
+		_VirtualDom_pushPatch(patches, 0, index, y);
+		return;
+	}
+
+	var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
+	factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
+
+	diffKids(x, y, patches, index);
+}
+
+
+
+// DIFF FACTS
+
+
+// TODO Instead of creating a new diff object, it's possible to just test if
+// there *is* a diff. During the actual patch, do the diff again and make the
+// modifications directly. This way, there's no new allocations. Worth it?
+function _VirtualDom_diffFacts(x, y, category)
+{
+	var diff;
+
+	// look for changes and removals
+	for (var xKey in x)
+	{
+		if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4')
+		{
+			var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey);
+			if (subDiff)
+			{
+				diff = diff || {};
+				diff[xKey] = subDiff;
+			}
+			continue;
+		}
+
+		// remove if not in the new facts
+		if (!(xKey in y))
+		{
+			diff = diff || {};
+			diff[xKey] =
+				!category
+					? (typeof x[xKey] === 'string' ? '' : null)
+					:
+				(category === 'a1')
+					? ''
+					:
+				(category === 'a0' || category === 'a3')
+					? undefined
+					:
+				{ f: x[xKey].f, o: undefined };
+
+			continue;
+		}
+
+		var xValue = x[xKey];
+		var yValue = y[xKey];
+
+		// reference equal, so don't worry about it
+		if (xValue === yValue && xKey !== 'value' && xKey !== 'checked'
+			|| category === 'a0' && _VirtualDom_equalEvents(xValue, yValue))
+		{
+			continue;
+		}
+
+		diff = diff || {};
+		diff[xKey] = yValue;
+	}
+
+	// add new stuff
+	for (var yKey in y)
+	{
+		if (!(yKey in x))
+		{
+			diff = diff || {};
+			diff[yKey] = y[yKey];
+		}
+	}
+
+	return diff;
+}
+
+
+
+// DIFF KIDS
+
+
+function _VirtualDom_diffKids(xParent, yParent, patches, index)
+{
+	var xKids = xParent.e;
+	var yKids = yParent.e;
+
+	var xLen = xKids.length;
+	var yLen = yKids.length;
+
+	// FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
+
+	if (xLen > yLen)
+	{
+		_VirtualDom_pushPatch(patches, 6, index, {
+			v: yLen,
+			i: xLen - yLen
+		});
+	}
+	else if (xLen < yLen)
+	{
+		_VirtualDom_pushPatch(patches, 7, index, {
+			v: xLen,
+			e: yKids
+		});
+	}
+
+	// PAIRWISE DIFF EVERYTHING ELSE
+
+	for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++)
+	{
+		var xKid = xKids[i];
+		_VirtualDom_diffHelp(xKid, yKids[i], patches, ++index);
+		index += xKid.b || 0;
+	}
+}
+
+
+
+// KEYED DIFF
+
+
+function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex)
+{
+	var localPatches = [];
+
+	var changes = {}; // Dict String Entry
+	var inserts = []; // Array { index : Int, entry : Entry }
+	// type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
+
+	var xKids = xParent.e;
+	var yKids = yParent.e;
+	var xLen = xKids.length;
+	var yLen = yKids.length;
+	var xIndex = 0;
+	var yIndex = 0;
+
+	var index = rootIndex;
+
+	while (xIndex < xLen && yIndex < yLen)
+	{
+		var x = xKids[xIndex];
+		var y = yKids[yIndex];
+
+		var xKey = x.a;
+		var yKey = y.a;
+		var xNode = x.b;
+		var yNode = y.b;
+
+		var newMatch = undefined;
+		var oldMatch = undefined;
+
+		// check if keys match
+
+		if (xKey === yKey)
+		{
+			index++;
+			_VirtualDom_diffHelp(xNode, yNode, localPatches, index);
+			index += xNode.b || 0;
+
+			xIndex++;
+			yIndex++;
+			continue;
+		}
+
+		// look ahead 1 to detect insertions and removals.
+
+		var xNext = xKids[xIndex + 1];
+		var yNext = yKids[yIndex + 1];
+
+		if (xNext)
+		{
+			var xNextKey = xNext.a;
+			var xNextNode = xNext.b;
+			oldMatch = yKey === xNextKey;
+		}
+
+		if (yNext)
+		{
+			var yNextKey = yNext.a;
+			var yNextNode = yNext.b;
+			newMatch = xKey === yNextKey;
+		}
+
+
+		// swap x and y
+		if (newMatch && oldMatch)
+		{
+			index++;
+			_VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
+			_VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts);
+			index += xNode.b || 0;
+
+			index++;
+			_VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index);
+			index += xNextNode.b || 0;
+
+			xIndex += 2;
+			yIndex += 2;
+			continue;
+		}
+
+		// insert y
+		if (newMatch)
+		{
+			index++;
+			_VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
+			_VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
+			index += xNode.b || 0;
+
+			xIndex += 1;
+			yIndex += 2;
+			continue;
+		}
+
+		// remove x
+		if (oldMatch)
+		{
+			index++;
+			_VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
+			index += xNode.b || 0;
+
+			index++;
+			_VirtualDom_diffHelp(xNextNode, yNode, localPatches, index);
+			index += xNextNode.b || 0;
+
+			xIndex += 2;
+			yIndex += 1;
+			continue;
+		}
+
+		// remove x, insert y
+		if (xNext && xNextKey === yNextKey)
+		{
+			index++;
+			_VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
+			_VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
+			index += xNode.b || 0;
+
+			index++;
+			_VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index);
+			index += xNextNode.b || 0;
+
+			xIndex += 2;
+			yIndex += 2;
+			continue;
+		}
+
+		break;
+	}
+
+	// eat up any remaining nodes with removeNode and insertNode
+
+	while (xIndex < xLen)
+	{
+		index++;
+		var x = xKids[xIndex];
+		var xNode = x.b;
+		_VirtualDom_removeNode(changes, localPatches, x.a, xNode, index);
+		index += xNode.b || 0;
+		xIndex++;
+	}
+
+	while (yIndex < yLen)
+	{
+		var endInserts = endInserts || [];
+		var y = yKids[yIndex];
+		_VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts);
+		yIndex++;
+	}
+
+	if (localPatches.length > 0 || inserts.length > 0 || endInserts)
+	{
+		_VirtualDom_pushPatch(patches, 8, rootIndex, {
+			w: localPatches,
+			x: inserts,
+			y: endInserts
+		});
+	}
+}
+
+
+
+// CHANGES FROM KEYED DIFF
+
+
+var _VirtualDom_POSTFIX = '_elmW6BL';
+
+
+function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts)
+{
+	var entry = changes[key];
+
+	// never seen this key before
+	if (!entry)
+	{
+		entry = {
+			c: 0,
+			z: vnode,
+			r: yIndex,
+			s: undefined
+		};
+
+		inserts.push({ r: yIndex, A: entry });
+		changes[key] = entry;
+
+		return;
+	}
+
+	// this key was removed earlier, a match!
+	if (entry.c === 1)
+	{
+		inserts.push({ r: yIndex, A: entry });
+
+		entry.c = 2;
+		var subPatches = [];
+		_VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r);
+		entry.r = yIndex;
+		entry.s.s = {
+			w: subPatches,
+			A: entry
+		};
+
+		return;
+	}
+
+	// this key has already been inserted or moved, a duplicate!
+	_VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts);
+}
+
+
+function _VirtualDom_removeNode(changes, localPatches, key, vnode, index)
+{
+	var entry = changes[key];
+
+	// never seen this key before
+	if (!entry)
+	{
+		var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined);
+
+		changes[key] = {
+			c: 1,
+			z: vnode,
+			r: index,
+			s: patch
+		};
+
+		return;
+	}
+
+	// this key was inserted earlier, a match!
+	if (entry.c === 0)
+	{
+		entry.c = 2;
+		var subPatches = [];
+		_VirtualDom_diffHelp(vnode, entry.z, subPatches, index);
+
+		_VirtualDom_pushPatch(localPatches, 9, index, {
+			w: subPatches,
+			A: entry
+		});
+
+		return;
+	}
+
+	// this key has already been removed or moved, a duplicate!
+	_VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index);
+}
+
+
+
+// ADD DOM NODES
+//
+// Each DOM node has an "index" assigned in order of traversal. It is important
+// to minimize our crawl over the actual DOM, so these indexes (along with the
+// descendantsCount of virtual nodes) let us skip touching entire subtrees of
+// the DOM if we know there are no patches there.
+
+
+function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode)
+{
+	_VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode);
+}
+
+
+// assumes `patches` is non-empty and indexes increase monotonically.
+function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
+{
+	var patch = patches[i];
+	var index = patch.r;
+
+	while (index === low)
+	{
+		var patchType = patch.$;
+
+		if (patchType === 1)
+		{
+			_VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode);
+		}
+		else if (patchType === 8)
+		{
+			patch.t = domNode;
+			patch.u = eventNode;
+
+			var subPatches = patch.s.w;
+			if (subPatches.length > 0)
+			{
+				_VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
+			}
+		}
+		else if (patchType === 9)
+		{
+			patch.t = domNode;
+			patch.u = eventNode;
+
+			var data = patch.s;
+			if (data)
+			{
+				data.A.s = domNode;
+				var subPatches = data.w;
+				if (subPatches.length > 0)
+				{
+					_VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
+				}
+			}
+		}
+		else
+		{
+			patch.t = domNode;
+			patch.u = eventNode;
+		}
+
+		i++;
+
+		if (!(patch = patches[i]) || (index = patch.r) > high)
+		{
+			return i;
+		}
+	}
+
+	var tag = vNode.$;
+
+	if (tag === 4)
+	{
+		var subNode = vNode.k;
+
+		while (subNode.$ === 4)
+		{
+			subNode = subNode.k;
+		}
+
+		return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);
+	}
+
+	// tag must be 1 or 2 at this point
+
+	var vKids = vNode.e;
+	var childNodes = domNode.childNodes;
+	for (var j = 0; j < vKids.length; j++)
+	{
+		low++;
+		var vKid = tag === 1 ? vKids[j] : vKids[j].b;
+		var nextLow = low + (vKid.b || 0);
+		if (low <= index && index <= nextLow)
+		{
+			i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode);
+			if (!(patch = patches[i]) || (index = patch.r) > high)
+			{
+				return i;
+			}
+		}
+		low = nextLow;
+	}
+	return i;
+}
+
+
+
+// APPLY PATCHES
+
+
+function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
+{
+	if (patches.length === 0)
+	{
+		return rootDomNode;
+	}
+
+	_VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
+	return _VirtualDom_applyPatchesHelp(rootDomNode, patches);
+}
+
+function _VirtualDom_applyPatchesHelp(rootDomNode, patches)
+{
+	for (var i = 0; i < patches.length; i++)
+	{
+		var patch = patches[i];
+		var localDomNode = patch.t
+		var newNode = _VirtualDom_applyPatch(localDomNode, patch);
+		if (localDomNode === rootDomNode)
+		{
+			rootDomNode = newNode;
+		}
+	}
+	return rootDomNode;
+}
+
+function _VirtualDom_applyPatch(domNode, patch)
+{
+	switch (patch.$)
+	{
+		case 0:
+			return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u);
+
+		case 4:
+			_VirtualDom_applyFacts(domNode, patch.u, patch.s);
+			return domNode;
+
+		case 3:
+			domNode.replaceData(0, domNode.length, patch.s);
+			return domNode;
+
+		case 1:
+			return _VirtualDom_applyPatchesHelp(domNode, patch.s);
+
+		case 2:
+			if (domNode.elm_event_node_ref)
+			{
+				domNode.elm_event_node_ref.j = patch.s;
+			}
+			else
+			{
+				domNode.elm_event_node_ref = { j: patch.s, p: patch.u };
+			}
+			return domNode;
+
+		case 6:
+			var data = patch.s;
+			for (var i = 0; i < data.i; i++)
+			{
+				domNode.removeChild(domNode.childNodes[data.v]);
+			}
+			return domNode;
+
+		case 7:
+			var data = patch.s;
+			var kids = data.e;
+			var i = data.v;
+			var theEnd = domNode.childNodes[i];
+			for (; i < kids.length; i++)
+			{
+				domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd);
+			}
+			return domNode;
+
+		case 9:
+			var data = patch.s;
+			if (!data)
+			{
+				domNode.parentNode.removeChild(domNode);
+				return domNode;
+			}
+			var entry = data.A;
+			if (typeof entry.r !== 'undefined')
+			{
+				domNode.parentNode.removeChild(domNode);
+			}
+			entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w);
+			return domNode;
+
+		case 8:
+			return _VirtualDom_applyPatchReorder(domNode, patch);
+
+		case 5:
+			return patch.s(domNode);
+
+		default:
+			_Debug_crash(10); // 'Ran into an unknown patch!'
+	}
+}
+
+
+function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode)
+{
+	var parentNode = domNode.parentNode;
+	var newNode = _VirtualDom_render(vNode, eventNode);
+
+	if (!newNode.elm_event_node_ref)
+	{
+		newNode.elm_event_node_ref = domNode.elm_event_node_ref;
+	}
+
+	if (parentNode && newNode !== domNode)
+	{
+		parentNode.replaceChild(newNode, domNode);
+	}
+	return newNode;
+}
+
+
+function _VirtualDom_applyPatchReorder(domNode, patch)
+{
+	var data = patch.s;
+
+	// remove end inserts
+	var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch);
+
+	// removals
+	domNode = _VirtualDom_applyPatchesHelp(domNode, data.w);
+
+	// inserts
+	var inserts = data.x;
+	for (var i = 0; i < inserts.length; i++)
+	{
+		var insert = inserts[i];
+		var entry = insert.A;
+		var node = entry.c === 2
+			? entry.s
+			: _VirtualDom_render(entry.z, patch.u);
+		domNode.insertBefore(node, domNode.childNodes[insert.r]);
+	}
+
+	// add end inserts
+	if (frag)
+	{
+		_VirtualDom_appendChild(domNode, frag);
+	}
+
+	return domNode;
+}
+
+
+function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch)
+{
+	if (!endInserts)
+	{
+		return;
+	}
+
+	var frag = _VirtualDom_doc.createDocumentFragment();
+	for (var i = 0; i < endInserts.length; i++)
+	{
+		var insert = endInserts[i];
+		var entry = insert.A;
+		_VirtualDom_appendChild(frag, entry.c === 2
+			? entry.s
+			: _VirtualDom_render(entry.z, patch.u)
+		);
+	}
+	return frag;
+}
+
+
+function _VirtualDom_virtualize(node)
+{
+	// TEXT NODES
+
+	if (node.nodeType === 3)
+	{
+		return _VirtualDom_text(node.textContent);
+	}
+
+
+	// WEIRD NODES
+
+	if (node.nodeType !== 1)
+	{
+		return _VirtualDom_text('');
+	}
+
+
+	// ELEMENT NODES
+
+	var attrList = _List_Nil;
+	var attrs = node.attributes;
+	for (var i = attrs.length; i--; )
+	{
+		var attr = attrs[i];
+		var name = attr.name;
+		var value = attr.value;
+		attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList );
+	}
+
+	var tag = node.tagName.toLowerCase();
+	var kidList = _List_Nil;
+	var kids = node.childNodes;
+
+	for (var i = kids.length; i--; )
+	{
+		kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList);
+	}
+	return A3(_VirtualDom_node, tag, attrList, kidList);
+}
+
+function _VirtualDom_dekey(keyedNode)
+{
+	var keyedKids = keyedNode.e;
+	var len = keyedKids.length;
+	var kids = new Array(len);
+	for (var i = 0; i < len; i++)
+	{
+		kids[i] = keyedKids[i].b;
+	}
+
+	return {
+		$: 1,
+		c: keyedNode.c,
+		d: keyedNode.d,
+		e: kids,
+		f: keyedNode.f,
+		b: keyedNode.b
+	};
+}
+
+
+
+
+// ELEMENT
+
+
+var _Debugger_element;
+
+var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args)
+{
+	return _Platform_initialize(
+		flagDecoder,
+		args,
+		impl.init,
+		impl.update,
+		impl.subscriptions,
+		function(sendToApp, initialModel) {
+			var view = impl.view;
+			/**_UNUSED/
+			var domNode = args['node'];
+			//*/
+			/**/
+			var domNode = args && args['node'] ? args['node'] : _Debug_crash(0);
+			//*/
+			var currNode = _VirtualDom_virtualize(domNode);
+
+			return _Browser_makeAnimator(initialModel, function(model)
+			{
+				var nextNode = view(model);
+				var patches = _VirtualDom_diff(currNode, nextNode);
+				domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp);
+				currNode = nextNode;
+			});
+		}
+	);
+});
+
+
+
+// DOCUMENT
+
+
+var _Debugger_document;
+
+var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args)
+{
+	return _Platform_initialize(
+		flagDecoder,
+		args,
+		impl.init,
+		impl.update,
+		impl.subscriptions,
+		function(sendToApp, initialModel) {
+			var divertHrefToApp = impl.setup && impl.setup(sendToApp)
+			var view = impl.view;
+			var title = _VirtualDom_doc.title;
+			var bodyNode = _VirtualDom_doc.body;
+			var currNode = _VirtualDom_virtualize(bodyNode);
+			return _Browser_makeAnimator(initialModel, function(model)
+			{
+				_VirtualDom_divertHrefToApp = divertHrefToApp;
+				var doc = view(model);
+				var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.body);
+				var patches = _VirtualDom_diff(currNode, nextNode);
+				bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp);
+				currNode = nextNode;
+				_VirtualDom_divertHrefToApp = 0;
+				(title !== doc.title) && (_VirtualDom_doc.title = title = doc.title);
+			});
+		}
+	);
+});
+
+
+
+// ANIMATION
+
+
+var _Browser_cancelAnimationFrame =
+	typeof cancelAnimationFrame !== 'undefined'
+		? cancelAnimationFrame
+		: function(id) { clearTimeout(id); };
+
+var _Browser_requestAnimationFrame =
+	typeof requestAnimationFrame !== 'undefined'
+		? requestAnimationFrame
+		: function(callback) { return setTimeout(callback, 1000 / 60); };
+
+
+function _Browser_makeAnimator(model, draw)
+{
+	draw(model);
+
+	var state = 0;
+
+	function updateIfNeeded()
+	{
+		state = state === 1
+			? 0
+			: ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 );
+	}
+
+	return function(nextModel, isSync)
+	{
+		model = nextModel;
+
+		isSync
+			? ( draw(model),
+				state === 2 && (state = 1)
+				)
+			: ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded),
+				state = 2
+				);
+	};
+}
+
+
+
+// APPLICATION
+
+
+function _Browser_application(impl)
+{
+	var onUrlChange = impl.onUrlChange;
+	var onUrlRequest = impl.onUrlRequest;
+	var key = function() { key.a(onUrlChange(_Browser_getUrl())); };
+
+	return _Browser_document({
+		setup: function(sendToApp)
+		{
+			key.a = sendToApp;
+			_Browser_window.addEventListener('popstate', key);
+			_Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', key);
+
+			return F2(function(domNode, event)
+			{
+				if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target && !domNode.hasAttribute('download'))
+				{
+					event.preventDefault();
+					var href = domNode.href;
+					var curr = _Browser_getUrl();
+					var next = $elm$url$Url$fromString(href).a;
+					sendToApp(onUrlRequest(
+						(next
+							&& curr.protocol === next.protocol
+							&& curr.host === next.host
+							&& curr.port_.a === next.port_.a
+						)
+							? $elm$browser$Browser$Internal(next)
+							: $elm$browser$Browser$External(href)
+					));
+				}
+			});
+		},
+		init: function(flags)
+		{
+			return A3(impl.init, flags, _Browser_getUrl(), key);
+		},
+		view: impl.view,
+		update: impl.update,
+		subscriptions: impl.subscriptions
+	});
+}
+
+function _Browser_getUrl()
+{
+	return $elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1);
+}
+
+var _Browser_go = F2(function(key, n)
+{
+	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
+		n && history.go(n);
+		key();
+	}));
+});
+
+var _Browser_pushUrl = F2(function(key, url)
+{
+	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
+		history.pushState({}, '', url);
+		key();
+	}));
+});
+
+var _Browser_replaceUrl = F2(function(key, url)
+{
+	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
+		history.replaceState({}, '', url);
+		key();
+	}));
+});
+
+
+
+// GLOBAL EVENTS
+
+
+var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} };
+var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode;
+var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode;
+
+var _Browser_on = F3(function(node, eventName, sendToSelf)
+{
+	return _Scheduler_spawn(_Scheduler_binding(function(callback)
+	{
+		function handler(event)	{ _Scheduler_rawSpawn(sendToSelf(event)); }
+		node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true });
+		return function() { node.removeEventListener(eventName, handler); };
+	}));
+});
+
+var _Browser_decodeEvent = F2(function(decoder, event)
+{
+	var result = _Json_runHelp(decoder, event);
+	return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing;
+});
+
+
+
+// PAGE VISIBILITY
+
+
+function _Browser_visibilityInfo()
+{
+	return (typeof _VirtualDom_doc.hidden !== 'undefined')
+		? { hidden: 'hidden', change: 'visibilitychange' }
+		:
+	(typeof _VirtualDom_doc.mozHidden !== 'undefined')
+		? { hidden: 'mozHidden', change: 'mozvisibilitychange' }
+		:
+	(typeof _VirtualDom_doc.msHidden !== 'undefined')
+		? { hidden: 'msHidden', change: 'msvisibilitychange' }
+		:
+	(typeof _VirtualDom_doc.webkitHidden !== 'undefined')
+		? { hidden: 'webkitHidden', change: 'webkitvisibilitychange' }
+		: { hidden: 'hidden', change: 'visibilitychange' };
+}
+
+
+
+// ANIMATION FRAMES
+
+
+function _Browser_rAF()
+{
+	return _Scheduler_binding(function(callback)
+	{
+		var id = _Browser_requestAnimationFrame(function() {
+			callback(_Scheduler_succeed(Date.now()));
+		});
+
+		return function() {
+			_Browser_cancelAnimationFrame(id);
+		};
+	});
+}
+
+
+function _Browser_now()
+{
+	return _Scheduler_binding(function(callback)
+	{
+		callback(_Scheduler_succeed(Date.now()));
+	});
+}
+
+
+
+// DOM STUFF
+
+
+function _Browser_withNode(id, doStuff)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		_Browser_requestAnimationFrame(function() {
+			var node = document.getElementById(id);
+			callback(node
+				? _Scheduler_succeed(doStuff(node))
+				: _Scheduler_fail($elm$browser$Browser$Dom$NotFound(id))
+			);
+		});
+	});
+}
+
+
+function _Browser_withWindow(doStuff)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		_Browser_requestAnimationFrame(function() {
+			callback(_Scheduler_succeed(doStuff()));
+		});
+	});
+}
+
+
+// FOCUS and BLUR
+
+
+var _Browser_call = F2(function(functionName, id)
+{
+	return _Browser_withNode(id, function(node) {
+		node[functionName]();
+		return _Utils_Tuple0;
+	});
+});
+
+
+
+// WINDOW VIEWPORT
+
+
+function _Browser_getViewport()
+{
+	return {
+		scene: _Browser_getScene(),
+		viewport: {
+			x: _Browser_window.pageXOffset,
+			y: _Browser_window.pageYOffset,
+			width: _Browser_doc.documentElement.clientWidth,
+			height: _Browser_doc.documentElement.clientHeight
+		}
+	};
+}
+
+function _Browser_getScene()
+{
+	var body = _Browser_doc.body;
+	var elem = _Browser_doc.documentElement;
+	return {
+		width: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth),
+		height: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight)
+	};
+}
+
+var _Browser_setViewport = F2(function(x, y)
+{
+	return _Browser_withWindow(function()
+	{
+		_Browser_window.scroll(x, y);
+		return _Utils_Tuple0;
+	});
+});
+
+
+
+// ELEMENT VIEWPORT
+
+
+function _Browser_getViewportOf(id)
+{
+	return _Browser_withNode(id, function(node)
+	{
+		return {
+			scene: {
+				width: node.scrollWidth,
+				height: node.scrollHeight
+			},
+			viewport: {
+				x: node.scrollLeft,
+				y: node.scrollTop,
+				width: node.clientWidth,
+				height: node.clientHeight
+			}
+		};
+	});
+}
+
+
+var _Browser_setViewportOf = F3(function(id, x, y)
+{
+	return _Browser_withNode(id, function(node)
+	{
+		node.scrollLeft = x;
+		node.scrollTop = y;
+		return _Utils_Tuple0;
+	});
+});
+
+
+
+// ELEMENT
+
+
+function _Browser_getElement(id)
+{
+	return _Browser_withNode(id, function(node)
+	{
+		var rect = node.getBoundingClientRect();
+		var x = _Browser_window.pageXOffset;
+		var y = _Browser_window.pageYOffset;
+		return {
+			scene: _Browser_getScene(),
+			viewport: {
+				x: x,
+				y: y,
+				width: _Browser_doc.documentElement.clientWidth,
+				height: _Browser_doc.documentElement.clientHeight
+			},
+			element: {
+				x: x + rect.left,
+				y: y + rect.top,
+				width: rect.width,
+				height: rect.height
+			}
+		};
+	});
+}
+
+
+
+// LOAD and RELOAD
+
+
+function _Browser_reload(skipCache)
+{
+	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
+	{
+		_VirtualDom_doc.location.reload(skipCache);
+	}));
+}
+
+function _Browser_load(url)
+{
+	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
+	{
+		try
+		{
+			_Browser_window.location = url;
+		}
+		catch(err)
+		{
+			// Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.
+			// Other browsers reload the page, so let's be consistent about that.
+			_VirtualDom_doc.location.reload(false);
+		}
+	}));
+}
+
+
+// CREATE
+
+var _Regex_never = /.^/;
+
+var _Regex_fromStringWith = F2(function(options, string)
+{
+	var flags = 'g';
+	if (options.multiline) { flags += 'm'; }
+	if (options.caseInsensitive) { flags += 'i'; }
+
+	try
+	{
+		return $elm$core$Maybe$Just(new RegExp(string, flags));
+	}
+	catch(error)
+	{
+		return $elm$core$Maybe$Nothing;
+	}
+});
+
+
+// USE
+
+var _Regex_contains = F2(function(re, string)
+{
+	return string.match(re) !== null;
+});
+
+
+var _Regex_findAtMost = F3(function(n, re, str)
+{
+	var out = [];
+	var number = 0;
+	var string = str;
+	var lastIndex = re.lastIndex;
+	var prevLastIndex = -1;
+	var result;
+	while (number++ < n && (result = re.exec(string)))
+	{
+		if (prevLastIndex == re.lastIndex) break;
+		var i = result.length - 1;
+		var subs = new Array(i);
+		while (i > 0)
+		{
+			var submatch = result[i];
+			subs[--i] = submatch
+				? $elm$core$Maybe$Just(submatch)
+				: $elm$core$Maybe$Nothing;
+		}
+		out.push(A4($elm$regex$Regex$Match, result[0], result.index, number, _List_fromArray(subs)));
+		prevLastIndex = re.lastIndex;
+	}
+	re.lastIndex = lastIndex;
+	return _List_fromArray(out);
+});
+
+
+var _Regex_replaceAtMost = F4(function(n, re, replacer, string)
+{
+	var count = 0;
+	function jsReplacer(match)
+	{
+		if (count++ >= n)
+		{
+			return match;
+		}
+		var i = arguments.length - 3;
+		var submatches = new Array(i);
+		while (i > 0)
+		{
+			var submatch = arguments[i];
+			submatches[--i] = submatch
+				? $elm$core$Maybe$Just(submatch)
+				: $elm$core$Maybe$Nothing;
+		}
+		return replacer(A4($elm$regex$Regex$Match, match, arguments[arguments.length - 2], count, _List_fromArray(submatches)));
+	}
+	return string.replace(re, jsReplacer);
+});
+
+var _Regex_splitAtMost = F3(function(n, re, str)
+{
+	var string = str;
+	var out = [];
+	var start = re.lastIndex;
+	var restoreLastIndex = re.lastIndex;
+	while (n--)
+	{
+		var result = re.exec(string);
+		if (!result) break;
+		out.push(string.slice(start, result.index));
+		start = re.lastIndex;
+	}
+	out.push(string.slice(start));
+	re.lastIndex = restoreLastIndex;
+	return _List_fromArray(out);
+});
+
+var _Regex_infinity = Infinity;
+
+
+
+// SEND REQUEST
+
+var _Http_toTask = F3(function(router, toTask, request)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		function done(response) {
+			callback(toTask(request.expect.a(response)));
+		}
+
+		var xhr = new XMLHttpRequest();
+		xhr.addEventListener('error', function() { done($elm$http$Http$NetworkError_); });
+		xhr.addEventListener('timeout', function() { done($elm$http$Http$Timeout_); });
+		xhr.addEventListener('load', function() { done(_Http_toResponse(request.expect.b, xhr)); });
+		$elm$core$Maybe$isJust(request.tracker) && _Http_track(router, xhr, request.tracker.a);
+
+		try {
+			xhr.open(request.method, request.url, true);
+		} catch (e) {
+			return done($elm$http$Http$BadUrl_(request.url));
+		}
+
+		_Http_configureRequest(xhr, request);
+
+		request.body.a && xhr.setRequestHeader('Content-Type', request.body.a);
+		xhr.send(request.body.b);
+
+		return function() { xhr.c = true; xhr.abort(); };
+	});
+});
+
+
+// CONFIGURE
+
+function _Http_configureRequest(xhr, request)
+{
+	for (var headers = request.headers; headers.b; headers = headers.b) // WHILE_CONS
+	{
+		xhr.setRequestHeader(headers.a.a, headers.a.b);
+	}
+	xhr.timeout = request.timeout.a || 0;
+	xhr.responseType = request.expect.d;
+	xhr.withCredentials = request.allowCookiesFromOtherDomains;
+}
+
+
+// RESPONSES
+
+function _Http_toResponse(toBody, xhr)
+{
+	return A2(
+		200 <= xhr.status && xhr.status < 300 ? $elm$http$Http$GoodStatus_ : $elm$http$Http$BadStatus_,
+		_Http_toMetadata(xhr),
+		toBody(xhr.response)
+	);
+}
+
+
+// METADATA
+
+function _Http_toMetadata(xhr)
+{
+	return {
+		url: xhr.responseURL,
+		statusCode: xhr.status,
+		statusText: xhr.statusText,
+		headers: _Http_parseHeaders(xhr.getAllResponseHeaders())
+	};
+}
+
+
+// HEADERS
+
+function _Http_parseHeaders(rawHeaders)
+{
+	if (!rawHeaders)
+	{
+		return $elm$core$Dict$empty;
+	}
+
+	var headers = $elm$core$Dict$empty;
+	var headerPairs = rawHeaders.split('\r\n');
+	for (var i = headerPairs.length; i--; )
+	{
+		var headerPair = headerPairs[i];
+		var index = headerPair.indexOf(': ');
+		if (index > 0)
+		{
+			var key = headerPair.substring(0, index);
+			var value = headerPair.substring(index + 2);
+
+			headers = A3($elm$core$Dict$update, key, function(oldValue) {
+				return $elm$core$Maybe$Just($elm$core$Maybe$isJust(oldValue)
+					? value + ', ' + oldValue.a
+					: value
+				);
+			}, headers);
+		}
+	}
+	return headers;
+}
+
+
+// EXPECT
+
+var _Http_expect = F3(function(type, toBody, toValue)
+{
+	return {
+		$: 0,
+		d: type,
+		b: toBody,
+		a: toValue
+	};
+});
+
+var _Http_mapExpect = F2(function(func, expect)
+{
+	return {
+		$: 0,
+		d: expect.d,
+		b: expect.b,
+		a: function(x) { return func(expect.a(x)); }
+	};
+});
+
+function _Http_toDataView(arrayBuffer)
+{
+	return new DataView(arrayBuffer);
+}
+
+
+// BODY and PARTS
+
+var _Http_emptyBody = { $: 0 };
+var _Http_pair = F2(function(a, b) { return { $: 0, a: a, b: b }; });
+
+function _Http_toFormData(parts)
+{
+	for (var formData = new FormData(); parts.b; parts = parts.b) // WHILE_CONS
+	{
+		var part = parts.a;
+		formData.append(part.a, part.b);
+	}
+	return formData;
+}
+
+var _Http_bytesToBlob = F2(function(mime, bytes)
+{
+	return new Blob([bytes], { type: mime });
+});
+
+
+// PROGRESS
+
+function _Http_track(router, xhr, tracker)
+{
+	// TODO check out lengthComputable on loadstart event
+
+	xhr.upload.addEventListener('progress', function(event) {
+		if (xhr.c) { return; }
+		_Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Sending({
+			sent: event.loaded,
+			size: event.total
+		}))));
+	});
+	xhr.addEventListener('progress', function(event) {
+		if (xhr.c) { return; }
+		_Scheduler_rawSpawn(A2($elm$core$Platform$sendToSelf, router, _Utils_Tuple2(tracker, $elm$http$Http$Receiving({
+			received: event.loaded,
+			size: event.lengthComputable ? $elm$core$Maybe$Just(event.total) : $elm$core$Maybe$Nothing
+		}))));
+	});
+}
+
+
+// DECODER
+
+var _File_decoder = _Json_decodePrim(function(value) {
+	// NOTE: checks if `File` exists in case this is run on node
+	return (typeof File !== 'undefined' && value instanceof File)
+		? $elm$core$Result$Ok(value)
+		: _Json_expecting('a FILE', value);
+});
+
+
+// METADATA
+
+function _File_name(file) { return file.name; }
+function _File_mime(file) { return file.type; }
+function _File_size(file) { return file.size; }
+
+function _File_lastModified(file)
+{
+	return $elm$time$Time$millisToPosix(file.lastModified);
+}
+
+
+// DOWNLOAD
+
+var _File_downloadNode;
+
+function _File_getDownloadNode()
+{
+	return _File_downloadNode || (_File_downloadNode = document.createElement('a'));
+}
+
+var _File_download = F3(function(name, mime, content)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		var blob = new Blob([content], {type: mime});
+
+		// for IE10+
+		if (navigator.msSaveOrOpenBlob)
+		{
+			navigator.msSaveOrOpenBlob(blob, name);
+			return;
+		}
+
+		// for HTML5
+		var node = _File_getDownloadNode();
+		var objectUrl = URL.createObjectURL(blob);
+		node.href = objectUrl;
+		node.download = name;
+		_File_click(node);
+		URL.revokeObjectURL(objectUrl);
+	});
+});
+
+function _File_downloadUrl(href)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		var node = _File_getDownloadNode();
+		node.href = href;
+		node.download = '';
+		node.origin === location.origin || (node.target = '_blank');
+		_File_click(node);
+	});
+}
+
+
+// IE COMPATIBILITY
+
+function _File_makeBytesSafeForInternetExplorer(bytes)
+{
+	// only needed by IE10 and IE11 to fix https://github.com/elm/file/issues/10
+	// all other browsers can just run `new Blob([bytes])` directly with no problem
+	//
+	return new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength);
+}
+
+function _File_click(node)
+{
+	// only needed by IE10 and IE11 to fix https://github.com/elm/file/issues/11
+	// all other browsers have MouseEvent and do not need this conditional stuff
+	//
+	if (typeof MouseEvent === 'function')
+	{
+		node.dispatchEvent(new MouseEvent('click'));
+	}
+	else
+	{
+		var event = document.createEvent('MouseEvents');
+		event.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+		document.body.appendChild(node);
+		node.dispatchEvent(event);
+		document.body.removeChild(node);
+	}
+}
+
+
+// UPLOAD
+
+var _File_node;
+
+function _File_uploadOne(mimes)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		_File_node = document.createElement('input');
+		_File_node.type = 'file';
+		_File_node.accept = A2($elm$core$String$join, ',', mimes);
+		_File_node.addEventListener('change', function(event)
+		{
+			callback(_Scheduler_succeed(event.target.files[0]));
+		});
+		_File_click(_File_node);
+	});
+}
+
+function _File_uploadOneOrMore(mimes)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		_File_node = document.createElement('input');
+		_File_node.type = 'file';
+		_File_node.multiple = true;
+		_File_node.accept = A2($elm$core$String$join, ',', mimes);
+		_File_node.addEventListener('change', function(event)
+		{
+			var elmFiles = _List_fromArray(event.target.files);
+			callback(_Scheduler_succeed(_Utils_Tuple2(elmFiles.a, elmFiles.b)));
+		});
+		_File_click(_File_node);
+	});
+}
+
+
+// CONTENT
+
+function _File_toString(blob)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		var reader = new FileReader();
+		reader.addEventListener('loadend', function() {
+			callback(_Scheduler_succeed(reader.result));
+		});
+		reader.readAsText(blob);
+		return function() { reader.abort(); };
+	});
+}
+
+function _File_toBytes(blob)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		var reader = new FileReader();
+		reader.addEventListener('loadend', function() {
+			callback(_Scheduler_succeed(new DataView(reader.result)));
+		});
+		reader.readAsArrayBuffer(blob);
+		return function() { reader.abort(); };
+	});
+}
+
+function _File_toUrl(blob)
+{
+	return _Scheduler_binding(function(callback)
+	{
+		var reader = new FileReader();
+		reader.addEventListener('loadend', function() {
+			callback(_Scheduler_succeed(reader.result));
+		});
+		reader.readAsDataURL(blob);
+		return function() { reader.abort(); };
+	});
+}
+
+
+
+
+
+// STRINGS
+
+
+var _Parser_isSubString = F5(function(smallString, offset, row, col, bigString)
+{
+	var smallLength = smallString.length;
+	var isGood = offset + smallLength <= bigString.length;
+
+	for (var i = 0; isGood && i < smallLength; )
+	{
+		var code = bigString.charCodeAt(offset);
+		isGood =
+			smallString[i++] === bigString[offset++]
+			&& (
+				code === 0x000A /* \n */
+					? ( row++, col=1 )
+					: ( col++, (code & 0xF800) === 0xD800 ? smallString[i++] === bigString[offset++] : 1 )
+			)
+	}
+
+	return _Utils_Tuple3(isGood ? offset : -1, row, col);
+});
+
+
+
+// CHARS
+
+
+var _Parser_isSubChar = F3(function(predicate, offset, string)
+{
+	return (
+		string.length <= offset
+			? -1
+			:
+		(string.charCodeAt(offset) & 0xF800) === 0xD800
+			? (predicate(_Utils_chr(string.substr(offset, 2))) ? offset + 2 : -1)
+			:
+		(predicate(_Utils_chr(string[offset]))
+			? ((string[offset] === '\n') ? -2 : (offset + 1))
+			: -1
+		)
+	);
+});
+
+
+var _Parser_isAsciiCode = F3(function(code, offset, string)
+{
+	return string.charCodeAt(offset) === code;
+});
+
+
+
+// NUMBERS
+
+
+var _Parser_chompBase10 = F2(function(offset, string)
+{
+	for (; offset < string.length; offset++)
+	{
+		var code = string.charCodeAt(offset);
+		if (code < 0x30 || 0x39 < code)
+		{
+			return offset;
+		}
+	}
+	return offset;
+});
+
+
+var _Parser_consumeBase = F3(function(base, offset, string)
+{
+	for (var total = 0; offset < string.length; offset++)
+	{
+		var digit = string.charCodeAt(offset) - 0x30;
+		if (digit < 0 || base <= digit) break;
+		total = base * total + digit;
+	}
+	return _Utils_Tuple2(offset, total);
+});
+
+
+var _Parser_consumeBase16 = F2(function(offset, string)
+{
+	for (var total = 0; offset < string.length; offset++)
+	{
+		var code = string.charCodeAt(offset);
+		if (0x30 <= code && code <= 0x39)
+		{
+			total = 16 * total + code - 0x30;
+		}
+		else if (0x41 <= code && code <= 0x46)
+		{
+			total = 16 * total + code - 55;
+		}
+		else if (0x61 <= code && code <= 0x66)
+		{
+			total = 16 * total + code - 87;
+		}
+		else
+		{
+			break;
+		}
+	}
+	return _Utils_Tuple2(offset, total);
+});
+
+
+
+// FIND STRING
+
+
+var _Parser_findSubString = F5(function(smallString, offset, row, col, bigString)
+{
+	var newOffset = bigString.indexOf(smallString, offset);
+	var target = newOffset < 0 ? bigString.length : newOffset + smallString.length;
+
+	while (offset < target)
+	{
+		var code = bigString.charCodeAt(offset++);
+		code === 0x000A /* \n */
+			? ( col=1, row++ )
+			: ( col++, (code & 0xF800) === 0xD800 && offset++ )
+	}
+
+	return _Utils_Tuple3(newOffset, row, col);
+});
+var $elm$core$Basics$EQ = {$: 'EQ'};
+var $elm$core$Basics$LT = {$: 'LT'};
+var $elm$core$List$cons = _List_cons;
+var $elm$core$Elm$JsArray$foldr = _JsArray_foldr;
+var $elm$core$Array$foldr = F3(
+	function (func, baseCase, _v0) {
+		var tree = _v0.c;
+		var tail = _v0.d;
+		var helper = F2(
+			function (node, acc) {
+				if (node.$ === 'SubTree') {
+					var subTree = node.a;
+					return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree);
+				} else {
+					var values = node.a;
+					return A3($elm$core$Elm$JsArray$foldr, func, acc, values);
+				}
+			});
+		return A3(
+			$elm$core$Elm$JsArray$foldr,
+			helper,
+			A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail),
+			tree);
+	});
+var $elm$core$Array$toList = function (array) {
+	return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array);
+};
+var $elm$core$Dict$foldr = F3(
+	function (func, acc, t) {
+		foldr:
+		while (true) {
+			if (t.$ === 'RBEmpty_elm_builtin') {
+				return acc;
+			} else {
+				var key = t.b;
+				var value = t.c;
+				var left = t.d;
+				var right = t.e;
+				var $temp$func = func,
+					$temp$acc = A3(
+					func,
+					key,
+					value,
+					A3($elm$core$Dict$foldr, func, acc, right)),
+					$temp$t = left;
+				func = $temp$func;
+				acc = $temp$acc;
+				t = $temp$t;
+				continue foldr;
+			}
+		}
+	});
+var $elm$core$Dict$toList = function (dict) {
+	return A3(
+		$elm$core$Dict$foldr,
+		F3(
+			function (key, value, list) {
+				return A2(
+					$elm$core$List$cons,
+					_Utils_Tuple2(key, value),
+					list);
+			}),
+		_List_Nil,
+		dict);
+};
+var $elm$core$Dict$keys = function (dict) {
+	return A3(
+		$elm$core$Dict$foldr,
+		F3(
+			function (key, value, keyList) {
+				return A2($elm$core$List$cons, key, keyList);
+			}),
+		_List_Nil,
+		dict);
+};
+var $elm$core$Set$toList = function (_v0) {
+	var dict = _v0.a;
+	return $elm$core$Dict$keys(dict);
+};
+var $elm$core$Basics$GT = {$: 'GT'};
+var $elm$core$Result$Err = function (a) {
+	return {$: 'Err', a: a};
+};
+var $elm$json$Json$Decode$Failure = F2(
+	function (a, b) {
+		return {$: 'Failure', a: a, b: b};
+	});
+var $elm$json$Json$Decode$Field = F2(
+	function (a, b) {
+		return {$: 'Field', a: a, b: b};
+	});
+var $elm$json$Json$Decode$Index = F2(
+	function (a, b) {
+		return {$: 'Index', a: a, b: b};
+	});
+var $elm$core$Result$Ok = function (a) {
+	return {$: 'Ok', a: a};
+};
+var $elm$json$Json$Decode$OneOf = function (a) {
+	return {$: 'OneOf', a: a};
+};
+var $elm$core$Basics$False = {$: 'False'};
+var $elm$core$Basics$add = _Basics_add;
+var $elm$core$Maybe$Just = function (a) {
+	return {$: 'Just', a: a};
+};
+var $elm$core$Maybe$Nothing = {$: 'Nothing'};
+var $elm$core$String$all = _String_all;
+var $elm$core$Basics$and = _Basics_and;
+var $elm$core$Basics$append = _Utils_append;
+var $elm$json$Json$Encode$encode = _Json_encode;
+var $elm$core$String$fromInt = _String_fromNumber;
+var $elm$core$String$join = F2(
+	function (sep, chunks) {
+		return A2(
+			_String_join,
+			sep,
+			_List_toArray(chunks));
+	});
+var $elm$core$String$split = F2(
+	function (sep, string) {
+		return _List_fromArray(
+			A2(_String_split, sep, string));
+	});
+var $elm$json$Json$Decode$indent = function (str) {
+	return A2(
+		$elm$core$String$join,
+		'\n    ',
+		A2($elm$core$String$split, '\n', str));
+};
+var $elm$core$List$foldl = F3(
+	function (func, acc, list) {
+		foldl:
+		while (true) {
+			if (!list.b) {
+				return acc;
+			} else {
+				var x = list.a;
+				var xs = list.b;
+				var $temp$func = func,
+					$temp$acc = A2(func, x, acc),
+					$temp$list = xs;
+				func = $temp$func;
+				acc = $temp$acc;
+				list = $temp$list;
+				continue foldl;
+			}
+		}
+	});
+var $elm$core$List$length = function (xs) {
+	return A3(
+		$elm$core$List$foldl,
+		F2(
+			function (_v0, i) {
+				return i + 1;
+			}),
+		0,
+		xs);
+};
+var $elm$core$List$map2 = _List_map2;
+var $elm$core$Basics$le = _Utils_le;
+var $elm$core$Basics$sub = _Basics_sub;
+var $elm$core$List$rangeHelp = F3(
+	function (lo, hi, list) {
+		rangeHelp:
+		while (true) {
+			if (_Utils_cmp(lo, hi) < 1) {
+				var $temp$lo = lo,
+					$temp$hi = hi - 1,
+					$temp$list = A2($elm$core$List$cons, hi, list);
+				lo = $temp$lo;
+				hi = $temp$hi;
+				list = $temp$list;
+				continue rangeHelp;
+			} else {
+				return list;
+			}
+		}
+	});
+var $elm$core$List$range = F2(
+	function (lo, hi) {
+		return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil);
+	});
+var $elm$core$List$indexedMap = F2(
+	function (f, xs) {
+		return A3(
+			$elm$core$List$map2,
+			f,
+			A2(
+				$elm$core$List$range,
+				0,
+				$elm$core$List$length(xs) - 1),
+			xs);
+	});
+var $elm$core$Char$toCode = _Char_toCode;
+var $elm$core$Char$isLower = function (_char) {
+	var code = $elm$core$Char$toCode(_char);
+	return (97 <= code) && (code <= 122);
+};
+var $elm$core$Char$isUpper = function (_char) {
+	var code = $elm$core$Char$toCode(_char);
+	return (code <= 90) && (65 <= code);
+};
+var $elm$core$Basics$or = _Basics_or;
+var $elm$core$Char$isAlpha = function (_char) {
+	return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char);
+};
+var $elm$core$Char$isDigit = function (_char) {
+	var code = $elm$core$Char$toCode(_char);
+	return (code <= 57) && (48 <= code);
+};
+var $elm$core$Char$isAlphaNum = function (_char) {
+	return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char));
+};
+var $elm$core$List$reverse = function (list) {
+	return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list);
+};
+var $elm$core$String$uncons = _String_uncons;
+var $elm$json$Json$Decode$errorOneOf = F2(
+	function (i, error) {
+		return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent(
+			$elm$json$Json$Decode$errorToString(error))));
+	});
+var $elm$json$Json$Decode$errorToString = function (error) {
+	return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil);
+};
+var $elm$json$Json$Decode$errorToStringHelp = F2(
+	function (error, context) {
+		errorToStringHelp:
+		while (true) {
+			switch (error.$) {
+				case 'Field':
+					var f = error.a;
+					var err = error.b;
+					var isSimple = function () {
+						var _v1 = $elm$core$String$uncons(f);
+						if (_v1.$ === 'Nothing') {
+							return false;
+						} else {
+							var _v2 = _v1.a;
+							var _char = _v2.a;
+							var rest = _v2.b;
+							return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest);
+						}
+					}();
+					var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']'));
+					var $temp$error = err,
+						$temp$context = A2($elm$core$List$cons, fieldName, context);
+					error = $temp$error;
+					context = $temp$context;
+					continue errorToStringHelp;
+				case 'Index':
+					var i = error.a;
+					var err = error.b;
+					var indexName = '[' + ($elm$core$String$fromInt(i) + ']');
+					var $temp$error = err,
+						$temp$context = A2($elm$core$List$cons, indexName, context);
+					error = $temp$error;
+					context = $temp$context;
+					continue errorToStringHelp;
+				case 'OneOf':
+					var errors = error.a;
+					if (!errors.b) {
+						return 'Ran into a Json.Decode.oneOf with no possibilities' + function () {
+							if (!context.b) {
+								return '!';
+							} else {
+								return ' at json' + A2(
+									$elm$core$String$join,
+									'',
+									$elm$core$List$reverse(context));
+							}
+						}();
+					} else {
+						if (!errors.b.b) {
+							var err = errors.a;
+							var $temp$error = err,
+								$temp$context = context;
+							error = $temp$error;
+							context = $temp$context;
+							continue errorToStringHelp;
+						} else {
+							var starter = function () {
+								if (!context.b) {
+									return 'Json.Decode.oneOf';
+								} else {
+									return 'The Json.Decode.oneOf at json' + A2(
+										$elm$core$String$join,
+										'',
+										$elm$core$List$reverse(context));
+								}
+							}();
+							var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt(
+								$elm$core$List$length(errors)) + ' ways:'));
+							return A2(
+								$elm$core$String$join,
+								'\n\n',
+								A2(
+									$elm$core$List$cons,
+									introduction,
+									A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors)));
+						}
+					}
+				default:
+					var msg = error.a;
+					var json = error.b;
+					var introduction = function () {
+						if (!context.b) {
+							return 'Problem with the given value:\n\n';
+						} else {
+							return 'Problem with the value at json' + (A2(
+								$elm$core$String$join,
+								'',
+								$elm$core$List$reverse(context)) + ':\n\n    ');
+						}
+					}();
+					return introduction + ($elm$json$Json$Decode$indent(
+						A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg));
+			}
+		}
+	});
+var $elm$core$Array$branchFactor = 32;
+var $elm$core$Array$Array_elm_builtin = F4(
+	function (a, b, c, d) {
+		return {$: 'Array_elm_builtin', a: a, b: b, c: c, d: d};
+	});
+var $elm$core$Elm$JsArray$empty = _JsArray_empty;
+var $elm$core$Basics$ceiling = _Basics_ceiling;
+var $elm$core$Basics$fdiv = _Basics_fdiv;
+var $elm$core$Basics$logBase = F2(
+	function (base, number) {
+		return _Basics_log(number) / _Basics_log(base);
+	});
+var $elm$core$Basics$toFloat = _Basics_toFloat;
+var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling(
+	A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor));
+var $elm$core$Array$empty = A4($elm$core$Array$Array_elm_builtin, 0, $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, $elm$core$Elm$JsArray$empty);
+var $elm$core$Elm$JsArray$initialize = _JsArray_initialize;
+var $elm$core$Array$Leaf = function (a) {
+	return {$: 'Leaf', a: a};
+};
+var $elm$core$Basics$apL = F2(
+	function (f, x) {
+		return f(x);
+	});
+var $elm$core$Basics$apR = F2(
+	function (x, f) {
+		return f(x);
+	});
+var $elm$core$Basics$eq = _Utils_equal;
+var $elm$core$Basics$floor = _Basics_floor;
+var $elm$core$Elm$JsArray$length = _JsArray_length;
+var $elm$core$Basics$gt = _Utils_gt;
+var $elm$core$Basics$max = F2(
+	function (x, y) {
+		return (_Utils_cmp(x, y) > 0) ? x : y;
+	});
+var $elm$core$Basics$mul = _Basics_mul;
+var $elm$core$Array$SubTree = function (a) {
+	return {$: 'SubTree', a: a};
+};
+var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList;
+var $elm$core$Array$compressNodes = F2(
+	function (nodes, acc) {
+		compressNodes:
+		while (true) {
+			var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes);
+			var node = _v0.a;
+			var remainingNodes = _v0.b;
+			var newAcc = A2(
+				$elm$core$List$cons,
+				$elm$core$Array$SubTree(node),
+				acc);
+			if (!remainingNodes.b) {
+				return $elm$core$List$reverse(newAcc);
+			} else {
+				var $temp$nodes = remainingNodes,
+					$temp$acc = newAcc;
+				nodes = $temp$nodes;
+				acc = $temp$acc;
+				continue compressNodes;
+			}
+		}
+	});
+var $elm$core$Tuple$first = function (_v0) {
+	var x = _v0.a;
+	return x;
+};
+var $elm$core$Array$treeFromBuilder = F2(
+	function (nodeList, nodeListSize) {
+		treeFromBuilder:
+		while (true) {
+			var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor);
+			if (newNodeSize === 1) {
+				return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a;
+			} else {
+				var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil),
+					$temp$nodeListSize = newNodeSize;
+				nodeList = $temp$nodeList;
+				nodeListSize = $temp$nodeListSize;
+				continue treeFromBuilder;
+			}
+		}
+	});
+var $elm$core$Array$builderToArray = F2(
+	function (reverseNodeList, builder) {
+		if (!builder.nodeListSize) {
+			return A4(
+				$elm$core$Array$Array_elm_builtin,
+				$elm$core$Elm$JsArray$length(builder.tail),
+				$elm$core$Array$shiftStep,
+				$elm$core$Elm$JsArray$empty,
+				builder.tail);
+		} else {
+			var treeLen = builder.nodeListSize * $elm$core$Array$branchFactor;
+			var depth = $elm$core$Basics$floor(
+				A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1));
+			var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.nodeList) : builder.nodeList;
+			var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.nodeListSize);
+			return A4(
+				$elm$core$Array$Array_elm_builtin,
+				$elm$core$Elm$JsArray$length(builder.tail) + treeLen,
+				A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep),
+				tree,
+				builder.tail);
+		}
+	});
+var $elm$core$Basics$idiv = _Basics_idiv;
+var $elm$core$Basics$lt = _Utils_lt;
+var $elm$core$Array$initializeHelp = F5(
+	function (fn, fromIndex, len, nodeList, tail) {
+		initializeHelp:
+		while (true) {
+			if (fromIndex < 0) {
+				return A2(
+					$elm$core$Array$builderToArray,
+					false,
+					{nodeList: nodeList, nodeListSize: (len / $elm$core$Array$branchFactor) | 0, tail: tail});
+			} else {
+				var leaf = $elm$core$Array$Leaf(
+					A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn));
+				var $temp$fn = fn,
+					$temp$fromIndex = fromIndex - $elm$core$Array$branchFactor,
+					$temp$len = len,
+					$temp$nodeList = A2($elm$core$List$cons, leaf, nodeList),
+					$temp$tail = tail;
+				fn = $temp$fn;
+				fromIndex = $temp$fromIndex;
+				len = $temp$len;
+				nodeList = $temp$nodeList;
+				tail = $temp$tail;
+				continue initializeHelp;
+			}
+		}
+	});
+var $elm$core$Basics$remainderBy = _Basics_remainderBy;
+var $elm$core$Array$initialize = F2(
+	function (len, fn) {
+		if (len <= 0) {
+			return $elm$core$Array$empty;
+		} else {
+			var tailLen = len % $elm$core$Array$branchFactor;
+			var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn);
+			var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor;
+			return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail);
+		}
+	});
+var $elm$core$Basics$True = {$: 'True'};
+var $elm$core$Result$isOk = function (result) {
+	if (result.$ === 'Ok') {
+		return true;
+	} else {
+		return false;
+	}
+};
+var $elm$json$Json$Decode$map = _Json_map1;
+var $elm$json$Json$Decode$map2 = _Json_map2;
+var $elm$json$Json$Decode$succeed = _Json_succeed;
+var $elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) {
+	switch (handler.$) {
+		case 'Normal':
+			return 0;
+		case 'MayStopPropagation':
+			return 1;
+		case 'MayPreventDefault':
+			return 2;
+		default:
+			return 3;
+	}
+};
+var $elm$browser$Browser$External = function (a) {
+	return {$: 'External', a: a};
+};
+var $elm$browser$Browser$Internal = function (a) {
+	return {$: 'Internal', a: a};
+};
+var $elm$core$Basics$identity = function (x) {
+	return x;
+};
+var $elm$browser$Browser$Dom$NotFound = function (a) {
+	return {$: 'NotFound', a: a};
+};
+var $elm$url$Url$Http = {$: 'Http'};
+var $elm$url$Url$Https = {$: 'Https'};
+var $elm$url$Url$Url = F6(
+	function (protocol, host, port_, path, query, fragment) {
+		return {fragment: fragment, host: host, path: path, port_: port_, protocol: protocol, query: query};
+	});
+var $elm$core$String$contains = _String_contains;
+var $elm$core$String$length = _String_length;
+var $elm$core$String$slice = _String_slice;
+var $elm$core$String$dropLeft = F2(
+	function (n, string) {
+		return (n < 1) ? string : A3(
+			$elm$core$String$slice,
+			n,
+			$elm$core$String$length(string),
+			string);
+	});
+var $elm$core$String$indexes = _String_indexes;
+var $elm$core$String$isEmpty = function (string) {
+	return string === '';
+};
+var $elm$core$String$left = F2(
+	function (n, string) {
+		return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string);
+	});
+var $elm$core$String$toInt = _String_toInt;
+var $elm$url$Url$chompBeforePath = F5(
+	function (protocol, path, params, frag, str) {
+		if ($elm$core$String$isEmpty(str) || A2($elm$core$String$contains, '@', str)) {
+			return $elm$core$Maybe$Nothing;
+		} else {
+			var _v0 = A2($elm$core$String$indexes, ':', str);
+			if (!_v0.b) {
+				return $elm$core$Maybe$Just(
+					A6($elm$url$Url$Url, protocol, str, $elm$core$Maybe$Nothing, path, params, frag));
+			} else {
+				if (!_v0.b.b) {
+					var i = _v0.a;
+					var _v1 = $elm$core$String$toInt(
+						A2($elm$core$String$dropLeft, i + 1, str));
+					if (_v1.$ === 'Nothing') {
+						return $elm$core$Maybe$Nothing;
+					} else {
+						var port_ = _v1;
+						return $elm$core$Maybe$Just(
+							A6(
+								$elm$url$Url$Url,
+								protocol,
+								A2($elm$core$String$left, i, str),
+								port_,
+								path,
+								params,
+								frag));
+					}
+				} else {
+					return $elm$core$Maybe$Nothing;
+				}
+			}
+		}
+	});
+var $elm$url$Url$chompBeforeQuery = F4(
+	function (protocol, params, frag, str) {
+		if ($elm$core$String$isEmpty(str)) {
+			return $elm$core$Maybe$Nothing;
+		} else {
+			var _v0 = A2($elm$core$String$indexes, '/', str);
+			if (!_v0.b) {
+				return A5($elm$url$Url$chompBeforePath, protocol, '/', params, frag, str);
+			} else {
+				var i = _v0.a;
+				return A5(
+					$elm$url$Url$chompBeforePath,
+					protocol,
+					A2($elm$core$String$dropLeft, i, str),
+					params,
+					frag,
+					A2($elm$core$String$left, i, str));
+			}
+		}
+	});
+var $elm$url$Url$chompBeforeFragment = F3(
+	function (protocol, frag, str) {
+		if ($elm$core$String$isEmpty(str)) {
+			return $elm$core$Maybe$Nothing;
+		} else {
+			var _v0 = A2($elm$core$String$indexes, '?', str);
+			if (!_v0.b) {
+				return A4($elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Nothing, frag, str);
+			} else {
+				var i = _v0.a;
+				return A4(
+					$elm$url$Url$chompBeforeQuery,
+					protocol,
+					$elm$core$Maybe$Just(
+						A2($elm$core$String$dropLeft, i + 1, str)),
+					frag,
+					A2($elm$core$String$left, i, str));
+			}
+		}
+	});
+var $elm$url$Url$chompAfterProtocol = F2(
+	function (protocol, str) {
+		if ($elm$core$String$isEmpty(str)) {
+			return $elm$core$Maybe$Nothing;
+		} else {
+			var _v0 = A2($elm$core$String$indexes, '#', str);
+			if (!_v0.b) {
+				return A3($elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Nothing, str);
+			} else {
+				var i = _v0.a;
+				return A3(
+					$elm$url$Url$chompBeforeFragment,
+					protocol,
+					$elm$core$Maybe$Just(
+						A2($elm$core$String$dropLeft, i + 1, str)),
+					A2($elm$core$String$left, i, str));
+			}
+		}
+	});
+var $elm$core$String$startsWith = _String_startsWith;
+var $elm$url$Url$fromString = function (str) {
+	return A2($elm$core$String$startsWith, 'http://', str) ? A2(
+		$elm$url$Url$chompAfterProtocol,
+		$elm$url$Url$Http,
+		A2($elm$core$String$dropLeft, 7, str)) : (A2($elm$core$String$startsWith, 'https://', str) ? A2(
+		$elm$url$Url$chompAfterProtocol,
+		$elm$url$Url$Https,
+		A2($elm$core$String$dropLeft, 8, str)) : $elm$core$Maybe$Nothing);
+};
+var $elm$core$Basics$never = function (_v0) {
+	never:
+	while (true) {
+		var nvr = _v0.a;
+		var $temp$_v0 = nvr;
+		_v0 = $temp$_v0;
+		continue never;
+	}
+};
+var $elm$core$Task$Perform = function (a) {
+	return {$: 'Perform', a: a};
+};
+var $elm$core$Task$succeed = _Scheduler_succeed;
+var $elm$core$Task$init = $elm$core$Task$succeed(_Utils_Tuple0);
+var $elm$core$List$foldrHelper = F4(
+	function (fn, acc, ctr, ls) {
+		if (!ls.b) {
+			return acc;
+		} else {
+			var a = ls.a;
+			var r1 = ls.b;
+			if (!r1.b) {
+				return A2(fn, a, acc);
+			} else {
+				var b = r1.a;
+				var r2 = r1.b;
+				if (!r2.b) {
+					return A2(
+						fn,
+						a,
+						A2(fn, b, acc));
+				} else {
+					var c = r2.a;
+					var r3 = r2.b;
+					if (!r3.b) {
+						return A2(
+							fn,
+							a,
+							A2(
+								fn,
+								b,
+								A2(fn, c, acc)));
+					} else {
+						var d = r3.a;
+						var r4 = r3.b;
+						var res = (ctr > 500) ? A3(
+							$elm$core$List$foldl,
+							fn,
+							acc,
+							$elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4);
+						return A2(
+							fn,
+							a,
+							A2(
+								fn,
+								b,
+								A2(
+									fn,
+									c,
+									A2(fn, d, res))));
+					}
+				}
+			}
+		}
+	});
+var $elm$core$List$foldr = F3(
+	function (fn, acc, ls) {
+		return A4($elm$core$List$foldrHelper, fn, acc, 0, ls);
+	});
+var $elm$core$List$map = F2(
+	function (f, xs) {
+		return A3(
+			$elm$core$List$foldr,
+			F2(
+				function (x, acc) {
+					return A2(
+						$elm$core$List$cons,
+						f(x),
+						acc);
+				}),
+			_List_Nil,
+			xs);
+	});
+var $elm$core$Task$andThen = _Scheduler_andThen;
+var $elm$core$Task$map = F2(
+	function (func, taskA) {
+		return A2(
+			$elm$core$Task$andThen,
+			function (a) {
+				return $elm$core$Task$succeed(
+					func(a));
+			},
+			taskA);
+	});
+var $elm$core$Task$map2 = F3(
+	function (func, taskA, taskB) {
+		return A2(
+			$elm$core$Task$andThen,
+			function (a) {
+				return A2(
+					$elm$core$Task$andThen,
+					function (b) {
+						return $elm$core$Task$succeed(
+							A2(func, a, b));
+					},
+					taskB);
+			},
+			taskA);
+	});
+var $elm$core$Task$sequence = function (tasks) {
+	return A3(
+		$elm$core$List$foldr,
+		$elm$core$Task$map2($elm$core$List$cons),
+		$elm$core$Task$succeed(_List_Nil),
+		tasks);
+};
+var $elm$core$Platform$sendToApp = _Platform_sendToApp;
+var $elm$core$Task$spawnCmd = F2(
+	function (router, _v0) {
+		var task = _v0.a;
+		return _Scheduler_spawn(
+			A2(
+				$elm$core$Task$andThen,
+				$elm$core$Platform$sendToApp(router),
+				task));
+	});
+var $elm$core$Task$onEffects = F3(
+	function (router, commands, state) {
+		return A2(
+			$elm$core$Task$map,
+			function (_v0) {
+				return _Utils_Tuple0;
+			},
+			$elm$core$Task$sequence(
+				A2(
+					$elm$core$List$map,
+					$elm$core$Task$spawnCmd(router),
+					commands)));
+	});
+var $elm$core$Task$onSelfMsg = F3(
+	function (_v0, _v1, _v2) {
+		return $elm$core$Task$succeed(_Utils_Tuple0);
+	});
+var $elm$core$Task$cmdMap = F2(
+	function (tagger, _v0) {
+		var task = _v0.a;
+		return $elm$core$Task$Perform(
+			A2($elm$core$Task$map, tagger, task));
+	});
+_Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap);
+var $elm$core$Task$command = _Platform_leaf('Task');
+var $elm$core$Task$perform = F2(
+	function (toMessage, task) {
+		return $elm$core$Task$command(
+			$elm$core$Task$Perform(
+				A2($elm$core$Task$map, toMessage, task)));
+	});
+var $elm$browser$Browser$document = _Browser_document;
+var $author$project$Types$Light = {$: 'Light'};
+var $author$project$Types$Loading = {$: 'Loading'};
+var $author$project$Types$Valid = {$: 'Valid'};
+var $author$project$Main$emptySvg = '<svg> . . . </svg>';
+var $elm$regex$Regex$Match = F4(
+	function (match, index, number, submatches) {
+		return {index: index, match: match, number: number, submatches: submatches};
+	});
+var $elm$regex$Regex$fromStringWith = _Regex_fromStringWith;
+var $elm$regex$Regex$fromString = function (string) {
+	return A2(
+		$elm$regex$Regex$fromStringWith,
+		{caseInsensitive: false, multiline: false},
+		string);
+};
+var $elm$regex$Regex$never = _Regex_never;
+var $elm$core$Maybe$withDefault = F2(
+	function (_default, maybe) {
+		if (maybe.$ === 'Just') {
+			var value = maybe.a;
+			return value;
+		} else {
+			return _default;
+		}
+	});
+var $author$project$Main$init = {
+	editorScroll: _Utils_Tuple2(0, 0),
+	fileName: 'example.svg',
+	image: $author$project$Main$emptySvg,
+	load: $author$project$Types$Loading,
+	mode: $author$project$Types$Light,
+	status: $author$project$Types$Valid,
+	uriEncoder: A2(
+		$elm$core$Maybe$withDefault,
+		$elm$regex$Regex$never,
+		$elm$regex$Regex$fromString('!|#|\\$|%|&|\'|\\(|\\)|\\*|\\+|,|\\/|:|;|=|\\?|@|\\[|\\]'))
+};
+var $author$project$Types$Load = function (a) {
+	return {$: 'Load', a: a};
+};
+var $elm$http$Http$BadStatus_ = F2(
+	function (a, b) {
+		return {$: 'BadStatus_', a: a, b: b};
+	});
+var $elm$http$Http$BadUrl_ = function (a) {
+	return {$: 'BadUrl_', a: a};
+};
+var $elm$http$Http$GoodStatus_ = F2(
+	function (a, b) {
+		return {$: 'GoodStatus_', a: a, b: b};
+	});
+var $elm$http$Http$NetworkError_ = {$: 'NetworkError_'};
+var $elm$http$Http$Receiving = function (a) {
+	return {$: 'Receiving', a: a};
+};
+var $elm$http$Http$Sending = function (a) {
+	return {$: 'Sending', a: a};
+};
+var $elm$http$Http$Timeout_ = {$: 'Timeout_'};
+var $elm$core$Dict$RBEmpty_elm_builtin = {$: 'RBEmpty_elm_builtin'};
+var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin;
+var $elm$core$Maybe$isJust = function (maybe) {
+	if (maybe.$ === 'Just') {
+		return true;
+	} else {
+		return false;
+	}
+};
+var $elm$core$Platform$sendToSelf = _Platform_sendToSelf;
+var $elm$core$Basics$compare = _Utils_compare;
+var $elm$core$Dict$get = F2(
+	function (targetKey, dict) {
+		get:
+		while (true) {
+			if (dict.$ === 'RBEmpty_elm_builtin') {
+				return $elm$core$Maybe$Nothing;
+			} else {
+				var key = dict.b;
+				var value = dict.c;
+				var left = dict.d;
+				var right = dict.e;
+				var _v1 = A2($elm$core$Basics$compare, targetKey, key);
+				switch (_v1.$) {
+					case 'LT':
+						var $temp$targetKey = targetKey,
+							$temp$dict = left;
+						targetKey = $temp$targetKey;
+						dict = $temp$dict;
+						continue get;
+					case 'EQ':
+						return $elm$core$Maybe$Just(value);
+					default:
+						var $temp$targetKey = targetKey,
+							$temp$dict = right;
+						targetKey = $temp$targetKey;
+						dict = $temp$dict;
+						continue get;
+				}
+			}
+		}
+	});
+var $elm$core$Dict$Black = {$: 'Black'};
+var $elm$core$Dict$RBNode_elm_builtin = F5(
+	function (a, b, c, d, e) {
+		return {$: 'RBNode_elm_builtin', a: a, b: b, c: c, d: d, e: e};
+	});
+var $elm$core$Dict$Red = {$: 'Red'};
+var $elm$core$Dict$balance = F5(
+	function (color, key, value, left, right) {
+		if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Red')) {
+			var _v1 = right.a;
+			var rK = right.b;
+			var rV = right.c;
+			var rLeft = right.d;
+			var rRight = right.e;
+			if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
+				var _v3 = left.a;
+				var lK = left.b;
+				var lV = left.c;
+				var lLeft = left.d;
+				var lRight = left.e;
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Red,
+					key,
+					value,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, lK, lV, lLeft, lRight),
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rLeft, rRight));
+			} else {
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					color,
+					rK,
+					rV,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, left, rLeft),
+					rRight);
+			}
+		} else {
+			if ((((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) && (left.d.$ === 'RBNode_elm_builtin')) && (left.d.a.$ === 'Red')) {
+				var _v5 = left.a;
+				var lK = left.b;
+				var lV = left.c;
+				var _v6 = left.d;
+				var _v7 = _v6.a;
+				var llK = _v6.b;
+				var llV = _v6.c;
+				var llLeft = _v6.d;
+				var llRight = _v6.e;
+				var lRight = left.e;
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Red,
+					lK,
+					lV,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, lRight, right));
+			} else {
+				return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right);
+			}
+		}
+	});
+var $elm$core$Dict$insertHelp = F3(
+	function (key, value, dict) {
+		if (dict.$ === 'RBEmpty_elm_builtin') {
+			return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, $elm$core$Dict$RBEmpty_elm_builtin, $elm$core$Dict$RBEmpty_elm_builtin);
+		} else {
+			var nColor = dict.a;
+			var nKey = dict.b;
+			var nValue = dict.c;
+			var nLeft = dict.d;
+			var nRight = dict.e;
+			var _v1 = A2($elm$core$Basics$compare, key, nKey);
+			switch (_v1.$) {
+				case 'LT':
+					return A5(
+						$elm$core$Dict$balance,
+						nColor,
+						nKey,
+						nValue,
+						A3($elm$core$Dict$insertHelp, key, value, nLeft),
+						nRight);
+				case 'EQ':
+					return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight);
+				default:
+					return A5(
+						$elm$core$Dict$balance,
+						nColor,
+						nKey,
+						nValue,
+						nLeft,
+						A3($elm$core$Dict$insertHelp, key, value, nRight));
+			}
+		}
+	});
+var $elm$core$Dict$insert = F3(
+	function (key, value, dict) {
+		var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict);
+		if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
+			var _v1 = _v0.a;
+			var k = _v0.b;
+			var v = _v0.c;
+			var l = _v0.d;
+			var r = _v0.e;
+			return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
+		} else {
+			var x = _v0;
+			return x;
+		}
+	});
+var $elm$core$Dict$getMin = function (dict) {
+	getMin:
+	while (true) {
+		if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
+			var left = dict.d;
+			var $temp$dict = left;
+			dict = $temp$dict;
+			continue getMin;
+		} else {
+			return dict;
+		}
+	}
+};
+var $elm$core$Dict$moveRedLeft = function (dict) {
+	if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
+		if ((dict.e.d.$ === 'RBNode_elm_builtin') && (dict.e.d.a.$ === 'Red')) {
+			var clr = dict.a;
+			var k = dict.b;
+			var v = dict.c;
+			var _v1 = dict.d;
+			var lClr = _v1.a;
+			var lK = _v1.b;
+			var lV = _v1.c;
+			var lLeft = _v1.d;
+			var lRight = _v1.e;
+			var _v2 = dict.e;
+			var rClr = _v2.a;
+			var rK = _v2.b;
+			var rV = _v2.c;
+			var rLeft = _v2.d;
+			var _v3 = rLeft.a;
+			var rlK = rLeft.b;
+			var rlV = rLeft.c;
+			var rlL = rLeft.d;
+			var rlR = rLeft.e;
+			var rRight = _v2.e;
+			return A5(
+				$elm$core$Dict$RBNode_elm_builtin,
+				$elm$core$Dict$Red,
+				rlK,
+				rlV,
+				A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Black,
+					k,
+					v,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
+					rlL),
+				A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rlR, rRight));
+		} else {
+			var clr = dict.a;
+			var k = dict.b;
+			var v = dict.c;
+			var _v4 = dict.d;
+			var lClr = _v4.a;
+			var lK = _v4.b;
+			var lV = _v4.c;
+			var lLeft = _v4.d;
+			var lRight = _v4.e;
+			var _v5 = dict.e;
+			var rClr = _v5.a;
+			var rK = _v5.b;
+			var rV = _v5.c;
+			var rLeft = _v5.d;
+			var rRight = _v5.e;
+			if (clr.$ === 'Black') {
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Black,
+					k,
+					v,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
+			} else {
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Black,
+					k,
+					v,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
+			}
+		}
+	} else {
+		return dict;
+	}
+};
+var $elm$core$Dict$moveRedRight = function (dict) {
+	if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
+		if ((dict.d.d.$ === 'RBNode_elm_builtin') && (dict.d.d.a.$ === 'Red')) {
+			var clr = dict.a;
+			var k = dict.b;
+			var v = dict.c;
+			var _v1 = dict.d;
+			var lClr = _v1.a;
+			var lK = _v1.b;
+			var lV = _v1.c;
+			var _v2 = _v1.d;
+			var _v3 = _v2.a;
+			var llK = _v2.b;
+			var llV = _v2.c;
+			var llLeft = _v2.d;
+			var llRight = _v2.e;
+			var lRight = _v1.e;
+			var _v4 = dict.e;
+			var rClr = _v4.a;
+			var rK = _v4.b;
+			var rV = _v4.c;
+			var rLeft = _v4.d;
+			var rRight = _v4.e;
+			return A5(
+				$elm$core$Dict$RBNode_elm_builtin,
+				$elm$core$Dict$Red,
+				lK,
+				lV,
+				A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
+				A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Black,
+					k,
+					v,
+					lRight,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)));
+		} else {
+			var clr = dict.a;
+			var k = dict.b;
+			var v = dict.c;
+			var _v5 = dict.d;
+			var lClr = _v5.a;
+			var lK = _v5.b;
+			var lV = _v5.c;
+			var lLeft = _v5.d;
+			var lRight = _v5.e;
+			var _v6 = dict.e;
+			var rClr = _v6.a;
+			var rK = _v6.b;
+			var rV = _v6.c;
+			var rLeft = _v6.d;
+			var rRight = _v6.e;
+			if (clr.$ === 'Black') {
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Black,
+					k,
+					v,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
+			} else {
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					$elm$core$Dict$Black,
+					k,
+					v,
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
+					A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
+			}
+		}
+	} else {
+		return dict;
+	}
+};
+var $elm$core$Dict$removeHelpPrepEQGT = F7(
+	function (targetKey, dict, color, key, value, left, right) {
+		if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
+			var _v1 = left.a;
+			var lK = left.b;
+			var lV = left.c;
+			var lLeft = left.d;
+			var lRight = left.e;
+			return A5(
+				$elm$core$Dict$RBNode_elm_builtin,
+				color,
+				lK,
+				lV,
+				lLeft,
+				A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, lRight, right));
+		} else {
+			_v2$2:
+			while (true) {
+				if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Black')) {
+					if (right.d.$ === 'RBNode_elm_builtin') {
+						if (right.d.a.$ === 'Black') {
+							var _v3 = right.a;
+							var _v4 = right.d;
+							var _v5 = _v4.a;
+							return $elm$core$Dict$moveRedRight(dict);
+						} else {
+							break _v2$2;
+						}
+					} else {
+						var _v6 = right.a;
+						var _v7 = right.d;
+						return $elm$core$Dict$moveRedRight(dict);
+					}
+				} else {
+					break _v2$2;
+				}
+			}
+			return dict;
+		}
+	});
+var $elm$core$Dict$removeMin = function (dict) {
+	if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
+		var color = dict.a;
+		var key = dict.b;
+		var value = dict.c;
+		var left = dict.d;
+		var lColor = left.a;
+		var lLeft = left.d;
+		var right = dict.e;
+		if (lColor.$ === 'Black') {
+			if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
+				var _v3 = lLeft.a;
+				return A5(
+					$elm$core$Dict$RBNode_elm_builtin,
+					color,
+					key,
+					value,
+					$elm$core$Dict$removeMin(left),
+					right);
+			} else {
+				var _v4 = $elm$core$Dict$moveRedLeft(dict);
+				if (_v4.$ === 'RBNode_elm_builtin') {
+					var nColor = _v4.a;
+					var nKey = _v4.b;
+					var nValue = _v4.c;
+					var nLeft = _v4.d;
+					var nRight = _v4.e;
+					return A5(
+						$elm$core$Dict$balance,
+						nColor,
+						nKey,
+						nValue,
+						$elm$core$Dict$removeMin(nLeft),
+						nRight);
+				} else {
+					return $elm$core$Dict$RBEmpty_elm_builtin;
+				}
+			}
+		} else {
+			return A5(
+				$elm$core$Dict$RBNode_elm_builtin,
+				color,
+				key,
+				value,
+				$elm$core$Dict$removeMin(left),
+				right);
+		}
+	} else {
+		return $elm$core$Dict$RBEmpty_elm_builtin;
+	}
+};
+var $elm$core$Dict$removeHelp = F2(
+	function (targetKey, dict) {
+		if (dict.$ === 'RBEmpty_elm_builtin') {
+			return $elm$core$Dict$RBEmpty_elm_builtin;
+		} else {
+			var color = dict.a;
+			var key = dict.b;
+			var value = dict.c;
+			var left = dict.d;
+			var right = dict.e;
+			if (_Utils_cmp(targetKey, key) < 0) {
+				if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Black')) {
+					var _v4 = left.a;
+					var lLeft = left.d;
+					if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
+						var _v6 = lLeft.a;
+						return A5(
+							$elm$core$Dict$RBNode_elm_builtin,
+							color,
+							key,
+							value,
+							A2($elm$core$Dict$removeHelp, targetKey, left),
+							right);
+					} else {
+						var _v7 = $elm$core$Dict$moveRedLeft(dict);
+						if (_v7.$ === 'RBNode_elm_builtin') {
+							var nColor = _v7.a;
+							var nKey = _v7.b;
+							var nValue = _v7.c;
+							var nLeft = _v7.d;
+							var nRight = _v7.e;
+							return A5(
+								$elm$core$Dict$balance,
+								nColor,
+								nKey,
+								nValue,
+								A2($elm$core$Dict$removeHelp, targetKey, nLeft),
+								nRight);
+						} else {
+							return $elm$core$Dict$RBEmpty_elm_builtin;
+						}
+					}
+				} else {
+					return A5(
+						$elm$core$Dict$RBNode_elm_builtin,
+						color,
+						key,
+						value,
+						A2($elm$core$Dict$removeHelp, targetKey, left),
+						right);
+				}
+			} else {
+				return A2(
+					$elm$core$Dict$removeHelpEQGT,
+					targetKey,
+					A7($elm$core$Dict$removeHelpPrepEQGT, targetKey, dict, color, key, value, left, right));
+			}
+		}
+	});
+var $elm$core$Dict$removeHelpEQGT = F2(
+	function (targetKey, dict) {
+		if (dict.$ === 'RBNode_elm_builtin') {
+			var color = dict.a;
+			var key = dict.b;
+			var value = dict.c;
+			var left = dict.d;
+			var right = dict.e;
+			if (_Utils_eq(targetKey, key)) {
+				var _v1 = $elm$core$Dict$getMin(right);
+				if (_v1.$ === 'RBNode_elm_builtin') {
+					var minKey = _v1.b;
+					var minValue = _v1.c;
+					return A5(
+						$elm$core$Dict$balance,
+						color,
+						minKey,
+						minValue,
+						left,
+						$elm$core$Dict$removeMin(right));
+				} else {
+					return $elm$core$Dict$RBEmpty_elm_builtin;
+				}
+			} else {
+				return A5(
+					$elm$core$Dict$balance,
+					color,
+					key,
+					value,
+					left,
+					A2($elm$core$Dict$removeHelp, targetKey, right));
+			}
+		} else {
+			return $elm$core$Dict$RBEmpty_elm_builtin;
+		}
+	});
+var $elm$core$Dict$remove = F2(
+	function (key, dict) {
+		var _v0 = A2($elm$core$Dict$removeHelp, key, dict);
+		if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
+			var _v1 = _v0.a;
+			var k = _v0.b;
+			var v = _v0.c;
+			var l = _v0.d;
+			var r = _v0.e;
+			return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
+		} else {
+			var x = _v0;
+			return x;
+		}
+	});
+var $elm$core$Dict$update = F3(
+	function (targetKey, alter, dictionary) {
+		var _v0 = alter(
+			A2($elm$core$Dict$get, targetKey, dictionary));
+		if (_v0.$ === 'Just') {
+			var value = _v0.a;
+			return A3($elm$core$Dict$insert, targetKey, value, dictionary);
+		} else {
+			return A2($elm$core$Dict$remove, targetKey, dictionary);
+		}
+	});
+var $elm$core$Basics$composeR = F3(
+	function (f, g, x) {
+		return g(
+			f(x));
+	});
+var $elm$http$Http$expectStringResponse = F2(
+	function (toMsg, toResult) {
+		return A3(
+			_Http_expect,
+			'',
+			$elm$core$Basics$identity,
+			A2($elm$core$Basics$composeR, toResult, toMsg));
+	});
+var $elm$http$Http$BadBody = function (a) {
+	return {$: 'BadBody', a: a};
+};
+var $elm$http$Http$BadStatus = function (a) {
+	return {$: 'BadStatus', a: a};
+};
+var $elm$http$Http$BadUrl = function (a) {
+	return {$: 'BadUrl', a: a};
+};
+var $elm$http$Http$NetworkError = {$: 'NetworkError'};
+var $elm$http$Http$Timeout = {$: 'Timeout'};
+var $elm$core$Result$mapError = F2(
+	function (f, result) {
+		if (result.$ === 'Ok') {
+			var v = result.a;
+			return $elm$core$Result$Ok(v);
+		} else {
+			var e = result.a;
+			return $elm$core$Result$Err(
+				f(e));
+		}
+	});
+var $elm$http$Http$resolve = F2(
+	function (toResult, response) {
+		switch (response.$) {
+			case 'BadUrl_':
+				var url = response.a;
+				return $elm$core$Result$Err(
+					$elm$http$Http$BadUrl(url));
+			case 'Timeout_':
+				return $elm$core$Result$Err($elm$http$Http$Timeout);
+			case 'NetworkError_':
+				return $elm$core$Result$Err($elm$http$Http$NetworkError);
+			case 'BadStatus_':
+				var metadata = response.a;
+				return $elm$core$Result$Err(
+					$elm$http$Http$BadStatus(metadata.statusCode));
+			default:
+				var body = response.b;
+				return A2(
+					$elm$core$Result$mapError,
+					$elm$http$Http$BadBody,
+					toResult(body));
+		}
+	});
+var $elm$http$Http$expectString = function (toMsg) {
+	return A2(
+		$elm$http$Http$expectStringResponse,
+		toMsg,
+		$elm$http$Http$resolve($elm$core$Result$Ok));
+};
+var $elm$http$Http$emptyBody = _Http_emptyBody;
+var $elm$http$Http$Request = function (a) {
+	return {$: 'Request', a: a};
+};
+var $elm$http$Http$State = F2(
+	function (reqs, subs) {
+		return {reqs: reqs, subs: subs};
+	});
+var $elm$http$Http$init = $elm$core$Task$succeed(
+	A2($elm$http$Http$State, $elm$core$Dict$empty, _List_Nil));
+var $elm$core$Process$kill = _Scheduler_kill;
+var $elm$core$Process$spawn = _Scheduler_spawn;
+var $elm$http$Http$updateReqs = F3(
+	function (router, cmds, reqs) {
+		updateReqs:
+		while (true) {
+			if (!cmds.b) {
+				return $elm$core$Task$succeed(reqs);
+			} else {
+				var cmd = cmds.a;
+				var otherCmds = cmds.b;
+				if (cmd.$ === 'Cancel') {
+					var tracker = cmd.a;
+					var _v2 = A2($elm$core$Dict$get, tracker, reqs);
+					if (_v2.$ === 'Nothing') {
+						var $temp$router = router,
+							$temp$cmds = otherCmds,
+							$temp$reqs = reqs;
+						router = $temp$router;
+						cmds = $temp$cmds;
+						reqs = $temp$reqs;
+						continue updateReqs;
+					} else {
+						var pid = _v2.a;
+						return A2(
+							$elm$core$Task$andThen,
+							function (_v3) {
+								return A3(
+									$elm$http$Http$updateReqs,
+									router,
+									otherCmds,
+									A2($elm$core$Dict$remove, tracker, reqs));
+							},
+							$elm$core$Process$kill(pid));
+					}
+				} else {
+					var req = cmd.a;
+					return A2(
+						$elm$core$Task$andThen,
+						function (pid) {
+							var _v4 = req.tracker;
+							if (_v4.$ === 'Nothing') {
+								return A3($elm$http$Http$updateReqs, router, otherCmds, reqs);
+							} else {
+								var tracker = _v4.a;
+								return A3(
+									$elm$http$Http$updateReqs,
+									router,
+									otherCmds,
+									A3($elm$core$Dict$insert, tracker, pid, reqs));
+							}
+						},
+						$elm$core$Process$spawn(
+							A3(
+								_Http_toTask,
+								router,
+								$elm$core$Platform$sendToApp(router),
+								req)));
+				}
+			}
+		}
+	});
+var $elm$http$Http$onEffects = F4(
+	function (router, cmds, subs, state) {
+		return A2(
+			$elm$core$Task$andThen,
+			function (reqs) {
+				return $elm$core$Task$succeed(
+					A2($elm$http$Http$State, reqs, subs));
+			},
+			A3($elm$http$Http$updateReqs, router, cmds, state.reqs));
+	});
+var $elm$core$List$maybeCons = F3(
+	function (f, mx, xs) {
+		var _v0 = f(mx);
+		if (_v0.$ === 'Just') {
+			var x = _v0.a;
+			return A2($elm$core$List$cons, x, xs);
+		} else {
+			return xs;
+		}
+	});
+var $elm$core$List$filterMap = F2(
+	function (f, xs) {
+		return A3(
+			$elm$core$List$foldr,
+			$elm$core$List$maybeCons(f),
+			_List_Nil,
+			xs);
+	});
+var $elm$http$Http$maybeSend = F4(
+	function (router, desiredTracker, progress, _v0) {
+		var actualTracker = _v0.a;
+		var toMsg = _v0.b;
+		return _Utils_eq(desiredTracker, actualTracker) ? $elm$core$Maybe$Just(
+			A2(
+				$elm$core$Platform$sendToApp,
+				router,
+				toMsg(progress))) : $elm$core$Maybe$Nothing;
+	});
+var $elm$http$Http$onSelfMsg = F3(
+	function (router, _v0, state) {
+		var tracker = _v0.a;
+		var progress = _v0.b;
+		return A2(
+			$elm$core$Task$andThen,
+			function (_v1) {
+				return $elm$core$Task$succeed(state);
+			},
+			$elm$core$Task$sequence(
+				A2(
+					$elm$core$List$filterMap,
+					A3($elm$http$Http$maybeSend, router, tracker, progress),
+					state.subs)));
+	});
+var $elm$http$Http$Cancel = function (a) {
+	return {$: 'Cancel', a: a};
+};
+var $elm$http$Http$cmdMap = F2(
+	function (func, cmd) {
+		if (cmd.$ === 'Cancel') {
+			var tracker = cmd.a;
+			return $elm$http$Http$Cancel(tracker);
+		} else {
+			var r = cmd.a;
+			return $elm$http$Http$Request(
+				{
+					allowCookiesFromOtherDomains: r.allowCookiesFromOtherDomains,
+					body: r.body,
+					expect: A2(_Http_mapExpect, func, r.expect),
+					headers: r.headers,
+					method: r.method,
+					timeout: r.timeout,
+					tracker: r.tracker,
+					url: r.url
+				});
+		}
+	});
+var $elm$http$Http$MySub = F2(
+	function (a, b) {
+		return {$: 'MySub', a: a, b: b};
+	});
+var $elm$http$Http$subMap = F2(
+	function (func, _v0) {
+		var tracker = _v0.a;
+		var toMsg = _v0.b;
+		return A2(
+			$elm$http$Http$MySub,
+			tracker,
+			A2($elm$core$Basics$composeR, toMsg, func));
+	});
+_Platform_effectManagers['Http'] = _Platform_createManager($elm$http$Http$init, $elm$http$Http$onEffects, $elm$http$Http$onSelfMsg, $elm$http$Http$cmdMap, $elm$http$Http$subMap);
+var $elm$http$Http$command = _Platform_leaf('Http');
+var $elm$http$Http$subscription = _Platform_leaf('Http');
+var $elm$http$Http$request = function (r) {
+	return $elm$http$Http$command(
+		$elm$http$Http$Request(
+			{allowCookiesFromOtherDomains: false, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url}));
+};
+var $elm$http$Http$get = function (r) {
+	return $elm$http$Http$request(
+		{body: $elm$http$Http$emptyBody, expect: r.expect, headers: _List_Nil, method: 'GET', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: r.url});
+};
+var $author$project$Main$loadContent = $elm$http$Http$get(
+	{
+		expect: $elm$http$Http$expectString($author$project$Types$Load),
+		url: 'assets/example.svg'
+	});
+var $elm$core$Platform$Sub$batch = _Platform_batch;
+var $elm$core$Platform$Sub$none = $elm$core$Platform$Sub$batch(_List_Nil);
+var $author$project$Types$Loaded = {$: 'Loaded'};
+var $author$project$Main$load = F2(
+	function (model, res) {
+		if (res.$ === 'Ok') {
+			var svg = res.a;
+			return _Utils_update(
+				model,
+				{image: svg, load: $author$project$Types$Loaded});
+		} else {
+			return _Utils_update(
+				model,
+				{load: $author$project$Types$Loaded});
+		}
+	});
+var $elm$core$Platform$Cmd$batch = _Platform_batch;
+var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil);
+var $elm$time$Time$Posix = function (a) {
+	return {$: 'Posix', a: a};
+};
+var $elm$time$Time$millisToPosix = $elm$time$Time$Posix;
+var $elm$file$File$Download$string = F3(
+	function (name, mime, content) {
+		return A2(
+			$elm$core$Task$perform,
+			$elm$core$Basics$never,
+			A3(_File_download, name, mime, content));
+	});
+var $author$project$Types$Dark = {$: 'Dark'};
+var $author$project$Main$toggle = function (mode) {
+	if (mode.$ === 'Light') {
+		return $author$project$Types$Dark;
+	} else {
+		return $author$project$Types$Light;
+	}
+};
+var $author$project$Types$Selected = function (a) {
+	return {$: 'Selected', a: a};
+};
+var $author$project$Types$Update = function (a) {
+	return {$: 'Update', a: a};
+};
+var $author$project$Types$Upload = function (a) {
+	return {$: 'Upload', a: a};
+};
+var $elm$file$File$Select$file = F2(
+	function (mimes, toMsg) {
+		return A2(
+			$elm$core$Task$perform,
+			toMsg,
+			_File_uploadOne(mimes));
+	});
+var $elm$file$File$name = _File_name;
+var $elm$file$File$toString = _File_toString;
+var $author$project$Main$upload = F2(
+	function (model, upl) {
+		if (upl.$ === 'Requested') {
+			return _Utils_Tuple2(
+				model,
+				A2(
+					$elm$file$File$Select$file,
+					_List_fromArray(
+						['image/svg+xml']),
+					function (file) {
+						return $author$project$Types$Upload(
+							$author$project$Types$Selected(file));
+					}));
+		} else {
+			var file = upl.a;
+			return _Utils_Tuple2(
+				_Utils_update(
+					model,
+					{
+						fileName: $elm$file$File$name(file)
+					}),
+				A2(
+					$elm$core$Task$perform,
+					$author$project$Types$Update,
+					$elm$file$File$toString(file)));
+		}
+	});
+var $author$project$Main$update = F2(
+	function (msg, model) {
+		switch (msg.$) {
+			case 'Update':
+				var image = msg.a;
+				return _Utils_Tuple2(
+					_Utils_update(
+						model,
+						{image: image}),
+					$elm$core$Platform$Cmd$none);
+			case 'Load':
+				var res = msg.a;
+				return _Utils_Tuple2(
+					A2($author$project$Main$load, model, res),
+					$elm$core$Platform$Cmd$none);
+			case 'Validation':
+				var val = msg.a;
+				return _Utils_Tuple2(
+					_Utils_update(
+						model,
+						{status: val}),
+					$elm$core$Platform$Cmd$none);
+			case 'ToggleDarkMode':
+				return _Utils_Tuple2(
+					_Utils_update(
+						model,
+						{
+							mode: $author$project$Main$toggle(model.mode)
+						}),
+					$elm$core$Platform$Cmd$none);
+			case 'Download':
+				return _Utils_Tuple2(
+					model,
+					A3($elm$file$File$Download$string, model.fileName, 'image/svg+xml', model.image));
+			case 'Upload':
+				var upl = msg.a;
+				return A2($author$project$Main$upload, model, upl);
+			default:
+				var scroll = msg.a;
+				return _Utils_Tuple2(
+					_Utils_update(
+						model,
+						{editorScroll: scroll}),
+					$elm$core$Platform$Cmd$none);
+		}
+	});
+var $elm$json$Json$Encode$string = _Json_wrap;
+var $elm$html$Html$Attributes$stringProperty = F2(
+	function (key, string) {
+		return A2(
+			_VirtualDom_property,
+			key,
+			$elm$json$Json$Encode$string(string));
+	});
+var $elm$html$Html$Attributes$class = $elm$html$Html$Attributes$stringProperty('className');
+var $author$project$Types$Download = {$: 'Download'};
+var $author$project$Types$Requested = {$: 'Requested'};
+var $author$project$Types$ToggleDarkMode = {$: 'ToggleDarkMode'};
+var $elm$html$Html$Attributes$alt = $elm$html$Html$Attributes$stringProperty('alt');
+var $author$project$View$darkMode = function (mode) {
+	if (mode.$ === 'Light') {
+		return false;
+	} else {
+		return true;
+	}
+};
+var $elm$html$Html$img = _VirtualDom_node('img');
+var $elm$html$Html$Attributes$src = function (url) {
+	return A2(
+		$elm$html$Html$Attributes$stringProperty,
+		'src',
+		_VirtualDom_noJavaScriptOrHtmlUri(url));
+};
+var $author$project$View$bulbIcon = function (mode) {
+	return A2(
+		$elm$html$Html$img,
+		_List_fromArray(
+			[
+				$elm$html$Html$Attributes$src(
+				$author$project$View$darkMode(mode) ? 'assets/bulb-on.svg' : 'assets/bulb-off.svg'),
+				$elm$html$Html$Attributes$alt('Toggle Dark Mode')
+			]),
+		_List_Nil);
+};
+var $elm$html$Html$button = _VirtualDom_node('button');
+var $elm$html$Html$div = _VirtualDom_node('div');
+var $author$project$View$downloadIcon = A2(
+	$elm$html$Html$img,
+	_List_fromArray(
+		[
+			$elm$html$Html$Attributes$src('assets/download.svg'),
+			$elm$html$Html$Attributes$alt('Download')
+		]),
+	_List_Nil);
+var $elm$html$Html$Attributes$id = $elm$html$Html$Attributes$stringProperty('id');
+var $author$project$View$errorIcon = A2(
+	$elm$html$Html$img,
+	_List_fromArray(
+		[
+			$elm$html$Html$Attributes$id('error'),
+			$elm$html$Html$Attributes$src('assets/error.svg'),
+			$elm$html$Html$Attributes$alt('Something Went Wrong')
+		]),
+	_List_Nil);
+var $author$project$Types$Invalid = {$: 'Invalid'};
+var $author$project$Types$Validation = function (a) {
+	return {$: 'Validation', a: a};
+};
+var $elm$virtual_dom$VirtualDom$Normal = function (a) {
+	return {$: 'Normal', a: a};
+};
+var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on;
+var $elm$html$Html$Events$on = F2(
+	function (event, decoder) {
+		return A2(
+			$elm$virtual_dom$VirtualDom$on,
+			event,
+			$elm$virtual_dom$VirtualDom$Normal(decoder));
+	});
+var $author$project$View$onError = function (f) {
+	return A2(
+		$elm$html$Html$Events$on,
+		'error',
+		$elm$json$Json$Decode$succeed(f));
+};
+var $author$project$View$onLoad = function (f) {
+	return A2(
+		$elm$html$Html$Events$on,
+		'load',
+		$elm$json$Json$Decode$succeed(f));
+};
+var $author$project$View$valid = function (status) {
+	if (status.$ === 'Valid') {
+		return true;
+	} else {
+		return false;
+	}
+};
+var $author$project$View$loaded = function (model) {
+	return $author$project$View$valid(model.status) ? $author$project$View$onError(
+		$author$project$Types$Validation($author$project$Types$Invalid)) : $author$project$View$onLoad(
+		$author$project$Types$Validation($author$project$Types$Valid));
+};
+var $elm$html$Html$Events$onClick = function (msg) {
+	return A2(
+		$elm$html$Html$Events$on,
+		'click',
+		$elm$json$Json$Decode$succeed(msg));
+};
+var $author$project$View$uploadIcon = A2(
+	$elm$html$Html$img,
+	_List_fromArray(
+		[
+			$elm$html$Html$Attributes$src('assets/upload.svg'),
+			$elm$html$Html$Attributes$alt('Upload')
+		]),
+	_List_Nil);
+var $author$project$View$percentEscape = function (m) {
+	var _v0 = m.match;
+	switch (_v0) {
+		case '!':
+			return '%21';
+		case '#':
+			return '%23';
+		case '$':
+			return '%24';
+		case '%':
+			return '%25';
+		case '&':
+			return '%26';
+		case '\'':
+			return '%27';
+		case '(':
+			return '%28';
+		case ')':
+			return '%29';
+		case '*':
+			return '%2A';
+		case '+':
+			return '%2B';
+		case ',':
+			return '%2C';
+		case '/':
+			return '%2F';
+		case ':':
+			return '%3A';
+		case ';':
+			return '%3B';
+		case '=':
+			return '%3D';
+		case '?':
+			return '%3F';
+		case '@':
+			return '%40';
+		case '[':
+			return '%5B';
+		case ']':
+			return '%5D';
+		default:
+			var str = _v0;
+			return str;
+	}
+};
+var $elm$regex$Regex$replace = _Regex_replaceAtMost(_Regex_infinity);
+var $author$project$View$uri = function (model) {
+	return 'data:image/svg+xml;utf8,' + A3($elm$regex$Regex$replace, model.uriEncoder, $author$project$View$percentEscape, model.image);
+};
+var $author$project$View$display = function (model) {
+	return A2(
+		$elm$html$Html$div,
+		_List_fromArray(
+			[
+				$elm$html$Html$Attributes$id('display'),
+				$elm$html$Html$Attributes$class(
+				$author$project$View$darkMode(model.mode) ? 'dark' : 'light')
+			]),
+		_List_fromArray(
+			[
+				A2(
+				$elm$html$Html$img,
+				_List_fromArray(
+					[
+						$elm$html$Html$Attributes$id('image'),
+						$elm$html$Html$Attributes$src(
+						$author$project$View$uri(model)),
+						$author$project$View$loaded(model),
+						$elm$html$Html$Attributes$alt('Picture Display')
+					]),
+				_List_Nil),
+				$author$project$View$errorIcon,
+				A2(
+				$elm$html$Html$button,
+				_List_fromArray(
+					[
+						$elm$html$Html$Events$onClick($author$project$Types$Download),
+						$elm$html$Html$Attributes$alt('Download')
+					]),
+				_List_fromArray(
+					[$author$project$View$downloadIcon])),
+				A2(
+				$elm$html$Html$button,
+				_List_fromArray(
+					[
+						$elm$html$Html$Events$onClick(
+						$author$project$Types$Upload($author$project$Types$Requested)),
+						$elm$html$Html$Attributes$alt('Upload')
+					]),
+				_List_fromArray(
+					[$author$project$View$uploadIcon])),
+				A2(
+				$elm$html$Html$button,
+				_List_fromArray(
+					[
+						$elm$html$Html$Events$onClick($author$project$Types$ToggleDarkMode),
+						$elm$html$Html$Attributes$alt('Toggle Dark Mode')
+					]),
+				_List_fromArray(
+					[
+						$author$project$View$bulbIcon(model.mode)
+					]))
+			]));
+};
+var $elm$html$Html$code = _VirtualDom_node('code');
+var $elm$core$Result$map = F2(
+	function (func, ra) {
+		if (ra.$ === 'Ok') {
+			var a = ra.a;
+			return $elm$core$Result$Ok(
+				func(a));
+		} else {
+			var e = ra.a;
+			return $elm$core$Result$Err(e);
+		}
+	});
+var $author$project$Editor$placeholder = '<svg ...> ... </svg>';
+var $elm$html$Html$pre = _VirtualDom_node('pre');
+var $elm$virtual_dom$VirtualDom$text = _VirtualDom_text;
+var $elm$html$Html$text = $elm$virtual_dom$VirtualDom$text;
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Add = {$: 'Add'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Del = {$: 'Del'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Normal = {$: 'Normal'};
+var $elm$virtual_dom$VirtualDom$attribute = F2(
+	function (key, value) {
+		return A2(
+			_VirtualDom_attribute,
+			_VirtualDom_noOnOrFormAction(key),
+			_VirtualDom_noJavaScriptOrHtmlUri(value));
+	});
+var $elm$html$Html$Attributes$attribute = $elm$virtual_dom$VirtualDom$attribute;
+var $elm$core$List$filter = F2(
+	function (isGood, list) {
+		return A3(
+			$elm$core$List$foldr,
+			F2(
+				function (x, xs) {
+					return isGood(x) ? A2($elm$core$List$cons, x, xs) : xs;
+				}),
+			_List_Nil,
+			list);
+	});
+var $elm$core$Tuple$second = function (_v0) {
+	var y = _v0.b;
+	return y;
+};
+var $elm$html$Html$Attributes$classList = function (classes) {
+	return $elm$html$Html$Attributes$class(
+		A2(
+			$elm$core$String$join,
+			' ',
+			A2(
+				$elm$core$List$map,
+				$elm$core$Tuple$first,
+				A2($elm$core$List$filter, $elm$core$Tuple$second, classes))));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Default = {$: 'Default'};
+var $elm$core$Basics$neq = _Utils_notEqual;
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$requiredStyleToString = function (required) {
+	return 'elmsh' + function () {
+		switch (required.$) {
+			case 'Default':
+				return '0';
+			case 'Comment':
+				return '-comm';
+			case 'Style1':
+				return '1';
+			case 'Style2':
+				return '2';
+			case 'Style3':
+				return '3';
+			case 'Style4':
+				return '4';
+			case 'Style5':
+				return '5';
+			case 'Style6':
+				return '6';
+			default:
+				return '7';
+		}
+	}();
+};
+var $elm$html$Html$span = _VirtualDom_node('span');
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$fragmentView = function (_v0) {
+	var text = _v0.text;
+	var requiredStyle = _v0.requiredStyle;
+	var additionalClass = _v0.additionalClass;
+	return (_Utils_eq(requiredStyle, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Default) && $elm$core$String$isEmpty(additionalClass)) ? $elm$html$Html$text(text) : A2(
+		$elm$html$Html$span,
+		_List_fromArray(
+			[
+				$elm$html$Html$Attributes$classList(
+				_List_fromArray(
+					[
+						_Utils_Tuple2(
+						$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$requiredStyleToString(requiredStyle),
+						!_Utils_eq(requiredStyle, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Default)),
+						_Utils_Tuple2('elmsh-' + additionalClass, additionalClass !== '')
+					]))
+			]),
+		_List_fromArray(
+			[
+				$elm$html$Html$text(text)
+			]));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$lineView = F3(
+	function (start, index, _v0) {
+		var fragments = _v0.fragments;
+		var highlight = _v0.highlight;
+		return A2(
+			$elm$html$Html$div,
+			_List_fromArray(
+				[
+					$elm$html$Html$Attributes$classList(
+					_List_fromArray(
+						[
+							_Utils_Tuple2('elmsh-line', true),
+							_Utils_Tuple2(
+							'elmsh-hl',
+							_Utils_eq(
+								highlight,
+								$elm$core$Maybe$Just($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Normal))),
+							_Utils_Tuple2(
+							'elmsh-add',
+							_Utils_eq(
+								highlight,
+								$elm$core$Maybe$Just($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Add))),
+							_Utils_Tuple2(
+							'elmsh-del',
+							_Utils_eq(
+								highlight,
+								$elm$core$Maybe$Just($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Del)))
+						])),
+					A2(
+					$elm$html$Html$Attributes$attribute,
+					'data-elmsh-lc',
+					$elm$core$String$fromInt(start + index))
+				]),
+			A2($elm$core$List$map, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$fragmentView, fragments));
+	});
+var $elm$core$List$singleton = function (value) {
+	return _List_fromArray(
+		[value]);
+};
+var $elm$core$List$append = F2(
+	function (xs, ys) {
+		if (!ys.b) {
+			return xs;
+		} else {
+			return A3($elm$core$List$foldr, $elm$core$List$cons, ys, xs);
+		}
+	});
+var $elm$core$List$concat = function (lists) {
+	return A3($elm$core$List$foldr, $elm$core$List$append, _List_Nil, lists);
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$toInlineHtml = function (lines) {
+	return A2(
+		$elm$html$Html$code,
+		_List_fromArray(
+			[
+				$elm$html$Html$Attributes$class('elmsh')
+			]),
+		$elm$core$List$concat(
+			A2(
+				$elm$core$List$map,
+				function (_v0) {
+					var highlight = _v0.highlight;
+					var fragments = _v0.fragments;
+					return _Utils_eq(highlight, $elm$core$Maybe$Nothing) ? A2($elm$core$List$map, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$fragmentView, fragments) : _List_fromArray(
+						[
+							A2(
+							$elm$html$Html$span,
+							_List_fromArray(
+								[
+									$elm$html$Html$Attributes$classList(
+									_List_fromArray(
+										[
+											_Utils_Tuple2(
+											'elmsh-hl',
+											_Utils_eq(
+												highlight,
+												$elm$core$Maybe$Just($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Normal))),
+											_Utils_Tuple2(
+											'elmsh-add',
+											_Utils_eq(
+												highlight,
+												$elm$core$Maybe$Just($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Add))),
+											_Utils_Tuple2(
+											'elmsh-del',
+											_Utils_eq(
+												highlight,
+												$elm$core$Maybe$Just($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Del)))
+										]))
+								]),
+							A2($elm$core$List$map, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$fragmentView, fragments))
+						]);
+				},
+				lines)));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$toBlockHtml = F2(
+	function (maybeStart, lines) {
+		if (maybeStart.$ === 'Nothing') {
+			return A2(
+				$elm$html$Html$pre,
+				_List_fromArray(
+					[
+						$elm$html$Html$Attributes$class('elmsh')
+					]),
+				_List_fromArray(
+					[
+						$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$toInlineHtml(lines)
+					]));
+		} else {
+			var start = maybeStart.a;
+			return A2(
+				$elm$html$Html$pre,
+				_List_fromArray(
+					[
+						$elm$html$Html$Attributes$class('elmsh')
+					]),
+				$elm$core$List$singleton(
+					A2(
+						$elm$html$Html$code,
+						_List_Nil,
+						A2(
+							$elm$core$List$indexedMap,
+							$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$lineView(start),
+							lines))));
+		}
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$toBlockHtml = F2(
+	function (maybeStart, _v0) {
+		var lines = _v0.a;
+		return A2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$View$toBlockHtml, maybeStart, lines);
+	});
+var $elm$core$Result$withDefault = F2(
+	function (def, result) {
+		if (result.$ === 'Ok') {
+			var a = result.a;
+			return a;
+		} else {
+			return def;
+		}
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$HCode = function (a) {
+	return {$: 'HCode', a: a};
+};
+var $elm$parser$Parser$DeadEnd = F3(
+	function (row, col, problem) {
+		return {col: col, problem: problem, row: row};
+	});
+var $elm$parser$Parser$problemToDeadEnd = function (p) {
+	return A3($elm$parser$Parser$DeadEnd, p.row, p.col, p.problem);
+};
+var $elm$parser$Parser$Advanced$bagToList = F2(
+	function (bag, list) {
+		bagToList:
+		while (true) {
+			switch (bag.$) {
+				case 'Empty':
+					return list;
+				case 'AddRight':
+					var bag1 = bag.a;
+					var x = bag.b;
+					var $temp$bag = bag1,
+						$temp$list = A2($elm$core$List$cons, x, list);
+					bag = $temp$bag;
+					list = $temp$list;
+					continue bagToList;
+				default:
+					var bag1 = bag.a;
+					var bag2 = bag.b;
+					var $temp$bag = bag1,
+						$temp$list = A2($elm$parser$Parser$Advanced$bagToList, bag2, list);
+					bag = $temp$bag;
+					list = $temp$list;
+					continue bagToList;
+			}
+		}
+	});
+var $elm$parser$Parser$Advanced$run = F2(
+	function (_v0, src) {
+		var parse = _v0.a;
+		var _v1 = parse(
+			{col: 1, context: _List_Nil, indent: 1, offset: 0, row: 1, src: src});
+		if (_v1.$ === 'Good') {
+			var value = _v1.b;
+			return $elm$core$Result$Ok(value);
+		} else {
+			var bag = _v1.b;
+			return $elm$core$Result$Err(
+				A2($elm$parser$Parser$Advanced$bagToList, bag, _List_Nil));
+		}
+	});
+var $elm$parser$Parser$run = F2(
+	function (parser, source) {
+		var _v0 = A2($elm$parser$Parser$Advanced$run, parser, source);
+		if (_v0.$ === 'Ok') {
+			var a = _v0.a;
+			return $elm$core$Result$Ok(a);
+		} else {
+			var problems = _v0.a;
+			return $elm$core$Result$Err(
+				A2($elm$core$List$map, $elm$parser$Parser$problemToDeadEnd, problems));
+		}
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Style2 = {$: 'Style2'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Style3 = {$: 'Style3'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Style5 = {$: 'Style5'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$syntaxToStyle = function (syntax) {
+	switch (syntax.$) {
+		case 'Tag':
+			return _Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Style3, 'xml-t');
+		case 'Attribute':
+			return _Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Style5, 'xml-a');
+		default:
+			return _Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Style2, 'xlm-av');
+	}
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$newLine = function (fragments) {
+	return {fragments: fragments, highlight: $elm$core$Maybe$Nothing};
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$LineBreak = {$: 'LineBreak'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Comment = {$: 'Comment'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toFragment = F2(
+	function (toStyle, _v0) {
+		var syntax = _v0.a;
+		var text = _v0.b;
+		switch (syntax.$) {
+			case 'Normal':
+				return {additionalClass: '', requiredStyle: $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Default, text: text};
+			case 'Comment':
+				return {additionalClass: '', requiredStyle: $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Comment, text: text};
+			case 'LineBreak':
+				return {additionalClass: '', requiredStyle: $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Style$Default, text: text};
+			default:
+				var c = syntax.a;
+				var _v2 = toStyle(c);
+				var requiredStyle = _v2.a;
+				var additionalClass = _v2.b;
+				return {additionalClass: additionalClass, requiredStyle: requiredStyle, text: text};
+		}
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toLinesHelp = F3(
+	function (toStyle, _v0, _v1) {
+		var syntax = _v0.a;
+		var text = _v0.b;
+		var lines = _v1.a;
+		var fragments = _v1.b;
+		var maybeLastSyntax = _v1.c;
+		if (_Utils_eq(syntax, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$LineBreak)) {
+			return _Utils_Tuple3(
+				A2(
+					$elm$core$List$cons,
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$newLine(fragments),
+					lines),
+				_List_fromArray(
+					[
+						A2(
+						$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toFragment,
+						toStyle,
+						_Utils_Tuple2(syntax, text))
+					]),
+				$elm$core$Maybe$Nothing);
+		} else {
+			if (_Utils_eq(
+				$elm$core$Maybe$Just(syntax),
+				maybeLastSyntax)) {
+				if (fragments.b) {
+					var headFrag = fragments.a;
+					var tailFrags = fragments.b;
+					return _Utils_Tuple3(
+						lines,
+						A2(
+							$elm$core$List$cons,
+							_Utils_update(
+								headFrag,
+								{
+									text: _Utils_ap(text, headFrag.text)
+								}),
+							tailFrags),
+						maybeLastSyntax);
+				} else {
+					return _Utils_Tuple3(
+						lines,
+						A2(
+							$elm$core$List$cons,
+							A2(
+								$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toFragment,
+								toStyle,
+								_Utils_Tuple2(syntax, text)),
+							fragments),
+						maybeLastSyntax);
+				}
+			} else {
+				return _Utils_Tuple3(
+					lines,
+					A2(
+						$elm$core$List$cons,
+						A2(
+							$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toFragment,
+							toStyle,
+							_Utils_Tuple2(syntax, text)),
+						fragments),
+					$elm$core$Maybe$Just(syntax));
+			}
+		}
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toLines = F2(
+	function (toStyle, revTokens) {
+		return function (_v0) {
+			var lines = _v0.a;
+			var frags = _v0.b;
+			return A2(
+				$elm$core$List$cons,
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$newLine(frags),
+				lines);
+		}(
+			A3(
+				$elm$core$List$foldl,
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toLinesHelp(toStyle),
+				_Utils_Tuple3(_List_Nil, _List_Nil, $elm$core$Maybe$Nothing),
+				revTokens));
+	});
+var $elm$parser$Parser$Advanced$Parser = function (a) {
+	return {$: 'Parser', a: a};
+};
+var $elm$parser$Parser$Advanced$Bad = F2(
+	function (a, b) {
+		return {$: 'Bad', a: a, b: b};
+	});
+var $elm$parser$Parser$Advanced$Good = F3(
+	function (a, b, c) {
+		return {$: 'Good', a: a, b: b, c: c};
+	});
+var $elm$parser$Parser$Advanced$loopHelp = F4(
+	function (p, state, callback, s0) {
+		loopHelp:
+		while (true) {
+			var _v0 = callback(state);
+			var parse = _v0.a;
+			var _v1 = parse(s0);
+			if (_v1.$ === 'Good') {
+				var p1 = _v1.a;
+				var step = _v1.b;
+				var s1 = _v1.c;
+				if (step.$ === 'Loop') {
+					var newState = step.a;
+					var $temp$p = p || p1,
+						$temp$state = newState,
+						$temp$callback = callback,
+						$temp$s0 = s1;
+					p = $temp$p;
+					state = $temp$state;
+					callback = $temp$callback;
+					s0 = $temp$s0;
+					continue loopHelp;
+				} else {
+					var result = step.a;
+					return A3($elm$parser$Parser$Advanced$Good, p || p1, result, s1);
+				}
+			} else {
+				var p1 = _v1.a;
+				var x = _v1.b;
+				return A2($elm$parser$Parser$Advanced$Bad, p || p1, x);
+			}
+		}
+	});
+var $elm$parser$Parser$Advanced$loop = F2(
+	function (state, callback) {
+		return $elm$parser$Parser$Advanced$Parser(
+			function (s) {
+				return A4($elm$parser$Parser$Advanced$loopHelp, false, state, callback, s);
+			});
+	});
+var $elm$parser$Parser$Advanced$map = F2(
+	function (func, _v0) {
+		var parse = _v0.a;
+		return $elm$parser$Parser$Advanced$Parser(
+			function (s0) {
+				var _v1 = parse(s0);
+				if (_v1.$ === 'Good') {
+					var p = _v1.a;
+					var a = _v1.b;
+					var s1 = _v1.c;
+					return A3(
+						$elm$parser$Parser$Advanced$Good,
+						p,
+						func(a),
+						s1);
+				} else {
+					var p = _v1.a;
+					var x = _v1.b;
+					return A2($elm$parser$Parser$Advanced$Bad, p, x);
+				}
+			});
+	});
+var $elm$parser$Parser$map = $elm$parser$Parser$Advanced$map;
+var $elm$parser$Parser$Advanced$Done = function (a) {
+	return {$: 'Done', a: a};
+};
+var $elm$parser$Parser$Advanced$Loop = function (a) {
+	return {$: 'Loop', a: a};
+};
+var $elm$parser$Parser$toAdvancedStep = function (step) {
+	if (step.$ === 'Loop') {
+		var s = step.a;
+		return $elm$parser$Parser$Advanced$Loop(s);
+	} else {
+		var a = step.a;
+		return $elm$parser$Parser$Advanced$Done(a);
+	}
+};
+var $elm$parser$Parser$loop = F2(
+	function (state, callback) {
+		return A2(
+			$elm$parser$Parser$Advanced$loop,
+			state,
+			function (s) {
+				return A2(
+					$elm$parser$Parser$map,
+					$elm$parser$Parser$toAdvancedStep,
+					callback(s));
+			});
+	});
+var $elm$parser$Parser$Done = function (a) {
+	return {$: 'Done', a: a};
+};
+var $elm$parser$Parser$Loop = function (a) {
+	return {$: 'Loop', a: a};
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Normal = {$: 'Normal'};
+var $elm$parser$Parser$UnexpectedChar = {$: 'UnexpectedChar'};
+var $elm$parser$Parser$Advanced$AddRight = F2(
+	function (a, b) {
+		return {$: 'AddRight', a: a, b: b};
+	});
+var $elm$parser$Parser$Advanced$DeadEnd = F4(
+	function (row, col, problem, contextStack) {
+		return {col: col, contextStack: contextStack, problem: problem, row: row};
+	});
+var $elm$parser$Parser$Advanced$Empty = {$: 'Empty'};
+var $elm$parser$Parser$Advanced$fromState = F2(
+	function (s, x) {
+		return A2(
+			$elm$parser$Parser$Advanced$AddRight,
+			$elm$parser$Parser$Advanced$Empty,
+			A4($elm$parser$Parser$Advanced$DeadEnd, s.row, s.col, x, s.context));
+	});
+var $elm$parser$Parser$Advanced$isSubChar = _Parser_isSubChar;
+var $elm$core$Basics$negate = function (n) {
+	return -n;
+};
+var $elm$parser$Parser$Advanced$chompIf = F2(
+	function (isGood, expecting) {
+		return $elm$parser$Parser$Advanced$Parser(
+			function (s) {
+				var newOffset = A3($elm$parser$Parser$Advanced$isSubChar, isGood, s.offset, s.src);
+				return _Utils_eq(newOffset, -1) ? A2(
+					$elm$parser$Parser$Advanced$Bad,
+					false,
+					A2($elm$parser$Parser$Advanced$fromState, s, expecting)) : (_Utils_eq(newOffset, -2) ? A3(
+					$elm$parser$Parser$Advanced$Good,
+					true,
+					_Utils_Tuple0,
+					{col: 1, context: s.context, indent: s.indent, offset: s.offset + 1, row: s.row + 1, src: s.src}) : A3(
+					$elm$parser$Parser$Advanced$Good,
+					true,
+					_Utils_Tuple0,
+					{col: s.col + 1, context: s.context, indent: s.indent, offset: newOffset, row: s.row, src: s.src}));
+			});
+	});
+var $elm$parser$Parser$chompIf = function (isGood) {
+	return A2($elm$parser$Parser$Advanced$chompIf, isGood, $elm$parser$Parser$UnexpectedChar);
+};
+var $elm$parser$Parser$Advanced$chompWhileHelp = F5(
+	function (isGood, offset, row, col, s0) {
+		chompWhileHelp:
+		while (true) {
+			var newOffset = A3($elm$parser$Parser$Advanced$isSubChar, isGood, offset, s0.src);
+			if (_Utils_eq(newOffset, -1)) {
+				return A3(
+					$elm$parser$Parser$Advanced$Good,
+					_Utils_cmp(s0.offset, offset) < 0,
+					_Utils_Tuple0,
+					{col: col, context: s0.context, indent: s0.indent, offset: offset, row: row, src: s0.src});
+			} else {
+				if (_Utils_eq(newOffset, -2)) {
+					var $temp$isGood = isGood,
+						$temp$offset = offset + 1,
+						$temp$row = row + 1,
+						$temp$col = 1,
+						$temp$s0 = s0;
+					isGood = $temp$isGood;
+					offset = $temp$offset;
+					row = $temp$row;
+					col = $temp$col;
+					s0 = $temp$s0;
+					continue chompWhileHelp;
+				} else {
+					var $temp$isGood = isGood,
+						$temp$offset = newOffset,
+						$temp$row = row,
+						$temp$col = col + 1,
+						$temp$s0 = s0;
+					isGood = $temp$isGood;
+					offset = $temp$offset;
+					row = $temp$row;
+					col = $temp$col;
+					s0 = $temp$s0;
+					continue chompWhileHelp;
+				}
+			}
+		}
+	});
+var $elm$parser$Parser$Advanced$chompWhile = function (isGood) {
+	return $elm$parser$Parser$Advanced$Parser(
+		function (s) {
+			return A5($elm$parser$Parser$Advanced$chompWhileHelp, isGood, s.offset, s.row, s.col, s);
+		});
+};
+var $elm$parser$Parser$chompWhile = $elm$parser$Parser$Advanced$chompWhile;
+var $elm$core$Basics$always = F2(
+	function (a, _v0) {
+		return a;
+	});
+var $elm$parser$Parser$Advanced$map2 = F3(
+	function (func, _v0, _v1) {
+		var parseA = _v0.a;
+		var parseB = _v1.a;
+		return $elm$parser$Parser$Advanced$Parser(
+			function (s0) {
+				var _v2 = parseA(s0);
+				if (_v2.$ === 'Bad') {
+					var p = _v2.a;
+					var x = _v2.b;
+					return A2($elm$parser$Parser$Advanced$Bad, p, x);
+				} else {
+					var p1 = _v2.a;
+					var a = _v2.b;
+					var s1 = _v2.c;
+					var _v3 = parseB(s1);
+					if (_v3.$ === 'Bad') {
+						var p2 = _v3.a;
+						var x = _v3.b;
+						return A2($elm$parser$Parser$Advanced$Bad, p1 || p2, x);
+					} else {
+						var p2 = _v3.a;
+						var b = _v3.b;
+						var s2 = _v3.c;
+						return A3(
+							$elm$parser$Parser$Advanced$Good,
+							p1 || p2,
+							A2(func, a, b),
+							s2);
+					}
+				}
+			});
+	});
+var $elm$parser$Parser$Advanced$ignorer = F2(
+	function (keepParser, ignoreParser) {
+		return A3($elm$parser$Parser$Advanced$map2, $elm$core$Basics$always, keepParser, ignoreParser);
+	});
+var $elm$parser$Parser$ignorer = $elm$parser$Parser$Advanced$ignorer;
+var $elm$parser$Parser$Advanced$succeed = function (a) {
+	return $elm$parser$Parser$Advanced$Parser(
+		function (s) {
+			return A3($elm$parser$Parser$Advanced$Good, false, a, s);
+		});
+};
+var $elm$parser$Parser$succeed = $elm$parser$Parser$Advanced$succeed;
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$chompIfThenWhile = function (isNotRelevant) {
+	return A2(
+		$elm$parser$Parser$ignorer,
+		A2(
+			$elm$parser$Parser$ignorer,
+			$elm$parser$Parser$succeed(_Utils_Tuple0),
+			$elm$parser$Parser$chompIf(isNotRelevant)),
+		$elm$parser$Parser$chompWhile(isNotRelevant));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Comment = {$: 'Comment'};
+var $elm$parser$Parser$Advanced$andThen = F2(
+	function (callback, _v0) {
+		var parseA = _v0.a;
+		return $elm$parser$Parser$Advanced$Parser(
+			function (s0) {
+				var _v1 = parseA(s0);
+				if (_v1.$ === 'Bad') {
+					var p = _v1.a;
+					var x = _v1.b;
+					return A2($elm$parser$Parser$Advanced$Bad, p, x);
+				} else {
+					var p1 = _v1.a;
+					var a = _v1.b;
+					var s1 = _v1.c;
+					var _v2 = callback(a);
+					var parseB = _v2.a;
+					var _v3 = parseB(s1);
+					if (_v3.$ === 'Bad') {
+						var p2 = _v3.a;
+						var x = _v3.b;
+						return A2($elm$parser$Parser$Advanced$Bad, p1 || p2, x);
+					} else {
+						var p2 = _v3.a;
+						var b = _v3.b;
+						var s2 = _v3.c;
+						return A3($elm$parser$Parser$Advanced$Good, p1 || p2, b, s2);
+					}
+				}
+			});
+	});
+var $elm$parser$Parser$andThen = $elm$parser$Parser$Advanced$andThen;
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$addThen = F3(
+	function (f, list, plist) {
+		return A2(
+			$elm$parser$Parser$andThen,
+			function (n) {
+				return f(
+					_Utils_ap(n, list));
+			},
+			plist);
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen = F3(
+	function (f, list, pn) {
+		return A2(
+			$elm$parser$Parser$andThen,
+			function (n) {
+				return f(
+					A2($elm$core$List$cons, n, list));
+			},
+			pn);
+	});
+var $elm$parser$Parser$ExpectingEnd = {$: 'ExpectingEnd'};
+var $elm$parser$Parser$Advanced$end = function (x) {
+	return $elm$parser$Parser$Advanced$Parser(
+		function (s) {
+			return _Utils_eq(
+				$elm$core$String$length(s.src),
+				s.offset) ? A3($elm$parser$Parser$Advanced$Good, false, _Utils_Tuple0, s) : A2(
+				$elm$parser$Parser$Advanced$Bad,
+				false,
+				A2($elm$parser$Parser$Advanced$fromState, s, x));
+		});
+};
+var $elm$parser$Parser$end = $elm$parser$Parser$Advanced$end($elm$parser$Parser$ExpectingEnd);
+var $elm$parser$Parser$Advanced$mapChompedString = F2(
+	function (func, _v0) {
+		var parse = _v0.a;
+		return $elm$parser$Parser$Advanced$Parser(
+			function (s0) {
+				var _v1 = parse(s0);
+				if (_v1.$ === 'Bad') {
+					var p = _v1.a;
+					var x = _v1.b;
+					return A2($elm$parser$Parser$Advanced$Bad, p, x);
+				} else {
+					var p = _v1.a;
+					var a = _v1.b;
+					var s1 = _v1.c;
+					return A3(
+						$elm$parser$Parser$Advanced$Good,
+						p,
+						A2(
+							func,
+							A3($elm$core$String$slice, s0.offset, s1.offset, s0.src),
+							a),
+						s1);
+				}
+			});
+	});
+var $elm$parser$Parser$Advanced$getChompedString = function (parser) {
+	return A2($elm$parser$Parser$Advanced$mapChompedString, $elm$core$Basics$always, parser);
+};
+var $elm$parser$Parser$getChompedString = $elm$parser$Parser$Advanced$getChompedString;
+var $elm$parser$Parser$Advanced$Append = F2(
+	function (a, b) {
+		return {$: 'Append', a: a, b: b};
+	});
+var $elm$parser$Parser$Advanced$oneOfHelp = F3(
+	function (s0, bag, parsers) {
+		oneOfHelp:
+		while (true) {
+			if (!parsers.b) {
+				return A2($elm$parser$Parser$Advanced$Bad, false, bag);
+			} else {
+				var parse = parsers.a.a;
+				var remainingParsers = parsers.b;
+				var _v1 = parse(s0);
+				if (_v1.$ === 'Good') {
+					var step = _v1;
+					return step;
+				} else {
+					var step = _v1;
+					var p = step.a;
+					var x = step.b;
+					if (p) {
+						return step;
+					} else {
+						var $temp$s0 = s0,
+							$temp$bag = A2($elm$parser$Parser$Advanced$Append, bag, x),
+							$temp$parsers = remainingParsers;
+						s0 = $temp$s0;
+						bag = $temp$bag;
+						parsers = $temp$parsers;
+						continue oneOfHelp;
+					}
+				}
+			}
+		}
+	});
+var $elm$parser$Parser$Advanced$oneOf = function (parsers) {
+	return $elm$parser$Parser$Advanced$Parser(
+		function (s) {
+			return A3($elm$parser$Parser$Advanced$oneOfHelp, s, $elm$parser$Parser$Advanced$Empty, parsers);
+		});
+};
+var $elm$parser$Parser$oneOf = $elm$parser$Parser$Advanced$oneOf;
+var $elm$parser$Parser$ExpectingSymbol = function (a) {
+	return {$: 'ExpectingSymbol', a: a};
+};
+var $elm$parser$Parser$Advanced$Token = F2(
+	function (a, b) {
+		return {$: 'Token', a: a, b: b};
+	});
+var $elm$parser$Parser$Advanced$isSubString = _Parser_isSubString;
+var $elm$core$Basics$not = _Basics_not;
+var $elm$parser$Parser$Advanced$token = function (_v0) {
+	var str = _v0.a;
+	var expecting = _v0.b;
+	var progress = !$elm$core$String$isEmpty(str);
+	return $elm$parser$Parser$Advanced$Parser(
+		function (s) {
+			var _v1 = A5($elm$parser$Parser$Advanced$isSubString, str, s.offset, s.row, s.col, s.src);
+			var newOffset = _v1.a;
+			var newRow = _v1.b;
+			var newCol = _v1.c;
+			return _Utils_eq(newOffset, -1) ? A2(
+				$elm$parser$Parser$Advanced$Bad,
+				false,
+				A2($elm$parser$Parser$Advanced$fromState, s, expecting)) : A3(
+				$elm$parser$Parser$Advanced$Good,
+				progress,
+				_Utils_Tuple0,
+				{col: newCol, context: s.context, indent: s.indent, offset: newOffset, row: newRow, src: s.src});
+		});
+};
+var $elm$parser$Parser$Advanced$symbol = $elm$parser$Parser$Advanced$token;
+var $elm$parser$Parser$symbol = function (str) {
+	return $elm$parser$Parser$Advanced$symbol(
+		A2(
+			$elm$parser$Parser$Advanced$Token,
+			str,
+			$elm$parser$Parser$ExpectingSymbol(str)));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$thenChompWhile = F2(
+	function (isNotRelevant, previousParser) {
+		return A2(
+			$elm$parser$Parser$ignorer,
+			previousParser,
+			$elm$parser$Parser$chompWhile(isNotRelevant));
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedUnnestable = F2(
+	function (options, revAList) {
+		var defaultMap = options.defaultMap;
+		var isNotRelevant = options.isNotRelevant;
+		var end = options.end;
+		var innerParsers = options.innerParsers;
+		return $elm$parser$Parser$oneOf(
+			_List_fromArray(
+				[
+					A2(
+					$elm$parser$Parser$map,
+					$elm$core$Basics$always(
+						A2(
+							$elm$core$List$cons,
+							defaultMap(end),
+							revAList)),
+					$elm$parser$Parser$symbol(end)),
+					A2(
+					$elm$parser$Parser$map,
+					$elm$core$Basics$always(revAList),
+					$elm$parser$Parser$end),
+					A3(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$addThen,
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedUnnestable(options),
+					revAList,
+					$elm$parser$Parser$oneOf(innerParsers)),
+					A3(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen,
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedUnnestable(options),
+					revAList,
+					A2(
+						$elm$parser$Parser$map,
+						defaultMap,
+						$elm$parser$Parser$getChompedString(
+							A2(
+								$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$thenChompWhile,
+								isNotRelevant,
+								$elm$parser$Parser$chompIf(
+									$elm$core$Basics$always(true))))))
+				]));
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedNestable = F3(
+	function (nestLevel, options, revAList) {
+		var defaultMap = options.defaultMap;
+		var isNotRelevant = options.isNotRelevant;
+		var start = options.start;
+		var end = options.end;
+		var innerParsers = options.innerParsers;
+		return $elm$parser$Parser$oneOf(
+			_List_fromArray(
+				[
+					A2(
+					$elm$parser$Parser$andThen,
+					function (n) {
+						return (nestLevel === 1) ? $elm$parser$Parser$succeed(n) : A3($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedNestable, nestLevel - 1, options, n);
+					},
+					A2(
+						$elm$parser$Parser$map,
+						$elm$core$Basics$always(
+							A2(
+								$elm$core$List$cons,
+								defaultMap(end),
+								revAList)),
+						$elm$parser$Parser$symbol(end))),
+					A3(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen,
+					A2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedNestable, nestLevel + 1, options),
+					revAList,
+					A2(
+						$elm$parser$Parser$map,
+						defaultMap,
+						$elm$parser$Parser$getChompedString(
+							A2(
+								$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$thenChompWhile,
+								isNotRelevant,
+								$elm$parser$Parser$symbol(start))))),
+					A3(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$addThen,
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedUnnestable(options),
+					revAList,
+					$elm$parser$Parser$oneOf(innerParsers)),
+					A2(
+					$elm$parser$Parser$map,
+					$elm$core$Basics$always(revAList),
+					$elm$parser$Parser$end),
+					A3(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen,
+					A2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedNestable, nestLevel, options),
+					revAList,
+					A2(
+						$elm$parser$Parser$map,
+						defaultMap,
+						$elm$parser$Parser$getChompedString(
+							A2(
+								$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$thenChompWhile,
+								isNotRelevant,
+								$elm$parser$Parser$chompIf(
+									$elm$core$Basics$always(true))))))
+				]));
+	});
+var $elm$parser$Parser$Problem = function (a) {
+	return {$: 'Problem', a: a};
+};
+var $elm$parser$Parser$Advanced$problem = function (x) {
+	return $elm$parser$Parser$Advanced$Parser(
+		function (s) {
+			return A2(
+				$elm$parser$Parser$Advanced$Bad,
+				false,
+				A2($elm$parser$Parser$Advanced$fromState, s, x));
+		});
+};
+var $elm$parser$Parser$problem = function (msg) {
+	return $elm$parser$Parser$Advanced$problem(
+		$elm$parser$Parser$Problem(msg));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedHelp = F2(
+	function (options, revAList) {
+		var start = options.start;
+		var end = options.end;
+		var isNotRelevant = options.isNotRelevant;
+		var _v0 = _Utils_Tuple2(
+			$elm$core$String$uncons(options.start),
+			$elm$core$String$uncons(options.end));
+		if (_v0.a.$ === 'Nothing') {
+			var _v1 = _v0.a;
+			return $elm$parser$Parser$problem('Trying to parse a delimited helper, but the start token cannot be an empty string!');
+		} else {
+			if (_v0.b.$ === 'Nothing') {
+				var _v2 = _v0.b;
+				return $elm$parser$Parser$problem('Trying to parse a delimited helper, but the end token cannot be an empty string!');
+			} else {
+				var _v3 = _v0.a.a;
+				var startChar = _v3.a;
+				var _v4 = _v0.b.a;
+				var endChar = _v4.a;
+				return options.isNestable ? A3(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedNestable,
+					1,
+					_Utils_update(
+						options,
+						{
+							isNotRelevant: function (c) {
+								return isNotRelevant(c) && ((!_Utils_eq(c, startChar)) && (!_Utils_eq(c, endChar)));
+							}
+						}),
+					revAList) : A2(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedUnnestable,
+					_Utils_update(
+						options,
+						{
+							isNotRelevant: function (c) {
+								return isNotRelevant(c) && (!_Utils_eq(c, endChar));
+							}
+						}),
+					revAList);
+			}
+		}
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimited = function (options) {
+	var start = options.start;
+	var isNotRelevant = options.isNotRelevant;
+	var defaultMap = options.defaultMap;
+	return A2(
+		$elm$parser$Parser$andThen,
+		function (n) {
+			return A2(
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimitedHelp,
+				options,
+				_List_fromArray(
+					[n]));
+		},
+		A2(
+			$elm$parser$Parser$map,
+			$elm$core$Basics$always(
+				defaultMap(start)),
+			$elm$parser$Parser$symbol(start)));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$AttributeValue = {$: 'AttributeValue'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$C = function (a) {
+	return {$: 'C', a: a};
+};
+var $elm$core$Basics$composeL = F3(
+	function (g, f, x) {
+		return g(
+			f(x));
+	});
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isLineBreak = function (c) {
+	return _Utils_eq(
+		c,
+		_Utils_chr('\n'));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$lineBreak = A2(
+	$elm$parser$Parser$map,
+	function (_v0) {
+		return _Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$LineBreak, '\n');
+	},
+	$elm$parser$Parser$symbol('\n'));
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$lineBreakList = A2($elm$parser$Parser$map, $elm$core$List$singleton, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$lineBreak);
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$doubleQuoteDelimiter = {
+	defaultMap: function (b) {
+		return _Utils_Tuple2(
+			$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$C($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$AttributeValue),
+			b);
+	},
+	end: '\"',
+	innerParsers: _List_fromArray(
+		[$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$lineBreakList]),
+	isNestable: false,
+	isNotRelevant: A2($elm$core$Basics$composeL, $elm$core$Basics$not, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isLineBreak),
+	start: '\"'
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$comment = $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimited(
+	_Utils_update(
+		$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$doubleQuoteDelimiter,
+		{
+			defaultMap: function (b) {
+				return _Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Comment, b);
+			},
+			end: '-->',
+			start: '<!--'
+		}));
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$openTagParser = A2(
+	$elm$parser$Parser$ignorer,
+	A2(
+		$elm$parser$Parser$ignorer,
+		$elm$parser$Parser$succeed(_Utils_Tuple0),
+		$elm$parser$Parser$chompIf(
+			function (c) {
+				return _Utils_eq(
+					c,
+					_Utils_chr('<'));
+			})),
+	$elm$parser$Parser$oneOf(
+		_List_fromArray(
+			[
+				$elm$parser$Parser$chompIf(
+				function (c) {
+					return _Utils_eq(
+						c,
+						_Utils_chr('/')) || (_Utils_eq(
+						c,
+						_Utils_chr('!')) || _Utils_eq(
+						c,
+						_Utils_chr('?')));
+				}),
+				$elm$parser$Parser$succeed(_Utils_Tuple0)
+			])));
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$Tag = {$: 'Tag'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$Attribute = {$: 'Attribute'};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$doubleQuote = $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimited($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$doubleQuoteDelimiter);
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isSpace = function (c) {
+	return _Utils_eq(
+		c,
+		_Utils_chr(' ')) || _Utils_eq(
+		c,
+		_Utils_chr('\t'));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isWhitespace = function (c) {
+	return $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isSpace(c) || $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isLineBreak(c);
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$quote = $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$delimited(
+	_Utils_update(
+		$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$doubleQuoteDelimiter,
+		{end: '\'', start: '\''}));
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeValue = $elm$parser$Parser$oneOf(
+	_List_fromArray(
+		[
+			$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$doubleQuote,
+			$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$quote,
+			A2(
+			$elm$parser$Parser$map,
+			function (b) {
+				return _List_fromArray(
+					[
+						_Utils_Tuple2(
+						$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$C($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$AttributeValue),
+						b)
+					]);
+			},
+			$elm$parser$Parser$getChompedString(
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$chompIfThenWhile(
+					function (c) {
+						return (!$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isWhitespace(c)) && (!_Utils_eq(
+							c,
+							_Utils_chr('>')));
+					})))
+		]));
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$whitespace = $elm$parser$Parser$oneOf(
+	_List_fromArray(
+		[
+			A2(
+			$elm$parser$Parser$map,
+			function (s) {
+				return _Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Normal, s);
+			},
+			$elm$parser$Parser$getChompedString(
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$chompIfThenWhile($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isSpace))),
+			$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$lineBreak
+		]));
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeValueLoop = function (revTokens) {
+	return $elm$parser$Parser$oneOf(
+		_List_fromArray(
+			[
+				A3($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeValueLoop, revTokens, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$whitespace),
+				A3($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$addThen, $elm$parser$Parser$succeed, revTokens, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeValue),
+				$elm$parser$Parser$succeed(revTokens)
+			]));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeConfirm = function (revTokens) {
+	return $elm$parser$Parser$oneOf(
+		_List_fromArray(
+			[
+				A3($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeConfirm, revTokens, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$whitespace),
+				A3(
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen,
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeValueLoop,
+				revTokens,
+				A2(
+					$elm$parser$Parser$map,
+					function (_v0) {
+						return _Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Normal, '=');
+					},
+					$elm$parser$Parser$symbol('='))),
+				$elm$parser$Parser$succeed(revTokens)
+			]));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isStartTagChar = function (c) {
+	return $elm$core$Char$isUpper(c) || ($elm$core$Char$isLower(c) || $elm$core$Char$isDigit(c));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isTagChar = function (c) {
+	return $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isStartTagChar(c) || _Utils_eq(
+		c,
+		_Utils_chr('-'));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isAttributeChar = function (c) {
+	return $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isTagChar(c) || _Utils_eq(
+		c,
+		_Utils_chr('_'));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeLoop = function (revTokens) {
+	return $elm$parser$Parser$oneOf(
+		_List_fromArray(
+			[
+				A2(
+				$elm$parser$Parser$map,
+				$elm$parser$Parser$Loop,
+				A3(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$consThen,
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeConfirm,
+					revTokens,
+					A2(
+						$elm$parser$Parser$map,
+						function (b) {
+							return _Utils_Tuple2(
+								$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$C($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$Attribute),
+								b);
+						},
+						$elm$parser$Parser$getChompedString(
+							$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$chompIfThenWhile($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isAttributeChar))))),
+				A2(
+				$elm$parser$Parser$map,
+				function (n) {
+					return $elm$parser$Parser$Loop(
+						A2($elm$core$List$cons, n, revTokens));
+				},
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$whitespace),
+				A2(
+				$elm$parser$Parser$map,
+				function (b) {
+					return $elm$parser$Parser$Loop(
+						A2(
+							$elm$core$List$cons,
+							_Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Normal, b),
+							revTokens));
+				},
+				$elm$parser$Parser$getChompedString(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$chompIfThenWhile(
+						function (c) {
+							return (!$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isWhitespace(c)) && (!_Utils_eq(
+								c,
+								_Utils_chr('>')));
+						}))),
+				$elm$parser$Parser$succeed(
+				$elm$parser$Parser$Done(revTokens))
+			]));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$tag = function (revTokens) {
+	return $elm$parser$Parser$oneOf(
+		_List_fromArray(
+			[
+				A2(
+				$elm$parser$Parser$andThen,
+				function (n) {
+					return A2(
+						$elm$parser$Parser$loop,
+						A2($elm$core$List$cons, n, revTokens),
+						$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$attributeLoop);
+				},
+				A2(
+					$elm$parser$Parser$map,
+					function (b) {
+						return _Utils_Tuple2(
+							$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$C($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$Tag),
+							b);
+					},
+					$elm$parser$Parser$getChompedString(
+						A2(
+							$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$thenChompWhile,
+							$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isTagChar,
+							$elm$parser$Parser$chompIf($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$isStartTagChar))))),
+				$elm$parser$Parser$succeed(revTokens)
+			]));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$openTag = function (revTokens) {
+	return A2(
+		$elm$parser$Parser$andThen,
+		$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$tag,
+		A2(
+			$elm$parser$Parser$map,
+			function (b) {
+				return A2(
+					$elm$core$List$cons,
+					_Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Normal, b),
+					revTokens);
+			},
+			$elm$parser$Parser$getChompedString($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$openTagParser)));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$mainLoop = function (revTokens) {
+	return $elm$parser$Parser$oneOf(
+		_List_fromArray(
+			[
+				A2(
+				$elm$parser$Parser$map,
+				function (n) {
+					return $elm$parser$Parser$Loop(
+						A2($elm$core$List$cons, n, revTokens));
+				},
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$whitespace),
+				A2(
+				$elm$parser$Parser$map,
+				function (n) {
+					return $elm$parser$Parser$Loop(
+						_Utils_ap(n, revTokens));
+				},
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$comment),
+				A2(
+				$elm$parser$Parser$map,
+				function (n) {
+					return $elm$parser$Parser$Loop(
+						A2(
+							$elm$core$List$cons,
+							_Utils_Tuple2($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Type$Normal, n),
+							revTokens));
+				},
+				$elm$parser$Parser$getChompedString(
+					$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$chompIfThenWhile(
+						function (c) {
+							return (!_Utils_eq(
+								c,
+								_Utils_chr('<'))) && (!$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Helpers$isLineBreak(c));
+						}))),
+				A2(
+				$elm$parser$Parser$map,
+				$elm$parser$Parser$Loop,
+				$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$openTag(revTokens)),
+				$elm$parser$Parser$succeed(
+				$elm$parser$Parser$Done(revTokens))
+			]));
+};
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$toRevTokens = A2($elm$parser$Parser$loop, _List_Nil, $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$mainLoop);
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$toLines = A2(
+	$elm$core$Basics$composeR,
+	$elm$parser$Parser$run($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$toRevTokens),
+	$elm$core$Result$map(
+		$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Line$Helpers$toLines($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$syntaxToStyle)));
+var $pablohirafuji$elm_syntax_highlight$SyntaxHighlight$xml = A2(
+	$elm$core$Basics$composeR,
+	$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$Language$Xml$toLines,
+	$elm$core$Result$map($pablohirafuji$elm_syntax_highlight$SyntaxHighlight$HCode));
+var $author$project$Editor$codeDisplay = function (model) {
+	return A2(
+		$elm$core$Result$withDefault,
+		A2(
+			$elm$html$Html$pre,
+			_List_Nil,
+			_List_fromArray(
+				[
+					A2(
+					$elm$html$Html$code,
+					_List_Nil,
+					_List_fromArray(
+						[
+							$elm$html$Html$text(model.image)
+						]))
+				])),
+		A2(
+			$elm$core$Result$map,
+			$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$toBlockHtml($elm$core$Maybe$Nothing),
+			$pablohirafuji$elm_syntax_highlight$SyntaxHighlight$xml(
+				(model.image === '') ? $author$project$Editor$placeholder : model.image)));
+};
+var $author$project$Types$Scroll = function (a) {
+	return {$: 'Scroll', a: a};
+};
+var $elm$html$Html$Events$alwaysStop = function (x) {
+	return _Utils_Tuple2(x, true);
+};
+var $elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) {
+	return {$: 'MayStopPropagation', a: a};
+};
+var $elm$html$Html$Events$stopPropagationOn = F2(
+	function (event, decoder) {
+		return A2(
+			$elm$virtual_dom$VirtualDom$on,
+			event,
+			$elm$virtual_dom$VirtualDom$MayStopPropagation(decoder));
+	});
+var $elm$json$Json$Decode$field = _Json_decodeField;
+var $elm$json$Json$Decode$at = F2(
+	function (fields, decoder) {
+		return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields);
+	});
+var $elm$json$Json$Decode$string = _Json_decodeString;
+var $elm$html$Html$Events$targetValue = A2(
+	$elm$json$Json$Decode$at,
+	_List_fromArray(
+		['target', 'value']),
+	$elm$json$Json$Decode$string);
+var $elm$html$Html$Events$onInput = function (tagger) {
+	return A2(
+		$elm$html$Html$Events$stopPropagationOn,
+		'input',
+		A2(
+			$elm$json$Json$Decode$map,
+			$elm$html$Html$Events$alwaysStop,
+			A2($elm$json$Json$Decode$map, tagger, $elm$html$Html$Events$targetValue)));
+};
+var $elm$json$Json$Decode$int = _Json_decodeInt;
+var $author$project$Editor$onScroll = function (f) {
+	return A2(
+		$elm$html$Html$Events$on,
+		'scroll',
+		A2(
+			$elm$json$Json$Decode$map,
+			f,
+			A3(
+				$elm$json$Json$Decode$map2,
+				function (x) {
+					return function (y) {
+						return _Utils_Tuple2(x, y);
+					};
+				},
+				A2(
+					$elm$json$Json$Decode$at,
+					_List_fromArray(
+						['target', 'scrollLeft']),
+					$elm$json$Json$Decode$int),
+				A2(
+					$elm$json$Json$Decode$at,
+					_List_fromArray(
+						['target', 'scrollTop']),
+					$elm$json$Json$Decode$int))));
+};
+var $elm$json$Json$Encode$bool = _Json_wrap;
+var $elm$html$Html$Attributes$boolProperty = F2(
+	function (key, bool) {
+		return A2(
+			_VirtualDom_property,
+			key,
+			$elm$json$Json$Encode$bool(bool));
+	});
+var $elm$html$Html$Attributes$spellcheck = $elm$html$Html$Attributes$boolProperty('spellcheck');
+var $elm$html$Html$textarea = _VirtualDom_node('textarea');
+var $elm$html$Html$Attributes$value = $elm$html$Html$Attributes$stringProperty('value');
+var $author$project$Editor$textarea = function (model) {
+	return A2(
+		$elm$html$Html$textarea,
+		_List_fromArray(
+			[
+				$elm$html$Html$Attributes$value(model.image),
+				$elm$html$Html$Events$onInput($author$project$Types$Update),
+				$author$project$Editor$onScroll($author$project$Types$Scroll),
+				$elm$html$Html$Attributes$spellcheck(false),
+				$elm$html$Html$Attributes$alt('Text Editor')
+			]),
+		_List_Nil);
+};
+var $author$project$Editor$show = $elm$core$String$fromInt;
+var $elm$virtual_dom$VirtualDom$style = _VirtualDom_style;
+var $elm$html$Html$Attributes$style = $elm$virtual_dom$VirtualDom$style;
+var $author$project$Editor$transform = function (str) {
+	return A2($elm$html$Html$Attributes$style, 'transform', str);
+};
+var $author$project$Editor$translate = function (_v0) {
+	var x = _v0.a;
+	var y = _v0.b;
+	return $author$project$Editor$transform(
+		'translate(' + ($author$project$Editor$show(-x) + ('px, ' + ($author$project$Editor$show(-y) + 'px)'))));
+};
+var $author$project$Editor$editor = function (model) {
+	return A2(
+		$elm$html$Html$div,
+		_List_fromArray(
+			[
+				$elm$html$Html$Attributes$id('editor'),
+				$elm$html$Html$Attributes$alt('Text Editor')
+			]),
+		_List_fromArray(
+			[
+				A2(
+				$elm$html$Html$div,
+				_List_fromArray(
+					[
+						$author$project$Editor$translate(model.editorScroll)
+					]),
+				_List_fromArray(
+					[
+						$author$project$Editor$codeDisplay(model)
+					])),
+				$author$project$Editor$textarea(model)
+			]));
+};
+var $elm$html$Html$h1 = _VirtualDom_node('h1');
+var $elm$html$Html$header = _VirtualDom_node('header');
+var $elm$virtual_dom$VirtualDom$lazy = _VirtualDom_lazy;
+var $elm$html$Html$Lazy$lazy = $elm$virtual_dom$VirtualDom$lazy;
+var $author$project$View$container = function (model) {
+	return A2(
+		$elm$html$Html$div,
+		_List_fromArray(
+			[
+				$elm$html$Html$Attributes$id('container'),
+				$elm$html$Html$Attributes$class(
+				$author$project$View$valid(model.status) ? 'valid' : 'error')
+			]),
+		_List_fromArray(
+			[
+				A2(
+				$elm$html$Html$header,
+				_List_Nil,
+				_List_fromArray(
+					[
+						A2(
+						$elm$html$Html$h1,
+						_List_Nil,
+						_List_fromArray(
+							[
+								$elm$html$Html$text('SGV Editor')
+							]))
+					])),
+				$author$project$View$display(model),
+				A2($elm$html$Html$Lazy$lazy, $author$project$Editor$editor, model)
+			]));
+};
+var $author$project$View$view = function (model) {
+	return {
+		body: function () {
+			var _v0 = model.load;
+			if (_v0.$ === 'Loading') {
+				return _List_Nil;
+			} else {
+				return _List_fromArray(
+					[
+						A2($elm$html$Html$Lazy$lazy, $author$project$View$container, model)
+					]);
+			}
+		}(),
+		title: 'SVG Editor'
+	};
+};
+var $author$project$Main$main = $elm$browser$Browser$document(
+	{
+		init: function (_v0) {
+			return _Utils_Tuple2($author$project$Main$init, $author$project$Main$loadContent);
+		},
+		subscriptions: function (_v1) {
+			return $elm$core$Platform$Sub$none;
+		},
+		update: $author$project$Main$update,
+		view: $author$project$View$view
+	});
+_Platform_export({'Main':{'init':$author$project$Main$main(
+	$elm$json$Json$Decode$succeed(_Utils_Tuple0))(0)}});}(this));+
\ No newline at end of file
diff --git a/src/View.elm b/src/View.elm
@@ -3,7 +3,7 @@ module View exposing (view)
 import Types exposing (..)
 import Editor exposing (editor)
 
-import Html exposing (Html, Attribute, div, img, button, a, text)
+import Html exposing (Html, Attribute, div, img, button, a, span, text, h1, header)
 import Html.Events exposing (onClick, on)
 import Html.Attributes exposing (id, class, src, href, target, rel, alt)
 import Html.Lazy exposing (lazy)
@@ -14,7 +14,7 @@ import Regex exposing (Regex, Match, replace)
 
 view : Model -> Document Msg
 view model =
-    { title = "RawSvg"
+    { title = "SVG Editor"
     , body =
         case model.load of
             Loading -> []
@@ -25,29 +25,27 @@ view model =
 container : Model -> Html Msg
 container model =
     div [ id "container", class (if valid model.status then "valid" else "error") ]
-        [ div [ id "title" ]
-            [ logo
-            , link [ href "https://github.com/GarkGarcia/RawSvg", id "github" ]
-                [ githubIcon ]
-            , link
-                [ href "https://github.com/GarkGarcia/RawSvg/blob/master/LICENSE"
-                , id "copyright"
-                , class "elmsh-comm"
-                , alt "License Information"
-                ] [ text "<!-- GarkGarcia (C) 2019 -->" ]
-            ]
+        [ header [] [ h1 [] [ text "SGV Editor" ] ]
         , display model
         , lazy editor model
         ]
 
 display : Model -> Html Msg
 display model =
-    div [ id "display", class (if darkMode model.mode then "dark" else "light") ]
-        [ img [ id "image", src (uri model), loaded model, alt "Picture Display" ] []
+    div [ id "display"
+        , class (if darkMode model.mode then "dark" else "light") 
+        ]
+        [ img 
+          [ id "image", src (uri model), loaded model, alt "Picture Display" ] 
+          []
         , errorIcon
-        , button [ onClick Download, alt "Download" ] [ downloadIcon ]
-        , button [ onClick (Upload Requested), alt "Upload" ] [ uploadIcon ]
-        , button [ onClick ToggleDarkMode, alt "Toggle Dark Mode" ] [ bulbIcon model.mode ]
+        , button [ onClick Download, alt "Download File" ] [ downloadIcon ]
+        , button 
+            [ onClick (Upload Requested), alt "Upload File" ] 
+            [ uploadIcon ]
+        , button 
+            [ onClick ToggleDarkMode, alt "Toggle Dark Mode" ] 
+            [ bulbIcon model.mode ]
         ]
 
 uri : Model -> String
@@ -128,4 +126,4 @@ errorIcon : Html Msg
 errorIcon = img [ id "error", src "assets/error.svg", alt "Something Went Wrong" ] []
 
 githubIcon : Html Msg
-githubIcon = img [ src "assets/github.svg", alt "Github Repository" ] []-
\ No newline at end of file
+githubIcon = img [ src "assets/github.svg", alt "Github Repository" ] []
diff --git a/styles.css b/styles.css
@@ -1,4 +1,4 @@
-@import url("https://fonts.googleapis.com/css?family=B612+Mono&display=swap");
+@import url('https://pablo.escobar.life/css/styles.css');
 
 :root {
     align-self: center;
@@ -6,25 +6,15 @@
     align-items: center;
     
     cursor: default;
-    -webkit-user-select: none; /* Safari */        
-    -moz-user-select: none; /* Firefox */
-    -ms-user-select: none; /* IE + Edge */
-    user-select: none; /* Standard */
-
-    scrollbar-width: none; /* Firefox */
-    -ms-overflow-style: none; /* IE + Edge */
+    user-select: none;
+    scrollbar-width: none;
 
     transition: background-color .5s ease, color .5s ease;
 
-    /*
-        Color scheme based on Ahmad Awais's Shades of Purple theme:
-        https://github.com/ahmadawais/shades-of-purple-vscode
-    */
-
-    --background: #2D2B55;
+    --background: #0d1928;
     --selection: #A599E940;
-    --light: #eeeeff;
-    --dark: #000022;
+    --foreground: #dfdfdf;
+    --dark: #000011;
 
     --tag: #9EFFFF;
     --prop: #FAD000;
@@ -37,8 +27,6 @@
         --large: 10vmax;
         --small: 2.5vmax;
         --tiny: 1vmax;
-
-        font-size: .175in;
     }
 }
 
@@ -47,8 +35,6 @@
         --large: 15vmax;
         --small: 3vmax;
         --tiny: 2vmax;
-
-        font-size: .25in;
     }
 }
 
@@ -101,11 +87,6 @@ body > div#container {
     }
 }
 
-body, body * {
-    font-family: "B612 Mono", monospace;
-    color: var(--light);
-}
-
 body > div#container > div#title {
     grid-area: title;
 
@@ -114,36 +95,16 @@ body > div#container > div#title {
     overflow: hidden;
 }
 
-body > div#container > div#title > * {
+header * {
     overflow: hidden;
     white-space: nowrap;
 }
 
-body > div#container > div#title > img {
-    max-height: 100% !important;
-    max-width: calc(22 * var(--tiny));
-}
-
-body > div#container > div#title > a#github {
-    display: inline-block;
-
-    width: calc(4 * var(--tiny));
-    height: calc(4 * var(--tiny));
-
-    margin: 0 var(--tiny);
-    padding: 0;
-}
-
-body > div#container > div#title > a > img {
-    width: 100% !important;
-    height: 100% !important;
+header h1 {
+  width: max-content;
 }
 
-body > div#container > div#title > a#copyright {
-    font-size: .75rem;
-    font-weight: bold;
-    line-height: calc(4 * var(--tiny));
-
+body > div#container > header > a#site-link {
     float: right;
 }
 
@@ -173,8 +134,7 @@ body > div#container > div#display {
     grid-gap: calc(2 * var(--tiny));
     padding: calc(2 * var(--tiny));
 
-    background: var(--light);
-    border-radius: var(--tiny);
+    background: var(--foreground);
 
     box-shadow: 0 0 calc(.25 * var(--small)) .5vmax #00000015;
 }
@@ -223,10 +183,7 @@ body > div#container > div#editor {
     height: 100%;
 
     overflow: hidden;
-}
-
-body > div#container > div#editor * {
-    font-family: "B612 Mono", monospace;
+    line-height: 1em;
 }
 
 body > div#container > div#editor > * {
@@ -252,12 +209,14 @@ body > div#container > div#editor > textarea {
     background: transparent;
 
     color: transparent;
-    caret-color: var(--light);
+    caret-color: var(--foreground);
 
     overflow: scroll;
 
-    scrollbar-color: var(--light) transparent;
+    scrollbar-color: var(--foreground) transparent;
     scrollbar-width: thin;
+
+    line-height: 1.25;
 }
 
 body > div#container > div#editor > textarea::-webkit-scrollbar {
@@ -271,12 +230,13 @@ body > div#container > div#editor > textarea::-webkit-scrollbar-track {
 }
 
 body > div#container > div#editor > textarea::-webkit-scrollbar-thumb {
-    background: var(--light);
+    background: var(--foreground);
     outline: none;
 }
 
 body > div#container > div#editor > textarea::selection {
     background: var(--selection);
+    color: transparent;
 }
 
 body > div#container > div#editor > textarea::-moz-selection {
@@ -288,7 +248,7 @@ body > div#container > div#editor > textarea::-moz-selection {
     color: var(--comm);
 }
 
-.elmsh , .elmsh7 { color: var(--light); }
+.elmsh , .elmsh7 { color: var(--foreground); }
 .elmsh1, .elmsh2, .elmsh6 { color: var(--string); }
 .elmsh3, .elmsh4 { color: var(--tag); }
 .elmsh5 { color: var(--prop); }